Ці сканчаецца ў 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 апісвае, як гэтая іерархія атрымлівае ўваход і калі адбываецца перасяванне, што з’яўляецца значна вузейшым сцверджаннем, чым міф, і справядлівым толькі для гэтай рэалізацыі. Дэман энтрапіі не ёсць універсальным рамонтам хуткасці, і яго ўстаноўка, каб лічыльнік рос, змяняе дапушчэнне бяспекі, не дэманструючы затрымкі. Што да прапускной здольнасці, ідзіце па шляху даных: адна насычаная нітка, паўторныя адпраўкі, знешнія страты і страты чаргі патрабуюць кожная свайго выпраўлення, а памеры буфераў вырашаюць буферызацыю сокетаў з уласнымі доказамі чаргі.