はじめに
ルート証明書?中間CA証明書?サーバID?
なにやらちんぷんかんぷんの用語が頭の中を飛び交っているのでこれを機にまとめてみた。
大枠ではSSL通信の話だと思ったが、どちらかというともっと小さい枠の電子証明書とか電子署名の話だな。
とりあえず以下をまとめた。
セキュリティ事故はあった方がいい?ないほうがいい?問題
そりゃない方がいいだろう。
でも万が一、IDやパスワードが外部に漏れたとしても社会的な信用の失墜とならないために暗号化技術を利用した電子証明書や電子署名を取り入れようという話。
目次
電子証明書(以下証明書)とは
認証局(CAという)の発行する電子署名がついた、Webサイトが正当なものであることを証明するもの。
主なアクターは以下。
証明書発行者:認証局
電子署名の発行元:認証局
証明書申請者:Webサイトの管理者
電子署名の暗号化方式:公開鍵暗号方式
電子証明書の方程式
電子証明書 = 所有者情報 + 所有者の公開鍵 + 認証局の電子署名
共通鍵暗号方式とは
公開鍵暗号方式を説明する前にこれを説明しよう。
例えるなら「3文字」という鍵で作る暗号で、「RKDBRX」という暗号を作る。
これを同じ「3文字」を使って復号すると、「OHAYOU」となる。
つまり暗号化するにはアルファベットで3文字後ろに進め、復号するには3文字前に戻せばいい。
このように同じアルゴリズム(ルールみたいなもの)の鍵を使って逆の作業を行うと、可逆的に暗号化↔︎復号を繰り返せるものを共通鍵暗号方式と呼ぶ。
しかしこの暗号化方式には欠点があり、
- 通信する相手の数分鍵が必要になる
- 安全に共通鍵を相手に渡すことが困難である
というものがある。
公開鍵暗号方式とは
一方で先の電子署名でも使われている公開鍵暗号方式では、2つの異なる鍵を利用して暗号化を実現している。
- 公開鍵
- 秘密鍵
例えるなら閉めることしかできない金庫の鍵と開けることしかできない金庫の鍵を考えるといい。
当然、開けることしかできない鍵は秘密鍵となる。
一般的には公開鍵で暗号化し、秘密鍵で復号している。
ちなみに上の説明とは逆方式の「秘密鍵で暗号化し、公開鍵で復号ができるものもある」と書いてあるけど、これはRSA暗号という公開鍵暗号方式の実装らしいぞ。
でもそうなったら秘密鍵で暗号化した文書が誰でも利用できる公開鍵で第三者に解読できてしまうように思えるんだが、、、と疑問に思うだろう。
おまえらは勘が鋭いぞ。次で説明してやる。
電子署名とは
先の電子証明書のところで電子証明書には認証局が発行する電子署名が必要と書いたが、この電子署名のメリットは何だろう。
まずはどんなものかだが、最初に以下の3つをまとめて相手に送る。
- 暗号化されたメッセージダイジェスト - (1)
- 元データ - (2)
- 自分の電子証明書
これを受信した相手はまず自分の公開鍵を使って「(1)暗号化されたメッセージダイジェスト」を復号する。
(メッセージダイジェストというのは元データをハッシュ関数でハッシュ化したものを指す。※Rubyのハッシュではないぞ。)
これができることで正しい相手と通信できていることになる。
次に「(2)元データをハッシュ化したメッセージダイジェスト」を作る。
そして「(1)復号したメッセージダイジェスト」と「(2)元データをハッシュ化したメッセージダイジェスト」が一致すれば、データが改ざんされていないとわかる。
得られるメリットは以下の通り。
- 正しい相手であるということがわかる
- 改ざんを検知できる
つまり公開鍵暗号方式の逆方式がこの電子署名ということになる(本来は公開鍵暗号方式の中に電子署名があるんだがわかりやすくしたぞ)。
先のおまえらの疑問の回答としては、「解読はできる」が改ざんやなりすましができないということになるな。
でも解読もできちゃいけないよな、、、?と思った人はワイと同じ発想だ。
もちろんいい意味ではないぞ。
ここで解読ができていいのは、これは電子署名として使っているからだ。
つまり解読できる(復号できる)ということがイコール正しい差出人だよ(正しい人が署名したものだよ)ということを証明してくれるからだ。
公開鍵暗号は解読されては困るが、電子署名は解読されてもOKなんだな。
ルート証明書?中間CA証明書?サーバID?
SSL通信の際は以下のような構成で電子証明書を上に辿っていくらしい。
ルート証明書(ブラウザに標準で格納されています) ┗中間CA証明書(各製品専用の中間CA証明書をダウンロードし、ウェブサーバにインストールします) ┗サーバID(お客様のサーバID:取得後、ウェブサーバにインストールします) SSL接続の際、ブラウザは下層から順に証明書をたどり、最上位のルート証明書までを確認してサーバIDを検証しています。 中間CA局の証明書がウェブサーバ側に設定されていないと正しい検証ができずに、無効な証明書と認識されます。
SSL通信とは
SSL通信は以下のような手順による通信のこと。
- [クライアント]ブラウザからサーバに接続要求
- [サーバ]電子証明書 + 公開鍵を送付
- [クライアント]全ての電子証明書を辿り確認が終了
- [クライアント]サーバから取得した公開鍵で共通鍵を暗号化して送付
- [サーバ]自分の秘密鍵で復号
- [サーバ・クライアント]共通鍵暗号方式で双方向通信