crypto_secretbox_easy()/crypto_secretbox_open_easy() и nonce
От: Tasheehoo  
Дата: 07.09.16 14:21
Оценка:
Речь об этом.

Вопрос касается надобности nonce.
Согласно документации:

The nonce doesn't have to be confidential, but it should never ever be reused with the same key. The easiest way to generate a nonce is to use randombytes_buf().

nonce не секретен.

Я в сворей реализации использую для каждого подключения свежесгенеренную пару ключей(и свежесгенеренный nonce) и Diffie-Hellman для получения общего ключа. В этом случае вариант когда я буду использовать один и тот же nonce и один и тот же общий ключ — невозможен.
Вот я и хочу понять, как мне быть с nonce? Я могу захардкодить nonce, чтоб мне не пришлось его синхронизировать на клиенте и сервере?
Отредактировано 07.09.2016 14:22 Tasheehoo . Предыдущая версия .
Re: crypto_secretbox_easy()/crypto_secretbox_open_easy() и nonce
От: Anton Batenev Россия https://github.com/abbat
Дата: 07.09.16 20:55
Оценка:
Здравствуйте, Tasheehoo, Вы писали:

T> Вот я и хочу понять, как мне быть с nonce? Я могу захардкодить nonce, чтоб мне не пришлось его синхронизировать на клиенте и сервере?


Да, можешь, если можешь гарантировать, что один и тот же nonce с одним и тем же ключом не используется для шифрования более чем одного сообщения (не соединения).

Если подходить к вопросу формально, то при "использую для каждого подключения свежесгенеренную пару ключей" ты не можешь гарантировать отсутствия повторения пар ключей так же, как и отсутствие повторения nonce при его случайной генерации (данная проблема рассматривается в "Nonce Generators and the Nonce Reset Problem", Erik Zenner).

Т.е. случайный nonce не является обязательным но рекомендуется для уменьшения вероятности повтора при прочих равных условиях.
Бэкапимся на Яндекс.Диск
Re[2]: crypto_secretbox_easy()/crypto_secretbox_open_easy() и nonce
От: Tasheehoo  
Дата: 08.09.16 08:02
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Если подходить к вопросу формально, то при "использую для каждого подключения свежесгенеренную пару ключей" ты не можешь гарантировать отсутствия повторения пар ключей так же, как и отсутствие повторения nonce при его случайной генерации (данная проблема рассматривается в "Nonce Generators and the Nonce Reset Problem", Erik Zenner).

Из-за использования nonce трафик увеличивается сильно и это особено критично для мобильных приложений.
Может быть не пересылать nonce с каждым сообщением, а только при подключении к серверу, а потом его просто инкрементировать? Кто-то так делает? И какие еще есть варианты?
Re[3]: crypto_secretbox_easy()/crypto_secretbox_open_easy() и nonce
От: Tasheehoo  
Дата: 08.09.16 11:50
Оценка:
Здравствуйте, Tasheehoo, Вы писали:

T>Может быть не пересылать nonce с каждым сообщением, а только при подключении к серверу, а потом его просто инкрементировать?

В таком случае встает вопрос рассинхрона счетчика...
Re[4]: crypto_secretbox_easy()/crypto_secretbox_open_easy()
От: Tasheehoo  
Дата: 08.09.16 11:52
Оценка:
Здравствуйте, Tasheehoo, Вы писали:

T>>Может быть не пересылать nonce с каждым сообщением, а только при подключении к серверу, а потом его просто инкрементировать?

T>В таком случае встает вопрос рассинхрона счетчика...

Наверное лучше с каждым сообщением передавать и счетчик, на значение которого nonce и будет инкрементироваться... Счетчик можно использовать 32ух битный, это лучше чем 192ух битный nonce...
Отредактировано 08.09.2016 11:54 Tasheehoo . Предыдущая версия .
Re[3]: crypto_secretbox_easy()/crypto_secretbox_open_easy() и nonce
От: Anton Batenev Россия https://github.com/abbat
Дата: 08.09.16 15:23
Оценка: +1
Здравствуйте, Tasheehoo, Вы писали:

T> Может быть не пересылать nonce с каждым сообщением, а только при подключении к серверу, а потом его просто инкрементировать?


Если протокол без сохранения состояния, то придется пересылать с каждым сообщением. Если состояние сохраняется между сообщениями, то да, просто инкрементировать на каждое сообщение.
avalon/2.0.3
Re[5]: crypto_secretbox_easy()/crypto_secretbox_open_easy()
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.09.16 15:45
Оценка: +1
Здравствуйте, Tasheehoo, Вы писали:

T>Наверное лучше с каждым сообщением передавать и счетчик, на значение которого nonce и будет инкрементироваться... Счетчик можно использовать 32ух битный, это лучше чем 192ух битный nonce...


С другой стороны, если использовать 64-битный счетчик, трудно себе представить, что он переполнится, а логика упростится очень сильно, ценой всего 4-х байт на сообщение...
Re[6]: crypto_secretbox_easy()/crypto_secretbox_open_easy()
От: Tasheehoo  
Дата: 09.09.16 04:38
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>С другой стороны, если использовать 64-битный счетчик, трудно себе представить, что он переполнится


Счетчик я инициализирую рандомным значением, но наверное на самом деле лучше использовать 64-битный счетчик...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.