57 | | no problem with those -- see Twitter. See below for notes on |
58 | | cap length. |
| 58 | no problem with those -- see Twitter. |
| 59 | * I (warner) am curious about where the suspicion comes from. Do long URLs |
| 60 | make people think they're being attacked, some sort of browser buffer |
| 61 | overrun thing? Or that they're being phished, with a URL that a human |
| 62 | would evaluate differently than their browser? I agree that people |
| 63 | (including me) don't like long URLs, but I've never pushed anyone to |
| 64 | explain the "suspicion" aspect. One comment in #217 says "smells a bit |
| 65 | spammy", and a later one says "Spooks me every time". |
| 87 | |
| 88 | == make them long enough to be secure == |
| 89 | |
| 90 | We want filecaps to be as possible, but no shorter. There are |
| 91 | several lower bounds on the length: |
| 92 | |
| 93 | * confidentiality: A large computing effort should not be able |
| 94 | to obtain the plaintext of a tahoe file without knowing the |
| 95 | readcap. We require reasonable margin against improvements in |
| 96 | hardware speed and organization efficiency/motivation of |
| 97 | distributed efforts (e.g. could a million PS3 owners break a |
| 98 | filecap?). This currently implies a 128 bit confidentiality |
| 99 | field. |
| 100 | * integrity: a large computing effort should not be able to |
| 101 | produce shares which will be accepted by the readcap holder |
| 102 | but which do not result in the same file as created the |
| 103 | original uploader (and retrieved by other downloaders). We |
| 104 | desire all three of the standard hash properties (collision |
| 105 | resistance, first-pre-image resistance, second-pre-image |
| 106 | resistance) to also apply to tahoe immutable files and their |
| 107 | filecaps. This currently implies a 128bit (or 256bit?) |
| 108 | integrity field. |
| 109 | * variable-length integrity field (#102, comment 16+17), |
| 110 | allowing users to decide between short caps and strong |
| 111 | integrity guarantees |
| 112 | * storage collision resistance (#753): a Tahoe grid should be |
| 113 | able to store trillions of files and still have a vanishingly |
| 114 | small chance of two files using the same storage-index (and |
| 115 | thus confusing each other's shares). The storage-index is |
| 116 | generally compressed out of the filecap, by deriving it with |
| 117 | various hashing stages on the other filecap parameters. The |
| 118 | shortest value in this derivation chain must be at least |
| 119 | 128bits long, and preferably about 192bits long. |
| 120 | |
| 121 | |
| 122 | == other features == |
| 123 | |
86 | | Writeable Mutable" and {{{FRI..}}} for "File Readonly Immutable". If these |
87 | | are jammed against the (base62) crypto bits it may be difficult to tell |
88 | | where the prefix ends and the crypto bits begin, especially because the |
89 | | crypto bits will be using the same character set ({{{FRIDWM...}}}). It |
90 | | might be a good idea to separate the type prefix from the cryptobits: |
91 | | {{{FRI-cryptobits}}} or {{{FRI/cryptobits}}}. |
| 130 | Writeable Mutable" and {{{FRI..}}} for "File Readonly Immutable" (#102 |
| 131 | comment 12). If these are jammed against the (base62) crypto bits it may |
| 132 | be difficult to tell where the prefix ends and the crypto bits begin, |
| 133 | especially because the crypto bits will be using the same character set |
| 134 | ({{{FRIDWM...}}}). It might be a good idea to separate the type prefix |
| 135 | from the cryptobits: {{{FRI-cryptobits}}} or {{{FRI/cryptobits}}}. |
113 | | * provide for verifycaps, repaircaps, and traversalcaps. Repaircaps in |
114 | | particular may require a grant of storage authority, which might entail a |
115 | | cap format that can accept arbitrary extra non-hierarchical fields. |
116 | | Appendcaps or "drop-box" writecaps might fall into this same space. But |
117 | | remember that URIs should identify objects, not the action that you want |
118 | | to do on it: a webapi scheme may use a POST/PUT/DELETE method, or append a |
119 | | t=json adverb, or alternatively encode the verb/adverb into the HTTP url |
120 | | (think {{{GET .../filecap/json}}} or {{{PUT unlinked/ciphertext}}}), but |
121 | | these are independent of the underlying filecap. |
| 157 | * provide for verifycaps, repaircaps, and traversalcaps (#308, #217). |
| 158 | Repaircaps in particular may require a grant of storage authority, which |
| 159 | might entail a cap format that can accept arbitrary extra non-hierarchical |
| 160 | fields. Appendcaps or "drop-box" writecaps might fall into this same |
| 161 | space. But remember that URIs should identify objects, not the action that |
| 162 | you want to do on it: a webapi scheme may use a POST/PUT/DELETE method, or |
| 163 | append a t=json adverb, or alternatively encode the verb/adverb into the |
| 164 | HTTP url (think {{{GET .../filecap/json}}} or {{{PUT |
| 165 | unlinked/ciphertext}}}), but these are independent of the underlying |
| 166 | filecap. |
130 | | * #102 and #217 have notes on dircaps |
131 | | * #678 (converge same file, same K, different M) |
132 | | |
133 | | == filecap length == |
134 | | |
135 | | We want filecaps to be as possible, but no shorter. There are |
136 | | several lower bounds on the length: |
137 | | |
138 | | * confidentiality: A large computing effort should not be able |
139 | | to obtain the plaintext of a tahoe file without knowing the |
140 | | readcap. We require reasonable margin against improvements in |
141 | | hardware speed and organization efficiency/motivation of |
142 | | distributed efforts (e.g. could a million PS3 owners break a |
143 | | filecap?). This currently implies a 128 bit confidentiality |
144 | | parameter. |
145 | | * integrity: a large computing effort should not be able to |
146 | | produce shares which will be accepted by the readcap holder |
147 | | but which do not result in the same file as created the |
148 | | original uploader (and retrieved by other downloaders). We |
149 | | desire all three of the standard hash properties (collision |
150 | | resistance, first-pre-image resistance, second-pre-image |
151 | | resistance) to also apply to tahoe immutable files and their |
152 | | filecaps. This currently implies a 128bit (or 256bit?) integrity |
153 | | parameter. |
154 | | * storage collision resistance (#753): a Tahoe grid should be |
155 | | able to store trillions of files and still have a vanishingly |
156 | | small chance of two files using the same storage-index (and |
157 | | thus confusing each other's shares). The storage-index is |
158 | | generally compressed out of the filecap, by deriving it with |
159 | | various hashing stages on the other filecap parameters. The |
160 | | shortest value in this derivation chain must be at least |
161 | | 128bits long, and preferably about 192bits long. |
162 | | |
| 175 | * permit multiple encodings of the same file (same k, different N) to use |
| 176 | each other's shares (#678) |