Повечето хора срещат думата 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, дръжте двата края на поддържани версии и третирайте всяко нулиране на състоянието като причина за смяна на ключа, а не за редактиране на стойност. Ако поле в профила не е в документацията на доставчика, не измисляйте стойност за него. Поправянето на тунела започва с това да знаете кой слой гледате.

Подобни статии