Windows-Subsystem-for-Linux

/dev/random 在 Ubuntu for Windows 10 (WSL) 中非常慢

  • March 21, 2021

我在 Haswell 筆記型電腦上使用適用於 Windows 10 (WSL2) 的 Ubuntu 20.04,每秒得到大約 0.6 字節。等待 10 秒後總共有 6 個字節。這是無法接受的。問題是什麼?

**編輯:**這似乎只是在 WSL2 模式下操作時出現的問題。WSL1 = 40MiB/s WSL2 = 0.6 字節/秒

/dev/random在 Linux 中和兩者/dev/urandom都是密碼安全的偽隨機數生成器。在舊版本的 Linux 核心中,/dev/random一旦初始化就會阻塞,直到積累了足夠的熵,而/dev/urandom不會。由於 WSL2 是具有真正 Linux 核心的虛擬機,因此它具有一組有限的熵源,它可以從中獲取熵,並且必須依賴主機系統來獲取大部分熵。但是,只要它在啟動時接收到足夠的熵,就可以安全地使用 CSPRNG。

聽起來在您的環境中,CSPRNG 已在 Windows 啟動時播種,但不會以很高的速度重新播種。這很好,但它會導致/dev/random比你想要的更頻繁地阻塞。歸根結底,這是 WSL2 的配置問題。

WSL1 可能沒有這個問題,因為在這種情況下,/dev/random可能不會阻塞並且只使用系統 CSPRNG,例如/dev/urandom. 在較新的 Linux 版本中,阻塞的唯一時間/dev/random是啟動時沒有積累足夠的熵來為 CSPRNG 播種一次;否則,完全等價於/dev/urandom。做出此決定是因為如果池已適當初始化,則兩個介面之間沒有合理的安全差異。

由於在這些情況下沒有可測量的差異,如果/dev/random是阻塞並且對您來說太慢,正確的做法是使用/dev/urandom,因為它們是相同的 CSPRNG(基於 ChaCha20)的輸出。無論如何,上游 Linux 行為可能會成為 WSL2 未來版本的預設設置,因為微軟最終將合併更新版本的 Linux。

引用自:https://unix.stackexchange.com/questions/640272