「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[証明書]]
--[[HTTP]]
--[[VPN]]

* 目次 [#sc901e4b]
#contents

*概要 [#y98bec82]
-デジタル[[証明書]]を使用してエンドポイントを証明し通信の暗号化を行う。

-エンドポイントには、クライアント、サーバなどがあり、~
対応する[[証明書]]にクライアント[[証明書]]、サーバ[[証明書]]がある。

-しかし、ICカードなどに格納して、~
特定のマシンに限定しない使用方法もある。

**経緯 [#k2a94003]
歴史的経緯について。

***SSL [#t9bc1c67]
-Netscape Communications社が開発した。
-標準化はされていない。
-歴史的文書と言う形で後日、RFCが公開された。

***TLS [#rc898e35]
-SSL3.0を標準化したもの。
-SSLを継承するものと言う位置付け。

***脆弱性 [#n571cb3a]
-SSLの全バージョンと
-TLSの1.0と1.1の実装の一部には

脆弱性が発見され、TLS1.2以上への移行が促されている。

**X over SSL/TLS [#bbb963f8]
SSL/TLSはアプリケーション層とトランスポート層のプロトコルなので、~
アプリケーション層プロトコルにポート・フォワーディングが適用されている。

***HTTPS [#z7cbb3a5]
-HTTPS over SSL/TLS
-SSL/TLSの最も多いユースケース
-HTTPの下位スタックにSSL/TLSを使用する。

***その他 [#n3507b13]
-SMTPS(SMTP)
-LDAPS(LDAP)
-FTPS(FTP)
-IMAPS(IMAP)
-POP3S(POP3)

**機能 [#j664bae9]

***証明 [#ob730ee4]
サーバー[[証明書]]やクライアント[[証明書]]を用い、~
サーバー認証やクライアント認証を行う。

***暗号化 [#k24b9bf2]
上記の証明書を使用して鍵の生成と交換を行い暗号化通信を行う。

***メッセージ認証 [#dbd3108e]
MACによるメッセージ認証を行う。

*詳細 [#m6323280]

**プロトコル構造 [#k48422f6]

***スタック [#mb5dfb91]
|>|>|>|BGCOLOR(gray):アプリケーション層|
|Hand Shakeプロトコル|Change Cipher Specプロトコル|Alertプロトコル|Application Dataプロトコル|
|>|>|>|Recordプロトコル|
|>|>|>|BGCOLOR(gray):トランスポート層|
|>|>|>|BGCOLOR(gray):...|

***プロトコル [#u2305358]

-Hand Shakeプロトコル
--ネゴシエーション

--ネゴシエーションにより
---鍵交換を行い、
---マスタシークレットを生成する。

--セッション確立のハンド・シェイク
--セッションの下位にコネクションがある。

-Change Cipher Specプロトコル
--暗号化に関するパラメタの決定
--若しくは、パラメタの変更通知

-Alertプロトコル~
通信中に発生したエラーを相手に通知する。
--Warning
--Fatal(即中断)

-Application Dataプロトコル~
ネゴシエーションのパラメタに従い、透過的に送受信

-Recordプロトコル
--ブロック暗号化されたペイロード部分
--2^14バイト以下のブロックに分割される。
--圧縮、MACの生成、暗号化が行われる。

**シーケンス [#fd8fddbe]

***コネクション確立 [#ece043ee]
-プロトコル
--Hand Shakeプロトコル
--Change Cipher Specプロトコル
--Alertプロトコル
--Application Dataプロトコル

-コネクション確立手順~
網掛けは、オプショナル。

|#|クライアント|方向|サーバ|説明|h
|1||←|BGCOLOR(gray):Hello Request|Client Helloをリクエスト|
|2|Client Hello|→||Client Helloをレスポンス(暗号化/圧縮アルゴリズムの一覧)|
|3||←|Server Hello|Client Helloに対するServer Hello(暗号化/圧縮アルゴリズムの選択)|
|4||←|Server Certificate|サーバ[[証明書]]を送信([[証明書]]チェーンを含む)|
|5||←|Server Key Exchange|鍵交換メッセージその1(RSAかDHで)|
|6||←|BGCOLOR(gray):Certificate Request|クライアント[[証明書]]を要求|
|7||←|Server Hello Done|サーバからの送信終了を示すエンドマーク|
|8|BGCOLOR(gray):Client Certificate|→||クライアント[[証明書]]を送信|
|9|Client Key Exchange|→||鍵交換メッセージその2(その1の続き)|
|10|Certificate Verify|→||クライアントが正しい秘密鍵を持っていることを&br;証明するための署名を送付(サーバの公開鍵で検証)|
|11|Change Cipher Spec|→||無暗号通信の終了を示すエンドマーク&br;(共通鍵から暗号化/復号化に使用するパラメタを生成)|
|12|Finished|→||Client Hello からのメッセージを暗号化して送信|
|13||←|Change Cipher Spec|無暗号通信の終了を示すエンドマーク&br;(共通鍵から暗号化/復号化に使用するパラメタを生成)|
|14||←|Finished|Server Helloからのメッセージを暗号化して送信|
|15|Application Data|⇔|Application Data|暗号通信|

***データ送受信 [#d62183c4]
-プロトコル
--Recordプロトコル

-データ送受信手順

--暗号化
---データを2^14バイト以下のブロックに分割
---分割されたブロックを圧縮
---HMAC(MACシークレット)によるMACの生成
---連結とパディング
---暗号化(暗号化キー+初期ベクタ(IV))が行われる。
---暗号化されたデータを送信する。

--復号化
---復号化
---MAC認証
---圧縮の解凍
---ブロックの連結

-レコード・イメージ~
色付き部分が暗号化部分
|タイプ|バージョン情報|データ長|
|データ長|>|BGCOLOR(red):|
|>|>|BGCOLOR(red):通信データ|
|BGCOLOR(red):|>|BGCOLOR(blue): |
|>|>|BGCOLOR(blue):HMAC|
|BGCOLOR(blue):|BGCOLOR(yellow):パディング|BGCOLOR(yellow):パディング長|

**用語解説 [#c788117c]

***セッションとコネクション [#ac0c83fc]
-セッション
--共通鍵生成までのネゴシエーションのこと(仮想的概念)。
--特に負荷が高いのは鍵交換処理(プリマスタシークレットの生成まで)

-コネクション
--実際のTCP/IPコネクションで、セッションは共有する。
--ただし、コネクション毎、別々に暗号化/復号化パラメタを生成する。

***プリマスタシークレットとマスタシークレット [#p4042da5]

-プリマスタシークレット
--キー交換アルゴリズムで使用する値。

-マスタシークレット

--=共通鍵

--以下にPRF演算を施したもの。
---プリマスタシークレット
---サーバランダム
---クライアントランダム

--さらにPRFを行って暗号化/復号化に使用するパラメタを生成~
(生成したキー・ブロックから順次切り出す)~
(それぞれ、クライアント用とサーバ用がある)~
---MACシークレット
---暗号化キー
---初期ベクタ(IV)

-ランダム~
Helloに含まれる
--クライアントランダム(Client Hello)
--サーバランダム(Server Hello)

-参考
--SSL/TLS(Part.3) (3/4):不正アクセスを防止するSSL/TLS(4) - @IT~
https://www.atmarkit.co.jp/ait/articles/0101/16/news002_3.html

*脆弱性 [#l7e8ea42]

**中間者攻撃 [#j64e51cf]
基本的に、相互に信頼された認証局を使用することで、

>(ルート[[証明書]]を信頼されたルート証明機関に追加し、~
[[証明書]]の[[証明書]]チェーンをチェックする仕組みを使用する)

サーバ / クライアントを認証できるので中間者攻撃から守られる。

***HTTP化 [#h43d2fc4]
WebサーバがHTTPSを強制していても、中間者攻撃が介入することで、~
WebプラウザがHTTPで接続してしまい、そこをキャプチャされれば盗聴される。

***リダイレクト [#wdbb4f4a]
-HTTPでアクセスされた場合、強制的にHTTPSにリダイレクトする。
-ただ、このリダイレクトの前のHTTPアクセスにMITMの攻撃の可能性がある。

***HSTS [#z1b187da]
HSTS : HTTP Strict Transport Security

-上記の[[リダイレクト>#wdbb4f4a]]の問題を防ぐため

--RFC 6797 で規定されたセキュリティ機構

--最初にHTTPでアクセスした時点での攻撃を防ぐ。
---Cookieを傍受し個人情情報を収集する。
---フィッシングサイトへHTTPアクセスする。

-WebサーバーがWebブラウザに対して、
--現在のドメイン(サブドメイン)に対するアクセスにおいて、
--次回以降、HTTPSの使用を強制する(max-ageの期間まで)。
--この通知には、[[Strict Transport Securityヘッダ>セキュリティ強化のHTTPヘッダ#c8dd0eb5]]を使用する。

-だたし、HSTSでも、初回のHTTPアクセスにMITMの攻撃の可能性がある。

**ダウングレード攻撃 [#b2dd4608]

***バージョンロールバック攻撃 [#k904feee]
-Snap Startで、低いバージョンでTLS/SSL接続を行うよう仕向ける。
-Helloを改ざんし、より低い暗号強度のアルゴリズムを使用するよう仕向ける。

***FREAK [#k99a7e43]
-FREAK : Factoring attack on RSA-EXPORT Keys
-SSL/TLSの脆弱性を突いたセキュリティ・エクスプロイト

-RSA公開鍵を素因数分解することが可能であれば中間者攻撃が成立する。

--「アメリカ合衆国からの暗号の輸出規制」により導入された~
弱い暗号(規制を回避するための512ビットのRSA鍵)

--サーバ側・クライアント側の不適切な実装~
(512ビット以下のRSA鍵を受け入れてしまう)

***Logjam [#bfa93709]
-[[FREAK>#k99a7e43]]と同様に輸出用の512ビットの一時鍵を受け入れてしまう。
-しかし、こちらは、[[FREAK>#k99a7e43]]と異なり、TLSプロトコル自体の脆弱性。

**パディングオラクル攻撃 [#p6331664]

***Lucky Thirteen [#k962c2ca]

***POODLE [#ma37839d]
-POODLE : Padding Oracle On Downgraded Legacy Encryption
--ブロック暗号をCBCモードで使用した際にパディング・オラクル攻撃が可能となるもの。
--平均してわずか256回のリクエストで暗号文の1バイトの解読が可能となる。

-SSL 3.0の設計の脆弱性
--TLS 1.0以降に影響はない。
--主要なブラウザで[[バージョンロールバック攻撃>#k904feee]]が可能。

-対処法は、
--クライアント、サーバのどちらかでSSL 3.0を無効化する。
--クライアント側とサーバ側でTLS_FALLBACK_SCSV対応を行う(ダウングレードを抑止する)。

**実装上の脆弱性 [#s34bc706]

***Heartbleed [#q90928b9]
-OpenSSLライブラリのバージョン1.0.1 - 1.0.1f~
の間で発見された深刻なセキュリティ脆弱性

-保護されているはずの情報を盗むことが可能。

***脆弱なソフトウェア [#m9f08152]
ガラケーやスマホ、タブレット、そのアプリケーションに~
[[証明書]]のチェックが適切に行われていないものがあるらしい。

-OS標準の[[証明書]]ストアの利用
-失効のチェック
-[[証明書]]チェーンのチェック
-クライアントAPIの使用方法

**参考 [#k5a2f2eb]
-Transport Layer Security - Wikipedia > TLS/SSLの既知の脆弱性~
https://ja.wikipedia.org/wiki/Transport_Layer_Security#TLS/SSL%E3%81%AE%E6%97%A2%E7%9F%A5%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7

*参考 [#nddd6085]
-Transport Layer Security - Wikipedia~
https://ja.wikipedia.org/wiki/Transport_Layer_Security

-SSL/TLSの解説と選び方まとめ|ジオトラスト~
https://www.geotrust.co.jp/ssl_guideline/ssl_beginners/

-SSLとTLSとは?意外に知らないSSLとTLSの違い(簡単編) ~
常時SSL Lab. by Zenlogicのファーストサーバ株式会社~
https://zenlogic.jp/aossl/basic/ssl-tls/

**Qiita [#s7b889fa]
-エンジニアなら知っておきたい、絵で見てわかるセキュア通信の基本~
https://qiita.com/t_nakayama0714/items/83ac0b12ced9e7083927

-SSL/TLSについてまとめ2018~
https://qiita.com/Brutus/items/1015cc01d2e1eb82a526
-暗号技術入門を読んでhttps通信の仕組みを学ぼう~
https://qiita.com/n_slender/items/85452a235fce862d9599

**[[OpenSSL]] [#dcc0b738]

**[[SSTP]] [#xc50b87d]

**[[VPN]] [#va768b66]

***[[SSL-VPN>VPN#wa4de80e]] [#d9368d2c]

----
Tags: [[:IT国際標準]], [[:セキュリティ]], [[:暗号化]], [[:インフラストラクチャ]], [[:通信技術]], [[:Windows]], [[:IIS]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS