| | 1 | This page is for notes and design considerations for the next version of |
| | 2 | tahoe's mutable files. NewCapDesign includes a lot of desired features, this |
| | 3 | page is about the backend layout that would make those features possible. |
| | 4 | |
| | 5 | * #217 contains a lot of the original notes. |
| | 6 | * #492 adds a ciphertext hash tree |
| | 7 | * #794 is about creating writecaps from passphrases |
| | 8 | * #795 is about append-only filecaps, #796 is closely related |
| | 9 | * #308 is about deep-traversal dircaps, which will require support from the |
| | 10 | underlying mutable files |
| | 11 | |
| | 12 | = Yay ECDSA = |
| | 13 | |
| | 14 | Once we have ECDSA (#331), we'll have a general-purpose signing primitive |
| | 15 | with short fields (K=kappa bits for the signing key, 2K for the verifying |
| | 16 | key, and 4K for the signature, with an expected K=128bits, so 16-byte signing |
| | 17 | keys, 32-byte verifying keys, and 64-byte signatures). Our current RSA-based |
| | 18 | signatures use 1216-*byte* signing keys, 292-byte verifying keys, and |
| | 19 | 256-byte signatures. |
| | 20 | |
| | 21 | The RSA fields are so large that we clearly cannot put them in the filecaps, |
| | 22 | so the encoding scheme requires them to be stored in the shares, encrypted |
| | 23 | and hashed as necessary. The DSA keys are short enough (in most cases) to put |
| | 24 | directly in the filecap, simplifying the design considerably. |
| | 25 | |
| | 26 | = Desired Features = |
| | 27 | |
| | 28 | * fewer roundtrips: mutable retrieve must currently fetch the pubkey (or |
| | 29 | encrypted privkey) from at least one server, which complicates the state |
| | 30 | machine and can add roundtrips when we guess incorrectly about a good |
| | 31 | amount of data to fetch on the initial read |
| | 32 | * offline attenuation: it should be possible to attenuate/diminish the |
| | 33 | writecap into the readcap without retrieving any shares, otherwise |
| | 34 | operations like adding a child dircap to a parent directory will be much |
| | 35 | slower (a roundtrip per child). |
| | 36 | * writecap -> readcap -> deep-traversal-cap -> verifycap . This requires |
| | 37 | some form of intermediate key scheme. |
| | 38 | * server-side share validation |
| | 39 | * one option is to get rid of the "write-enabler" shared secret and rely |
| | 40 | upon server validation exclusively. This would make share migration |
| | 41 | easier and remove one need for an encrypted channel (lease secrets would |
| | 42 | continue to need protection unless/until they too are replaced with |
| | 43 | signature verification). However, it would also increase server load. |