機密性と認証の両方を保証するメッセージの構成要素として、AES256 CBC + HMAC SHA-256 を使用することを考えています。
特に、次のシナリオを検討してください。
- Alice は Bob に属する公開鍵を所有しています (鍵交換とアルゴリズムはこの質問の範囲外です)。Alice は、Bob と共有されている識別キー K を持っており、これを使用して自分自身を識別することができます。鍵 K を知っているのは Alice と Bob だけです。
- Alice は、Bob の公開鍵を使用して (nonce || K) を暗号化します。
- Bob はパケットを復号化し、K と nonce を取得しました。
- Bob は SHA-256 と SHA256(K || nonce) を使用して、256 ビットの K(e) を生成します。
- Bob は SHA-256 と SHA256(K || nonce + 1) を使用して、256 ビットの K(s) を生成します。
ここで、ボブがアリスに送信したいすべてのパケットに対して、ボブは次のことを実行します。
- 新しいランダムな 128 ビット IV を作成する
- IV と K(e) をキーとして使用してメッセージを暗号化します。
- K(s) をキーとし、(IV || 暗号化されたメッセージ) をデータとする SHA-256 HMAC を作成します。
- 最後に (IV || HMAC || 暗号文) を Alice に送信します
Alice も K(e) と K(s) を計算し、Bob からデータを受信するときに次の手順に従います。
- メッセージを IV、暗号文、および HMAC に分割します。
- K(s)、IV、および暗号文を使用して HMAC を計算します。
- HMAC と送信された HMAC を比較します。これが一致する場合、Alice はこのメッセージが Bob によって送信されたメッセージとして認証されたと見なし、そうでない場合は破棄されます。
- Alice は K(e) を使用してメッセージを復号化します。
このプロトコルは、ボブ以外の誰もアリスが公開鍵を使用して暗号化して送信した暗号化されたメッセージを読むことができないと仮定して、アリスがボブからのメッセージのみを復号化することを保証しますか?
つまり、この方法で作成されたメッセージは、機密性と認証の両方を保証しますか?
注: プロトコルで Bob が複数のメッセージを送信する必要がある場合、リプレイ アタックを回避するために、このスキームを少し変更する必要があります。
PS AES-GCM/CCM を認識していますが、このスキームは、ほとんどの暗号化パッケージに含まれる基本的な AES、SHA、および HMAC アルゴリズムで機能します。このソリューションも遅くなる可能性がありますが、それも問題の範囲外です。