Amazon Linux 2でCSPRNGを使用する

Amazon Linux 2でCSPRNGを使用する

暗号化が強く(認証要件)、高品質(業界標準のランダム性テストに合格)、合理的なパフォーマンス(下記参照)を備えたPRNGを使用する必要があります。

当初、私は最新のUbuntu LTSで動作すると思いました/dev/urandom

パフォーマンスに関して、{ timeout --foreground 1s cat /dev/urandom; } | wc -cM1 Mac(FYI)で実行すると約450 MB / sのスループットが達成され、x86-64 Ubuntu 22.04.2 LTS VMでも同様の結果が得られました。

40kBブロックを読み取るC ++プログラムは、約1 GB /秒のより高いスループットを達成しましたが、実行可能ファイルをコンパイルして実行することはできませんでした(シェルコマンドと実行可能ファイルの比率が似ていると仮定します)。

ただし、仮想マシンで実行されているAmazon Linux 2(カーネルバージョン5.10)にデプロイされることがわかりました。アルゴリズムのそしてパフォーマンスRNGの改善は利用できません。

私の質問は次のとおりです

  • 仮想マシンで実行されるカーネル5.10は、暗号化された強力な擬似/dev/urandom乱数を提供し、少なくとも1 MB /秒のスループットで業界標準のランダム性テストに合格する必要がある元の要件をまだ満たしていますか?

関連環境にアクセスできませんが、以前のカーネルバージョンで複数のオンラインシェルを使用しようとすると、複数のシステム(カーネル 5.4カーネル 5.15/dev/random)同じスループットを得て、/dev/urandom私の理解では同じ品質を意味しますが、他のシステムでもカーネル 5.4)が/dev/randomブロックされ、0〜200B / sの間の結果が得られます(例:バイト、プレフィックスなし)、これは/dev/urandom品質の低下を示します(私が間違って理解していない限り)。

しかし、それによるとフィロニックスLinux 5.6 /dev/random は、/dev/urandom がユーザー空間で RNG データをポーリングするために使用されるように動作します。変更された動作により、/dev/random が /dev/urandom と同じように動作します。ただし、CRNG(Linux暗号強度乱数ジェネレータ)が準備されるまで読み取りがブロックされるという点が異なります。一方、/dev/urandomは引き続き最高のデータを提供しますが、ブロックされません。したがって、上記のカーネル5.4を使用したテストはこの場合は無効になる可能性があります。

だからそうだ逃げることもあるようですが、よくわかりません。

  • 任意のダミーファイルを使用することがオプションではないことが判明した場合は、上記のボックスを選択するための代替案はありますか? OpenSSLを学ぶランド_バイト要件を満たしていますか?

ベストアンサー1

私が知る限り、/dev/urandomそれは得られた。十分CSPRNGは5.4にもあります(ChaCha20を使用するように移植されました)。存在する4.8両方同じCSPRNGでサポートされているデバイス)。

その後の変更のより大きな焦点はRNG自体の改善にはありませんでした(多くの改善が行われましたが)。調べるCSPRNGは実際には十分なので、「エントロピー計算によるブロック」の動作を排除します/dev/random。特にCSPRNGが不要なほど十分であることに同意したからです。

つまり、私の理解によると、5.10の/dev/urandomは/dev/random後ろに対応するCSPRNGが初期化されました。ただし、これが発生したかどうかはユーザースペースに表示されません。

より良いオプションは、getrandom(2)システムコール(3.somethingから利用可能)です。これは、「2つの世界の最高」(別の新しい5.18/dev/randomアクション)を提供するようです。フラグに 0 を指定すると、次の場合にブロックされます。 CSPRNGはまだ準備されていませんが、後でブロックされません。

ただし、ユーザー空間CSPRNGはコンテキスト切り替えがないため、常に高速です。非常に通常、OpenSSL RAND_bytes()または選択した暗号化ライブラリによって提供される他のエントリを使用またはシードします/dev/urandomgetrandom()(最新のOpenSSL 3.0はgetrandom()これを自動的に実行するため、手動でシードする必要はありません。)

(注:pv /dev/urandom > /dev/null良い測定のために、WestmereからComet Lakeまで、近くのさまざまなx86サーバーとARM64 Ampere AltraのVPSでテストしました。みんな同じ300~400MB/s達成。 )

/dev/randomはブロックされ、0〜200B / s(つまりバイト、プレフィックスなし)の間の結果を提供します。これは、/dev/urandomの品質が低下したことを示します(私が間違って理解していない限り)。

最近の変更の焦点は、/dev/urandomの品質を認識することだと思います。いいえ良いCSPRNGサポートがあれば、パフォーマンスが低下し、/dev/randomによって実行された計算は意味がなくなります(5.6から削除されました)。

おすすめ記事