私はHaswellノートブックでWindows 10(WSL2)用のUbuntu 20.04を使用しており、毎秒約0.6バイトを得ています。合計6バイトになるまで10秒間待ちます。これは許容できません。問題は何ですか?
編集する:これは、WSL2モードで実行した場合にのみ発生する問題です。 WSL1 = 40MiB/秒 WSL2 = 0.6バイト/秒
ベストアンサー1
/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
正しい方法はifwhichがブロックされて遅すぎる場合を使用することです/dev/urandom
。これは、同じCSPRNG(ChaCha20ベース)の出力であるためです。それにもかかわらず、アップストリームLinuxの動作は、将来のWSL2バージョンでデフォルトの動作になる可能性が高いです。マイクロソフトは最終的に最新バージョンのLinuxにマージされるからです。