コンピュータが乱数を生成する方法
暗号化からビデオゲーム、ギャンブルに至るまで、コンピュータは乱数を生成します。乱数には「真の」乱数と擬似乱数の2つのカテゴリがあり、その違いは暗号化システムのセキュリティにとって重要です。.
マウスの動きやファンのノイズなど、予測できない外部データを観察し、そこからデータを作成することで、コンピュータは真の乱数を生成できます。これはエントロピーとして知られています。それ以外の場合は、アルゴリズムを使用して「疑似乱数」数を生成するため、結果がランダムではない場合でも結果はランダムに表示されます。.
このトピックは最近、物議を醸すようになりました。多くの人が、Intelの内蔵ハードウェア乱数発生器チップが信頼できるかどうかについて疑問を投げかけています。なぜそれが信頼できないのかを理解するには、まず乱数がどのように生成されるのか、そしてそれらが何に使われているのかを理解する必要があります。.
乱数の用途
乱数は何千年もの間使われてきました。コイン投げでもサイコロ投げでも、ゴールは最終結果をランダムなチャンスに任せることです。コンピュータの乱数発生器は似ています - それらは予測不可能な、ランダムな結果を達成するための試みです。.
乱数ジェネレータは、さまざまな目的に役立ちます。ギャンブルの目的で乱数を生成したり、コンピュータゲームで予測できない結果を作成したりするような明らかな用途を除けば、ランダム性は暗号化にとって重要です。.
暗号化には攻撃者が推測できない数字が必要です。同じ数字を何度も使うことはできません。攻撃者がそれらを推測できないように、私たちは非常に予測不可能な方法でこれらの数を生成したいです。これらの乱数は、あなた自身のファイルを暗号化しているのか、インターネット上のHTTPS Webサイトを使用しているのかにかかわらず、安全な暗号化に不可欠です。.
真の乱数
あなたはコンピュータが実際に乱数を生成する方法を疑問に思うかもしれません。この「ランダムさ」はどこからくるのでしょう。それが単なるコンピュータコードの一部であれば、コンピュータが生成する数が予測できる可能性はありません。?
一般に、コンピュータが生成する乱数は、その生成方法に応じて2つのタイプに分類されます。「真の」乱数と疑似乱数.
「真の」乱数を生成するために、コンピュータはコンピュータの外部で起こるある種の物理現象を測定します。例えば、コンピュータは原子の放射性崩壊を測定することができます。量子論によると、放射性崩壊がいつ起こるのかを確実に知る方法はないので、これは本質的に宇宙からの「純粋なランダム性」です。攻撃者は放射性崩壊がいつ起こるかを予測することができないので、彼らはランダムな値を知りません.
より日常的な例では、コンピュータは大気ノイズに頼るか、単にキーボードのキーを押す正確な時間を予測不可能なデータのソースとして使用するか、エントロピーを使用します。たとえば、午後2時から正確に0.23423523秒後にキーを押したことにコンピュータが気付くことがあります。これらのキーを押すことに関連した特定の時間を十分に手に入れてください。数。あなたは予測可能なマシンではないので、攻撃者はこれらのキーを押したときの正確な瞬間を推測することはできません。 Linux上の/ dev / randomデバイス。乱数を生成して「ブロック」し、真の乱数を返すのに十分なエントロピーを集めるまで結果を返しません。.
疑似乱数
擬似乱数は、「真の」乱数に代わるものです。コンピュータはシード値とアルゴリズムを使用して、ランダムに見える数字を生成することができますが、実際には予測可能です。コンピュータは環境からランダムなデータを収集しません.
これはあらゆる状況で必ずしも悪いことではありません。たとえば、ビデオゲームをプレイしている場合、そのゲームで発生するイベントが「真の」乱数または疑似乱数のどちらで発生しているかは問題ではありません。一方、暗号化を使用している場合は、攻撃者が推測する可能性がある疑似乱数を使用したくありません。.
たとえば、攻撃者が疑似乱数ジェネレータが使用するアルゴリズムとシード値を知っているとします。そして、暗号化アルゴリズムがこのアルゴリズムから擬似乱数を取得し、それを使用して追加の乱数性を追加せずに暗号化キーを生成するとしましょう。攻撃者が十分に知っている場合、それらは逆方向に動作し、暗号化アルゴリズムがその場合に選択しなければならなかった疑似乱数を決定し、暗号化を破る可能性があります。.
NSAとIntelのハードウェア乱数ジェネレータ
開発者にとって作業を容易にし、安全な乱数を生成するために、IntelチップにはRdRandとして知られるハードウェアベースの乱数ジェネレータが含まれています。このチップはプロセッサ上のエントロピーソースを使用し、ソフトウェアが要求したときにソフトウェアに乱数を提供します。.
ここでの問題は、乱数発生器が本質的にブラックボックスであり、内部で何が起こっているのかわからないということです。 RdRandにNSAバックドアが含まれている場合、政府はその乱数ジェネレータによって提供されたデータのみで生成された暗号化キーを解読することができます。.
これは深刻な問題です。 2013年12月に、FreeBSDの開発者は、RdRandをランダム性の原因として直接使用することに対するサポートを削除し、信頼できないと述べました。 [ソース] RdRandデバイスの出力は、追加のエントロピーを追加する別のアルゴリズムに供給され、乱数発生器のバックドアが問題にならないようにします。 Linuxはすでにこのように動作し、RdRandから送られてくるランダムデータをさらにランダム化して、バックドアがあっても予測できないようにしました。 [出典] Redditの最近のAMA( "Ask Me Anything")で、IntelのCEOであるBrian Krzanichはこれらの懸念についての質問には答えなかった。 [ソース]
もちろん、これはおそらくIntelチップに関する問題ではないでしょう。 FreeBSDの開発者もViaのチップを名前で呼んだ。この論争は、真にランダムで予測不可能な乱数を生成することがなぜそれほど重要なのかを示しています。.
「真の」乱数を生成するために、乱数ジェネレータは「エントロピー」、またはそれらの周りの物理的な世界から一見ランダムなデータを収集します。そうでない乱数に対して 本当に ランダムである必要がある、彼らはただアルゴリズムとシード値を使うかもしれない.
Image Credit:Flickrのrekre89、FlickrのLisa Brewster、FlickrのRyan Somma、Flickrのhuangjiahui