[tahoe-lafs-trac-stream] [tahoe-lafs] #604: one-shot distributed revocable forwarding slots
tahoe-lafs
trac at tahoe-lafs.org
Mon Oct 10 19:57:22 PDT 2011
#604: one-shot distributed revocable forwarding slots
-------------------------------+------------------------
Reporter: warner | Owner:
Type: enhancement | Status: new
Priority: major | Milestone: undecided
Component: code-encoding | Version: 1.2.0
Resolution: | Keywords: revocation
Launchpad Bug: |
-------------------------------+------------------------
Old description:
> I had an idea this morning.. not sure it's actually good for anything,
> but I
> figured I'd write it down just in case.
>
> Suppose that Alice has a static target (say a filecap) that she wants to
> give
> to Bob, but she might change her mind later and decide to take back the
> gift.
> Since the target is static (Alice is granting knowledge of data rather
> than
> performing retrival work on his behalf), once Bob has claimed the gift,
> it
> can no longer be revoked. So in addition to being able to revoke the gift
> up
> to some point, Alice would like to be able to find out when that point
> has
> been passed.
>
> In physical terms, Alice wraps her target in a fragile but opaque box,
> and
> nails it to the ground in a secret location. Then she tells Bob where the
> box
> is located. When Bob opens the box and claims the gift, the box is
> destroyed.
> If/when Alice decides she wants to revoke the gift, she goes to the
> secret
> locations and looks at the box. If the box is unopened, she knows that
> Bob
> has not yet claimed the gift, and she'll be able to revoke it
> successfully
> (she opens the box and takes the target back home with her). If the box
> is
> opened, then Bob has already claimed the gift, and she knows it's too
> late to
> revoke it.
>
> In the Tahoe world, we want this to be distributed: Bob should be able to
> claim an unrevoked gift even if Alice or some number of servers are
> unavailable. (if we could require that Alice was online, this would be a
> pretty trivial job).
>
> The idea I had was:
>
> * on the storage servers, define a "one-shot revocable slot", which is
> referenced by a storage-index, contains a piece of data, and is
> pointed to
> by both an "open-cap" and a "revoke-cap". It also has an "opened"
> flag.
> * if the "open-cap" is used, the opened flag is set, and the data is
> returned
> to the invoker.
> * if the "revoke-cap" is used, the data is erased, and the opened flag
> is
> returned
>
> * Alice encrypts the target into a number of shares using a secret-
> splitting
> scheme (like FEC but the requirement is that having fewer than k
> shares
> gives you no information about the secret). She then encrypts each
> share
> with a different per-server key, and sends each encrypted share to a
> different storage server, along with an open-cap and revoke-cap for
> each.
>
> * Alice gives Bob the storage index and the list of per-server keys, and
> the
> open-cap for each server.
>
> * When Bob wants to claim the target, he uses the storage index to find
> the
> shares, and the open-cap to read them. Then he uses the per-server
> keys to
> decrypt the shares, then undoes the secret-splitting algorithm to
> derive
> the original target.
>
> * If Alice wants to revoke the gift, she uses the revoke-caps to erase
> the
> shares. If any of the shares have been opened, her agent informs her
> that
> she is too late.
>
> Of course, the list of keys and open-caps would be compressed, by
> deriving
> them from some master secret. My hunch is that we could get Bob's claim-
> cap
> down to two crypto values.
>
> Secret-splitting is used to allow Alice to revoke an unclaimed gift even
> if
> she can't get to all N servers (she just has to get to N-k of them). The
> per-server keys are used to prevent multiple servers from colluding to
> learn
> the secret or something.. I haven't worked out this part too carefully.
>
> In general, the storage servers must not be able to learn the secret,
> even if
> they all collude. A single storage server should not be able to make
> Alice
> think that the gift is unopened when Bob has actually already opened it.
>
> One extension is to put multiple open-cap/revoke-cap pairs in each slot,
> and
> make the same gift available to multiple people.
>
> A separate device could be used for mutable slots: in this case,
> "revocation"
> means denying access to versions that are created after some point in
> time.
> My thoughts on this are to have each mutable slot contain a list of
> asymmetric encryption keys (say RSA), one per reader, and a corresponding
> encrypted AES key for each. Every time the slot is mutated, the new
> version's
> AES key is encrypted to each reader and placed in the table. Each reader
> gets
> the corresponding RSA decryption key, and can access the AES key (and
> therefore the real data) by decrypting their row of the table. Revocation
> consists of removing that reader's row from the table.
New description:
I had an idea this morning.. not sure it's actually good for anything, but
I
figured I'd write it down just in case.
Suppose that Alice has a static target (say a filecap) that she wants to
give
to Bob, but she might change her mind later and decide to take back the
gift.
Since the target is static (Alice is granting knowledge of data rather
than
performing retrival work on his behalf), once Bob has claimed the gift, it
can no longer be revoked. So in addition to being able to revoke the gift
up
to some point, Alice would like to be able to find out when that point has
been passed.
In physical terms, Alice wraps her target in a fragile but opaque box, and
nails it to the ground in a secret location. Then she tells Bob where the
box
is located. When Bob opens the box and claims the gift, the box is
destroyed.
If/when Alice decides she wants to revoke the gift, she goes to the secret
locations and looks at the box. If the box is unopened, she knows that Bob
has not yet claimed the gift, and she'll be able to revoke it successfully
(she opens the box and takes the target back home with her). If the box is
opened, then Bob has already claimed the gift, and she knows it's too late
to
revoke it.
In the Tahoe world, we want this to be distributed: Bob should be able to
claim an unrevoked gift even if Alice or some number of servers are
unavailable. (if we could require that Alice was online, this would be a
pretty trivial job).
The idea I had was:
* on the storage servers, define a "one-shot revocable slot", which is
referenced by a storage-index, contains a piece of data, and is pointed
to
by both an "open-cap" and a "revoke-cap". It also has an "opened" flag.
* if the "open-cap" is used, the opened flag is set, and the data is
returned
to the invoker.
* if the "revoke-cap" is used, the data is erased, and the opened flag
is
returned
* Alice encrypts the target into a number of shares using a secret-
splitting
scheme (like FEC but the requirement is that having fewer than k shares
gives you no information about the secret). She then encrypts each
share
with a different per-server key, and sends each encrypted share to a
different storage server, along with an open-cap and revoke-cap for
each.
* Alice gives Bob the storage index and the list of per-server keys, and
the
open-cap for each server.
* When Bob wants to claim the target, he uses the storage index to find
the
shares, and the open-cap to read them. Then he uses the per-server keys
to
decrypt the shares, then undoes the secret-splitting algorithm to
derive
the original target.
* If Alice wants to revoke the gift, she uses the revoke-caps to erase
the
shares. If any of the shares have been opened, her agent informs her
that
she is too late.
Of course, the list of keys and open-caps would be compressed, by deriving
them from some master secret. My hunch is that we could get Bob's claim-
cap
down to two crypto values.
Secret-splitting is used to allow Alice to revoke an unclaimed gift even
if
she can't get to all N servers (she just has to get to N-k+1 of them). The
per-server keys are used to prevent multiple servers from colluding to
learn
the secret or something.. I haven't worked out this part too carefully.
In general, the storage servers must not be able to learn the secret, even
if
they all collude. A single storage server should not be able to make Alice
think that the gift is unopened when Bob has actually already opened it.
One extension is to put multiple open-cap/revoke-cap pairs in each slot,
and
make the same gift available to multiple people.
A separate device could be used for mutable slots: in this case,
"revocation"
means denying access to versions that are created after some point in
time.
My thoughts on this are to have each mutable slot contain a list of
asymmetric encryption keys (say RSA), one per reader, and a corresponding
encrypted AES key for each. Every time the slot is mutated, the new
version's
AES key is encrypted to each reader and placed in the table. Each reader
gets
the corresponding RSA decryption key, and can access the AES key (and
therefore the real data) by decrypting their row of the table. Revocation
consists of removing that reader's row from the table.
--
Comment (by davidsarah):
Correcting "(she just has to get to N-k of them)" in description to "(she
just has to get to N-k+1 of them)".
--
Ticket URL: <http://tahoe-lafs.org/trac/tahoe-lafs/ticket/604#comment:4>
tahoe-lafs <http://tahoe-lafs.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list