web-dev-qa-db-ja.com

RC4で使用する場合、再利用されたキーと初期化ベクトルを組み合わせるにはどうすればよいですか?

私は自分で書いたrc4実装を使用して暗号化プログラムを書いているレベルの学生です。私は基本的なアルゴリズムを正しくコーディングしています(そして、特定のキーとプレーンテキストの暗号文が信頼できるソースによる別のオンラインrc4実装と一致することを確認しました)。キーストリームのnバイト(デフォルトでは768)を破棄するdrop(n)メソッドを追加しました。

私はrc4の脆弱性を認識しており、別の暗号化方法を使用するよりも、これらの欠陥にパッチを適用する方がはるかに手間がかかることを理解しています。しかし、セキュリティを理解するために、再利用されたキーと一意の初期化ベクトルを安全な方法で組み合わせるにはどうすればよいでしょうか。復号化時に使用する初期化ベクトルをどのように保存しますか。最後に、ユーザーが作成したキーの強度はどれくらいですか?

2
Ryan Codrai

再利用されたキーと一意の初期化ベクトルを安全な方法で組み合わせるにはどうすればよいですか?

脆弱性を回避するためにRC4でキーとIVを組み合わせる標準的な方法は、それらを連結して暗号化ハッシュに渡し、そのハッシュのダイジェストをRC4キーとして使用することです。これにより、悪用可能な関係を破壊することでキーの回復を可能にする可能性のある、関連する重大なキー攻撃が打ち負かされます。

復号化時に使用する初期化ベクトルをどのように保存しますか。

これは完全にプロトコルに依存します。 IVは、保存することも、一意であることが保証される方法で決定論的に導出することもできます(セッションID、パケット番号、単調カウンターなどから)。

最後に、ユーザーが作成したキーの強度はどれくらいですか?

キーが少なくとも16個の完全にランダムなバイトで構成されている場合は、ブルートフォース攻撃が問題にならないように十分に安全である必要があります。キーが非常に強力であっても、RC4はまだ優れた暗号ではないことに注意してください。初期のキーストリームを削除した場合でも、悪用される可能性のある長期的なバイアスがあります

2
forest