Nonce и вектор инициализации (IV)
Коротко: Nonce («number used once») и вектор инициализации — дополнительные значения, благодаря которым одно и то же сообщение с одним и тем же ключом каждый раз шифруется по-разному.
Подробнее: Они не секретны, но их свойства решают всё: nonce не должен повторяться никогда, IV в зависимости от режима должен быть непредсказуемым (случайным).
Подробности
- Зачем нужны: Без них одинаковые открытые тексты давали бы одинаковые шифртексты, и повторы были бы заметны.
- Nonce: Часто счётчик или случайное значение. В CTR/GCM/ChaCha20 достаточно «единственности», случайность не нужна, но повтор губителен: два сообщения с одним ключом и одним nonce выдают XOR их открытых текстов, а в GCM может раскрыться ключ аутентификации.
- IV в CBC: Должен быть случайным и непредсказуемым.
- Передача вместе: Nonce/IV обычно дописывают перед шифртекстом и передают открыто.
- Случайный nonce: При 96 битах и очень многих сообщениях грозит коллизия (парадокс дней рождения). Тогда лучше счётчики или смена ключа. См. случайные числа.
- Вне шифрования: В протоколах входа и блокчейнах как одноразовое значение против повтора («replay»).
См. также: ChaCha20-Poly1305