| | 2 | |
| | 3 | Described in http://allmydata.org/pipermail/tahoe-dev/2010-February/003910.html as follows: |
| | 4 | |
| | 5 | {{{ |
| | 6 | Dear people of tahoe-dev: |
| | 7 | |
| | 8 | I've been hosting my blog on Tahoe-LAFS since July, 2008. That's 18 |
| | 9 | months now! Amazing. There are now a lot of copies out there of the |
| | 10 | URL to my blog, which is: |
| | 11 | http://testgrid.allmydata.org:3567/uri/URI:DIR2-RO:j74uhg25nwdpjpacl6rkat2yhm:kav7ijeft5h7r7rxdp5bgtlt3viv32yabqajkrdykozia5544jqa/wiki.html |
| | 12 | . (The URL to my blog includes, of course, the read-cap to my blog.) |
| | 13 | |
| | 14 | I was thinking recently about what will happen we deploy New Cap |
| | 15 | Design and I want to upgrade my blog to take advantage of the new |
| | 16 | style caps. When I do so the read-cap will have to change. I would |
| | 17 | want to preserve the unforgeability property -- the guarantee that if |
| | 18 | you have the read-cap to my blog you can't be tricked into accepting a |
| | 19 | forged document that was generated without the write-cap to my blog. |
| | 20 | |
| | 21 | Of course, I could just add a new blog entry in my old blog saying "My |
| | 22 | blog has now moved to $HERE, please update your bookmarks |
| | 23 | accordingly.", with the new read-cap. This would preserve the |
| | 24 | unforgeability property, but it can take a long time for everyone in |
| | 25 | the world to update their bookmarks, and the longer it takes the |
| | 26 | longer those people would be vulnerable to forgeries (by an attacker |
| | 27 | who succeeds at cracking the RSA digital signatures that provide the |
| | 28 | unforgeabilithy of my old blog). Also, asking them to do this is a |
| | 29 | hassle, so I would not do it unless the old cap style had become |
| | 30 | *really* old and troublesome -- I would keep using the old cap for a |
| | 31 | long time just to avoid this "manually asking people to change their |
| | 32 | links". |
| | 33 | |
| | 34 | Also, this text "My blog has now moved to $HERE" is not standardized |
| | 35 | and machine-readable, so you can't write a script that will reliably |
| | 36 | detect this sort of note and update your bookmarks for you. |
| | 37 | |
| | 38 | Then I had an idea: secure HTTP 301 Moved Permanently! |
| | 39 | |
| | 40 | We could extend the Tahoe-LAFS cap format so that when you ask for the |
| | 41 | current version, there is a special symbol along with a new read-cap |
| | 42 | (out-of-band of the file contents so that there is no ambiguity about |
| | 43 | file contents versus the 301 Moved Permanently symbol). This special |
| | 44 | symbol means that the client should download the new read-cap, |
| | 45 | remember for future reference that any attempt to load the old |
| | 46 | read-cap should instead use the new read-cap, and then (if possible) |
| | 47 | fetch the contents of the file using the new readcap. |
| | 48 | |
| | 49 | Note that this dovetails very nicely with my previous proposal for |
| | 50 | write-cap revocation (#954). If you are going to issue a secure LAFS |
| | 51 | 301 Moved Permanently, then you also want to petrify that file so that |
| | 52 | nobody can later change it. |
| | 53 | |
| | 54 | Note that the part about the client "remembering for future reference" |
| | 55 | suggests the existence of a client-side database which records the |
| | 56 | fact that a specific URL has been 301'ed and optimizes out the step of |
| | 57 | looking up the old location next time. This might fit in well with the |
| | 58 | backupdb, which already likes to remember a few key facts about files |
| | 59 | and directories to optimize backups. It might also be a good idea to |
| | 60 | update parent directories which point to that file or directory with |
| | 61 | the 301 information (#956). |
| | 62 | |
| | 63 | This is a forward-compatibility issue because, as in the case of my |
| | 64 | blog, the sooner we can rely on this feature the easier we can upgrade |
| | 65 | to future versions of caps. I've created #958 to track this issue. |
| | 66 | |
| | 67 | Regards, |
| | 68 | |
| | 69 | Zooko |
| | 70 | |
| | 71 | http://allmydata.org/trac/tahoe-lafs/ticket/954# revoke write authority |
| | 72 | http://allmydata.org/trac/tahoe-lafs/ticket/955# use client-side |
| | 73 | storage to defend against rollback attack |
| | 74 | http://allmydata.org/trac/tahoe-lafs/ticket/956# embed security |
| | 75 | metadata in parent directory |
| | 76 | http://allmydata.org/trac/tahoe-lafs/ticket/957# embed security metadata in URL |
| | 77 | http://allmydata.org/trac/tahoe-lafs/ticket/958# LAFS 301 Moved Permanently |
| | 78 | }}} |