Çekirdeğin rastgeleliğinin tükenmesi yavaş bir VPN için çekici bir açıklamadır ve insanların bildirdiği belirti için neredeyse her zaman yanlış olandır. Rastgele çıktı bekleyen bir ana makine belirli bir anda takılır, genellikle açılışın başında veya anahtar işleme sırasında. Bir tünel hızlı bağlanıp sonra yavaş aktarıyorsa bu, bunun yerine aktarım hızını anlatır. Okumayı bitirmediğiniz bir sayıyı düzeltmek için daemon kurmadan önce bu iki gözlemi ayırın.

Efsane neden yaşıyor

İki sorun da gerçektir ve uzaktan benzer görünürler. Yeni açılmış bir sanal makinede başlangıç takılmaları gerçekten olur ve yavaş kurulmuş tünel de aynı derecede gerçektir. Hata, her iki hikâyede de bir yerde kriptografi geçtiği için ikincinin birinciden kaynaklandığını varsaymaktır. Şifreleme kelimesinde, aktarılan her baytın yeni bir ortam gürültüsü baytı tükettiğine dair hiçbir anlam yoktur.

Bu üreteçler böyle çalışmaz. Bir kriptografik kitaplık tohumlanmış bir üreteç tutar ve ondan çıktı alır, kendi politikasına göre yeniden tohumlar, bu yüzden pahalı an tohumlama, sürekli aktarım değildir.

Bir üreteç paket başına ne yapar

OpenSSL 3'te varsayılan üreteç hiyerarşisi, yapılandırmaya ve duruma göre tohumlayan ve yeniden tohumlayan DRBG örneklerinden kurulur. OpenVPN 2.6'da AEAD veri yolu nonce değerini paketin sıra numarasıyla oturum başına örtük bir değeri birleştirerek türetir, eski CBC yolu ise paket başına sözde rastgele bir IV alır. Hiçbir desen, bir gigabayt taşımanın bir gigabayt taze çekirdek gürültüsü tükettiği kuralını desteklemez. İkisi de tohumlamanın önemli olduğu yerin anahtar üretimi ve el sıkışmalar olduğu fikrini destekler.

CBC vakası adlandırılmaya değer çünkü efsaneye benziyor ve değil: paket başına IV'ü kitaplığın kendi yeniden tohumlama takvimine göre kitaplık üretecinden gelir, asla paket başına çekirdek çağrısından gelmez. Biri bayt başına entropi maliyetinden söz ettiğinde, hangi kitaplık sürümünü ve hangi kod yolunu ölçtüklerini sorun.

Bekleme gerçekte nerede görünür

Zaman damgalarını oturumun değil aşamaların çevresine koyun: başlangıç, kimlik doğrulama, anahtar değişimi ve aktarım. Tünel kullanılabilir olmadan önceki bekleme, düşük sabit hızdan farklı bir şikâyettir ve yalnızca biri rastgeleliğe işaret eder. Linux'ta normal bir getrandom() isteği çekirdeğin rastgele kaynağı başlatılana kadar bloke olabilir, bu yüzden bu sorunun açılış sürümü, başlangıçta havuzu besleyecek az şeyi olan sanal makinelerde ve gömülü kartlarda gerçektir.

AşamaNe çalıştırılmalıBekleme anlamına gelen okumaAktarım hızı anlamına gelen okuma
Açılış, herhangi bir tünelden öncesystemd-analyze critical-chaintünel başlamadan önce saniyelerce oturan birimgeçerli değil, henüz hiçbir şey aktarılmıyor
El sıkışmajournalctl -u openvpn-server@server -bbaşlatma dizisi tamamlanmadan önceki uzun boşlukgeçerli değil, tünel ayakta değil
Kurulmuş aktarımss -tin yanında sar -n DEV 1boş soket kuyruklarıyla bloke olmuş süreçdolu kuyruklar, yeniden iletimler ve tek meşgul iş parçacığı

İki ucuz komut o toplamanın başına aittir ve tablo gerekmeden önce kolay soruları çözerler. Okudukları sayaç bant genişliği ölçer değil entropi muhasebesidir ve tek bir anlık görüntü bir sürecin bloke olduğunu, ne kadar beklediğini veya kitaplığının hangi arayüzü çağırdığını gösteremez. Kurtarmadan sonra alınan örnek genellikle takılmayı tamamen kaçırır, bu yüzden çekirdek sürümünü okumanın yanında tutun.

cat /proc/sys/kernel/random/entropy_avail
uname -r

Düzeltmeyi okumayla eşleştirin

Çekirdek gerçekten başlatmayı bekliyorsa tünele değil, platformun desteklediği tohumlama yoluna bakın. Bir sanal makineye ana makinenin sağladığı rastgele aygıt verilebilir, örneğin virtio-rng, ve imaj hazırlığı önemlidir çünkü birçok misafire değiştirilmeden kopyalanan tohum bağımsız başlatma değildir. Bir kitaplık açılıştan sonra tohumlama hataları bildirirse, çekirdek ayarlarını değiştirmek yerine yapılandırılmış kaynağını ve sağlayıcı davranışını inceleyin.

ss -tin dst 203.0.113.7
sar -n DEV 1 5

OpenSSL üreteç belgeleri bu hiyerarşinin girdiyi nasıl aldığını ve yeniden tohumlamanın ne zaman olduğunu açıklar; bu, efsaneden çok daha dar bir iddiadır ve yalnızca o uygulama için geçerlidir. Entropi daemon'u evrensel bir hız onarımı değildir ve bir sayacı yükseltmek için kurmak, gecikme göstermeden bir güvenlik varsayımını değiştirir. Aktarım hızı için veri yolunu izleyin: tek doymuş iş parçacığı, yeniden iletimler, dış kayıp ve kuyruk düşmeleri her biri farklı bir düzeltme gerektirir ve tampon boyutları soket tamponlamasını kendi kuyruk kanıtıyla ele alır.

İlgili makaleler