私のセキュリティを意識した友人は、ランダムなサイコロを使ってエントロピーを生成しようとしてランダムなパスワードを生成しようとしていました。私は、乱数ジェネレーターのセキュリティと、ランダムなサイコロを考えるだけで同じことができるかどうか知りたくなりました。サイコロや安全な乱数ジェネレータからの乱数ではなく、人間が生成した乱数を使用すると、パスワード/キー生成のセキュリティが損なわれますか?
多くのプログラミング言語に含まれている標準の乱数ジェネレーターが、既知の悪用可能な方法で暗号的に安全でない可能性があることはわかりますが、脳によって生成される乱数はどうですか?私が彼女に尋ねたとき、彼女は人間がエントロピーを生成するのはひどいことだと述べましたが、これが事実であるかどうかはわかりません。人間はキーエントロピーの生成においてどのようにランク付けしますか?人間の心が、悪用されることなく、キー/パスワードの生成のために乱数ジェネレータの代わりをすることは可能でしょうか?
エントロピーが脳のプロセスからどういうわけかが生成される可能性があるのはもっともらしいが、それを直接行うこと(たとえば、「乱数を考える」)は、私の意見では、かなり簡単に割り引くことができます。
ランダムなビットシーケンスでは、ビットの値はシーケンス内の他のすべてのビットとは無関係です。ただし、ビットのランダムなシーケンスを生成するように人に依頼した場合、ビットの生成を、その前にあるビットの知識から分離する方法はありません。
いくつかの可能性を探りましょう:
人間は数字を選ぶのが苦手です。それらはより奇数exoticであるため、奇数への明らかなバイアスがあります。次のような投票があります: 17は「最もランダムな」番号ですか?
バイアスをいくらか緩和するには、数字の長いストリーム(0-9)をユーザーに言わせることができますが、バイアスは依然として存在します。
人間は並外れた言語能力を持っています [要出典]。つまり、偶然に使わないわけにはいきません。 T
と言った後、英語を第一言語とする人がH
をフォローする可能性は非常に高いです。偏った 文字の頻度 から始めないでください。
疑いを支持または否定するものは何も見つかりませんでしたが、0
および1
のストリームにもバイアスがかかると思います。パターン認識は私たちが生き残ることを可能にしたので、混乱の中で秩序を求めます。これは、人が0101
を何度も繰り返す可能性が高いことを意味しますが、1つまたは2つだけではなく、あらゆる種類のパターンが存在する必要があります。
人間は確率が悪いので、これは本当に難しいです。これの指標は 誕生日の問題 ですが、この質問には実際には当てはまりません。
最良の方法は、SHA-512のような暗号で保護されたハッシュ関数を使用して、上記の出力をハッシュすることです。 ウィキペディアによると 英語のテキストには、メッセージの各文字に対して0.6〜1.3ビットのエントロピーがあると述べています。人はランダムなことを言おうとしていますが、実際には成功していません。1文字あたり2ビットが当てはまると仮定しましょう。つまり、512ビットのキーに対して十分なエントロピーを得るには、少なくとも256文字を言う必要があります。
ランダム性は筋肉の動きから生じます。これは、システムRNGが信頼できない場合に、高品質のランダム性を生成するために一部のソフトウェアソリューションですでに行われています。後期のTruecryptが思い浮かびます。