暗号計算機屋のブログ

なにか思いついたことを不定期に更新。

巨大整数用四則演算プロセッサSnakeCubeが高速である秘密

はじめに

2020年3月30日、コンピュータサイエンスに関する米国の学会ACM(Association for Computing Machinery)が、 コロナ感染拡大を受けて同学会の論文が6月30日までオープンアクセスになったようです。 早速、僕が発明したSnakeCubeより優れたものがあるのか調べたところ、 電通大の崎山先生の論文(2007年)が検索でヒットしたのでSnakeCubeと比較をしてSnakeCubeが高速であることを説明します。 崎山先生の論文は、ベルギーのルーヴェンカトリック大学との共同研究のように見えています。 崎山先生は僕と同時期に日立製作所に勤務されていましたが事業部が違ったので、一度も連絡が取れたことはありません。 以後、「電通大演算器」と呼ばせていただきます。

注意! SnakeCubeはオープンソースではなく商用開発しているものです。

SnakeCubeとは

ICF3-Fと呼んでいたことがありましたがオープンソースと間違われそうなのでSnakeCubeに改名しました。 1999年 RSA暗号の性能で世界一だった暗号LSI ICF3をベースに高速化した巨大整数用四則演算プロセッサです。 汎用演算プロセッサと暗号専用演算器のセットです。僕はICF3の汎用演算プロセッサの唯一の設計、開発者です。 この汎用演算プロセッサに2018年に僕が発明した暗号専用演算器(モンゴメリ乗算器)を追加したもの。

icf.hatenablog.com

電通大演算器

米国の学会ACMの次の論文にある演算器のこと。SnakeCubeの演算器に近いところがあります。

「Efficient Pipelining for Modular Multiplication Architectures in Prime Fields」 GLSVLSI’07, March 11-13, 2007, Stresa-Lago Maggiore, Italy. Copyright 2007 ACM 978-1-59593-605-9/07/0003

演算器の構造について

大雑把な両者の演算器アーキテクチャの話をします。 モンゴメリ乗算のループ処理では、巨大整数の乗算を2回するのですが、 SnakeCubeは1個の演算器で直列に2回乗算します。 電通大は1/4個の演算器を2個を使って4回乗算します。

このことから同じ周波数であれば理論的にはSnakeCubeのほうが2倍性能が出ます。 後で説明しますが予想ではSnakeCubeのほうが数倍高い周波数で動作します。

つまり3倍の周波数だとするとSnakeCubeは電通大演算器の6倍高速ということになりますが、 電通大演算器が毎サイクル乗算器を使っているのに対しSnakeCubeでは5サイクルに4回なので、 最終的に4.8倍高速ではないかという予測です。 SnakeCubeの最下位ビットからのブロッドキャストの工夫により、 鍵長が大きくなるにしたがってこの差が、さらに大きくなっていきます。

SnakeCubeが高周波数で動作する秘密

この説明を完全理解するには電通大演算器の論文を読む必要があると思いますが、 このタイプのモンゴメリ乗算器のクリティカルパスは最下位ビットからのブロッドキャストです。 電通大演算器は、このクリティカルパスのために周波数が上がりません。 電通大の論文に書かれている図では、UiからT0iの区間のことで1サイクルになっています。

SnakeCubeでは、このクリティカルパス3サイクルピッチの4サイクルディレイとなるような工夫をしています。 正しくは3サイクルピッチの4、5・・・nサイクルディレイです。 鍵長が大きくなるにしたがってnが大きくなっていきます。 鍵長が大きくなっても周波数が落ちません。

このため電通大演算器の3倍の周波数を見込めるのです。 3サイクルピッチなのですが電通大のUiからT0iに相当するのは4サイクルなので3倍の周波数。

クリティカルパスが3サイクルあるため乗算器は3回に1回しか利用されていないのかというと、 別の演算を1回入れているので、乗算器を3回に2回利用しています。さらに2スレッドにして クリティカルパスの遅延をオーバーラップさせ5サイクルに4回、乗算器を使うということをします。

まとめ

SnakeCubeは電通大演算器に対して方式性能2倍、周波数3倍。 電通大演算器は乗算器の利用率100%ですがSnakeCubeは80%です。 最終的にSnakeCubeは2×3×0.8 = 4.8倍高速という予想ができました。 また鍵長が大きくなるにしたがってこの差が、さらに大きくなっていきます。

大きなモンゴメリ乗算器は実装できるのか?

はじめに

前回のブログ「わかりやすいICF3-Fのモンゴメリ乗算器の説明」で途方もなく大きなモンゴメリ乗算器を実装できるということ書きました。ここではICF3-Fは複数チップを接続したものでも実装できるのか?という話をしてみたいと思います。そして、そこから何が言えるのか?を考えてみたいと思います。

巨大なモンゴメリ乗算器は実装できる

