SSL(Secure Socket Layer)について
ブラウザに鍵マークが出てくる,いわゆるSSLの通信を行っていれば安全だと良く言われます.私もSSLの通信で,クレジットカードの番号を入力し,買い物をしたことが何回かあります.では,いったいその通信のどこが安全なのか,興味があったので,調べてみました.
SSLとは
-
ネットスケープコミュニケーション社が開発した,情報を暗号化して送受信するためのプロトコルである.
-
プロトコルはHTTPではなく,HTTPS.これはネゴシエーションごとにセッションを確立して,その都度異なる共通鍵を使って通信をする.OSIモデルでは4層より上位のすべての情報を暗号化できる.
-
SSLでは盗聴や改ざんを防ぐことができるが,なりすましには対応できない.(現状ではSET (Secure Electric Transaction)を使うとのこと)
-
SSLでは,なりすましを防ぐため,デジタル証明書を使って身元を確認する.デジタル証明書とは認証局によってWEBサーバに発行されるもの.
SSLのしくみ
注:本を読んで勉強したのですが,ダイジェストやハッシュ値など,難しい言葉がたくさん出てきました.ここで難しく説明してもしょうがないので,ある程度省いて書いていきます.考え方はあっていると思います.
まず,WEBサーバの身元をはっきりさせておく
-
あらかじめWEBサーバは認証局から,デジタル証明書を発行してもらいます.このデジタル証明書は重要で,認証局では,この発行先の団体が確かに存在し,なりすましではないことを確認したうえで,デジタル証明書を発行するそうです.ただ,身元がはっきりしていても,悪いことをしないとは限らないのですが,そこはどうするのでしょう.悪いことをしても,身元が簡単にわかってしまうということでしょうか.
クライアントとの通信では
-
一言で言うと,公開鍵方式の暗号通信でWEBサーバがブラウザに共通鍵を送り,その後はこの共通鍵で暗号通信を行います.このとき,デジタル証明書や認証局の署名を使い,証明書が正式なものかどうかが確認できるようになっています.
-
実際にはまず,ブラウザ,WEBサーバ,認証局の公開鍵はお互いに持っている状態にします.ただ,どうやってお互いのものを持つのかは,調べがつきませんでした.公開鍵なので,ただ単にお互いに送り合うと思います.
-
公開鍵方式の通信によって,認証局からのデジタル証明書と公開鍵,秘密鍵をうまく使い,WEBサーバとクライアント・ブラウザとでお互いの通信が通信したい相手から来ているものだと確認しながらセッションを確立します.セッションが確立すると,WEBサーバとブラウザとの間で共通鍵を持つことができ,その後の通信はこの共通鍵で安全に行えることになります.このセッション確立のとき行われることは,
-
WEBサーバでは情報にWEBサーバの秘密鍵で鍵をかけます.これをブラウザ側がWEBサーバの公開鍵で,確認することにより,WEBサーバから来た情報であることを確認します.
-
この情報はさらに,ブラウザの公開鍵で鍵がかけてあって,これはブラウザ側でしか鍵をあけることができません.
-
さらに,この情報の中には,デジタル証明書と認証局の署名とサーバの共通鍵が入っています.
-
認証局の署名は,認証局の秘密鍵で鍵がかけられているのですが,これをブラウザ側の認証局の公開鍵にかけることで,このデジタル証明書が,正しいものであることを確認できます.
-
共通鍵さえお互いに持ってしまえば,あとは,確実な暗号通信ができます.
やはりそれでも,一応WEBサーバ側の身元ははっきりしますが,WEBサーバ側が信頼できるのかどうかということは確認できません.また,逆に,この場合だと,ブラウザ側は身元がまったくはっきりしません.
以上をまとめて,これを買い物を例にすると,一般に我々がお店に買い物にいって買い物をするのと同じレベルだと考えられます.たとえば,町にお店があって,通りかかった人がその店を気に入って,そこに入店したとします.その時点では,お店側では,客の身元はわかりません.しかし,客には,その店の所在は明らかにわかります.そして,何かを買ったとします.お金は確実に客からお店側に渡ります.そして次の日,品物の返品かなにかで,その店に行ったとします.しかし,その店は信用があまりなかったために,もう店が閉店してしまってなくなっているかもしれません.Webサイトであれば,閉鎖になっているかもしれません.もしくは,信頼度も高く,繁盛した店になっているかもしれません.
こういったことは,現実の世界でも,インターネットの世界でも,同じレベルで行われているということです.
Last Update:03/04/24 , Wasabi
Since Feb. 19th, 2003