私が読んだ限りでは、デジタル署名よりもMACの利点はありません-生成と処理が高速であるという事実を除いて。
これは本当ですか?デジタル署名(非対称暗号化)は、ほとんどすべてのWebサイトがデジタル署名を使用できるほど高速になっているようです。ですから、今日ではそれほど大きな欠点にはなりません。
重要なものが欠けていますか?
パフォーマンスだけがMACを使用する理由です。
TLS接続を検討してください。 everyパケットの場合、受信者はパケットが中間者攻撃者によって転送中に変更されていないことを確認する必要があります。したがって、すべてのパケットについて、送信者はMAC /署名を計算し、受信者はそれを確認する必要があります。たとえば、10MB /秒の転送速度と平均10kB /パケットの場合、署名を計算または検証するのに必要な時間は1ms未満です。これはデジタル署名には遅すぎます。
PC、サーバー、スマートフォンなどのハイエンドのハードウェアがあると仮定して、非対称シグネチャの作成と検証にかかる時間は、接続が確立されたときに一度行うと問題にならないほど十分短いです(組み込みデバイスでは問題になる可能性があります)。ただし、パケットごとに1回実行する必要がある場合は機能しません。
デジタル署名には、偽の署名を生成できない当事者が検証できるという利点があります。これは、TLS接続のような場合には役に立ちません。 TLSの場合、2つのパーティがセッションキーを設定します。セッションキーは、接続の開始時にランダムに生成される対称キーです。その後、キーを知っているのはクライアントとサーバーだけです。クライアントが有効なMAC(それ自体は生成しなかった)を見つけた場合、それはサーバーによってのみ生成された可能性があり、その逆も同様です。同様に、セッションキーが生成されると、(非対称暗号ではなく)キーが暗号化に使用されます。
(正しく言えば、たとえ正しい形式であっても、同じ鍵をMACや暗号化などの異なる目的に使用するべきではありません。上記のことを少し簡略化しました。「セッション鍵」は実際にはいくつかの秘密の資料です暗号鍵とMAC鍵が導出されます。または、一部の暗号スイートでは、単一の認証済み暗号鍵が導出されますが、AEアルゴリズムは2つの鍵を内部で導出します)。
HMACと署名の両方を使用して、データの整合性とメッセージの認証を確認できます。ただし、署名は否認防止の特性も提供します。メッセージとその署名が与えられると、メッセージが本当に送信者によって書き込まれたことを証明できます。
このプロパティは必要ないかもしれません。たとえば、信頼できない人とプライベートにメッセージを交換したい場合があります。あなたのメッセージが署名されている場合、相手は妥協的なメッセージを開示し、あなたがそれを書いたことを証明することができます。 HMACを使用しても、会話のプライバシーは保証されますが、相手もこの妥協的なメッセージを書いたことを証明することはできません。
考えられる答えを考えていたかもしれません。
署名があれば、受信者(クライアントアプリ)はメッセージが送信者(サーバーアプリ)から送信されたことを確認できます。しかし、クライアントアプリがサーバーに何かを送信した場合(別のHTTPリクエストがデータをポストしている場合)、メッセージが実際に同じクライアントアプリから送信されたものかどうかをサーバーは確認できません。 。
一方、HMACのようにシークレットを共有している場合は、メッセージが予期されたクライアントアプリから発信されたものであるというある程度の確実性があります。
これに関する問題は、MAC作成の秘密のソルトは、常に侵害される可能性があるため、信頼できないクライアント(JavaScriptまたはモバイルアプリ)にはあまり価値がないということです。