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

Падобныя артыкулы