小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

httpsってわかりますか?

共通鍵暗号方式と公開鍵暗号方式を説明したあとにhttpsについて説明します。
また、電子署名についても説明します。

共通鍵暗号方式

たとえば、Aさんは、Bさんへメールをしたいのですが、盗聴が気になるので暗号化して送るとします。
そこで、Aさんは、鍵を使ってメールを暗号化して、Bさんへ送りました。
Bさんは、受け取った暗号化されたメールをAさんと同じ鍵を使って復号化しました。
このように、AさんとBさんが同じ鍵を使って暗号文のやりとりを共通鍵暗号方式と言います。
しかし、決定的な欠点がありますね。そう、AさんとBさんは、予め同じ鍵をもっていないとなりません。
つまり、暗号化して送っても同じ鍵をもっていないと復号化が出来ないのです。
そこで、この欠点を補う公開鍵暗号方式が出てきました。


共通鍵暗号方式をまとめると

  1. 送信者は、平文を共通鍵で暗号化して送信します。
  2. 受信者は、暗号化された平文を共通鍵で復号化します。


・鍵について
いきなり、『Aさんは、鍵を使ってメールを暗号化して…』と鍵が出てきますが、鍵については以下を参照願います。

公開鍵暗号方式

共通鍵暗号方式は、暗号化と復号化を同じ鍵(共通鍵)を使いました。
しかし、公開鍵暗号方式は、暗号化と復号化で別の鍵を使用するのです。
そして、暗号化する鍵は、公開してしまうのです!
まず、AさんはBさんの公開鍵でメールを暗号化して送ります。
Bさんは、自分が持っている秘密鍵でこのメールを復号化するのです。
これで、共通鍵暗号方式の欠点を補えました。
しかし、公開鍵暗号方式は、暗号化・復号化に非常に時間がかかる(共通鍵方式の数百〜千倍遅)という欠点があるのです。
そこで、この欠点を補う「共通鍵を公開鍵方式を用いて暗号化する」という方式が出てきました。


公開鍵暗号方式をまとめると

  1. 送信者は、受信者の公開鍵を取得します。
  2. 送信者は、平文を公開鍵で暗号化して送信します。
  3. 受信者は、暗号化された平文を秘密鍵で復号化します。

◆ 「共通鍵を公開鍵方式を用いて暗号化する」方式

まず、Aさんは、暗号化が速い共通鍵でメールを暗号化します。
つぎに、Aさんは、Bさんの公開鍵で共通鍵を暗号化します。
そして、暗号化された共通鍵とメールを一緒にBさんへ送ります。
一方、Bさんは、暗号化された共通鍵を秘密鍵で復号化します。
つぎに、Bさんは、復号化された共通鍵でメールを復号化します(めでたしめでたし)。
実は、これ、httpsもこの方式なのです!


・「共通鍵を公開鍵方式を用いて暗号化する」方式をまとめると

  1. 送信者は、平文を共通鍵で暗号します。
  2. 送信者は、受信者の公開鍵を取得します。
  3. 送信者は、共通鍵を公開鍵で暗号化します。
  4. 送信者は、暗号化した共通鍵と平文を送信します。
  5. 受信者は、暗号化された共通鍵を秘密鍵で復号化します。
  6. 受信者は、暗号化された平文を共通鍵で復号化します。

httpsとは

始めに、ブラウザから『https://』のWEBページにアクセスすると、WWWサーバとブラウザの間で双方で使用できる暗号を確認し、決定します。
つぎに、ブラウザは、WWWサーバからの証明書を受け取り、証明書内の『認証局』で署名された電子署名を予めブラウザが持っている公開鍵により解読して正当性を確認します。(要はWWWサーバが本物かの認証確認)
正当性を確認したら、ブラウザは次ぎに、通信で使用する共通鍵を生成し、先のWWWサーバの証明書に含まれていたサーバの公開鍵(予めブラウザが持っている公開鍵とは別物)で暗号化して、WWWサーバに送信します。
WWWサーバは、それを秘密鍵で復号化して共通鍵を求めます。
以後は、この共通鍵で暗号化された電文をHTTPベースで通信します。
つまり、httpsのポイントは、サーバーの認証と通信の暗号化です。


httpsをまとめると

  1. ブラウザから『https://』のWEBページにアクセスします。
  2. WWWサーバとブラウザの間で双方で使用できる暗号を確認し決定します。
  3. ブラウザは、WWWサーバからの証明書を受け取ります。
  4. ブラウザは、証明書の電子署名を予めブラウザが持っている公開鍵により解読して正当性を確認します。
  5. ブラウザは、通信で使用する共通鍵を生成します。
  6. ブラウザは、証明書に含まれていた公開鍵を取得します。
  7. ブラウザは、生成した共通鍵を公開鍵で暗号化しWWWサーバに送信します。
  8. WWWサーバは、暗号化された共通鍵を秘密鍵で復号化します。
  9. 以後は、この共通鍵で暗号化された電文をHTTPベースで通信します。


・予めブラウザが持っている公開鍵とは
IEWINDOWS)では、実は、結構沢山の認証局の公開鍵をレジストリに持っています。メニューバーのツールから確認ができます。ツール内のインターネットオプションから辿ってみてください。

  • インターネットオプション->コンテンツ->証明書->信頼されたルート証明機関->選択->表示->詳細

そこに「公開鍵」として、予め持っているわけです。

電子署名について

上記の『電子署名を予めブラウザが持っている公開鍵により解読して正当性を確認します』の意味が参考リンクの『暗号化のお話 (3)』で氷解しました。
また、暗号の場合は、秘密鍵で復号化するのに、なんで電子署名の場合は公開鍵で復号化するのかとか…。


電子署名は、同じ内容の平文と秘密鍵での暗号文を送って、送られた方は、公開鍵で暗号文を復号化して、平文と同じになれば、署名が正しとします。
しかし、このままでは、公開鍵暗号方式なので暗号化・復号化に非常に時間かかります。
そこで、ハッシュ(128〜512 bit 程度なので暗号化・復号化に時間がかからない)という機能を使い、平文をハッシュ値にして、それを暗号化し平文と一緒に送ります。
送られた方は、まず、暗号化されたハッシュ値を公開鍵で復号化し、つぎに平文のハッシュ値を求め、両方が一致したら署名が正しいことがわかります。


・留意点
電子署名について公開鍵暗号方式が使えるのは、暗号アルゴリズムRSAの時だけです。
実際の電子署名でのアルゴリズムは、署名専用のDSAが使われることが多いとのことです。
また、秘密鍵で平文を暗号化しても、誰でも公開鍵で復号化できるので、広い意味で暗号ではないですね。


電子署名をまとめると

  1. 送信者は、平文をハッシュ値に変換します。
  2. 送信者は、ハッシュ値秘密鍵で暗号化します。
  3. 送信者は、平文と暗号化されたハッシュ値を送信します。
  4. 受信者は、暗号化されたハッシュ値を公開鍵で復号化します。
  5. 受信者は、平文をハッシュ値に変換します。
  6. 受信者は、両方のハッシュ値が一致したら電子署名が正しいと判断します。


ちなみに、なぜ、同じ内容の平文と暗号文を送って、受け取り側で暗号文を復号化した結果、平文と同じになると電子署名が正しいとするかは、送り側が本人以外誰も知らない秘密鍵で暗号化するからです。
つまり、本人以外誰も知らない秘密鍵で暗号化ができ、それを復号化して平文と内容が一致すれば、確かに本人の署名と言えるわけです。