昨日SSL/TLSについての記事を書いたので、あらためてSSL/TLSの復習をしたところ「あれ?」となった点があったので備忘メモです。
そもそもSSL/TLSって?
SSL/TLSって何?というのは下記サイトが分かりやすかったのでメモしておきます。
暗号化のポイントは、
- 暗号化にはセキュリティの高い公開鍵暗号方式を使用しよう
- でも、公開鍵暗号方式はクライアント→サーバの一方通行
- なので、クライアント側で生成する共通鍵を公開鍵で暗号化して安全にサーバへ送信してお互いに同じ共通鍵を保有しよう
- これでお互いに共通鍵を使って送信内容を暗号化ができる(=共通鍵暗号方式)
- 終わったら共通鍵を破棄、めでたしめでたし
といった形で共通鍵暗号方式と公開鍵暗号方式を使うハイブリッド方式ということでしょうか。
あとは、サーバ証明書(=なりすまし防止)とか電子署名(=改ざん防止)あたりですかね。
主に使われている公開鍵暗号方式の実装が「RSA暗号」というやつで、公開鍵暗号方式の仕組みを利用して電子署名としても使われるようです。
公開鍵暗号方式について
で、分かりにくいのが公開鍵暗号方式。この説明を色々なサイトで読んだところ「秘密鍵で暗号化したものを公開鍵で復号できる」っていう記載をよく見かけました。あれ?自分の理解と違うぞ、と。
例えば、上記サイトでは「秘密鍵で暗号化したものを共通鍵で復号できる」と書いてありますが、あくまで秘密鍵=復号に使うもの、公開鍵=暗号に使うものです。
むかーし自分なりに理解したイメージは、公開鍵=電話番号、秘密鍵=電話機というものでした。
誰でも広告などに書かれている電話番号に電話をかけられる(=公開鍵で暗号化)けど、その電話は電話機の持ち主のみが受けられる(=秘密鍵で復号化)。なので電話機を無くしたら大変(=秘密鍵、大事)、って感じ。
秘密鍵で暗号化?
電子署名の説明で公開鍵暗号方式を使う場合に「秘密鍵で暗号化」という表現がよく使われるみたいです。
実際には、
- Aさん:平文(のハッシュ)を秘密鍵で復号化して署名を生成する
- Aさん:平文と署名をBさんに送付する
- Bさん:署名を公開鍵で暗号化して平文(のハッシュ)にする(=比較対象A)
- Bさん:Bさんから受け取った平文をハッシュ化する(=比較対象B)
- Bさん:比較対象AとBを比較(署名の検証)して、一致すれば「Aさんからのデータだ」と判断
といった具合です。
結果、公開鍵を使って暗号化した場合に平文(ハッシュ)になるような署名を作れるのは秘密鍵を持っている人だけでしょう、という感じかな、と。
平文(ハッシュ)を秘匿するために秘密鍵を使うわけではなく、署名を公開鍵で検証できるようにするためなので、暗号化というのに少し違和感を感じました。
詳細は既にまとめてくれてる方がいたのでメモです。(詳しい数式とかはよく分からないけど・・・)
また、公開鍵暗号方式と電子署名については下記サイトがわかりやすかったのでメモです。(秘密鍵で暗号化って書いてあるけど)
コメント