web-dev-qa-db-ja.com

プレマスターシークレットの作成方法

私はECDHE-RSA-AE-GCM-SHAを使用するTLSのようなシステムを実装していますが、2つの問い合わせに直面しました。

ハンドシェイクの最後(およびChangeCipherSpecメッセージの前)では、クライアントとサーバーの両方が同じPre-Master Secretを構築する必要があります。

この秘密に基づいているデータは何ですか?RFSの答えが見つからないため( 4492 および 5246 )、私はこれを言います:

  • サーバーの公開ECDHEキー(ServerKeyExchangeメッセージ内で送信)
  • クライアントの公開ECDHEキー(送信、暗号化、ClientKeyExchangeメッセージ付き)

MalloryはサーバーのPublicKeyで暗号化されているため、クライアントの公開ECDHEキーを取得できなかったため、私にとっては論理コンポーネントです。はいの場合、ServerkeyExchangeメッセージの署名は間違っているため、クライアントはその試みを知っています。

これは適切な正当化ではないことを承知しており、暗号法について言えば、この種の推論は悪いことではありませんが、答えは見つかりませんRFCでは、残っているものはすべてここにあります...

さらに、プリマスターシークレットを実際に構築するためにどのアルゴリズムを使用していますか?それは古典的なハッシュ関数(SHAなど)ですか?

私はSHAMasterSecretを(乱数とPre-Patser Secretから)展開するために使用されることを知っていますが、その弟のために私は霧の中にいます...

1
3isenHeim

「ECDHE」は「エフェメラル Diffie-Hellman (楕円曲線あり)」を意味します。これが、プリマスターシークレットの由来です。クライアントはランダムなDH鍵ペア(DH秘密鍵と対応する公開鍵)を生成します。サーバーは、ランダムなDH鍵ペアも生成します。それらは、それぞれの鍵ペアの公開部分を相互に送信します。

クライアントは、プライベートDHキーをサーバーからのDH公開キーと組み合わせて使用​​して、プリマスターシークレットを取得します。

サーバーは、プライベートDHキーをクライアントからのDH公開キーと組み合わせて使用​​して、プリマスターシークレットを取得します。

Diffie-Hellmanの魔法により、両者はプリマスターシークレットに対して同じ値を取得します。しかし、依然としてその魔法により、クライアントとサーバーの両方からの公開鍵のみを閲覧し、プライベートDH鍵をまったく閲覧しない盗聴者は、プリマスターシークレットを再構築できません。

(「暗号化」はWor​​dではありません。おそらく「暗号化」を意味します。ただし、ここでは暗号化はありません。DH公開鍵はpublicであり、 、確かに、現状のまま送信されます。)

5
Thomas Pornin