Більшість людей зустрічають слово nonce у профілі VPN і припускають, що це ще один спільний секрет, який треба копіювати між вузлами. Це не так. Nonce — значення, яке ніколи не повинно повторюватися під тим самим ключем, і в більшості шифрування на основі nonce воно передається відкрито. Плутанина залишається нешкідливою, доки хтось не відредагує його вручну, і саме там починається справжня поломка.

Звідки nonce насправді береться

Автентифіковане шифрування потребує окремого nonce для кожного повідомлення, зашифрованого під ключем. Протоколи виконують цю вимогу по-різному: монотонно зростаючий лічильник, сіль у поєднанні з ідентифікатором пакета або достатньо довге випадкове значення. IKEv2 обмінюється nonce під час початкового обміну, і вони є публічними вхідними даними для виведення ключа, а не секретами.

Унікальність може бути структурною або ймовірнісною. Лічильник не може повторитися, доки не переповниться, тому протокол визначає точку зміни ключа задовго до цього. Випадкове значення покладається на достатню кількість бітів, щоб колізія була неймовірною в межах ліміту повідомлень, а це інший аргумент з іншим режимом відмови. Документація протоколу вказує, який метод застосовується, і обидва безпечні лише за умови дотримання зазначеного ліміту.

DesignWhere uniqueness comes fromExhaustion is handled by
AES-GCM recordsAn IV, typically a counterRekey before the counter wraps
ChaCha20-Poly1305A 96-bit nonce from a counter or generatorA message limit per key
WireGuardA per-key 64-bit counterRekey at a message cap
OpenVPN AEADPacket identifier plus implicit key materialRekey on the packet-id limit
IKEv2Fresh nonces per exchangeA new security association

У що насправді обходиться повторне використання

Повторне використання nonce під одним ключем — не дрібне питання ефективності. У GCM два повідомлення зі спільним IV дозволяють спостерігачеві відновити ключ автентифікації та обчислити виключне АБО двох відкритих текстів. Потокові конструкції повторно використовують ключовий потік так само, що перетворює шифротекст на головоломку, а не на секрет.

Саме тому реалізації змінюють ключ до переповнення лічильника, і тому вони зупиняються, а не продовжують, коли їхній стан невизначений. Перезавантаження, яке скидає лічильник, поки партнер ще тримає старий ключ, або віртуальна машина, відновлена зі знімка, зробленого посеред сеансу, — це саме та ситуація, для запобігання якій існують ліміти. Нападник не потрібен; достатньо звичайних операцій.

Чому ручне редагування — неправильне рішення

Лічильники, солі та ідентифікатори пакетів — це машини станів, спільні для обох сторін. Зміна однієї сторони розсинхронізує іншу, і тунель відмовляє так, що це виглядає як проблема маршрутизації. Підтримуваний важіль — свіжий обмін ключами, який скидає стан на обох кінцях одночасно.

Паролі та nonce також відіграють різні ролі. Пароль — це секретний вхід для виведення ключа; nonce — публічний вхід для кожного повідомлення. Поле профілю з позначкою nonce, яке вимагає довгого секрету, зазвичай є статичним ключем або заздалегідь спільним секретом під іншою назвою, тому читайте документацію для цього поля, а не припускайте.

Коли рекомендація стосується обробки nonce, виправлення — це виправлена версія від супровідника, а не інший шифр або коротший ключ. Зміна шифру, щоб уникнути слова nonce, переміщує проблему, а не вирішує її.

Читання попередження без здогадів

Рядок журналу про лічильники або nonce зазвичай описує втрачений стан, а не атаку. Перевірте, чи не перезапускався один із партнерів, чи не використовувала клонована віртуальна машина ту саму ідентичність і чи згодні дві сторони щодо налаштувань зміни ключа. Потім встановіть новий сеанс і подивіться, чи повертається повідомлення.

Тримайте діагностику окремо від не пов’язаних збоїв. Сторінка, яка не завантажується, або запит облікових даних, що зациклюється, не є доказом повторного використання nonce, і трактування його як такого відправляє вас у криптографічний шар, тоді як проблема вище нього.

Для звичайного використання безпечне правило коротке: нехай реалізація керує nonce, тримайте обидві сторони на підтримуваних версіях і вважайте будь-яке скидання стану причиною змінити ключ, а не редагувати значення. Якщо поля профілю немає в документації постачальника, не вигадуйте для нього значення. Виправлення тунелю починається зі знання, на який шар ви дивитеся.

Схожі статті