<前の日記(2005年01月20日) 次の日記(2005年01月29日)> 最新 編集

高木浩光@自宅の日記

目次 はじめに 連絡先:blog@takagi-hiromitsu.jp
訪問者数 本日: 71   昨日: 2746

2005年01月23日

PKIよくある勘違い(1)「オレオレ証明書でもSSLは正常に機能する」

オレオレ証明書クイズ」なるものが実施されていたようだ。

(1) 案内文の前半にある「暗号化は正常に行われます」は正しいでしょうか。

設問が悪い。案の定、正常だと回答する人が現れ、模範解答を見て 「間違っていなかったようだ」などと言っている。

たとえば、

金庫の上にその鍵が置いてあります。この金庫は正常に機能しているでしょうか?

と問うことのバカバカしさなら理解できるだろうか。あるいは、

共通鍵暗号による暗号化通信をしています。鍵は一緒に配送します*1。この暗号は正常に機能しているでしょうか?

ならどうか。暗号そのものは作動しているだろうが、それを言ったところで何 か意味があるのか? つまり、プロトコル全体として正常に機能しているかが 問われている文脈において、個々の暗号アルゴリズムが作動しているかどうか を云々すること自体が誤りだということだ。

「今の話は共通鍵暗号じゃなくて公開鍵暗号だろ」って? オーケー、では、 次の比較に対してどう答えるか。

  1. 共通鍵暗号による暗号化通信
  2. 公開鍵暗号による暗号化通信で認証なし(認証検証時の警告を無視する使用形態)
  3. 公開鍵暗号による暗号化通信で認証あり

平均的な技術者達の間の認識として、公開鍵暗号は世紀の大発明で(それはそ うなのだが)、共通鍵暗号でなしえなかったことを(何でも)解決してくれる という印象が持たれているところがあるのではないか。

たしかに上の 1.と 3.を比較すれば 3.の方が優れている。事前に鍵を秘密裏 に交換し合っておく手順を省いて、リアルで会ったことのない相手とでも即座に 安全な通信が実現できるからだ。

では、1.と 2. を比べたときはどうか。「3.ほどではないが 1.よりは 2. の 方がまし」と言えるだろうか? それは誤りである。

安全面で 2.は 1.よりも劣っていることに注意したい。1.では、共通鍵を事前 に秘密裏に入手できていることが利用時の前提である(ことが誰にも明白のも のとして認識される)のに対し、2.では、公開鍵を事前に安全に入手すること を前提にしてしない。なぜなら、警告が出るところを無視するのだからだ。

金庫の上に鍵が置かれているなら鍵を手にとって開ければよい。共通鍵暗号の 鍵が平文でいっしょに配送されている暗号化通信ならば、暗号文の傍受と同時 に鍵も傍受してその鍵で暗号文を復号すればよい。公開鍵暗号の公開鍵がいっ しょに配送されている暗号化通信では、傍受点で、流れてきた鍵を、別途用意 した自作鍵に差し替えて流してしまえば、それで暗号化されて戻ってくる暗号 文を復号できる。

こういうのを「正常に機能している」とは言わない。

それでもなお、証明書の検証を無視してSSLで暗号化通信をすることにも、 意義はあるのだという声は出てくるだろう。たしかに何もしないよりはましだ。 共通鍵暗号で鍵がいっしょに配送されてくる暗号化通信では、傍受するだけで 暗号文を復号できたのに対し、SSLのネゴシエーション時に公開鍵を差し替え るには、通信内容の改ざんが必要になるのだから、それが可能な状況というの は、単に傍受ができる状況よりは少な目かもしれない。

じつは、TLS(SSLはRFCでは「TLS」として定義された)には、そうした用途のための 通信モード(「完全な匿名モード」)も用意されている。そのことについて、RFC 2246に 次のように書かれている。

F.1.1. Authentication and key exchange

TLS supports three authentication modes: authentication of both parties, server authentication with an unauthenticated client, and total anonymity. Whenever the server is authenticated, the channel is secure against man-in-the-middle attacks, but completely anonymous sessions are inherently vulnerable to such attacks. (略)

TLS は 3つの認証モードをサポートしている。:双方の認証、サーバー認証と認証されないクライアントおよび完全な匿名である。サーバーが認証されるときは、そのチャネルはなりすまし攻撃に対しては安全であるが、完全な匿名セッションでは性質上そのような攻撃にさらされやすい。(略)

F.1.1.1. Anonymous key exchange

