SSL/TLSが「公開鍵で暗号化」と言われる謎

昨年発行されたTLSv1.3で、正式に「公開鍵で暗号化」する方式は廃止されたし、そもそもずっと前からそれ以外の方式も使われてるのに、なぜ皆口を揃えて「公開鍵で暗号化」と言ってるのか、つれづれと考察した内容の備忘録。
備忘録 セキュリティ 公開鍵暗号 TLS SSL
3560view 2コメント
19
angel as ㌵㌤の猫 @angel_p_57
なぜ「SSLとは共通鍵(の元)を公開鍵で暗号化して送る」なんてのが基本扱いされてるのか。長年不思議ではあるんだけど、なかなかややこしそうだな。

ここで基本のおさらいですが、SSL/TLSでの公開鍵暗号を使う方式は、SSL3.0からTLSv1.2まで、以下の3通りがありました

  1. DH等の鍵交換 (共通鍵暗号に使う鍵の元になる)+電子署名(RSA,DSA等)での認証
    ※このDHは一時的(Ephemeral)な鍵を使う(鍵を使い捨てにする)ので、DHEやEDHとも
  2. DH等の鍵交換のみ ( 認証も兼ねる ) ※実質ほぼ使われなかった
  3. 公開鍵暗号(要はRSA暗号) で共通鍵暗号に使う鍵の元を暗号化 ( 認証も兼ねる )

ただ、もともと 1. 以外はPFS(前方秘匿性…たとえ秘密鍵が漏洩しても過去にさかのぼって暗号化が解かれない性質)の無い方式であり、TLSv1.3になって、1. だけが残った、ということになります。

angel as ㌵㌤の猫 @angel_p_57
まず事実として、SSLv2はRSA暗号による暗号化を行う方式しかない。だから「公開鍵で暗号化して送る」は正しい。…とは言え、これ脆弱性があるとかで、すぐSSLv3が出てるんだよね。それが95年。
angel as ㌵㌤の猫 @angel_p_57
で、2000年前後、私がWeb関係に関わってた時、(もちろん方式としてRSA鍵交換はあったものの) 大抵見えるのはDHE鍵交換+RSA署名だった。

「RSA鍵交換」と言ってるのがRSA暗号を使う方式です。
同じRSAの証明書で両方対応できますが、「RSA鍵交換」「RSA署名」は別物です。

angel as ㌵㌤の猫 @angel_p_57
ちなみに、最近、昔の(2000年代初~2010年程度の)ブラウザで、古い(TLSv1.0程度の)サーバへのアクセスを試してみたけど、IEを除いて全部DHE-RSAになった。 pic.twitter.com/WU4VHrCCwY
 拡大

これだけだとIEだけ仲間外れに見えますが、実際は過去圧倒的なシェアを誇ったブラウザなわけで。
で、後で出てきますが、IEが実際「RSA暗号による暗号化」しかしてなかったというのは、かなり影響力が大きかった可能性はあります。

angel as ㌵㌤の猫 @angel_p_57
でもIEもDSA証明書でサーバたてればDHE鍵交換になるんだよね。まあ、他に選択肢はないし、なによりDHE-DSAはTLSv1.0で必須の方式だから。 …というわけで、この時点で鍵交換+電子署名が基本になったように見える。
angel as ㌵㌤の猫 @angel_p_57
ところが、実はTLSv1.1,1.2での必須方式はRSA鍵交換に代わる。…これおそらく、DSAが流行らなかったってのと、DHじゃなくてRSA鍵交換の方がいいと思う人たちがいたからだろうな。
angel as ㌵㌤の猫 @angel_p_57
DSAが流行らなかったのは…タイミング悪かったんだろうなあ。TLSv1.0でDHE-DSAが必須になったけど、これが1999年のことで、でも翌年にはRSAの特許切れとか、アメリカの輸出制限緩和(ちょうどWindowsMe IE5.5の時)で、別にもうRSAでいいやってなったんだろうし。
angel as ㌵㌤の猫 @angel_p_57
SSLv2との互換性のためにRSAが…とも考えられるけど、認証局がそもそもDSAにやる気見せてたように思えないしな。だって、今でもそうだけど、証明書の申請、どこもRSAの方法しか載ってないもの。
angel as ㌵㌤の猫 @angel_p_57
それでも、TLSv1.0決まるのがもめなけりゃ(確か96から初めて99発行だから)、DSAがもうちょっと浸透して、DHE+電子署名は揺るがなかったのかも??
angel as ㌵㌤の猫 @angel_p_57
あ。日本のガラケー、i-mode webなんか、DSAだと困ってたかもしれないから、日本だとどっちにしてもRSAだけだったかも。それはともかく、当時からLBの大きなシェアを握ってるはずのF5見ると、2010年ちょい前から急にDHを排除してる。 devcentral.f5.com/articles/ssl-p…

