Вопрос касается надобности 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, чтоб мне не пришлось его синхронизировать на клиенте и сервере?
Здравствуйте, Tasheehoo, Вы писали:
T> Вот я и хочу понять, как мне быть с nonce? Я могу захардкодить nonce, чтоб мне не пришлось его синхронизировать на клиенте и сервере?
Да, можешь, если можешь гарантировать, что один и тот же nonce с одним и тем же ключом не используется для шифрования более чем одного сообщения (не соединения).
Если подходить к вопросу формально, то при "использую для каждого подключения свежесгенеренную пару ключей" ты не можешь гарантировать отсутствия повторения пар ключей так же, как и отсутствие повторения nonce при его случайной генерации (данная проблема рассматривается в "Nonce Generators and the Nonce Reset Problem", Erik Zenner).
Т.е. случайный nonce не является обязательным но рекомендуется для уменьшения вероятности повтора при прочих равных условиях.
Здравствуйте, 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, Вы писали:
T>Может быть не пересылать nonce с каждым сообщением, а только при подключении к серверу, а потом его просто инкрементировать?
В таком случае встает вопрос рассинхрона счетчика...
Здравствуйте, Tasheehoo, Вы писали:
T>>Может быть не пересылать nonce с каждым сообщением, а только при подключении к серверу, а потом его просто инкрементировать? T>В таком случае встает вопрос рассинхрона счетчика...
Наверное лучше с каждым сообщением передавать и счетчик, на значение которого nonce и будет инкрементироваться... Счетчик можно использовать 32ух битный, это лучше чем 192ух битный nonce...
Здравствуйте, Tasheehoo, Вы писали:
T> Может быть не пересылать nonce с каждым сообщением, а только при подключении к серверу, а потом его просто инкрементировать?
Если протокол без сохранения состояния, то придется пересылать с каждым сообщением. Если состояние сохраняется между сообщениями, то да, просто инкрементировать на каждое сообщение.
Здравствуйте, Tasheehoo, Вы писали:
T>Наверное лучше с каждым сообщением передавать и счетчик, на значение которого nonce и будет инкрементироваться... Счетчик можно использовать 32ух битный, это лучше чем 192ух битный nonce...
С другой стороны, если использовать 64-битный счетчик, трудно себе представить, что он переполнится, а логика упростится очень сильно, ценой всего 4-х байт на сообщение...