HTTPSの裏側で動くTLS通信と2種類の暗号化方式の仕組み

普段何気に利用しているhttps通信。

2種類の暗号方式を活用したハイブリット方式って事くらいは知ってました。

ただいざ説明するとなると…結構難しいかも。

今回はhttps通信に欠かせない2種類の暗号方式とTLSの仕組みをざっくりまとめ。

そもそもHTTPとは!?

Hyper Text Transfer Protocolの略称。

Webサーバとクライアントが、HTML文書等の情報をやりとり時に使われるプロトコル。

原則としてステートレスなので、リクエスト送ってレスポンス受け取って終了。

利点としてシンプルになるけど、逆に複数回のやりとりを追跡できない欠点あり。

ざっくりHTTPSとは!?

HTTPSとは、HTTPによる通信を安全に行うためのプロトコル。

HTTP over TLSであり、TLS上でHTTPプロトコルを利用することを意味。

HTTPだけでは安全な通信を行うことが困難。

HTTPSでの暗号通信の重要性

セキュアー環境で通信しないと、どのような危険性があるのか!?

・データの改竄

・データの盗聴

・なりすまし・フィッシング詐欺

このようなリスクに危険性から利用者を守るため、SSL(実質TLS)通信を実現。

SSL・TLSの歴史

SSLとTLSの歴史について。

インターネットが出来た当初はセキュリティに対する配慮がなく、通信の根幹を担うHTTPは、ちょっと知識のある人なら覗けたり、改竄できたり…今では考えられないですが、元々の利用者(学者)が紳士のように振舞う前提の性善説で成り立っていたとか。

しかしインターネット利用者の急拡大に伴い、Netscape社がSSLプロトコル(1.0)を開発。

1.0では脆弱性が発見され、後継バージョンの2.0や3.0が登場するも、こちらも脆弱性が発見され、現在SSLは使われておらず、今主流になっているのはSSLを踏襲したTLSで、様々な脆弱性に対する攻撃手法に対応すべく、日々バージョンアップ(1.0→1.1→1.2→1.3)中。

SSL通信と言えば、実質中身はTLS利用の認識で良いかと。

セキュリティの7要素

情報セキュリティーで大切だと言われる3大要素について。

■ 機密性

・認可された者だけがアクセス可能なことを確実にする.

■ 完全性

・性格であること、完全であることを保証する.

■ 可用性

・認可ユーザーが必要時に情報にアクセスできることを確実にする.

近年は上に4要素が加えられ、7大要素として考えられます。

■ 責任追跡性

・ユーザーやサービスの行動、責任が説明できること.

・主にログの記録や情報や制御二重化による否認防止.

■ 真正性

・ユーザー、システムの振る舞いが明確であること.

・なりすましや偽情報がないことを証明.

■ 信頼性

・システムやプロセスが矛盾なく動作すること.

■ 否認防止

・デジタル署名等で文書作成者が作成者は本人であるという事実を否定させない等.

2種類の暗号方式

httpsから始まるURLでは、SSL/TLSを利用した暗号化通信を実現。

まず暗号化通信では「共通鍵暗号方式」と「公開鍵暗号方式」を用います。

まず共通鍵暗号方式とはどのような特徴があるか!?

■ 共通鍵暗号方式

・暗号化と複合化の鍵が同一.

・公開鍵暗号方式より処理が高速.

・通信相手への鍵の受け渡しが困難.

・鍵の管理が煩雑(最低でもn(n-1)/2個の鍵が必要)

次に公開鍵暗号方式について。

■ 公開鍵暗号方式

・暗号化と複合化の鍵が異なる.

・一方の鍵を公開するので受け渡しが容易.

・鍵の管理が楽(鍵の個数は2n)

・暗号化と複合化に時間がかかる.

httpsでは上2つの暗号化方式のメリットを活用。

公開鍵暗号方式の用途

公開鍵暗号方式の用途は主に以下の3種類。

■ 公開鍵暗号

・誰でも公開されている公開鍵で暗号化が可能.

・公開鍵で暗号化された内容は秘密鍵のみで複合可能.

・暗号技術に守備範囲としては機密性に該当.

次に本人確認でも利用されるディジタル署名。

■ ディジタル署名

・秘密鍵の持ち主のみ作成可能なデータ(署名)を作成する方式.

・公開鍵は公開されているので、誰でも署名の整合性を確認可能.

・真正性、否認防止性、完全性を検証可能.

最後にhttpsでも利用される鍵交換。

■ 鍵の交換

・両者で公開鍵と秘密鍵のペアを作り、互いに公開鍵を交換.

・相手の公開鍵と自身の秘密鍵の組み合わせ計算により、秘密裏に情報共有が可能.

・機能的には機密性を保証.

楕円曲線暗号

楕円曲線上の離散対数問題(EC-DLP)の困難性を安全性の根拠とする暗号。

DSAを楕円曲線上で定義した楕円曲線DSA(ECDSA)、DH鍵共有を楕円化した楕円曲線ディフィー・ヘルマン鍵共有(ECDH)などあり、現在SSL/TLSでメジャーな鍵交換はRSA、DHE、ECDHEの3種類。

一応この理論を簡単?に説明してくれる人がいるので気になる方は↓↓

楕円曲線暗号の超簡単な理論の紹介

私は途中でよく分からなくなったので、とりあえず「べき乗のもつ性質」を利用して、公開鍵と秘密鍵の組み合わせにより、同一の秘密情報を共有(算出)できると覚えておくことにしましたmm

TLSハンドシェイク

ここからが本題。

TLSハンドシェイクは以下手順で実現。

◼︎ パラメータ交換.

・合意パラメータの連携.

・クライアントから複数候補が平文で送られ、サーバが選択.

合意パラメータには暗号方式、鍵交換アルゴリズム、拡張機能利用有無など。

■ サーバ認証.

・サーバ認証ではサーバ証明書を利用して真正性を確認.

・接続相手が意図したサーバか、クライアント側に真正性を確認できる証明書送信.

・クライアント側ではトラストアンカーと呼ばれる認証局のルート証明書を利用.

・中間証明書もサーバ側から受け取り、有効期限や用途・名前をチェック.

・鍵交換で利用するデータを秘密鍵で署名しクライアントに送付.

サーバ証明書でなりすましをチェックし、証明書の公開鍵で署名検証を行う。

■ 鍵交換(ECDHE).

・暗号化や認証で利用する共有鍵はセッション毎に新規作成の必要がある.

・クライアントとサーバはTLSハンドシェイク毎に公開鍵と秘密鍵のペア作成.

・作成した公開鍵を互いに交換する.

・各自が持つ秘密鍵と組み合わせ計算、共有鍵のデータを算出する事で鍵交換完了.

この時点で暗号化に必要な共通鍵の交換が完了!!

■ 暗号通信の開始.

・送受信したデータのハッシュ値を送信し、ハッシュ値が一致しているかチェック.

これらの手順を踏んでTLSハンドシェイクは完了。

引き続きリクエストとレスポンスをを暗号化して送受信を実施。

安全にhttps通信を行うためには、安全な認証と鍵の交換手段が大切!!