※注: LB … ロードバランサー(負荷分散装置)
クライアントからのアクセスを複数のサーバに振り分けることで負荷を分散し、サイト全体の処理能力を高める機器。
Webサービスであれば、httpsのSSL/TLSの処理もLBが引き受けることになる。(サーバからすれば、SSLの暗号処理負荷を引き受けて貰う形になっている)

angel as ㌵㌤の猫 @angel_p_57
バージョンv10.1.x (2009年末~) から、急にcipher suite でDH,EDHに!がつくようになったのがそれ。これがまたなんで…? 考えられるのはやっぱり性能問題か。DHE+RSAにするより、RSA一本の方が性能的には有利だから。この時には「PFSより性能だろ!」的な議論もあったと聞くし。
angel as ㌵㌤の猫 @angel_p_57
またちょうどこの頃って、1024bitが危殆化するから、2048bitに移行しようってタイミングだったはずで、機器としても性能的に凄くシビアだったとは想像がつく。1024bit DHを2048bit DHにするんじゃなくて、RSA2048bit一本に絞った方が楽だと。
angel as ㌵㌤の猫 @angel_p_57
この時楕円曲線が使えればまた話が違ったんだろうけどね…。この辺の事情はよく分からないけど、特許的に不透明で使い辛かったらしい。OpenSSLでもソースに追加されたのが2005年の0.9.8で、それがLinux distro、RHELで使えるようになったのがRHEL6.5 (2013年)のはず。
angel as ㌵㌤の猫 @angel_p_57
実はクライアントとしては、既に2011年のIE8で楕円曲線暗号に対応してたようだけどね。サーバ側が遅けりゃどうしようもない。えーと、で、さっきのF5でも楕円曲線ECDHEに対応したのがv11.4.1の2013年と。 support.f5.com/csp/article/K1…
angel as ㌵㌤の猫 @angel_p_57
で、やっぱりPFSは大事よね、的な話が出てきたのが2013か2014年あたり、だっけ? そこからまたDHE(ECDHE)+電子署名に移るようになって、去年(2018年)のTLSv1.3で、完全にRSA鍵交換が消えたと。
angel as ㌵㌤の猫 @angel_p_57
やっぱWebだと規模も拡大するし、で性能的なところは大分シビアなんだろうなあ。一方で、類似のハイブリッド暗号で当初からPFSを貫いてるSSHだけど、こっちは一度張ったセッション使いまわすし、むしろAESの負荷が大きいから、公開鍵暗号部分で性能は特に考えないか。
angel as ㌵㌤の猫 @angel_p_57
いやあ。ここらへんの話詳しい人に聞けたら面白そうなんだけどなあ…。誰か知らないだろうか。

その後、SSL/TLSでのDSA方式について改めて分かったことが。

angel as ㌵㌤の猫 @angel_p_57
さてと。今まで、SSL/TLSの暗号方式 (cipher suite)で、なんでDSAが全然使われなかったんだろうな、RSAの方が普及してたとは言え、ちょっとは使われてもいいじゃん、と思ってたんだけど、やっと最近謎が解けた。
angel as ㌵㌤の猫 @angel_p_57
結論から言うと、「RSAの証明書はCAからRSAの署名を受けること」「DSAの証明書はCAからDSAの署名を受けること」という決まりがあったから。

ちなみに、こちらの記事SSL3.0, TLS1.0~1.2の微妙な違いのまとめに載っていた話です。

残りを読む(17)

コメント

稲村 雄 @inamura_you 3月3日
ちょっと『デジタル署名=元データのハッシュを秘密鍵で暗号化』に似てますかね。 まあ、RSAならサーバ秘密鍵のPoPが暗黙裡に確認できるため、規格制定当時の貧弱なクライアント環境にも優しかったというのが大きいんじゃないかとは思ってますが。
ログインして広告を非表示にする
ログインして広告を非表示にする