こんにちは!3号機です。
つい先日、自転車の鍵を無くしてしまいました。500円玉程度の小さな鍵だったので「決して無くすまい!」と厳重に管理していたのですが、無くしました。
それからというものコンビニやスーパー、何かにつけて徒歩というのが思いのほか面倒、かつちょっぴり健康的な生活。ちなみに私は自動車の免許も持っていなければ、原チャリの免許もない。これぞ令和の舘ひろし。
しばらくしょんぼりしながら日々を貪っていたのですが、たまたま洗濯機に溜まった埃を掃除していたとき、パッキンの溝にキラリと輝くチャリの鍵。どうやらポケットに入れたまま洗濯機に放り込んでしまっていたようで、思いもよらぬタイミングの再会に「キミ!こんなとこにおったんかいな!」と小躍りしながら鍵をギュッと握り締め玄関を飛び出し、早速チャリの鍵穴にセット。間髪いれずにガチャリと立つ音、チャリ全体に漲る活力、活力…(by.味園ユニバース)。まるで荒馬にまたがるカウボーイのごとく、ペダルを漕いで向かうはコンビニ。支払期日の迫った固定資産税の納付書をたなびかせながら、我がチャリは颯爽と街を駆け抜けにけり。
ワーワーゆうてますけど、今回は「鍵」についてのお話です。
はじめに〜ECサイトの安全性とSSL通信について〜
ECサイトで買い物をするとき、私たちは当たり前のように名前や住所、クレジットカード番号を入力していますよね。
冷静に考えると、これはかなり怖いことをしています。もしその情報が第三者に見られたり、途中で書き換えられたりしたらと考えるだけでぞっとします。それでも私たちが安心して買い物できているのは「通信を守るための仕組み」が、ちゃんと裏側で働いているからです。
その代表的なものが、SSLそして現在のHTTPS通信です。
まず押さえておきたい前提として、インターネットの通信は、もともと全く安全なものではありません。
特別な対策をしなければ、送った情報が途中で盗み見られたり、書き換えられたりする可能性があるのです。たとえるならば、まるではがきにクレジットカード番号を書いて送るようなものです。そんな危ないことは普通できませんよね。
これを防ぐために必要なのが「暗号化」という考え方なのです。
暗号化と聞くと、なんだか難しい技術を想像するかもしれませんが、考え方そのものはとてもシンプル。
「第三者には読めない形にして送る!」
ただそれだけです。そして暗号化にはいくつか種類があり、用途によって向き不向きがあります。
SSL通信は、それらを使い分けることで、速さと安全性を両立したすばらしい技術なのです。
共通鍵暗号方式について
まずはじめに登場するのが、共通鍵暗号方式です。
これは、通信する双方が同じ鍵(共通鍵)を持ち、その鍵を使って情報を暗号化し、復号(暗号化されたデータを元に戻すこと)する仕組みです。たとえるなら、合鍵を持つ者同士だけが開けられる金庫を用いてやりとりするイメージです。注文情報や個人情報を金庫に入れて送れば、途中で第三者が覗くことはできませんよね。
この共通鍵暗号方式のメリットは、なんといっても処理が速いことです。何度も情報をやり取りするECには、とても向いているのです。
けれど致命的な問題があります。
その合鍵をどうやって最初に相手へ渡すのか?
もし鍵を渡す途中で盗まれてしまえば、金庫は簡単に開けられてしまいます。
そのため共通鍵暗号方式は、それ単体では使えないのです。
公開鍵暗号方式について
そこで登場するのが、公開鍵暗号方式です。
この仕組みでは、二つの鍵を使います。一つは誰に見せてもいい鍵(公開鍵)、もう一つは絶対に秘密にする鍵(秘密鍵)です。
イメージとして、誰でも投函できるポストを思い浮かべてください。このポストというのは、当然ながら投函口があって、そして、持ち主だけが持っている開閉用の鍵がセットになっています。このうち「投函口」が、公開鍵にあたります。もっと言うと、公開鍵は「封筒をポストに入れて、外から開けられない状態にする仕組み自体」を指すものです。誰でも使える(投函できる)が、ポストの中身を取り出すことはできません。つまり、公開鍵を使うと、その情報は「入れたら戻せない状態」に変わるのです。一方で、ポストの中を開けるための鍵は、ポストの持ち主しか持っていません。これが、秘密鍵にあたります。この2つの仕組みがあるため「第三者が読むことはできないが、送ることはできる(一方通行で安全に情報を渡せる)」状態が作れます。
ただし、この公開鍵暗号方式は処理が重く、大量のデータを何度もやり取りするのには向いていません。
そのためSSLでは、これら二つの暗号方式を組み合わせています。セッション鍵暗号方式といいます。
セッション鍵暗号方式について
では、SSL通信がセッション鍵暗号方式によって実際にどのような流れで行われているのか、一度そのまま整理してみます。
まず、利用者のブラウザ(クライアント)が、ECサイトのサーバーにアクセスします。次に、サーバー側から証明書と公開鍵が送られてきます。この証明書には「このサイトは本物ですよ」という情報が含まれています。クライアントは、その証明書を検証します。信頼できる発行元であり、問題がないと確認できた場合、ここで初めて共通鍵が生成されます。しかし生成された共通鍵は、そのまま送られるわけではありません。先ほどサーバーから送られてきた公開鍵を使って暗号化され、サーバーへ送信されます。サーバー側では、その公開鍵に対応する秘密鍵を使って復号を行い、共通鍵を取り出します。この結果、クライアントとサーバーの間で同じ共通鍵が共有され、以降の通信は、この共通鍵を使って暗号化され、安全なやり取りが可能になります。
ここまでが、SSL通信の基本的な流れですが、初見では頭の中でイメージしづらいとおもいます。
なので、この流れをわかりやすく日常的な例え話に置き換えて考えてみました!
セッション鍵暗号方式をもっとわかりやすく説明するよ
あなたはとあるお店に、注文を送りたいとします
あなたはとあるお店に、注文を送りたいとします。ただ、その注文内容には他人に読まれたくないクレジットカード番号などの個人情報が書いてあります。店先にはポストがあります。そこに入れたものは、外からは見えません(公開鍵)。中を開けられる鍵(秘密鍵)を持っているのは店主だけです。
しかし、あなたはひとつ気になっています。「この投函口は本当にそのお店が設置したのかな?」と。第三者が勝手に置いた偽物かもしれません。そこでお店は、入口に公式の認証マークを掲示しています(サーバー証明書)。いわば保健所の営業許可証や、クレカ対応店のステッカーみたいなものです。あなたはそれを見て「少なくとも怪しい店ではなさそうだ」と判断し、安心して利用します。
あなたはまず「今回のやり取り専用の小さな鍵(共通鍵)」を一つ作ります。そして、その鍵を封筒に入れ、お店の投函口から送ります。この時点では、まだ大事な注文の中身は送っていません。送っているのは、あくまで「鍵」だけです。店主は、店主だけが持っている鍵(秘密鍵)でポストを開けて、あなたの送った鍵を受け取ります。これであなたと店主との間に同じ鍵(共通鍵)を持つ状態ができました。
ここから先は、その鍵(共通鍵)のみで開く箱を使ってやりとりします。つまり肝心の注文内容や個人情報は、その箱に入れてやり取りするというわけです。途中で誰かに箱を奪われても、鍵がなければ中身は分かりません。そしてやり取りが終われば、その鍵は使われなくなります。次に別の用件で連絡するときは、また別の鍵を作ります。これが、セッション鍵暗号方式の考え方です。
ちなみに箱の中身は、途中でこっそり書き換えることができません。鍵を開けずに中身を変えることはできず、無理に触れば、必ず痕跡が残るようになっています。これはハッシュ関数による「改ざんチェック」が働いているためで、SSL通信ではこのチェックによって「改ざんしたら必ずバレる」仕組みになっています。
このようにSSL通信では、誰でも使える投函口を使って鍵を渡し(公開鍵暗号方式)、その後は、二人だけが開けられる箱でやり取りする(共通鍵暗号方式)。このおかげで、安全さと速さの両方を備えられているのです。ECサイトもこの仕組みで守られています。普段利用しながら意識することはないとおもいますが、実は裏側では“インターネット上のこびとさん達”によって、こうしたやりとりが行われていたのですね。
- 通信内容が他人に読まれないこと。
- 通信相手が本物であること。
- 途中で内容が書き換えられていないこと。
ECサイトにとって、これはすべて信頼に直結します。
どれか一つでも欠ければ、安心して買い物はできませんからね。
さいごに〜SSLはECの信頼を支える土台〜
SSLは「速く安全にやり取りするにはどうすればいいんだ?」という、とても現実的な問題に対する技術の結晶です。私たちが何も意識せずにインターネット上で買い物できているのは、こうした仕組みが裏側でそっと働いているからなのです。
ECにおけるセキュリティとは、技術の話であると同時に、信頼の話でもあります。
SSLは、その信頼を支える土台になっていることを、たまーに思い出してみてください。鍵は大切!

