2013-02-26 25 views
5

nVidia CUDAを使用してCTRモードでAES-256を実装しようとしています。私は正常にキー拡張のためのCPUコードをコーディングして、今私は実際のAES - 256アルゴリズムを実装する必要があります。 Wikipediaによると、私が見たコード、特にthis PDF(9ページ)によれば、AESラウンドは一連のテーブルルックアップとして実装できます。私の質問は、どのようにこれらのテーブルを生成するのですか?私は、これらのテーブルを格納するために4 KBが必要であることを認識しており、それは問題ではありません。私は一日中これらのテーブルを見つけようと一生懸命過ごしました。 PDF参照欄の参照表T0、T1、T2、T3へのリンクを掲載しましたが、これらの内容はわかりません。また、ラウンドキー4,5,6,7についても言及していますが、これらのインデックスが何を指しているのかもわかりません。AES(AES-256)ルックアップテーブルの作成

これらのルックアップテーブルを生成する方法を調べるのに最も近いのはthis projectです。コード内では、と言うコメントがあります:(?それは行列の乗算または何か他のものである)

Te0[x] = S [x].[02, 01, 01, 03]; 
Te1[x] = S [x].[03, 02, 01, 01]; 
Te2[x] = S [x].[01, 03, 02, 01]; 
Te3[x] = S [x].[01, 01, 03, 02]; 

は、しかし、私はその表記手段が知っている、完全にはよく分からないが。私が認識しているのは、S-box行列だけでなく、混合列部分の定数行列です。

[編集]誰かがそれを指摘したので、どのようにルックアップの実装を実際に遅くすることができますか?ルックアップテーブルなしでAESを実装することが賢明でしょうか?

+0

見た目が面白ければ、実際にはテーブルルックアップで実装できるのはS-boxだけです。 – trumpetlicks

+0

本当ですか?私は前述の実装を開き、それは完全にルックアップテーブルに依存しています。すべての操作に** **参照テーブルを1つだけ使用するプロジェクトもあります。私は本当にそれが必要ではない、私は操作ごとに1つのルックアップテーブルが必要です。間違いなく可能ですが、どうやって調べる必要があります。 – user2007674

+1

あなたが話していることは、2 ^(256 + 128 + 128)* 128ビットのテーブルであることに気づくでしょう。キーは256、データは128、CTRは128です。これは完全な入力 - 出力ルックアップです(それがAESを逆転するのが難しい原因です)。現時点ではあなたのリファレンスドキュメントを読むことができる場所ではありませんが、ルックアップに100%依存していても、SBOXのルックアップしかありません。 SBoxはSubstitutionを表し、定義によってルックアップテーブルとなります。 – trumpetlicks

答えて

2

Tテーブルは、マトリックス形式のAESラウンド変換の簡単な説明です。それらを構築するには、オリジナルのRijndael NIST proposal、セクション5.2.1を参照してください。同じパッケージのテストファイル内のテーブルを生成する方法の説明もありますhttp://golang.org/src/crypto/aes/const.go#L80

-

誰でもまだ興味を持っている場合は
+0

ソースリファレンスへのリンクは非常に便利です! – Anders

0

は、これらのルックアップテーブルは、囲碁のプログラミング言語の標準ライブラリで見つけることができます。

関連する問題