Kehabisan kerawakan kernel ialah penjelasan yang menarik untuk VPN perlahan, dan hampir selalu salah untuk gejala yang dilaporkan orang. Hos yang menunggu keluaran rawak terhenti pada saat tertentu, biasanya awal semasa boot atau semasa pengendalian kunci. Terowong yang bersambung pantas dan kemudian memindahkan data dengan perlahan sebenarnya menerangkan daya pemprosesan. Pisahkan kedua-dua pemerhatian itu sebelum memasang daemon untuk membaiki nombor yang belum selesai anda baca.

Mengapa mitos ini bertahan

Kedua-dua masalah itu nyata dan dari jauh kelihatan serupa. Kesesakan permulaan pada mesin maya yang baru boot memang berlaku, dan terowong mantap yang perlahan sama nyatanya. Kesilapannya ialah menganggap yang kedua disebabkan yang pertama kerana kriptografi muncul di suatu tempat dalam kedua-dua cerita. Tiada apa-apa dalam perkataan penyulitan yang membayangkan bahawa setiap bait yang dipindahkan menggunakan bait baru bunyi persekitaran.

Bukan begitu penjana ini berfungsi. Pustaka kriptografi menyimpan penjana berbiji dan mengambil keluaran daripadanya, menyemai semula mengikut dasarnya sendiri, jadi saat yang mahal ialah penyemaian, bukan pemindahan berterusan.

Apa yang penjana lakukan bagi setiap paket

Dalam OpenSSL 3 hierarki penjana lalai dibina daripada contoh DRBG yang menyemai dan menyemai semula mengikut konfigurasi dan keadaan. Dalam OpenVPN 2.6 laluan data AEAD memperoleh nonce daripada nombor jujukan paket bersama nilai tersirat setiap sesi, manakala laluan CBC yang lebih lama mengambil IV pseudorawak bagi setiap paket. Tiada corak menyokong peraturan bahawa memindahkan satu gigabait menggunakan satu gigabait bunyi kernel baru. Kedua-duanya menyokong idea bahawa penjanaan kunci dan jabat tangan ialah tempat penyemaian penting.

Kes CBC wajar dinamakan kerana ia kelihatan seperti mitos dan bukan: IV setiap paketnya datang daripada penjana pustaka mengikut jadual penyemaian semula pustaka itu sendiri, tidak pernah daripada panggilan kernel bagi setiap paket. Apabila seseorang menyebut kos entropi setiap bait, tanya versi pustaka dan laluan kod mana yang mereka ukur.

Di mana penantian sebenarnya kelihatan

Letakkan cap masa di sekeliling peringkat, bukan di sekeliling sesi: permulaan, pengesahan, pertukaran kunci dan pemindahan. Menunggu sebelum terowong boleh digunakan ialah aduan berbeza daripada kadar mantap yang rendah, dan hanya satu daripadanya menunjuk kepada kerawakan. Dalam Linux permintaan getrandom() biasa boleh menyekat sehingga sumber rawak kernel dimulakan, itulah sebabnya versi semasa boot bagi masalah ini nyata pada mesin maya dan papan terbenam yang mempunyai sedikit untuk memberi makan kolam pada awal.

PeringkatApa yang perlu dijalankanBacaan yang bermaksud menungguBacaan yang bermaksud daya pemprosesan
Boot, sebelum mana-mana terowongsystemd-analyze critical-chainunit yang duduk beberapa saat sebelum terowong bermulatidak berkenaan, belum ada apa yang dipindahkan
Jabat tanganjournalctl -u openvpn-server@server -bjurang panjang sebelum urutan permulaan selesaitidak berkenaan, terowong belum naik
Pemindahan mantapss -tin di sebelah sar -n DEV 1proses tersekat dengan baris gilir soket kosongbaris gilir penuh, penghantaran semula dan satu benang sibuk

Dua arahan murah terletak pada permulaan koleksi itu, dan kedua-duanya menyelesaikan soalan mudah sebelum jadual diperlukan. Pembilang yang mereka baca ialah perakaunan entropi, bukan meter lebar jalur, dan satu petikan tidak boleh menunjukkan bahawa proses tersekat, berapa lama ia menunggu atau antara muka mana yang dipanggil oleh pustakanya. Sampel yang diambil selepas pemulihan biasanya terlepas kesesakan sepenuhnya, jadi simpan versi kernel di sebelah bacaan.

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

Padankan pembetulan dengan bacaan

Jika kernel benar-benar menunggu pemulaan, lihat laluan penyemaian yang disokong platform, bukan terowong. Mesin maya boleh diberi peranti rawak yang disediakan hos, seperti virtio-rng, dan penyediaan imej penting kerana benih yang disalin tanpa perubahan ke banyak tetamu bukan pemulaan bebas. Jika pustaka melaporkan kegagalan penyemaian selepas boot, periksa sumber yang dikonfigurasikan dan tingkah laku penyedianya dan bukan menukar tetapan kernel.

ss -tin dst 203.0.113.7
sar -n DEV 1 5

Dokumentasi penjana OpenSSL menerangkan bagaimana hierarki itu memperoleh input dan bila penyemaian semula berlaku, yang merupakan dakwaan jauh lebih sempit daripada mitos dan hanya sah untuk pelaksanaan itu. Daemon entropi bukan pembaikan kelajuan sejagat, dan memasangnya supaya pembilang naik mengubah andaian keselamatan tanpa membuktikan kelewatan. Untuk daya pemprosesan, ikut laluan data: satu benang tepu, penghantaran semula, kehilangan luar dan kejatuhan baris gilir masing-masing memerlukan pembetulan berbeza, dan saiz penimbal menangani penimbalan soket dengan bukti baris gilirnya sendiri.

Artikel berkaitan