以下、大嘘。
主な暗号化プロトコルの種類
- SSL 2.0
- Netscape が最初に実装したプロトコル。
- SSL 3.0
- 脆弱性対応などを行った改良版。
- TLS 1.0
- SSL が IETF で標準化されたもの。SSL 3.0 とほぼ同じで、実質的に SSL 3.1。
- PCT 1.0
- SSL 2.0 の登場後、IE が独自に実装した暗号化プロトコル。
なお、IE6 や Firefox では、上記のうち SSL 2.0、SSL 3.0、TLS 1.0 について、利用するかどうかを選べる。TLS 1.0 については、「クライアントは対応しているがサーバは対応していない」場合に問題が起こることがあり、IE6 のデフォルトでは無効になっている。
暗号化強度
暗号化の強度は、暗号化方式と鍵のビット長に依存する。
主に使われている暗号化方式は RSA。SSL 2.0 以降で、通信開始時の暗号鍵交換や、データの送受信などに使われる。SSL 3.0 以降では他の暗号化方式も使えるようになっており、例えば認証の必要がない場合について、「Diffie-Hellman 法で鍵情報を交換した後、共有鍵暗号方式の IDEA で送信データを暗号化」といった形式も可能になっている。
以前は、アメリカの輸出規制により、アメリカ国外では 40 or 56 ビットまでしか利用できなかったが、現在では 128 ビットも輸出可能になっている。
IE (日本語版) での対応は、5.0 までは 40 ビット、5.01 以降で 56 ビットに対応し、5.5 で 128 ビット対応となった。また、輸出規制緩和を受けて、IE 4.0〜5.01 を 128 ビットに対応させる「高度暗号化パック」が提供されている。
Netscape (日本語版) では、4.7 までが 40/56 ビット、4.73 以降で 128 ビットに対応している。
証明書
SSL での認証には、PKI に基づく証明書が必須だ。サーバ証明書とクライアント証明書 (端末証明書) があり、発行された状態ではそれぞれに秘密鍵・公開鍵が付属した状態になっている。
サーバ証明書は認証局からサーバに発行される証明書で、おおまかに言えば、サーバのドメイン名に対する証明書。受け取ったクライアント側では、認証認証局が自分の信頼しているところであるかと、ドメイン名が正しいかを確認することになる。暗号化強度で分類すると、以下の 3 種類が使われている。
- 40 ビット
- 40 ビット + グローバル・サーバ ID
- 128 ビット
おもにテスト環境などで、「自前で認証局を立てて発行したサーバ証明書」が使われることがある (正規の証明書発行には費用がかかるため) が、この場合証明書の信頼性を検証することができない (実質的には、SSL を使っていないのとほぼ同じ状態になる)。このようなサーバ証明書は、俗に「オレオレ証明書」と呼ばれる。
一方、クライアント証明書は (中間) 認証局からクライアントに発行される証明書で、任意の ID に対して発行される。サーバ側では、クライアントからクライアント証明書が提示されたことだけ確認してもよいが、通常は、証明書に含まれる ID が正規のユーザであるかを検証する。
以上いずれの証明書にも有効期限が設定されている。期限終了になるまでに再発行・導入をすませておかないと、正常な SSL 通信が行えなくなる。
SGC (Server Gated Cryptography)
40 ビットの鍵しか利用できない環境で、128 ビット暗号化を行うために使われていた、IE の SSL 独自拡張。アメリカの輸出規制により 128 ビット鍵による暗号製品が輸出できなかった時期に使われていた。
具体的には、
- サーバ側に、SGC 対応のサーバ証明書 (40 ビットだが、「グローバル・サーバ ID」が含まれたもの) を入れておく。
- クライアントは、最初は 40 ビットで接続する。
- しかし、受信したサーバ証明書の中に「グローバル・サーバ ID」が含まれていると、128 ビットで接続しなおす。
という流れになっている。このとき、IE のステータスバー表示では「128 ビット」とされる。
なお、Netscape でも同様の International Step-Up という拡張を実装していた。基本的な流れは上記と同じだが、接続しなおさずに暗号化方式のネゴシエーションからやり直すという点が SGC と異なっている。
現在は、輸出規制が緩和され、128 ビット版もアメリカから輸出可能になっている。このため、SGC 対応でない、通常の 128 ビット暗号化が使われる例が多くなっている。
- SSL & TLS - ベンダー拡張
- http://www21.ocn.ne.jp/~k-west/SSLandTLS/#vender
- Microsoft サポート技術情報 - 290388 - [HOWTO] VeriSign SGC が Web サイトで使用されているかどうかを識別する方法
- http://support.microsoft.com/kb/290388/JA/
参考資料
- TLS プロトコル v1.0 (RFC2246 の日本語訳)
- http://www.ipa.go.jp/security/rfc/RFC2246-00JA.html