Completely anonymous sessions can be established using RSA or Diffie-Hellman for key exchange. With anonymous RSA, the client encrypts a pre_master_secret with the server's uncertified public key extracted from ...(略)

鍵交換において RSA または Diffie-Hellman を使用することで、完全に匿名なセッションを確立することができる。匿名 RSA では、クライアントは ServerKeyExchange メッセージから抽出された、認証のされていないサーバーの公開鍵を使用して ...(略)

Warning: Completely anonymous connections only provide protection against passive eavesdropping. Unless an independent tamper-proof channel is used to verify that the finished messages were not replaced by an attacker, server authentication is required in environments where active man-in-the-middle attacks are a concern.

警告: 完全に匿名なコネクションでは、受動的な盗聴者に対する保護しか提供されない。改竄の行われない独立したチャネルを使用して Finished メッセージが攻撃者により置きかえられてはいないことを確認しない限り、能動的ななりすまし攻撃の懸念がある環境では、サーバー認証が必要となる。

RFC 2246, The TLS Protocol Version 1.0, F.1.1. Authentication and key exchange

The following cipher suites are used for completely anonymous Diffie-Hellman communications in which neither party is authenticated. Note that this mode is vulnerable to man-in-the-middle attacks and is therefore deprecated.

以下の暗号スイートは、どちら側のパーティーも認証されることのない、完全に匿名な Diffie-Hellman 通信に使用される。このモードは、なりすまし攻撃を受けやすいため、推奨されないことに注意。

CipherSuite TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = { 0x00,0x17 };
CipherSuite TLS_DH_anon_WITH_RC4_128_MD5 = { 0x00,0x18 };
CipherSuite TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = { 0x00,0x19 };
CipherSuite TLS_DH_anon_WITH_DES_CBC_SHA = { 0x00,0x1A };
CipherSuite TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = { 0x00,0x1B };

RFC 2246, The TLS Protocol Version 1.0, A.5. The CipherSuite

7.4.2. Server certificate

The server must send a certificate whenever the agreed-upon key exchange method is not an anonymous one. This message will always immediately follow the server hello message.

サーバーは、クライアントとの間で合意された鍵交換方式が匿名方式でないときには、サーバー証明書を送信しなければならない。このメッセージは常に、 ServerHello メッセージの直後に送信される。

RFC 2246, The TLS Protocol Version 1.0, 7.4.2. Server certificate

つまり、クライアント側(たとえばWebブラウザ)が ClientHelloメッセージにおいて、TLS_DH_anon_ の値を送信して、完全匿名モードでの接続を希望したなら、そのときに限り、(man-in-the-middle攻撃の危険性を承知の上で)そのような通信が行われることになっている。それがSSL(TLS)の仕様だ。

サーバ証明書としてオレオレ証明書を使うことは、完全匿名モードでの通信をしようとするのと技術的に同じ結果をもたらすのだから、クライアントが完全匿名モードを希望していないのにサーバ側で勝手にそれを強制するのに等しく、プロトコルに違反する。

そして、完全匿名モードでの通信を希望するクライアントがあるかというと、現在主流のWebブラウザらは、そのための機能を持ち合わせていないようだ。([memo:8057], [memo:8059])

以上の理屈から、オレオレ証明書で https:// ページを提供していながら、「正常に機能しています」と表明するのは(「SSLが正常に機能している」という意味においては)虚偽の表明だ――ということになる。

一般に、Webページにおいて「暗号化されて送信されます」と書かれていたら、 読者はSSLのことを指すと思って読むのだから*2、 「私は『暗号は正常に機能している』とは書いたが『SSLは正常に機能している』 とは書いてない」とかいう言い訳は認められないだろう。

不当表示防止法で取り締まれないか

長崎産の豚肉を鹿児島産と表示して販売するくらいのことは、個人的にはべつに気にならないが、このところは、不当景品類及び不当表示防止法で厳しく取り締まられているようだし、最近では、温泉でないのに温泉だと表示していた宿の問題が槍玉にあがっていた。

それに対して、SSLの不当表示はどうか。

SSLとして機能していないのに、「暗号化は正常に行われます」などと表示して、指摘されても直さない。

そういう不当表示を、不当景品類及び不当表示防止法で一掃できないだろうか。

第2条

2 この法律で「表示」とは、顧客を誘引するための手段として、事業者が自己の供給する商品又は役務の内容又は取引条件その他これらの取引に関する事項について行なう広告その他の表示であつて、公正取引委員会が指定するものをいう。

