私のプログラムはサーバーに接続します。サーバーの公開鍵はすでに知られています。次に、プログラムは初期化ベクトルとともにAESキーを暗号化し、サーバーに送信します。サーバーはメッセージを復号化し、今後はAESを使用して会話を暗号化します。
私の質問は、IVを生成する方法についてです。私が素朴な方法で現在の時刻を疑似ランダムジェネレーターにシードすると、攻撃者はおそらくIVについていくつかの非常に良い推測をする可能性がありますが、これは私が望んでいることではありません。
ハードウェアランダムジェネレーターは遅いだけでなく、どこでも利用できるわけではないので、別のアプローチを採用したいと思います。クライアントプログラムを最初に起動したとき、TrueCryptと同じように、ユーザーにランダムなマウスの動きをいくつかさせます。これで、マウスの動きによって作成された「ランダムビット」を保存し、ジェネレーターが必要な場合は、それらをシードとして使用します。もちろん、ランダムビットはシードとして使用するたびに更新する必要があります。そして、これが私の質問です。生成された最初の数個のランダムビットを新しい「ランダムビット」として保存することを考えました。(したがって、次にソフトウェアが起動したときにランダムエンジンを初期化するために使用されます。)これが十分にランダムであるかどうか、または疑似ランダムジェネレーターがここで推測可能なパターンを示すかどうかはわかりません。(私はおそらくstd :: mt19937 http://en.cppreferenceを使用します。)。
編集:チェーンモードが変更されるので、「最も高い」要件のモードで機能させたいと思います。私が正しく覚えていれば、これはCBCになります。
注意:私が書いているソフトウェアは純粋に実験的なものです。