[tahoe-lafs-trac-stream] [tahoe-lafs] #510: use plain HTTP for storage server protocol
tahoe-lafs
trac at tahoe-lafs.org
Wed Jun 29 01:26:45 PDT 2011
#510: use plain HTTP for storage server protocol
------------------------------+---------------------------------
Reporter: warner | Owner:
Type: enhancement | Status: new
Priority: major | Milestone: 2.0.0
Component: code-storage | Version: 1.2.0
Resolution: | Keywords: standards gsoc http
Launchpad Bug: |
------------------------------+---------------------------------
Comment (by warner):
Some notes from the 2011 Tahoe Summit:
We can't keep using shared-secret prove-by-present-it write-enablers
over a non-confidential HTTP transport. One approach would be to use a
verifying key as the write-enabler, and sign the serialized mutation
request message, but that would impose a heavy CPU cost on each write (a
whole pubkey verification).
A cheaper approach would use a shared-secret write-enabler to MAC the
mutation request. To get this shared secret to the server over a
non-confidential channel, we need a public-key encryption scheme. The
scheme David-Sarah and I cooked up uses one pubkey-decryption operation
per server connection, and avoids all but one verification operation per
re-key operation. Normal share mutation uses only (cheap) symmetric
operations.
Basically, each client/server pair establishes a symmetric session key
as soon as the connection is established. This involves putting a public
encryption key in the #466 signed-introducer announcement, maybe as
simple as a DH g^x^ parameter (probably an elliptic-curve group
element). At startup, the client picks a secret, creates g^y^, sends it
in a special message to the server, and the resulting shared g^xy^ is
the session key. The client could use a derivative of their persistent
master secret for this, or it could be random each time, doesn't matter.
The session key is used in an authenticated-encryption mode like CCM or
basic AES+HMAC. When a #1426 re-key operation is performed, the signed
please-update-the-write-enabler message is encrypted with the session
key, protecting the WE from eavesdroppers. The server checks the re-key
request's signature and stores the new WE next to the share.
To actually authorize mutate-share operations, the request is
serialized, then MACed using the WE as the secret key. Requests without
a valid MAC are rejected. This uses only cheap hash operations for the
mutation requests. The expensive pubkey ops are only used once per file
per serverid-change (migration) during re-keying, and one per connection
to establish the session key.
--
Ticket URL: <http://tahoe-lafs.org/trac/tahoe-lafs/ticket/510#comment:11>
tahoe-lafs <http://tahoe-lafs.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list