これは、Hybrid RSA 2048、AES 256を使用し、HMAC SHA-256で認証された大きな暗号化メッセージを送信するための安全な戦略ですか?
アリスがボブのRSA公開鍵をすでに持っているとすると、アリスは次のようになります。
ボブは次に進みます:
基本的に、上記のハイブリッドRSA/AES/HMAC SHA-256アプローチに明らかな弱点があるかどうか、または誰かが別の方法で行うことはありますか?
上記の戦略は、マスターキーのSHA-512ハッシュから派生するのではなく、暗号化と認証用に個別のAESキーを作成する @ puzzlepalace's feedback を含むように改訂されました。
他のフィードバックや改善のための提案は大歓迎です!
私は一歩一歩順を追って説明しますが、全体的な暗号化システムは、私にとって最も論理的であるようです。
- 新しいAES 256ビット/ CBC/PKCS7マスターキー(Km)を生成する
- 新しい128ビットIV(強力なPRNG)を生成する
攻撃者がアクセスできるOracleの種類はなく、ビットフリッピング攻撃はタグによって除外されているため、CBCはここで問題ありません。ランダムIVは正しいです。キーサイズとしては256ビットで十分です。
- (Km)のSHA-512ハッシュを生成=>(Hm)
- (Hm)を暗号鍵=>(Kc)と認証鍵=>(Ka)に分割します。
これで問題ありません。 1つのコメント、私は実際にはハッシュを介して展開されるマスターシークレットに精通していません(したがって、これがベストプラクティスと考えられる場合は修正してください)、256ビットキーを2つだけ生成しない理由はありますか?ネットワークでパケットサイズを節約する必要がない限り、AES用とHMAC用の2つの256ビットキーを生成しないのはなぜでしょうか。ネットワーク上では256ビットしかありません。
- (Kc)およびIV =>(M)eを使用してメッセージとタイムスタンプを暗号化する
- (Ka)でHMAC SHA-256を使用して(IV)+(M)eに署名=>(IV +(M)e + Tag)
これは問題ありません。暗号化してからMACを使用すると、IND-CCAになります(つまり、最高の汎用構造)。ほんの少し注意:HMACは署名ではなく、タグです。 (タグは整合性と信頼性を提供し、署名は否認防止も提供します)。
- OAEP =>(IV + Km + P)eが埋め込まれたボブのRSA公開鍵で(IV + Km)を暗号化
- Bob RSA暗号化AESキー(IV + Km + P)eおよび署名済みAESメッセージ(IV +(M)e + Tag)を送信します
OAEPはRSAパディングに適した選択肢であり、IND-CCAです。ここでは問題はありません。
対称方式と非対称方式の両方が、非常に安全な選択された暗号文攻撃の影響を受けないように見えます。そのため、RSA暗号文とAES暗号文の両方で同じIVを暗号化することは問題ではないと思います。特に、IVはCBCモードで秘密である必要もないため(予測可能または再利用すべきではありません!)、平文で送信することができます(おそらく、AES暗号文にプレーンテキストIVを追加して、それ)。次に、受信者の公開鍵で暗号化する必要もありません。
ご不明な点がございましたら、お気軽にご説明ください。