MAC(例:hmac_sha256など)と対称暗号化(例:rc4など)の違いを理解していますが、暗号化を使用することでMACが解決できないというMACの利点は何ですか?
MACを使用して、メッセージが目的の送信元からのものであること、およびメッセージを秘密鍵でハッシュすることにより送信によって改ざんされていないことを確認していることを知っています。
Rc4(またはポイント以外のその他のアルゴリズム、強度)を使用してメッセージを暗号化しても、同じ結果が得られない場合でも、受信者はメッセージを復号化するための秘密鍵を知っている必要があります。
私が考えることができる唯一の違いは、MACではメッセージ自体がプレーンテキストであるため、メッセージの認証は非常に高速です。では、パフォーマンスだけが違いますか?それとも、メッセージの内容は機密ではなく、本物かどうかを検証したいだけなのです。
これらの2つの概念に関する情報をいただければ幸いです。
暗号化は機密性を提供し、MACは完全性を提供します。暗号化のみを使用すると、メッセージが 暗号文のみの攻撃 に対して脆弱になります。
例はそれをより明確にします。次のようなメッセージを送信するとします。
M = "100 $をアカウント591064に転送"
送信者は対称鍵を使用して、メッセージを暗号化し、E(M)
を送信できます。鍵の所持者以外は、有効なメッセージを送信できません。守秘義務があります。
しかし、攻撃者は暗号文を変更して、解読されたときに別のことを言わせる可能性があります。明らかに、メッセージが大きくなり、構造が大きくなるほど、実際に実行することが難しくなります。
MACと暗号化を併用すると、MACが計算しないため、暗号テキストの変更を検出できるようになります。この例では、暗号化とMACに同じキーを使用する場合、メッセージを次のように変更できます。
M = "100 $をアカウント591064に転送| a46c0db15acdd36b4e92a82e5dc6c14f"
暗号化し、再度E(M)
を送信します。ハッシュは暗号化され(それはあなたのMACです)、メッセージは暗号化されます(機密保持のため)。これにより、メッセージがランダムな単一バイトであっても、暗号テキストを変更して有効なメッセージを生成することが計算上不可能になります。
最適なハッシュ、暗号化、およびキーの長さの選択は別の話です。
結論として:
多くの場合、多くのセキュリティプロパティを実現するには、暗号化プリミティブを組み合わせる必要があります。
@ ixe013はそれをうまく説明しています。暗号化とMACの目的は異なります。
整合性が必要な場合は、MACを使用する必要があります。暗号化は整合性を提供しません。
機密性が必要な場合は、両方の暗号化とMACを使用する必要があります。この場合は暗号化で十分だと思うかもしれませんが(MACは必要ありません)、間違っているでしょう。 メッセージ認証なしで暗号化を使用しない を参照してください。
そうは言っても、実際には 独自の暗号を使用するべきではありません 。つまり、アプリケーションのニーズを満たすために、暗号化プリミティブの組み合わせを構築しようとするべきではありません。つまり、暗号化アルゴリズムとメッセージ認証コードのレベルで考えるべきではありません。これを行うとエラーが発生しやすくなるため、必要になることはほとんどありません。代わりに、安全な通信チャネルまたは安全なストレージシステムを提供するために、既存の十分に吟味された暗号化システム(TLS、GPG、SSH、OpenVPN、IPSecなど)を使用する必要があります。その場合、既存の暗号化システムがこれらの詳細を処理します。暗号学者はこれらの詳細に精通しているので、あなたがする必要はありません。