ハッシュとMAC(メッセージ認証コード)の違いは何ですか?
それらの定義により、彼らは同じ機能を果たしているようです。
誰かがその違いを説明できますか?
主な違いは概念です:ハッシュはデータの整合性を保証するために使用されますが、[〜#〜] mac [〜#〜]は整合性と認証を保証します。
つまり、ハッシュコードは、外部からの入力なしでメッセージから盲目的に生成されます。取得するのは、メッセージが移動中に変更されたかどうかを確認するために使用できるものです。
MACは代わりに、コードを生成するときに使用するハッシュ関数のシードとして秘密キーを使用します。これにより、受信者は、メッセージが変更されていないだけでなく、送信者が予想どおりであることを確認できます。攻撃者はコードの生成に使用された秘密キーを知ることができませんでした。
ウィキペディアによると、あなたはそれを持っています:
MAC関数は暗号化ハッシュ関数に似ていますが、異なるセキュリティ要件があります。安全であると見なされるためには、MAC関数は、選択された平文攻撃の下での実在の偽造に抵抗しなければなりません。これは、攻撃者が秘密鍵を所有し、攻撃者が選択したメッセージのMACを生成するOracleにアクセスできる場合でも、攻撃者は実行不可能な量の計算を実行せずに他のメッセージのMACを推測できないことを意味します。
もちろん、それらは類似していますが、異なる方法で実装されます。通常、MAC生成アルゴリズムは、秘密鍵の使用を考慮する拡張機能を備えたハッシュコード生成アルゴリズムに基づいています。
ハッシュは、メッセージからダイジェストを生成する関数です。暗号的に安全なハッシュは、特定のダイジェストでメッセージを生成することは計算上実行不可能です。メッセージのハッシュだけでは、特定のメッセージの送信者に関する情報は提供されません。メッセージのハッシュを安全に通信できる場合、それを使用して、保護されていないトランスポートを介して大きなメッセージが正しく受信されたことを確認できます。
メッセージ認証コードは、メッセージの受信者がメッセージの送信者が共有秘密鍵を持ち、秘密鍵を知らない誰もいないことを認証できるように、共有秘密鍵をメッセージと組み合わせる方法ですメッセージを送信または変更した可能性があります。
HMACは、ハッシュベースのメッセージ認証コードです。通常、これには、共有シークレットとメッセージの何らかの組み合わせに1回以上ハッシュ関数を適用することが含まれます。 HMACは通常、RFC 2104またはFIPS-198で文書化されたアルゴリズムを指します。
MACはメッセージを暗号化しないため、メッセージはプレーンテキストです。秘密キーは公開されないため、キーを侵害することなく、オープンチャネルでMACを送信できます。
これを別のフォーラムから要点を見つけて見つけてください。
これらのタイプの暗号プリミティブは、それらが満たすセキュリティ目標によって区別することができます(「メッセージに追加する」という単純なプロトコルで)。
整合性:受信者は、メッセージが誤って変更されていないことを確信できますか?
認証:受信者は、メッセージが送信者から発信されたことを確信できますか?
否認防止:受信者がメッセージと証明を第三者に渡す場合、第三者はメッセージが送信者から発信されたことを確信できますか? (私は、法的意味ではなく、暗号の意味での否認防止について話していることに注意してください。)また、この質問は重要です:
Keys:プリミティブには共有秘密鍵、または公開鍵と秘密鍵のペアが必要ですか?短い答えは表で最もよく説明されると思います:
Cryptographic primitive | Hash | MAC | Digital
Security Goal | | | signature
------------------------+------+-----------+-------------
Integrity | Yes | Yes | Yes
Authentication | No | Yes | Yes
Non-repudiation | No | No | Yes
------------------------+------+-----------+-------------
Kind of keys | none | symmetric | asymmetric
| | keys | keys
使用するキーに自信がない認証は役に立たないことを覚えておいてください。デジタル署名の場合、受信者は検証キーが実際に送信者に属していることを確信する必要があります。 MACの場合、受信者は、共有対称キーが送信者とのみ共有されていることを確信する必要があります。
基本的に主な違いは、MACは秘密キーを使用し、ハッシュはキーを使用しないことです。そのため、MACにより認証を実現できます。
ハッシュ関数:任意の長さのメッセージを固定長のハッシュ値にマッピングする関数で、認証者として機能します。
MAC:認証機能として機能する固定長の値を生成するメッセージと秘密鍵の機能。
ハッシュは、メッセージの要約またはフィンガープリントであり、中間者攻撃を受けやすいため、整合性も認証自体も提供しません。 AがMのハッシュHと組み合わされたメッセージMをBに送信するとします。代わりにCがメッセージをキャプチャし、M2のメッセージM2とハッシュH2を生成し、Bに送信します。 Aからの元のメッセージかどうか。ただし、MACなど、整合性と認証を実現するために、ハッシュを他の方法で使用することができます。
メッセージの要約でもあるMACは、整合性と認証を提供します。 MACはさまざまな方法で計算できます。最も簡単な方法は、メッセージと共有秘密鍵という2つの入力を持つハッシュ関数を使用することです。共有秘密鍵を使用すると、MACに認証機能が追加され、整合性と認証が提供されます。ただし、共有秘密鍵を持っている者はメッセージとMACを生成できるため、MACは否認防止を提供しません。ここでは、デジタル署名と公開キー暗号化が実際に使用されています。