Webサーバを構築する時にSSLを有効化する設定を行うことが良くあります。 しかし、サーバの鍵を作って、証明書を作って、それをWebサーバのconfファイルに設定してなどとしていると、「証明書」「電子署名」「.pem」「.csr」「.crt」など色々な用語が出てきてわけが分からなくなってしまいます。
そこでSSL/TLS周りの知識の整理として今回は公開鍵暗号化・電子署名についてまとめていきます。
公開鍵暗号化・電子署名はどちらも秘密鍵と公開鍵のペアを使いますが、その用途や使い方が異なります。
公開鍵暗号化
公開鍵暗号化はネット上で送信するメッセージを暗号化するための仕組みです。
玄関の鍵や金庫は開ける時も閉める時も同じ鍵を使いますが、ネット上で同じことをしようとすると第三者に鍵を盗聴され盗まれるといった危険性が出てきます。
そこで、開けることしか出来ない鍵と閉めることしか出来ない鍵のペアを利用する方法が公開鍵暗号化です。閉めることしか出来ない鍵を使って鍵をしてもらい自分のところに送ってもらえれば、盗聴されても問題ありません。自分だけが開けることしか出来ない鍵を持っていれば、自分は鍵を開けることが出来ます。
公開鍵と秘密鍵
- 秘密鍵: 自分だけが持つ鍵。
- 公開鍵: 公開するための鍵。秘密鍵から生成可能。
公開鍵暗号化の仕組み
BobがAliceにメッセージを送ろうとしているとします。 公開鍵暗号化では公開鍵=閉めることしか出来ない鍵、秘密鍵=開けることしか出来ない鍵として使われます。
- BobはAliceの公開鍵を用いてメッセージを暗号化
- Bobは暗号化したメッセージをAliceに送信
- Aliceは暗号化されたメッセージを受信
- Aliceは自身の秘密鍵を使ってメッセージを復号化
公開鍵のでどころ
BobはAliceの公開鍵で暗号化しますが、この公開鍵がAliceのものでない可能性があります。その場合Aliceは復号化できず、第三者だけ暗号文が読めるといった場合になってしまいます。
そこで、公開鍵が誰のものであるのかを証明するために公開鍵証明書というものがあります。
公開鍵証明書(Certificate)
- 公開鍵が誰のものであるのかということを、第三者(認証局)が証明します。
- 証明書は公開鍵に認証局の電子署名をつけたものです。
- 証明書には有効期限が存在し、期限が切れると効力が失われます。
電子署名
電子署名はメッセージに対する署名であり、当人がメッセージが作成したことを証明するための仕組みです。これにより、第三者が他の人を偽ってメッセージを送信しても署名が有効でないので見破ることが出来ます。
公開鍵暗号化とは鍵の使われ方が逆
公開鍵暗号化では公開鍵を暗号化のための鍵、秘密鍵を復号化のための鍵としてつかいました。
電子署名ではこれが逆になり、公開鍵を復号化するための鍵、秘密鍵を暗号化するための鍵として使われます。
電子署名の仕組み
BobがAliceにメッセージを電子署名付きで送ろうとしているとします。
- Bobはメッセージから自身の秘密鍵を使って暗号文(=電子署名)を生成する。
- Bobはメッセージと電子署名を共にAliceに送信する。
- Aliceは電子署名をBobの公開鍵を使用して復号化する。
- Aliceはメッセージと復号化した電子署名が等しいことを確認する。
ハッシュ化
電子署名ではメッセージから暗号文を生成すると言っていましたが、正確には元の文書からハッシュ値を生成し、それを秘密鍵を使って暗号化します。ハッシュ化をすることで対象メッセージを一定長にすることができ暗号化の計算コストを下げることが出来ます。