BlockTree.tex 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. \documentclass{book}
  2. \usepackage{amsfonts,amssymb,amsmath,amsthm}
  3. \usepackage[scale=0.80]{geometry}
  4. \usepackage{hyperref}
  5. \begin{document}
  6. \tableofcontents
  7. \chapter{System Overview}
  8. The development of the internet was undoudedtly one of the greatest achievements in the 20th
  9. century, and the internet's killer app, the web, has reshaped our lives and the way we do
  10. business. But, for all the benefits we have received from these technologies there have
  11. corresponding costs. It's now possible to cheaply surveil entire popluations and discern their
  12. preferences and responses so that propaganda can be effectively created and distributed. The
  13. surveilence it not surepticious, it's quite overt. Consumers hand over this data willingly to
  14. tech companies because of the benefits they receive in return. But why should people be forced to
  15. choose between privacy and convenience?
  16. The cost of computing power, storage, and bandwidth are not very cheap. A single board computer
  17. can provide more than enough computing power for the average web-browsing consumer. A classic rotating magnetic hard drive can hold terrabytes of data, more than enough to hold an individuals
  18. social media output. Broadband internet access is not universal, but it is very common, and
  19. becoming more so all the time. So with all these resources available, why is it that consumers do
  20. not more control over the computing infrastructure upon which they rely?
  21. The answer is of course obvious. Consumers' don't want to manage servers, networking, routing, and
  22. backup strategies. Each of these can be a full time job by iteself, so in order for a consumer to
  23. be in control of their own infrastructure, the infrastructure needs to be able to take care of
  24. itself.
  25. Perhaps as important as consumer agency over their computing infrastructure, is the security of
  26. that infrastructure. Time and time again consumer trust has been violated by data breaches and
  27. service disruptions. These incidents show the need for a more secure and standardized system for
  28. storing application data and building web services. Such a system must provide both
  29. confidentiality of consumer data, and the ability to authenticate consumers without the
  30. need for insecure techniques, such as passwords.
  31. This document proposes a potential solution. It describes a system for organizing information into
  32. trees of blocks, distributing those blocks over a network of nodes, and a programming interface
  33. to access this information in a convenient way for a programmer. Because no one piece of hardware
  34. is infallible, the system also includes mechanisms for nodes to contract with one another to store
  35. data. This allows data to be backed up and later restored in the case a node is lost. In order to
  36. ensure the free exchange of data amongst nodes, a currency will be used to account for the
  37. available computing capacity of the network.
  38. The remainder of this chapter will give an overview of the different system areas.
  39. \section{Blocks}
  40. The basis of all trust in the system is a public-private keypair. The secrecy of the private key
  41. is the linchpin of all security in the system. If this key is compromised then all confidentiality
  42. and authenticity assurances go out the window. Further, if this key is lost, then control of the
  43. resources over which it has agency over is also lost.
  44. Because of this, it's very important to take protect this key by storing it in a secure location.
  45. It is envisioned that a TPM will be used for this purpose. A TPM will be important for other
  46. system features, as we'll see later.
  47. All data stored in the system is put into data structures called blocks. Each block has a path
  48. which describes it's location in the tree. The root of this path is always a hash (hex encoded)
  49. of the public key corresponding to the private key which is the root of trust for the tree. The
  50. root block is encrypted by a symmetric cipher using a randomly generated key, which is referred
  51. to as the block key. This key is then
  52. encrypted using the root public key and added to the block. This is a standard key encapsulation
  53. scheme. For all non-root blocks in the tree, their block key is encrypted using the block key of
  54. their parent, and then stored in the block. This ensures that we can allow a party access to all
  55. blocks in a subtree by simply encrypting the block key at the root of that subtree using the
  56. party's public key. This mechanism will be used later to give node's that are controlled by the
  57. root selective access to data stored in the tree.
  58. Integrity assurance of the block's content is assured by a digital signature. A certificate chain
  59. starting with the root key and ending with the key used by make this signature is included with
  60. the block. In this way any node which has been issued a certificate using the root key is able to
  61. write data into the tree. All data in the block is covered by the signature (except the signature itself of course). In particular the path of the block is covered, which means that all
  62. information needed to verify the authenticity of a block is included in it.
  63. The size of each block has yet to be determined. It's envisioned that they will be fairly large,
  64. on the order of 4 MB, so as to amortize the overhead of storing a certificate chain, and
  65. encapsulated keys as well as the cost of cryptographic operations.
  66. \section{Fragments}
  67. By itself this block structure would be useful for building a secure filesystem, but in order to
  68. be a durable storage system it needs an efficient way of backing up, or distributing data. This
  69. is the purpose of fragments.
  70. Blocks are distributed amongst nodes in the network by using a fountain code. The output symbols
  71. of this code are referred to as fragments. A code with a high performance implementation and good
  72. coding efficiency is an important design consideration for the system. For these reasons it's
  73. envisioned that the RaptorQ code will be used.
  74. After a block is created the creating node will need to distribute the data in the block to other
  75. nodes to ensure it's persistence in case it fails. It will create fragments as needed and solicit
  76. other nodes for their storage. Currency controlled by the root key will be exchanged with these
  77. other nodes in exchange for contracts to store the fragments.
  78. When a node needs to rebuild data that was previously distributed in fragments, it conects to a
  79. subset of nodes containing fragments and downloads in parallel enough fragments to reconstruct the
  80. block. This same mechanism can be used to distribute block data to unaffiliated nodes in the
  81. network. It is a convenient load balancing and performance improvement, as the parallel downloads
  82. spread the load over multiple nodes and are not limited by the bandwidth between any pair.
  83. Much attention will be given to the system used to keep track of which node has the fragments
  84. of a given block, and how nodes contract with each other for the storage and distribution of
  85. fragments.
  86. \section{Nodes and the Network}
  87. Each node in the network is identified by a public-private keypair and is issued a certificate
  88. trusted by the public root key. Nodes can be claimed by issuing them a certificate and
  89. then writing
  90. that certificate into the public blocktree. When a new node is claimed, currency is deposited into
  91. the account of the root key which claimed it. This currency is to account for the storage capacity
  92. that the new node brings to the network. This mechanism is the reason why the node must have a
  93. certificate trusted by the public root key, otherwise there would be no way to control the
  94. creation of currency.
  95. Nodes are identified by the hex encouding of the hash of their public key. This string is written
  96. into directory blocks to keep track of which nodes contain fragments of blocks in that directory.
  97. In order for this information to be useful, a mechanism is needed to resolve node IDs to IP
  98. addresses. This is accomplished by writing a block into the public blocktree with the node's
  99. IP address which is signed by the node's private key. Anytime the node receives a new IP address,
  100. it updates this block to inform the network of this change. Because the node's ID is derived from
  101. its private key, and the block containing its IP address is signed with this key, it's possible
  102. for a third party to independently verify that this IP address is authentic.
  103. When a node is given access to a blocktree, by issuing it a certificate, it is assigned a path
  104. under which its data will be stored. This path is referred to as the node's home. This path is
  105. written into the node's certificate. Thus a node's home is cryptographically verifiable and must
  106. be chosen when the node joins the blocktree. The node which issues the new node it's certificate
  107. grants the new node access to the block at its home path by encapsulating the block's key using
  108. the node's public key. Thus the new node can recover the block key and read the contents of its
  109. home block. If a node has its home at a block then its ID is written into the block.
  110. The data created by a node may optionally replicated to its parent node. This would be suitable
  111. for a lightweight or mobile device which needs to ensure its data is replicated immediately and
  112. doesn't have time to negotiate contracts for the storage fragments. However, for larger
  113. blocktrees, having non-replicating nodes is essential for scalability.
  114. More than one node can be housed at the same path, such nodes are called a cluster.
  115. Each node in the cluster stores
  116. copies of the same data and they coordinate with each other to ensure the consitency of this
  117. data. This is accomplished by electing a leader. All writes to blocks under the nodes home are
  118. sent to the leader. The leader then serializes these writes and sends them to the rest of the
  119. nodes. By default writes to blocks use optimistic concurrency, with the last write known to the
  120. leader being the winner. But if a node requires exclusive access to the data in a block it can
  121. request to the leader to lock it. Writes from nodes other than the locking node are rejected until
  122. the lock is released. The leader will release the lock on its own if no messages are received from
  123. the locking node after a timeout.
  124. If a path is configured to be replicated to its parent, then the leader at that path will maintain
  125. a connection to the the leader in a parent cluster. Note that the parent cluster need not be
  126. housed in the parent block, just at some ancestor block. Then, writes will be propagated through
  127. this connection to the parent cluster, where this process may continue if that cluster is also
  128. configured for replication. Distributed locking is similarly comunicated to the parent cluster,
  129. where the lock is only aquired with the parent's approval.
  130. \section{Programmatic Access to Data}
  131. No designer can hope to envsion all the potential applications that a consumer would want to have
  132. access to their data. That's why an important component of the system is the ability to run
  133. programs that can access data and provide services to other internet hosts, whether they are
  134. blocktree nodes or not. This is accomplished by providing a WebAssembly based execution
  135. environment with a system interface based on WASI. Information in the blocktree is available
  136. to programs using standard filesystem system calls that specify paths in a special directory.
  137. While some programs may wish to access blocks directly in this manner, others may wish to use
  138. an API at a higher level of abstraction. Thus there is also an API for creating arbitrarily sized
  139. files that will get mapped to fixed sized blocks, freeing the programmer from having to implment
  140. this themselves.
  141. Data provided by these filesystem APIs will be the most up-to-date versions known to the node.
  142. There's the possiblity that conflicts with other nodes may cause writes made by programs on the
  143. node to be rolled back or overwritten. Of course locks can be taken on files and blocks if a
  144. program must ensure exclusive access to data. Finally, an inotify-like API is provided for programs to be notified when changes to blocks occur.
  145. An important consideration for the design of this system was to facilitate the creation of web
  146. servers and other types of internet hosts which can serve data stored in a blocktree. For this
  147. reason there is a high level callback based API for declaring HTTP handlers, as well as handlers
  148. for blocktree specific messages.
  149. In order to provide the consumer with control over how their data is used a permissions system
  150. exists to control which blocks and APIs programs have access to. For instance a consumer would
  151. have to grant special permission for a program to be able to access the Berkeley sockets API.
  152. Programs are installed by specifing a blocktree path. This is a secure and convenient method of
  153. distribution as these programs can be downloaded from the nodes associated with the root of their
  154. path and the downloaded blocks can be cryptographically verified to be trusted by the root
  155. key. Authors wishing to distribute their programs in this manner will of course need to make the
  156. blocks containing them public (unencrypted), or else provide some mechanism for selective access.
  157. \chapter{Data Structures}
  158. \chapter{Nodes}
  159. \chapter{The Network}
  160. \chapter{Application Programming Interface}
  161. \chapter{Example Applications}
  162. \end{document}