web-dev-qa-db-ja.com

HMACキーはどのように交換されますか?

ちょうどこれについて疑問に思います。機能するためにPKIが必要ですか?

6
eez0

HMACキーは対称キー、つまりバイトの束です。 「対称性」は、次の重要な事実に関連しています。very same keyは、メッセージのHMAC値を生成するためと、メッセージのHMAC値を検証するための両方に使用されます。その意味で、HMACはnot a デジタル署名アルゴリズム です(それにもかかわらず、一部の人々はHMACについての「署名」について話していますが、これは間違っていて混乱しています)。

対称鍵の配布は、次の2つの理由から複雑な作業です。

  • 旅行は暴露の追加のリスクを意味するため、旅行する秘密の価値は「秘密が少ない」ものです。
  • 秘密は、あまりにも多くの人々がそれを認識していない場合にのみ、秘密のままでいることができます。したがって、nの人々が互いに対称暗号化を実行できる必要がある場合、多かれ少なかれ、ユーザーのpairごとに共有秘密が必要です。したがって、システム全体にn(n-1)/ 2対称鍵が存在します。

物事をより簡単にするために、 公開鍵暗号 が発明されました。 非対称暗号とも呼ばれます。デジタル署名とともに使用される場合、署名の生成に使用される鍵は、署名の検証に使用される鍵とは異なります。それらは数学的に相互にリンクされていますが、署名検証鍵から署名生成鍵を再計算することは現実的ではありません(またはそう希望しています)。したがって、後者を公開することができるので、その名前が付けられます。

公開鍵暗号化により、鍵配布の問題が大幅に容易になります。

  • 公開鍵は公開されているため、転送の機密性は問題ではなくなりました。
  • 各ユーザーは公開鍵と秘密鍵のペアを1つしか持たないため、システム全体での鍵の数ははるかに少なくなります。

現在、公開鍵暗号化は、鍵配布を簡単ではなく簡単にします。それでも、ユーザーが適切な公開鍵を使用していることを確認できるような方法を考え出す必要があります。これが [〜#〜] pki [〜#〜] の出番です:PKIは公開鍵を配布するシステムです。


では、実際にはどうなるでしょうか。 SSL/TLS を検討してください。HTTPと組み合わせてよく使用され、HTTPSを生成します。 WebブラウザーがHTTPSを利用したWebサイトに接続する場合:

  • 最初の「ハンドシェイク」手順が実行され、サーバーがクライアント(ブラウザ)に証明書を表示します。これはPKIです。証明書にはサーバーの公開鍵が含まれており、署名されています。この署名はPKIの化身です。クライアントは一連の署名を検証し、最終的に、クライアントが実際に見ている公開鍵は、目的のサーバーからの本物の公開鍵であると確信します。
  • サーバーの公開鍵を使用すると、より非対称な暗号化が発生します(今回は 鍵交換 、非対称暗号化に基づいて可能、署名ではありません)、最終的には素晴らしい結果が得られます:クライアントこれでサーバーは共有シークレットの値を認識し、回線をスパイする人はその値を再構築できなくなります。
  • 次に、共有シークレット値が( キー導出関数 を使用して)いくつかの対称キーに拡張されます。クライアントとサーバーは、相互に送信するデータを暗号化およびMACするために使用します。 SSL/TLSでは、通常のMACアルゴリズムはHMACです。

全体像は、PKIを使用して公開鍵を配布し、次にこれらの公開鍵を非対称暗号化で使用して動的に共有秘密を作成し、その共有秘密をHMACなどの対称アルゴリズムで使用します。 。

したがって、PMACでHMACキーを直接配布することはありません。中間層が1つあります。

22
Tom Leek