出ました!このシリーズ!
前回はDNSでしたが、今回はSSL/httpsとは何か改めてブログします。
ここらへんもエンジニアとは関係なく、実際にサービスを使っているユーザも理解しておくと
いいと思います。特にIT業界なのにディレクターさんとか理解していないのでw

改めてDNSの歴史、レコードの種類をちゃんと理解しているか!?


■SSL(Secure Socets Layer)

 

Webが世間で使われたころは静的なページが配布されるだけであった。
しかし企業がクレジットカードによる商品購入、オンライン銀行、電子株取引などの金融取引
に用いることを思いついた。これらの応用がセキュアコネクションに対する需要を生み出した。
1995年当時のブラウザベンダーであったNetscape Communications社はSSL(セキュア ソケット レイヤー)
と呼ばれるセキュリティ・パッケージを発表した。このソフトウェアはSafari、Firefoxなど広く使われているので
この詳細を見ていこう!SSLは2つのソケット間にセキュアコネクションを確立し、以下の機能を提供する。

1.クライアントとサーバ間でのパラメータの決定
2.クライアントによるサーバの認証
3.秘密通信
4.データの完全性保護

 

 

ちなみにOSI参照モデルではアプリケーション層とトランスポート層の間に挿入された新しい層で、
SSLはブラウザからの要求を受け取ると、サーバへ送信するためにTCPに渡す。
セキュアコネクションが確立されたあとは主に圧縮と暗号化を担うことになる。
SSL上でHTTPが用いられるとき、標準のHTTPプロトコルであるがHTTPS(Secure HTTP)と呼ばれる。
ポートとしては80の代わりに443が使われることになる。
SSLはクライアントとサーバ間の相互認証の機能としても使用している。
SSLプロトコルは改訂が繰り返され、今回は最も広く使われているバージョン3について説明する!

SSLのオプションとしては圧縮の有無、使用される暗号アルゴリズム、暗号輸出規制に関するいくつかの
項目を含む。主に強力な暗号化は米国内でのみの使用に限る。
米国外では鍵は40ビット(暗号学者にとっては冗談のようなもの)までに制限される。(ちなみにこの制限は緩和されている)

SSLは2つのサブプロトコルで構成されている。
1つはセキュアコネクションを確立するためのもの
もう1つはそのコネクション上で通信を行うためのもの
実際にセキュアコネクションを確立していくか見ていこう!


■SSLコネクションを確立するサブプロトコルの簡略バージョン

ちなみに上の図は私が書きましたw
AliceとBobは暗号通信などの分野で、プロトコル等を説明する際に想定上の当事者として登場する
典型的キャラクターの名札としてよく使われる人名ですので覚えておくように!
プロトコルはAlicaがBobにコネクションを確立を要求するメッセージ1を送信するところから始まる。
このメッセージでAlica側のSSLのバージョンと圧縮と暗号アルゴリズムに関する設定を指定する。
次にBobさんはAliceがサポートしているアルゴリズムのうち、どれを使用するか選択し、
メッセージ2として送信する。続いてメッセージ3でBobの公開鍵を含む証明書を送信する。
Bobは証明書のチェーンを示すことができればAliceはBobの公開鍵を検証することができる。
すべて終えるとBobはメッセージ4を送信しAliceの順番が来たことを教える。
Aliceはランダムな384ビットのプリマスター鍵(premaster key)を選び、
Bobの公開鍵で暗号化して送信する(メッセージ5)。受信されたらAliceとBobはどちらも
セッション鍵を計算できる。その後AliceはBobに暗号を切り替えること(メッセージ6)とコネクション確立
のサブプロトコルを終了すること(メッセージ7)を伝える。
そしてBobは了解の応答をする(メッセージ8,9)。

SSLは複数の暗号アルゴリズムをサポートするが、
最も強力なのは暗号化に異なる3つの鍵によるトリプルDESを用いて、メッセージの完全性の保証に
SHA-1を用いるものである。この組合せは比較的低速なので、高いセキュリティが要求される銀行やアプリケーション
などで使用される。暗号化に128ビット鍵のRC4がメッセージ認証にMD5が用いられる。
RC4は古典的なストリーム暗号であり、鍵ストリームと排他的論理和をとることで暗号文が生成される。
次はSSLを用いたデータ送信について説明しよう!


■SSLを用いたデータ送信

データの送信においては上記の図に示す2つ目のサブプロトコルが使用される。
ブラウザからのメッセージは16Kバイト以下のユニットに断片化(fragmentation)される。
もしデータ圧縮のオプションが有効になっていればユニットは個別に圧縮される。
その後2つのナンスとプリマスター鍵から作られる秘密鍵が圧縮された平文と連結され、
ハッシュアルゴリズム(MD5)によってハッシュされる。このハッシュは
MACとして断片に追加される。そしてMACが付与された圧縮済み断片は合意された
対称暗号アルゴリズムで暗号化される。最後に各断片にヘッダーが付与され、
TCPコネクションを介して送信される。


■TLS(Transport Layer Security)

SSLの問題は公開鍵証明書を取得していないサーバや、公開鍵証明書を持っていても
その鍵がSSLに対応しているものであることを確認していないサーバが存在している点である。
1996年、Netscape Comminications社は標準化のためにSSLをIETFに委任した。
その結果TLS(Transport Layer Security)となった。
TLSはSSLバージョン3をベースとしている。より強力的な鍵を作るために
プリマスター鍵とナンスからセッション鍵を作る方法が変更されている。
ほとんどのブラウザではTLSとSSLの両方を実装して、TLSによるセッションが構築できなかった
場合にはSSLに戻すようになっている。
これをSSL/TLSと呼ぶ。TLSの最初の実装は1999年にリリースされている。
2008年8月に規定されたTLSバージョン1.2においては強力的な暗号セット(AES)がサポートされている。
今後TLSに変わっていくことだろう。


■2017年1月からhttps必須!?

上の写真は2017年1月からパスワードまたはクレジットカードの情報を送信する際に
HTTPSではない接続を利用する場合に表示されます!
最終的には全てのHTTP接続の際に警告を表示する計画をしているとのことで、
httpsに対応していないサイトは検索しても上位に出なくなってしまうという恐れあり(ひえええ)


■まとめ

いつも見ているメディアとかwebサイトはhttpsになってるか確認するといいですね。
ブログ書くの疲れたわい!

参考
コンピュータネットワーク 第5版 

The following two tabs change content below.

あだちん

1989年生まれ。 ランサーズ/SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、ランサーズにてサーバ系のお仕事も副業で行い、他社インフラレスポンス改善、ansibleでのインフラコード化を推進し、未経験によるエンジニア勉強会なども実施している。 そして「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/広報/VulsRepo init file,chatwork通知のコントリビュータでもある。 現在はDocker開発環境の提供,AWSで新サービスのインフラ構築,PHPバージョンアップ,分析基盤を担当しておりDigdag,embulk,BigQueryを使いこなそうと奮闘中。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください