2011 情財第 399 号
情報セキュリティ対策基盤整備事業
「電子政府推奨暗号の実装」
報告書
平成 24 年 12 月
目次
1.
概要...1
2. AES ... 11
3. Camellia... 16
4. CIPHERUNICORN-A ... 21
5. Hierocrypt-3 ... 28
6. SC2000... 35
7. MULTI-S01 ... 43
8. MUGI ... 49
1. 概要
図
1.1
に示すように,サイドチャネル攻撃用標準評価ボードSASEBO-GII
上のFPGA Virtex-5
上 に,電子政府推奨暗号リスト掲載のアルゴリズムのうち,下記の5
種類の128bit
ブロック暗号,および2
種類のストリーム暗号を実装し,実機動作検証および,CAD
ツールによる性能評価を行った.・AES
(ブロック長 128
ビット,鍵長128
ビット)・Camellia
(ブロック長 128
ビット,鍵長128
ビット)・CIPHERUNICORN-A
(ブロック長 128
ビット,鍵長128
ビット)・Hierocrypt-3
(ブロック長 128
ビット,鍵長128
ビット)・SC2000
(ブロック長 128
ビット,鍵長128
ビット)・
MULTI-S01 (
ブロック長64
ビット,鍵長256
ビット,IV
長256
ビット)
・MUGI
(ブロック長 64
ビット,鍵長128
ビット,IV長256
ビット)SASEBO-GII
上のFPGA Spartan-3A
に実装したUSB
インタフェースおよび制御回路は,IPA
から 提供される「電子政府推奨暗号用ハードウェア評価環境」をベースに,各アルゴリズムの入出力デー タサイズ/
入出力タイミング/
処理サイクル数等を考慮した変更を適宜加えており,Windows PC
のUSB
ポートとボード上のUSB
コントローラを接続することで,各暗号回路を制御する.Windows PC
上の制御ソフトウェアも上記「電子政府推奨暗号用ハードウェア評価環境」をベースに開発し,アル ゴリズムごとのインタフェースの違いを吸収できるよう変更を加えている.JTAG
Xilinx Virtex-5 LX30/50 Xilinx
Spartan-3A Header IO 24
USB Ctrl.
(JFT2232D)
8 4 Data
Ctrl.
Oscillator (24MHz) SMA
1 1
EEPROM
38 Select
Map SRAM
(2Mbits)
24 Header IO
Push SW
1 1
CLK 8
DIP Push SW
LED 8
8
1
32 Data 30 Ctrl.
DIP
8 LED
8
SPI-ROM
4
SMA
1 4
JTAG
SPI-ROM
4
4
JTAG
4 4
RSTSW
1
JTAG
4
SASEBO-GII
暗号回路・AES
・Camellia
・CIPHERUNICORN-A
・Hierocrypt-3
・SC2000
・MULTI-S01
・MUGI 制御回路インタフェース回路
USBケーブル
Windows PC
制御ソフトウェア
図
1.1 システム構成
各暗号回路は処理速度を優先するため,内部データバス幅を可能な限り広く取り,クリティカルパス
各暗号回路およびインタフェース回路は
Verilog-HDL
言語で記述し,ISE WebPACK Version 12.4 によってSASEBO-GII
のFPGA Viretex-5
上への実装および性能評価を行った.SASEBO-GII上の 実装のターゲット動作周波数は24MHz
であるが,CIPHERUNICORN-A は論理合成の結果,24MHz
を満たすことができなかったので,インタフェースFPGA Spartan-3
の動作周波数を半分の12MHz
とする制御回路も設計・実装した.ただし,FPGA のスペックは動作マージンを含んでいるため,手元の実機では
CIPHERUNICORN-A
も24MHz
で動作している.表
1.1
に,納品物のDVD
メディアDISC1
におさめたファイルの一覧を示す.また暗号回路と制御 回路のソースファイルは納品物ではないが,表1.2
に示すように“参考情報”としてDISC2
におさめて いる.各メディアのディレクトリの概要は下記の通りである.●
DISC1
<
文書>
ディレクトリには,本報告書,評価結果,プログラム取扱説明書の<
設計情報>
ディレクトリは,CAD
サマリを含む設計情報として,Qualtus II
および,ISE WebPACK
の論路合成レポートが納められている.Qualtus II
ではCyclone III
およびStratix III
に対して,各暗 号 回 路 の コ ア モ ジ ュ ー ル の み を 論 理 合 成 し て い る . そ れ に 対 し て ,ISE WebPACK
で はSpartan-3,Spartan-6,Virtex-5,Virtex-6
に対してコアモジュールのみ,そして消費電力評価のためコア モジュール+
インタフェース回路の2
種類の論理合成を行った.なお,Hieroctypt-3
とMULTI-S01
はspartan-3
ではリソース不足のため,電力レポートのpwr
ファイルと,タイミングレポートのtwr
ファイルは存在しない.
<
コンフィギュレーションデータ>
ディレクトリの下には二つのディレクトリがあり,<Virtex-5>
には各 暗号回路のビットストリームファイル“
暗号名.bit”
とSPI ROM
ファイル“
暗号名.mcs”
が納められてい る.また<Spartan-3>
ディレクトリには,制御回路のコンフィギュレーションデータが納められている.“FPGA2.bit”
と“FPGA2.mcs”
は,(
独)
産業技術総合研究所情報セキュリティ研究センターが開発 した「電子政府推奨暗号用ハードウェア評価環境」のソースファイルをそのまま論理合成したもので ある.しかし,CIPHERUNICORN-A
は論理合成の結果SASEBO-GII
の標準動作周波数24MHz
を 満たすことができなかったため(実機では動作している),半分の12MHz
で動作させるために修正を 施したFPGA2_12MHz.bit”
と“FPGA2_12MHz.mcs”
もおさめた.<
制御プログラム>
ディレクトリは暗号回路の制御ソフトウェア関連のファイルが納められている.“algorithm_test.cs”
は上記の評価環境として公開されている制御ソフトウェアを一部修正しており,その
Windows
上の実行ファイルが“algorithm_test.exe”
となる.“
暗号名.txt”
は“algorithm_test.exe”
が 読み込むスクリプトファイルで,各暗号外路制御用のコマンドやのテストベクタが記述されている.使 用法は「4.2
制御ソフトウェアのインタ フェース」を参照されたい.また,“FTD2XX_NET.dll”
と“FTD2XX_NET.xml” は FTDI (Future Technology Devices International)社から公開されている
●DISC2
<回路ソースファイル>ディレクトリの下の<Virtex-5>ディレクトリには,さらに各暗号名のディレクトリ
が存在し,“FPGA1_暗号名.v” をトップとするVerilog-HDL
ソース群(“FPGA1_暗号名.v”,“暗号 名.ucf”,“暗号名.v”,“lbus_if.v”)がおさめられている.なおMULTI-S01
だけは,それら4
つのソー ス以外に“PANAMA.v”
が必要となる.“暗号名.v”が暗号回路コアモジュールで,“暗号名_tb.v”はそのテストベンチである.“暗号名.ucf”は
Virtex-5
用のピンアサイン用ファイルであり,“lbus_if.v”はインタフェース回路である.なお,“暗号名.ucf”,“FPGA1_暗号名.v”,そして“lbus_if.v”は,「電子 政府推奨暗号用ハードウェア評価環境」をそのまま,もしくは暗号アルゴリズムに合わせて修正した ものである.
<Spartan-3>
デ ィレ クト リ には「 電子政 府推 奨暗 号用ハ ード ウ ェ ア評価 環境 」 の制 御回 路をCIPHERUNICORN-A
用 に12MHz
で 動 作 さ せ る た め に 修 正 し た ソ ー ス フ ァ イ ル“chip_sasebo_gii_ctrl_12MHz.v”
が納められている.表
1.1 DISC 1
の内容<文書>
報告書.pdf 報告書.word 評価結果.pdf 評価結果.word
プログラム取扱説明書.pdf プログラム取扱説明書.sord
報告書pdfファイル 報告書Wordファイル 評価結果pdfファイル 評価結果Wordファイル
制御プログラム取扱説明書pdfファイル 制御プログラム取扱説明書Wordファイル
<設計情報>
<Cyclone III>
<AES>
AES.flow
AES.map Qualtus II flow report
Qualtus II analysis & synthesis report
<Camellia>
Camellia.flow
Camellia.map Qualtus II flow report
Qualtus II analysis & synthesis report
<CIPHERUNICORN-A>
CIPHERUNICORN_A.flow
CIPHERUNICORN_A.map Qualtus II flow report
Qualtus II analysis & synthesis report
<Hierocrypt-3 >
Hierocrypt_3.flow
Hierocrypt_3.map Qualtus II flow report
Qualtus II analysis & synthesis report
<MUGI>
MUGI.flow
MUGI.map Qualtus II flow report
Qualtus II analysis & synthesis report
<MULTI-S01>
MULTI_S01.flow
MULTI_S01.map Qualtus II flow report
Qualtus II analysis & synthesis report
<SC2000>
SC2000.flow
SC2000.map Qualtus II flow report
Qualtus II analysis & synthesis report
<Stratix III>
<AES>
AES.flow
AES.map Qualtus II flow report
Qualtus II analysis & synthesis report
<Camellia>
<Hierocrypt-3 >
Hierocrypt_3.flow
Hierocrypt_3.map Qualtus II flow report
Qualtus II analysis & synthesis report
<MUGI>
MUGI.flow
MUGI.map Qualtus II flow report
Qualtus II analysis & synthesis report
<MULTI-S01>
MULTI_S01.flow
MULTI_S01.map Qualtus II flow report
Qualtus II analysis & synthesis report
<SC2000>
SC2000.flow
SC2000.map Qualtus II flow report
Qualtus II analysis & synthesis report
<Spartan-3>
<AES>
<コア>
AES.summary.html
AES.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_AES.summary.html FPGA1_AES.syr
FPGA1_AES.map.mrp FPGA1_AES.pwr FPGA1_AES.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Camellia>
<コア>
Camellia.summary.html
Camellia.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_Camellia.summary.html FPGA1_Camellia.syr
FPGA1_Camellia.map.mrp FPGA1_Camellia.pwr FPGA1_Camellia.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<CIPHERUNICORN-A>
<コア>
CIPHERUNICORN_A.summary.html
CIPHERUNICORN_A.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_CIPHERUNICORN_A.summary.html FPGA1_CIPHERUNICORN_A.syr
FPGA1_CIPHERUNICORN_A.map.mrp FPGA1_CIPHERUNICORN_A.pwr FPGA1_CIPHERUNICORN_A.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Hierocrypt-3>
<コア>
Hierocrypt_3.summary.html
Hierocrypt_3.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_Hierocrypt_3.summary.html FPGA1_Hierocrypt_3.syr
FPGA1_Hierocrypt_3.map.mrp
ISE synthesis summary ISE synthesis report ISE mapping report
<MUGI>
<コア>
MUGI.summary.html
MUGI.syn ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_MUGI.summary.html FPGA1_MUGI.syr
FPGA1_MUGI.map.mrp FPGA1_MUGI.pwr FPGA1_MUGI.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<MULTI-S01>
FPGA1_MULTI_S01.summary.html FPGA1_MULTI_S01.syr
FPGA1_MULTI_S01.map.mrp
ISE synthesis summary ISE synthesis report ISE mapping report
<SC2000>
<コア>
SC2000.summary.html
SC2000.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_SC2000.summary.html FPGA1_SC2000.syr
FPGA1_SC2000.map.mrp FPGA1_SC2000.pwr FPGA1_SC2000.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Spartan-6>
<AES>
<コア>
AES.summary.html
AES.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_AES.summary.html FPGA1_AES.syr
FPGA1_AES.map.mrp FPGA1_AES.pwr FPGA1_AES.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Camellia>
<コア>
Camellia.summary.html
Camellia.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_Camellia.summary.html FPGA1_Camellia.syr
FPGA1_Camellia.map.mrp FPGA1_Camellia.pwr FPGA1_Camellia.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<CIPHERUNICORN-A>
<コア>
CIPHERUNICORN_A.summary.html
CIPHERUNICORN_A.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_CIPHERUNICORN_A.summary.html FPGA1_CIPHERUNICORN_A.syr
FPGA1_CIPHERUNICORN_A.map.mrp FPGA1_CIPHERUNICORN_A.pwr FPGA1_CIPHERUNICORN_A.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Hierocrypt-3>
<コア>
Hierocrypt_3.summary.html
Hierocrypt_3.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_Hierocrypt_3.summary.html FPGA1_Hierocrypt_3.syr
FPGA1_Hierocrypt_3.map.mrp FPGA1_Hierocrypt_3.pwr FPGA1_Hierocrypt_3.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<MUGI>
<コア>
MUGI.summary.html
MUGI.syn ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_MUGI.summary.html FPGA1_MUGI.syr
FPGA1_MUGI.map.mrp
ISE synthesis summary ISE synthesis report ISE mapping report
MULTI_S01.summary.html
MULTI_S01.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_MULTI_S01.summary.html FPGA1_MULTI_S01.syr
FPGA1_MULTI_S01.map.mrp FPGA1_MULTI_S01.pwr FPGA1_MULTI_S01.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<SC2000>
<コア>
SC2000.summary.html
SC2000.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_SC2000.summary.html FPGA1_SC2000.syr
FPGA1_SC2000.map.mrp FPGA1_SC2000.pwr FPGA1_SC2000.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Virtex-5>
<AES>
<コア>
AES.summary.html
AES.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_AES.summary.html FPGA1_AES.syr
FPGA1_AES.map.mrp FPGA1_AES.pwr FPGA1_AES.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Camellia>
<コア>
Camellia.summary.html
Camellia.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_Camellia.summary.html FPGA1_Camellia.syr
FPGA1_Camellia.map.mrp FPGA1_Camellia.pwr FPGA1_Camellia.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<CIPHERUNICORN-A>
<コア>
CIPHERUNICORN_A.summary.html
CIPHERUNICORN_A.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_CIPHERUNICORN_A.summary.html FPGA1_CIPHERUNICORN_A.syr
FPGA1_CIPHERUNICORN_A.map.mrp FPGA1_CIPHERUNICORN_A.pwr FPGA1_CIPHERUNICORN_A.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Hierocrypt-3>
<コア>
Hierocrypt_3.summary.html
Hierocrypt_3.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_Hierocrypt_3.summary.html FPGA1_Hierocrypt_3.syr
FPGA1_Hierocrypt_3.map.mrp FPGA1_Hierocrypt_3.pwr FPGA1_Hierocrypt_3.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<MUGI>
<コア>
MUGI.summary.html ISE synthesis summary
FPGA1_MUGI.summary.html FPGA1_MUGI.syr
FPGA1_MUGI.map.mrp FPGA1_MUGI.pwr FPGA1_MUGI.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<MULTI-S01>
<コア>
MULTI_S01.summary.html
MULTI_S01.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_MULTI_S01.summary.html FPGA1_MULTI_S01.syr
FPGA1_MULTI_S01.map.mrp FPGA1_MULTI_S01.pwr FPGA1_MULTI_S01.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<SC2000>
<コア>
SC2000.summary.html
SC2000.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_SC2000.summary.html FPGA1_SC2000.syr
FPGA1_SC2000.map.mrp FPGA1_SC2000.pwr FPGA1_SC2000.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Virtex-5>
<AES>
<コア>
AES.summary.html
AES.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_AES.summary.html FPGA1_AES.syr
FPGA1_AES.map.mrp FPGA1_AES.pwr FPGA1_AES.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Camellia>
<コア>
Camellia.summary.html
Camellia.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_Camellia.summary.html FPGA1_Camellia.syr
FPGA1_Camellia.map.mrp FPGA1_Camellia.pwr FPGA1_Camellia.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<CIPHERUNICORN-A>
<コア>
CIPHERUNICORN_A.summary.html
CIPHERUNICORN_A.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_CIPHERUNICORN_A.summary.html FPGA1_CIPHERUNICORN_A.syr
FPGA1_CIPHERUNICORN_A.map.mrp FPGA1_CIPHERUNICORN_A.pwr FPGA1_CIPHERUNICORN_A.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<Hierocrypt-3>
<コア>
Hierocrypt_3.summary.html
Hierocrypt_3.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_Hierocrypt_3.summary.html ISE synthesis summary
<コア>
MUGI.summary.html
MUGI.syn ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_MUGI.summary.html FPGA1_MUGI.syr
FPGA1_MUGI.map.mrp FPGA1_MUGI.pwr FPGA1_MUGI.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<MULTI-S01>
<コア>
MULTI_S01.summary.html
MULTI_S01.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_MULTI_S01.summary.html FPGA1_MULTI_S01.syr
FPGA1_MULTI_S01.map.mrp FPGA1_MULTI_S01.pwr FPGA1_MULTI_S01.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<SC2000>
<コア>
SC2000.summary.html
SC2000.syr ISE synthesis summary
ISE synthesis report
<コア+インタフェース>
FPGA1_SC2000.summary.html FPGA1_SC2000.syr
FPGA1_SC2000.map.mrp FPGA1_SC2000.pwr FPGA1_SC2000.twr
ISE synthesis summary ISE synthesis report ISE mapping report ISE power analysis report ISE timing report
<コンフィギュレーションデータ>
<Virtex-5>
<AES>
AES.bit
AES.mcs Virtex-5 bit-stream file
Virtex-5 PROM file
<Camellia>
Camellia.bit
Camellia.mcs Virtex-5 bit-stream file
Virtex-5 PROM file
<CIPHERUNICORN-A>
CIPHERUNICORN_A.bit
CIPHERUNICORN_A.mcs Virtex-5 bit-stream file
Virtex-5 PROM file
<Hierocrypt-3 >
Hierocrypt_3.bit
Hierocrypt_3.mcs Virtex-5 bit-stream file
Virtex-5 PROM file
<MUGI>
MUGI.bit
MUGI.mcs Virtex-5 bit-stream file
Virtex-5 PROM file
<MULTI-S01>
MULTI_S01.bit
MULTI_S01.mcs Virtex-5 bit-stream file
Virtex-5 PROM file
<SC2000>
SC2000.bit
SC2000.mcs Virtex-5 bit-stream file
Virtex-5 PROM file
<Spartan-3>
FPGA2.bit FPGA2.mcs FPGA2_12MHz.bit FPGA2_12MHz.mcs
Spartan-3 bit-stream file (24MHz版) Spartan-3 PROM file (24MHz版) Spartan-3 bit-stream file (12MHz版) Spartan-3 PROM file (12MHz版)
<制御プログラム>
algorithm_test.cs algorithm_test.exe FTD2XX_NET.dll FTD2XX_NET.xml
PC上の制御プログラムソースファイル PC上の制御プログラム実行ファイル USB制御用DLLファイル
USB制御用XMLファイル
MULTI-S01.txt
SC2000.txt MULTI-S01用スクリプトファイル
SC2000用スクリプトファイル
表
1.2 DISC2
の内容<回路ソースファイル>
<Virtex-5>
<AES>
AES.ucf AES.v AES_tb.v FPGA1_AES.v lbus_if.v
I/Oピン指定ファイル 暗号回路コアソースファイル 暗号回路コアテストベンチ
号回路トップモジュールソースファイル インタフェース回路ソースファイル
<Camellia>
Camellia.ucf Camellia.v Camellia_tb.v FPGA1_Camellia.v lbus_if.v
I/Oピン指定ファイル 暗号回路コアソースファイル 暗号回路コアテストベンチ
号回路トップモジュールソースファイル インタフェース回路ソースファイル
<CIPHERUNICORN-A>
CIPHERUNICORN-A.ucf CIPHERUNICORN-A.v CIPHERUNICORN-A _tb.v FPGA1_ CIPHERUNICORN-A.v lbus_if.v
I/Oピン指定ファイル 暗号回路コアソースファイル 暗号回路コアテストベンチ
号回路トップモジュールソースファイル インタフェース回路ソースファイル
<Hierocrypt-3 >
Hierocrypt-3.ucf Hierocrypt-3.v Hierocrypt-3.v
FPGA1_ Hierocrypt-3.v lbus_if.v
I/Oピン指定ファイル 暗号回路コアソースファイル 暗号回路コアテストベンチ
号回路トップモジュールソースファイル インタフェース回路ソースファイル
<MUGI>
MUGI.ucf MUGI.v MUGI_tb.v FPGA1_MUGI.v lbus_if.v
I/Oピン指定ファイル 暗号回路コアソースファイル 暗号回路コアテストベンチ
号回路トップモジュールソースファイル インタフェース回路ソースファイル
<MULTI-S01>
MULTI-S01.ucf MULTI-S01.v MULTI-S01_tb.v FPGA1_MULTI-S01.v lbus_if.v
I/Oピン指定ファイル 暗号回路コアソースファイル 暗号回路コアテストベンチ
号回路トップモジュールソースファイル インタフェース回路ソースファイル
<SC2000>
SC2000.ucf SC2000.v SC2000_tb.v FPGA1_SC2000.v lbus_if.v
I/Oピン指定ファイル 暗号回路コアソースファイル 暗号回路コアテストベンチ
号回路トップモジュールソースファイル インタフェース回路ソースファイル
<Spartan-3>
chip_sasebo_gii_ctrl_12MHz.v Spartan-3用制御回路 (12MHz版)
表
1.3
は上記“暗号名.v”ファイルの暗号マクロブロックに共通のI/O
ポートである.なお,データ入 出力のタイミングは暗号アルゴリズム毎に異なっている.ストリーム暗号のMULTI-S01
と疑似乱数生 成器MUGI
のI/O
は7
章と8
章に示すが,表1.3
のインタフェースをほぼ踏襲している次章以下,各暗アルゴリズムを示した後,ハードウェアのデータパス構成とタイミングチャートの説 明を行う.
表
1.3
ブロック暗号のI/O
ポートポート名 方向 サイズ 説 明
RSTn In 1
リセット信号.RSTn=0 で,シーケンサと内部レジスタがリセットさ れる.リセットは全ての処理に優先し,クロック信号
CLK
が入って いる限りEN=0
でも,実行される.CLK In 1
システムクロック信号.全てのレジスタはこのクロックの立ち上がり に同期して,データの入出力を行う.Kin In 128
鍵入力ポート.Din In 128
データ入力ポート.Krdy In 1 EN=1
のとき,Krdy=1でKin
から秘密鍵を取り込み,鍵の事前処理が開始される.
Drdy In 1
EN=1
のとき,Drdy=1
でDin
から平文(EncDec=0)
または暗号文(EncDec=1)をを取り込み,直ちに暗号化・復号処理を開始する.
Drdy=1
を与える前に鍵の事前処理が完了していなければならない.
EncDec In 1 EncDec=0
で暗号化,EncDec=1で復号を行う.EN In 1
イネーブル信号.
EN=1
でマクロがアクティブとなり,EN=0
のとき リセットを除く全ての処理は一時停止する.再びEN=1
とすると,一時停止したところから処理が再開する.
Dout Out 128
データ出力ポート.暗号化処理の後
Dvld=1
となると暗号文を,復号処理の場合は平文が出力される.Dvld=1 であるクロックサ イクルでのみ有効な値が出力される.
Busy Out 1
ビジー信号.鍵の事前処理または暗号化・復号処理が行われて いる間
Busy=1
となる.Busy=1の間は,Krdy=1やDrdy=1
を与え ることはできない.Dvld Out 1
暗号化または復号処理が終了し,ポートDout
にデータが出力される
1
クロックサイクルの間Dvld=1
となる.Kvld Out 1
リセットまたは鍵が入力された直後に
Kvld=0
となり,鍵の事前処 理が終了して鍵レジスタがセットされると,マクロによってその後Kvld=1
をキープするか,1クロックだけKvld=1
となる.2. AES
図
2.1
に128
ビット鍵によるAES
アルゴリズムの暗号化処理の流れを示す.入力された秘密鍵は 右側のKey Generator
によって11
組のラウンド鍵に変換される.128
ビットの平文データはまず,4
行×4
列の16
バイトのマトリクス状に並べられ,4
つの基本関数SubBytes, ShiftRows, MixColumns
そし てAddRoundKey
が繰返し適用される.SubBytes
はバイト単位の非線形変換S-box
を16
個集めた もので,ガロア体GF(2
8)
上の乗法逆元演算に続いてアフィン変換を行なう.復号のInvSubBytes
で は逆アフィン変換の後に逆元演算が行なわれる.ShiftRows
は各4×4
バイト行列をバイト単位で行 ごとに,あらかじめ決められたオフセット分巡回シフトする.復号の逆演算は各行を逆方向にシフトす ればよく,これはInvSiftRows
と呼ばれる.MixColumns
では列方向の4
バイトを4
項式の各係数と 見なした多項式と乗算を行う.AddRoundKey
はビット単位のデータとラウンド鍵とのXOR
演算である.鍵スケジューラでは,入力された
128
ビットの秘密鍵k0から10
組のラウンド鍵k1~k
10を生成するのに,4
つのS-box(=4
バイト分)
と10
組の4
バイト定数rc1~rc
10が用いられる.なおrc1~rc
10の下位3
バイ トは0
である.復号では鍵が暗号化とは逆の順序で使用されるのと同時に,暗号化の逆関数が暗号 文に施されて平文に変換される.00 8
a a01a02a03 a10a11 a13 a20a21a22a23 a30a31a32a33
a
ij bb0010bb0111b02bb0313b20b21b22b23 b30b31b32b33
b
ijS-box
a00a01a02a03 a10a11 a13 a20a21a22a23 a30a31a32a33
b00b01b02b03 b10b11 b13 b20b21b22b23 b30b31b32b33
a12 b12
no shift right rotation by 3 right rotation by 2 right rotation by 1
a00a01 a03
a10a11 a13
a20a21 a23
a30a31 a33
a
1j bb0010bb0111 bb0313b20b21 b23
b30b31 b33
a
0ja
2ja
3jb
1j0jb
b
2jb
3j( )
x c
a00a01a02a03
a10a11 a13 a20a21a22a23 a30a31a32a33
b00b01b02b03
b10b11 b13 b20b21b22b23 b30b31b32b33 a12 k00k01k02k03 b12
k10k11 k13 k20k21k22k23 k30k31k32k33
k12
AddRoundKey MixColumns
ShiftRows SubBytes
AddRoundKey ShiftRows
SubBytes AddRoundKey
MixColumns ShiftRows
SubBytes AddRoundKey
8 8
8 8 8
S-box
<<8 rc1
S-box
<<8 S-box
<<8
32 32 32 32
128
128
128
128
rc9
rc10
k0
k1
k9
k10
平文 秘密鍵
暗号文
図
2.1 AES
の暗号化処理AES
のS-box
は次式の規約多項式m(x)によるガロア体GF(2
8)上の乗法逆元演算が用いられる.
1 )
( x x
8 x
4 x
3 x
m
暗号化では逆元演算に続いてアフィン変換Aが,復号では逆変換A–1に続いて逆元演算が行な われる.
0 1 1 0 0 0 1 1
1 1 1 1 1 0 0 0
0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0
0 0 0 1 1 1 1 1
1 0 0 0 1 1 1 1
1 1 0 0 0 1 1 1
1 1 1 0 0 0 1 1
1 1 1 1 0 0 0 1
:
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
a a a a a a a a
b b b b b b b b
A
1 1 1 1
0 1 0 1 0 0 1 0
0 0 1 0 1 0 0 1
1 0 0 1 0 1 0 0
0 1 0 0 1 0 1 0
0 0 1 0 0 1 0 1
1 0 0 1 0 0 1 0
0 1 0 0 1 0 0 1
1 0 1 0 0 1 0 0
:
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
1
a a a a a a a a
b b b b b b b b
A
拡散層
MixColumns
は4×4
バイト行列の各列をxの3
次多項式の4
つの係数として扱い,次式と 乗算じた後にx4+1
の剰余を求める演算である.} 02 { } 01 { } 01 { } 03 { )
( x x
3 x
2 x
c
復号における
InvMixColumns
は次の多項式を用いる.} E 0 { } 09 { } D 0 { } B 0 { )
(
3 21
x x x x
c
図
2.2
は高速実装を目的に,内部バス幅を128
ビットと広く取ったAES
のデータパスである.S-box
内のガロア体GF(2
8)
の逆元演算器(テーブルで実装)や,マトリクス乗算であるMixColumns
とInvMixColumns
の 共 通 項 の 共 有 化 を 行 っ て い る . コ ン ポ ー ネ ン ト 共 有 の た め , 復 号 でAddRoundKey
とInvMixColumns
(図2.2
ではInvMixCol.
と表示)の順番を入れ替え,かつそのつじ つまを合わせるために右半分の鍵スケジューラのラウンド鍵出力にMixColumns
を施している.Dreg ShiftRows InvShiftRows
128
GF(2
8) Inverters affine
-1affine
MixCol.
InvMixCol.
EncKreg
128
MixCol.
DecKreg
128
128
SubBytes InvSubBytes
Dout Din
AddRoundKey
128
Key
<<8 S-box
Rcon
i 32 12832 32 32
32
32 32 32 32
図
2.2 AES
回路のデータパス図
2.3
に最短サイクルでの暗号化処理のタイミングチャートを示す.各クロックの動作は下記の通り である.CLK1: RSTn=0
とすることで,制御回路がリセットされる.CLK2: Krdy=1
とすることで,Kin
に入力された128bit
の秘密鍵が内部レジスタにセットされる.CLK3: EncDec=0
なので暗号化処理であるが,復号処理ブロック側で復号処理の最初のラウンド鍵(暗号化処理の最終ラウンド鍵)を生成する初期化が開始され,ビジー信号
BSY=1
となる.Kout
には暗号化処理側の回路ブロックからの出力が接続されているので,鍵初期化時にラウ ンド鍵は出力されない.CLK14:
鍵の初期化が終了し,BSY=0,また1
クロックだけKvld=1
となる.それと同時に Dinに入力された
128bit
の平文が内部レジスタにセットされる.CLK15: EncDec=0
なので暗号化処理が開始され,ビジー信号BSY=1
となる.これから毎クロック,Kout
にラウンド鍵が出力されていく.CLK16~25:
暗号化処理は0
クロックを要し,CLK25で完了する.128bitの暗号文がDout
から出力 され,BSY=0,データ出力信号Dvld=1
が1
クロックだけ出力される.CLK RSTn
Kin
BSY
Dvld Kvld Din
Dout
0 1 2 11 22 24 25
EN
Krdy
Drdy
23 26
EncDec
12 13 14 15
11 clock 10 clock
3
Kr2
Kr1 Kr9
Kout Kr10
Key
PT
CT
図
2.3 AES
の暗号化処理のタイミングチャート図
2.4
に最短サイクルでの復号処理のタイミングチャートを示す.各クロックの動作は下記の通りで ある.CLK1: RSTn=0
とすることで,制御回路がリセットされる.CLK2: Krdy=1
とすることで,Kin
に入力された128bit
の秘密鍵が内部レジスタにセットされる.CLK3:
復号処理の最初のラウンド鍵(暗号化処理の最終ラウンド鍵)を生成する初期化が開始され,ビジー信号
BSY=1
となる.CLK14:
鍵の初期化が終了し,BSY=0
,またKvld=1
となる.それと同時にDin
に入力された128bit
の暗号文が内部レジスタにセットされる.CLK15: EncDec
=1
なので復号処理が開始され,ビジー信号BSY=1
となる.これから毎クロック,Kout
にラウンド鍵が出力されていく.CLK16~25:
復号処理は暗号化処理と同様に10
クロックを要し,CLK25
で完了する.128bit
の平文 がDout
から出力され,BSY=0
,データ出力信号Dvld=1
が1
クロックだけ出力される.CLK RSTn
Kin
BSY
Dvld Kvld Din
Dout
0 1 2 11 22 24 25
EN
Krdy
Drdy
23 26
EncDec
12 13 14 15
11 clock 10 clock
3
Kr2
Kr1 Kr9
Kout Kr10
Key
CT
PT Kr1 Kr9 Kr10
図
2.4 AES
の復号処理のタイミングチャート3. Camellia
図
3.1
に128
ビット鍵によるCamellia
アルゴリズムの暗号化処理を示す.図左半分の22
ラウン ドのデータ攪拌部は,6
ラウンドのFeistel
ネットワークブロックと,そのブロック間の2
つの線形変換
FL/FL
-1,そして入出力時の128
ビットデータと128
ビットラウンド鍵とのXOR
から構成される.
128
ビットの入力データは,左右64
ビットずつに分解され,Feistel
ネットワークブ ロックではその左半分がF
関数で64
ビットラウンド鍵を用いて変換された後,右半分にXOR
される.そして左右が入れ替えられて,ラウンド鍵を変えながら同様の処理が繰り返される.F
関数への64
ビット入力は,64
ビットのラウンド鍵とXOR
された後,8
つの8
ビットブロック に分割され,4
種類(S1~S4)×2
組のS-box
で変換され,さらに64
ビット全体に対してP
関数によ る変換が施される.復号は暗号化と同じ処理に対して,ラウンド鍵を逆順にスケジュールす ることで実行される.各ラウンド鍵は
128
ビットの秘密鍵KLと128
ビットの中間鍵KAを表10
のように巡回シフト したもので,中間鍵KAは図3.2
に示したように,秘密鍵KLにF
関数を4
回施すことで生成され る.表
3.1
鍵スケジューリングInitial XOR
kw1(64)kw2(64)
(K
L<<<0)
L(64)(K
L<<<0)
R(64)F
Round 1 Round 2 Round 3 Round 4 Round 5 Round 6
k1(64)
k2(64)
k3(64)
k4(64)
k5(64)
k6(64)
(K
A<<<0)
L(64)(K
A<<<0)
R(64)(K
L<<<15)
L(64)(K
L<<<15)
R(64)(K
A<<<15)
L(64)(K
A<<<15)
R(64)FL
FL
-1 kl1(64)kl2(64)
(K
A<<<30)
L(64)(K
A<<<30)
R(64)F
Round 7 Round 8 Round 9 Round 10 Round 11 Round 12
k7(64)
k8(64)
k9(64)
k10(64)
k11(64)
k12(64)
(K
L<<<45)
L(64)(K
L<<<45)
R(64)(K
A<<<45)
L(64)(K
L<<<60)
R(64)(K
A<<<60)
L(64)(K
A<<<60)
R(64)FL
FL
-1 kl3(64)kl4(64)
(K
L<<<77)
L(64)(K
L<<<77)
R(64)F
Round 13 Round 14 Round 15 Round 16 Round 17 Round 18
k13(64)
k14(64)
k15(64)
k16(64)
k17(64)
k18(64)
(K
L<<<94)
L(64)(K
L<<<94)
R(64)(K
A<<<94)
L(64)(K
A<<<94)
R(64)(K
L<<<111)
L(64)(K
L<<<111)
R(64)Final XOR
Kw3(64)Kw4(64)
(K
A<<<111)
L(64)(K
A<<<111)
R(64)Feistel Network
64 64
FL FL-1
kw1 kw2
k1~6
Feistel Network FL FL-1 k7~12
Feistel Network k13~18
kw3 kw4
kl1 kl2
kl3 kl4
F
F
F
F
F
F kw1
kw2
kw3
kw4
kw5
kw6 64
64 64
8 8 S1
8 8 S4
8 8 S3
8 8 S2
8 8 S4
8 8 S3
8 8 S2
8 8 S1
8 8 8 8 8 8 8 8 64
<<1 AND
OR
64 32 32
32 64 32
64 32 32
kl
64 32
32 64
32
kl
<<1 AND
OR
64 32 32
32
FL FL-1
P関数 平文
暗号文
図
3.1 Camellia
の暗号化処理F
F
1
KL 64
64
64 12864
128 128
2
F
F
3
KA 64
64
64 64
128
3
KL
図
3.2 中間鍵
KAの生成Camellia
の4
種類のS-box S1~S4
はいずれも,次のガロア体GF((2
4)
2)
上の乗法逆元演算と,そ の前後に施されるアフィン変換FおよびHによって構成される.図3.3
に示したようにS1
の出力ビッ ト列を1
ビット右に巡回シフトした変換がS2
,1ビット左巡回シフトしたものがS3
,そして入力ビット列を1
ビット左巡回シフトしたものがS4
である.なお,今回の回路実装では,S-box
は8
ビット入出力のル ックアップテーブル実装としている.x
8>>1
F H
S1
Inverter GF
8y
8
y x
8<<1
S1
8y
x
8S1
8y x
8<<1
S1)
S2)
S3)
S4)
図3.3 Camellia
のS-box
構成
}) 1001 { ( )
( : ) ) 2 ((
GF
1 )
( : ) 2 ( GF
2 2
4
4 0
4
x x x gx x x g
1 1 1 1
0 0 1 0 1 0 0 0
1 0 0 0 0 0 0 1
0 0 0 1 0 0 1 0
0 1 0 0 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 1 0 1 0 0
0 1 0 0 0 0 0 1
0 0 1 0 0 0 1 0
:
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
a a a a a a a a
b b b b b b b b
F
0 1 1 1 0 1 1 0
0 0 1 0 0 1 0 0
0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 1
0 1 0 0 0 1 0 0
1 0 0 0 0 0 1 0
0 1 0 0 1 0 0 0
0 0 1 0 0 0 1 0
0 0 1 1 0 0 1 0
:
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
a a a a a a a a
b b b b b b b b
H
図
3.4
にCamellia
ハードウェアマクロのデータパスアーキテクチャを示す.1
クロックで変換されるデータビット数は,
FL/FL
-1,key whitening
が128
ビットで,それ以外は64
ビットである.1
回の暗号 化および復号の処理クロック数は,Key whitening
とFL/FL
-1に各2
クロック,F
関数に18
クロック,デ ータI/O
に1
クロックで,計23
クロックとなる.データ出力
P FL S
FL
-164 64 64 64 64
12864 64
64
64 64
データ入力
>>16 <<16
>>1 <<1 128
128
64 64 128 128
1~40
鍵入力データ攪拌部
64 64
鍵スケジュール部
128
図
3.4 Camellia
回路のデータパス<<1
>>1
kl
Lkl
Hsel
en
32 32
<<1
>>1
kl
Lkl
Hsel en
32
32 32
32 32 32 32
32 32
(a) FL
関数(b) FL
-1関数図
3.5 FL/FL
-1回路ブロック図
3.6
に暗号化と復号処理のタイミングチャート示す.データ入出力は全てクロックの立ち上がりに 同期しており,この例で信号の制御は最短のサイクルで行われている.CLK1:
リセット信号RSTn=0
とすることで,シーケンサーロジックと内部レジスタがクリアされる.CLK2:
イネーブル信号EN=1
,鍵入力用信号Drdy=1
とすることで,鍵入力ポートKin
上の秘密鍵K
がマクロの内部鍵レジスタにストアされる.直ちに中間鍵生成処理が開始され,ビジー信号がBusy=1
となる.なお,EncDec=1
なので復号モードとなっているが,鍵設定時にこの信号は影響しない.
CLK7:
中間鍵生成が終了し,鍵が有効となったことを示すステータス信号がKvld=1
となると同時にBusy=0
に落ちる.CLK8: Drdy=1
とすることで,EncDec=1(
復号モード)
となっているため,Din
上のデータCT
が暗号文 としてマクロ内のデータレジスタに取り込まれる.それに伴い,復号処理が開始されてBusy=1
と なる.CLK30:
復号処理が終了しBusy=0
に落ち,Dvld=1
となり,データ出力ポートDout
に平文PT
が出 力される.CLK31:
復号処理直後にEncDec=0
として暗号化モードに切り替え,Drdy=1
として平文PT
を取り 込む.これにより直ちに暗号化処理が開始されてBusy=1
となり,Dout
上のデータは無効とな る.CLK53:
暗号化処理が終了しBusy=0
に落ち,Dout
に有効な暗号文CT
が出力され,Dvld=1
とな る.この時点で既にEncDec=1
として復号モードが選択されているが,この信号はデータ入力時 にのみ参照されるため,処理途中の変更は無視されている.CLK54: EncDec=1(
復号モード)
となっているので,Drdy=1
により,Din
上のデータが暗号文として 取り込まれ,復号処理が始まりBusy=1
となる.前のクロックで出力された暗号文は無効となり,Dvld=0
に落ちる.CLK76:
復号が終了しBusy=0
に落ち,Dout
に平文PT
が出力されてDvld=1
となる.CLK RSTn
Din[127:0]
Busy Dvld Kvld Dout[127:0]
0 1 2 52 53 54
EncDec
8 29 30 31
5 clocks
6 7
EN
Drdy
K
CT
22 clocks
PT
PT
22 clocks CT
CT
76 77 75
PT
22 clocks Kin[127:0]
Krdy
図
3.6
暗号化・復号処理のタイミングチャート4. CIPHERUNICORN-A
図4.1に128ビット鍵によるCIPHERUNICORN-Aアルゴリズムの暗号化・復号の処理を示す.
入力データは初期処理として拡大鍵加算された後,16段Feistel構造により撹拌され,終期処 理として拡大鍵減算を行い,処理結果が出力される.図4.2に示すF関数ブロックはテーブル 実装によるバイト単位での非線形変換とXORを中心に構成される.図4.3に示す128ビット鍵 の鍵スケジューラでは,初期処理,終期処理,ラウンド処理用の拡大鍵を生成する.12 段の MT関数に続き,16段のMT関数の循環処理毎に8個の32ビット拡大鍵が生成され,9回の繰り 返しで72個の32ビット拡大鍵が得られる.これらの拡大鍵はラウンド処理の順に生成されな
いため on-the-fly による鍵生成を行うことはできず,拡大鍵は鍵メモリにストアされる.
F
平文EK
0128
暗号文
F
EK
15128
IK
332 32 32 32
IK
3IK
2IK
0128
IK
7IK
6IK
5IK
432 32 32
128
図
4.1 CIPHERUNICORN-A
の暗号化処理EK
T0 T1 T2 T3
A3
Xl
Yl
FKa
FKb
SKa
SKb 32 32 32 32
32 128
32
2 2
0x7e167289
0x7e167289
0x7e167289 0xfe21464b 0xfe21464b
T0 T1 T2 T3
T3 T3 T2 T2 T1 T1 T0 T0
T1 T1 T0 T0 T0 T0
MT
0MT
11MT
0MT
8MT
9MT
15 3232
32
32 32 32
Key
key
0key
1key
7128
MT
0MT
8MT
9MT
15 3232
32
key
64key
65key
7132
図
4.3 CIPHERUNICORN-A
の鍵スケジューリング図