Свършва ли се ентропията на VPN? Какво наистина показва entropy_avail
Забавяне при зареждане и бавен установен тунел са различни повреди. Прочетете етапа, истинското значение на брояча и опашката, преди да обвинявате случайността.
Изчерпването на случайността в ядрото е привлекателно обяснение за бавен VPN и почти винаги е грешното обяснение за симптома, за който хората съобщават. Хост, който чака случаен изход, блокира в определен момент, обикновено рано при зареждане или по време на обработка на ключове. Тунел, който се свързва бързо и след това прехвърля бавно всъщност описва пропусквателна способност. Разделете тези две наблюдения, преди да инсталирате демон, за да оправите число, което още не сте дочели.
Защо митът оцелява
И двата проблема са реални и изглеждат еднакви отдалеч. Забавянията при стартиране на прясно заредена виртуална машина наистина се случват, а бавният установен тунел е също толкова реален. Грешката е да се предполага, че вторият се причинява от първия, защото криптографията се появява някъде и в двете истории. Нищо в думата криптиране не предполага, че всеки прехвърлен байт изразходва свеж байт шум от средата.
Тези генератори не работят така. Криптографската библиотека поддържа генератор със семе и черпи изход от него, презареждайки семето по собствена политика, така че скъпият момент е поставянето на семе, а не устойчивото прехвърляне.
Какво прави генераторът за всеки пакет
В OpenSSL 3 йерархията на генератора по подразбиране се изгражда от екземпляри на DRBG, които поставят и презареждат семе според конфигурацията и състоянието. В OpenVPN 2.6 пътят на данни AEAD извежда своя nonce от поредния номер на пакета, комбиниран с неявна стойност за сесията, докато по-старият път CBC черпи псевдослучаен IV за всеки пакет. Нито един от шаблоните не подкрепя правило, че преместването на гигабайт изразходва гигабайт свеж шум от ядрото. И двата подкрепят идеята, че генерирането на ключове и ръкостисканията са мястото, където поставянето на семе има значение.
Случаят CBC си заслужава да бъде назован, защото прилича на мита и не е: неговият IV за всеки пакет идва от генератора на библиотеката по собствения график за презареждане на семето, никога от извикване на ядрото за всеки пакет. Когато някой цитира цена на ентропия за байт, попитайте коя версия на библиотеката и кой път на кода са измервали.
Къде всъщност се проявява чакането
Поставете времеви маркери около етапите, а не около сесията: стартиране, удостоверяване, смяна на ключ и прехвърляне. Чакането преди тунелът да стане използваем е различно оплакване от ниска устойчива скорост и само едно от тях сочи към случайността. В Linux нормална заявка getrandom() може да блокира, докато случайният източник на ядрото бъде инициализиран, поради което вариантът на този проблем при зареждане е реален на виртуални машини и вградени платки, които имат малко, с което да хранят пула рано.
| Етап | Какво да изпълните | Показание, което значи чакане | Показание, което значи пропусквателна способност |
|---|---|---|---|
| Зареждане, преди какъвто и да е тунел | systemd-analyze critical-chain | модул, който стои секунди, преди тунелът да стартира | не е приложимо, още нищо не се прехвърля |
| Ръкостискане | journalctl -u openvpn-server@server -b | дълга пауза, преди последователността за инициализация да завърши | не е приложимо, тунелът не е вдигнат |
| Установено прехвърляне | ss -tin до sar -n DEV 1 | блокиран процес с празни опашки на сокета | пълни опашки, повторни предавания и една заета нишка |
Две евтини команди принадлежат в началото на тази колекция и те решават лесните въпроси, преди таблицата дори да е нужна. Броячът, който те четат, е счетоводство на ентропия, а не измервател на честотната лента, и една снимка не може да покаже, че процес е блокиран, колко дълго е чакал или кой интерфейс извиква неговата библиотека. Проба, взета след възстановяване, обикновено пропуска забавянето напълно, затова дръжте версията на ядрото до показанието.
cat /proc/sys/kernel/random/entropy_avail
uname -rСъобразете поправката с показанието
Ако ядрото наистина чака инициализация, гледайте поддържания от платформата път за поставяне на семе, а не тунела. На виртуална машина може да се даде предоставено от хоста случайно устройство, например virtio-rng, и подготовката на образа е важна, защото семе, копирано непроменено в много гости, не е независима инициализация. Ако библиотека съобщава за неуспехи при поставяне на семе след зареждане, прегледайте конфигурирания ѝ източник и поведението на доставчика, вместо да променяте настройки на ядрото.
ss -tin dst 203.0.113.7
sar -n DEV 1 5Документацията на генератора OpenSSL описва как тази йерархия получава вход и кога се случва презареждане на семето, което е далеч по-тясно твърдение от мита и важи само за тази реализация. Демонът за ентропия не е универсална поправка за скорост и инсталирането му, за да се вдигне брояч, променя предположение за сигурност, без да демонстрира забавяне. За пропусквателната способност следвайте пътя на данните: една наситена нишка, повторни предавания, външни загуби и отпадане на опашки се нуждаят всяко от различна поправка, а размерите на буфера се занимават с буферирането на сокета със свои собствени доказателства от опашките.