暗認本読書会4
共通鍵暗号 ChaCha20, AES, 暗号化モード, XTS-AES
2021/10/21
https://anninbon.connpass.com/
光成滋生
• ワンタイムパッドの利点
• 情報理論的安全性を持つ
• 暗号文を見ても平文の情報は得られない
• 欠点
• 秘密鍵(乱数)のサイズ = 平文のサイズ
• 一度しか使えない
• ストリーム暗号
• 秘密鍵を擬似乱数に置き換える
前回のまとめ
2 / 24
• 擬似ランダム関数PRF
• シードs(秘密)と秘密でない値から擬似乱数を生成
• 単なる擬似乱数生成器だと一度しか使えない
• PRFは秘密でない値を変えると繰り返し使える
PRF (PseudoRandom Function)
3 / 24
• 入力 : 256bitの秘密鍵k + 96bitのナンスn
• ナンス : 一度しか使わない秘密ではない数値
• 出力 : 32bitのカウンタb 1個につき512bitの乱数
ChaCha20
4 / 24
• 全体図
• 1/4ラウンド関数QR(a,b,c,d) ; a, b, c, dは32bit整数
• rotLeft(x, n)はxをn bit左回転
ChaCha20のPRF
入力:(a, b, c, d)
a ← a + b; d ← d ⊕ a; d ← rotLeft(d, 16);
c ← c + d; b ← b ⊕ c; b ← rotLeft(b, 12);
a ← a + b; d ← d ⊕ a; d ← rotLeft(d, 8);
c ← c + d; b ← b ⊕ c; b ← rotLeft(b, 7);
出力:(a, b, c, d)
5 / 24
• 512bitの内部状態を32bit x 4 x 4の正方形に並べる
• それを縦ライン1, 2, 3, 4と斜めライン5, 6, 7, 8の4個の
𝑥𝑖にたいしてQR()を適用
• 合計8回
• これを10回繰り返す
• AES専用命令の無いCPUでは高速に処理できる
1/4ラウンド関数QRの適用方法
6 / 24
• 平文をブロック(ある決まったサイズ)に分割
• 端数が出ればパディングをしてブロックにする
• ブロックごとに暗号化
• ブロックの暗号化方法には何種類かある(後述)
ブロック暗号
7 / 24
• 最もメジャーなブロック暗号
• ブロックの単位は128bit
• 秘密鍵のサイズは128, 192, 256bitのいずれか
• 暗号化方法
• 秘密鍵からラウンド鍵を生成
• AddRoundKey(1回)
• ラウンド関数(128bitなら9回)
• SubBytes
• ShiftRows
• MixColumns
• AddRoundKey
• 最終ラウンド関数(1回)
AES
8 / 24
• AddRoundKey
• ラウンド鍵との排他的論理和xor
• 128bitのブロックを8bit x 4 x 4の正方形に並べる
• SubBytes
• 各8bitのデータをindex
とするテーブル(S-Box)引き
• S-Boxの値は固定
AddRoundKeyとSubBytes
9 / 24
• ShiftRow
• データをずらす
• MixColumns
• ある種の行列の掛け算
• x'_0 = (A_00⊗x_0)⊕(A_01⊗x_1)⊕(A_02⊗x_2)⊕(A_03⊗x_3)
ShiftRowとMixColumns
10 / 24
• Intel系CPUのAES暗号化・復号専用命令
• ARMなどでも持っていることがある
AES-NI
命令 用途
aeskeygenassist 暗号化用ラウンド鍵生成の補助
aesimc 復号用MixColumnsの逆操作補助
aesenc 暗号化用ラウンド関数1回分
aesenclast 暗号化用最終ラウンド関数
aesdec 復号用ラウンド関数1回分
aesdeclast 復号用最終ラウンド関数
11 / 24
• 平文が同じとき暗号文がいつも同じなら推測される
• いつも異なる暗号文は推測できない
• 1, 2, 3の答えの暗号文が全て異なれば
ある暗号文の平文を推測できても他の平文に影響がない
決定的アルゴリズム
12 / 24
• ECBモードは同じ平文は同じ暗号文
• CBCモードは同じ平文でも異なる暗号文
• 32bitカラーを白黒2値化した無圧縮BMPファイルのデータ
部分をAESで暗号化
• cf. https://zoom-japan.net/blog-2/20200428/
• (注)動画などの圧縮データでは通常ECBでも分からない
ECBモードとCBCモードの比較
13 / 24
• 決定的アルゴリズムの入力の一部が乱数
• 決定的アルゴリズムな暗号モードECBは安全ではない
確率的アルゴリズム
14 / 24
• ECB(Electronic CodeBook)モード
• CBC(Cipher Block Chaining)モード
• IV(Initialization Vector)
• 秘密でないが一度しか
使ってはいけない
• 予測できない値にする
• IVが異なると平文が
同じでも異なる暗号文
暗号化モード
15 / 24
• ブロック暗号をPRFとして利用するストリーム暗号
• 「ナンス+カウンタ」を暗号化して乱数とする
• その乱数と平文の排他的論理和をとって暗号文とする
CTR(CounTeR)モード
16 / 24
• CBCはSSL 3.0までは広く使われていた
• パディングオラクル攻撃POODLEが見つかり廃止
• パディングオラクル攻撃
• ブロック暗号のパディング処理にまつわる攻撃
• 不正な暗号文をサーバに送りつけてそのエラー情報を利用
• サーバは暗号処理のエラー結果の
詳細を返してはいけない
CBCモードは使われなくなりつつある
17 / 24
• CBCモード
• 暗号化するとき前のブロックの暗号文が必要
• 逐次的にしか処理できない(並列処理できない)
• 復号は並列処理可能
• CTRモード
• 暗号化・復号が並列処理できる
• 必要な部分だけ復号できる
• TLS 1.3
• CBCモードは使われない
• AES-GCMはCTRモードを利用
CBCモードとCTRモードの比較
18 / 24
• 情報漏洩対策
• ノートパソコンやスマートフォンのHDD・SDDを安全にする
• TPM(Trusted Platform Module)
• セキュリティ専用チップ
• 秘密情報を安全に格納・処理できる
• Windows 11で必須
ディスクの暗号化
19 / 24
• AESを使った暗号化方式の一つ
• データユニット(e.g., 512byte)単位の暗号化
• BitlockerやFileVault2, dm-cryptなどで利用されている
• 2個の秘密鍵𝐾1, 𝐾2とtweak Tを使う
• 128bit AESなら合計256bitの秘密鍵
• Tはデータの位置などを表す数値で繰り返し使うことを想定
• 平文サイズ=暗号文サイズが望ましい(ナンスやIV無し)
• 注意
• 𝐾1, 𝐾2とTが固定なら同じユニットを暗号化すると同じ暗号文
• 暗号文の改竄は考慮しない
• 暗号利用モード XTS の安全性に関する調査及び評価
• https://www.cryptrec.go.jp/exreport/cryptrec-ex-2801-2018.pdf
• CBCモードよりは高い安全性
XTS-AES
20 / 24
• データブロックをn個のブロックに分割
• 𝑆𝑖 ≔ 𝐸𝑛𝑐 𝐾1, 𝑇 ⊗α𝑖 ; ⊗は拡大体における演算(次回以降)
XTS-AESの暗号化
21 / 24
• SSD・HDDをハードウェアで自動的暗号化
• TCG(Trusted Computing Group)による標準規格化Opal
• 利点
• 扱いが容易
• CPUのリソースを消費しない
• 欠点
• 電源投入中の秘密鍵を狙った攻撃の可能性
• Self-Encrypting SSDs Vulnerable to Attack, Microsoft Warns
• https://petri.com/self-encrypting-ssds-vulnerable-to-attack-
microsoft-warns (2018)
• 今は改良されてる?
自己暗号化ドライブ
22 / 24
• ワンタイムパッド
• m=1010をs=0101で暗号化Enc(s, m) = 0101⊕1010=1111
• 暗号文の特定のビットを反転させると対応する平文のビット
が反転する
• 平文が0 or 1と分かっているなら反対の数値にできる
• ストリーム暗号やブロック暗号のCTRモードも同様
• CBCモードの先頭ブロックもIVを反転させると同様の攻撃
暗号文の改竄攻撃
23 / 24
• これならOK?
• 暗号文が平文の情報を漏らさない(強秘匿性)
• 改竄対策もしている
• 攻撃者が暗号文を繰り返し送ると?
• データに通し番号や時刻情報などの識別子をいれて区別する
リプレイ攻撃
×
24 / 24

暗認本読書会4