GPUを利用して.NETからAES暗号化を行うことはできますか?もしそうなら、どのように?
-
10-07-2019 - |
質問
ダブリンのトリニティカレッジからの興味深い論文:
AES暗号化の実装と分析
商品グラフィックス処理ユニットについて
これらの手法は、openGLを使用してGPUに参加し、AESに必要な数値変換を実行します。
マネージド.NETライブラリを介してストリーム暗号化を実行するこの機能を公開するのはどれほど難しいでしょうか?
どのように始めるのですか?ヒント?例?
編集:CUDAまたはAcceleratorを使用して関連する経験がありますか?
解決
Microsoftのアクセラレータライブラリを使用できます。 .NETを介してGPUにアクセスできます。
さらに必要な作業を調べた後、これは非常に簡単なことです(AESアルゴリズムの書き直しが好きでない限り)。ただし、可能です。
他にもC#APIがあるかもしれませんが、私が出会ったのは Bouncy Castle API でした。 。あなたがしなければならないのは、MicrosoftのAccelerator APIを取得し、AESアルゴリズムのソースコード内で数学演算が実行される任意の場所で使用することです。
他のヒント
CUDA /(c ++ / cli)実装のマネージラッパーを作成するか、cuda.netを使用してc#のカーネル自体をすべて 実行することをお勧めします。 CUDAではcを使用する必要があり、opengl / directxではシェーダーを使用する必要があるため、実際のカーネル実装を高水準言語で実行する方法は実際にはありません。 開始するには、cuda.netをご覧になるか、CUDA SDKとサンプルをダウンロードしてgpgpuプログラミングの概要をご覧ください。
別のオプションは Brahma です(Webサイトはダウン状態です)。
ウェブサイトの引用:
ブラフマとは
Brahmaは、.NET 3.5フレームワーク(C#3.0)用に記述されたオープンソースライブラリで、さまざまなプロセッサでの並列ストリーミング計算への高レベルのアクセスを提供します。 現時点では、BrahmaにはGPUプロバイダーがあり(その焦点はGPGPUです)、あらゆる種類のプロセッサーで実行するように適応できることに注意してください。
ブラフマーで何ができますか
Brahma 2.0は、C#3.0の新しいLINQ構文を使用して、データのストリーミング変換を指定します。 Brahmaを使用すると、1つのメソッド内でGPUで実行されるステートメントとCPUで実行されるステートメントを混在させることができます!グルーコードがまったく必要ないため、わずか数行のコードで、CPU操作を介在させた複雑なマルチパスGPU計算を実行できます。必要な接着剤とシェーダーコードはすべて、Brahmaによって自動的に生成されます。必要なことは、高レベルの.NETコードを書くことだけです。
使用していませんが、最近ポッドキャスト .NET Rocksについて。 GPUシェーダー言語を学習したくない場合に使用するのに適したライブラリのようです。
C#をGPUに統合するために使用するものは何でも、AESのCUDA実装を使用する必要があります。彼らはそこに最速です。最速の実装は、リンク先の三位一体グループ。 Modern Graphics HardwareのペーパーのPractical Symmetric Key Cryptographyをご覧ください。