[AFS3-std] rxgk: Rekeying

Jeffrey Hutzelman jhutz@cmu.edu
Sun, 22 Nov 2009 22:29:43 -0500


--On Wednesday, October 14, 2009 05:50:17 PM -0400 Marcus Watts 
<mdw@umich.edu> wrote:

> So, for instance, if the client is in the middle of a bulk data write,
> and the server decides to return "VICETOKENDEAD", then on the client
> there is a problem.  The client has no way to know how much of the
> write was accepted by the server before the error was returned

Sure it does.  RPC's are atomic.  If the RPC failed, it failed, period. 
The server is responsible for ensuring that it has not committed any change 
(note that in practice, OpenAFS doesn't actually do this, which means it is 
already possible for things to break).

Note that any of the failure modes you describe can happen today with an 
expired token.

> 2/
> For key version numbers, wraparound should not be a real problem.
> You don't need to send the whole version number, you only need to send
> the least significant bits - enough to distinguish between "old" and
> "new".  Of course you still need to store the whole thing at both ends

That depends on whether key version numbers are just versions, or actual 
counters used to produce a derived key.  If the former, you don't need to 
store the whole thing anywhere; you'll only have a few relevant ones at a 
time, and it's well-understood how to handle operations on mod-n sequence 
number spaces.

> On the wire, one bit is probably sufficient

Nope.  If the current key is represented by value 0, does 1 mean the next 
key or the last one?  You need a few bits, depending on how many keys might 
be relevant.  Again, this sort of sequence number is fairly well 
understood; see TCP.

-- Jeff