Home

ICF3-Fとは

1999年のICF3はRSA暗号の性能が世界一でしたがSSLアクセラレータとしても利用することが可能でした。 そのICF3をFPGAで実装しSSLアクセラレータとして特化したものをICF3-Fとして2018年4月25日フォークさせます。 フォークさせたICF3-Fは商用化を目指そうかと思うのでオープンソースではなくクローズドにしようと思います。

ブログのほうに、もう少し詳しいことを書いています。
「FPGAを使ったSSLアクセラレータのICF3-F」

一人で、あれこれ、やっているせいで、更新わすれてました。もう一つ詳しくかいてあるブログあります。
「ICF3-Fのモンゴメリ乗算器が高速である仕組み 」

2018年7月2日追加 「ICF3-Fのモンゴメリ乗算器が高速である仕組み 」 の設計図のRev0が完成したので公開します。 クローズドで公開する理由ですが、過去に不正アクセスで侵入された経験があり、 産業スパイによって盗まれていないことが保証できない。 産業スパイが海外のメーカーに持って行って逆輸入したり、特許を取得してしまうと、非常に問題になるため、 公開することにしました。

最後にふたつの24bitを加算して25bitの累積加算結果を計算する加算器と 1024bitの大型加算器を兼用することで性能向上と、実装容易性が増している。 実際に実装する段階で追加修正は、あると思います。

2018年7月2日 17:30追加 Rev0.1にバージョンアップします。 公開してすぐにバージョンアップとなりましたが、大型加算器との兼用をやめて、 簡潔にしただけなので、大きな影響はないと思われます。 これによってゲート数は増加しますがFPGAではターゲットデバイスに入りきれば、 煩雑な実装をする必要はなく、性能的にも若干優れるので、大型加算器の兼用しないバージョンを 優先させていきます。 DSP48E1のCの入力に接続される24bit加算器が性能を上げるのに役に立っています。


2018年7月4日 3:30追加 Rev0.2にバージョンアップします。 DSP48E1の内部の変更なのでバージョンアップをする必要は、なかったかもしれません。 これよりも高周波数を狙うバージョンも、今後、検討します。


2018年7月13日追加 17bit逆数演算器をバージョンアップ。
今回はシミュレーション結果のみ、演算終了後、自動的に止まる論理を追加しています。 (ちなみにRev0.2はバグっていて動かなかった)

画像をクリックすると拡大表示されます


2018年7月16日 2:00追加 Rev0.3にバージョンアップしました。
まだ公開するには、早い感じですが、産業スパイ対策なので。 DSP48E1のB1レジスタを有効にしたままBCIN-BCOUTをスルーで使うことができないことが判明したので BCIN-BCOUTを外部論理として外に出した。逆数演算器は、ページからはみだしたので、図面からなくなっています。 uを全ブロックに転送するため1cycを使っているが先頭2ブロックは0cycで転送してuの計算が1cyc早くなるようにした。 このためブロック1は1cyc遅れるブロック2と整合性をとりつつブロック0に合わせることが必要になり複雑になっている。 しかし4サイクルピッチだったのが3サイクルピッチで演算ができる。


2018年8月7日追加 Rev0.3をXilinxのシミュレータでの動作が検証できました。
7月16日に公開したRev0.3は多少バグがありましたが、根本的には変わっていません。 RSA 4096bitなどの鍵長が長い場合、XilinxのFPGAでは隣接するDSPが中央分離帯で分断されてしまう 場合がありますが、4サイクルから3サイクルに性能を向上させた技術を用いれば、DSPが離れていても 動作が可能です。


2018年8月8日 2:00追加 Rev0.4にバージョンアップしました。
XilinxのxsimでUNISIMライブラリのDSP48E1を使ってシミュレーションによる検証をしました。 RSAの演算を一通りした場合の演算の期待値をすべて作成し、シミュレーション結果とコンペアしています。 フリーのverilogシミュレータicarusでも検証しています。 RSAの乱数によるテストを行うとicarusのほうが約7倍高速でした。 ただし高速なUNIFASTライブラリのDSP48E1を使用しています。


2018年8月17日追加 Vivadoで実装してみた。
はじめてなので全く保証できないが演算器の最大周波数からRSA 2048の性能を算出した。 2011年のIEEE(広島大)論文ではDSP1個で277ms(447MHz)。これはDSP90個で3.2ms(125MHz)。 90個で約86倍。かなり高効率に並列化された感じ。実際に製品化できることを期待! 図はXilinxのFPGA、DSP48E1が90個並んでいる

画像をクリックすると拡大表示されます


2018年9月11日追加 暗号プロセッサのブロック図
だいたい、できたので公開してみます。見た目、1999年のICF3とあまり変わらない感じですが、 XilinxのFPGAに合わせて修正されています。 従来論理をそのまま実装するより、面積効率がいい実装になるように修正されています。 このため従来論理よりは不便になっているところがあります。 例えばAレジスタはデータレジスタから入力できなくなったり、データレジスタがデュアルポートから シングルポートになったりしています。反対に、32bitコードだったのが64bitコードになったことで 並列に動作させる命令が増えるケースもあります。また2個あるモンゴメリ乗算器を、 近い乗算器、遠い乗算器の2種類にして、遠い演算器はDレジスタから取り込むようになってます。 これはXilinx FPGAのカラムアーキテクチャに適するように修正されました。

画像をクリックすると拡大表示されます


2018年9月28日追加 ICF3-Fで使われる分割加算の証明をブログに公開
ビット長の大きな加算はキャリーによる遅延が大きくなるため、分割して並列に加算してキャリーによる遅延を低減し高速化する方法の証明です。キャリーの問題を冗長性を持ったレジスタを使って解決していますが、その計算方法が正しいことを証明しています。 これです。「モンゴメリ乗算の累積加算における分割加算の証明」