2010/09/23

diffie-hellman dhe

なんか、質問受けてたんですよね、きっと
DH と DHE って何が違うの? って話になったんで検索しました

夜でもアッサム: SSL(TLS)のDHとDHEの違い
なんかもぉ、しっかり書いてありましたよ
  • DHEのEは、EphemeralのE。
  • DHEは、DHパラメータを通信時に動作に作成する。
  • DHは、DHパラメータは証明書に書かれている物を使う。よって、static DHとも呼ばれる。
  • DH-RSAは、証明書にCAがRSAで署名したという事。証明書にRSA鍵が入っているわけではない。
  • DHE-RSAは、証明書にRSA鍵が入っている。


でね、気になるので原典をあたるわけですよ、
英語だと辛いから和訳ですけど
The TLS Protocol Version 1.0
DH は、認証局(CA)によって署名されたサーバー証明書に含まれているDiffie-Hellman パラメータを使用した暗号スイートを示すものである。DHEは、CA によって署名された DSS またはRSA証明書により署名されたDiffie-Hellmanパラメータを使用した一時的 Diffie-Hellman を示すものである。使用される署名アルゴリズムは、DHまたは DHEパラメータの後に指定される。
おぉ、なるほど、これだ

この前後に、大量の CipherSuite が記載されています。
抜粋すると
CipherSuite TLS_RSA_WITH_RC4_128_MD5 = { 0x00,0x04 };
CipherSuite TLS_RSA_WITH_RC4_128_SHA = { 0x00,0x05 };
CipherSuite TLS_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x0A };
CipherSuite TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = { 0x00,0x0D };
CipherSuite TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x10 };
CipherSuite TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = { 0x00,0x13 };
CipherSuite TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x16 };


SSL/TLS って何をしてるかってーと
  • サーバ(とクライアント)の認証
  • 通信の暗号化
  • 通信の改竄検知
でした。で、それぞれ
  • 証明書(=身元情報+公開鍵+それらの認証局による署名)と公開鍵に対応する秘密鍵を持ってること
  • 外部とは秘密に交換した情報を鍵とした暗号化
  • 外部とは秘密に交換した情報を鍵とした HMAC
で実現してました。

何が大切かっていうと「信頼できる相手」と「鍵交換」できるってことね

TLS_RSA_WITH
鍵交換に使える RSA 証明書があるんで、秘密鍵持ってることを確認して認証して、証明書の鍵で鍵交換
TLS_DH_???_WITH
DH 証明書があるんで、鍵交換で同じもの共有できると秘密鍵の所有も確認できるんで認証もできる。??? ってのは証明書の署名。
TLS_DHE_???_WITH
鍵交換には使えないかもしれない? RSA/DSS 証明書があるんで、秘密鍵持ってることを確認して認証して、公開鍵で署名した DH の鍵なら信頼できるんでそれを使って鍵交換。??? は、何だ? 証明書の公開鍵か? 署名か?


かな、ちょっと想像入ってるけど。
分からない部分もあるけど。

っていうか鍵交換に使える RSA 証明書しか見たことないし
TLS_RSA_WITH だけで許してもらえるよね、きっと。