TLS1.3の暗号スイートは甘くない

前回の勉強内容

ponsuke-tarou.hatenablog.com

TLSは、「公開鍵証明書による認証」「共通鍵暗号による通信暗号化」「ハッシュ関数による改竄検知」をしてくれるプロトコルです。

ponsuke-tarou.hatenablog.com

TLSで使う暗号アルゴリズムハッシュ関数、鍵長などの組み合わせを暗号スイートといいます。

暗号(cipher)ひとそろい(suite)、英語で「Cipher Suites」、日本語で「暗号スイート」です。

この仕様では、TLS 1.3で使用する次の暗号スイートを定義しています。
+------------------------------+-------------+
|Description          |Value   |
+------------------------------+-------------+
|TLS_AES_128_GCM_SHA256   |{0x13,0x01} |
|TLS_AES_256_GCM_SHA384   |{0x13,0x02} |
|TLS_CHACHA20_POLY1305_SHA256|{0x13,0x03} |
|TLS_AES_128_CCM_SHA256   |{0x13,0x04} |
|TLS_AES_128_CCM_8_SHA256  |{0x13,0x05} |
+------------------------------+-------------+
RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳

TLS_AES_128_GCM_SHA256」や「TLS_AES_128_CCM_SHA256」が暗号スイートのお名前になります。

暗号スイートのお名前にはルールがあります。
TLS1.3からは「TLS_AEAD_HASH 」ルールになりました。

TLS_AEAD_HASH
↑   ↑     ↑
|  |    「HASH」にはHKDFで使用されるハッシュアルゴリズムがはい
|  「AEAD」にはAEADアルゴリズムがはい
「TLS」は固定の文字
例) TLS_AES_128_GCM_SHA256 => 「TLS_」+「AESの鍵長128でGCMモード」+「ハッシュアルゴリズムはSHA256」

参考 : RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳の「B.4. 暗号スイート」

AEADは、「公開鍵証明書による認証」「共通鍵暗号による通信暗号化」「ハッシュ関数による改竄検知」を一気にやってくれます。

関連する(associated)データによる認証(authenticated)付き暗号化(encryptio)、英語では「AuthenticatedEncryption with Associated Data」、略して「AEAD」です、短く日本語で「認証暗号」とも言います。
TLS1.2から採用されました。

そのため、「ハッシュ関数による改竄検知」はAEADでやっちゃいます。
なので、TLS1.3の暗号スイートのお名前にはルールにある「HASH」には、HKDFで使用されるハッシュアルゴリズムが使われます。

HKDFは、HMACベースの鍵導出関数です。

ハッシュ関数(hashed)を使って作られたMACを基礎(base)にした秘密値から鍵(key)を導出(derivation)する関数(function)で、日本語では「HMACベース鍵導出関数」、英語では「Hashed Message Authentication Code(HMAC)-based key derivation function」、略して「HKDF」です。長すぎて覚えられません。
MACといっても世の中いろいろありますが「メッセージ認証コード」の意味のMACです。
ponsuke-tarou.hatenablog.com

暗号アルゴリズムには、ブロック暗号とストリーム暗号があります。

方式 暗号化の方法 特徴 対象の暗号アルゴリズム
ストリーム暗号 平文をビット単位あるいはバイト単位で順次処理する まとまった単位になるまで待たないので複合が早い RC4
ブロック暗号 特定のビット数のまとまり毎に処理する ストリーム暗号より安全性の研究が進んでいて広く使われている DES, 3DES, AES

ブロック暗号で処理する「特定のビット数のまとまり」をブロック長と言います。

米国NISTが制定した,AESにおける鍵長の条件はどれか。

  1. 128ビット,192ビット,256ビットから選択する。<<正解
  2. 256ビット未満で任意に指定する。
  3. 暗号化処理単位のブロック長より32ビット長くする。
  4. 暗号化処理単位のブロック長より32ビット短くする。

出典 :平成24年 春期 情報セキュリティスペシャリスト 午前Ⅱ 問4

ブロック暗号で暗号化を繰り返す方法のことを「モード」といいます。

ブロック暗号は「特定のビット数のまとまり」の暗号化を繰り返して処理します。その繰り返し方法のことを「モード」といいます。

モード名 英語 繰り返し方
ECB Electronic(電子) CodeBook(符号表) Mode ブロック毎に暗号化する処理を繰り返す
CBC Cipher(暗号) Block Chaining(連鎖) Mode 「直前ブロックの暗号文」と「次ブロックの平文」のXOR(排他的論理和)の値を暗号化する
CFB Cipher(暗号)-FeedBack Mode 「直前ブロックの暗号文をさらに暗号化した値(鍵ストリーム)」と「次ブロックの平文」のXOR(排他的論理和)の値を暗号文とする
GCM Galois/Counter Mode 改竄検知までやってくれる認証付きのモードらしいのですが難しくてよくわかりません

