Random (aka "unpredictable") IV protect against some attacks with certain 
modes. In general, it is enough for the IV to be unique. 

Do you have a specific application in mind? I.e., how do you make sure the 
counter won't wrap around? (Yes I realize in your approach it's 2^32, and it 
counts blocks, not bytes.)

Sent from my iPad

> On Sep 29, 2015, at 17:26, Jean-Pierre Münch <jean-pierre.mue...@web.de> 
> wrote:
> 
> 
> 
>> Am 29.09.2015 um 18:52 schrieb Martin Raiber:
>> Thanks! I did some further research and the general idea seems to be good. 
>> They are even moving from the explicit nonce in TLS v1.1 and v1.2 to (again) 
>> a fully implicit nonce in TLS v1.3 
>> (https://tools.ietf.org/html/draft-ietf-tls-tls13-07 ). 
>> 
>> The implementation I had in the original message, however, is broken. For 
>> AES-GCM it only uses the last 4 bytes for counting, so there is indeed the 
>> danger of wrap-around. Additionally it seeks back to the original nonce on 
>> the end of the message to generate the MAC (see 
>> https://en.wikipedia.org/wiki/Galois/Counter_Mode#/media/File:GCM-Galois_Counter_Mode.svg
>>  ), so the nonces would be reused.
>> 
>> I'm going to do the following:
>> Generate a fully random 96-bit nonce for the first message and transmit that 
>> unencrypted
>> Increment this nonce after every message via IncrementCounterByOne and use 
>> that for the next message
>> That would be nearly identical to the TLS v1.3 scheme, except the nonce is 
>> not partially secret.
> This sounds reasonable and really should be preferred compared to the method 
> of just using *one* IV / nonce more or less statically. BTW this is even 
> better than always choosing a random IV because a) you don't need to transfer 
> those and b) the chance of IV reuse is much lower as you won't expect 
> collisions from simply incrementing.
> 
> BR
> 
> JPM
>> 
>>> On Tuesday, September 29, 2015 at 3:47:26 AM UTC+2, Mouse wrote:
>>> I do not like this. An IV is supposed to be unique per multi-block message, 
>>> within which the increasing counter takes care of individual 128-bit 
>>> blocks. You're trying to treat the data stream as one huge "super-message" 
>>> with one IV. It is a corner that I personally choose not to cut. There are 
>>> too many subtle things (e.g. Counter length, wrap-around, etc) that I 
>>> prefer not to deal with.
>>> 
>>> Having access to the source, you can make that modification for yourself.
>>> 
>>> I will object against including it in the main Crypto++ code base.
>>> 
>>> @Jeffrey, security context is key + IV + counter (which usually is 
>>> implemented as a mutable part of IV). As I understand, the OP wants to keep 
>>> the IV the same across multiple messages, relying on the expectation that 
>>> the counter (a) will not reset from one message to the next, and (b) will 
>>> not wrap around in the process.
>>> 
>>> Sent from my iPad
>>> 
>>> On Sep 28, 2015, at 17:57, Jeffrey Walton <nolo...@gmail.com> wrote:
>>> 
>>>> 
>>>> 
>>>>> I'm using AES-GCM to send multiple messages 
>>>>> (CryptoPP::GCM<CryptoPP::AES>) via AuthenticatedEncryptionFilter.
>>>>> It seems I need to resynchronize the underlying GCM cipher after each 
>>>>> message with a call to Resynchronize which
>>>>> needs a new iv as argument.
>>>>> 
>>>>> I see no reason why this new iv is neccessary. GCM uses a counter, so the 
>>>>> "iv" is a nonce, not necessitating
>>>>> a fully random iv. Internally GCM increments the nonce for every AES 
>>>>> block, so at the point one has to resynchronize it,
>>>>> it is already at a usefull last_iv+1.
>>>>> 
>>>>> Does anything break by extending CryptoPP::GCM by a resynchronize method 
>>>>> which does not change the iv, like:
>>>>> 
>>>>> class CtrNonceGCMEncryption : public CryptoPP::GCM<CryptoPP::AES 
>>>>> >::Encryption {
>>>>> public:
>>>>>     void Resynchronize() { m_state = State_IVSet; }
>>>>> };
>>>>> 
>>>>> and using this method instead (as well as in Decryption)? This would save 
>>>>> on random nonce generation and transmission.
>>>> 
>>>> The reasoning makes sense to me. I don't believe you're violating security 
>>>> requirements because the security context is unique per message.
>>>> 
>>>> The one thing I would verify is GCM's IncrementCounter() function gets 
>>>> called when MessageEnd() is propagated to ensure you're not reusing your 
>>>> accidentally reusing the last IV. That's the sort of optimization (defer 
>>>> on the increment unless its needed) Wei would provide.
>>>> 
>>>> Also see GCM's source at 
>>>> http://www.cryptopp.com/docs/ref/gcm_8cpp_source.html.
>>>> 
>>>> Jeff
>>>> -- 
>>>> -- 
>>>> You received this message because you are subscribed to the "Crypto++ 
>>>> Users" Google Group.
>>>> To unsubscribe, send an email to cryptopp-user...@googlegroups.com.
>>>> More information about Crypto++ and this group is available at 
>>>> http://www.cryptopp.com.
>>>> --- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "Crypto++ Users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to cryptopp-user...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>> -- 
>> -- 
>> You received this message because you are subscribed to the "Crypto++ Users" 
>> Google Group.
>> To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com.
>> More information about Crypto++ and this group is available at 
>> http://www.cryptopp.com.
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Crypto++ Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to cryptopp-users+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> -- 
> You received this message because you are subscribed to the "Crypto++ Users" 
> Google Group.
> To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com.
> More information about Crypto++ and this group is available at 
> http://www.cryptopp.com.
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Crypto++ Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to cryptopp-users+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com.
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to