SlideShare a Scribd company logo
プロフェッショナルSSL/TLS
1, 2章
2017/4/10
光成滋生
• 『Bulletproof SSL and TLS』(Ivan Ristic/齋藤孝道訳)
• 1~2 TLSの復習
• 3~4 PKI
• 5~7 各種攻撃
• 8~ 安全なサーバの設定
• 9 パフォーマンス
• 10 TSTS, CSP, 公開鍵pinning
• 11, 12 OpenSSL
• 13 Apache
• 14 Java, Tomcat
• 15 IIS
• 16 Nginx
概要
2 / 27
• TLSの目標
• 暗号学的なセキュリティ
• 安全な通信が最優先
• 相互運用性
• 異なるプログラムやライブラリが同じパラメータで通信可能
• 拡張性
• プロトコルを作り直さなくても新しい技術に対応できる
• 効率性
• コストの高い暗号処理を最小限にする
1章 SSL/TLSと暗号技術
3 / 27
• OSIモデル
• SSL/TLSはアプリケーション層(HTTP, SMTPなど)とトラン
スポート層(TCP, UDP)の間にある
• TLSを取り除いてもTCPの上でHTTPが動く
• 暗号技術
• confidentiality ; 機密性 ; 秘密が守られること
• authenticity ; 真正性 ; 本人であることを検証できること
• integrity ; 完全性 ; 改竄されることなく転送されること
OSIモデル、暗号技術
4 / 27
• 暗号システムは鍵以外の全てが攻撃者に掌握されても
安全でなければならない
• 暗号アルゴリズムは複数人で共有する
• 共有する相手が増えると敵対する相手にアルゴリズムが漏れ
る可能性が高くなる
• 鍵がないと人数が増えたときに多数の人が復号できてしまう
• 優れた暗号アルゴリズムを作るのは難しい
• たくさんの人が精査して初めて安全と思われる
Kerckhoffsの原則
5 / 27
• 事前に秘密鍵を共有しておきデータを暗号化する
• 他人は途中経路で眺めても分からない
• 全数探索
• 鍵の種類だけ試すこと
• p.6では全数探索しか暗号を破る方法が無いとき計算量的安全
と読めなくもないが必ずしもそういうわけではない
• 全数探索しなくて破る方法があったとしても、その方法の計
算量が十分大きければ安全
共通鍵暗号
6 / 27
• ストリーム暗号
• 鍵ストリーム ; ランダムなデータの無限列(バイト列)
• 暗号化はこれと排他的論理和を求める
• 同じ鍵を使い回さないことが重要
• ブロック暗号
• データの固まりごとに暗号化
• 16バイト単位のものが多い
• 任意の長さのデータを扱うには暗号化モードと併用
• パディングなど
• 暗号モード
• ECB, CBC, CFB, OFB, CTR, GCM
• 最近はGCMを推奨
ストリーム暗号とブロック暗号
7 / 27
• データの完全性の検証
• 原像計算困難性(preimage resistance)
• 第2原像計算困難性(second preimage resistance)
• 衝突耐性(collision resistatnce)
• MAC(メッセージ認証コード)
• ハッシュ関数でハッシュ値はデータと一緒に送信できない
• 秘密鍵(MAC鍵ともいう)とデータからハッシュ関数を組み
合わせてハッシュ値(MAC値ともいう)を作る
• MAC鍵は別途秘密に共有しておく
ハッシュ関数とMAC
8 / 27
• 公開鍵暗号
• 暗号化する鍵と復号する鍵を別々にした
• 共通鍵暗号はn人のうち二人が秘密に通信し合おうとすると
n(n-1)/2個の秘密鍵が必要
• 同じ鍵を使い回すと第三者に漏れやすい
• 共通鍵暗号より計算時間がかかることが多い
• デジタル署名
• 真正性を検証可能にする技術
• MACはMAC鍵の共有が面倒
• 秘密鍵で署名をつけて公開鍵(検証鍵)で真正性を確認
公開鍵暗号とデジタル署名
9 / 27
• 暗号で使う擬似乱数生成器は予測不可能性が大事
乱数生成器
10 / 27
• AliceとBobが安全に通信できるにはどうするか
• 機密性のために共通鍵暗号を使う
• 途中で改竄されないためにMACを使う
• リプレイ攻撃を防ぐために番号をつける
• 共通鍵暗号とMAC鍵を交換するために公開鍵暗号を使う
• 本人であることを確認するためにデジタル署名を使う
• このあたりの一連の流れをハンドシェイクという
プロトコル
11 / 27
• 現在安全かだけでなく、その情報をどれぐらいの期間
守りたいのかについても考えるべき
暗号強度
12 / 27
• 中間者攻撃(man in the middle attack)
• 通信会社と結託して通信機器を乗っ取る
• ARP spoofing
• 任意のIPアドレスをMACアドレスに結びつける
• WPAD hijacking
• HTTPプロキシの設定を取得するプロトコルに対する攻撃
• DNS hijacking
• ドメイン名を乗っ取る
• DNSの設定を変更する
• DNS cache poisoning
• DNSサーバのキャッシュの脆弱性にたいする攻撃
• BGP route hijacking
• ルータが利用する経路制御プロトコルにたいする攻撃
MITM
13 / 27
• 受動的攻撃
• 大規模期間による継続的なモニタリング
• FS
• (日和見暗号)
• 能動的な攻撃
• 不正な証明書を利用
受動的攻撃と能動的な攻撃
14 / 27
• TLS1.2についての解説 RFC5246参照
• TLS record = ヘッダ | メッセージデータ
• ヘッダ = contenttype | version | レコード長
• シーケンス番号
• 64ビット
• 送受信データには含まれない
• 通信の双方で保持
• リプレイ攻撃に対する防除
2章プロトコル
struct {
uint8 major;
uint8 minor;
} ProtocolVersion;
enum {
change_cipher_spec (20),
alert (21),
handshake (22),
application_data (23)
} ContentType;
struct {
ContentType type;
ProtocolVersion version;
uint16 length; / * 最長 2^14 ( 16,384 ) バイト * /
opaque fragment[TLSPlaintext.length];
} TLSPlaintext;
15 / 27
• ハンドシェイクの種類
• サーバ認証を行うフルハンドシェイク
• セッション再開のためのハンドシェイク
• クライアントとサーバの認証を伴うハンドシェイク
• フルハンドシェイク
• 接続で使いたいパラメータを双方が提示して合意する
• 鍵確立
• 提示された証明書の認証
• マスターシークレットの共有
• ハンドシェイクが書き換えられていないことの検証
handshakeプロトコル
16 / 27
• クライアントの認証はしない一般的なケース
p.27図2.2
サーバ認証を伴うフルハンドェイク
client server
ClientHello
ServerHello
Certificate
ServerHelloDone
ServerKeyExchange
ClientKeyExchange
[ChangeCipherSpec]
Finished
[ChangeCipherSpec]
Finished
17 / 27
• Certificate
• サーバの証明書を送信する
• ServerKeyExchange/ClientKeyExchange
• マスターシークレットの生成に必要な情報を送る
• ChangeCipherSpec
• 接続に必要な情報を全て手に入れて暗号鍵を生成したことを
相手に伝えるメッセージ
• 完全性検証の対象外
• 実装が難しいためOpenSSLでCCS injectio攻撃を受けた
• Finished
• ハンドシェイクのMACを送る(verify_data)
18 / 27
• p.32 図2.3
クライアント認証時のフルハンドシェイク
client server
ClientHello
ServerHello
Certificate
ServerHelloDone
ServerKeyExchange
ClientKeyExchange
[ChangeCipherSpec]
Finished
[ChangeCipherSpec]
Finished
CertificateRequest
Certificate
CertificateVerify
19 / 27
• CertificateRequest
• クライアントに対する認証の要求と許容できる証明書の種類
• CertificateVerify
• クライアント証明書に含まれる公開鍵に対応する署名
追加部分
20 / 27
• フルハンドシェイクは重たい処理
• 認証などを省略したい
• session resumption
• session IDを用いてセッションを再開する仕組み
• プロトコル
• クライアントがClientHelloにsession IDを含めて送信
• サーバは同じsession IDをServerHelloに含めて送信
• 以前共有したマスターシークレットを使って新しい鍵を生成
• ECDHE_ECDSA
• FSの実現のために利用
• 詳細は今まで解説したので省略
セッションリザンプション
21 / 27
• 以前Lucky13攻撃で紹介した図
• MAC(Seq|Header|data)計算してpaddingをつける
• IVを作ってEnc
• MAC-then-encrypt(MACしてから暗号化)
• pading oracleの攻撃(勉強会1, 2回目)
• Encrypt-then-MACという拡張(2014)
• AEAD(認証つき暗号)
• 64ビットのnonceを付与して暗号化(GCM/ChaCha20)
ブロック暗号を使った場合
Seq data
MAC(Seq|Header|data) padding
Enc(data|MAC|padding)
Header
ヘッダ IV
22 / 27
• 新しい接続のセキュリティパラメータの合意をえる
• クライアント証明書
• サイトの全接続に対してクライアント証明書を要求すると
• 証明書を持っていないと何も見えない
• エラーも分からない
• サイトのトップページはクライアント証明書なしを許可
• そこからクライアント証明書での接続に誘導
• このときに再ネゴシエーションを使う
• 情報の隠蔽
• 2回目のハンドシェイクが暗号化されるのでクライアント証明
書が覗かれない
• 暗号の強度変更
再ネゴシエーション
23 / 27
• 片方が通信を閉じたらclose_notifyを送信
• 相手は書き込み中の内容を破棄してclose_notifyを送信
• 強制切断攻撃(truncation attack)を防ぐ
• 攻撃者がやりとりを途中で横取りしてブロック
• 正しく実装する必要あり
Finished
24 / 27
• PRF(pseudorandom function)
• secret, seed, labelを入力としてHMACを使って構成する
• PRF(secret, label, seed) = P_hash(secret, label + seed)
• P_hash(secret, seed)
= H(secret, A(1) + seed) + H(secret, A(2) + seed) + ...
where A(1) = H(secret, seed), A(i) = H(secret, A(i – 1))
• マスターシークレット(Ms : master secret)
• Ms = PRF(pre_Ms, “master secret”, client_rand + server_rand)
• key_block = PRF(Ms, “key expansion”, server_rand +
client_rand)
• 鍵ブロックkey_blockを分割してMAC鍵や暗号鍵にする
• セッション再開時はMsは同じでclient_rand, server_randは新
しく取得する
擬似乱数生成器と鍵生成
25 / 27
• 暗号処理の方法を決めるパラメータの集まり
• TLS_鍵交換_認証_アルゴリズム_長さ_モード_MAC/PRF
• 例)TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
• 2章残りの節
• ALPN ; application-layer protocol negotiation
• CT ; certificate transparency
• Heartbeat
• NPN ; nextprotocol negotiation
• 標準化にはならずALPNに移行
• OCSPステープル
• サーバからクライアントに証明書の失効情報を送る
暗号スイート
26 / 27
• TCPデータは暗号化されるがメタデータや下位のレイ
ヤは平文のまま
• 送信元と宛て先のIPアドレスは分かる
• 最初のハンドシェイクは平文
• ブラウザの各種情報を袖手する
• ホストの証明書を調査する
• クライアント証明書を使う場合のユーザ識別情報を収集
• メッセージの長さ
プロトコルの限界
27 / 27

