前回までの記事では、SSL/TLSの役割とSSL/TLSに関わる技術について触れてきました。
SSL/TLSを利用する人であれば、そこまでの内容で事足りますが、開発者となるとそれだけでなく、SSLを実現する仕組みについての詳細を理解しておく必要があります。
SSL/TLSサーバーを構築・運用するのであれば、暗号危殆化(きたいか)対策や、開発するソフトウェアのセキュリティ確保のために、各暗号アルゴリズムの特徴を理解しておく必要があるからです。また、サーバー・サーバー間でSSL/TLS通信をする場合や、ブラウザ・サーバー間でSSL/TLS通信する場合に通信がなぜ成功しないか、成功させるためにはどうしたら良いか、そういったトラブルシューティングを行えるようにもならなければいけません。
SSL/TLSに関わる技術
SSL/TLSは、共通鍵暗号、公開鍵暗号、ハッシュ関数等の要素技術と、これらを組み合わせて実現される、ディジタル署名、ディジタル証明書等の技術によって成り立っています。
共通鍵暗号
共通鍵暗号は対称鍵暗号、秘密鍵暗号とも呼ばれる、データの暗号化・復号化に鍵を使用する暗号です。暗号化・復号化に使用する鍵が共通であることが特徴です。送信者と受信者は前もって同じ鍵を共有していて、暗号鍵で暗号化し、暗号鍵とまったく同じ復号鍵で復号します。「DES」や「3DES」「AES」が該当します。
データは共通鍵で暗号化し送信され、受信者は同じ共通鍵で復号化し、データを受信します。
公開鍵暗号
公開鍵暗号は、非対称鍵暗号とも呼ばれる、暗号鍵と復号鍵に異なる鍵を使用する暗号化方式です。異なる鍵を非対称に使用することから「非対称鍵暗号化方式」とも呼ばれています。「RSA」や「楕円曲線暗号」が該当します。
共通鍵の交換時に使用します。
ハッシュ関数
ハッシュ関数は、いかなる長さのデータを入力しても固定長の擬似乱数データを出力する関数です。入力データをハッシュ関数にかけることで出力されるデータのことをメッセージダイジェストやフィンガープリント、ハッシュ値などと言います。メッセージダイジェストはその名のとおり、メッセージの要約(ダイジェスト)です。
あるデータとあるデータが同じであるかを確認したいとき、データそのものを比較するのが最も手っ取り早いでしょう。ただ、データサイズが大きかったら比較自体に時間がかかるし、2つのデータを保管する場所も必要です。そこで、メッセージダイジェストを使用します。データの要約なのでサイズが小さく、どんなサイズのデータからも同じサイズのメッセージダイジェストが算出されるようになっているため、取り扱いがとても簡単になります。
ディジタル署名
SSL/TLSではディジタル証明書(サーバー証明書やクライアント証明書)を使用して、自分が自分であること、相手が相手であることを証明します。しかし、いくら自分が自分であることを主張しても、それには信頼性はありません。例えば「私はAです!」と声高らかに言ってもその主張がまったくの嘘で、別の人がAになりすましている可能性もあるからです。そこで、SSL/TLSでは第三者認証を採用しています。信頼できる第三者「認証局」に「AさんがAであること」をディジタル署名というもので認めてもらいます。そのディジタル署名にメッセージダイジェストを使用します。
ディジタル証明書
ディジタル証明書は自分が自分であることを証明するものです。「署名前証明書」「ディジタル署名のアルゴリズム」「ディジタル署名」で構成されます。署名前証明書がサーバーやサーバーの所有者の情報です。
ディジタル証明書を受け取った受信者は、証明書の中に含まれるディジタル署名を認証局の公開鍵(ルート証明書)で復号し、署名前証明書と比較します。一致していれば、証明書が改ざんされていない、つまりそのサーバーが本物だということがわかります。
ここまでが、SSL/TLSに関わる技術の概要です。これだけの説明ではそれらの技術がなぜ必要なのか、目的や使い方などはっきり見えてこないと思います。次の記事からひとつひとつの技術の詳細を記載していきます。