当たり前のような気もしますが、演算器の周波数を落とさず、演算器の大きさに比例した性能を出すことができる実装ができるという意味です。 RSA暗号をCPUで計算した場合、おおよそ鍵長が2倍になると計算時間は8倍になります。僕が書いた次の記事が参考になると思います。

RSA 8192bitの性能を測定するソースコード - Qiita

ICF3-Fは鍵を大きくしていっても鍵長2倍で計算時間4倍のまま、ほとんど効率は低下しません。

複数チップ上に実装しても効率は下がらないのか

現在の設計では、複数チップ間の遅延時間にもよりますが、演算器の周波数が全く下がらないような設計をしています。現時点(2019年11月6日)では設計までで検証はできていませんけれども。隣接するDSP間の通信が3サイクルあっても、周波数を下げずに動作することができます。もちろんチップ間の遅延時間が大きければ周波数は下がりますが、チップ間の遅延時間が1サイクルに入る限りは大丈夫です。DSPからチップのI/Oピン、チップ間、チップのI/OピンからDSPというぐあいに3サイクルで転送させます。

言えることは

電子投票などの準同型暗号システムや、SSLを使ったシステムを設計する上で、量子コンピュータの解読脅威のため、可能な限り大きな鍵の公開鍵暗号(RSA暗号など)を使いたい。システムに必要な要求性能は、わかっている。ICF3-Fの、あるFPGAの実装から「鍵長2倍で計算時間4倍」法則を使って、システムの鍵長を考えることができる。またICF3-Fは演算器の最下位ビットから最上位ビットまで、一筆書きのように、並べるだけの実装なので開発コストが小さく、見積もりが容易。 サバンチ大学の剰余乗算のFPGA実装は米アマゾンのFPGAコンテストの結果からも言えるように美しい理論はあるものの実際には実装してみないと性能が、わからないところがある。そして鍵長が大きくなるにしたがって効率が、どんどん下がっていく。ICF3-Fの「鍵長2倍で計算時間4倍」が理論のように見えてくるのかも。

わかりやすいICF3-Fのモンゴメリ乗算器の説明

はじめに

米アマゾンとイーサリアム財団らがFPGAコンテストをするそうです。簡単に言うとA×A mod N (A,N: 1024bit)をできる限り速く演算するというコンテスト。コンテストのサイトで紹介されているサバンチ大学の論文「Low-Latency Modular Multiplication Algorithm - Erdinc Ozturk」にはXilinxFPGAで剰余乗算器、A×B mod N(A,B,N: 512bit)を実装した結果がある。巨大な剰余乗算器で、ICF3-Fの剰余乗算器(=モンゴメリ乗算器)よりも、かなり高速な演算器です。コンテストで1024bitのものが実装できれば、ですが。コンテストで1024bitの性能の結果が出たようです。詳しくはコンテストのサイトほうへ。

ご注意! ICF3-Fはオープンソースではありません。

目的

サバンチ大学の論文には128bit、256bit、512bitの結果があるので、そこから1024bitのDSPの数を予想すると4225個。一方、ICF3-Fは44個×2です。 サバンチ大学の論文の方法で1024bitのものが実装されてもICF3-Fは、RSASSLアクセラレータの用途など、実際に利用される用途では負けていないということを言いたいのですが、 あまり細かいことを書きたくなかったので、わかりやすいICF3-Fのモンゴメリ乗算器の説明になりました。ICF3-Fとの違いで大きなものはNの入れ替え。 ICF3-Fは演算毎にNを入れ替えられるが、Nの入れ替えに時間がかかると思われます。つまりサバンチ大学の論文では複数のSSL証明書を運用したい場合、運用が難しい。周波数も考慮しないといけないのですがICF3-Fの約100倍のDSPを使うので100倍以上の性能が出ないとコストパフォーマンスが悪い。100倍以上としたのは、ICF3-FはリダクションもDSPで演算していますが、サバンチ大学の論文では巨大なLUTとBRAMを必要としている点があります。サバンチ大学の論文では小型のSSLアクセラレータを作れないであろうとか。

ICF3-Fのモンゴメリ乗算器(1024bit版 DSP 44個)

f:id:icf:20190812212327p:plain
ICF3-Fのモンゴメリ乗算器
1ループ=3サイクルで17bit分のモンゴメリ乗算。1024×1024bitをするには61ループ(183サイクル)。DSP内のレジスタに入力データを設定、ループ終了後、DSP内のレジスタに答えが格納されている。 uのブロッドキャスト以外は、隣接するDSPしかデータ転送がなくデータのローカリティが高いアーキテクチャ。k番目のDSPは、k-1番目のDSPとk+1番目のDSPと通信するのみで配線実装しやすい。 3サイクル中、乗算は2回行われる。乗算のうち、ひとつはuの値がないと演算できないためDSPが2倍あっても、あまり高速化できない。1つのDSPでuの値が不要な乗算を先に行い、その後、uの値を使う乗算を行う。DSPは乗数を17bitづつシフトする用途にも使われている。サバンチ大学の論文では乗算にRNSを使っているためXilinxDSPの24×17の乗算器を16×16として使っているがICF3-Fでは乗算にRNSは使っていないので24×17として使えている。つまり(24×17)÷(16×16) = 1.59倍、効率良く乗算器を使っている。