More Related Content

PDF
SSL/TLSの基礎と最新動向
PDF
TLS 1.3 と 0-RTT のこわ〜い話
PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
PDF
MQTTとAMQPと.NET
PDF
初心者向けCTFのWeb分野の強化法
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
PDF
僕がつくった 70個のうちの48個のWebサービス達
PDF
JVMのGCアルゴリズムとチューニング
SSL/TLSの基礎と最新動向
TLS 1.3 と 0-RTT のこわ〜い話
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
MQTTとAMQPと.NET
初心者向けCTFのWeb分野の強化法
なかったらINSERTしたいし、あるならロック取りたいやん?
僕がつくった 70個のうちの48個のWebサービス達
JVMのGCアルゴリズムとチューニング

What's hot (20)

PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
PDF
大規模サービスを支えるネットワークインフラの全貌
PDF
Ruby で高速なプログラムを書く
PDF
KafkaとAWS Kinesisの比較
PDF
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
PDF
Native Memory Tracking
PPTX
分散システムについて語らせてくれ
PDF
実践イカパケット解析
PDF
暗認本読書会7
PDF
TLS, HTTP/2演習
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
Apache Kafka 0.11 の Exactly Once Semantics
PDF
ストリーム処理を支えるキューイングシステムの選び方
PDF
IoT時代におけるストリームデータ処理と急成長の Apache Flink
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PPTX
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
PPTX
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
PDF
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
PDF
パケットキャプチャの勘どころ Ssmjp 201501
PDF
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
大規模サービスを支えるネットワークインフラの全貌
Ruby で高速なプログラムを書く
KafkaとAWS Kinesisの比較
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
Native Memory Tracking
分散システムについて語らせてくれ
実践イカパケット解析
暗認本読書会7
TLS, HTTP/2演習
ネットワーク ゲームにおけるTCPとUDPの使い分け
Apache Kafka 0.11 の Exactly Once Semantics
ストリーム処理を支えるキューイングシステムの選び方
IoT時代におけるストリームデータ処理と急成長の Apache Flink
ヤフー社内でやってるMySQLチューニングセミナー大公開
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
パケットキャプチャの勘どころ Ssmjp 201501
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
Ad

