hi-ho

このエントリーをはてなブックマークに追加

HTTPSって何?

2020.05.01

httpsですが「エイチ・ティ・ティ・ピー・エス」と読みます。
httpは「エイチ・ティ・ティ・ピー」。そのままですね。
ウェブサイトのURLの最初についている文字になります。
気づいている人は多いのではないでしょうか。
プロトコルとかスキーマとか呼ばれてたりします。
安全にインターネットしたい。
その為には、https「エイチ・ティ・ティ・ピー・エス」で接続しましょう。
そんなこと知ってますよ!!
え!?なんでhttpsで通信すると安全なのかって?
えーっと...........。

そんなあなたへ。

ニャンで安全なのかって?

どうやって安全にインターネットすればいいの?

ウェブサイトに接続する為に必要なURL。
ウェブサイトの名称・住所みたいなものです。
そこに接続するために必要な通信規格が、
https「エイチ・ティ・ティ・ピー・エス」、
http「エイチ・ティ・ティ・ピー」になります。

今、多くのウェブサイトがhttpsで通信されるようになってきました。
ハイホーだったら https://hi-ho.jpとなります。
また、http通信 http://hi-ho.jp で閲覧すると、
ブラウザ(サファリ、クローム、IE、など)によっては「保護されていない通信」などの注意が表示されます。
※現在ハイホーのウェブサイトは http://hi-ho.jp で閲覧すると、https://hi-ho.jp にリダイレクトされるように設定されています。
要するに、
・httpsでの通信は「保護されている通信」
・httpでの通信は「保護されていない通信」
ということになります。

まーぶっちゃけ言うと個人情報をやりとりしないウェブサイトであれば
http通信「保護されていない通信」で問題ありません。たぶん。
ですが、個人情報をやりとりするのであればhttps通信でないと絶対ダメです。

例えばショッピングサイトで服を買うとします。
そのショッピングサイトを自分のスマホで見ているとします。
良さげな服を見つけたので早速購入しようと思いました。
商品を選択し「購入に進む」ボタンを押すと、
名前や住所を入れるページに遷移しました。
名前、住所、電話番号、メールアドレスを入力します。
ここまでは、個人情報(名前、住所、電話番号、メールアドレス)は
自分のスマホのみにとどまってる状態です。
「購入をする」ボタンを押しました。
この瞬間に個人情報がショッピングサイトのサーバー(ウェブサイト)に送られます。
すると「購入ありがとうございます。」とページに表示されました。
入力したメールアドレスにも「購入ありがとうございました」とメールが届きました。
ショッピングサイトのサーバーが個人情報を受け取って、
そのメールアドレス宛に購入完了のメールを送信するシステムを導入しているからですね。

なのでスマホからウェブサイトのサーバーへの通信が、
「保護されている通信」なのか「保護されていない通信」なのかが重要になってくるのです。
どうやって保護しているのかというと暗号化するんです。
暗号化された通信データを暗号文、そうでないのを平文と呼んだりします。
スマホからウェブサイトのサーバーに送るデータを暗号化することによって、
通信データを読めない状態にして送信するんですね。
そうしないと盗聴した人が読めることになっちゃう。
そう。暗号化することによって、
盗聴、なりすまし、改ざんを防ぐことが可能になるのです。
けど読めなければサーバー(受け手)は困る。
何を書いているかわからないものが送られてきた。
なので暗号化されたデータを読めるようにする必要がある。
そのことを復号といいます。

どうやって暗号化・復号してるの?

盗聴とは、上記パターンの様に送り手と受け手の間のやり取り(通信データ)を盗み見ることです。
その通信データはインターネット回線を伝ってやり取りされるので、
その間に悪い奴に盗み見られることがあるのです。
送り手も受け手も盗み見られたことは把握出来ないので後から対応の仕様がありません。
であれば盗み見られても良いように最初から対応するしかありません。
そう。暗号化するのです。見られても訳分かんないように。
暗号化されていれば盗み見られても解読(復号)できなければそのデータに直接的な価値はありません。

盗聴を防ぐ方法に、共通鍵暗号方式(秘密鍵暗号方式)というのがあります。
まず暗号化には暗号化用の共通鍵というのが必要になり、
その共通鍵は自身で決めた特定の値(パスワードみたいなもの)になります。
その特定の値を使って、いくつかの規格(アルゴリズム)から選択した手法を用いて通信データを暗号化して送信します。
その通信データを受け手は復号して閲覧する必要があります。
なので、何らかの方法で事前に受け手に共通鍵を渡しておく必要があるんですね。
要するにパスワード(通常、共通鍵は予想不可能なランダムな英数記号文字列にします)を教えておく必要があると思っていただければ。
そのパスワード(共通鍵)を使って暗号化された同じ規格(アルゴリズム)で復号する。
という流れになります。

