...

暗号モジュールの 暗号アルゴリズム実装試験セミナー

by user

on
Category: Documents
246

views

Report

Comments

Transcript

暗号モジュールの 暗号アルゴリズム実装試験セミナー
暗号モジュールの
暗号アルゴリズム実装試験セミナー
2008年2月20日
独立行政法人 情報処理推進機構
セキュリティセンタ−
情報セキュリティ認証室
1
セミナー構成
• 1部 概要(13:30∼14:20)
– 暗号アルゴリズム実装試験の概要
– 暗号アルゴリズム及び試験内容の説明
• AES
• 2部 RSA(14:30∼15:30)
– 暗号アルゴリズム及び試験内容の説明
• RSA-OAEP
• RSA-PSS
• 3部 擬似乱数生成器(15:40∼16:30)
– 暗号アルゴリズムの説明
• Hash_DRBG (NIST SP800-90)について
– 質疑応答
2
暗号アルゴリズム実装試験の概要
暗号アルゴリズム実装試験とは
•
試験目的:暗号モジュールに承認されたセキュリティ機能が適正に
実装されていることを確認。
•
試験対象:暗号モジュールに実装された承認されたセキュリティ機能。
•
試験方法:暗号アルゴリズム実装試験ツールJCATT®を使用。
(ただし, JCATTがサポートしていないセキュリティ機能は
ベンダによる自己確認)
JCATT®:
Japan Cryptographic Algorithm implementation Testing Tool
3
JCMVPで承認されたセキュリティ機能
技術分類
公開鍵暗号
共通鍵暗号
その他
暗号名称
署名
DSA, ECDSA, RSASSA-PKCS1-v1_5, RSASSA-PSS
守秘
RSA-OAEP, RSAES-PKCS1-v1_5
鍵確立
DH, ECDH, PSEC-KEM
64ビットブロック暗号
CIPHERUNICORN-E, Hierocrypt-L1, MISTY1, 3-key Triple DES
128ビットブロック暗号
AES, Camellia, CIPHERUNICORN-A,
Hierocrypt-3, SC2000
ストリーム暗号
MUGI, MULTI-S01, 128-bit RC4
ハッシュ関数
RIPEMD-160, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
メッセージ認証
CCM, CMAC, HMAC-SHA-1, HMAC-SHA-224, HMAC-SHA-256,
HMAC-SHA-384, HMAC-SHA-512
擬似乱数生成系
・ ISO/IEC 18031( Hash_DRBG, CTR_DRBG, OFB_DRBG )
・ NIST SP800-90(Hash_DRBG, HMAC_DRBG, CTR_DRBG)
・ NIST-Recommended Random Number Generator Based on ANSI
X9.31 Appendix A.2.4 Using the 3-key Triple DES and AES Algorithms
・PRNG based on SHA-1 for general purpose in FIPS 186-2
(+ change notice 1) Appendix 3.1
・PRNG based on SHA-1 for general purpose in FIPS 186-2
(+ change notice 1) revised Appendix 3.1
・PRNG based on SHA-1 in ANSI X9.42-2001 Annex C.1
注: 電子政府推奨暗号リストに記載されたセキュリティ機能は太字で表示。ただし, 電子政府推奨暗号リストに記載された3種類の擬似乱数生成系は,
JIS X 19790に基づく暗号モジュール認証ではJIS X 19790の規定により承認されない乱数生成系となります。
4
暗号アルゴリズム実装試験の位置付け
・暗号モジュール試験の一部として実施
申請者
暗号モジュールの
ベンダ, 供給者など
暗号モジュール
暗号アルゴリズム
実装
認証報告書
暗号モジュール
認証書
ソースコード
FSM
VEドキュメント
ブロック図
セキュリティポリシ
認証機関
試験機関
暗号アルゴリズム
確認書
独立行政法人
情報処理推進機構
暗号モジュール
認証
暗号アルゴリズム
確認
暗号アルゴリズム
実装試験報告書
セキュリティポリシ
暗号モジュール
試験報告書
運用ガイダンス
暗号アルゴリズム
実装試験 JCATT
試験方法
セキュリティ
要件
暗号モジュール
試験
5
暗号アルゴリズム実装試験フロー
ベンダ
・全ての動作環境
(OS)と暗号アルゴ
リズム指定
・回答ファイル作成
試験機関
・質問ファイル,
質問ファイル
回答ファイル
OK/NG
・立会い試験
認証機関
正解ファイル作成
・回答ファイルと
正解ファイルの照合
ツールで判定
・全てOK
・試験報告書作成
・暗号アルゴリズム
確認書作成
6
暗号アルゴリズム実装試験ツール試験項目
1.
署名
–
DSA, ECDSA
ドメインパラメータ生成機能試験, ドメインパラメータ検証機能試験
鍵ペア生成機能試験, 署名生成機能試験, 署名検証機能試験
–
RSASSA-PKCS1-V1_5, RSA-PSS
鍵ペア生成機能試験, 署名生成機能試験, 署名検証機能試験
2.
守秘
–
RSA-OAEP, RSAES-PKCS1-V1_5
鍵ペア生成機能試験, 暗号化機能試験, 復号機能試験
3.
鍵確立
–
DH, ECDH
ドメインパラメータ生成機能試験, ドメインパラメータ検証機能試験
鍵ペア生成機能試験, 公開鍵検証機能試験, 鍵共有機能試験
–
PSEC-KEM
鍵ペア生成機能試験, セッション鍵暗号化機能試験, セッション鍵復号機能試験
※各暗号アルゴリズム確認書を発行する条件は,
下線付きの試験対象機能を少なくとも1つ実装し,
暗号アルゴリズム実装試験に合格することとする。
7
暗号アルゴリズム実装試験ツール試験項目
4.
共通鍵暗号
–
CIPHERUNICORN-E, Hierocrypt-L1, MISTY1, 3-key Triple DES,
AES, Camellia, CIPHERUNICORN-A, Hierocrypt-3, SC2000
種々の平文(暗号文)に対する既知入出力試験, 種々の鍵に対する既知入出力試
験, マルチブロックメッセージ試験, モンテカルロ試験, Sbox既知入出力試験
5.
ストリーム暗号
–
MUGI
種々の鍵に対する既知入出力試験, モンテカルロ試験
–
MULTI-S01, 128-bit RC4
種々の平文(暗号文)に対する既知入出力試験, 種々の鍵に対する既知入出力試
験, モンテカルロ試験
6.
ハッシュ関数
–
RIPEMD-160, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
短いメッセージに対する試験, 選択された長いメッセージに対する試験,
擬似ランダムメッセージに対する試験
8
暗号アルゴリズム実装試験ツール試験項目
7.
メッセージ認証
–
CCM , CMAC, HMAC-SHA-1, HMAC-SHA-224, HMAC-SHA-256,
HMAC-SHA-384, HMAC-SHA-512
短いメッセージに対する試験, 選択された長いメッセージに対する試験,
擬似ランダムメッセージに対する試験
8.
擬似乱数生成関数
–
PRNG based on SHA-1 for general purpose in FIPS 186-2 (+ change
notice 1) Appendix 3.1,
PRNG based on SHA-1 for general purpose in FIPS 186-2 (+ change
notice 1) revised Appendix 3.1,
PRNG based on SHA-1 in ANSI X9.42-2001 Annex C.1,
Hash_DRBG, CTR_DRBG and OFB_DRBG in ISO/IEC 18031,
NIST SP800-90(Hash_DRBG, HMAC_DRBG, CTR_DRBG),
NIST-Recommended Random Number Generator Based on ANSI X9.31
Appendix A.2.4 Using the 3-key Triple DES and AES Algorithms
種々のシードに対する試験, モンテカルロ試験
参考:暗号アルゴリズム試験仕様書(2006年度版)
試験方法及びファイルフォーマット仕様書が記載されています。
– http://www.ipa.go.jp/security/fy18/development/jcatt/index.html
9
JCATTで現在試験できないセキュリティ機能
1.
共通鍵暗号
–
CTRモード
カウンタが内部インクリメンタルカウンタ以外の実装
⇒ ベンダ自己確認
2.
擬似乱数生成器
–
Hash_DRBG, HMAC_DRBG, CTR_DRBG(NIST SP800-90)
⇒ ベンダ自己確認
3.
鍵共有
–
DH
ASN.1に基づく鍵導出関数を使用したもの。
⇒ ベンダ自己確認
DRBG: Deterministic Random Bit Generator。 決定論的乱数ビット列生成器。
DH: Diffie-Hellman
ASN.1: Abstract Syntax Notation One, 抽象構文記法1。情報の構造定義の言語 10
。
共通鍵暗号:AES
• AES (Advanced Encryption Standard)
– 仕様:FIPS PUB 197
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
– ブロック長:128-bit
– 鍵長:128, 192, 256-bit
11
共通鍵暗号:AES
• 暗号化/復号
– 入力
• 平文/暗号文(ブロック長:128-bit)
• 鍵(鍵長:128, 192, 256-bit)
– 出力
• 暗号文/平文(ブロック長:128-bit)
– 処理
• 128-bitの平文・暗号文を8-bitの行列要素とした4*(Nb(=4))行列
表示して, 演算を行う。
• 拡大鍵
1ワード=32-bitとして, Nb *(Nr+1)ワードの拡大鍵を生成して使
用する。ここで鍵長128, 192, 256-bit に対応して, Nr=10,12,14
である。
(Nr+1)回のXORを必要とする。
12
AESアルゴリズム -暗号化• 暗号化処理の流れ
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
暗号文
平文
拡大鍵
byte state[4,Nb]
//内部変数(4行, Nb列の行列)
Nb:4,
Nr:10,12,14
for 128, 192, 256-bit key,
w:拡大鍵, 要素数Nb *(Nr+1)
state = in
AddRoundKey(state, w[0, Nb-1]) //
SubBytes:行列要素の置換
for round = 1 step 1 to Nr–1
ShiftRows:
SubBytes(state) //
行単位の左シフト処理
ShiftRows(state) //
MixColumns(state) //
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
end for
SubBytes(state)
ShiftRows(state)
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
out = state
end
MixColumns:
列ベクトル単位のデータの変換
AddRoundKey:
列ベクトルと拡大鍵wとのXOR演算
13
AESアルゴリズム -復号• 復号処理の流れ
InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
暗号文
平文
拡大鍵
begin
byte state[4,Nb]
//内部変数(4行, Nb列の行列)
Nb:4,
Nr:10,12,14
for 128, 192, 256-bit key,
w:拡大鍵, 要素数Nb *(Nr+1)
state = in
AddRoundKey(state, w[Nr*Nb,(Nr+1)*Nb-1]) //
InvShiftRows:
行単位の右シフト処理
for round = Nr-1 step -1 downto 1
InvShiftRows(state) //
InvSubBytes:行列要素の置換
InvSubBytes(state) //
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
InvMixColumns(state) //
end for
InvShiftRows(state)
InvSubBytes(state)
AddRoundKey(state, w[0, Nb-1])
out = state
end
InvMixColumns:
列ベクトル単位のデータの変換
AddRoundKey:
列ベクトルと拡大鍵wとのXOR演算
14
共通鍵暗号:利用モード
• 利用モード
– ブロック長よりも長いメッセージを暗号化する際の
メカニズム
– 仕様:SP800-38A
• JCATTでAESと組合わせて試験できる
利用モード
–
–
–
–
–
ECB (Electronic Codebook)モード
CBC (Cipher Block Chaining)モード
CFB (Cipher Feedback)モード
OFB (Output Feedback)モード
CTR (Counter)モード
15
ECBモード
•
•
動作:各ブロックを独立に暗号化又は復号
特徴:シンプル, 並列処理可能
復号
暗号化
平文
ブロック1
暗号化
暗号文
ブロック1
・・・
平文
ブロックn
暗号文
ブロック1
暗号化
復号
暗号文
ブロックn
平文
ブロック1
暗号文
ブロックn
・・・
復号
平文
ブロックn
16
CBCモード
•
•
動作:直前の暗号文ブロックと平文ブロックとのXORを演算してから暗号化。
直前の暗号文ブロックと復号した暗号文ブロックのXORを演算して復号。
特徴:復号のみ並列処理可能
復号
暗号化
平文
ブロック1
平文
ブロック2
平文
ブロック3
暗号化
暗号化
暗号化
暗号文
ブロック1
暗号文
ブロック2
暗号文
ブロック3
初期化
ベクトル(IV)
暗号文
ブロック1
暗号文
ブロック2
暗号文
ブロック3
復号
復号
復号
平文
ブロック1
平文
ブロック2
平文
ブロック3
初期化
ベクトル(IV)
17
CFBモード
•
•
動作:直前の暗号文ブロックを暗号化して入力ブロックとのXORを演算。
特徴:復号のみ並列処理可能
復号
暗号化
初期化
ベクトル(IV)
初期化
ベクトル(IV)
暗号化
暗号化
暗号化
暗号化
暗号文
ブロック1
暗号文
ブロック1
暗号文
ブロック2
暗号文
ブロック3
平文
平文
平文
ブロック1
ブロック2
ブロック3
暗号化
暗号文
ブロック2
平文
ブロック1
暗号化
暗号文
ブロック3
平文
ブロック2
平文
ブロック3
18
OFBモード
•
•
動作:初期化ベクトル(IV)を暗号化して入力ブロックとのXORを演算。
特徴:暗号化と復号が同じ構造, 前準備可能
復号
暗号化
初期化
ベクトル(IV)
初期化
ベクトル(IV)
暗号化
暗号化
暗号化
暗号化
暗号化
暗号化
暗号文
ブロック1
暗号文
ブロック2
暗号文
ブロック3
平文
ブロック1
平文
ブロック2
平文
ブロック3
平文
ブロック1
平文
ブロック2
平文
ブロック3
暗号文
ブロック1
暗号文
ブロック2
暗号文
ブロック3
19
CTRモード
•
•
動作:カウンタブロックを暗号化して入力ブロックとのXORを演算。
特徴:暗号化と復号が同じ構造, 前準備可能, 並列処理可能
復号
暗号化
カウンタ
初期化
外部カウンタ1
外部カウンタ2
外部カウンタ3
外部カウンタ1
外部カウンタ2
外部カウンタ3
内部カウンタ1
内部カウンタ2
内部カウンタ3
内部カウンタ1
内部カウンタ2
内部カウンタ3
暗号化
暗号化
暗号化
暗号文
ブロック1
暗号文
ブロック2
暗号文
ブロック3
平文
ブロック1
平文
ブロック2
平文
ブロック3
カウンタ
初期化
暗号化
暗号化
暗号化
平文
ブロック1
平文
ブロック2
平文
ブロック3
暗号文
ブロック1
暗号文
ブロック2
暗号文
ブロック3
20
AES暗号アルゴリズム実装試験項目
• 既知入出力試験
– 種々の平文(暗号文)に対する既知入出力試験
(KAT-Text)
– 種々の鍵に対する既知入出力試験(KAT-key)
– GFSbox 既知入出力試験(KAT-GFSbox)
– KeySbox 既知入出力試験(KAT-KeySbox)
• マルチブロックメッセージ試験(MMT)
• モンテカルロ試験(MCT)
参考:The Advanced Encryption Standard Algorithm Validation Suite
– http://csrc.nist.gov/groups/STM/cavp/documents/aes/AESAVS.pdf
21
既知入出力試験 (KAT-Text)
• 種々の平文(暗号文)に
対する既知入出力試
験(KAT-Text)
– 1個の鍵
– 平文(又は暗号文) を
様々に変化させ,暗号
文(または平文) が期待
値と一致するかどうかを
試験する。
※分かりやすくするために空白を追加
• 質問ファイル抜粋
⇒鍵長。
[Bitlength of Key]
128
⇒暗号鍵。
[Key for KAT-Text]
00000000 00000000 00000000 00000000
[Plaintext for KAT-Text]
⇒平文。
80000000 00000000 00000000 00000000
C0000000 00000000 00000000 00000000
E0000000 00000000 00000000 00000000
F0000000 00000000 00000000 00000000
F8000000 00000000 00000000 00000000
FC000000 00000000 00000000 00000000
FE000000 00000000 00000000 00000000
FF000000 00000000 00000000 00000000
FF800000 00000000 00000000 00000000
FFC00000 00000000 00000000 00000000
FFE00000 00000000 00000000 00000000
FFF00000 00000000 00000000 00000000
--省略-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
22
既知入出力試験 (KAT-Key)
• 種々の鍵に対する既知入出 • 質問ファイル抜粋
力試験(KAT-Key)
[Plaintext for KAT-Key]
– 1個の平文(又は暗号文)
– 鍵を様々に変化させ,暗号文
(または平文) が期待値と一致
するかどうかを試験する。
※分かりやすくするために空白を追加
⇒平文。
00000000
[Key for
80000000
C0000000
E0000000
F0000000
F8000000
FC000000
FE000000
FF000000
FF800000
FFC00000
FFE00000
FFF00000
00000000 00000000 00000000
KAT-Key]
00000000 00000000 ⇒暗号鍵。
00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
00000000 00000000 00000000
--省略-FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
23
既知入出力試験 (KAT-GFSbox)
• GFSboxに対する既知
入出力試験
(KAT-GFSbox)
– 1個の鍵
– Sboxテーブルのエント
リーを全て1回以上引く
ように作成された複数の
平文(又は暗号文) を
使って,暗号文(または平
文) が期待値と一致する
かどうかを試験する。
• 質問ファイル抜粋
⇒暗号鍵。
[Key for KAT-GFSbox]
00000000 00000000 00000000 00000000
[Plaintext for KAT-GFSbox]
⇒平文。
F34481EC 3CC627BA CD5DC3FB 08F273E6
9798C464 0BAD75C7 C3227DB9 10174E72
96AB5C2F F612D9DF AAE8C31F 30C42168
6A118A87 4519E64E 9963798A 503F1D35
CB9FCEEC 81286CA3 E989BD97 9B0CB284
B26AEB18 74E47CA8 358FF223 78F09144
58C8E00B 2631686D 54EAB84B 91F0ACA1
[IV for KAT-GFSbox] ⇒初期化ベクトル。
00000000 00000000 00000000 00000000
※分かりやすくするために空白を追加
24
既知入出力試験 (KAT-keySbox)
• KeySboxに対する
既知入出力試験
(KAT-KeySbox)
– 1個の平文(又は暗号文)
– Sboxテーブルのエント
リーを全て1回以上引くよ
うに作成された複数の鍵
を使って,暗号文(または
平文) が期待値と一致す
るかどうかを試験する。
• 質問ファイル抜粋
[Plaintext for KAT-KeySbox] ⇒平文。
00000000000000000000000000000000
[IV for KAT-KeySbox]
⇒初期化ベクトル。
00000000000000000000000000000000
[Key for KAT-KeySbox]
⇒暗号鍵。
10A58869D74BE5A374CF867CFB473859
CAEA65CDBB75E9169ECD22EBE6E54675
A2E2FA9BAF7D20822CA9F0542F764A41
B6364AC4E1DE1E285EAF144A2415F7A0
64CF9C7ABC50B888AF65F49D521944B2
47D6742EEFCC0465DC96355E851B64D9
3EB39790678C56BEE34BBCDECCF6CDB5
64110A924F0743D500CCADAE72C13427
−−省略−−
E234CDCA2606B81F29408D5F6DA21206
13237C49074A3DA078DC1D828BB78C6F
3071A2A48FE6CBD04F1A129098E308F8
90F42EC0F68385F2FFC5DFC03A654DCE
FEBD9A24D8B65C1C787D50A4ED3619A9
25
マルチブロックメッセージ試験(MMT)
• MMTでは, ランダムに与えられた複数ブロック分の平文(ま
たは暗号文),IV,カウンタに対する暗号文(または平文) が
期待値と一致するかどうか検証を行う。
ただし,MMT ブロック数の規定値は10。
• 質問ファイル抜粋
[Number of Blocks for MMT]
⇒ブロック数。
10
[Key for MMT]
⇒暗号鍵。
7ae100eaafe60081b7ccbd1f34d7173b
[IV for MMT]
⇒初期化ベクトル(IV)。
ECF8A3A30533EF9967519EC782EBA8F7
[Plaintext for MMT]
⇒平文。
2807d57da0f660670e65b1fac64ba1b4b912eabd9fc9ddee65cc90ac864649a54cbe4ab9950167
3439633908c58531c69b64ca530e68dcf7ad363a328255e0101dccea7e4cbaffae712c3475328e
a845a9dce495c8b0bcd8c77b083103d482fdbc7c48d8ca524ec14bc05404a68f35026d7de12e0a
5765717e4c853b918dc98db570655124849d89e985b412e55af9a850ea11094b64364e41528c3d
6255782a
26
モンテカルロ試験(MCT)
•
ランダムに与えられた1 ブロック分の平文(または暗号文),鍵,IV(ECB
モードを除く)に対して,指定された利用モードで計算される暗号文 (また
は平文)が期待値と一致するかどうか検証を行う。
•MCT擬似コード(ECBモード/暗号化)
Key[0] = Key // 初期鍵
PT = PT_0 // 初期平文
for (i=0; i<outerloop; i++){
for (j=0; j<innerloop; j++){
// ECB モード暗号化
CT[j] = Encryption(Key[i], PT)
PT = CT[j]
}
Output CT[innerloop-1] ⇒出力
If ( 鍵長==128 ビット){
Key[i+1] = Key[i] xor CT[innerloop-1]
}
//--鍵長が192及び256 ビットの
// 処理については省略--
•質問ファイル抜粋
[Number of Inner-loop for MCT]
1000
[Number of Outer-loop for MCT]
100
[Initial Key for MCT]
08152CDDCEDCBBE8909A0DE520C80D3D
[Initial Plaintext for MCT]
2D8A66FDC53DCEE76A50E16B9365EBC0
ブロック長, 各モード, 暗号化・復号,
鍵長によって対応するMCT擬似コード
は異なる。
暗号アルゴリズム試験仕様書を参照。
}
27
AES暗号化:
質問ファイル及び回答ファイルのフォーマット(1/2)
質問ファイルフォーマット
機能
タグ
暗号
化
回答ファイルフォーマット
データ
タグ
データ
[Algorithm Name]
AES(固定)
[Algorithm Name]
AES(固定)
[Function Name]
Encryption(固定)
[Function Name]
Encryption(固定)
[Modes of Operation]
ECB/CBC/OFB/CFB1/CFB8/CFB128/CTR
[Modes of Operation]
ECB/CBC/OFB/CFB1/CFB8/CFB128/CTR
[Bitlength of Key]
鍵のビット長;128/192/256
[Bitlength of Key]
鍵のビット長;128/192/256
[Bitlength of Counter]
カウンタのビット幅(CTRモードのみ)
[Bitlength of Counter]
カウンタのビット幅(CTRモードのみ)
[Key for KAT-Text]
KAT-TEXT用鍵
[Key for KAT-Text]
KAT-TEXT用鍵
[Plaintext for KAT-Text]
KAT-TEXT用平文
[Plaintext for KAT-Text]
KAT-TEXT用平文
[IV for KAT-Text]
KAT-TEXT用IV
[IV for KAT-Text]
KAT-TEXT用IV
[Counter for KAT-Text]
KAT-TEXT用カウンタ(CTRモードのみ)
[Counter for KAT-Text]
KAT-TEXT用カウンタ(CTRモードのみ)
[Ciphertext for KAT-Text]
上記パラメータに対する暗号文
[Plaintext for KAT-Key]
KAT-Key用平文
[IV for KAT-Key]
KAT-Key用IV
KAT-TEXT
[Plaintext for KAT-Key]
KAT-Key用平文
[IV for KAT-Key]
KAT-Key用IV
[Counter for KAT-Key]
KAT-Key用カウンタ(CTRモードのみ)
[Counter for KAT-Key]
KAT-Key用カウンタ(CTRモードのみ)
[Key for KAT-Key]
KAT-Key用鍵
[Key for KAT-Key]
KAT-Key用鍵
[Ciphertext for KAT-Key]
上記パラメータに対する暗号文
[Key for KAT-GFSbox]
KAT-GFSbox用鍵
[Plaintext for KAT-GFSBox]
KAT-GFSbox用平文
[IV for KAT-GFSbox]
KAT-GFSbox用IV
[Counter for KAT-GFSbox]
KAT-GFSbox用カウンタ(CTRモードのみ)
[Ciphertext for KAT-GFSbox]
上記パラメータに対する暗号文
KAT-Key
[Key for KAT-GFSbox]
KAT-GFSbox用鍵
[Plaintext for KAT-GFSBox]
KAT-GFSbox用平文
[IV for KAT-GFSbox]
KAT-GFSbox用IV
[Counter for KAT-GFSbox]
KAT-GFSbox用カウンタ(CTRモードのみ)
KATGFSbox
28
AES暗号化:
質問ファイル及び回答ファイルのフォーマット(2/2)
質問ファイルフォーマット
回答ファイルフォーマット
機能
タグ
[Plaintext for KAT-KeySBox]
タグ
KAT-KeySbox用平文
[Counter for KAT-KeySbox]
KATKAT-KeySbox用IV
KeySbox
KAT-KeySbox用カウンタ(CTRモードのみ)
[Key for KAT-KeySbox]
KAT-KeySbox用鍵
[IV for KAT-KeySbox]
暗号
化
データ
データ
[Plaintext for KAT-KeySBox]
KAT-KeySbox用平文
[IV for KAT-KeySbox]
KAT-KeySbox用IV
[Counter for KAT-KeySbox]
KAT-KeySbox用カウンタ(CTRモードのみ)
[Key for KAT-KeySbox]
KAT-KeySbox用鍵
[Ciphertext for KAT-KeySbox]
上記パラメータに対する暗号文
[Number of Blocks for MMT]
MMTのブロック数
[Key for MMT]
MMT用鍵
[Number of Blocks for MMT]
MMTのブロック数
[Key for MMT]
MMT用鍵
[IV for MMT]
MMT用IV
[IV for MMT]
MMT用IV
[Initial Value of Counter for MMT]
MMT用カウンタ初期値(CTRモードのみ)
[Initial Value of Counter for MMT]
MMT用カウンタ初期値(CTRモードのみ)
[Plaintext for MMT]
MMT用平文
[Plaintext for MMT]
MMT用平文
[Ciphertext for MMT]
上記パラメータに対する暗号文
[Number of Inner-loop for MCT]
MCTの内側ループの回数
[Number of Outer-loop for MCT]
MCTの外側ループの回数
MMT
[Number of Inner-loop for MCT]
MCTの内側ループの回数
[Number of Outer-loop for MCT]
MCTの外側ループの回数
[Initial Key for MCT]
MCT用鍵の初期値
[Initial Key for MCT]
MCT用鍵の初期値
[Initial Plaintext for MCT]
MCT用平文の初期値
[Initial Plaintext for MCT]
MCT用平文の初期値
[Initial IV for MCT]
MCT用IVの初期値
[Initial IV for MCT]
MCT用IVの初期値
[Initial Value of Counter for MCT]
MCT用カウンタ初期値(CTRモードのみ)
[Initial Value of Counter for MCT]
MCT用カウンタ初期値(CTRモードのみ)
[Ciphertext for MCT]
上記パラメータに対する暗号文
MCT
29
AES復号:
質問ファイル及び回答ファイルのフォーマット(1/2)
質問ファイルフォーマット
機能
タグ
復号
回答ファイルフォーマット
データ
タグ
データ
[Algorithm Name]
AES(固定)
[Algorithm Name]
AES(固定)
[Function Name]
Decryption(固定)
[Function Name]
Decryption(固定)
[Modes of Operation]
ECB/CBC/OFB/CFB1/CFB8/CFB128/CTR
[Modes of Operation]
ECB/CBC/OFB/CFB1/CFB8/CFB128/CTR
[Bitlength of Key]
鍵のビット長;128/192/256
[Bitlength of Key]
鍵のビット長;128/192/256
[Bitlength of Counter]
カウンタのビット幅(CTRモードのみ)
[Bitlength of Counter]
カウンタのビット幅(CTRモードのみ)
[Key for KAT-Text]
KAT-TEXT用鍵
[Key for KAT-Text]
KAT-TEXT用鍵
[Ciphertext for KAT-Text]
KAT-TEXT用暗号文
[Ciphertext for KAT-Text]
KAT-TEXT用暗号文
[IV for KAT-Text]
KAT-TEXT用IV
[IV for KAT-Text]
KAT-TEXT用IV
[Counter for KAT-Text]
KAT-TEXT用カウンタ(CTRモードのみ)
[Counter for KAT-Text]
KAT-TEXT用カウンタ(CTRモードのみ)
[Plaintext for KAT-Text]
上記パラメータに対する平文
[Ciphertext for KAT-Key]
KAT-Key用暗号文
[IV for KAT-Key]
KAT-Key用IV
KAT-TEXT
[Ciphertext for KAT-Key]
KAT-Key用暗号文
[IV for KAT-Key]
KAT-Key用IV
[Counter for KAT-Key]
KAT-Key用カウンタ(CTRモードのみ)
[Counter for KAT-Key]
KAT-Key用カウンタ(CTRモードのみ)
[Key for KAT-Key]
KAT-Key用鍵
[Key for KAT-Key]
KAT-Key用鍵
[Plaintext for KAT-Key]
上記パラメータに対する平文
[Key for KAT-GFSbox]
KAT-GFSbox用鍵
[Ciphertext for KAT-GFSBox]
KAT-GFSbox用暗号文
[IV for KAT-GFSbox]
KAT-GFSbox用IV
[Counter for KAT-GFSbox]
KAT-GFSbox用カウンタ(CTRモードのみ)
[Plaintext for KAT-GFSbox]
上記パラメータに対する平文
KAT-Key
[Key for KAT-GFSbox]
KAT-GFSbox用鍵
[Ciphertext for KAT-GFSBox]
KAT-GFSbox用暗号文
[IV for KAT-GFSbox]
KAT-GFSbox用IV
[Counter for KAT-GFSbox]
KAT-GFSbox用カウンタ(CTRモードのみ)
KATGFSbox
30
AES復号:
質問ファイル及び回答ファイルのフォーマット(2/2)
質問ファイルフォーマット
機能
タグ
[Ciphertext for KAT-KeySBox]
回答ファイルフォーマット
データ
タグ
[Ciphertext for KAT-KeySBox]
KAT-KeySbox用暗号文
[IV for KAT-KeySbox]
KAT-KeySbox用IV
[Counter for KAT-KeySbox]
KATKAT-KeySbox用IV
KeySbox
KAT-KeySbox用カウンタ(CTRモードのみ)
[Counter for KAT-KeySbox]
KAT-KeySbox用カウンタ(CTRモードの
み)
[Key for KAT-KeySbox]
KAT-KeySbox用鍵
[Key for KAT-KeySbox]
KAT-KeySbox用鍵
[Plaintext for KAT-KeySbox]
上記パラメータに対する平文
[Number of Blocks for MMT]
MMTのブロック数
[Key for MMT]
MMT用鍵
[IV for KAT-KeySbox]
KAT-KeySbox用暗号文
データ
[Number of Blocks for MMT]
MMTのブロック数
[Key for MMT]
MMT用鍵
[IV for MMT]
MMT用IV
[IV for MMT]
MMT用IV
[Initial Value of Counter for MMT]
MMT用カウンタ初期値(CTRモードのみ)
[Initial Value of Counter for
MMT]
MMT用カウンタ初期値(CTRモードのみ)
[Ciphertext for MMT]
MMT用暗号文
[Ciphertext for MMT]
MMT用暗号文
[Plaintext for MMT]
上記パラメータに対する平文
[Number of Inner-loop for MCT]
MCTの内側ループの回数
[Number of Outer-loop for MCT]
MCTの外側ループの回数
MMT
復号
[Number of Inner-loop for MCT]
MCTの内側ループの回数
[Number of Outer-loop for MCT]
MCTの外側ループの回数
[Initial Key for MCT]
MCT用鍵の初期値
[Initial Key for MCT]
MCT用鍵の初期値
[Initial Ciphertext for MCT]
MCT用暗号文の初期値
[Initial Ciphertext for MCT]
MCT用暗号文の初期値
[Initial IV for MCT]
MCT用IVの初期値
[Initial IV for MCT]
MCT用IVの初期値
[Initial Value of Counter for MCT]
MCT用カウンタ初期値(CTRモードのみ)
[Initial Value of Counter for MCT]
MCT用カウンタ初期値(CTRモードのみ)
[Plaintext for MCT]
上記パラメータに対する平文
MCT
31
AES暗号アルゴリズム実装試験の
申し込みに必要な情報
• 機能
– 暗号化,復号
• 利用モード
– ECB,CBC,CFB,OFB,CTR
• 鍵長
– 128,192,256
• カウンタ種別
– 内部カウンタ,外部カウンタ
質問ファイル数
機能
•暗号化
•復号
鍵長
利用モード
X
•ECB (Electronic Codebook),
•CBC (Cipher Block Chaining),
•CFB (Cipher Feedback),
•OFB (Output Feedback),
•CTR (Counter)
•128-bit
X
•192-bit
•256-bit
32
暗号アルゴリズム確認書の
確認条件記載例
• 確認条件記載項目
– 利用モード(ECB/CBC/CFB/OFB/CTR)
– 機能(e:暗号化, d:復号)
– 鍵長(128/192/256)
– その他
• CTRモードについては,
カウンタ種別(int:内部カウンタ, ext:外部カウンタ)
• 確認条件記載例
確認番号 暗号アルゴリズム
nnn
AES
確認条件
ECB(e/d;128,192,256),CBC(e/d;128,192,256),
CTR(int;128,192,256)
33
暗号モジュールの
暗号アルゴリズム実装試験セミナー
第2部:RSA
–守秘: RSA-OAEP
•暗号化/復号
–署名: RSA-PSS
•署名生成/署名検証
34
公開鍵暗号:RSA
• 守秘
– 公開鍵で暗号化
– プライベート鍵で復号
• 署名
– プライベート鍵で署名生成
– 公開鍵で署名検証
35
公開鍵暗号:RSA
• RSAパラメータ
• 性質
– オイラーのφ関数
(n) :1, 2, …, nまでの自然数の
– 素数
• p,q
うち, nと互いに素なものの個数。
(n)
– 公開鍵
– gcd(e, ( n))
• n(=pq):法
• e:指数
( p 1)(q 1)
1
– プライベート鍵
• CRTなし
– プライベート鍵
e d
• CRTなし
• CRTあり
1(mod (n))
e dP 1(mod( p 1))
e dQ 1(mod(q 1))
q qInv 1(mod p)
– d:秘密指数
• CRTあり
– p, q, dP, dQ, qInv
※CRT:Chinese Remainder Theorem
※gcd:greatest common divisor
( p) (q)
最大公約数
・合同式
a
b(mod m)
→ a mx b
36
公開鍵暗号:RSA
• 承認されたセキュリティ機能
– 守秘
• RSA-OAEP
←こちらについて説明
• RSAES-PKCS1-v1_5
– 署名
• RSASSA-PKCS1-v1_5
• RSA-PSS
←こちらについて説明
– 仕様
PKCS#1 v2.1: RSA Cryptography Standard, June
14, 2002.
ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v21.pdf
37
公開鍵暗号:RSA <守秘>
• 暗号化
受信者の公開鍵を用いる。
– メッセージm
• n 未満の正の整数。
– 暗号文c
e
• c m mod n
• 復号
受信者のプライベート鍵を用いて復号する
– 平文 m’
• m' c d (mod n)
38
公開鍵暗号:RSA-OAEP 暗号化(1)
• RSA-OAEP
– 暗号化
• 内部で使用する関数
– Hash ハッシュ関数(ハッシュ関数の出力長は hLen (バイト))
SHA-1, SHA-256, SHA-384, SHA-512
– MGF マスク生成関数
• 入力
– (n, e) 受信者の公開鍵 (法 n の長さは k (バイト))
–M
暗号化したいメッセージ(長さは mLen (バイト))
–L
メッセージに関連したラベル (デフォルトで空文字)
• 出力
–C
暗号文(長さは k (バイト))
39
公開鍵暗号: RSA-OAEP 暗号化(2)
• 処理概要
公開鍵 メッセージ ラベル
(n,e)
M
L
1. 長さチェック
–
ラベル L の長さ制限(ハッシュ関数との関連)
mLen k 2hLen 2 ならば, エラー表示
2. メッセージの前処理
3. 暗号化処理
Hash
ハッシュ関数
MGF
マスク生成関数
4. 暗号文の出力
C
暗号文
40
公開鍵暗号: RSA-OAEP 暗号化(3)
•
処理概要
2. メッセージの前処理
MGF:入力文字列と
カウンタをハッシュ関数への
入力として用いて, 必要な
長さのバイト列を生成する。
凡例
•白背景・・・入力
•緑背景・・・中間
•青字・・・長さ
•丸枠・・・関数
擬似乱数生成器から
mLen
L
DB=
Hash
k-mLen-2hLen-2
lHash
PS
hLen
k-hLen-1
seed
MGF
1
MGF
EM= 00 maskedSeed
k
M
01
M
1
0x00で埋める
maskedDB
41
公開鍵暗号: RSA-OAEP 暗号化(4)
•
処理概要
3. 暗号化処理
公開鍵:
(n,e)
前頁より
EM
OS2IP
バイト列(仕様書中ではoctet stringsと表記)
EM(長さ k (バイト))を整数mに変換する
m
RSAEP
c
m e mod n の計算式に従い,
cを計算する。
c
I2OSP
暗号文:
整数cをバイト列C (長さ k (バイト))に
変換する
C
42
公開鍵暗号: RSA -マスク生成関数(1)• マスク生成関数(MGF:Mask Generation Function)
※ANSI X9.44に記載のものと同様
– 内部で使用する関数
• Hash ハッシュ関数(ハッシュ関数の出力長は hLen (バイト))
SHA-1, SHA-256, SHA-384, SHA-512
– 入力
• mgfSeed マスクを生成する元となるシード, バイト列
• maskLen 生成したいマスクの長さ(バイト単位), 最大232hLen。
– 出力
• mask 生成されたマスク。長さは maskLen (バイト)
43
公開鍵暗号: RSA -マスク生成関数(2)•
マスク生成関数(MGF:Mask Generation Function)
– 処理概要
1
1
整数からバイト列への変換
0
counter
I2OSP
I2OSP
mgfSeed
Hash
mgfSeed
4
I2OSP
mgfSeed
Hash
Hash
T1
Tm
T0
maskLen
mask
m
maskLen / hLen
1
hLen
44
公開鍵暗号: RSA-OAEP
暗号化機能試験(1)
• 試験項目
– 試験1
• JCATT ® が与えた公開鍵(n, e) および平文,ならびに指定され
たハッシュ関数およびマスク生成関数MGF およびラベルL に対
してIUT が生成した暗号文を,JCATT ® が復号した時に,もとの
平文に復号されること。
• 同じ平文,同じ公開鍵,同じラベル値に対して,複数(別途規定
する数) 暗号文を生成させた時,同じ暗号文が生成されないこと。
JCATT ® : Japan Cryptographic Algorithm Implementation Testing Tool,
暗号アルゴリズム実装試験ツール
IUT: Implementation Under Test, 試験対象実装
45
公開鍵暗号: RSA-OAEP
暗号化機能試験(2)
• 試験項目
– 試験2(任意で実施する試験)
• JCATT ®が与えた公開鍵(n, e),平文およびラベルL,ならびに指
定された擬似乱数生成関数,指定されたハッシュ関数およびマ
スク生成関数MGF と, 乱数シードに対して正しい暗号文をIUT
が生成すること。
– 試験3(任意で実施する試験)
• JCATT ®が与えた公開鍵(n, e),平文およびラベルL,ならびに指
定されたハッシュ関数,マスク生成関数MGF および中間値seed
対して正しい暗号文をIUT が生成すること。
46
公開鍵暗号: RSA-OAEP
暗号化機能試験(3)
• 申し込む際に必要な情報
– 公開鍵
• nのビット長
1024, 1536, 2048, 3072, 4096
• 指数eのタイプ選択
65537, ランダム
復号と
異なる部分
– 関数の選択
• 使用するハッシュ関数
SHA-1, SHA-256, SHA-384, SHA-512
• マスク生成関数(MGF)
ANSI X9.44 SHA-1, ANSI X9.44 SHA-256,
ANSI X9.44 SHA-384, ANSI X9.44 SHA-512
– 試験の選択
• 試験1, 試験2(擬似乱数生成関数の指定), 試験3
47
公開鍵暗号: RSA-OAEP
暗号化機能試験(4)
• 試験1の場合(質問ファイル抜粋)
[Bitlength of Modulus] ⇒法nのビット長。
1024
[Hash]
⇒ハッシュ関数:SHA-256
M_Hash_SHA256
[MGF]
⇒MGF:ANSI X9.44 SHA-256
M_MGF_ANSI944_SHA256
⇒法n。
[n]
C110E0F94823D8DAA43AF0E3DBF4264FB634F68E28951F504F
B0EF7757F68604D57D78ABB86F0066FA0228B5D2EE4B9E1618
5DAA127B5349042AB4C3AAEB300749A099B1A22449B7093256
EDCC6E38EC22F38CA9BC7D3CA21303B6F4F3E9A5877E0C5A33
16A70856B043554F84FDB2A19F22222BEA67DB6F62EB324236
4A1671
⇒公開鍵e=65537。
[e]
010001
[L]
[Bitlength of L]
0
⇒ラベルL, 長さ0。
[Seed S]
⇒試験2で
[Bitlength of Seed S]
使う。
0
[Bitlength of Plaintexts]
64
[Bitlength of Ss]
⇒試験3で使う。
0
[Number of Plaintexts]
10
⇒平文10個。
[Plaintexts]
28102857CDE5F494 64-bit。
CA0B68026018407B
63D5F4134B4EA3A8
275C6A859A88C972
3B9654EAF30279D2
A77953D4E837BE0E
982D2357B7B658FC
BD00584A65368C3C
E1280758E89A5C78
AD5C4702C515F57F
┌→同じ平文に対して
[Ss]
10個の暗号文を生成。
[Number of Ciphertexts for RGT]
10
48
公開鍵暗号: RSA-OAEP 復号(1)
• RSA-OAEP
– 復号
• 内部で使用する関数
– Hash ハッシュ関数(ハッシュ関数の出力長は hLen (バイト))
SHA-1, SHA-256, SHA-384, SHA-512
– MGF マスク生成関数
• 入力
–K
–C
–L
受信者のプライベート鍵 (法 n の長さは k (バイト))
復号したい暗号文(長さは k (バイト))
メッセージとの関連が検証されるラベル
• 出力
–M
メッセージ(長さは mLen (バイト))
49
公開鍵暗号: RSA-OAEP 復号(2)
• 処理概要
ラベル プライベート鍵 暗号文
L
K
C
1. 長さチェック
2. 復号処理
3. メッセージを取り出す処理
Hash
ハッシュ関数
MGF
マスク生成関数
4. メッセージを出力
メッセージ
M
50
公開鍵暗号: RSA-OAEP 復号(3)
•
処理概要
2. 復号処理
プライベート鍵: 暗号文
K
C
OS2IP
バイト列C(長さ k (バイト))を
整数cに変換する
c
RSADP
m
I2OSP
CRTなしの場合, 計算式
m c d mod n に従い,
mを計算する。
整数mをバイト列EM
(長さ k (バイト))に変換する
EM
51
公開鍵暗号: RSA-OAEP 復号(4)
•
処理概要
3. メッセージを取り出す処理
k
hLen
EM= Y
maskedSeed
MGF
1
L
seed
MGF
hLen
Hash
lHash
maskedDB
?
DB=
lHash’
1
PS
01
k-2hLen-1 k-mLen-2hLen-2
M
M
mLen
52
公開鍵暗号: RSA-OAEP
復号機能試験(1)
• 試験項目
– 与えられたプライベート鍵(n, d) または(p, q, dP, dQ,
qInv) と,与えられたラベルL と,指定されたハッシュ関数
及びマスク生成関数MGF と, 与えられた暗号文に対して,
もとの平文に復号できること。
– 与えられたプライベート鍵(n, d) または(p, q, dP, dQ,
qInv) と,与えられたラベルL と,指定されたハッシュ関数
及びマスク生成関数MGF と, 改竄された暗号文に対して
不正検出を正しく行うこと。
53
公開鍵暗号: RSA-OAEP
復号機能試験(2)
• 申し込む際に必要な情報
– プライベート鍵
• nのビット長
1024, 1536, 2048, 3072, 4096
• プライベート鍵のタイプ選択
CRTあり, CRTなし
暗号化と
異なる部分
– 関数の選択
• 使用するハッシュ関数
SHA-1, SHA-256, SHA-384, SHA-512
• マスク生成関数(MGF)
ANSI X9.44 SHA-1, ANSI X9.44 SHA-256,
ANSI X9.44 SHA-384, ANSI X9.44 SHA-512
54
公開鍵暗号: RSA-OAEP
復号機能試験(3)
• 質問ファイル抜粋
[Bitlength of Modulus]
⇒法nのビット長。
1024
[Hash]
⇒ハッシュ関数:SHA-256
M_Hash_SHA256
[MGF]
⇒MGF:ANSI X9.44 SHA-256
M_MGF_ANSI944_SHA256
[Secret Key Type]
⇒プライベート鍵:CRTなし。
TYPE2
[d]
⇒プライベート鍵d。
18DD6DB2FEEA48C616CE353F370C1AE896A0157EC8A817D
40E330D6125E75D80C5F798B0D6E1B313B79331B77BBB1E
EC3E6C8170709905B5310DA2E7439E6E7D2B26266AEB842
3A73A9AC4110350507D747A2C71B4FC419383FB9DE50D31
72A1E525163A0CA447B0C3D50B253499F73B33976212A04
0CA9F7947C52174413725
[n]
⇒法n。
9BE5A018CE25343868FDDB5EC942BF8CD67CC5EA79C9071
CF37B9DA79228671C8457EB4E5220A3FEB3E4B15928D781
371F1790ED19C1AB945B7513C20CE8C7767850B80BC21DB
727436B4F9C58B0E101427AA45383C4D6BD876CAFBA2A03
D427927BE2903F5996E3D8135AC3C86557DBED55F7D38F7
88B56F5A8AC53FF7F787D
[L]
⇒ラベルL, 長さ0。
[Bitlength of L]
0
[Bitlength of Plaintexts] ⇒平文の
64
ビット長。
[Number of Ciphertexts]
10
⇒10個の暗号文。
[Ciphertexts]
478551F4F9F67DED434A28F02C0CC0796B762B
543D9116B66618C57DD45C91E60C1598D4011D
E48A2FE7F71D0878AF1C20205C39A5305A81CE
87AEF1D482AF20B07315D10D7FCF3A48E2E76A
5DC6C1B36A11B9523DABEC75BD4BF0D6E7E80C
C9B6295C4859ED7C8DAAE447F97052B5892C5A
CC2E3022A5571E83A17D08E90BC7
--省略--
復号できる場合には, 元の平文を,
復号できない場合には,
”decryption error”を回答ファイルに記述。
55
公開鍵暗号: RSA <署名>
• 署名生成
– 署名者のプライベート鍵を用いて“暗号化”する。
• 署名検証
– 署名者の公開鍵を用いて“復号”する。
56
公開鍵暗号: RSA-PSS
署名生成(1)
• RSA-PSS
– 署名生成
• 内部で使用する関数
– Hash ハッシュ関数(ハッシュ関数の出力長は hLen (バイト))
SHA-1, SHA-256, SHA-384, SHA-512
– MGF マスク生成関数
• 入力
– K 署名者のプライベート鍵
– M 署名したいメッセージ(バイト列)。
• 出力
–S
長さ k (バイト)の署名。ここで, k は法 n の長さ。
57
公開鍵暗号: RSA-PSS
署名生成(2)
• 処理概要
プライベート鍵
メッセージ
K
M
1. 符号化処理
Hash
ハッシュ関数
MGF
マスク生成関数
2. 署名生成処理
3. 署名の出力
署名
S
58
公開鍵暗号: RSA-PSS
署名生成(3)
•
処理概要
1. 符号化処理
M
0x00で埋める
8
M’= padding1
emLen-sLen-hLen-2
8emLen-emBitsビット
分は0に設定
DB=
EM=
hLen
01 salt
emLen-hLen-1
salt
mHash
1
padding2
sLen
Hash
Hash
MGF
maskedDB
emLen
H
bc
hLen
1
=
emBits / 8
(modBits 1) / 8
59
公開鍵暗号: RSA-PSS
署名生成(4)
•
処理概要
2. 署名生成処理
プライベート鍵:
K
前頁より
EM
OS2IP
バイト列EM(長さ k (バイト))を
整数mに変換する
m
RSASP1
s
I2OSP
署名:
CRT無しの場合, 計算式
s m d mod n に従い,
sを計算する。
整数 s をバイト列 S (長さ k (バイト))に
変換する。
S
60
公開鍵暗号: RSA-PSS
署名生成機能試験(1)
• 試験項目
– 試験1
• JCATT ® が与えたプライベート鍵(n, d) または(p, q,
dP, dQ, qInv),平文に対してIUTが生成した署名を,
JCATT ®が署名検証した時に署名検証合格となるこ
と。
• salt 長が 0 でない場合,同じ平文,同じプライベート
鍵に対して,複数(別途規定する数) 署名を生成させ
た時,IUT が同じ署名を生成しないこと。
61
公開鍵暗号: RSA-PSS
署名生成機能試験(2)
• 試験項目
– 試験2 (任意で実施する試験)
• JCATT ® が与えたプライベート鍵(n, d) または(p, q,
dP, dQ, qInv) ,平文,ならびに指定されたハッシュ関
数,擬似乱数生成関数,乱数シードに対してIUT が
正しい署名を生成すること.
– 試験3(任意で実施する試験)
• JCATT ® が与えたプライベート鍵(n, d) または(p, q,
dP, dQ, qInv) ,平文,ならびに指定されたハッシュ関
数,salt に対してIUT が正しい署名を生成すること.
62
公開鍵暗号: RSA-PSS
署名生成機能試験(3)
• 申し込む際に必要な情報
– プライベート鍵
• nのビット長
1024, 1536, 2048, 3072, 4096
• プライベート鍵のタイプ選択
CRTあり, CRTなし
署名検証と
異なる部分
– 関数の選択
• 使用するハッシュ関数
SHA-1, SHA-256, SHA-384, SHA-512
• マスク生成関数(MGF)
ANSI X9.44 SHA-1, ANSI X9.44 SHA-256,
ANSI X9.44 SHA-384, ANSI X9.44 SHA-512
– 試験の選択
• 試験1, 試験2(擬似乱数生成関数の指定), 試験3
– その他
• saltのビット長
63
公開鍵暗号: RSA-PSS
署名生成機能試験(4)
•
試験1の場合(質問ファイルの抜粋)
[Seed Salt]
salt生成のため
の擬似乱数生
成シード。
[Bitlength of Modulus] ⇒法nのビット長。
[Bitlength of Seed Salt]
1024
0
[Hash]
[Bitlength of Plaintexts]
⇒ハッシュ関数:SHA-256
M_Hash_SHA256
1024
[MGF]
⇒salt の入力フラグ。
[SaltFlag]
⇒MGF:ANSI
X9.44
SHA256
M_MGF_ANSI944_SHA256
0:指定なし。
0
[Secret Key Type]
⇒プライベート鍵:CRTなし。 [Bitlength of Salt]
TYPE2
⇒salt のビット長。
256
[d]
⇒プライベート鍵
d。
3709FDD34CAC1BAC88D217A5E43FF0A6AFAD13E0D049
[Number of Plaintexts]
1190A61FFA5C7E20F5ADD6A5049163C91504CD4EA1C8
10
⇒署名したいメッセージ。
93A3D3D9EC9E16AC69D09F861F433F4C43E3574D8DD9
[Plaintexts]
EE3543620B6A6607F36DEDB03A4D2CC2A11D3420E0A9
DDB8778F88379BB3602CA8C8D2E6628B2
5FCA6B299FA147E589112C739D51603BDD883C88A515
89836E6059AB59CF473FAB7B9A52C1111
F9C99E35E2A9883FACB2D878E269231E2229
2A0890CCF6F37EF2211277F7325D511FB
[n]
AB83E5148CF9C73FEDECFF8FB3E341211
⇒法n。
B093113903E6666BBD534384E9E9082F7C1D3C5F6B42
0362C54555783D771B2FA5F74F70F71C8
334BFBCFDF6809779CB8A63EDF52091BBE0EFDEED82E
0E28A10487BCA0B61F13961901908AD78
400CED062B0EADDFC13F7B4C92C13FBD93445FDC83C3
┌→同じメッセージ
A4EAB00CF6C68FDA3349CED8A4D221AD12987D8E1E11
6C7FC3A11C1E0FAC930E7A9F437317A10
に対して10個の署名
84251C5470F8CBBB19F48A049F19B6E764EB8DE099D5
4A2251361D3C207A99F2BFC02
4115C72B2B0604C6582634A872BDB8405B13
--省略— を生成。
[Number of Signatures for RGT]
10
64
公開鍵暗号: RSA-PSS
署名検証(1)
• RSA-PSS
– 署名検証
• 内部で使用する関数
– Hash ハッシュ関数(ハッシュ関数の出力長は hLen (バイト))
SHA-1, SHA-256, SHA-384, SHA-512
– MGF マスク生成関数
• 入力
– (n, e) 署名者の公開鍵
–M
署名を検証する元になるメッセージ(バイト列)。
–S
検証される署名。長さは k (バイト) で, 公開鍵 n の長
さに等しい。
• 出力
– “valid signature” or “invalid signature”
65
公開鍵暗号: RSA-PSS
署名検証(2)
• 処理概要
メッセージ 公開鍵 署名
M
(n,e)
S
1. 長さチェック
–
署名 S の長さが k バイトでない場合, エラー処理。
2. RSAアルゴリズムを使った処理
3. 比較・抽出部分
Hash
ハッシュ関数
MGF
マスク生成関数
4. 検証結果出力
検証結果
66
公開鍵暗号: RSA-PSS
署名検証(3)
•
処理概要
2. RSAアルゴリズムを使った処理
S
公開鍵:
(n, e)
OS2IP
バイト列S
(長さ k (バイト))を
整数sに変換する
s
RSADP
m
I2OSP
EM
m
s e mod n
に従い, mを計算する。
整数mをバイト列EM (長さ
emLen (modBits 1) / 8
(バイト))に変換する
67
公開鍵暗号: RSA-PSS
署名検証(4)
•
処理概要
3. 抽出・比較部分
前頁より
emLen
M
EM
emLen-hLen-1
maskedDB
hLen
1
H
bc
Hash
MGF
8
salt
emLen-hLen-1
sLen
M’= padding1
H
?
H’
hLen
mHash
salt
Hash
68
公開鍵暗号: RSA-PSS
署名検証機能試験(1)
• 試験項目
– JCATT® が与えた公開鍵(n, e),平文および署名,
ならびに指定されたハッシュ関数に対して,IUT
が署名検証合格と判定すること。
– JCATT® が改竄した平文,署名,または公開鍵
に対して,IUT が署名検証不合格と判定するこ
と。
69
公開鍵暗号: RSA-PSS
署名検証機能試験(2)
• 申し込む際に必要な情報
– 公開鍵
• nのビット長
1024, 1536, 2048, 3072, 4096
• 指数eのタイプ選択
65537, ランダム
署名生成と
異なる部分
– 関数の選択
• 使用するハッシュ関数
SHA-1, SHA-256, SHA-384, SHA-512
• マスク生成関数(MGF)
ANSI X9.44 SHA-1, ANSI X9.44 SHA-256,
ANSI X9.44 SHA-384, ANSI X9.44 SHA-512
– その他
• saltのビット長
70
公開鍵暗号: RSA-PSS
署名検証機能試験(3)
[e]
⇒公開鍵e。
8a8566948c755b4ab205f1dab6cb65bc6ef4a7a26df3524b4f
e821c6dd8b5cd6c368f8b9a29c0ec8ca6322f987908750d388
298e1bbf497b6c931f74852583850d9b150fa3c54e0144c94b
[Bitlength of Modulus]
⇒法nのビット長。 f70b60071fb715a66f14d5c28735ad8a0aa697ee1342b96e73
1024
229cc21e67e8c05ec62b09429c764d5a62ec48734ca1aa1291
[Hash]
⇒ハッシュ関数:SHA-256
ff83f9
M_Hash_SHA256
--省略-⇒MGF:ANSI X9.44 SHA-256
[MGF]
[Signatures] ⇒署名。
M_MGF_ANSI944_SHA256
3D99B7D1AA1D0274A8FF64BCEDFAB327D2806E8C093054886A
⇒法n。
[n]
0C6002173DDB30F2C1F1482934E80D6C182A8DFD6B4439994F
C35659997E98B59415B350905029D5F79A92FE
A8EF1C4D3A2E6AEB322623D73F62B153487167F13BF92D28E0
48C3E7501C1E255231765D91021D011F4E66A4
324E79B4E1C4B8E5C50DEE55B50D60931CA80CCF6EA9CDBDC5
1609A80478D46678799D8A7ABEB7CDBD3F9434
7B08F657FB13BBFBE2DA86EB8EA3696C5D9892E5575224159D
DDA680A0078E0B410719FE5CEF0D472CDE9EBB
C7A8FD
3E2F527A42E65AFDE0ECA644A86ED6C83CE20D
--省略-F0ED4F376D6FB4105538E243F40E1282C821F5
[Plaintexts] ⇒メッセージ。
7FF2ECA95F633F41849C11261D35
4E1049022DD3DEEFBD767592F70050F253AB3DBA91F4121ACD
[Bitlength of Salt]
⇒salt のビット長。 90C9990D630A654ED343F94328CBE8594B1A96803DC0579C7D
256
56FD0DB976984EA529DFE136FDE2AD2DFF6C97657A5EF7664B
[Bitlength of Plaintexts]
⇒メッセージ
AC46758BF81C96FCF040F89CC5FC192A1DF6F8AC38421B3E0C
1024
のビット長。 28FFEFD8E49CCFDDD077439A867632E58A25B1DBF1D7CF3071
[Number of Signatures]
0435D2
⇒署名,
10
--省略-メッセージの
71
組の数。
• 質問ファイル抜粋
暗号モジュールの
暗号アルゴリズム実装試験セミナー
第3部:擬似乱数生成器
–NIST SP800-90
•Hash_DRBGについて
72
擬似乱数生成器
• 承認されたセキュリティ機能
– PRNG based on SHA-1 ANSI X9.42-2001 Annex C.1
– PRNG based on SHA-1 for general purpose in FIPS 186-2
(+change notice 1) Appendix 3.1
– PRNG based on SHA-1 for general purpose in FIPS 186-2
(+change notice 1) revised Appendix 3.1
– Hash_DRBG, CTR_DRBG and OFB_DRBG in ISO/IEC 18031
– NIST SP800-90(Hash_DRBG, HMAC_DRBG, CTR_DRBG)
– NIST-Recommended Random Number Generator Based on
ANSI X9.31 Appendix A.2.4 Using the 3-key Triple DES and
AES Algorithms
※2008年2月18日に承認。
• 注意事項
JIS X 19790
7.7.1 乱数ビット列生成器 (RBG)
RBG 及びその動作モードは,ISO/IEC 18031 に適合しなければならな
い。
73
擬似乱数生成器
ISO/IEC 18031適合の取扱い
JCMVP運用ガイダンス, 3.8.1. 擬似乱数生成器の仕様
• 背景
JIS X 19790 の細分箇条7.7.1 には「RBG 及びその動作
モードは, ISO/IEC 18031 に適合しなければなりません。」
と規定されています。
• 質問
ISO/IEC 18031 のHash_DRBGの内部関数Hashgen()内
のdata の取扱いやCTR_DRBGの内部関数
Block_Cipher_df()内の内部変数L,N,i の長さの取扱いなど
不明確な点が多い。そのため, どのように実装したらよいで
すか?
74
擬似乱数生成器
ISO/IEC 18031適合の取扱い
JCMVP運用ガイダンス, 3.8.1. 擬似乱数生成器の仕様
• 回答
ISO/IEC 18031 はANSI X9.82 の古いドラフト版を元に2005 年11 月
に作成されていますが, ANSI X9.82 の2007 年6 月ドラフト版を元に
NIST より SP800-90 Recommendation for Random Number
Generation Using Deterministic Random Bit Generators
(Revised_March 2007)が作成されています。
そのため, ISO/IEC 18031 の不明確な点を詳細に記述した仕様が
SP800-90 と考えられます。そこで, Hash_DRBG とCTR_DRBG に関
してISO/IEC 18031 に適合するとは, SP800-90 に従ってそれらを実装
することと解釈します。
• 補足
このガイダンスはJIS X 19790 の暗号モジュールセキュリティ要件のみ
に適用されます。試験用提供物件に規格を明示する場合、ISO/IEC
18031 ではなく、NIST SP800-90 と記載して下さい。
75
擬似乱数生成器
NIST SP800-90について
• NIST SP800-90
“Recommendation for Random Number
Generation Using Deterministic Random Bit
Generators (Revised)”
– 仕様
http://csrc.nist.gov/publications/nistpubs/80090/SP800-90revised_March2007.pdf
– 擬似乱数生成器
•
•
•
•
Hash_DRBG ←こちらについて説明
HMAC_DRBG
CTR_DRBG
Dual_EC_DRBG ←JCMVPでは承認されていない。
76
擬似乱数生成器:
DRBG(NIST SP800-90)の基本構成(1)
•
基本構成
–
–
–
–
内部状態
擬似乱数を生成するための元
データ(Seed等)を格納する。
エントロピー入力
– 関数群
1. Instantiate関数
エントロピー入力から内部状態
を生成する
擬似乱数を生成するための
Seedを作る元になる。
2. Reseed関数
nonce
エントロピー入力とあわせ
てSeedを作る元になる。
その他の入力
3. Generate関数
•
•
additional input
reseed関数及びgenerate
関数が呼ばれる場合に使
用される。オプション。
personalization string
DRBGのインスタンスを特
徴付ける文字列。
内部状態とエントロピー入力か
ら内部状態を更新する。
擬似乱数を出力する。
4. Uninstantiate関数
内部状態を削除する。
5. Health test関数
DRBGが正しく動いているか診
断する。
※上記1,2,3については, それぞれ対応する
下位アルゴリズムを呼出す。下位アルゴ
リズムは、Hash_DRBG、
HMAC_DRBG、CTR_DRBG、
Dual_EC_DRBGのそれぞれで異なる。
77
擬似乱数生成器:
DRBG(NIST SP800-90)の基本構成(2)
• 基本構成
Personalization string
Nonce
Additional input
Entropy Input
Instantiate関数
Reseed関数
Instantiate アルゴリズム
Uninstantiate
関数
Reseed アルゴリズム
内部状態
Health test 関数
Generate関数
Generate アルゴリズム
エラー状態
DRBG メカニズム
擬似乱数
Random Bit Generator (RBG)
利用アプリケーション
78
擬似乱数生成器:
Hash_DRBG (NIST SP800-90) (1)
• 一方向性関数であるハッシュ関数を用いた擬似乱
数生成器
• 使用できるハッシュ関数
SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
• 条件
サポートされるセキュリティ強度
ハッシュ関数の出力長(outlen)
SHA-1
SHA-224
SHA-256
SHA-384
SHA-512
112, 128
112, 128,
192
112, 128,
192, 256
112, 128,
192, 256
112, 128,
192, 256
160
224
256
384
512
要求される最小エントロピー
セキュリティ強度と同じ
エントロピー入力の長さの最小値
セキュリティ強度と同じ
Seedの長さ (seedlen)
一回あたりの最大出力ビット数
Reseedせずに乱数生成できる回数
440
440
440
888
888
<= 219ビット
<= 248
79
擬似乱数生成器:
Hash_DRBG (NIST SP800-90) (2)
•
内部状態
1. 作業状態
•
•
•
V ビット列(長さ:seedlen ビット)。擬似乱数生成の度に更新される。
C ビット列(長さ:seedlen ビット)。Instantiate関数で生成され, Reseed関
数内で更新される。
reseed_counter 整数。擬似乱数を生成した回数を格納。Reseed関数
を呼出すと1に初期化される。
2. 管理情報
•
•
security_strength セキュリティ強度
prediction_resistance_flag 擬似乱数生成時に, 必要があればReseed
関数を呼出せるかどうかのフラグ。
80
擬似乱数生成器:
Hash_DRBG (NIST SP800-90) (3)
• 関数の階層構造
Instantiate 関数
エントロピー入力を使って内部状態を
生成する。
入力引数から
ハッシュ関数を用いて
必要な長さのビット列を
生成する関数。
(a) Instantiate アルゴリズム
Reseed 関数
(b)Hash_df
内部状態とエントロピー入力から内部状態を
更新する。
Hash
(c) Reseed アルゴリズム
(e)Hashgen
Generate 関数
擬似乱数を出力する。
(d) Generate アルゴリズム
内部状態を使って
擬似乱数を生成する。
Uninstantiate 関数
Health Test 関数
内部状態を削除。
DRBGが正しく動いているか診断する。
81
擬似乱数生成器:Hash_DRBG
(a) Instantiate アルゴリズム(1)
•
Instantiate アルゴリズム
Instantiate関数内で呼出される。初期作業状態を生成す
る。
–
入力
entropy_input エントロピー入力。security_strength 以上のエントロ
ピーが必要。
2. nonce エントロピー入力とあわせてSeedを作る。
3. personalization_string DRBGのインスタンス(内部状態)を特徴付け
る文字列。例えばアプリケーションID, ユーザIDなど。
1.
–
出力
1.
–
initial_working_state
初期作業状態。V, C, reseed_counterからなる。
処理概要
次ページ参照。
82
擬似乱数生成器:Hash_DRBG
(a) Instantiate アルゴリズム(2)
• Instantiate アルゴリズム
– 処理概要
entropy_input
nonce personalization_string
8
Hash_df
00
V
Hash_df
入力引数から
ハッシュ関数を用いて
必要な長さのビット列を
生成する関数。
initial_working_state
C
V
seedlen
seedlen
reseed_counter=1
83
擬似乱数生成器:Hash_DRBG
(b) Hash_df 関数(1)
•
Hash_df 関数
Instantiate, Reseed アルゴリズムから呼出される。
作業状態のV, C を生成するために使われる。
–
入力
1.
2.
–
出力
1.
2.
–
input_string ハッシュ関数への入力の一部。
no_of_bits_to_return 生成したいビット数。
status 関数の戻り値。
requested_bits 生成されたビット列。
処理概要
次頁参照
84
擬似乱数生成器:Hash_DRBG
(b) Hash_df 関数(2)
• Hash_df関数
– 処理概要
no_of_bits_to_return
8-bit
input_string
1
1
counter
1
Hash
Hash
Hash
temp1
temp2
tempLen
requested_no_of_bits
outlen
Len
no _ of _ bits _ to _ return
outlen
returned_bits
85
擬似乱数生成器:Hash_DRBG
(c) Reseed アルゴリズム (1)
•
Reseed アルゴリズム
Reseed関数内で呼出される。現在の作業状態から新し
い作業状態を生成する。
–
入力
1.
2.
3.
–
出力
1.
–
working_state 作業状態。V, C, reseed_counterからなる。
entropy_input エントロピー入力。
additional_input DRBGを利用するアプリケーションから渡される。
オプション。
new_working_state
新しい作業状態。V, C, reseed_counterを含む。
処理概要
次頁参照。
86
擬似乱数生成器:Hash_DRBG
(c) Reseed アルゴリズム (2)
• Reseed アルゴリズム
– 処理概要
seedlen
seedlen working_state
V
C
01
V
reseed_counter
entropy_input additional_input
8-bit Hash_df
00 seed
Hash_df
入力引数から
ハッシュ関数を用いて
必要な長さのビット列を
生成する関数。
new_working_state
C
V
seedlen
seedlen
reseed_counter=1
87
擬似乱数生成器:Hash_DRBG
(d) Generate アルゴリズム (1)
•
Generate アルゴリズム
Generate 関数内で呼出される。擬似乱数を生成する。
–
入力
1.
2.
3.
–
オプション。
出力
1.
2.
3.
–
working state 作業状態。V, C, reseed_counterからなる。
requested_number_of_bits 出力したい擬似乱数のビット数。
additional_input DRBGを利用するアプリケーションから渡される文字列。
status 関数の戻り値。
成功, 又はReseedが必要な場合にはその旨が, 報告される。
returned_bits 生成された擬似乱数。
new_working_state 擬似乱数を生成した後の新しい作業状態。
処理概要
次頁参照
88
擬似乱数生成器:Hash_DRBG
(d) Generate アルゴリズム (2)
• Generate アルゴリズム
status:
reseed_counter>=reseed_intervalなら
ばReseed関数呼出しが必要。
•青色枠
additional_inputのない場合,
この処理は行わない。
working_state
•赤色枠
V, reseed_counterの更新処理。
Cは, Generateアルゴリズム
では更新されない。
•Hashgen関数
擬似乱数を生成する部分。
C
02
V
reseed_counter
V
additional_input
:桁上がりのあるXOR
⇒足算
03
V
Hash
Hash
•記号
reseed_counter
V
C
Hashgen
returned_bits
C
V
reseed_counter
new_working_state
1
89
擬似乱数生成器:Hash_DRBG
(e) Hashgen 関数
•
Hashgen 関数
V を使って擬似乱数を生成する。
–
入力
1.
2.
–
出力
1.
–
requested_no_of_bits 出力したい擬似乱数のビット数。
V 現在の作業状態の V が編集される。
returned_bits 出力されたビット列。そのまま擬似乱数生成器の出
力になる。
1
1
1
requested _ no _ of _ bits
処理概要
右図参照
m
V
Hash
Hash
Hash
w1
w2
wm
outlen
requested_no_of_bits
returned_bits
90
擬似乱数生成器:
JCATTの対応状況
• NIST SP800-90に記載の擬似乱数生成器
⇒現在JCATTでは, 試験できない。
⇒JCATTが対応出来るまでは, ベンダ自己確認。
• ベンダ自己確認とするために
– NIST SP800-90のテストベクタ
• 内部状態に関する記述なし (217KB)
http://csrc.nist.gov/groups/STM/cavp/documents/drbg/DRBGTestV
ectors.zip
• 内部状態に関する記述あり (13MB)
http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/DRBG_
All.pdf
– 内容
•
•
•
•
Hash_DRBG
HMAC_DRBG
CTR_DRBG
Dual_EC_DRBG ←JCMVPでは承認されていません。
91
NIST SP800-90を
ベンダ自己確認とする際のガイダンス(1)
• NIST SP800-90の次の各章の要求事項に, 実装が準拠し
ていることをベンダが確認しなければならない。
– 9章 DRBG Mechanism Functions
…アルゴリズムの外側の関数
– 10章 DRBG Algorithm Specifications
…アルゴリズム
– 11章 Assurance
• 文書化要求事項
– セキュリティ強度
– エントロピー入力の取得方法
– …
• ヘルステスト
既知解テスト(Instantiate, Reseed, Generate, Uninstantiate)
• …
⇒暗号アルゴリズム以外の部分についても一読を。
92
NIST SP800-90を
ベンダ自己確認とする際のガイダンス(2)
• ベンダ情報要件
ベンダは, 試験対象実装が上記の章に記載の要求事項を
完全かつ正確に実装している証拠資料を提供しなれければ
ならない。
• 試験手順要件
試験者は, 証拠資料をレビューし, 試験対象実装が上記の
仕様に準拠していることを確認しなければならない。これは,
文書レビュー及びソースコードレビューによって行われなけ
ればならない。
93
ご清聴有難うございました。
お問い合わせは [email protected] までお願い致します。
JCMVPホームページ
http://www.ipa.go.jp/security/jcmvp/
94
暗号モジュールの
暗号アルゴリズム実装試験セミナー
参考資料
95
DSA:暗号アルゴリズム実装試験判定基準
• ドメインパラメータ生成機能試験
®
®
– IUT が生成したSEED およびcounter をJCATT に入力し,JCATT はFIPS
186-2 Appendix 2 のアルゴリズムに従って2 つの素数p’,q’ を計算する。
このp’,q’ と,IUTが生成したp,q がそれぞれ等しいこと。
– gq ≡ 1 mod p であること。
– IUT が生成した複数 のドメインパラメータ(p; q; g) が全て異なるものであること。
• ドメインパラメータ検証機能試験
®
– JCATT が与えたドメインパラメータ生成機能に対する試験に適合するような
ドメインパラメータに対して,IUT が“合格”と判定すること。
®
– JCATT が与えたドメインパラメータ生成機能に対する試験に違反するような
ドメインパラメータに対して,IUT が“不正”と判定すること。
• 鍵ペア生成機能試験
x
– y ≡ g mod p であること。
– 1 < x < q - 1, 2 < y < p - 2 であること。
q
– y ≡ 1 mod p であること
– IUT が生成した複数 の鍵ペアが全て異なるものであること。
IUT: Implementation Under Test, 試験対象実装
96
DSA:暗号アルゴリズム実装試験判定基準
• 署名生成機能試験
®
– JCATT が与えたプライベート鍵x および平文に対して,IUTが生成した
®
署名を,JCATT が署名検証した時に署名検証合格となること。
– 同じ平文,同じプライベート鍵に対して複数 署名を生成させた時,IUTが
同じ署名を生成しないこと。
• 署名検証機能試験
®
– JCATT が与えた正しい公開鍵y,平文および署名,ならびに指定され
たハッシュ関数に対して,IUT が正しく署名検証合格と判定すること。
®
– JCATT が改竄した平文,署名,または公開鍵に対して,IUT が署名
検証不合格と判定すること。
97
暗号アルゴリズム確認書サンプル
98
AES:SubBytesの処理
•128ビットのデータを1バイト(8ビット)ごとに16のサブブロックに分割。
•各ブロックでは1バイトの入力データを1バイトの出力データへ置換。
S-Box
S0,0 S0,1 S0,2 S0,3
FIPS-197
Figure 7
S’0,0 S’0,1 S’0,2 S’0,3
S1,0 SS1,1
S1,2 S1,3
r, c
S’1,0 S’
S’1,2 S’1,3
S’1,1
r, c
S2,0 S2,1 S2,2 S2,3
S’2,0 S’2,1 S’2,2 S’2,3
S3,0 S3,1 S3,2 S3,3
S’3,0 S’3,1 S’3,2 S’3,3
99
AES:ShiftRowsの処理
• 4ブロックを1行として, 行ごとに左シフト処理。
S0,0 S0,1 S0,2 S0,3
シフトなし
S0,0 S0,1 S0,2 S0,3
S1,0 S1,1 S1,2 S1,3
左に1つシフト
S1,1 S1,2 S1,3 S1,0
S2,0 S2,1 S2,2 S2,3
左に2つシフト
S2,2 S2,3 S2,0 S2,1
S3,0 S3,1 S3,2 S3,3
左に3つシフト
S3,3 S3,0 S3,1 S3,2
100
AES:MixColumsの処理
•4ブロックを1列として, 列ごとに列ベクトルの変換。
S’0,c
S’1,c
S’2,c
=
S’3,c
0,c S
S0,0 SS0,1
0,2 S0,3
1,c S
S1,0 SS1,1
1,2 S1,3
2,c S
S2,0 SS2,1
2,2 S2,3
S
SS3,c S
S
3,0
3,1
3,2
3,3
02 03 01 01
S0,c
01 02 03 01
S1,c
01 01 02 03
S2,c
03 01 01 02
S3,c
S’0,c S’
S’0,0 S’
0,1
0,2 S’0,3
S’1,c S’
S’1,0 S’
1,1
1,2 S’1,3
S’2,c S’
S’2,0 S’
2,1
2,2 S’2,3
S’3,c S’
S’
S’
S’
3,0
3,1
3,2
3,3
101
AES:AddRoundKeyの処理
• 4ブロックを1列として, 列ごとに拡大鍵とXOR処理。
WL
W
WL+c
l+1
WL+2
WL+3
L=round*Nb
XOR
0,c S
S0,0 SS0,1
0,2 S0,3
1,c S
S1,0 SS1,1
1,2 S1,3
2,c S
S2,0 SS2,1
2,2 S2,3
S
SS3,c S
S
3,0
3,1
3,2
3,3
S’0,c S’
S’0,0 S’
0,1
0,2 S’0,3
S’1,c S’
S’1,0 S’
1,1
1,2 S’1,3
S’2,c S’
S’2,0 S’
2,1
2,2 S’2,3
S’3,c S’
S’
S’
S’
3,0
3,1
3,2
3,3
102
AES:InvShiftRowsの処理
• 4ブロックを1行として, 行ごとに右シフト処理。
S0,0 S0,1 S0,2 S0,3
シフトなし
S0,0 S0,1 S0,2 S0,3
S1,0 S1,1 S1,2 S1,3
右に1つシフト
S1,3 S1,0 S1,1 S1,2
S2,0 S2,1 S2,2 S2,3
右に2つシフト
S2,2 S2,3 S2,0 S2,1
S3,0 S3,1 S3,2 S3,3
右に3つシフト
S3,1 S3,2 S3,3 S3,0
103
AES:InvSubBytesの処理
•128ビットのデータを1バイト(8ビット)ごとに16のサブブロックに分割。
•各ブロックでは1バイトの入力データを1バイトの出力データへ置換。
S-Box
S0,0 S0,1 S0,2 S0,3
FIPS-197
Figure 14
S’0,0 S’0,1 S’0,2 S’0,3
S1,0 SS1,1
S1,2 S1,3
r, c
S’1,0 S’
S’1,2 S’1,3
S’1,1
r, c
S2,0 S2,1 S2,2 S2,3
S’2,0 S’2,1 S’2,2 S’2,3
S3,0 S3,1 S3,2 S3,3
S’3,0 S’3,1 S’3,2 S’3,3
104
AES:InvMixColumnsの処理
•4ブロックを1列として, 列ごとに列ベクトルの変換。
S’0,c
S’1,c
S’2,c
=
S’3,c
0,c S
S0,0 SS0,1
0,2 S0,3
1,c S
S1,0 SS1,1
1,2 S1,3
2,c S
S2,0 SS2,1
2,2 S2,3
S
SS3,c S
S
3,0
3,1
3,2
3,3
0e 0b 0d 09
S0,c
09 0e 0b 0d
S1,c
0d 09 0e 0b
S2,c
0b 0d 09 0e
S3,c
S’0,c S’
S’0,0 S’
0,1
0,2 S’0,3
S’1,c S’
S’1,0 S’
1,1
1,2 S’1,3
S’2,c S’
S’2,0 S’
2,1
2,2 S’2,3
S’3,c S’
S’
S’
S’
3,0
3,1
3,2
3,3
105
Fly UP