Similar to プロフェッショナルSSL/TLS 1.2章 (20)

PDF
#mailerstudy 02 メールと暗号 - SSL/TLS -
PDF
暗認本読書会10
PPTX
Professional SSL/TLS Reading Chapter 14
PDF
OAuthのHolder of Key Token
PDF
Jap1
PPT
Professional SSL/TLS Reading Chapter 6
PPT
Xml Security
PDF
OpenStack API
PDF
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
PDF
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
PPTX
Azure Container Services and Microservices design pattern
PPTX
AWSを学ぶ上で必要となる前提知識(SSL)
PPTX
Docker 1.12 の衝撃
PPT
1/5 ADFS 2.0 を使用してWindows Azure との SSO を実現しよう v1.1
PDF
最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013
PPTX
Clrh 110716 wcfwf
PDF
Hyperledger Fabric 1.0 概要
PDF
Kyoto Tycoon Guide in Japanese
PPTX
これから始める Azure の基礎サービス: IaaS/PaaS
PDF
オンプレ/クラウド連携と柔軟なストレージで実現する高信頼サービス_Shownet2021 studio 20210416
#mailerstudy 02 メールと暗号 - SSL/TLS -
暗認本読書会10
Professional SSL/TLS Reading Chapter 14
OAuthのHolder of Key Token
Jap1
Professional SSL/TLS Reading Chapter 6
Xml Security
OpenStack API
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Azure Container Services and Microservices design pattern
AWSを学ぶ上で必要となる前提知識(SSL)
Docker 1.12 の衝撃
1/5 ADFS 2.0 を使用してWindows Azure との SSO を実現しよう v1.1
最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013
Clrh 110716 wcfwf
Hyperledger Fabric 1.0 概要
Kyoto Tycoon Guide in Japanese
これから始める Azure の基礎サービス: IaaS/PaaS
オンプレ/クラウド連携と柔軟なストレージで実現する高信頼サービス_Shownet2021 studio 20210416
Ad

