プロジェクト報告書 Project Report 提出日 (Date) 2013/1/16 暗号ハードウェア・乗算器編 Cryptrographic Hardware - Multiplier b1010235 木村圭吾 Keigo Kimura 1 背景 • 公開鍵暗号と乗算 RSA 暗号や楕円曲線暗号では大きな数の乗算が多く • 暗号処理の現状 使用される。RSA 暗号では暗号と復号のための鍵の生 現在、暗号は情報技術、特に通信技術における大きな一 成、暗号化、復号化の全ての過程に置いて冪剰余を求め 分野である。情報通信において、通信は常に第三者から る過程がある。この冪剰余を求める際に乗算が使用され の傍受の危険性を持っている。もし傍受されると個人情 る。楕円曲線暗号の場合も乗算が使用される。この乗算 報の流出など、場合によって多くの人々が損害を受けて の高速化を行うと暗号処理も早くすることが出来る。乗 しまう。そこで通信を暗号化する。こうすることで、第 算を行う論理回路は場三基と呼ばれる。この乗算器は現 三者からの攻撃を防ぐことができる。この通信の暗号化 在、64 ビットまで存在するが、128 ビットの乗算器が存 技術はほぼ全ての情報通信に使われている。この暗号化 在しない。もし、128 ビットの乗算器が現実に出来た場 には主に公開鍵暗号である RSA 暗号や楕円曲線暗号が 合、暗号処理が高速化ができる。例えば、64 ビットの乗 用いられる。この二つの暗号は暗号化と暗号を解読する 算機で、昨今の RSA 暗号の鍵生成で用いれる素数の標 復号化に別々の手順を使い、暗号化の為の鍵を公開でき 準的なビット数である、1024 ビット× 1024 ビットの乗 るようにした方式である。この方式を公開鍵暗号と呼ぶ。 算を行った場合、256 回の乗算が必要である。もし 128 この 2 つは上記の用途の他に暗号の配布と電子署名に使 ビットの乗算器で、1024 ビット× 1024 ビットの乗算を われる。ここで言う暗号の配布とは、共通鍵暗号と呼ば 行った場合、64 回となる。このように、128 ビットの乗 れる、暗号化と復号化の方法が同じである暗号を公開鍵 算器があった場合、大きな数値の乗算を高速で行うこと 暗号で暗号化して第三者に配布することである。 ができる。 • 問題点と問題解決の方法 • 本プロジェクトの課題 このように暗号処理は数多くの情報通信技術に使われる そこで本プロジェクトでは、暗号ハードウェアの一部分 が、暗号処理をソフトウェアで実行すると CPU の処理 である乗算器に焦点を当てる。乗算器とは文字通り乗算 能力の大部分を占拠してしまう。また、RSA 暗号や楕円 を行う論理回路である。乗算は上記で述べたように RSA 曲線暗号は暗号化などの過程で下記のように非常に大き 暗号や楕円曲線暗号などの公開鍵暗号に使用される。乗 な数の乗算を行なっており、この乗算を早く行うことが 算器は現在 64 ビットの乗算器まで存在するが、本プロ 求められている。さらに公開鍵暗号は共通鍵暗号と比べ ジェクトで確認した限り、128 ビットの乗算器は存在しな て、処理が非常に時間が掛かるという欠点が存在する。 い。もし 128 ビットの乗算器が出来れば大きな数の乗算 この問題の解決手法の一つに専用のハードウェアを用 の高速化が望める。この乗算器は暗号ハードウェアの部 いるという方法がある。これにより CPU の処理能力を 品の中で最も作成が難しい部分の一つであり、かつ様々 占拠せず、高速化が出来る。この専用のハードウェアを な公開鍵暗号の専用ハードウェアにおいて使用される部 作成することによる効率化は暗号処理だけでなく、グラ 分である。 フィック専用のハードウェアである GPU に代表される ように、様々な分野で使用される。さらに暗号処理は単 純な処理の繰り返しのため、ハードウェアで実装しやす いという特徴がある。本プロジェクトでは公開鍵暗号に 2 課題解決のプロセスの概要 • 乗算器の構造の配置の解析 (担当教員による座学) 担当教員の説明により基本的な電子式乗算器の構造およ ついて着目する。 び、今回のプロジェクトの乗算器で作成する Wallence ムを記述させることができるプログラムの作成を行った。 Tree 型配置を用いた乗算器について学習を行い、乗算器 その際、まずは事前に設計が完了しており、比較対象が を高速化するための考察をプロジェクトメンバー全員で ある 8 ビット乗算器を半自動的に表示できる C 言語プロ 行った。その後、高速乗算器を設計するために考察した グラムの作成を行った。このプログラムの作成後、この 理論が正しいかを確認するために、その理論に基づいた プログラムを基に、128 ビット乗算器を半自動的に表示 低ビット乗算器を設計した。 できる C 言語プログラムの作成を行った。 • ハードウェア記述言語を用いた回路設計 (PC) • VHDL のコードを出力するプログラムを作成 (PC) 1の理論を基にして設計した回路が実用することがで 前期に 5 ビット乗算器を作成して見たところ VHDL きるかを確かめるため、ハードウェアを設計するための コードが約 900 行となり、その 25.6 倍の大きさの 128 プログラム言語であるハードウェア記述言語を用いるこ ビット乗算器は計算上 2 万行強の膨大な行数となること とで、1で設計した内容に基づいて低ビット乗算器を作 がわかった。これより 128 ビット乗算器の VHDL コー 成した。このような作業を行うために、日本アルテラ社 ドを直接手書きするには時間と手間が掛かり過ぎるとい ホームページより無償提供されている「QuartusII Web うことがわかり、後期からは乗算器の VHDL コードを自 Edition」を使用し、未来大学のライブラリや、担当教員 動的に記述するプログラムを作成することにした。この である白勢先生の本を活用することで、回路設計するた プログラムはメンバー全員が未来大学の講義で習得して めの方法についてグループメンバー各自で教えあいなが いる C 言語で記述することになり、FPGA に実装する ら回路設計を行った。その成果物として 6 ビット乗算器 ための設定作業と平行して行った。 と 8 ビット乗算器を完成させることができた。 5 ビットと 8 ビットの乗算器の VHDL コードを C 言語 • 設計した乗算器のシミュレーション法の学習 (Web) のループ構文を利用して VHDL コードを記述するよう 理論通りに設計しても、正しい動作をするとは限らない。 なプログラムとなっており、500 ビットまでの乗算器な 設計した乗算器が実際に正しい動作が行うことができる ら記述できるようなものとなっている。このようなプロ かを検証する必要がある。そのために、同じく日本アル グラムを作成するにあたり、ループするのに必要な規則 テラ社から無償提供されているシミュレーションソフト 性を VHDL コードが持っているか、または規則性のあ 「ModelSim Altera Starter Edition」を使用することに るプログラムに書き換えることが出来るかを確認し、必 より、設計した回路の動作シミュレーションを行った。 要があれば参考にしている 5 ビット、8 ビット乗算器を このシミュレーションを行うために主に web を活用する 書き直してきちんと動くかどうかを確認する必要がある。 ことでシミュレーションソフトの操作方法について学習 これらの作業を経て作成されたプログラムを利用するこ した。その後実際にシミュレーションソフトを用いて2 とにより、128 ビット乗算器が完成した後に作成する予 で設計を行った回路の検証を結果、設計した乗算器が論 定のより大きな乗算器の VHDL コードも簡単に作成す 理レベルで正しいことを確認することができた。 ることができ、徐々に乗算器のビット数を増やしていく • 他言語を用いて改良した加算器の集合を記述するプログ という目的への助けにもなる。500 ビット以上の乗算器 ラムを作成 (PC) を作成する場合には配列の数を多く確保することで作成 8 ビット乗算器の回路設計を行った際、500 行ほどのハー することが可能になるはずである。 ドウェア記述言語プログラムになった。このことから、 他にも、プロジェクト内では配列を動的に確保すること 128 ビット乗算器のハードウェアプログラムを記述は膨 により、その乗算器の VHDL を作成するのに必要な配列 大な量になることが予測される。だが、プログラムの内 の数を確保することが出来るのではないかという意見も 容は1で解析したアルゴリズムに従っているため、アル 出ており、この方法が実際に使用できるかどうかは現在 ゴリズムに沿った記述プログラムを作ることで、半自動 施行中である。今挙げたビット数を増やす場合の作業の 的に記述させることが可能であると考えた。 簡易化以外にも、FPGA に実装するときの設定に時間を そこで、我々は授業などですでに基本技術を習得してい 割くことが出来るようになるというメリットも存在する。 る C 言語を活用し、ハードウェア記述言語でのプログラ • 128 ビットの乗算機の VHDL コードの作成(PC) 128 ビット乗算器を作成するにあたり、上に述べたとお 発表練習 り C 言語で作成した VHDL コードを自動的に記述する 小林悠太の担当課題は以下のとおりである。 。 プログラムを用いて作成した。これを用いて 2 万行強と いう膨大な行数を直接書く手間を省くのである。作成さ 5 月 各担当の決定、白勢先生による VHDL や乗算器の講義 れた VHDL コードはまだコンパイルをされていないの 6 月 C 言語による ADD n 回路の記述 で、これをコンパイルし問題が無ければ完成となる。こ 7 月 5 ビット、8 ビット乗算器の作成、中間発表練習 れで 128 ビットの乗算器の作成した場合にはより大きな 8 月 中間発表の反省 256 ビットの乗算器、512 ビットの乗算器などというよ 9 月 128 ビットの乗算器作成のための調査 うに徐々にビット数を大きくしていく予定である。 10 月 C 言語による VHDL コードの記述 • 128 ビットの乗算器の FPGA への実装 (PC) 本 プ ロ ジ ェ ク ト は 128 ビ ッ ト 乗 算 器 の 作 成 が 目 標 な 11 月 C 言語のプログラムのデバッグ、128 ビットの乗算器 の VHDL コードのデバッグ の で 、上 の 要 領 で 作 成 さ れ た 128 ビ ッ ト の 乗 算 器 の 加藤翔の担当課題は以下のとおりである。 VHDL コードを FPGA に実装することが出来て初め て 128 ビットの乗算器の完成といえる。前期で使用した 5 月 各担当の決定、白勢先生による VHDL や乗算器の講義 FPGA(図 1) では性能が足りず 128 ビットの乗算器を 6 月 C 言語による ADD の記述 作成できないことが明らかになったので、後期ではプロ 7 月 中間発表に向けてスライドの作成、中間発表練習 ジェクトでより性能のいい新しい FPGA(図 2) を購入し 8 月 中間発表の反省 これで 128 ビットの乗算器を作成することになった。 9 月 後期からの活動に方針決め 10 月 公開鍵暗号についての調査 3 各人の課題の概要とプロジェクト内におけ る位置づけ 11 月 VHDL を FPGA に実装 12 月 発表スライドの製作、成果発表 木村圭吾の担当課題は以下のとおりである。 4 プロジェクトの結果 5 月 各担当の決定、白勢先生による VHDL や乗算器の講義 6 月 メンバーの担当分け、乗算器の構造の配置の解析 7 月 中間発表に向けての準備、中間発表練習 8 月 中間発表の反省 9 月 メンバーの担当分けの指示、最終報告書の構成の作成 10 月 公開鍵暗号についての調査、最終報告書の記述 11 月 FPGA のエラーの対処 12 月 発表スライドの製作、成果報告会の発表練習 • 効率の良い乗算器の設計 効率のよい乗算機の設計を行うことに成功した。まず乗 算器を設計する上で、私たちはより高速で乗算の計算を 行うものを作ることに重点を置くことにした。その結果、 Wallace tree 型という型の乗算器の設計が効率が良いと された。Wallace tree 型乗算器というのは、通常乗算器 を作ると下図 1.のような形になるが、Wallace tree 型乗 算器は下図 2.の様に FA と add の数は同じだが縦の段 村山広行の担当課題は以下のとおりである。。 5 月 各担当の決定、白勢先生による VHDL や乗算器の講義 6 月 乗算器の構造の配置の解析、ポスターの文章構成 7 月 ポスターの作成、ポスターの印刷、中間発表練習 8 月 中間までの反省 9 月 今後のスケジュール決め 10 月 暗号処理の仕組みについて調査 11 月 ポスターの構成と内容を決め作業 12 月 メンバーと作業内容について話し合う、ポスター印刷、 と横の段の数が変わる。なぜ段数が減少すると計算が速 くなるのかというと、同時に処理できる計算量が増加し、 信号経路の短縮による処理待ち状態が低減されるからで ある。簡単に言うと、このような形になることによって一 度に計算する量が増え、処理時間が短縮されるのである。 今回改良を加えたのは、乗算器の計算を行う構造の中の CSA(Carry Saved Adder) という部分の計算をするとこ ろだけである。なぜ CSA(Carry Saved Adder) の部分 に重点を置いたのかというと、CPA(Carry Propagated Adder) という部分に比べ CSA(Carry Saved Adder) は 改良の余地があり暗号処理を高速化するためには一番効 率の良いやり方であったためである。この CSA の段数 を減らすことに実際に成功することが出来た。 • 成果の評価 を使用しなければならない。 • 総評 最終発表までの結果、私たちが作った VHDL のプログラ ムを FPGA に実装することは成功したが、FPGA に入 QuartusII Web Edition と言う VHDL 記述用のソフト 力した数値の結果が画面に出力されなかったので、ほぼ ウェアを用い、VHDL の記述を行った。5.2.2 で述べた 成功したが、画面に出力されるところまで行く計画だっ ように、C 言語を使用し、VHDL のソースコードを省略 たので、満足する結果にはならなかった。なぜ実装には 化し、ミスの多くならないような VHDL のソースコード 成功したが出力できなかったというと、FPGA のデバイ を記述した。この担当は小林悠太が担当し、構造体や関 スがコンピュータと異なっていたため画面に出力するこ 数などを用いプログラムを能動的に動作しようと工夫し とが出来なかったからである。このことにより最終発表 た。これにより、小林悠太が作ったプログラムを用いる では、FPGA を実際に使って計算を行うことが出来な と他のビット数の VHDL も簡易的に記述することが出 かった。また、時間の関係で通常の乗算器と今回作成し 来るようになった。これが、今回 C 言語による VHDL た乗算器の計算速度の差を比較することが出来なかった 記述の工夫した点であり、手間のかかる作業でもあった。 ことが悔やまれる。 その後、担当教員の白勢先生のチェックによって私たち が作ったプログラムにミスがなかったので成功と言える。 担当教員のチェックは主に、作ったプログラムをシュミ レーションすることである。コンピュータがランダムに 選んだ数値の一番上の段の数値とその下の段の数値を乗 算する。3 段目の数値が今回作った乗算器の数値で、一 番下の段の数値が既存のプログラムが出した結果の数値 である。3 段目と一番下の 4 段目の数値が同じであれば 計算結果が正しいということである。下図 3.のような 5 今後の課題 128 ビットの乗算器は完成したが、128 ビットの乗算器の 性質についてまだ調べられていない。具体的には 128 ビット の乗算器が 64 ビットの乗算器と他の構成で作った 128 ビッ ト乗算器と比べてどれだけ早いかについてである。また、実 際に暗号を解くハードウェアを製作することも出来なかった。 今後の展望としては 128 ビットの乗算器の性質を調べ、この 乗算器を用いて暗号を得くハードウェアの製作を行いたい。 計算を約 100 回、コンピュータがランダムに選出した2 つの数値を乗算した。そして、私たちが作ったプログラ ムと既存のプログラムの結果を照らし合わせ、一致すれ 6 今後の展望 • 暗号ハードウェアの作成 ば私たちが作ったプログラムの計算が正しいということ 今回は乗算器を作ることは出来た。次の目標は実際に暗 になる。 号を作成するハードウェアを作成することになる。まず、 このシュミレーションを行った結果、1 度も計算にミスが 暗号に関するアルゴリズムを調査し、それに基づいて乗 出なかったので問題なくプログラムを作ったといえる。1 算器以外の部分を VHDL で記述する事となる。乗算器 つに暗号ハードウェアを作るためには乗算器の部分を作 以外の部品はどういうアルゴリズムを使用するのかで異 る以外に加算器やメモリや制御器なども作らなければな なるが、主に加算器、メモリ、レジスタ、制御ユニットな らないのだが、その部分を作るためにの空き容量を確認 どがある。 したところ図 4.のようになった。この青い部分が濃く • 256ビットの乗算器の作成 なっている部分が現在使用している領域である。この青 今回は 128 ビットの乗算器を作ったが、現在の公開鍵暗 色が濃くなっている部分が乗算器の部分であり、この部 号は 256 ビット以上のビット数の乗算が用いられてい 分が半分以下なら他の機能を足しても FPGA は使用可 る。そのため、さらにビット数を増やすことで計算を早 能であると推測できる。私たちが作った乗算器が使用し くすることが出来る。しかし、Cyclone4 上で今回使用し た領域は半分以下なので、今回使用した Cyclone4 では問 たアルゴリズムで 256 ビット乗算器を作ろうとすると、 題なく暗号処理を行うことが出来る。もし、この容領域 Cyclone4 の性能が足りない可能性が大きい。そのため、 が埋まってしまっていたら今よりさらに高性能の FPGA より高性能な Cyclone5 を購入する必要がある。
© Copyright 2026 Paperzz