このようにループさせるだけでモンゴメリ乗算が正しく演算できることの証明はモンゴメリ乗算の累積加算における分割加算の証明にあります。

大きなモンゴメリ乗算器が実装できる仕組み

f:id:icf:20190812212444p:plain
大きなモンゴメリ乗算器が実装できる仕組み
乗算器が大きくなっていくとuのディレイが間に合わなくなってくる。そこでuのブロッドキャストに中継FFを入れる。 kからk+1のデータはFFで中継。k+1からkのデータを1サイクル早く作る。ここがポイント。このときディレイが心配になるが、それでもクリティカルパスはu生成になると思うので、ここはクリティカルパスにならない。このため、途方もなく大きなモンゴメリ乗算器を実装できる。途方もなく大きな乗算器になってもクリティカルパスが、長くなることはない。つまりDSP当たりの演算効率は、ほとんど下がらない。

ICF3-Fの性能を2倍にする

RSA暗号SSLアクセラレータにおいて、RSA暗号の鍵長が大きくなるとサバンチ大学の論文では実装できなくなるし、ICF3-Fも実装できても性能が遅すぎる問題がでてくる。そこで2個のICF3-Fを連結して中国人剰余定理を使って、性能をほぼ2倍にする方法が、現実可能だということです。

ICF3-Fモンゴメリ乗算器の試作完成版ソースコード

目的

ソースコードの公開ではなくてハッシュ値のみの公開です。2019年8月1日、「米アマゾンとイーサリアム財団ら、賞金10万ドルのFPGAデザインコンテストを開催」の発表がありました。一見、暗号資産に関係する関数(VDF)を高速に演算するコンテストですが、RSA 2048bitのコンテストのTiny版とも言えます。つまり現在、商用開発しているICF3-Fが僕以外の人によって盗作され、コンテストに参加してしまう心配が出てきました。1999年のICF3はオープンソースなのですがICF3-Fは商用版なのです。ところが詳細なICF3-Fの設計図(Rev0.4、試作完成版)は2018年8月8日に公開してしまっているのです。そこで盗作防止策として2018年8月7日のタイムスタンプがあるコード署名のついたverilogのコードのハッシュ値を、ここで公開し、ICF3-Fが先に開発されていた証拠があることを報告します。

どうして証拠になるの?

コードサイニング証明書によるタイムスタンプつきの署名なので、一般の人がタイムスタンプの日付を操作することは、できないからです。

ソースコードのSHA256によるハッシュ値

2つありますが、同じverilogのコードのファイルに2回、コード署名をしただけです。

27d72fc069badfc0e8ade8ad314dd88fc9df2214d94fc39531faaaf3ff76631b dbed98785ea18d92ff581c75c9b5f242040ee5cf3e786f1a90d33499d8aa9765

コンテストに参加される方へ

verilogのコードはありませんが、「分割加算」設計図(Rev0.4)を、確認していただけますよう、お願いいたします。 ICF3-Fは分割加算の技術だけでなく、設計図Rev0.4のブロック1とブロック2をつなぐ配線によって、非常に長い桁のモンゴメリ乗算が可能になっています。

僕の分割加算と準同型暗号

目的

僕の考えた分割加算が準同型暗号を使ったシステムで役に立ちそう。

分割加算とは

大きな数のモンゴメリ乗算を高速に演算するアルゴリズム。僕が考えたもの。 詳しくは「モンゴメリ乗算の累積加算における分割加算の証明」

準同型暗号とは

暗号化されたまま加算や、乗算が行える暗号。RSA暗号など、いくつかの公開鍵暗号がある。僕はアルゴリズムや安全性については詳しくない。 電子投票電子マネーでの応用が期待されている様子。具体的に社会実装するという動きもあるようです。

分割加算は使えるか?

RSA暗号はもちろん。Paillier暗号でも、使えると思われます。 分割加算では基数2n(nは、17~64程度)なので 使えるかどうかは暗号アルゴリズムにあるmod xのxがgcd(2,x)=1であること。すなわちxが奇数かどうかになります。 準同型暗号を使ったシステムで、どのくらいモンゴメリ乗算を使うかによって、実際に分割加算を実装したFPGAなどのハードデバイスが役に立つかが決まります。

分割加算はFPGAに向いている

分割加算を使った暗号プロセッサICF3-FはASICのみならずFPGAでも効率的に実装できる。 ICF3-Fの元となっているICF3は、オープンソースハードウェアとして公式サイトがある。 ただし、まだライセンスの整備が十分でない。 構想の話ですが、ICF3-FとICF3の命令セットを、なるべく共通化して、オープンソースのICF3で広く普及させ、 真に性能が必要なシステムでは、ICF3-Fが売れる。その利益によってオープンソースのICF3が整備されるというような、、、。