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