More from MITSUNARI Shigeo (20)

PDF
暗号技術の実装と数学
PDF
範囲証明つき準同型暗号とその対話的プロトコル
PDF
暗認本読書会13 advanced
PDF
暗認本読書会12
PDF
暗認本読書会11
PDF
暗認本読書会9
PDF
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
PDF
暗認本読書会8
PDF
暗認本読書会6
PDF
暗認本読書会5
PDF
暗認本読書会4
PDF
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
PDF
私とOSSの25年
PDF
WebAssembly向け多倍長演算の実装
PDF
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
PDF
楕円曲線と暗号
PDF
HPC Phys-20201203
PDF
BLS署名の実装とその応用
PDF
LazyFP vulnerabilityの紹介
PDF
Intro to SVE 富岳のA64FXを触ってみた
暗号技術の実装と数学
範囲証明つき準同型暗号とその対話的プロトコル
暗認本読書会13 advanced
暗認本読書会12
暗認本読書会11
暗認本読書会9
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
暗認本読書会8
暗認本読書会6
暗認本読書会5
暗認本読書会4
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
私とOSSの25年
WebAssembly向け多倍長演算の実装
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
楕円曲線と暗号
HPC Phys-20201203
BLS署名の実装とその応用
LazyFP vulnerabilityの紹介
Intro to SVE 富岳のA64FXを触ってみた

プロフェッショナルSSL/TLS 1.2章