第4条

事業者は、自己の供給する商品又は役務の取引について、次の各号に掲げる表示をしてはならない。

1.商品又は役務の品質、規格その他の内容について、一般消費者に対し、実際のものよりも著しく優良であると示し、又は事実に相違して当該事業者と競争関係にある他の事業者に係るものよりも著しく優良であると示すことにより、不当に顧客を誘引し、公正な競争を阻害するおそれがあると認められる表示

(略)

3.前2号に掲げるもののほか、商品又は役務の取引に関する事項について一般消費者に誤認されるおそれがある表示であつて、不当に顧客を誘引し、公正な競争を阻害するおそれがあると認めて公正取引委員会が指定するもの

不当景品類及び不当表示防止法

東京都の消費生活センターにこう解説されていた。

優良誤認(第4条第1号)

品質、規格、その他の内容についての不当表示

(1)商品又は役務の品質、規格その他の内容について実際のものより著しく優良であると一般消費者に誤認される表示

(2)競争事業者の供給する商品又は役務の内容よりも自己の供給するものが著しく優良であると誤認される表示

ここでいう、「品質」とは、その商品に使用されている原材料、添加物、効能、安全性をいい、「規格」とは、国、公共団体及び民間団体が定めた規格、等級などをいいます。また、「その他の内容」とは、間接的に品質または規格に影響を及ぼすもの、例えば、原産国、有効期限、製造方法などをいいます。

不当な表示は禁止されています, 東京都消費生活センター

有効期限や製造方法のようなものですら不当表示の対象になるのだから、明確な規格のあるSSL(TLS)に適合していないものを使っていながら、そうであるかのように言っているのは、十分にこの法律の対象になるのではなかろうか。

「バークシャー州長崎県」と「高知県ニューバリー市」は姉妹都市か

「サーバ管理者日誌」のこのエントリによると、長崎県電子申請システムのサーバ証明書のDNには、「S = Berkshire」と書かれているという。長崎県は黒豚が名産だっただろうか?

図1: LGPKI Application CAから「バークシャー州長崎県」の名で発行された証明書

あちこち見てまわっていたら、他にも、高知県総務部行政経営改革室が運営する「ぷらっとこうち」というサイトで、サーバ証明書に「L = Newbury」という記述があった。こちらは、そもそもがオレオレ中の認証局発行なので、もはやどうでもよい*3。しかも有効期限切れだ。

図2: オレオレ中の認証局発行の「高知県ニューバリー市」と名乗るオレオレ証明書

どうしてこういうことになっているかは、「Berkshire Newbury openssl」で検索してみると、おおかた想像がつく。

高知県の事例はそもそもが論外の外にあるのでお話にならないが、長崎県のサーバ証明書は、きちんとLGPKIのApplication CAから発行されている。こんな証明書を出してしまうようなところに、RA(登録局)ないしIA(発行局)の責任を担う資格があるのか?

少なくとも、この証明書を直ちに失効させる(revokeする)べきだろう。初の事例(?)として、LGPKIの失効システムがどのように機能するかという点でも興味深い。

*1 私も 真似して作ってみた。



  ∧_∧  カタカタ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (    )  ∧ ∧ < SSLには証明書が必要です…と。
 (    )  (,,°Д°)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ____
 ̄ ̄ ̄日∇ ̄\|  VAIO |\
        ̄   =========  \

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ほう、公開鍵暗号でセキュアプロトコルですか?

   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < な、なんですか?あなた・・・
 (  ⊃ )  (°Д°;)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ____
 ̄ ̄ ̄日∇ ̄\|  VAIO |\
        ̄   =========  \

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 証明書は自分で作ってルート入れさせとけば無料ですませる…

   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < それだとフィンガープリントの照合が必要になる…
 (     )  (;°Д°)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ____
 ̄ ̄ ̄日∇ ̄\|  VAIO |\
        ̄   =========  \

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| フィンガープリントもSSLで送れば大丈夫、と。

   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < フィンガープリント送るときのSSLの証明書も照合しなきゃだめでしょ!!
 (  ⊃ )  (°Д°;)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ____
 ̄ ̄ ̄日∇ ̄\|  VAIO |\
        ̄   =========  \
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

*2 なぜなら、Webブラウザ に他の暗号化通信の機能は無いのだから。

*3 ちなみに、直前の画面には、「個人情報の通信は暗号化されます」という表示がある。