ECBのように「ブロック毎に暗号化する」だけだと危険が伴います。
悪い人が大切そうなところのブロックだけ解読しようとして総当たり攻撃をしてくるかもしれません。全部を解読するより特定のブロックだけ解読する方が楽ですからね。
そんな危険を避けるために「直前の暗号文など他の要素を合わせる」というECB以外のモードがあります(上記表に書いてある以外のモードもたくさんあります)。

しかし、CBC脆弱性が発覚してしまいました。
CBCは、「直前ブロックの暗号文」を使うので一番最初のブロックには「直前ブロックの暗号文」がありません。そこで、1ブロック分のビット列を代わりに用意して使います。
この「1ブロック分のビット列」を初期化(initialization)ベクトル(vector)、英語で「initialization vector」、略して「IV」といいます。
CBC脆弱性はIVの部分にありました。

SSL プロトコルTLS プロトコルには、CBC モードで選択平文攻撃を受ける脆弱性が存在します。
SSL プロトコルTLS プロトコルCBC モードで動作する際、初期化ベクトル (IV) の決定方法に問題があり、選択平文攻撃を受ける脆弱性が存在します。
JVNDB-2011-002305 - JVN iPedia - 脆弱性対策情報データベース

f:id:ponsuke_tarou:20220406225248j:plain
足立34のおきもと湯

TLS1.3では、TLS1.2より暗号スイートが厳しくなりました。

TLSでは、暗号スイートにそれぞれ何を使うかサーバとクライアントで合意してから通信を開始します。
セキュリティの強化により暗号スイートで、TLS1.2で使えたけれどTLS1.3で非推奨になったものがいくつかあります。

技術分類 非推奨になったもの 残念なこと
暗号アルゴリズム RC4 TLS プロトコルおよび SSL プロトコルで使用される RC4 アルゴリズムにおけるストリームの最初のバイトへの平文回復攻撃の脆弱性 - JVN
暗号アルゴリズム DES TLS プロトコルなどの製品で使用される DES および Triple DES 暗号における平文のデータを取得される脆弱性 - JVN
暗号アルゴリズム AES-CBC AEADでないCBC モードは非推奨になった
ハッシュ関数 MD5 コリジョン攻撃への脆弱性
ハッシュ関数 SHA-1 SHA-1の安全性低下について - CRYPTREC

TLS1.3は、RFC8446で規格化されて2018年に公開されました。
参考 : RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳

TLS1.3の暗号スイートに関する説明のうち,適切なものはどれか。

  1. TLS1.2で規定されている共通鍵暗号AES-CBCを必須の暗号アルゴリズムとして継続利用できるようにしている。
  2. Wi-Fiアライアンスにおいて規格化されている。
  3. サーバとクライアントのそれぞれがお互いに別の暗号アルゴリズムを選択できる。
  4. 認証暗号アルゴリズムとハッシュアルゴリズムの組みで構成されている。 << 正解

出典 : 令和3年 秋期 情報処理安全確保支援士試験 午前Ⅱ 問17

ダウングレード攻撃は、いまいちな暗号スイートを無理やり使わせることで盗み読みをします。

中間者攻撃で輸出グレードである512bit以下の強度が超弱いRSA鍵を使わせる「FREAK」、
DH鍵交換の脆弱性を利用して中間者攻撃で中間者攻撃で輸出グレードである512bit以下の強度が超弱い鍵を使わせる「Logjam」、
脆弱性のあるSSL3.0以下での通信を強制する「バージョンロールバック攻撃」
などがあります。

SSL/TLSのダウングレード攻撃に該当するものはどれか。

  1. 暗号化通信中にクライアントPCからサーバに送信するデータを操作して,強制的にサーバのディジタル証明書を失効させる。
  2. 暗号化通信中にサーバからクライアントPCに送信するデータを操作して,クライアントPCのWebブラウザを古いバージョンのものにする。
  3. 暗号化通信を確立するとき,弱い暗号スイートの使用を強制することによって,解読しやすい暗号化通信を行わせる。<< 正解
  4. 暗号化通信を盗聴する攻撃者が,暗号鍵候補を総当たりで試すことによって解読する。

出典 : 平成29年 春期 情報処理安全確保支援士試験 午前Ⅱ 問2

f:id:ponsuke_tarou:20220408065851j:plain
板橋12のアクアパレス藤

次回の勉強内容

ponsuke-tarou.hatenablog.com