Comments
Description
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