IETF-SSH archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Authenticated cipher modes
On Thu, 21 Apr 2005, Henrick Hellström wrote:
[ Using counters as nonces in authenticated ciphers ]
I'd say that is not a good idea. The best way is to use random per packet 
nonces sent explicitly by the sender, and process the sequence number as 
implicit unencrypted header data. This operation is supported by Helix, CCM 
and EAX. (OCB doesn't support processing of unencrypted header data, but is 
designed for nonces that are sequence numbers).
As far as I can see, CCM and EAX aren't interesting, since they're no 
cheaper than using a separate block cipher and MAC.  That suggests that we 
should be concentrating on OCB and Helix at present, which appear to have 
rather different requirements from one another.
I am not sure exactly how you would implement your solution, but there are 
two things to keep in mind:
* There are differential attacks against Helix that exploit repeated nonces. 
Given the nature of differential attacks and how the nonce is processed by 
Helix, I guess the only safe way to prevent them would be to use 
independently random nonces. Simply incrementing the nonce by one for each 
packet would result in nonces with a pair-wise low hamming difference. That 
gives me chills rather than a warm fuzzy feeling.
Having read Muller's FSE2004 paper, I agree -- feeding related nonces to 
Helix looks like being a bad idea, though this is obviously not a problem 
for OCB.
Thus, I think we have two situations:
For OCB, the nonce can be a counter (initialised by the IV from KEX), and 
the SSH sequence number need not be directly handled by OCB at all.
For Helix, the nonce needs to be effectively random.  I see two obvious 
ways of achieving this:
1: Generate a random nonce for each message and send it with the nonce.
   This adds extra data to each packet, but is probably relatively cheap.
   It requires that the SSH sequence number be processed as header data by
   Helix.
2: Feed a counter through a one-way function (either a block cipher or a
   hash) to generate the nonce.  This is more expensive (at least if you
   use a hash), but saves on network traffic and means that the sequence
   number is implicit in the nonce so that it need not be processed by
   Helix (though it may as well be, since doing so is cheap).
--
Ben Harris
Home |
Main Index |
Thread Index |
Old Index