共通鍵暗号方式(秘密鍵暗号方式)とは

そもそもその鍵をどうやって事前に渡すの?と思いますよね。
USBに入れて直接会って渡すのも出来ますが、だいたい電子メール等のデジタル通信で送ったりします。
そうするとそのメールを盗聴されて鍵を盗まれてしまった場合、暗号文を解読されてしまいます。
それを防ぐ暗号化の方法として公開鍵暗号方式があります。
この場合は、公開(暗号用)鍵と秘密(復号用)鍵のペアとなる2種類作成します。
公開(暗号用)鍵はデータの受け手側が送り手側に、
送り手は受け取った公開(暗号用)鍵を元に、データを暗号化して送信します。
受け手は暗号化されたデータを秘密(復号用)鍵を使って復号します。
秘密(復号用)鍵は一度もインターネットのネットワーク上に出ていないので盗聴され、
解読(復号)される心配はありません。

公開鍵暗号方式とは

なりすまし・データの改ざんを防ぐには

なりすましはデジタル署名という技術を使って防ぎます。
第三者ではなく、ちゃんと自分が送ったデータですよ!と証明する技術になります。
このデジタル署名という技術は公開鍵暗号方式によって成り立ってます。
公開鍵暗号方式にはRSAやDSAなど様々な規格(アルゴリズム)があるようです。
代表的な公開鍵暗号方式のRSAで説明させてもらうと、
上記で説明した公開鍵暗号方式の内容と違う点が一つあります。
それは、公開鍵と秘密鍵が逆の機能を果たすということです。
デジタル署名は秘密(署名用)鍵で暗号化し、
公開(検証用)鍵で復号するということになります。
何を暗号化するのかというと、送るデータをハッシュ化して暗号化して送ります。
ハッシュ化とは簡単にいうと、決まった桁数の文字列に変換するという感じでしょうか。
例えば「おはよう」や「今日は良い天気ですね」など文字数が違うデータをハッシュ化しても、
同じ桁数の不規則な文字列に変換されます。
その変換された文字列はどうやっても元のデータには復元出来ません。
ハッシュ化されたデータ(文字列)は元のデータ(文字列)には戻せないということになります。
ハッシュ化にはいくつかの規格(アルゴリズム)があり、
それによって変換される桁数が変わります。
桁数でどの規格(アルゴリズム)を使っているか判断されないように、
複数の種類があると思っていただければ。
そして、同じ規格(アルゴリズム)を使って同じデータ(文字列)をハッシュ化すると、
必ず同じハッシュ値になります。
ハッシュ化したデータ(文字列)をハッシュ値と呼びます。
まとめると、デジタル署名とは送るデータをハッシュ化して秘密(署名用)鍵で暗号化したもの。
ということになります。
送り手は受け手にデータとデジタル署名を併せて送信します。
受け手は受信したデジタル署名を公開(検証用)鍵で復号します。
復号に成功したら正しい組み合わせの鍵だ!ということになるので、第三者ではなく、
ちゃんと自分が送ったものだと証明出来るということになるようなんです。
また、改ざんのチェックにもデジタル署名を活用します。

まずデジタル署名が何の規格(アルゴリズム)でハッシュ化したかを
送り手より共有されているのが前提です。
受信したデータを秘密(署名用)鍵で復号したものを
デジタル署名と同じ規格(アルゴリズム)でハッシュ化し、
公開(検証用)鍵で復号に成功したデジタル署名のハッシュ値と比較することによって、
データが改ざんされてないかを判断します。
改ざんされてなかったら同じハッシュ値になるということです。

デジタル署名と一緒に送ったデータは受け手が事前に公開している公開(暗号用)鍵で暗号化されたものなので、
受け手が用意した秘密(復号用)鍵で復号します。
なので、送り手が本文を暗号化するために使った公開鍵(受け手が用意した鍵・暗号用)と、
デジタル署名で使う公開鍵(送り手が用意する鍵・検証用)は別なものということとなります。
送り手と受け手で公開鍵を交換するイメージになりますね。

また規格(アルゴリズム)によってデジタル署名の手法も異なるみたい!?です。
暗号化とデジタル署名、両方公開鍵暗号方式を使っているのですが、
基本分けて考えるのが良いみたいですね。

デジタル署名とは

デジタル署名とは

HTTPS通信に欠かせないSSL/TLS