本日のTrackBacks(全6件) [TrackBack URL: http://takagi-hiromitsu.jp/diary/tb.rb/20050123]

[http://takagi-hiromitsu.jp/diary/20050123.html:title] TLSとSSLの微妙な違いは http://www.atmarkit.co.jp/fnetwork/rensai/cell02/ssl2.html に詳しい。 ここをちゃんと読めれば、TLS/SSL通信はなりすましを防ぐというプロトコル層と暗号通信をするというプロトコル..

セキュリティ研究者である高木浩光氏の日記を中心に、「オレオレ証明書」(自己署名証明書) バッシングが盛り上がっている。オレオレ証明書クイズなんてものまで出現中。 そんなバッシングの流れに逆らうように (いや、逆らっているわけではないんですが) 、信頼できるオ..

SSL/TLS通信の最初のネゴシエーションの段階で、サーバからクライアントに対して「サーバの証明書と公開鍵」を認証局の秘密鍵で暗号化したもの((この「秘密鍵で暗号化」は認証局に必要な情報を送って、認証局でしてもらえる。秘密鍵は認証局しか知らないわけなので当たり..

二日ほどかけて結城浩『暗号技術入門 秘密の国のアリス』[isbn:4797322977]を読了。たいへん読みやすい本でした。暗号関係はなんとなくは知っていたけどまとまって勉強したことがなかったので読んでみましたが、ずっと疑問に思っていながら放置してたこととか色々すっき..

KLab で採用している DB サーバのセキュリティ向上策を説明する前に、 DB アクセスの際に SSL クライアント認証を行なう方法について説明します。 DB サーバへのアクセスにおいて SSL クライアント認証を必須とし、 (a) 開発者が (デバッグ目的等で) DB アクセ....

検索

<前の日記(2005年01月20日) 次の日記(2005年01月29日)> 最新 編集

最近のタイトル

2024年11月11日

2024年07月28日

2024年07月27日

2024年07月07日

2024年04月07日

2024年04月01日

2024年03月23日

2024年03月19日

2024年03月16日

2024年03月13日

2024年03月11日

2023年03月27日

2022年12月30日

2022年12月25日

2022年06月09日

2022年04月01日

2022年01月19日

2021年12月26日

2021年10月06日

2021年08月23日

2021年07月12日

2020年09月14日

2020年08月01日

2019年10月05日

2019年08月03日

2019年07月08日

2019年06月25日

2019年06月09日

2019年05月19日

2019年05月12日

2019年03月19日

2019年03月16日

2019年03月09日

2019年03月07日

2019年02月19日

2019年02月11日

2018年12月26日

2018年10月31日

2018年06月17日

2018年06月10日

2018年05月19日

2018年05月04日

2018年03月07日

2017年12月29日

2017年10月29日

2017年10月22日

2017年07月22日

2017年06月04日

2017年05月13日

2017年05月05日

2017年04月08日

2017年03月10日

2017年03月05日

2017年02月18日

2017年01月08日

2017年01月04日

2016年12月30日

2016年12月04日

2016年11月29日

2016年11月23日

2016年11月05日

2016年10月25日

2016年10月10日

2016年08月23日

2016年07月23日

2016年07月16日

2016年07月02日

2016年06月12日

2016年06月03日

2016年04月23日

2016年04月06日

2016年03月27日

2016年03月14日

2016年03月06日

2016年02月24日

2016年02月20日

2016年02月11日

2016年02月05日

2016年01月31日

2015年12月12日

2015年12月06日

2015年11月23日

2015年11月21日

2015年11月07日

2015年10月20日

2015年07月02日

2015年06月14日

2015年03月15日

2015年03月10日

2015年03月08日

2015年01月05日

2014年12月27日

2014年11月12日

2014年09月07日

2014年07月18日

2014年04月23日

2014年04月22日

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|05|06|07|08|09|10|11|12|
2012|02|03|04|05|06|07|08|09|
2013|01|02|03|04|05|06|07|
2014|01|04|07|09|11|12|
2015|01|03|06|07|10|11|12|
2016|01|02|03|04|06|07|08|10|11|12|
2017|01|02|03|04|05|06|07|10|12|
2018|03|05|06|10|12|
2019|02|03|05|06|07|08|10|
2020|08|09|
2021|07|08|10|12|
2022|01|04|06|12|
2023|03|
2024|03|04|07|11|
<前の日記(2005年01月20日) 次の日記(2005年01月29日)> 最新 編集