インターネット上のセキュアな通信と言えば「SSL」や「TLS」が挙げられると思います。「https」を実現している仕組みとしてもSSLやTLSが使われています。
SSLやTLSで出てくる重要な言葉として、「ディジタル署名」と「サーバ証明書」、更には「公開鍵」があります。この言葉、何となる分かるのですが、違いがよく分かり難いので、今回はディジタル署名とサーバ証明書の関係と調べてみました!
SSL(TLS)通信とは?
先ず、SSL通信の概要を押さえておきましょう!
SSL通信はクライアントとサーバ間の通信を①暗号化し、②改ざんの検知を可能とし、③通信相手の認証を行うためのものです。それぞれの機能を実現する技術は次の通りです。
- 暗号化:共通鍵を使う
- 改ざんの検知:ハッシュ値を使う
- 通信相手の認証:証明書を使う
SSL通信の細かい流れは以下サイトが参考になります!
では、SSLの流れを理解したところで、ディジタル署名とサーバ証明書の意味を理解しましょう!
ディジタル署名とサーバ証明書の関係とは?
SSL通信を確立する時、PC(クライアント)がWebサーバにアクセスするとサーバからサーバ証明書がPCに送られてきます。このサーバ証明書をもらったPCはサーバ証明書を使って、相手のサーバが正当なサーバであるかの検証を行います。
サーバ証明書の中には以下のようなサーバに関する基本情報が入ってます。
更には「証明書の発行局名」も情報として入ってます。
そしてここからが本題なのですが、サーバ証明書の中に「公開鍵」が入っています。この公開鍵はSSLにおいて暗号化通信を行うための「共通鍵」を相手(サーバ)に安全に届けるために利用します。
この公開鍵が悪意ある鍵だった場合、攻撃者に情報と搾取されてして、大変なことになってしまいます。そもそも、通信相手が信頼できるものなのかを確認する必要があります。
そのために以下の2段階の確認がされます。
- 自分のPCの中に入っている「信頼できる証明書を発行している認証局の情報(ルート証明書)」と「サーバ証明書を発行している認証局の情報」が一致していること。サーバ証明書を発行してくれている認証局はそもそも正当なものですよね?ということを確認します。
- サーバ証明書の中のディジタル署名を見て、正しい認証局の署名であることを確認します。
つまり、「サーバ証明書の中にディジタル署名が入っている」形となります。文字だと分かり辛い点がありますので、図にしてみました!
では、続いてディジタル署名の確認方法を調べてみましょう。
ディジタル署名におけるハッシュ値の照合とは?
ディジタル署名は認証局にてハッシュ化された後に「認証局の秘密鍵」で暗号化されています。
サーバ証明書を受け取ったPC(クライアント)はルート証明書の中にある公開鍵を使って、ディジタル署名を複合します。これによりディジタル署名の中のハッシュ値①を取り出すことができます。
次にPC側でサーバ証明書の情報(上述のDN)や公開鍵の情報をハッシュアルゴリズムを使って、ハッシュ値②を作り出します。※ ハッシュアルゴリズム(ハッシュ関数)はPCの中のルート証明書の中に情報として入っています。
そして、認証局で作られたハッシュ値①と送られてきたサーバ証明書からPC側で作り出したハッシュ値②の値が一致すれば、信頼できる証明書だと判断することができます。
以下にディジタル署名のハッシュ値照合のイメージを図にしてみました!
まとめ
今回はSSL通信において重要なサーバ証明書とディジタル署名、そして公開鍵の使い分けに関して調べてみました。
色んな鍵を使って、複雑な流れで安全な通信を実現しているのですね。
証明書にはPKIを使った自己証明書やドメイン証明書、企業証明書、EV証明書など色々あるので、別の機会に詳しく調べてみたいですね。
以上です!
参考URL)