まず、ランダム ビットではなく、128 のランダム バイトを生成しています。しかし、あなたの明確化はすべての違いを生みます:
サーバー/クライアント アプリケーションを安全な方法で構築しています。ユーザーがサーバーに接続した後、そのサーバーに接続している他のユーザーと通信するには、認証を受ける必要があります。ユーザーがサーバーに認証を要求すると、サーバーは 128 ビットの乱数でクライアントに応答します。
その場合、 8 倍のビットを生成しているという事実を考慮した後でも、ソリューションは非常に間違っています。疑似乱数System.Random
のみであり、実際にシードされた場合、エントロピーは 31 ビットしかありません。(*) 安全であるためには、128 ビットすべてのエントロピーが必要です。
ビットが欠落するたびに、問題が攻撃しやすくなることを忘れないでください。128 ビットのエントロピーが必要で 31 ビットある場合、問題は4倍簡単に攻撃できません。問題は 2 128-31 = 10 29倍攻撃しやすい!
偶然にも、私はこれについてブログ記事を書きました。Random
最初の 5 つか 6 枚のカードだけを与えられたときにシャッフルしたカードのデッキの残りを理解するよう読者に挑戦しました。誰かが数時間で力ずくで解決策を見つけました。ランダムは非常に弱いです。. http://ericlippert.com/2013/05/06/producing-permutations-part-seven/を参照してください。
セキュリティ システムに暗号強度のランダム性が必要な場合は、128 ビットを超えるエントロピーを持つ特別な目的のランダム性ソースを使用する必要があります。
したがって、CodeInChaos の答えは正しいものです。
この話には 2 つの教訓があります。
まず、これがセキュリティ システムの設計が非常に難しい理由です。正しく処理すべき詳細が非常に多く、それらすべてを正しく処理する必要があります。そうしないと、システムは安全ではありません。
次に、適切な回答が得られるように、質問に十分な情報を入力してください。
(*) 実際には、これらの 2 31の可能なシードのいくつかは他のシードよりもはるかに可能性が高いため、それよりもかなり少ないです。