Што такое nonce у VPN і чаму паўторнае выкарыстанне ламае тунель
Nonce — гэта значэнне для кожнага паведамлення, якое ніколі не павінна паўтарацца пад адным ключом, і звычайна яно перадаецца адкрыта. Ручное рэдагаванне — гэта памылка, якой трэба пазбягаць.
Большасць людзей сустракае слова nonce у профілі VPN і мяркуе, што гэта яшчэ адзін агульны сакрэт для капіравання паміж вузламі. Гэта не так. Nonce — значэнне, якое ніколі не павінна паўтарацца пад тым самым ключом, і ў большасці шыфравання на аснове nonce яно перадаецца адкрыта. Блытаніна застаецца бясшкоднай, пакуль хтосьці не адрэдагуе яго ўручную, і менавіта там пачынаецца сапраўдная паломка.
Адкуль nonce на самой справе бярэцца
Аўтэнтыфікаванае шыфраванне патрабуе іншага nonce для кожнага паведамлення, зашыфраванага пад ключом. Пратаколы задавальняюць гэтую патрабу рознымі спосабамі: монатонна які расце лічыльнік, соль у спалучэнні з ідэнтыфікатарам пакета або дастаткова доўгае выпадковае значэнне. IKEv2 абменьваецца nonce падчас пачатковага абмену, і яны з’яўляюцца публічнымі ўваходамі для вывядзення ключа, а не сакрэтамі.
Унікальнасць можа быць структурнай або імавернаснай. Лічыльнік не можа паўтарыцца, пакуль не адбудзецца перапаўненне, таму пратакол вызначае кропку пераключэння ключа задоўга да гэтага. Выпадковае значэнне спадзецца на дастатковую колькасць бітаў, каб калізія была неймавернай у межах ліміту паведамленняў; гэта іншы аргумент з іншым рэжымам адмовы. Дакументацыя пратаколу называе, які метад прымяняецца, і абодва бяспечныя толькі пры выкананні заяўленага ліміту.
| Design | Where uniqueness comes from | Exhaustion is handled by |
|---|---|---|
| AES-GCM records | An IV, typically a counter | Rekey before the counter wraps |
| ChaCha20-Poly1305 | A 96-bit nonce from a counter or generator | A message limit per key |
| WireGuard | A per-key 64-bit counter | Rekey at a message cap |
| OpenVPN AEAD | Packet identifier plus implicit key material | Rekey on the packet-id limit |
| IKEv2 | Fresh nonces per exchange | A new security association |
Што на самой справе каштуе паўторнае выкарыстанне
Паўторнае выкарыстанне nonce пад адным ключом — не дробнае пытанне эфектыўнасці. З GCM два паведамленні з адным IV дазваляюць назіральніку аднавіць ключ аўтэнтыфікацыі і вылічыць выключнае або двух адкрытых тэкстаў. Канструкцыі на аснове патоку выкарыстоўваюць ключавы паток такім жа чынам, і гэта ператварае шыфраваны тэкст у галаваломку замест сакрэту.
Менавіта таму рэалізацыі пераключаюць ключ да перапаўнення лічыльніка, і таму яны спыняюцца, а не працягваюць, калі іх стан няпэўны. Перазапуск, які скідвае лічыльнік, пакуль партнёр яшчэ трымае стары ключ, або віртуальная машына, адноўленая са здымка, зробленага пасярэдзіне сеансу, — гэта менавіта тая сітуацыя, для прадухілення якой існуюць ліміты. Нападальнік не патрэбны; звычайных аперацый дастаткова.
Чаму ручное рэдагаванне — няправільнае выпраўленне
Лічыльнікі, солі і ідэнтыфікатары пакетаў — гэта машыны станаў, якія падзяляюць абодва канцы. Змяненне аднаго боку дэсінхранізуе другі, і тунель падае так, што выглядае як праблема маршрутызацыі. Падтрымліваемы рычаг — свежы абмен ключамі, які скідвае стан на абодвух канцах адначасова.
Паролі і nonce таксама граюць розныя ролі. Пароль — гэта сакрэтны ўваход для вывядзення ключа; nonce — публічны ўваход для кожнага паведамлення. Поле профілю з пазнакай nonce, якое патрабуе доўгі сакрэт, звычайна з’яўляецца статычным ключом або загадзя агульным сакрэтам пад іншай назвай, таму чытайце дакументацыю для гэтага поля, а не меркавайце.
Калі папярэджанне датычыцца апрацоўкі nonce, выпраўленне — гэта выпраўленая версія распрацоўшчыка, а не іншы шыфр або карацейшы ключ. Змена шыфру, каб пазбегнуць слова nonce, пераносіць праблему, а не вырашае яе.
Чытаць папярэджанне без здагадак
Радок журнала пра лічыльнікі або nonce звычайна апісвае страчаны стан, а не атаку. Праверце, ці адзін з бакоў не перазапусціўся, ці клонавая віртуальная машына не выкарыстала тую ж ідэнтычнасць, і ці абодва канцы згодныя з наладамі пераключэння ключа. Затым устанавіце новы сеанс і паглядзіце, ці вернецца паведамленне.
Трымайце дыягностыку асобна ад старонніх збояў. Старонка, якая не загружаецца, або цыкл запыту ўліковых даных не з’яўляюцца доказам паўторнага выкарыстання nonce, і калі лічыць іх такімі, вы пойдзеце ў крыптаграфічны слой, тады як праблема вышэй.
Для звычайнага выкарыстання бяспечнае правіла кароткае: няхай рэалізацыя кіруе nonce, трымайце абодва канцы на падтрымліваных версіях і лічыце любы скід стану прычынай пераключыць ключ, а не рэдагаваць значэнне. Калі поля профілю няма ў дакументацыі пастаўшчыка, не выдумляйце для яго значэнне. Выпраўленне тунелю пачынаецца з ведання, на які слой вы глядзіце.