公立はこだて未来大学 2012 年度 システム情報科学実習 グループ報告書 Future University Hakodate 2012 System Information Science Practice Group Report プロジェクト名 暗号ハードウェア・乗算器編 Project Name Cryptrographic Hardware - Multiplier グループ名 Group Name プロジェクト番号/Project No. 09-A プロジェクトリーダ/Project Leader 1010235 木村圭吾 Keigo Kimura グループリーダ/Group Leader 1010235 木村圭吾 Kimura Keigo グループメンバ/Group Member 1010235 木村圭吾 Keigo Kimura 1010040 村山広行 Hiroyuki Murayama 1010173 加藤翔 1010217 小林悠太 Shou Kato Yuta Kobayashi 指導教員 白勢政明 Advisor Masaaki Shirase 提出日 2013 年 1 月 16 日 Date of Submission January 16, 2013 概要 本報告書はプロジェクト学習 No. 9、暗号ハードウェア・乗算器編の報告書である。 昨今 において、暗号は情報通信技術における大きな一分野である。情報通信は第三者からの攻撃の 危険性にさらされている。この第三者からの傍受を防ぐため、通信を暗号化する技術がほぼ全 ての情報通信に使われている。この暗号処理をソフトウェアで行うと CPU の資源の大部分を 占拠してしまう。そこで専用のハードウェアを作成して用いることにより、CPU の資源を占 拠することもなく、高速化を行う。本プロジェクトでは、暗号ハードウェアの一部分である乗 算器に焦点を当てる。乗算は主に RSA 暗号や楕円直線暗号などの公開鍵暗号に使用される。 乗算器は現在、64 ビットまで存在するが、128 ビットの乗算器は存在しない。もし、128 ビッ トの乗算器が現実に出来た場合、暗号処理の高速化ができると考えられる。そこで、公開鍵暗 号の処理の高速化を目指し、128 ビットの乗算器を作成する。作成には FPFA と VHDL を 用いる。 FPGA とは、プログラマブルロジックデバイスの一種であり、ハードウェア記述 言語を用いて構成を設計できる集積回路である。FPGA を用いることで、自分達が設計を考 えた集積回路を容易に開発することができる。VHDL とは論理回路の設計に使われるハード ウェア記述言語の一種であり、これを用いることで FPGA の設計を行うことが出来る。この 2 つを用いて最初は 5 ビットの乗算器の製作を目標とし、最終的に 128 ビットの乗算器を作成 する。128 ビットの乗算器の構成は既存のアルゴリズムを流用するのではなく、文献や教授と の相談も頼りにしつつ、自分達で考えていく。 前期での主な課題は効率の良い乗算器の構成を考えることと、小規模な乗算器を実際に FPGA と VHDL を用いて作ること、C 言語を用いて乗算器の VHDL を機械的に記述するプ ログラムを作成することであった。そこで、我々は FPGA を実際に購入し、VHDL を記述 して乗算器を開発する環境を整えた。VHDL の記述には日本アルテラ社ホームページより無 償提供されているソフトウェア、「QuartusII Web Edition」を用いた。さらに VDHL をシ ミュレートして乗算器が実際にどのような動きをするのかをパソコン上で確認できるようにす るため、「QuartusII Web Edition」と同じく日本アルテラ社ホームページより無償提供され ているソフトウェア「Modelsim Altera」を用いて、実際に FPGA がどう動くのか確認する 環境も整えた。乗算器の構成は教授と相談を重ねることで良い構成を作ることが出来た。そし て、実際に 5 ビット、8 ビットの乗算器の製作にも成功した。しかし、VHDL を記述するプロ グラムの製作は難航し、前期で作ることは出来なかった。 前期の反省としてはプロジェクト内のコミュニケーションが不足していて発表までにお互い の仕事がどこまで進行しているのかをお互いに理解できていなかった。このことが、プロジェ クトのクレに繋がった。後期以降はしっかりと確認作業をしてからプロジェクト活動を終える など、コミュニケーションを円滑に進めていきたいと考えている。 後期の主な課題は C 言語を用いて乗算器の VHDL を機械的に記述するプログラムを作成 し、128 ビットの乗算器を作って実際に稼働することと、実際に作った 128 ビットの乗算器の 性質を調べることであった。これらは前期には出来なかった課題である。 まず、128 ビット の乗算器を作成する際に今ある FPGA では性能不足が考えられるため、Cyclone iv という名 の FPGA を購入し、この Cyclon iv を用いて開発する環境を整えた。 後期の反省を生かし、 週末にお互いの作業確認を行うようにした。また、中間報告書を 9 月から書くなど、早期の準 備を心がけるようにした。 後期の反省としては Cyclone4 で起きた重大なトラブルの解決や VHDL を自動で記述するプ ログラムの作成など、全体的に作業が遅延していたことが上げられる。 今後の展望としては128ビット乗算機の作成を用いた、暗号ハードウェアの作成を目指し ている。 キーワード 暗号処理, ハードウェア, 乗算器, VHDL,FPGA (※文責: 木村圭吾) -i- Abstract This report is created by “Cryptrographic Hardware - Multiplier team.” Cipher is the big field of Information Technology. Network cipher technology is used almost network for intercept from outsiders. However, most resources of CPU will be occupied if encryption is processed by software. But, the resources of CPU will not be occupied if a code is processed by hardware for exclusive use. Moreover, processing of a code is accelerated by hardware for exclusive use. 64 bits multiplier exists at present. However, a 128-bit multiplier does not exist. We think that processing of a code is accelerated still by hardware for exclusive use if a 128-bit multiplier is made actually. Therefore, we create a 128-bit multiplier on FPGA written VHDL aiming at processing of a code is accelerated still. FPGA is an integrated circuit which can design composition using a hardware description language. We can develop easily the integrated circuit which we would like to design to be by using FPGA. We used VHDL for hardware description language. We aimed at creation of a 5-bit multiplier first. The composition of a 128-bit multiplier uses what we considered, after referring to literature or a professor. The existing algorithm does not use. The main subjects in the first semester were decided as three. First, we considered the composition of an efficient multiplier. Second, we actually made a small-scale multiplier using FPGA and VHDL. Finally, we created a program which describes VHDL of a multiplier mechanically using the C language. Therefore, we actually bought FPGA and improved the environment where described VHDL. We used for description of VHDL and the software ”QuartusII Web Edition” which are provided free of charge from the homepage of Altera Corp. Furthermore, We downloaded ”Modelsim Altera”. ”ModeolSim Altera” is software which simulates VHDL.We enable it to check on PC what kind of motion the made multiplier actually carries out by ”ModelSim Altera”. We were able to make the good composition of the multiplier from repeating and consultation. Then, we succeeded also in manufacture of an actually small-scale multiplier. However, we were not able to create the program which describes VHDL. The main subjects in the second semester were decided as three. First, we create the program which describes VHDL of a multiplier mechanically using the C language. Second, we actually making a 128 bit multiplier using FPGA and VHDL. Finally, we examine a quality of 128 bit multiplier. We bought FPGA of the name of Cyclone 4 because we thought that FPGA that we are have is insufficient. Also, we improved the environment where used Cyclone 4. We performed a mutual work check during a weekend from reflection of the second semester. Also, We kept early preparation in mind. For example, we wrote the final report from September. As a result of the effort we were able to make 128-bit multiplier. However, we cannot examine a quality of 128 bit multiplier. Reflection of the second semester is that work was behind. Causes is that we took time in creation of a program, and solution of the error of FPGA. Future prospects is that code we actually created Cryptrographic hardware is using 128-bit multiplier. Keyword Processing of a code,Multiplier, Hardware, VHDL, FPGA (※文責: Kimura Keigo) - ii - 目次 第1章 背景 1 1.1 暗号処理とハードウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 現状における問題点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 公開鍵暗号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3.1 RSA 暗号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3.2 楕円曲線暗号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3.3 公開鍵暗号と乗算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 ハードウェアによる効率化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.5 着目点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.6 課題の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.7 予想 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 到達目標 4 第2章 2.1 本プロジェクトにおける目的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.1 通常の授業ではなく、プロジェクト学習で行う利点 . . . . . . . . . . . . . 4 2.1.2 高速乗算器の必要性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 前年度の暗号プロジェクトと今年度の暗号プロジェクトの違い . . . . . . . . . . . 4 2.3 1 年を通しての目標、課題設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3.1 前期の目標 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3.2 後期の目標 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.4 具体的な手順・課題設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5 課題の割り当て . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5.1 前期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5.2 後期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 第3章 3.1 第4章 課題解決のプロセスの概要 8 今回のプロジェクトで使用した物と使用方法 . . . . . . . . . . . . . . . . . . . . 10 課題解決のプロセスの詳細 15 4.1 各人の課題の概要とプロジェクト内における位置づけ . . . . . . . . . . . . . . . 15 4.2 担当課題解決過程の詳細 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.1 木村圭吾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.2 村山広行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2.3 小林悠太 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.2.4 加藤翔 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 担当課題と他の課題の連携内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3.1 木村圭吾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3.2 村山広行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3 - iii - 第5章 5.1 5.2 5.3 第6章 6.1 6.2 第7章 7.1 7.2 付録 A 付録 B 4.3.3 小林悠太 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.3.4 加藤翔 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 結果 23 プロジェクトの結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.1.1 効率の良い乗算機の配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.1.2 VHDL コードを自動で記述するプログラムの作成 . . . . . . . . . . . . . . 24 成果の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.2.1 効率の良い乗算器の設計 . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.2.2 VHDL のプログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.2.3 総評 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2.4 成果の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.2.5 総評 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 担当分担課題の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.3.1 木村圭吾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.3.2 村山広行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.3.3 小林悠太 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.3.4 加藤翔 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 プロジェクトの結果と反省 33 最終発表の反省 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.1.1 成果発表会アンケート結果 . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.1.2 アンケート結果考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 各個人の反省と感想 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.2.1 木村圭吾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.2.2 加藤翔 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.2.3 村山広行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.2.4 小林悠太 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 今後の課題と展望 39 課題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.1.1 乗算の計算結果を表示する VHDL を作成 . . . . . . . . . . . . . . . . . . 39 7.1.2 Verilog の学習 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.1.3 既存の乗算器との比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 展望 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.2.1 暗号ハードウェアの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.2.2 暗号ハードウェアの作成に必要なハードウェアとアルゴリズム . . . . . . . 40 7.2.3 256ビットの乗算器の作成 . . . . . . . . . . . . . . . . . . . . . . . . . 40 新規習得技術 42 A.0.4 本プロジェクト独自の新規習得技術 . . . . . . . . . . . . . . . . . . . . . 42 A.0.5 本プロジェクト独自の新規習得技術 . . . . . . . . . . . . . . . . . . . . . 42 使用した講義 43 - iv - 参考文献 44 -v- Cryptrographic Hardware - Multiplier 第1章 1.1 背景 暗号処理とハードウェア 現在、暗号は情報技術、特に通信技術における大きな一分野である。情報通信において、通信は 常に第三者からの傍受の危険性を持っている。もし傍受されると個人情報の流出など、場合によっ て多くの人々が損害を受けてしまう。そこで通信を暗号化する。こうすることで、第三者からの攻 撃を防ぐことができる。この通信の暗号化技術はほぼ全ての情報通信に使われている。この暗号化 には主に公開鍵暗号である RSA 暗号や楕円曲線暗号が用いられる。この二つの暗号は暗号化と暗 号を解読する復号に別々の手順を使い、暗号化の為の鍵を公開できるようにした方式である。この 方式を公開鍵暗号と呼ぶ。この 2 つは上記の用途の他に暗号の配布と電子署名に使われる。ここで 言う暗号の配布とは、共通鍵暗号と呼ばれる、暗号化と復号の方法が同じである暗号を公開鍵暗号 で暗号して第三者に配布することである。こうすることにより通信を行う際に情報の流出が防げ、 安全になる。 (※文責: 木村圭吾) 1.2 現状における問題点 このように暗号処理は数多くの情報通信技術に使われるが、暗号処理をソフトウェアで実行する と CPU の処理能力の大部分を占拠してしまう。また、RSA 暗号や楕円曲線暗号は暗号化などの 過程で下記のように非常に大きな数の乗算を行なっており、この乗算を早く行うことが求められて いる。さらに公開鍵暗号は共通鍵暗号と比べて、安全性は高いが処理が非常に時間が掛かるという 欠点が存在する。 (※文責: 木村圭吾) 1.3 公開鍵暗号 1.3.1 RSA 暗号 公開鍵暗号は、数学的な一方向性に基づいて作られている。RSA 暗号の場合は、「素数と素数の 掛け算は簡単だが、その逆の素因数分解は難しい」という一方向性を利用している。RSA 暗号は 桁数が大きければ大きいほど暗号強度が高まるという性質がある。現在の RSA 暗号は元の素数は 150∼300 桁以上、掛けた後の素数は 300∼600 桁以上の非常に大きな数字を使っている。 (※文責: 木村圭吾) Group Report of 2012 SISP -1- Group Number 09-A Cryptrographic Hardware - Multiplier 1.3.2 楕円曲線暗号 楕円曲線と呼ばれる数式によって定義される特殊な加算法に基づいて暗号化・復号を行う暗号方 式。また、楕円曲線を利用した暗号の総称である。RSA 暗号が大きな数の素因数分解の困難さを 安全性の根拠とする RSA 暗号に対し、楕円曲線の離散対数問題(EC-DLP) を解くのは莫大な時 間がかかる事を安全性の根拠とする。スカラー倍算と呼ばれる計算があり、これを利用して暗号化 を行う。素数の掛け算は簡単だが、その掛け算されたものから素数を求めるのは時間がかかるよう に、このスカラー倍算を構成する離散対数を見つけるのは難しい。これが安全性の根拠である。安 全性は RSA 暗号と同程度だと言われる。 (※文責: 木村圭吾) 1.3.3 公開鍵暗号と乗算 RSA 暗号や楕円曲線暗号では大きな数の乗算が多く使用される。RSA 暗号では暗号と復号のた めの鍵の生成、暗号化、復号化の全ての過程に置いて冪剰余を求める過程がある。この冪剰余を求 める際に乗算が使用される。乗算を用いて冪剰余を求める方法の代表的なものにモンゴメリ上さん がある。また、楕円曲線暗号の場合も乗算が使用される。この乗算の高速化を行うと RSA 暗号と 楕円曲線暗号の両方において暗号処理も早くすることが出来る。 (※文責: 木村圭吾) 1.4 ハードウェアによる効率化 上記で述べたように暗号処理をソフトウェアで行うと CPU の処理能力の大部分を占拠してし まう、この問題の解決手法の一つに専用のハードウェアを用いるという方法がある。これにより CPU の処理能力を占拠せず、高速化が出来る。この専用のハードウェアを作成することによる効 率化は暗号処理だけでなく、グラフィック専用のハードウェアである GPU に代表されるように、 様々な分野で使用される。また、通常のコンピュータではあまり必要とされないが、莫大な計算の 暗号処理をするような専門的な分野では必須である。さらに暗号処理は単純な処理の繰り返しのた め、ハードウェアで実装しやすいという特徴がある。 (※文責: 木村圭吾) 1.5 着目点 そこで本プロジェクトでは、暗号ハードウェアの一部分である乗算器に焦点を当てる。乗算器と は文字通り乗算を行う論理回路である。乗算は上記で述べたように RSA 暗号や楕円曲線暗号など の公開鍵暗号に使用される。乗算器は現在 64 ビットの乗算器まで存在するが、本プロジェクトで 確認した限り、128 ビットの乗算器は存在しない。もし 128 ビットの乗算器が出来れば大きな数の 乗算の高速化が望める。また、ただ通常の乗算器を作成するのではなく通常の乗算器より処理の速 い Wallace tree 型乗算器という乗算器に注目した。暗号ハードウェアには、乗算器以外に加算器 Group Report of 2012 SISP -2- Group Number 09-A Cryptrographic Hardware - Multiplier や制御器などは現段階ではこれ以上の改良は見込めない状況である。しかし、この乗算器というも のは暗号ハードウェアの部品の中で最も作成が難しい部分の一つであるが、一番改良の余地がある 部分である。この部分を改良することに挑戦していきたい。 (※文責: 木村圭吾) 1.6 課題の概要 公開鍵暗号の処理の高速化を目指し、128 ビットの乗算器を VHDL と FPGA を用いて作成す る。FPGA とは、ハードウェア記述言語を用いて論理回路を実装できる集積回路である。FPGA を用いることで、設計した論理回路を容易に実装することができる。また、FPGA の中に制御器 やメモリ、加算器などのプログラムを入れることにより、暗号ハードウェアが完成する。一方、 VHDL とはハードウェア記述言語の一種であり、論理回路を設計する際に使用される。乗算器の 構成は通常のアルゴリズムを流用するのではなく、文献や教授との相談も行いながら考え、通常の 物より効率が良いアルゴリズムを作成する。その結果、今回は Wallace tree 型乗算器という乗算器 を作成することになった。中間発表までの成果目標としては、この Wallace tree 型乗算器という 乗算器で作成した 5 ビットと 8 ビットの乗算器の設計を目標とし、最終的に 128 ビットの乗算器 の設計を行う。また、VHDL 記述プログラムを C 言語を用いて出力するといったような工夫も案 として出ている。もし、出来なかった場合は原因を洗い出し、来年のプロジェクトに繋げていく。 (※文責: 木村圭吾) 1.7 予想 もし、128 ビットの乗算器が現実に設計できた場合、暗号処理の高速化ができる。例えば、64 ビットの乗算機で、現在の RSA 暗号の鍵生成で用いられる素数の標準的なビット数である、1024 ビット× 1024 ビットの乗算を行った場合、256 回の乗算が必要である。もし 128 ビットの乗算 器で、1024 ビット× 1024 ビットの乗算を行った場合、64 回となる。このように、128 ビットの 乗算器があった場合、大きな数値の乗算を高速で行うことが出来ると考えられる。また、今回プロ ジェクト学習で作ることになった Wallace tree 型乗算器は通常の乗算器と比べ乗算器を作るうえ で大切な計算を行うプログラムの構造が、無駄の少ない効率的なものになっているためより速い処 理で計算を行うことが出来る。128 ビット乗算器を作った例は今のところ発見にしておらず、乗算 器を構成するハードウェアである FPGA の能力不足で、このプロジェクトの目的が失敗するとい うことが私たちのプロジェクトの心配要因である。 (※文責: 木村圭吾) Group Report of 2012 SISP -3- Group Number 09-A Cryptrographic Hardware - Multiplier 第 2 章 到達目標 2.1 本プロジェクトにおける目的 128 ビットの高速乗算器を設計することにより、暗号処理能力が向上し、既存の暗号処理をより 高速に解くことが出来るようになるので、暗号処理をハードウェアのみで行い、今までとは異な り、その他のシステムに負荷をかけずに暗号を解くことが出来るようになる可能性がある。 (※文責: 小林悠太) 2.1.1 通常の授業ではなく、プロジェクト学習で行う利点 本プロジェクトでは、乗算器の構造の配置の解析やハードウェア記述言語で回路設計、また設計 した回路をハードウェアに実装するなどプロジェクト内の作業の専門性が高く、作業分担を行い、 効率良くモノを作るプロジェクトであるので、各担当ごとに必要となる知識が異なるので、講師が 生徒全員に対して同じ講義や演習形式を行う通常の授業より、プロジェクト学習として行ったほう が利点がある。 (※文責: 加藤翔) 2.1.2 高速乗算器の必要性 128 ビットの高速乗算器を設計することにより、暗号処理能力が向上し、既存の暗号処理をより 高速に解くことが出来るようになるので、暗号処理をハードウェアのみで行い、今までとは異な り、その他のシステムに負荷をかけずに暗号を解くことが出来るようになる可能性がある。 (※文責: 加藤翔) 2.2 前年度の暗号プロジェクトと今年度の暗号プロジェクトの 違い 前年度の暗号プロジェクトでは「暗号解読の可視化を行う」というタイトルで、iPad を用い暗 号暗号を可視化することにより暗号について知ってもらい、暗号のマイナスイメージの払拭を目的 とするものであった。活動内容はスキュタレー暗号やシーザー暗号などの暗号の歴史や戦争との関 係、頻度分析プログラムの作成、暗号の条件、公開鍵暗号方式や共通鍵暗号方式などの暗号方式、 ハイブリット暗号、RSA 暗号、楕円曲線暗号、データ暗号化標準、コンピュータウィルスなどに ついて調査し、それを多くの人に知ってもらいセキュリティ対策に対して関心を持ってもらうよう 促していた。主に暗号における大まかな知識や暗号の重要性について調べることがプロジェクト活 動の内容だったようだ。一方、今年度の暗号プロジェクトは今までに何度も紹介したように「暗号 ハードウェア‐乗算器編」というタイトルとなっており、乗算器を作ることを目的としたプロジェ Group Report of 2012 SISP -4- Group Number 09-A Cryptrographic Hardware - Multiplier クトである。今年度の暗号プロジェクトでの活動内容は乗算器の構造の配置のアルゴリズムについ ての解析をし、いかに乗算器を速く効率化することが出来るのかという調査や乗算器を作成するた めの VHDL 記述、ハードウェアである FPGA の実装となっている。しかし、中間発表で暗号につ いての説明を踏まえて乗算器の説明をしてほしいということから後期では暗号処理の仕組みについ て調べた。前年度との目的の大きな違いは暗号に関する知識は必要ではなく、乗算器を作るための 技術を必要としているという点である。主にプログラミングやハードウェアに関する知識とスキル が重要視された。メンバーが複雑コースと知能コースに固まったこともあり、計算や計算の考え方 が多い点とハードウェアに関する知識についてはそれぞれが専門とする分野でよかった。 (※文責: 村山広行) 2.3 2.3.1 1 年を通しての目標、課題設定 前期の目標 前期の目標は 8 ビットの Wallace tree 型乗算器の VHDL 記述プログラムを FPGA に実装する ことである。5 月と 6 月はほとんど VHDL を記述するためのソフトウェアである Quartus ? Web Edition や FPGA の使い方や知識について学習する。また、通常の乗算器と Wallace tree 型乗算 器の違いを学び、どのような形にしたら計算速度を早くすることが出来るのかということについて 研究を行う。実際にプログラムを書きはじめたのは 6 月の半ばあたりからである。まず、2 ビット や 3 ビットの乗算器を VHDL で記述し、その延長線上でプログラムを増やしていき 5 ビットの乗 算器を作成した。8 ビット乗算器を作成することも 5 ビット乗算器の延長線上で作ることが出来る のだが、ビットが少し増えるだけでプログラムのソースコードの桁が膨大に増えるので手間がかか り大変な作業であった。8 ビットの乗算器のプログラムを FPGA に実装するに当たっては画面に 数字を出力するところまで作業を進めることが出来た。実装した後に、FPGA に直接数字を入力 して画面上に乗算した数字を表示するという作業がとても大変だった。VHDL で記述した作成し た 8 ビット乗算器の改善策を考える。 (※文責: 村山広行) 2.3.2 後期の目標 後期の目標は 128 の Wallace tree 型ビット乗算器の完成である。前期に作成した 8 ビット乗算 器の改善点の改良、前期の目標と同じように FPGA に計算結果の数値を出力できるようにするこ とである。前期に 8 ビット乗算器を作成することの成功した結果の改良点としては、VHDL で 128 ビットのプログラムを直接書くのはとてもではないがうまくいくとは思えないということだった。 したがって、私たちは C 言語を用い 128 ビット乗算器のプログラムをより効率よく書くことが出 来るように工夫することにした。C 言語を用い VHDL を記述したプログラムを FPGA に実装し、 その計算結果を画面に出力する。また、後期に使う FPGA(Cyclone 4) は前期に使った FPGA よ りも性能がよいものであり、使い方もより高度になる。したがって、FPGA の取り扱いについて も学習しなければならない。出来ることなら作ったアルゴリズムを計算上だけで高速化したのかを 比較するのではなく、既存の通常の乗算器と Wallace tree 型乗算器の計算速度の速さを実際に計 算し比較してみるということである。 Group Report of 2012 SISP -5- Group Number 09-A Cryptrographic Hardware - Multiplier (※文責: 村山広行) 具体的な手順・課題設定 2.4 1. 乗算器の構造の配置の解析 課題:一般に用いられている乗算器の構造の配置より、さらに効率の良い構造の配置につい て解析する。既存技術であるハードウェア設計についての知識を用いる。 (※文責: 加藤翔) 2. C 言語を用いて乗算器のハードウェア記述言語を出力 課題:乗算器の計算のアルゴリズムを理解し、C 言語を用いて乗算器のハードウェア記述言 語を出力する。そして最終的に 128 ビットの膨大な加算器の集合の記述も出力できるよう にする。既存技術である C 言語の記述を用いる。 (※文責: 加藤翔) 3. 公開鍵暗号についての調査 課題:設計した乗算器を公開鍵暗号の暗号処理を解くハードウェアの一部として使用できる ように、公開鍵暗号の仕組み、公開鍵暗号における乗算器の役割などを調査する。習得技術 として、公開鍵暗号についての仕組みや、乗算器を公開鍵暗号へ応用する技術を習得するこ とができる。 (※文責: 加藤翔) 課題の割り当て 2.5 各人の得意分野及び関連性、時間軸のスケジュールを基準に以下のように割り当てた。 2.5.1 前期 1. 乗算器の構造の配置の解析(木村) 乗算器の構造の配置について興味を持ち、C++ を用いて独自に構造の配置について考察し たいと自ら立候補した木村を担当とした。 (※文責: 加藤翔) 2. C 言語を用いて乗算器のハードウェア記述言語を出力(加藤・山田) 5 月に行った乗算器の学習中にこの課題について興味を持ち、C 言語の能力を現在より向上 させたいという理由から加藤、山田を担当とした。 (※文責: 加藤翔) 3. ハードウェア記述言語を用いた回路設計(小林) ハードウェア記述言語について興味を持ち、それを用いて回路を設計をしてみたいという理 由から小林を担当とした。 Group Report of 2012 SISP -6- Group Number 09-A Cryptrographic Hardware - Multiplier (※文責: 加藤翔) 4. :設計した回路をハードウェアに実装(畠山) 5 月に行った乗算器の学習中からシミュレーションについて興味を持ち、そのシミュレー ションの結果が実際にハードウェアに実装しても同様な結果を得ることが出来るのかを調べ たいという理由から畠山を担当とした。 (※文責: 加藤翔) 5. 公開鍵暗号についての調査(村山) 今回は最終的にこのプロジェクトで完成した乗算器を使用するために、来年以降最終的に製 作を目指す公開鍵暗号についての調査を、自ら立候補した村山を担当とした。 (※文責: 加藤翔) 2.5.2 後期 1. 公開鍵暗号についての調査(加藤・木村) 今回は最終的にこのプロジェクトで完成した乗算器を使用するために、来年以降最終的に製 作を目指す公開鍵暗号についての調査を、RSA 暗号の調査を加藤、楕円曲線暗号の調査を 木村を担当とした。 (※文責: 加藤翔) 2. 128 ビット乗算器の回路を出力できる C 言語プログラムの作成(小林) 前期に行った C 言語を用いて 6 ビット乗算器のハードウェア記述言語を出力したプログラ ムを基に、前期に回路を設計するために用いたハードウェア記述言語と比較した。C 言語 プログラムの出力結果とハードウェア記述言語で書いた回路の比較を行った小林を担当と した。 (※文責: 加藤翔) 3. VHDL を FPGA に実装(畠山・加藤・木村) ハードウェア記述言語について興味を持ち、それを用いて回路を設計をしてみたいという理 由から小林を担当とした。 (※文責: 加藤翔) 4. :設計した回路をハードウェアに実装(畠山) 設計した高速乗算器の回路を FPGA に書き込み、乗算結果を表示させるための作業を畠山 を中心に、加藤、木村を担当とした。 (※文責: 加藤翔) 5. 最終報告会に向けたポスターの製作(村山) 前期に引き続き自ら立候補した村山を担当とした。 (※文責: 加藤翔) Group Report of 2012 SISP -7- Group Number 09-A Cryptrographic Hardware - Multiplier 第 3 章 課題解決のプロセスの概要 1. 乗算器の構造の配置の解析 (担当教員による座学) 担当教員の説明により基本的な電子式乗算器の構造および、今回のプロジェクトの乗算器で 作成する Wallence Tree 型配置を用いた乗算器について学習を行い、乗算器を高速化するた めの考察をプロジェクトメンバー全員で行った。その後、高速乗算器を設計するために考察 した理論が正しいかを確認するために、その理論に基づいた低ビット乗算器を設計した。 (※文責: 加藤翔) 2. ハードウェア記述言語を用いた回路設計 (PC) 1の理論を基にして設計した回路が実用することができるかを確かめるため、ハードウェア を設計するためのプログラム言語であるハードウェア記述言語を用いることで、1で設計し た内容に基づいて低ビット乗算器を作成した。このような作業を行うために、日本アルテラ 社ホームページより無償提供されている「QuartusII Web Edition」を使用し、未来大学の ライブラリや、担当教員である白勢先生の本を活用することで、回路設計するための方法に ついてグループメンバー各自で教えあいながら回路設計を行った。その成果物として 6 ビッ ト乗算器と 8 ビット乗算器を完成させることができた。 図 3.1 6 ビット乗算器の構造 (※文責: 加藤翔) 3. 設計した乗算器のシミュレーション法の学習 (Web) 理論通りに設計しても、正しい動作をするとは限らない。設計した乗算器が実際に正しい動 作が行うことができるかを検証する必要がある。そのために、同じく日本アルテラ社から無 償提供されているシミュレーションソフト「ModelSim Altera Starter Edition」を使用す ることにより、設計した回路の動作シミュレーションを行った。このシミュレーションを行 Group Report of 2012 SISP -8- Group Number 09-A Cryptrographic Hardware - Multiplier うために主に web を活用することでシミュレーションソフトの操作方法について学習した。 その後実際にシミュレーションソフトを用いて2で設計を行った回路の検証を結果、設計し た乗算器が論理レベルで正しいことを確認することができた。 (※文責: 加藤翔) 4. 他言語を用いて改良した加算器の集合を記述するプログラムを作成 (PC) 8 ビット乗算器の回路設計を行った際、500 行ほどのハードウェア記述言語プログラムに なった。このことから、128 ビット乗算器のハードウェアプログラムを記述は膨大な量にな ることが予測される。だが、プログラムの内容は1で解析したアルゴリズムに従っているた め、アルゴリズムに沿った記述プログラムを作ることで、半自動的に記述させることが可能 であると考えた。 そこで、我々は授業などですでに基本技術を習得している C 言語を活用し、ハードウェア 記述言語でのプログラムを記述させることができるプログラムの作成を行った。その際、ま ずは事前に設計が完了しており、比較対象がある 8 ビット乗算器を半自動的に表示できる C 言語プログラムの作成を行った。このプログラムの作成後、このプログラムを基に、128 ビット乗算器を半自動的に表示できる C 言語プログラムの作成を行った。 (※文責: 加藤翔) 5. VHDL のコードを出力するプログラムを作成 (PC) 後期に 128 ビットの乗算器を作成するために、VHDL コードでの乗算器の記述法を学ぶた め前期に 5 ビットという少ないビット数の乗算器を作成してみた。5 ビット乗算器を作成し て見たところ VHDL コードが約 900 行となり、その 25.6 倍の大きさの 128 ビット乗算器 は計算上 2 万行強の膨大な行数の VHDL コードを持つことがわかった。 これより 128 ビット乗算器の VHDL コードを直接手書きするには時間と手間が掛かり過ぎ るということがわかり、後期からは乗算器の VHDL コードを自動的に記述するプログラム を作成することにした。このプログラムは話し合いの結果メンバー全員が未来大学の講義で 習得している C 言語で記述することになり、FPGA に実装するための設定作業と平行して 行った。このプログラムは C 言語のループ構文を利用して VHDL コードを自動的に記述 するようなプログラムとなっており、500 ビットまでの乗算器なら記述できるようなものと なっている。このようなプログラムを作成するにあたり、ループするのに必要な規則性を VHDL コードが持っているか、または規則性のあるプログラムに書き換えることが出来る かを確認し、必要があれば参考にしている 5 ビット、8 ビット乗算器を書き直してきちんと 動くかどうかを確認する必要がある。 これらの作業を経て作成されたプログラムを利用することにより、128 ビット乗算器が完成 した後に作成する予定のより大きな乗算器の VHDL コードも簡単に作成することができ、 徐々に乗算器のビット数を増やしていくという目的への助けにもなる。500 ビット以上の乗 算器を作成する場合には配列の数を多く確保することで作成することが可能になるはずであ る。他にも、プロジェクト内では配列を動的に確保することにより、その乗算器の VHDL を作成するのに必要な配列の数を確保することが出来るのではないかという意見も出てお り、この方法が実際に使用できるかどうかは現在施行中である。今挙げたビット数を増やす 場合の乗算器作成作業の簡易化以外にも、FPGA に実装するときの設定に時間を割くこと が出来るようになるというメリットも存在する。 Group Report of 2012 SISP -9- Group Number 09-A Cryptrographic Hardware - Multiplier (※文責: 小林悠太) 6. 128 ビットの乗算機の VHDL コードの作成(PC) 128 ビット乗算器を作成するにあたり、上に述べたとおり C 言語で作成した VHDL コード を自動的に記述するプログラムを用いて作成した。これを用いて 2 万行強という膨大な行数 を直接書く手間を省くのである。作成された VHDL コードはまだコンパイルをされていな いので、これをコンパイルし問題が無ければ完成となる。これで 128 ビットの乗算器の作成 した場合にはより大きな 256 ビットの乗算器、512 ビットの乗算器などというように徐々に ビット数を大きな乗算器の VHDL コードをプログラムを用いて記述するしていく。 (※文責: 小林悠太) 7. 128 ビットの乗算器の FPGA への実装 (PC) 本プロジェクトは 128 ビット乗算器の作成が目標なので、上の要領で作成された 128 ビッ トの乗算器の VHDL コードを FPGA に実装することが出来て初めて 128 ビットの乗算器 の完成といえる。実装には Quartus?を使用し乗算器の VHDL コードを、USB でパソコ ンに接続された FPGA に書き込むという操作を行い、実装を行うことにより 128 ビット の乗算器の計算結果を目に見える形で表示することが出来るようになる。前期で使用した FPGA(図 1) では性能が足りず 128 ビットの乗算器を作成できないことが明らかになったの で、後期ではプロジェクトでより性能のいい新しい FPGA(図 2) を購入しこれで 128 ビッ トの乗算器を作成することになった。 (※文責: 小林悠太) 3.1 今回のプロジェクトで使用した物と使用方法 1. VHDL VDHL とはハードウェア記述言語の一種である。これと FPGA を用いることで、プログラ ミングに近い形で論理回路を設計することが出来る。VHDL については付録.B にある講義 で学ぶことが出来、また本学のライブラリに VHDL の本が大量にあるため、VHDL につい て学ぶことについて、不自由するうことはない。 (※文責: 木村圭吾) 2. FPGA FPGA とはハードウェア記述言語を用いて論理回路を実装できる集積回路である。本来、 論理回路の設計を個人で行う場合。論理素子や基盤などの材料を使ってはんだごてを用いた 手作業で作成する必要があるが、この方法だと非常に小さな論理回路しか作ることが出来な い。だからといって工場を用いて論理回路を作るには非常に大きな資金が必要となる。しか し、FPGA を用いれば、パソコンを用いて簡単に比較的大規模な論理回路を設計すること が出来る。 今回用いた FPGA は二つある。一つは参考文献の付録についてきた ACEX1K という型番 の物ともう一つは Cyclone4(図 3.2) である。前期で使用した FPGA は LED を用いること で計算結果を簡単に表示できたが、PCI カードを用いて接続する必要があり、学内推奨のパ ソコンでは繋ぐことが出来なかった。しかし、メンバーの一人が持っていた古いパソコンで Group Report of 2012 SISP - 10 - Group Number 09-A Cryptrographic Hardware - Multiplier 図 3.2 後期に使用した FPGA 繋ぐことは出来たため、使用することが出来た。Cyclone4 は後期に Altera 社から購入した FPGA である。Cyclone4 は USB 接続で扱うことが出来、学内推奨のパソコンで用いるこ とが出来る。しかし、原因不明のエラーにより、使用するのに一ヶ月以上かかった。原因は 図 A.2 で白く囲まれている、非常に小さなスイッチの設定であり、このスイッチをきちんと 設定したため、今後プロジェクトが引き継がれる際に本プロジェクトのようなエラーが起き ることはほぼ無いと考えられる。なお、図 A.2 で白く囲まれている箇所以外にも、裏面な どで他にスイッチが二つある。この FPGA には液晶が付いているが、FPGA に直接接続さ れているわけではなく、MAX 2と呼ばれる部品を通して接続されており、液晶の表示には LED と違ってかなりの労力がかかる。実際に本プロジェクトでは液晶を用いて表示するこ とが出来なかった。 (※文責: 木村圭吾) 3. Quartus 2 Web Edition VHDL を勉強し、FPGA を購入した後、開発環境を整える必要がある。今回使用した開発 環境ソフトは Quartus 2 Web Edition である。このソフトは Quartus 2 ソフトウェア サ ブスクリプション・エディションの無料版であり、Altera 社製の FPGA と併用することで、 ハードウェア記述言語による開発が可能となる。このソフトの使用方法について載っている サイトは非常に少ないが、公式のホームページでこのソフトの扱い方を学ぶことが出来るオ ンライン・トレーニングが完備されている。これにより、おおまかな扱い方について学ぶこ とが出来る。しかし、ソフトウェアは英語版のみで日本語版が無いので使用するのに一定以 上の英語力が必要となる。最もソフトウェアに書かれている英語は簡単で特別難しい操作方 法もないので、それほど心配する必要はない。また、このソフトこの項目では Quartus 2 の 扱い方と注意点について述べる。 Quartus 2 を用いて開発する場合、当然ではあるが、まずインストールする必要がある。 インストールする際には myAltera に登録する必要がある。ホームページの説明に従って進 めればまず問題ないが Quartus 2 の容量は4 GB 以上もするため、インストールには学 内の有線 LAN を用いてインストールすることが推奨される。また、この際に ModelSim な Group Report of 2012 SISP - 11 - Group Number 09-A Cryptrographic Hardware - Multiplier どの他の開発ソフトも同時にインストールされる。不必要な場合は設定でインストールしな いことも可能だが、多くの場合、必要となってくるのでこの時に同時にインストールする事 を推奨する。 次にプロジェクトを作成する必要がある。普段使用しているソフトウェアのように、File から New Project Wizard を選んで各設定を行なっていく図 3.3)。この時に設定したこ 図 3.3 Quartus 2 の画面 とは Assignments から選択できる Device や Setting の項目で変更できる。この時に注意 すべきは三番目の型番を設定を行う Family & Device Setting と4番目の Quartus 2と連 動させるソフトウェアを選択する EDA tool Setting である。Family & Device Setting は 型番を選ぶ必要があるが、選択式で手持ちの FPGA の型番が無いことがある。この時はひ とまず適当に選ぶ。この型番選択の間違いでエラーが起きることが有るのだが、この時は Assignments → Device から型番の設定をやり直すことができる。型番は箱や説明書に書い てある型番が間違っていることがあるので、必ず FPGA 本体に印字されている型番を調べ ること。見当たらない場合はファンや液晶を外すことで型番を見ることが出来る。4番目 の EDA tool Setting は ModelSim などの連動させる他のソフトウェアの設定を行う項目だ が、下手に選択するとエラーが起きるので、全て None を選ぶことを推奨する。設定をやり 直し場合は Assignments → Device → Setting で設定し直すことが出来る。 三番目に VHDL ファイルを作る必要がある。File → New を選択すると新しく画面が出てく るのでその中から VHDL ファイルを選ぶ。そして VHDL を実際に記述していく。VHDL がひとまず書き終わった後は(図 A.3)の矢印を選んでコンパイルを行う。このコンパイル で VHDL のエラーを調べることが出来る。entity の後ろに各部分と VHDL ファイル名が 同じではないとエラーが起きるので、そこを注意する。4番目にピン設定を行う必要があ る。Assigment → Pin planner を選んでピンを設定していく。図 A. 6の下の部分を操作し Group Report of 2012 SISP - 12 - Group Number 09-A Cryptrographic Hardware - Multiplier て、ピンを一つ一つ選択して設定してく。設定するピンの数が増えていくに連れ、面倒に なってくるが、これを行わないと回路は動かないので必ず設定すること。最後に Tools → Programmer で VHDL を流し込む(図 3.4)。FPGA をパソコンに繋ぐのだが、この際に USB-Blaster をダウンロードする必要がある。ダウンロードして USB を認識させた後は Auto Detect で型番を自動的に判別させる。この後に回路図の左をクリックして start を押 して VHDL を流し込めば完成である。 図 3.4 FPGA に VHDL を流しこんでいく際の画面 (※文責: 木村圭吾) 4. アルテラ社公式ホームページ 今回のプロジェクトでは Altera 社の公式ホームページを多用した。Altera 社とは FPGA を扱う企業の中でトップクラスの企業の一つであり、FPGA の販売の他に開発環境である Quartus2 などの販売を行なっている。ここのホームページには上記に書いてあったオンラ イン・トレーニングがある。一部は無料で受けることが出来、これを用いることで FPGA と Quartsu2 の基本的知識を身につけることが出来る。 また、myAltera と呼ばれる、Altera 社製の商品を扱う個々人に作られたページが有る。上で述べたように Quartus2 をインス トールするには myAltera に登録する必要がある。この myAltara で質問が可能だが、メー ルなどで公立はこだて未来大学のプロジェクト学習で FPGA を使っていることを言わない と質問に答えてくれない。また、質問の受け答えが不親切なのでそこに注意する必要があ る。他には FPGA の膨大な数の資料がある。しかし、殆どの資料が日本語化されておらず、 英語で読まなければならない。不親切な点はあるが、このホームページに行けば、FPGA の 開発で起きた問題は大方解決する。 (※文責: 木村圭吾) Group Report of 2012 SISP - 13 - Group Number 09-A Cryptrographic Hardware - Multiplier 5. ModelSim Quartus 2 で作った VHDL のシミュレーションが出来るソフト。これを用いることで VHDL で設計した FPGA のバグを FPGA を流し込む工程を通さずに直すことが出来る。 (※文責: 木村圭吾) 6. C 言語 今回作成した、VHDL を自動記述する際に用いたプログラミング言語。本来、VHDL を記 述出来ればどのような言語でも何でもよいが、今回は授業で学んだ C 言語を用いた。 (※文責: 木村圭吾) Group Report of 2012 SISP - 14 - Group Number 09-A Cryptrographic Hardware - Multiplier 第4章 4.1 課題解決のプロセスの詳細 各人の課題の概要とプロジェクト内における位置づけ 木村圭吾の担当課題は以下のとおりである。 5月 各担当の決定、白勢先生による VHDL や乗算器の講義 6月 メンバーの担当分け、乗算器の構造の配置の解析 7月 中間発表に向けての準備、中間発表練習 8月 中間発表の反省 9月 メンバーの担当分けの指示、最終報告書の構成の作成 10 月 公開鍵暗号についての調査、最終報告書の記述 11 月 FPGA のエラーの対処 12 月 発表スライドの製作、成果報告会の発表練習 (※文責: 木村圭吾) 村山広行の担当課題は以下のとおりである。。 5月 各担当の決定、白勢先生による VHDL や乗算器の講義 6月 乗算器の構造の配置の解析、ポスターの文章構成 7月 ポスターの作成、ポスターの印刷、中間発表練習 8月 中間までの反省 9月 今後のスケジュール決め 10 月 暗号処理の仕組みについて調査 11 月 ポスターの構成と内容を決め作業 12 月 メンバーと作業内容について話し合う、ポスター印刷、発表練習 (※文責: 村山広行) 小林悠太の担当課題は以下のとおりである。。 5月 各担当の決定、白勢先生による VHDL や乗算器の講義 6月 C 言語による ADD n 回路の記述 7月 5 ビット、8 ビット乗算器の作成、中間発表練習 8月 中間発表の反省 9月 128 ビットの乗算器作成のための調査 10 月 C 言語による VHDL コードの記述 11 月 C 言語のプログラムのデバッグ、128 ビットの乗算器の VHDL コードのデバッグ (※文責: 小林悠太) 加藤翔の担当課題は以下のとおりである。 5月 各担当の決定、白勢先生による VHDL や乗算器の講義 Group Report of 2012 SISP - 15 - Group Number 09-A Cryptrographic Hardware - Multiplier 6月 C 言語による ADD の記述 7月 中間発表に向けてスライドの作成、中間発表練習 8月 中間発表の反省 9月 後期からの活動に方針決め 10 月 公開鍵暗号についての調査 11 月 VHDL を FPGA に実装 12 月 発表スライドの製作、成果報告会の発表練習 (※文責: 加藤翔) 担当課題解決過程の詳細 4.2 4.2.1 5月 木村圭吾 前半に乗算機と VHDL の勉強を行った。また、役割の分担を支持した。自身は VHDL の シミュレーションについて調べ、Model Sim を用いることでシミュレーションが行えるこ とまでは分かったが、それ以上は上手く行うことが出来ず、スキルがある畠山に VHDL の シミュレーションを任せた。それ以降は乗算器の効率の良い構造とそれを生成するためのア ルゴリズムを調べていた。アルゴリズムの研究には、C++ で直接アルゴリズムを記述する 方法を用いた。また、乗算器の構造を DX ライブラリで可視化しながら調べた。 6月 5 月に引き続き、乗算器の構造を自動で生成するためのアルゴリズムを調べていた。FPGA の動作について調べていた。6 月の後半にアルゴリズムはほぼ完成した。また、FPGA が届 いたので、FPGA を動作させるためには何をすべきか調べた。 7月 VHDL を C 言語で書くにはどうすればいいか、調べた。発表の準備の為に、用意すべき物 品の用意と発表場所の連絡を行った。また発表のアンケート用紙の製作と見て回る発表の指 示を行った。 8月 中間発表のアンケート用紙にどのような意見が合ったのかをプロジェクトメンバーで調べ、 後期の成果発表会をどのように行うか話し合った。この時に加藤から暗号と乗算がどう関係 しているか、暗号そのものがどういう役割をするのか理解できなかった人が多かったという 意見をもらい、全員が同意したので高速乗算器を作るための背景としてある公開鍵暗号につ いて後期から調べるという作業を加えることにした。 9月 後期のおおまかな計画を立てた。最終報告書を書けるところまで書くことにし、全体のレイ アウトを作成した。 10 月 前半は報告書を 10 月の時点で書ける部分を書いた。執筆した部分は背景、到達目標、展望 である。その中で自分は背景と展望を執筆した。この作業によって目標がはっきりし、計画 の修正を行った。また、加藤とともに RSA 暗号と楕円曲線暗号について調べた。この作業 により、暗号と乗算がどう関係しているか、暗号について知識のない一般の人にも分かりや すく説明する事ができるようになった。また、週末に行った作業をお互いに確認するよう、 指示した。 11 月 畠山と加藤と共に Cyclone 4 に VHDL を流し込む作業を行った。Cyclone 4 に VHDL を流し込むとエラーが発生したため、その原因を調べた。しかし、Cyclone 4 のエラーの対 策に非常に時間がかかった。Quartus2 の様々な設定を変更する、エラーについて調べる、 Altera 社に聞くなど休日を使って尽力したが、全く解決できず、結局、このエラーの解決に Group Report of 2012 SISP - 16 - Group Number 09-A Cryptrographic Hardware - Multiplier 一ヶ月もかかってしまった。エラーの原因は Cyclone 4 の中にある非常に小さなスイッチ がきちんと設定されていないことが原因だった。この作業により Cyclone 4 の箱に書いて ある型番と実際の型番が異なることが判明した。また、畠山と加藤と共に Cyclone 4 の液晶 を表示する方法を調べた。結果、LED を表示させることは出来たが、液晶を表示させるこ とは出来なかった。 12 月 スライド製作やプレゼンの原稿製作などの発表準備を行った。また、最終報告書で 10 月に かけなかった部分の執筆も開始した。冬休みに書く部分を個人ごとに指示した。 (※文責: 木村圭吾) 4.2.2 5月 村山広行 プロジェクトの係りを担当教員と一緒に考え私はスケジュール係になった。また、プロジェ クトリーダーとなった木村圭吾がプロジェクトメンバーの各担当を決定した。私は CSA の 解析担当になった。そして、白勢先生が VHDL や乗算器、全加算器や半加算器についての 講義が行われた。実際にメンバー全員で、3 ビットの乗算器の VHDL を Quartus ? Web Edition というフリーソフトを使い記述した。この際、VHDL 記述の技術を習得した。こ の時点で、VHDL の基本的な記述は全員できるようになった。 6月 6 月の前半で自分は木村圭吾と乗算器の構造の配置の解析を行った。今回のプロジェクトの 問題となる乗算器の構造の配置のアルゴリズムについて考察した。6 月の後半で自分はメイ ンポスターの文章構成を練り、OpenOffice に文章をまとめ英文に翻訳した。自分たちのプ ロジェクトには、デザインコースの人がいないので Web の検索機能を用いてイラストレー タの使い方について学んだ。この際、文章を細かく書きすぎ、英文も長くなってしまった。 担当教員による添削で文章を減らした。 7月 イラストレータを使いメインポスターの作成を行った。その際、イラストレータにおける簡 単なポスター作成の技術を習得した。担当教員にポスターの添削をしてもらい修正を行い、 メインポスターを印刷した。中間発表に向けて、発表メンバーで集まりスライドを使いなが らの発表練習を行った。Tex の講習に参加しメンバーに Tex の使い方を説明した。Tex の 講習には木村圭吾と参加した。この際、Tex による報告書の作成技術を習得した。報告書の 文章を OpenOffice で書き終えた後に Tex で PDF にした。ポスター印刷についての講習を 受けた。この際、ポスターの印刷技術を習得した。メインポスターは発表の前日に小林悠太 と印刷した。個人報告書やグループ報告書を作成するのにかなり手間取ったので後期は前 もって準備してスムーズに進めたい。また、発表が終わりアンケートをまとめた。 8月 夏休み。個人の能力向上のため各々で自習。後期について簡単な打ち合わせ。中間発表での アンケートについての反省と改善に向けての考察。 9月 後期の方針、スケジュール決めを行った。メンバー全員に後期のスケジュールの大まかな流 れをエクセルにし渡した。各々の役割分担も細かく設定した。 10 月 Cyclone 4 という高性能の FPGA が届いたので、FPGA 担当の者はその使い方について 勉強を行い、C 言語を用いた VHDL の記述を担当の者は早速プログラミングに取り掛かり、 中間発表での反省点であった暗号についての知識を担当の者は暗号処理の仕組みや考えなど について調査した。私は、中間発表のときに質問の多かった暗号とはどういうものなのかと いうものに対して暗号についての知識について調査する担当だったので、公開鍵暗号の仕組 みや共通鍵暗号の仕組み、暗号化・復号の仕組みについて調査し、『暗号ハードウェア‐乗 Group Report of 2012 SISP - 17 - Group Number 09-A Cryptrographic Hardware - Multiplier 算器編』のプロジェクトにおける必要性についてまとめ上げた。この際に、暗号処理におけ る基本的な知識と公開鍵暗号、共通鍵暗号における知識を得た。 11 月 主にポスター作成をメインに行った。今回はサブポスターを作り、中間発表より見やすい ポスターを作ろうと試みました。また、イラストレータの使い方を中間のときより使いこな し、図や枠などをいれ見やすいものにした。ポスターを作る前に、説明することを分りやす く書くために資料を集めたり、暗号処理の仕組みについての理解を深めたりするための自習 を行い、ポスターの内容を作成した。後期のポスターでは中間発表までにあったアンケート や質問に多かった「乗算器を高速化して結果どうなるのか?」「乗算器と暗号処理の関係性 はどのようなものか?」といったような問題に焦点を当て、内容を作成することに手間がか かった。 12 月 出来上がったポスターを印刷し、最終発表のための発表練習を行った。私の担当は結果と 今後の抱負の部分で、1 年間を通して行ったプロジェクトの成果についてプレゼンテーショ ンを行った。最終発表では中間発表に比べ質問の質がよく、見に来てくれた方々に内容が伝 わったのだろうと思った。また、最終発表が終わり、報告書の作成のための準備を始めた。 それぞれの担当を決め、早い段階から各々の文章を書くように振り分けた。 (※文責: 村山広行) 4.2.3 5月 小林悠太 ププロジェクトリーダーの木村圭吾がプロジェクトメンバーの各担当を決定した。私は乗算 器の乗算部分の解析担当になり、そして、白勢先生が VHDL や乗算器、全加算器や半加算 器などの今回のプロジェクトを進めていくに置いて必要な知識についての座学が行われた。 実際にメンバー全員で、3 ビットの乗算器の VHDL コードを Quartus?WebEdition という フリーソフトを使用して記述し、VHDL コードの記述方法を習得を試みた。その後、プロ ジェクト内で乗算器を FPGA への実装に移す前にシュミレーションを行い試してみるべき だとの声があがり、これに関する調査をメンバーの畠山に一任することとなった。5 月終盤 に畠山が乗算器のシュミレーションに成功したので、この知識をプロジェクト全体で共有す るために畠山による座学が行われ、乗算器に関する知識を増していった。 6月 6 月に入り乗算器の VHDL コードを記述するために、プロジェクトを VHDL コードの記述 方法に関する知識を深めるグループと、乗算器の高速化を目指し乗算器自体の構造をより高 速化できる構造に作りかえる方法を調査するグループの 2 つに分かれた。私は上のグループ に属し、実際に VHDL での乗算器の記述方法を教授の話や本、ネットなどを参考にしなが ら模索していき、VHDL コードは C 言語と記法と似たようなところは少しはあるが、大半 は C 言語とは異なる記述方法になっており、これしか記述言語を知らない自分たちがこの 記述方法を理解し乗算器を自由に作成できるようという状態になるまでに 1 月ほど要した。 6 月後半に乗算器の構造の配置の調査班が考えた ADDn 回路 の考え方を乗算器に導入し実 際に記述に取り掛かる。最終的に 128 ビットの乗算器は膨大な行数を持つかもしれないと 先生が予想しており、C 言語のループ構文を利用して VHDL コードを自動で記述してくれ るプログラムを作成したほうが効率的になる可能性があったので、C 言語で VHDL を記述 するということも目標として設定する。そのために、まず ADD n 回路の VHDL 表記を C 言語で記述することに取り掛かり、特に問題も無く作成に成功することが出来た。今後はこ れを用いて乗算器を作成する。 Group Report of 2012 SISP - 18 - Group Number 09-A Cryptrographic Hardware - Multiplier 7月 ままずは ADDn 回路を用いた 5 ビットの乗算器の VHDL コードの作成に取り掛かる。先 月中に学んだ乗算器の VHDL コードの記述方法の知識を生かしながら作成していき、これ も特に問題なく作成に成功する。これから、これより少しビット数を増やした 8 ビットの乗 算器の VHDL コードにも取り掛かり、5 ビットの乗算器のときと同じく特に問題なく作成 することが出来た。中間発表も迫ってきているので、FPGA への実装を担当している畠山 と相談し、一度現在プロジェクトが所持している FPGA への実装を試みることとなった。 これも畠山の頑張りもあり成功することができ、中間発表時において FPGA に実装した乗 算器のデモを行うことが出来た。中間発表前にはメンバー全員が集まり発表練習も行うこと ができ、いい状態で発表に望むことが出来た。 8月 7 月に行われた中間発表で回収した評価シートを元にメンバー全員集まり反省会を行った。 プロジェクト内容の発表に関しては理解してもらえた人もいたが、よくわかってもらえな かった人も多々いることが見受けられた。これに関しては少し乗算器に関する用語が多すぎ たのではないかと推測されたので後期ではもう少し噛み砕いて説明するということとなっ た。発表技術の面に関しては声が小さかったという意見が多くプロジェクト全体として反省 が必要ということとなった。最終的には、後期では前を向くことと声を張り上げること、内 容をもっと噛み砕いて説明することを意識して最終発表に望むという結論に至った。 9月 5 ビット、8 ビットの乗算器を実際に作成したことにより、C 言語での VHDL コードを自動 的に記述してくれるプログラムの作成が必要であると判断、C 言語のループ構文で VHDL を記述するために 5 ビットの乗算器と 8 ビットの乗算器の VHDL コードを比較してループ できるような規則性が存在するか調査した。規則性がない記述でも、もし規則性のある記述 に書き直すことが出来るのならば書き直しもう一度コンパイルしてみて問題がないかどうか を確かめるという作業を行い VHDL コードを自動的に記述するプログラムを作成するため の準備を行った。 10 月 学校が始まり VHDL コードを自動的に記述する C 言語のプログラムの作成を本格的に開 始した。このプログラムで使用した配列の数はとりあえず 128 ビットまで作成できればい いので、128 ビットの乗算器に必要な数である 255 個より余裕を持って 300 個用意した。こ れ以上の乗算器を使用するときは手動で個数を用意するより、動的に配列の数を確保してし まった方がいいのではないかという意見が出ているので、いずれはそちらのほうに書き直す 予定である。このプログラムには 6 月に作成した ADDn 回路の VHDL コードを記述する プログラムも用いられている。このプログラムもなかなか行数が多くなったのでデバッグ前 の状態が完成するまでに 1 月以上かかった。 11 月 先月完成したプログラムのデバッグ作業を行った。2 万行強の VHDL コードを記述するプ ログラムなので、このプログラムも行数が多くなっておりデバッグ作業にも時間が掛かった。 それが終わったら実際に 128 ビットの乗算器の VHDL コードを出力してみて Quartas2 に 入力してみてコンパイルしてみた。そして VHDL コードもデバッグし、それを C 言語のプ ログラムに反映する、この作業を行い VHDL コードを自動的に記述する C 言語のプログラ ムと、128 ビットの乗算器の VHDL コードが完成した。後は FPGA への実装の準備が終了 するのを待つだけとなった。 12 月 FPGA の実装の準備が難航しているので、私は発表に向けてポスターを作成している村山 を補助することとなった。最終発表用のメインポスターとサブポスターを協力して作り上げ たが、どうやら FPGA への実装は最終発表までには間に合いそうにないということなので、 もう時間が無いのでまず発表練習を行うべきということになり発表練習を行い FPGA への Group Report of 2012 SISP - 19 - Group Number 09-A Cryptrographic Hardware - Multiplier 実装が完成しないまま最終発表を向かえることとなった (※文責: 小林悠太) 4.2.4 5月 加藤翔 乗算器や加算器についてプロジェクトの担当教員から基礎的なことの学習を行った。また、 自分のパソコンで自由に回路設計ができるようにするため、回路設計するためのソフトウェ アなどの環境を用意し、ハードウェア記述言語についての学習も行った。また、設計した回 路を確認するために、シミュレーションも使用できるようにした。さらに、ハードウェア記 述言語で記述するソースコードを簡単に記述できるようにするため、設計する乗算器のアル ゴリズムを解析し、C 言語を用いて出力できるようにする作業も行った。これらの作業によ り、ハードウェア記述言語による回路設計、シミュレーションで設計した回路を確認する技 術を習得した。 6月 5 月から行われていた C 言語を用いてハードウェア記述言語で記述するソースコードを 出力できるようにする作業を引き続き行った。また、今後に向け、設計した乗算器の回路を 組み込むためのハードウェアに関して、最終目標である 128 ビット乗算器を設計するうえで 必要な性能を満たしたハードウェアを購入するために、グループ内で話し合いを行った。ま た、中間発表に向け、大まかな発表原稿を用意し、それぞれの作業に応じ、誰が何について 発表するのかを指示した。これらの作業により、最終目標の 128 ビット乗算器の機能や仕組 みについて理解した。 7月 中間発表に向け、発表のためのスライドを用意し、発表練習を行い、発表時の修正点をプロ ジェクトメンバーに指示した。また、報告書を書くために TeX をインストールし、使用方 法について学習した。この際、TeX を使用する技術を習得した。 8月 中間発表の際に受け取ったアンケート用紙に書かれていたことを踏まえてどのような意見が 合ったのかをプロジェクトメンバーで共有し、後期の成果発表会で同じような失敗をしない ために意見を出し合った。その結果、高速乗算器を作ることでどのようなメリットがあるの かが良く分からないといった人が多かったので、高速乗算器を作るための背景としてある公 開鍵暗号についても後期から調べるという作業を加えることにした。 9月 後期の始まりということで、初めに後期の作業方針を決めた。また、前期の活動の反省を踏 まえて、最後にあせらなくても良いように時間に余裕を持った予定を立てた。また、早く作 業が終わった人にも作業が無いという状況にならないように、グループ報告書の記述も同時 進行で進めるということを決めた。このようなことを行うことにより、スケジュール管理の 大切さや、仕事を効率良く回すための工夫について知ることができた。 10 月 中間の反省で出た高速乗算器を作るための背景への理解を深めるために公開鍵暗号につい ての調査を行った。その際、調査する公開鍵暗号を 2 つに分け、自分は公開鍵暗号の RSA 暗号についての調査を行った。調査の際は web サイトを活用し、他人にも説明しやすいよ うに自分なりにアレンジした説明を文書ファイルとしてまとめた。これらの作業により、公 開鍵暗号の重要性や問題点、また自分たちはどういったものを作るのかということをより深 く知ることができた。 11 月 VHDL を FPGA に書き込む作業を行った。この作業を行うために、後期から、前期に使 用していた FPGA よりも処理能力の高い FPGA を購入したので、これを活用するために 英語で書かれている仕様書を読んだ。また、VHDL を FPGA に書き込むための作業工程を Group Report of 2012 SISP - 20 - Group Number 09-A Cryptrographic Hardware - Multiplier 学ぶために、アルテラ社のホームページに書かれているソフトウェアのオンライン学習で作 業についての工程を理解したうえで作業に取り組んだ。また、書き込み中に出たエラーを解 決するために、同じ作業を担当している木村と畠山と共に解決策について話し合った。最終 的には FPGA のメーカーに問い合わせを行いエラーの原因についての話を聞くことで、解 決することが出来た。これらの作業により、FPGA とはどのようなものなのかということ を理解し、設計した回路を FPGA に書き込むことが出来るようになった。 12 月 成果発表会のために、発表時に使用するスライドの製作を行った。その際、中間は票で使 用したスライドを基に、中間発表時に分かりにくいといわれた部分のスライドを加え、分か りやすいように図や写真を多く使用するようにした。また、前回はデザインがシンプルすぎ て授業のスライドみたいとの意見も出ていたので、レイアウトにもかなり気を使って製作し た。これらの活動により、人にわかりやすいスライドを作るためのレイアウトや色合いなど の大切さを知ることができた。 (※文責: 加藤翔) 4.3 4.3.1 担当課題と他の課題の連携内容 木村圭吾 主に全体を見渡して進捗状況を確認していた。村山とともに中間発表や報告書などのスケジュー ルについて話し合った。最初、一人で進めていた VHDL のシミュレーションと FPGA の動作確 認を畠山にまかせた。小林と加藤と山田が作っていた、書きかけの C 言語で VHDL を記述するプ ログラムをもらって、VHDL を C 言語で書くにはどうすればいいか調べた。村山と小林とともに 発表の練習を行った。メンバー全員で発表の際に予想される質問の洗い出しを行った。 (※文責: 木村圭吾) 4.3.2 村山広行 中間発表までの連帯内容は、自分は乗算器の構造の配置の解析とメインポスターの担当だった が、乗算器の構造の配置の解析においてはリーダーの木村圭吾と協力し、自分が乗算器の構造の配 置のアルゴリズムについての解析を担当した。メインポスターの作成においては、スライドを作る 担当の加藤翔と発表原稿を作成する山田雄祐と協力して内容を細かく必要に応じて変更しながらメ インポスターを作成した。発表前には事前に集まって発表メンバーと発表時間を合わせるように練 習した。中間発表が終わり、最終発表までの連帯内容は、木村圭吾や加藤翔と暗号処理について調 査しそれぞれが調べた内容をプロジェクト内で拡散した。メンバー全員にスケジュールを配り最終 発表や最終レポートに間に合うように促した。小林悠太による VHDL プログラムの C 言語による 出力の説明を受け進行具合を見ながら聞きたい質問をし、自分の担当の分野に活かした。また、小 林悠太にサブポスターの内容の暗号処理における乗算の計算の重要性について協力をしてもらっ た。この際に、計算の式や暗号処理における乗算の仕組みについて記述した。最後に、最終発表で の発表練習をプロジェクターを用いそれぞれのタイムを計り発表時間に適度にあうようにメンバー 全員で行った。 (※文責: 村山広行) Group Report of 2012 SISP - 21 - Group Number 09-A Cryptrographic Hardware - Multiplier 4.3.3 小林悠太 最終的に FPGA に乗算器を実装することが目的で、前期はまず 5 ビット乗算器を作成、その 後さらにもう少し大きな乗算器を作成してみるということで 8 ビットの乗算器を VHDL で記述 し、それを FPGA の実装について担当しているメンバーと協力し、実際に実装することに成功し た。なので中間発表では 8 ビット乗算器の実演を行うことが出来た。この実演は 5 ビットどうし の乗算を行うだけなので、普通の電卓の方が便利で使いやすいのだが本プロジェクトがどういうも のを作成しているかということを伝えることができた。後期は乗算器の VHDL コード記述するた めに作成時間の短縮を図るために C 言語のプログラムを作成。これをもって 128 ビットの乗算器 の VHDL コードを記述し実装を担当している畠山、木村、加藤と話し合いながら実装を試みた。 作成した VHDL コードを実装できるように書き換えコンパイルしていくのだが、128 ビットの乗 算器の VHDL コードは 2 万行強という膨大な行数なのでこのようなデバック作業するのにも大変 時間がかかった。11 月終盤から最終発表までは村山と共に最終発表用のメインポスター、サブポ スターを作成していった。本プロジェクトにはデザイン系のメンバーが居らず、誰もイラストレイ ターの使用方法を理解していなかったので、他のプロジェクトのメンバーに聞いたりして試行錯誤 を繰り返して作成した。その後メンバー全員で発表練習を行い、予想される質問の洗い出しとその 質問に対する応答など最終発表に向けて準備を進めた。その間も 128 ビットの乗算器を FPGA に 実装するための作業を続けていたがメンバーとの連絡が取れなくなるなどの問題が発生し、作業の 引継ぎも無かったので作業が遅れてしまい残っているメンバー全員で協力して実装を試みたが最終 発表までに実装して 128 ビットの乗算器を完成させることが出来なかった。これにより最終発表 に計画していた 128 ビットの乗算器の実演、そして通常のアレイ型の乗算器を実際に作成して今回 作成した Wallence Tree 型の乗算器との計算速度の差を求めるなどのことまで至らなかった。 (※文責: 小林悠太) 4.3.4 加藤翔 前期はハードウェア記述言語を用いたソースコードを簡単に記述出来るようにするために、設 計する乗算器のアルゴリズムを解析し、C 言語を用いて出力できるようにする作業を行った。その 際、乗算器の構造の配置の解析をしているメンバーから乗算器のアルゴリズムについての話を聞 き、参考にした。後期からは小林が担当した 128 ビットの乗算器の VHDL を C 言語プログラムで 出力した結果用いて、FPGA に書き込む作業を行った。その際に出たエラーを木村、畠山と協力 することで、エラーの解決策を探ることが出来た。 (※文責: 加藤翔) Group Report of 2012 SISP - 22 - Group Number 09-A Cryptrographic Hardware - Multiplier 第5章 5.1 5.1.1 結果 プロジェクトの結果 効率の良い乗算機の配置 このプロジェクトでは 128 ビットの乗算器を作成するために活動しているが、ただ動くだけの 乗算器ではなく、より効率のいい乗算器 (ここでいう効率の良い乗算器とは、より早い乗算器のこ とを指す) を作成するということを目的としている。この”効率のいい乗算器”を実現するために 本プロジェクトでは図 5.4 のような乗算器の全加算器 (以下 FA) と呼ばれる加算器をまとめること により乗算器の段数を減らし、それにより効率化を図った。なぜ加算器をまとめて段数を減らすと 乗算器を効率化することができるのか、それは図 5.4 のような乗算器の構造に問題がある。図 3 の ような乗算器の構造では上の段の計算が終わらなければ下の段の計算を始めることが出来ず、下の 段は処理待ちの状態になってしまうのである。つまり出来るだけ FA をまとめて 1 度に計算できる 量を増やすことにより乗算器の構造の段数を減らすことができ、下の段の処理待ちの状態を低減す ることが出来るので効率化することが可能なのである。本プロジェクトでは FA をまとめる方法と して ADDn 回路という理論を考案し用いた。本プロジェクトでは ADDn 回路と呼ばれているも のは、和算処理を同時に行うために何個かの FA をひとまとめにしたものである。この ADDn 回 路 には 3 種類のパターンが存在し、入力の本数に適応する ADDn 回路を選択して使用する。その パターンは以下のとおりである。 ・ADD3n 入力の本数が 3n 本のとき使用する ADDn 回路。この ADDn 回路 は FA の集合に より構成される。(図 5.1) ・ADD3n+1 入力の本数が 3n+1 本のときに使用する ADDn 回路。この ADDn 回路 は FA の 集合と、そのまま出力に直結する入力 1 本により構成される。(図 5.2) ・ADD3n+2 入力の本数が 3n+2 本のときに使用する ADDn 回路. この ADDn 回路 は FA の 集合と、半加算器 (図 5、以下 HA)1 つにより構成される。(図 5.3) 図 5.1 ADD3n の例の一つである ADD6 これらを用いて図 5.4 の乗算器を書き直したのが図 5.5 である。見ての通り図 5.5 の ADDn 回 路を使用した回路は段数が減っており、先の説明の通り効率化できているのである。このような構 造の回路は Wallence Tree 型と呼ばれており、このプロジェクトでは ADDn 回路を用いることで この Wallence Tree 型の乗算器を作成した。ADDn 回路の一番の利点は乗算器のビット数が大き Group Report of 2012 SISP - 23 - Group Number 09-A Cryptrographic Hardware - Multiplier 図 5.2 ADD3n+1 の例の一つである ADD4 図 5.3 ADD3n+2 の例の一つである ADD5 くなればなるほど図 5.4 のような通常のアレイ型の乗算器と ADD n 使用時の乗算器との差が大き くなることである。これはつまりビット数が大きくなるほどより乗算器が効率化されるということ である。それを示しているのが図 5.6 である。図 10 に示してあるとおり今回作成しようとしてい る 128 ビット乗算器では ADDn 回路を使用すると約半分の段数の回路になることがわかる。これ を用いると本プロジェクトがこれから作成しようとしている 256 ビット、512 ビットなどのより大 きなビット数を持つ乗算器をより効率化することが出来るようになるのである。 図 5.4 通常の乗算器の構造 (※文責: 小林悠太) 5.1.2 VHDL コードを自動で記述するプログラムの作成 128 ビットの乗算器の作成には 128 ビットの乗算器の VHDL コードを作成しなければならな い。そのために前期に乗算器の VHDL コード作成の練習として 5 ビット、8 ビットの乗算器を作 Group Report of 2012 SISP - 24 - Group Number 09-A Cryptrographic Hardware - Multiplier 図 5.5 Wallance tree 型乗算器の構造 図 5.6 段数の差 成した。5 ビット、8 ビットの乗算器の作成には成功し、これにより乗算器の VHDL コードを作成 する技術を身につけることが出来たのである。しかし 5 ビット、8 ビット乗算器を作成したことに より新たな問題が浮上した。それは VHDL コードの行数である。8 ビットの乗算器で VHDL コー ドは 1000 行強となったのである。つまり 8 ビットの 16 倍である 128 ビットの乗算器では 2 万行 強となり、非常に VHDL コードの行数が多くなってしまうのである。 2 万行強を手書きで記述するにはとてもではないが手間が掛かりすぎ、128 ビット乗算器の VHDL コードの作成に時間がとられてしまう。VHDL コードの作成だけではなく FPGA に実装まで出来 て初めて乗算器が作成できたと言えるので、VHDL コードの作成だけで時間を掛け過ぎるわけに は行かないのである。他にも、もし 128 ビットの乗算器を作成に成功した場合、256 ビット、512 ビットなど徐々にビット数を大きくしていく予定なので、これ以上ビット数が多くなると VHDL の行数は比例して大きくなっていきとてもじゃないが手書きで記述するには手間が掛かりすぎる。 なので、本プロジェクトでは乗算器の VHDL コードを自動的に記述するプログラムを C 言語で記 述してきた。これは C 言語のループ構文を使用することにより VHDL コードの規則的な部分を ループして記述し、欲しいビット数の乗算器の VHDL コードを自動的に記述してくれるプログラ ムとなっている。現在このプログラムでは 300 個しか配列を確保していないので、128 ビットの乗 算器の VHDL コードまでしか作成できないが、いづれ配列の要素数を動的に確保することによっ てパソコンの性能が許す限り欲しいビット数の乗算器の VHDL コードを記述してくれるプログラ ムに改良する予定である。 (※文責: 小林悠太) Group Report of 2012 SISP - 25 - Group Number 09-A Cryptrographic Hardware - Multiplier 5.2 5.2.1 成果の評価 効率の良い乗算器の設計 まず乗算器を設計する上で、私たちはより高速で乗算の計算を行うものを作ることに重点を置く ことにした。その結果、Wallace tree 型という型の乗算器の設計が効率が良いとされた。Wallace tree 型乗算器というのは、通常乗算器を作ると図 5.4 のような形になるが、Wallace tree 型乗算器 は図 5.5 の様に FA と add の数は同じだが縦の段と横の段の数が変わる。なぜ段数が減少すると 計算が速くなるのかというと、同時に処理できる計算量が増加し、信号経路の短縮による処理待ち 状態が低減されるからである。簡単に言うと、このような形になることによって一度に計算する量 が増え、処理時間が短縮されるのである。今回改良を加えたのは、乗算器の計算を行う構造の中の CSA(Carry Saved Adder) という部分の計算をするところだけである。なぜ CSA(Carry Saved Adder) の部分に重点を置いたのかというと、CPA(Carry Propagated Adder) という部分に比べ CSA(Carry Saved Adder) は改良の余地があり暗号処理を高速化するためには一番効率の良いや り方であったためである。この際に、全加算器や半加算器の知識を必要とし、プロジェクトメン バーと担当教員で講習を行う必要があり、それぞれのスキルアップにも繋がった。また、私たちは 単純に VHDL を記述するのでは工夫がなく、問題点が多いということで C 言語を用いて VHDL を出力することにした。これにより、通常のように VHDL を書くよりもソースコードが短縮でき る。もともと約 20000 行強あるものが C 言語による出力により作成時間をかなり短縮することが できたので成功したと言える。ソースコードを省略化することにより、記述したソースコードのケ アレスミスを防ぐことと大量のソースコードを書かなければいけない手間を省くことが出来、より 効率の良いプログラミング作業が出来るようになる。前期に作成した FPGA では発表の際にプレ ゼンテーションを聞いている人にわかりやすいように FPGA に直接数字を入力して FPGA のモ ニターに計算した数値の結果が見れるようにした。この際に工夫した点は、画面上では計算した数 値が一度に全て表示できないので数回に分けて数値を表示できるようにしたことである。例えば、 三桁数値が表示されるとしたら、100 × 234=23400 という答えを 1 回目に 234、2 回目に 00 とい うように数値を表示される。後期の発表でもこのように画面に計算した値を表示したかったのだが そこまでは行うことが出来なかった。 (※文責: 村山広行) 5.2.2 VHDL のプログラム QuartusII Web Edition と言う VHDL 記述用のソフトウェアを用い、VHDL の記述を行った。 5.2.2 で述べたように、C 言語を使用し、VHDL のソースコードを省略化し、ミスの多くならない ような VHDL のソースコードを記述した。この担当は小林悠太が担当し、構造体や関数などを用 いプログラムを能動的に動作しようと工夫した。これにより、小林悠太が作ったプログラムを用い ると他のビット数の VHDL も簡易的に記述することが出来るようになった。これが、今回 C 言語 による VHDL 記述の工夫した点であり、手間のかかる作業でもあった。その後、担当教員の白勢 先生のチェックによって私たちが作ったプログラムにミスがなかったので成功と言える。担当教 員のチェックは主に、作ったプログラムをシミュレーションすることである。シミュレーションを 行ったときの図は下図 a.のようになる。コンピュータがランダムに選んだ数値の一番上の段の数 Group Report of 2012 SISP - 26 - Group Number 09-A Cryptrographic Hardware - Multiplier 値とその下の段の数値を乗算する。3 段目の数値が今回作った乗算器の数値で、一番下の段の数値 が既存のプログラムが出した結果の数値となっている。3 段目と一番下の 4 段目の数値が同じであ れば計算結果が正しいということである。下図 a.のような計算を約 100 回、コンピュータがラン ダムに選出した2つの数値を乗算した。そして、私たちが作ったプログラムと既存のプログラムの 結果を照らし合わせ、一致すれば私たちが作ったプログラムの計算が正しいということになるの で、この下図 5.7 では分りづらいがすべて同じ結果になったので成功したといえる。このシミュ レーションを行った結果、1 度も計算にミスが出なかったので問題なくプログラムを作ったといえ る。しかし、これではまだ全ての計算を行ったわけではないので完全にミスがないプログラムを作 るためには全ての通りの計算を行う必要がある。一方、1 つの暗号ハードウェアを作るためには乗 算器の部分を作る以外に加算器やメモリや制御器なども作らなければならないのだが、その部分を 作るためには FPGA に乗算器の部分以外に容量が必要となる。空き容量をシミュレーションし、 確認したところ図 5.8 のようになった。この青い部分が濃くなっている部分が現在使用している領 域である。この青色が濃くなっている部分が乗算器の部分であり、この部分が半分以下なら他の機 能を足しても FPGA は使用可能であると推測できる。私たちが作った乗算器が使用した領域は半 分以下なので、今回使用した Cyclone 4 では問題なく暗号処理を行うことが出来る。もし、この 容領域が埋まってしまっていたら今よりさらに高性能の FPGA を使用しなければならない。128 ビット乗算器を作ることは Cyclone 4 で可能ということがわかった。 (※文責: 村山広行) 5.2.3 総評 本プロジェクトの目的である高速 128 ビットの乗算器を作るための一連の流れは、まず、C 言 語による VHDL の記述を行い、コンピュータ上で作ったプログラムのシュミレーションをし、そ のプログラムを FPGA というハードウェアに実装することである。なお、実装したときに FPGA 上で計算をし、計算結果を画面に出力するまでが満足のいく目標である。最終発表までの結果、私 たちが作った VHDL のプログラムを FPGA に実装することは成功したが、FPGA に入力した数 値の結果が画面に出力されなかったので、ほぼ成功したが、画面に出力されるところまで行く計画 だったので、満足する結果にはならなかった。なぜ実装には成功したが出力できなかったという と、FPGA のデバイスがコンピュータと異なっていたため画面に出力することが出来なかったか らである。このことにより最終発表では、FPGA を実際に使って計算を行うことが出来なかった。 また、時間の関係で通常の乗算器と今回作成した乗算器の計算速度の差を比較することが出来な かったことが悔やまれる。既存の 64 ビット乗算器を 2 つ使い今回の作った乗算器と比較したかっ た。また、正確な値を測定するのではなく、時間をタイムウォッチで計るなどで差を比較するのも いい手段であると反省会で案が出た。プロジェクト活動としての評価はグループ全員に明確な役割 があり、また、全員がその役割をこなしてきたと思う。リーダーである木村圭吾は不慣れながらも 一生懸命メンバーに仕事をふり担当教員とも連絡を取りまわりを巻き込みがんばっていたと思う。 それにより、他のメンバーも一生懸命がんばった点がある。小林悠太は一人の作業となるプログラ ミングをこなし、さまざまな工夫を凝らしてくれた。C 言語と VHDL の両方のプログラミング記 述のスキルを持っている。作業途中にプログラミングについての担当教員を交えてのミーティング があり、他のメンバーに今の状況やこれからの改善作業、分らない点の質疑応答を行ってくれた。 加藤翔は FPGA について使い方を調べ、Cyclone 4 を使いこなし実装を行ってくれた。また、発 表でのスライドを作ってくれた。メンバーや担当教員と一番コンタクトを取り、まとめ上げてくれ Group Report of 2012 SISP - 27 - Group Number 09-A Cryptrographic Hardware - Multiplier たと思う。村山広行はスケジュールを決め、提出物の確認やポスター作成を行いまめにメンバーと 連絡を取り目的が達成できるように努めた。人数が少なかったので他の人数の多いプロジェクトと 比べ暇をもてあます人や会話に参加しない人が出ず、プロジェクトメンバーが 1 つになってやるこ とが出来た。プロジェクトの成果や 1 年を通しての内容を踏まえると暗号ハードウェア‐乗算器 編」のプロジェクトは満足いくまでは達しなかったが、各々の技術や能力を磨き今後に活かせるよ うになったものも多いので評価は高いものだったと思う。 (※文責: 村山広行) 5.2.4 成果の評価 本プロジェクトの目的である高速 128 ビットの乗算器を作るための一連の流れは、まず、C 言 語による VHDL の記述を行い、コンピュータ上で作ったプログラムのシュミレーションをし、そ のプログラムを FPGA というハードウェアに実装することである。なお、実装したときに FPGA 上で計算をし、計算結果を画面に出力するまでが満足のいく目標である。最終発表までの結果、私 たちが作った VHDL のプログラムを FPGA に実装することは成功したが、FPGA に入力した数 値の結果が画面に出力されなかったので、ほぼ成功したが、画面に出力されるところまで行く計画 だったので、満足する結果にはならなかった。なぜ実装には成功したが出力できなかったという と、FPGA のデバイスがコンピュータと異なっていたため画面に出力することが出来なかったか らである。このことにより最終発表では、FPGA を実際に使って計算を行うことが出来なかった。 また、時間の関係で通常の乗算器と今回作成した乗算器の計算速度の差を比較することが出来な かったことが悔やまれる。既存の 64 ビット乗算器を 2 つ使い今回の作った乗算器と比較したかっ た。また、正確な値を測定するのではなく、時間をタイムウォッチで計るなどで差を比較するのも いい手段であると反省会で案が出た。プロジェクト活動としての評価はグループ全員に明確な役割 があり、また、全員がその役割をこなしてきたと思う。リーダーである木村圭吾は不慣れながらも 一生懸命メンバーに仕事をふり担当教員とも連絡を取りまわりを巻き込みがんばっていたと思う。 それにより、他のメンバーも一生懸命がんばった点がある。小林悠太は一人の作業となるプログラ ミングをこなし、さまざまな工夫を凝らしてくれた。C 言語と VHDL の両方のプログラミング記 述のスキルを持っている。作業途中にプログラミングについての担当教員を交えてのミーティング があり、他のメンバーに今の状況やこれからの改善作業、分らない点の質疑応答を行ってくれた。 加藤翔は FPGA について使い方を調べ、Cyclone 4 を使いこなし実装を行ってくれた。また、発 表でのスライドを作ってくれた。メンバーや担当教員と一番コンタクトを取り、まとめ上げてくれ たと思う。村山広行はスケジュールを決め、提出物の確認やポスター作成を行いまめにメンバーと 連絡を取り目的が達成できるように努めた。人数が少なかったので他の人数の多いプロジェクトと 比べ暇をもてあます人や会話に参加しない人が出ず、プロジェクトメンバーが 1 つになってやるこ とが出来た。プロジェクトの成果や 1 年を通しての内容を踏まえると暗号ハードウェア‐乗算器 編」のプロジェクトは満足いくまでは達しなかったが、各々の技術や能力を磨き今後に活かせるよ うになったものも多いので評価は高いものだったと思う。1 つに暗号ハードウェアを作るためには 乗算器の部分を作る以外に加算器やメモリや制御器なども作らなければならないのだが、その部分 を作るためにの空き容量を確認したところ図 5.7 のようになった。この青い部分が濃くなってい る部分が現在使用している領域である。この青色が濃くなっている部分が乗算器の部分であり、こ の部分が半分以下なら他の機能を足しても FPGA は使用可能であると推測できる。私たちが作っ た乗算器が使用した領域は半分以下なので、今回使用した Cyclone4 では問題なく暗号処理を行う Group Report of 2012 SISP - 28 - Group Number 09-A Cryptrographic Hardware - Multiplier 図 5.7 計算結果のシュミレーション図 ことが出来る。もし、この容領域が埋まってしまっていたら今よりさらに高性能の FPGA を使用 しなければならない。 図 5.8 FPGA の乗算器が使用した容量の使用領域のシュミレーション図 (※文責: 村山広行) 5.2.5 総評 本プロジェクトの目的である、128 ビットの乗算器を作るための一連の流れは、まず、C 言語に よる VHDL の記述を行い、コンピュータ上で作ったプログラムのシュミレーションをし、そのプ ログラムを FPGA というハードウェアに実装することである。なお、実装したときに FPGA 上 で計算をし、計算結果を画面に出力するまでが満足のいく目標である。最終発表までの結果、私た ちが作った VHDL のプログラムを FPGA に実装することは成功したが、FPGA に入力した数値 Group Report of 2012 SISP - 29 - Group Number 09-A Cryptrographic Hardware - Multiplier の結果が画面に出力されなかったので、ほぼ成功したが、画面に出力されるところまで行く計画 だったので、満足する結果にはならなかった。なぜ実装には成功したが出力できなかったという と、FPGA のデバイスがコンピュータと異なっていたため画面に出力することが出来なかったか らである。このことにより最終発表では、FPGA を実際に使って計算を行うことが出来なかった。 また、時間の関係で通常の乗算器と今回作成した乗算器の計算速度の差を比較することが出来な かったことが悔やまれる。 (※文責: 村山広行) 担当分担課題の評価 5.3 5.3.1 木村圭吾 CSA の生成アルゴリズムの作成 C++ と DX ライブラリを用いて、乗算器の構成を可視化し、 CSA の生成アルゴリズムについて調べていた。CSA の生成アルゴリズムの作成には成功し たが、VHDL を自動で記述するプログラムについては、完成されることが出来なかった。前 期に VHDL を自動で記述するプログラムを作ることは出来なかったが、小林がそれを可能 にした。 Cyclone 4の調査 Cyclone 4の扱い方について調べた。しかし、使い方がわかるまで一ヶ月以 上もかかってしまった。これは大きな反省点である。 リーダーとしての仕事 リーダーとして、進捗状況の確認や中間発表の物品の手配、グループ週報 の提出などを行った。 (※文責: 木村圭吾) 5.3.2 村山広行 CSA の解析とポスター作成 中間発表までの活動としては、CSA の解析 CSA を C 言語で書く ためのアルゴリズムについて解析した、まず、担当教員が講義してくれた内容についてよく 理解し、そのことを参考にしながら本プロジェクトで必要となるプログラミングのアルゴリ ズムについて解析した。結果的に、アルゴリズムの解析は成功した。メインポスターの作成 昨年度のメインポスターを参考することによって、メインポスターの文章を効率的に作成す ることができた。ただし、今年度の暗号ハードウェアのプロジェクトの内容は昨年度のもの と全く異なっていたので、内容構成に時間がかかった。メインポスターのデザインにおいて は、昨年度のメインポスターは全く参考にならなかったので、自分はデザインコースの知人 や担当教員にアドバイスをもらい作成した。後期に作るポスターは、見た瞬間に「暗号ハー ドウェア‐乗算器編」だと分るような、見やすいポスターを作りたいと思う。最終発表まで の活動としては、まず、スケジュール係の担当として後期のメンバー全員のスケジュールを 作成しした。スケジュール通りに進まない点はあったが、全員各自の担当を締め切りまでに はやってくれた。そして、木村圭吾と加藤翔と暗号について調査し、中間発表で質問された 暗号についての説明を明確に出来るようにした。また、ポスターを作る際に、暗号について 知ってもらうためにサブポスターに暗号処理の仕組みについてついてわかりやすく図を用い て記述した。中間発表の際に用いたポスターよりも分りやすく、担当教員からもよい評価を Group Report of 2012 SISP - 30 - Group Number 09-A Cryptrographic Hardware - Multiplier 得ることが出来た。しかし、どのようなポスターにしたら見やすいのかについて悩み、ポス ター作成に時間がかかってしまった。また、最終発表をする際に中間発表であまりいい評価 を与えられなかったので、前回より発表練習をした。最終発表までにある程度の結果を残す ことが出来たので、このプロジェクト学習を行ってよい勉強と経験になった。人数が少な かったためそれぞれの役割が明確であり、また、各々が責任感を持って取り組むことが出来 たので、得られるものが多かった。全体的にバランスの取れたメンバーだったと思う。 (※文責: 村山広行) 5.3.3 小林悠太 乗算器の VHDL の作成 乗算器の VHDL の作成 128 ビットの乗算器を作るための足がかり として、5 ビット、8 ビットの乗算器を VHDL コードで記述した。この VHDL コードを 記述するにあたって白勢先生が例として教えてくれた 3 ビットの乗算器を参考にし、乗算 器の VHDL コードの作成方法を学ぶということを目的とした。しかし、8 ビットの乗算器 でも 1000 行以上という結構な行数になり、128 ビットの乗算器では 2 万行強という予測に なって、とてもではないが 128 ビットの乗算器の VHDL コードを手で書くには時間と手間 がかかりすぎることがわかった。128 ビットの乗算器を作成するには 128 ビットの乗算器の VHDL コードを記述するだけではなく、FPGA に VHDL コードを入れて実装するところ までやらなければならない。なので、VHDL コードを作成することだけに時間をとられて しまい、メンバーが少ない本プロジェクトでは発表準備、実装の設定をするための時間が なくなってしまうことが予想された。これを解決するために後期からは C 言語で乗算器の VHDL コードを自動的に記述してくれるプログラムを作成した。このプログラムは 5 ビッ トと 8 ビットの乗算器を作成してみて乗算器の VHDL コードこのプログラムを用いて 128 ビットの乗算器の VHDL コードを記述することに成功、そしてこれを FPGA へ実装という ところまで行きたかったが FPGA の設定がうまくいかず、最終発表まで時間も無いので断 念するしかなくなってしまい非常に残念だった。実装に手間取られて時間をかなり使ってし まったので、ADDn 回路を使用しない通常のアレイ型乗算器と ADDn を使用した乗算器を 実際に動かしてみて速度の差を検証する、などのこともやりたかったがそこまで到達するこ とができなかったことも心残りだった。今後の展望としては 128 ビットの乗算器の FPGA への実装、通常のアレイ型の乗算器と ADDn 使用時の乗算器の速度差の検証、このほかに も通常のアレイ型乗算器の VHDL コードを自動的に記述するプログラムの作成、動的に配 列の要素を確保することによりどのビット数の乗算器の VHDL コードでも記述することが 出来るプログラムの作成などのことを行っていきたい。 (※文責: 小林悠太) 5.3.4 加藤翔 VHDL を記述する C 言語の作成 C 言語でハードウェア記述言語のソースコードを出力 C 言 語で、与えられたビット数に応じてハードウェア記述言語で記述するソースコードを出力す ることができた。ただし、加算器の集合の記述については、アルゴリズムの解析が不十分な ため 6 ビットまでの加算器の集合ならば出力可能だが、今後はそれ以上のビット数の場合も Group Report of 2012 SISP - 31 - Group Number 09-A Cryptrographic Hardware - Multiplier 出力できるようにする必要がある 中間発表の準備 中間発表に向けてスライド製作 スライドを製作するに当たり、グループ全体の 作業状況を把握し、分かりやすく伝えるために図や表を多く使用し、できるだけシンプルな デザインにした。 (※文責: 加藤翔) Group Report of 2012 SISP - 32 - Group Number 09-A Cryptrographic Hardware - Multiplier 第6章 プロジェクトの結果と反省 最終発表の反省 6.1 6.1.1 成果発表会アンケート結果 成果発表会で聞いてくれた人にアンケートを実施し、発表を聞いて、発表技術について、発表内 容についてどのように思ったのかをアンケート用紙に記入してもらった。その結果を下記に示す。 1. 発表技術の良い意見 多くの図表を用いて説明しており、わかりやすく説明してると感じられた スライドの文字が少なくて良い声が出ていて良い 言葉がはきはきして聞き取りやすかった 分かりやすく説明していた 暗号の重要性の例が分かりやすかった スライドが見やすかった 木村君の話し方がハキハキしていた ちゃんと質問に答えれて良い 最初の 2 人がとてもききやすかった 作業手順の流れもわかりやすかった (※文責: 加藤翔) 2. 発表技術の悪い意見 発表者がスライドにかぶっていた 机の配置を近づけたほうがいい どのように動いているのかの部分も分かりやすく説明して欲しい スクリーンショットより図を使ったほうがいい 大事な部分がスライドに回転かあった 練習不足を感じた 言葉が詰まっていた 声が小さかった ところどころ聞こえなかった 聞き取りにくい 目標のものが何なのかがわからなかった 木村君がスライドの前に立っていて見えない スライドのデザインが数日にわたって変わっている意味はなぜ? 専門用語がわからなかった ポスターを見て欲しいのかわからなかった 滑舌がも悪い Group Report of 2012 SISP - 33 - Group Number 09-A Cryptrographic Hardware - Multiplier ポインタをつかったほうがよかった なぜ最初に一朝一夕ということばを使った 話し方に間をおきすぎて聞きにくい 図が少ない スライドに記されている説明の情報量が多すぎる スライドにアニメーションをつけるべき 重要な点を分かりやすくすべき 後半にかけて駆け足過ぎて理解が追いつけない (※文責: 加藤翔) 3. 発表内容の良い意見 プロジェクトの目標や計画が分かりやすかった 何をやったのかがわかりやすかった 暗号が何に使われているのかが具体的で分かりやすかった 乗算器について詳しく解説していて良かった システム上うまく計算できるものを作ることができたのは良かった 技術的向上が強調されていて良かった 自分たちが出来た部分と出来ていない部分を簡潔にまとめていてよかった 成果がわかりやすかった 前期から最終報告までが計画通りに進められていて良いと思った VHDL の説明が分かりやすかった (※文責: 加藤翔) 4. 発表内容の悪い意見 なぜ wallece tree を使うのかわからなかった 人の興味を引く内容を厳選して発表してほしい 具体例があればもっと分かりやすかったと思う よくわからなかった プロジェクトの目標がもっと分かりやすいともっと良いと思った プロジェクトの成果の一番重要なところがわかりにくい 発表上重要度の低い内容が多い 成果が伝わりにくくて残念 知識が無い人にでもわかりやすくしてほしかった 結果や成果をもっと詳しく知りたい 乗算器の説明が長すぎると思った 暗号と乗算のつながりが良くわからなかった 高速乗算器を作るメリットがよくわからなかった 128 ビットが今までなぜ使われてなかったが分からない 説明が必要なところと不必要なところをもっと選ぶべき プログラムを作成したこと以外の作業が良く分からなかった Group Report of 2012 SISP - 34 - Group Number 09-A Cryptrographic Hardware - Multiplier どのように作業分担したのかを言ったほうが良い VHDL の説明を先にしないと話の内容が理解できない 図が良く分からない グラフが何を示しているのかわからなかった。 専門用語が良く分からなかった 256 ビットや 512 ビットにしなかった理由が分からない 乗算器の高速化について、現状何秒で、何秒早くしたいのかが分からなかった 昨年度のプロジェクトの差異が分からない 従来のものよりどの程度早くしたいのかがわからなかった (※文責: 加藤翔) 6.1.2 アンケート結果考察 アンケートの考察の結果、予想以上に様々な意見が出た。全体的に見たら悪い意見の方が多かっ たが、悪い意見はほぼ同じような意見が多かった。また、ある人は分かりやすいと思ったことでも 違う人にとっては分かりにくいと感じるように、人によって感じ方が違うということがはっきり分 かるような意見も多かった。 1. 発表技術についてのアンケート結果考察 発表技術についてのアンケートの結果、スライドと発表者が重なっていてスライドが見えに くい、という意見が多かった。これは中間のときにスライドを意識しすぎて発表者がスライ ドの方を見ながら説明したことによって声が聞こえにくかったといった意見が多かったた め、スライドは見ないで聞いている人の方を見ながら発表することを意識しすぎた結果、ス ライドと発表者が重なってしまったのだと考える。逆に、ハキハキしていて聞きやすいと いってくれた人が中間発表に比べかなり増えたのは良かったと考える。この問題の解決策と して、今回はレーザポインタなどを使わずに説明したため、前を向く意識でレーザポインタ などの小道具を使ってスライドを示せばちょうど良いバランスになると考える。 (※文責: 加藤翔) 2. 発表内容についてのアンケート結果考察 発表内容についてのアンケート結果、かなり基礎の部分から説明したので、分かりやすかっ たといってくれた人が中間発表よりも多くてよかった。しかし、説明がもっと必要な部分と 不必要な部分をもっと考えるべきという意見があり、活動したことをそのまま全部発表した 点で反省しなければならないと思った。また、高速乗算器を設計したことで既存の乗算器よ り具合的にどの程度速くなったのかの検証も行うべきという指摘もあり、作業予定を立てた 時点でその作業を含んでいなかったので、数値としてしっかりと結果を出せるようにすべき だと感じた。 (※文責: 加藤翔) Group Report of 2012 SISP - 35 - Group Number 09-A Cryptrographic Hardware - Multiplier 6.2 6.2.1 各個人の反省と感想 木村圭吾 結論から言うと必要最低限の目標を達成することが出来たが、それ以上の事は出来なかった、 もう少しちゃんと行うことは出来なかったのかというのが自分の評価である。また、各個人に対す るケアが出来ず、3人もグループから抜けてしまったことと、各作業が遅れたことも大きな反省点 である。 今回のような評価になってしまった原因は問題の見通しの甘さと連携が取れなかったこ と故に Cyclone4 と VHDL を自動で記述するプログラムが非常に遅延したことである。 Cyclone4 はあっさりとうまくいくと思って、早期に作業を行なっておらず、実際にやり始めた 際にエラーが起きて、FPGA に VHDL をながすこむことが出来るようになるまで、一ヶ月近くか かってしまった。もし早期に Cyclone4 の使い方について調べ、Altera 社にエラーについて聞くこ とがじっくり出来れば、もっと作業が進んだはずである。 VHDL は小林一人に任せてしまった ことが大きい。これを何らかの形で分業出来ればよかった。原因は複数人でプログラムを書いた経 験を持った人物が一人もおらず、一人任せになってしまったからである。もしここを分業出来れ ば、作業はもっと進んだはずである。 各個人のケアを出来なかった点も大きい。書く個人に対し てもっと話し合い、グループから抜ける人を出さないようにするべきだった。その兆候に気づけな かった点は大きな反省点である。 報告書と発表の準備もギリギリとなってしまった。これらに関しても、早期に準備するべきだっ た。一応、9月の時点で書けるところまで書いたが、それだけでは駄目だった。 報告書で苦労し たのは政策の遅れ以上に成果物の種類が少ないのも大きい。プロジェクト報告書は10枚以上書く 必要があるが、本プロジェクトの成果物は乗算器の VHDL を自動で記述するプログラムとそのプ ログラムで書いた乗算器の VHDL だけだった。これらの成果物は非常に価値のあるものだが、二 つだけのため、必然的に文量が足りなくなる。 この問題に関して早期に気づき、反省点を書くよ うにする、自分たちが使った物の使用法について書くなどの何らかの方法で報告書が埋まるように するべきだった。 今後、就職する際に似たようなことがあれば、掲示板などを駆使して、お互い の仕事を見るなど、コミュニケーションをきちんと行いたい。また早め早めに行動を取りたい。学 校の課題などでもそうだが、実際の作業は自分の見通しの倍ぐらい時間がかかると感じているの で、それを踏まえた上で行動を取りたい。 感想としては、暗号と乗算器の関係について、驚いた。現代における暗号の重要性と公開鍵暗号 のおおまかな内容についてはすでに勉強していたが乗算と暗号についてここまでの繋がりがあると は思わなかった。また、暗号のアルゴリズムについて知ることが出来るなど、良い勉強になった。 また, 実際の FPGA の使い方についても勉強することが出来た。FPGA の名前は聞いてはいたが、 実際に使うのは初めてだった。 (※文責: 木村圭吾) 6.2.2 加藤翔 私はこの暗号ハードウェア-乗算器編-のプロジェクト 1 年間を通して、前期は乗算器について学 習した後は、C 言語で 6 ビット乗算器の設計業務に携わった。始めは暗号ハードウェアというプロ ジェクト名だったので、暗号についてのプロジェクトだと思っていたが、実際に作業に取り掛かる Group Report of 2012 SISP - 36 - Group Number 09-A Cryptrographic Hardware - Multiplier と暗号解読に用いるハードウェアの一部分である乗算器の作成ということで、ハードウェアに重点 を置いたプロジェクトであると分かった。このプロジェクトによって、今まで受講していたハード ウェアの知識を用いることもあり、プロジェクト学習を通じて講義の大切さを実感することが出来 た。また、ハードウェア記述言語を C 言語を使って出力するというアイディアも今までには無い 考え方だったので、とても考えさせられた。 前期の反省点としては、C 言語で 6 ビット乗算器の設計に取り掛かったが、中間発表に向けての準 備が予想以上にかかってしまい、前期の期間内で 6 ビット乗算器を出力する C 言語プログラムを 最後まで完成させることが出来なかったので、その反省を活かすために、後期からはスケジュール 管理を主に行い、作業を前期より潤滑に進めるように、作業の全体を把握し、遅れている作業の進 行を助けるために多くの作業に携わった。M 後期の感想としては、スケジュール管理をしっか りと行った結果前期よりは、作業が潤滑に進めることが出来た。また、FPGA に VHDL を書き込 みを行う際に、エラーが出たので、エラーを解決させるために自分もその作業に携わり、エラーの 原因の解明に貢献できたと考える。また、前期に行った中間発表の反省から、暗号ハードウェアを 設計するメリットを説明するために、そもそも暗号とは何かということの説明も必要だということ がわかったので、それについての調査も行ったりと、後期はさまざまな作業を行った。このように 様々な作業に携わった結果、プロジェクトの全体像が見えて、スケジュール管理をする上で的確に スケジュールを組み立てたり、変更したりすることができたので、このようなことは社会に出てる 前に気づくことが出来てよかったと考える。後期の反省としては、購入した FPGA の仕様書の不 備などで作業が遅れてしまったので、このようにハプニングがあってもうまく対処できるように、 事前に問題が起きたときの対処なども考えておく必要があると感じた。全体的に、研究作業につい てはスケジュール通りにいったので、その他の発表作業や、レポート作成作業でも、もっと余裕を 持って準備すればよかったと思う。このプロジェクト学習を行ったことで、今後仕事をする上で、 技術的なことはもちろんだが、作業分担、スケジュール管理、問題対処の必要性などの重要性を身 をもって学習することが出来たと考える。 (※文責: 加藤翔) 6.2.3 村山広行 私は、このプロジェクト学習を選択するに当たって暗号処理をせず乗算器を完成させるだけなの かと思ったが、発表をするにあたって暗号処理についての説明をよく受けたので暗号処理について 調べることができ、自分の興味を持てる分野を増やすことが出来た。私はこのプロジェクト学習を 通してグループ学習の大切さと大変さを学んだ。まず、1 年間を通しての授業なので、完成図をは じめに想像することが難しく、初めはどうなるのかと心配だった。そして、メンバー全員の能力が どの程度あるのかを判断し、担当を振り分けることが難しかった。今回のプロジェクト学習ではメ ンバーの担当振り分けが的確だったため、円滑に話が進んでいった。人数が少なかったため一人当 たりの役割にウェイトが偏らず、自分の役割を楽しんで遂行することが出来た。私たちのプロジェ クトは 1 年間を通してほぼ成功したわけだが、この一番の理由は中間発表までに目的の乗算器を作 るための土台を完成させたことである。そして、またその経験が後期に活かせたことによって全体 を通してうまくいった。担当する仕事内容が初めてのことが多かったので、Tex やイラストレータ や VHDL 記述といった新しい技術を身につけることが出来たので自分のためになった。そして、 メンバー全員が初対面だったので、コミュニケーション能力も身につけることができ、自分の能力 向上も出来た。担当教員とのコンタクトをとりつつ、ほぼ自分たちで試行錯誤して 1 つのプロジェ Group Report of 2012 SISP - 37 - Group Number 09-A Cryptrographic Hardware - Multiplier クトを遂行することに対する責任感や目的のものが完成したときの達成感を得ることが出来た。ま た、プロジェクトにおける自分の立ち位置や仕事をする以外のことの役割なども把握することが出 来た。実際に就職し仕事を始めた際にこのようなことをするのだろうかと、就職する前のいい準備 にもなった。このプロジェクト学習を通して周りの人たちも一回り大人になったと思う。 (※文責: 村山広行) 6.2.4 小林悠太 1 年を通してこのプロジェクトで活動し、メンバーとともに課題を解決していき感じたことはグ ループで活動していくことの大変さでした。このプロジェクトは人数は他のプロジェクトと比べ非 常に少なかったが、それでも意思の疎通の難しさ、進展状況を確認しプロジェクト全体の足並みを そろえることの難しさがあり何度かメンバー同士で衝突することもあった。このプロジェクトは去 年は暗号処理について学ぶということが主な活動内容であったが、今年は 128 ビットの乗算器の作 成というプログラミングが主な活動内容になったので、去年までの活動内容を想像して内容の違い に動揺した人もいた。 自分はプログラミングが得意とまではいえないまでも人並みには出来て、そういうことに対して興 味もあったので全く苦にすることも無く活動することが出来た。他のメンバーにはプログラミング が苦手という人が結構いたので、プログラミング関係の仕事はほとんどは自分が担当することにな り大変なときもあったが、このプロジェクトを担当してくれている白勢先生や他のプログラミング の得意なメンバーの助けもあり何とか課題を進めていくことが出来た。 主に自分がした仕事はこのプロジェクトの目的である 128 ビットの乗算器の作成に必要な 128 ビットの乗算器の回路を記述する VHDL コードの作成、そしてその 128 ビットの乗算器の VHDL コードを自動的に記述してくれる C 言語のプログラムの作成だった。この C 言語のプログラムは 先生からの提案で作成が始まったもので、128 ビットの乗算器の VHDL コードは 2 万行強と予想 され自分の手で記述していくのは非常に時間がかかるのでその手間を省くために作成された。この プログラムの作成には 1 年生のときに習った基礎的な知識しか用いられていないので、あまり人の 手を借りずにほぼ全て自分で書き上げたので完成したときには非常にうれしかったのを覚えてい る。中間発表時と最終発表時には自分はこのプロジェクトの中核となるプログラミングの部分に携 わっていたので発表の大事な部分を任せれてとても責任を感じるなどとても辛いこともあったが、 非常にやりがいのある内容だったと思う。このプロジェクトを通し学んだことをこれから社会に出 たときにも活かして生きたいと思う。 (※文責: 小林悠太) Group Report of 2012 SISP - 38 - Group Number 09-A Cryptrographic Hardware - Multiplier 第7章 7.1 7.1.1 今後の課題と展望 課題 乗算の計算結果を表示する VHDL を作成 実際に乗算器の作成に成功したが、乗算器の計算結果を表示する回路の作成は間に合わなかっ た。乗算器の VHDL を書き直して、乗算機の計算結果を表示する VHDL を作成する必要がある。 乗算器の計算結果を表示するには Cyclone4 に付属した液晶を制御する VHDL を記述する必要が ある。また、液晶を別途購入して FPGA につないで表示するという方法もある。 (※文責: 木村圭吾) 7.1.2 Verilog の学習 液晶について動かす際に Verilog と呼ばれるハードウェア記述言語の知識が必要になることが分 かった。これは Cyclone 4 で液晶の制御を行なっているのは FPGA ではなく、MAX ?と呼 ばれる部品で制御していることが判明し、この部分の制御プログラムのサンプルコードが VDHL ではなく、Verilog で書かれている物が大半を占めていたからである。しかし Cyclone 4 のエ ラーの対処に非常に多くの時間を使ってしまい、Verilog について勉強することが出来なかった。 次のプロジェクトでは Verilog について勉強する必要がある。 (※文責: 木村圭吾) 7.1.3 既存の乗算器との比較 今回は既存の乗算器との比較が出来ず、具体的にどれほど早くなったのかを示すことが出来な かった。次は既存の乗算器との比較を行う必要がある。比較対象は2つあり、64ビットの乗算器 と Wallace tree 型ではない128ビットの乗算器である。2 の 256 乗の乗算を行わせて比較する。 (※文責: 木村圭吾) 7.2 7.2.1 展望 暗号ハードウェアの作成 今回は乗算器を作ることは出来た。次の目標は実際に暗号を作成するハードウェアを作成するこ とになる。まず、暗号に関するアルゴリズムを調査し、それに基づいて乗算器以外の部分を VHDL で記述する事となる。乗算器以外の部品はどういうアルゴリズムを使用するのかで異なるが、主に 加算器とシフト演算器、レジスタ、メモリ、制御ユニットなどがある。以下、現時点で分かってい る暗号ハードウェアに必要なアルゴリズムとそれに付随するハードウェアについて述べる。 Group Report of 2012 SISP - 39 - Group Number 09-A Cryptrographic Hardware - Multiplier (※文責: 木村圭吾) 7.2.2 暗号ハードウェアの作成に必要なハードウェアとアルゴリズム 1. モンゴメリ乗算 RSA 暗号の解読に使われるアルゴリズムの一つにモンゴメリ乗算がある。これは除算を実 質的に行うことなく、乗算・加減算・シフト演算のみで整数の積の剰余を求めることのでき るアルゴリズムである。本来、5 ÷ 3 = 1、余り 2 というように剰余を求めるのには除算が 必要となる。しかし、除算はハードウェア上では計算に時間がかかる。しかし、乗算と加減 算とシフト演算は除算と比べて時間はかからない。故にこのアルゴリズムを用いる事によっ て、剰余の計算を高速化することが出来る。今回の暗号ハードウェアで乗算器を作ったのは このモンゴメリ乗算を行う回路を作るためである。 2. 加算器 第五章で説明したように文字通り、加算を行う論理回路である。なお、減算については 2 の 補数を用いることにより、加算器で計算可能である。 3. 乗算器 第一章で説明したように、乗算を行う論理回路。無論、今回作成した乗算器を使用する。 4. シフト演算器 シフト演算を行う論理回路。シフト演算とは桁を左か右にずらす計算である。桁を左にずら す左シフトと右にずらす右シフトがある。ここからさらに論理シフトと算術シフトに種類が 別れるが、暗号ハードウェアとは直接結びつかないので、ここでは言及を避ける。10 進数で 説明すると、左シフトは数字を 10 倍、右シフトは 10 分の 1 にする計算である。論理回路で は 2 進数を扱うため、左シフトは数字を 2 倍に、右シフトは数字を 2 分の 1 にする。この 計算は回路上では加減算よりも高速である。このシフト演算を上手く用いると計算は高速化 出来る。 5. レジスタ レジスタは記憶回路の一種で、制御装置や演算装置などに直接接続されおり、少量である が、操作に対する速度が最速である。D フリップフロップ回路と呼ばれる回路を繋ぐことに よって、構成される。VHDL を用いて FPGA 上で作成することが出来る。 6. D フリップフロップ回路 レジスタを構成する論理回路でフリップフロップ回路の。フリップフロップ回路とは 1 ビッ トの情報を一時的に保持する回路で RF フリップフロップ回路、JK フリップフロップ回路 など、様々な種類がある。D フリップフロップは CLOCK 端子が 0 か 1 かによって、入力 の値が出力として保持される。 (※文責: 村山広行) 7.2.3 256ビットの乗算器の作成 今回は 128 ビットの乗算器を作ったが、現在の公開鍵暗号は 256 ビット以上のビット数の乗算 が用いられている。そのため、さらにビット数を増やすことで計算を早くすることが出来る。しか し、Cyclone4 上で今回使用したアルゴリズムで 256 ビット乗算器を作ろうとすると、Cyclone4 の Group Report of 2012 SISP - 40 - Group Number 09-A Cryptrographic Hardware - Multiplier 性能が足りない可能性が大きい。そのため、Cyclone4 より高性能である Cyclone5 を購入する必 要がある。今回、Cyclone4 を用いたのが、Cyclone5 が出たのが一年前であり、最新機種ゆえのト ラブルがあると予想されたからである。 (※文責: 木村圭吾) Group Report of 2012 SISP - 41 - Group Number 09-A Cryptrographic Hardware - Multiplier 付録 A A.0.4 新規習得技術 本プロジェクト独自の新規習得技術 1. VHDL の扱い方 2. FPGA の扱い方 3. Cyclone 4 の扱い方 4. Quartus 2 の使用方法 5. ModelSim の使用法 6. 暗号についての知識 7. 乗算器についての知識 A.0.5 本プロジェクト独自の新規習得技術 1. Tex の扱い方 2. ポスターの作成方法 Group Report of 2012 SISP - 42 - Group Number 09-A Cryptrographic Hardware - Multiplier 付録 B 使用した講義 1. 情報機器概論 パソコンの取扱いの基礎的なことについて学んだ。 2. プログラミング基礎 プログラミングについて学んだ。C 言語で VHDL を記述するプログラム作成する際にこの 授業で学んだ知識が生かされた。 3. アルゴリズムとデータ構造 アルゴリズムについて学ぶ。上と同じく、 4. ハードウェア基礎 論理回路について学んだ。 5. 情報処理演習 I プログラミンについて学んだ。 6. ハードウェア設計 VHDL について学んだ。 (※文責: 木村圭吾) Group Report of 2012 SISP - 43 - Group Number 09-A Cryptrographic Hardware - Multiplier 参考文献 [1] N. コブリッツ. 数論アルゴリズムと楕円暗号理論入門, シュプリンガー・フェアラーク東京株式 会社, 1997 年. [2] アルテラ社公式ホームページ,https://www.altera.com/, 2013 年 1 月 16 日. [3] 山際伸一,FPGA ボードで学ぶ論理回路設計,CQ 出版 Group Report of 2012 SISP - 44 - Group Number 09-A
© Copyright 2026 Paperzz