2012-12-12 7 views
8

Galois field算術の実装をC++で知っていますか?少なくともGF(2 )やGF(2 )のようなケースをカバーする必要があります。パフォーマンスは懸念事項であるため、実装ではオペレーションを最適化するための考えがあったはずです。ガロア体算術の実装

私は、一般的な計算ライブラリまたはこのタスクだけに専用の小さなライブラリを好むでしょう。これらが欠けていて、わかりやすいソースコードも歓迎します。

+0

おそらく[crypto ++](http://www.cryptopp.com/)で[GCM Mode](http://www.cryptopp.com/wiki/GCM_Mode)を実装したコードを使用できます。 – jxh

+1

@ user315052、そのコメントを回答してください:['gcm.cpp'](http://www.cryptopp.com/docs/ref/gcm_8cpp_source.html)にはいくつかのGF2操作が含まれており、そのSSE2を使用すると、パフォーマンスが考慮されました。コメントはほとんどありません。これを他の回答に含めてみたいので、SOのユーザーがこれを他の提案とどのように比較しているかを示すために投票を使用できます。 – MvG

答えて

1

おそらくGCM Modeを実装するコードをcrypto++(特に、gcm.cpp)に使用できます。 Crypto ++は、多くの暗号方式を実装した無料のC++ライブラリです。その中にガロア体演算を使用するGCMがあります。

licenseによると、ライブラリ自体は著作権で保護されていますが、個々のソースファイルはパブリックドメインです。

+0

ガロア体の乗算をより効率的に行うために[キャリーレス乗算の機械命令](https://en.wikipedia.org/wiki/CLMUL_instruction_set)( 'PCLMULQDQ'と友人と呼ばれる)を使用できることを知りました他の方法よりも。私はまた、暗号++がその命令をサポートするライブラリの中にあることも見出しました。 – MvG

0

NTL:http://www.shoup.net/ntl/というライブラリがあります。そのソースコードはかなり "読みやすい"ものではありません。

+0

[GF2E](http://www.shoup.net/ntl/doc/GF2E.txt)モジュールは、任意のeに対してGF(2^e)を実装する必要があります。しかし、それは任意の次数の多項式で動作するように見えるので、16または32の係数を持つ多項式の単純な機械整数ではなく、GMPに基づく可能性が高い。もしそうなら(まだこれを検証する必要がある)、これはメモリとCPUの両方のリソースの浪費のようです。 – MvG

7

私はFinite field arithmeticのWikipediaの記事でArash PartowのGalois Field Arithmetic Libraryへのリンクを見つけました。

一見すると、コードはコメントなしでほぼ​​完全に見えますが、構造化された、おそらく理解できる方法で書かれています。パフォーマンスは重要な設計基準ではありませんが、インライン関数の使用は限られています。一般に、計算上のショートカットを解説するよりも理論計算の直接の表記法が重要と思われるようです。これをここでは完全なものとしてリストアップしていますので、あなたは自分の意見を形成し、それに応じて投票やコメントをすることができます。

0

代数的数を探して、私はthis answerを見つけました。これはGivaroを示唆しています。それを見て、私はGF(p k)も同様に計算することがわかりました。 documentationは薄いですが、thesourcesはかなりのコードと努力を示しています。まだ細部まで掘り下げていないが、私はここでそれを私のリストに入れると思った。

関連する問題