SSL
の仕組みを説明します。読者対象は、SSLの基礎を知りたい方です。暗号化技術について初めて触れる方だけでなく、情報処理試験の取得を目指す方にも役立つように、初歩的な概念や流れを理解しやすく説明しています。
SSL の仕組みを知る意味とは?
あなたは「SSL はどんな仕組みで暗号化しているんだろうか?」と疑問を持たれたために、このページをご覧のことと思います。「何となく興味を持った」という方もいれば、「情報処理試験を受けるから基本を押さえておきたい」という方もいらっしゃるのではないでしょうか。
ところで、SSL というとどうしても暗号化の技術的な話になりがちです。しかし、基本的な流れや仕組みをしっかりと説明したサイトや書物は、意外と少ないのではないでしょうか。仕組みがわからないと、難しい技術を説明されても、なにがどう働くのかさっぱり理解できないですよね。
そこでこのページでは、「そもそもSSLとはどのような仕組みなのか?」を分かりやすく説明しようと思います。
SSL の仕組み、5つのポイント!
それでは、SSL の仕組みについて説明します。ポイントは5つですので、ぜひ最後まで目を通してください。
SSLをおさらいする。
最初に、SSL についておさらいしておきましょう。
SSLは Secure Sockets Layer の略で、インターネットの通信を暗号化する仕組みです。主に、ホームページの閲覧やメールのやり取りで、暗号化の仕組みとして利用されています。
なぜ通信を暗号化するのかというと、通信内容は簡単に傍受して、内容を読み取ることができるからです。つまり、暗号化しないと通信内容が読まれ放題なんですね。
そこで、通信内容を暗号化する必要があるわけです。暗号化すれば、仮に傍受されても全く読み取れませんので、非常に安心です。
また、SSL 化する場合は、サイト側でSSL証明書を購入してサーバーにインストールする必要がありますので、多少の手間と費用が発生します(閲覧者側は準備不要です)。しかし、情報漏えいが防げるという点は非常に意義が大きく、もはや必須であると言えるでしょう。
このように、インターネットの通信を暗号化して、情報漏えいを防ぐのがSSLです。
平文…暗号化されていないデータを、一般的には平文(ひらぶん)と言います。
SSLの基本的な概念を理解する。
続いて、SSL の基本的な概念を理解しましょう。ザックリとした流れは以下の通りです。
- SSL で保護されたサイトにアクセス。
- SSL 接続をブラウザが要求。
- サイトから、データを暗号化する鍵がブラウザに渡される(鍵交換)。
- これ以降、暗号化通信が行われる。
このようなフローで、SSL による暗号化通信が行われます。ここでポイントになるのは、どのようにして鍵を渡し、暗号化するかです。なぜなら、鍵そのものも暗号化されていないと、渡すときに傍受されてしまって、暗号化を解く鍵を第三者が持ってしまうことになるからです。
サイトとブラウザの二者間で暗号化通信したいのに、鍵を持っている第三者が存在したのでは、簡単に暗号が解かれてしまいます。これでは暗号化する意味がありませんよね。そこで、どのように対応しているのか、鍵の渡し方と暗号の方式について見ていきましょう。
共通鍵暗号方式とは?
共通鍵暗号方式
は、SSL の基本的な暗号方式です。やり方は名前の通りで、暗号化と復号に共通の鍵(ルール)を使うというものです。つまり、自分と相手は一つの鍵を使います。ちなみに、暗号化とは平文を暗号にすることで、復号とは暗号を元の平文に戻すことです。
この方式の利点は、手続きが少ないことから、暗号化が簡単でスピードが速いことではないかと考えられます。世の中で一般的に古くから使われている暗号と言えば、この共通鍵暗号方式のことを指します。(←なので、難しく考える必要はありませんよ。笑)
ただし、これには根本的な問題があります。それは、自分と相手が同じ鍵を持つ方式ですから、どうやって共通の鍵を持つのかという点です。物理的であろうが、電子的なものであろうが、あるいは合言葉であろうが、鍵を渡すときにそれが漏れてしまう可能性があるのです。
鍵はいわば暗号化・復号のルールですから、それが漏れれば暗号が解かれるので意味がありません。しかし、それを電子の世界であるインターネット(SSL)では、次に紹介する公開鍵暗号方式を利用することで解消しました。
公開鍵暗号方式とは?
公開鍵暗号方式
は、秘密鍵と公開鍵の2つの鍵を使う方法です。つまり、暗号化と復号のルールが、それぞれ別々にあるわけですね。この2つの鍵を、SSL ではどのように使うのかというと、秘密鍵をサーバー側が持ち、公開鍵をブラウザ側が持つということになります。
秘密鍵は絶対漏えいしないように保護しますが、公開鍵は誰でも使えるように公開しています。このようにする利点は、一方の鍵をあえて公開することで、鍵を簡単に渡せるところです。鍵を渡すときに漏えいしてしまうという、共通鍵の抱える問題を解消できるわけですね。
しかし、鍵を公開しているのに、本当に安全な暗号化ができるのでしょうか? 実際にどのようなやり方で暗号化するのか詳しく見ていきましょう。
秘密鍵と公開鍵の働き方とは?
秘密鍵はサーバー側が持つ鍵です。秘密鍵で暗号化すると、公開鍵だけで復号できます。一方、公開鍵はブラウザ側が持つ鍵です。公開鍵で暗号化すると、秘密鍵だけで復号できます。つまり、復号にはそれぞれお互いの鍵が必要であることがわかります。
このように、「秘密鍵で暗号化→公開鍵で復号、公開鍵で暗号化→秘密鍵で復号」という対(一方通行)になる関係であることを頭に入れましょう。
公開鍵で暗号化すると?
この時一番分かりやすいのは、公開鍵で暗号化した場合です。この方法であれば、ブラウザからサーバーに対して安全に情報を渡せます。なぜなら、ブラウザ側で公開鍵を使って情報を暗号化すると、復号できるのはサーバーの秘密鍵だけだからです。
つまり、サーバー側だけが復号して、情報を読み取ることができるのです。公開鍵では復号できないし、秘密鍵を持っているのはサーバーだけなので、仮に通信内容が傍受されたとしても、暗号の解読は不可能であることがわかると思います。
なので、公開鍵で暗号化すると、相手に対して安全に情報を渡すことができると言えます。
秘密鍵で暗号化すると?
一方、秘密鍵で暗号化した場合はピンと来ないかもしれません。というのも、公開鍵は誰でも持てる鍵なので、暗号化する意味が無いからです。しかし、これには別の意味があります。公開鍵で復号できるということは、間違いなく対になる秘密鍵で暗号化されている点がカギです。
つまり、ブラウザが受け取った情報は、間違いなく自分がアクセスしたサーバーから受け取ったものであることがわかります。やり取りの途中で誰かが割り込んで、ウソの情報を渡すことはできないわけです。したがって、本物のサーバーから受け取ったという証明になるのです。
このパターンは一見するとSSLとは無関係に思えるかもしれませんが、偽物のサーバーとやり取りしてしまうと情報を搾取される恐れがあるので、やはり重要であることがわかると思います。
SSLは、共通鍵と公開鍵を組み合わせている!
さて、SSLでは共通鍵暗号方式と公開鍵暗号方式を、どのように使っているんでしょうか? 実は、両方の方式を組み合わせて使っています。組み合わせの方法ですが、最初に公開鍵暗号方式を用いてサーバーとブラウザの間で、暗号化通信を確立します。
次に、ブラウザ側で共通鍵を作成して、それをサーバーに渡すのです。こうすれば、共通鍵を暗号化された状態で渡すことができます。以降は、共通鍵暗号方式で自由にやり取りができます。つまり、共通鍵を渡すために、最初の一回だけ公開鍵暗号方式を使うというわけなんですね。
これをセリフっぽく表現すると、以下のようになります。(深い意味はありませんが、たぶんこちらの方がわかりやすいと思いますので。)
- 「共通鍵でやり取りしたいけれど、平文で渡すと鍵が漏えいしてしまう…。」
- 「何とかして暗号化できないだろうか?」
- 「そうだ!、公開鍵暗号方式で共通鍵を渡せばいいんだ!」
このように、共通鍵暗号方式に公開鍵暗号方式を併用することで、暗号化のための鍵自体を暗号化する必要があるという、ある意味での矛盾を克服しているんですね。これが、SSLの仕組みです。お分かりいただけましたでしょうか?
参考資料:暗号方式について
今回の内容は、共通鍵暗号方式や公開鍵暗号方式という、やり取りの仕組みを説明するという趣旨でしたので、暗号化の技術的な説明はしませんでした。そこで、暗号化の技術的な部分を参考までにご紹介しておきます。(興味のある方のみ、ご覧頂ければ結構ですよ。)
現在のSSLで利用されている共通鍵の暗号は、「AES-128」という方式です。AESは、「Advanced Encryption Standard」の略です。128は鍵のビット長が128bit であることを示しています。
また、公開鍵の暗号は、「RSA」という方式です。RSAは、この暗号の発明に携わった方3人の名前「Rivest さん、Shamir さん、Adleman さん」の頭文字をつなげて命名されたそうです。鍵の長さは2048bit 以上になっています。
共通鍵・公開鍵いずれの場合も、ビット長が長いと解読されにくいと言えます。解読は基本的に総当たりで調べることになるり、ビットが多いほど計算に膨大な時間がかかるからです。しかし、パソコンの性能が上がれば計算時間が短くなるので、ビット長はいずれ更新されます。
さらに詳しい技術的な情報は、以下のサイトをご覧ください。
- AES(Advanced Encryption Standard)とは(外部サイト)
- RSAとは、RSA暗号とは(外部サイト)
以上、簡単ですが暗号方式についての参考資料でした。
まとめ
いかがでしたか? SSL の仕組みについて説明しました。
今回説明したのは、SSLをおさらいする、SSLの基本的な概念を理解する、共通鍵暗号方式とは?、公開鍵暗号方式とは?、SSLは共通鍵と公開鍵を組み合わせている!、暗号方式について、などのポイントでしたので、SSLの仕組みをご理解いただけたのではないでしょうか。
SSLは、共通鍵暗号方式と公開鍵暗号方式の2つを組み合わせて使っていますが、共通鍵を渡すために公開鍵暗号を利用しているところがミソです。ここを明確に説明した文献がなかなか見つけられませんでしたので、しっかりと説明させていただきました。
もちろん、SSLの仕組みを知ったからと言ってセキュリティが向上するわけではありませんが、知って損は無いお話だったのではないでしょうか。情報処理試験などでも、今回お話しした基本がわかっていれば、ずいぶんと理解度が高くなると思いますよ。
現在、サイト全体のSSL化が推奨されていますが、情報漏えい防止のためには非常に効果的な方法です。情報を守ることは極めて重要ですから、サイト管理者もサイト利用者も、SSL対応についてしっかり意識していただければ幸いです。
以上、「SSL の仕組みとは? 基礎がよく分かります!」と題して説明しました。