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

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

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

httpsとは?(共通鍵暗号方式と公開鍵暗号方式についてのメモ)

本記事は、以下のリンク先が最新です。



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

共通鍵暗号方式

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

公開鍵暗号方式

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

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

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

httpsとは

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

電子署名について

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


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