Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Design principles

The protocol described in this document is based on a set of well-defined design principles. If a problem had multiple solutions the one that was chosen followed those principles best.

  • Whenever possible complicated behaviors aren't specified in the protocol directly, but are an emergent property of other behaviors
  • Keep It Simple, Stupid - the protocol should provide the bare minimum set of primitives required to build other, more complicated behaviors by the application. Every implemented primitive's usage is maximized
  • Occam's Razor - every primitive should work in a straightforward manner. Everything that's not necessary to understand or implement it needs to be cut.
  • Local processing is preferred over sending remote requests (e.g. local garbage collecting vs sending periodic network cleanup requests)
  • The load needs to be balanced evenly between end users (e.g. no superpeers)
  • Increasing anonymity can't come at the cost of network performance. Perfect anonymity is useless if no one will use the service because it's too slow.
  • Loss of anonymity is caused by the user's actions, not by the system.
  • User authentication is based on public-key cryptography and there is no centralized authority for creating new identities. Every connection is based on a zero-trust model by default.