そして、https「エイチ・ティ・ティ・ピー・エス」ですが、
共通鍵暗号方式(秘密鍵暗号方式)、公開鍵暗号方式、デジタル署名、
などの複数の技術が合わさって実現されています。
また、公開(暗号用)鍵が偽造されたものではないと証明することによって、
より信頼性を持たせることを実現しています。
どうやって証明するかというと、証明してくれる第三者機関が存在するんですね。
それを認証局(CA:Certification Authority)と呼びます。
その認証局が、この鍵は偽造されたものではなく正しいものですよ!
と証明する役割を果たしてくれます。
その為には申請書(CSR)を用意して認証局(CA)に申請します。
申請書(CSR)を作成するのに秘密(復号用)鍵を使って作成するので、
その申請書にはサーバーの公開(暗号用)鍵を含むことになります。

認証局(CA:Certification Authority)とは

承認されると認証局はSSL証明書(サーバー証明書とも呼んだりします)
というものを発行してくれます。

そのSSL証明書には、
・ウェブサイトの所有者情報
・公開(暗号用)鍵
・認証局(CA)が発行した電子証明書

の内容が含まれます。これは一つのファイルとして存在します。
これを自身が管理するウェブサイトのサーバーに設置します。
httpsで通信させたいウェブサーバーですね。
そのサーバーに、申請書(CSR)の作成に使用した秘密(復号用)鍵を合わせて設置します。
SSL証明書と秘密(復号用)鍵がペアになるのですね。
この状態で、ユーザーからウェブサイト(サーバー)にhttpsで通信したい!
とリクエストが来ると、
そのSSL証明書をユーザーに送り返します。
すると受け取ったユーザー側のブラウザ(パソコン)でその証明書が正しいものかをルート証明書で判断します。
通常ブラウザ(パソコン)には、
最初から主要な信頼性の高い認証局の公開(検証用)鍵を含むルート証明書がインストールされています。
最初から持っているんですね。
その持っている公開(検証用)鍵で、
ウェブサイト(サーバー)から送られてきたSSL証明書を検証して、
正しいかどうかを判断しているということです。
正しいと判断されたら、今度はそこで共通鍵を作成します。
それをSSL証明書に含まれている公開(暗号用)鍵で、
暗号化しウェブサイト(サーバー)に送り返します。
ウェブサイト(サーバー)は受け取ったデータを秘密(復号用)鍵で復号します。
ここで共通鍵の共有が完了します。
それ以降はその共通鍵を使って暗号化通信を行なっていきます。
共通鍵を使って通信をやりとりする方が認証・検証のロジックが少ないので、
高速での通信が可能になるわけなんですね。
これまでの一連の流れを自動的に行っています。

これまでの一連の暗号化方式を、
SSL(Secure Sockets Layer)/TLS(Transport Layer Security)と呼びます。
省略してSSLとだけ呼称することが多いですね。

実際、現在採用されている規格はTLSになります。
その前進の規格がSSLになります。
そして、http「エイチ・ティ・ティ・ピー」にこのSSLという暗号化方式を追加したものが、
https「エイチ・ティ・ティ・ピー・エス」ということになります。

ちなみに httpsに対応しているウェブサイトでないと、httpsで見ることは出来ません。
ウェブサイトを提供している側が対応するしかないということです。

SSL(Secure Sockets Layer)/TLS(Transport Layer Security)とは

まとめ

共通鍵を使って通信するまでのやりとりを、ハンドシェイク(握手)と言ったりします。
信用して良い相手かを見極めて握手するんですね。
このようにデジタルの世界は、現実の世界を模して表現されているように感じます。
人間が構築しているので、人間の想像力を超える世界ではないという認識になります。
現段階では。

人間がシステムを構築する以上、「穴」が存在する可能性があります。
それを脆弱性と呼んだりします。
それを正しい側が先に見つけることにより、その「穴」を塞ぐことが出来ます。
その行為をセキュリティーアップデートと呼んだりします。
悪い奴らがそれを先に見つけてしまうと攻撃され、場合によっては情報を抜き取られたりします。
このやりとりは、どうしてもイタチごっこになってしまうので完全に防ぐことはまず不可能です。
その認識を持つことが重要となります。

どれだけ意識を高く持ち、インターネット・ITを活用したとしても、
完璧な防御策は存在しない。ということです。

例えば、現実世界で事故や犯罪に巻き込まれない可能性を0に出来るか。と言うと難しいですよね。
他の人と隔離された環境で一切人に会わない。という選択肢を選んだとしても、
地球に住んでいるのであれば自然災害に襲われる可能性もあるでしょう。

じゃ、どうしようもないのか。と言う訳ではありません。
より可能性を低くすることは出来ます。
限りなく0に近くするという手段を取るしかありません。
様々なセキュリティーの会社から、身を守るためのツールが提供されています。
それで完璧に防御出来る!という訳ではありませんが、可能性を低くすることは可能です。

ハイホーでも会員様向けにセキュリティーオプションを提供しております。
気になる方は是非検討してみてください。

セキュリティーのオプションはこちら

PAGETOP