AES-512 アルゴリズム (つまり、暗号化、復号化) を実装する JavaScript はありますか? ほとんどの JavaScript に AES-128、AES-192、AES-256 が実装されていることがわかりました。
9 に答える
Rijdael 暗号には、128、160、192、224、および 256 ビットのバリアントがあります。Advanced Encryption Standard では、128、192、および 256 ビットのバリアントが選択されました。128 ビットの対称キーは 1024 ビットの RSA キーとほぼ同じ強度であると見なされ、256 ビットの対称キーは 2048 ビットの RSA キーとほぼ同じ強度であると見なされます。実際には、192 ビット AES を使用する人は誰もいません。なぜなら、彼らはパフォーマンスや輸出規制を気にして 128 ビットを使用するか、パラノイアで 256 ビットを使用するからです。
一般的に使用されている 512 ビットの対称キー暗号は 1 つもありません。AES に基づくワールプール ハッシュ関数は 512 ビットのダイジェストを返しますが、これは 512 ビットの AES 暗号と同じではありません。
512 ビット AES などというものは存在しないことを理解しています。
ウィキペディアから:
暗号化において、Advanced Encryption Standard (AES) は、米国政府によって採用された暗号化標準です。この標準は、AES-128、AES-192、および AES-256 の 3 つのブロック暗号で構成され、Rijndael として最初に公開されたより大きなコレクションから採用されています。
他の人が言及しているように、「meet-in-the-middle 攻撃」によって与えられる時間/空間のトレードオフにより、double-AES-256 は 512 ビットのセキュリティ (むしろ 256 + 1 ビットの時間の複雑さ) を提供しません。
ただし、AES-512が実際に存在する場合、「何」と正しく答えた人はいないと思います。現在のすべての AES バリアントは 128 ビットの固定ブロック サイズを持っていることに注意してください。したがって、AES-512 が存在する場合、ブロック サイズも 128 ビットのみであり (パターンが保持されていると仮定)、MixColumns または ShiftRows に変更を加える必要はありません。サブルーチン。
512 ビットの鍵サイズを使用するように AES システムを拡張することは、AES 標準によって技術的にサポートされています (許可されている場合) N_k>8
。AES 標準 FIPS-197 は、鍵のサイズにほとんど依存しない設計になっていることに注意してください。N_k=16
欠けているのは( )のラウンド数だけです512 bit keys=16*'32 bit words'
。現在の標準(14 ページ) では、それぞれN_r={10,12,14}
のラウンドが指定されてN_k={4,6,8}
います。次のパターンは を示していますN_r=N_k+6
。したがってN_r=22
、N_k=16
... 定義後、他N_r=22
にN_k=16
何も変更する必要がない場合は、(セクション 5.2 で指定されているように) キー スケジュールの最初の 512 ビットに指定されたキーを事前入力し、アルゴリズムを続行します...
唯一の制限要因は、周期が 51 であるため、単語x (mod x^8+x^4+x^3+x+1)
ごとに乗算されてから繰り返される Rcon[i] 単語である可能性があります。...しかし、使用される最大のものはN_k
x^51=(1 mod x^8+x^4+x^3+x+1)
Rcon[i]
i=(N_r+1)*N_b/N_k ; ((N_r+1)*N_b is the total size (in 4 octet words) of the key schedule)
i=(N_k+6+1)*N_b/N_k
i=(N_k+7)*4/N_k
i=4+28/N_k ; (correct... ignoring rounding issues (and probably an off by one error due to laziness))
キーサイズが大きくなるにつれて使用されるRconが少なくなるため、問題ではありません...
AES256 を 2 回実行することは、(将来の) AES512 暗号化とまったく同等ではないことに注意してください。
コムサイダー: 2^256 + 2^256 < 2^512
つまり、2 つの 256 ビット キーをブルート フォースするのに必要な時間は、単一の 512 ビット キーをブルート フォースする時間よりも大幅に短くなります。
(どちらの攻撃も現在のハードウェアで実行可能というわけではありません)
AESを拡張することは可能かもしれないと思いますが、いわば軟膏のハエはシフトとリバースシフトの値です。それ以外は問題ないはずです。したがって、512 の場合、4 つの行と 16 の列が必要になりますが、前述のようにシフト係数を計算する必要があります。1024 の場合、列数を 2 倍にするだけですが、シフトと逆シフトを計算する必要があります。
AES は単なる標準であり、さまざまなことを処理します。それらの 1 つは Rijndael と呼ばれる暗号です。
それは利用できず、256 ビット以上で定義されています。
理論的には、この暗号をより長い鍵の長さに拡張することもできますが、256 ビットの鍵の長さは、対称鍵暗号にとってすでにとてつもなく強力です。
RSA 鍵と非対称暗号と混同しないでください。それらははるかに弱く、同じ鍵の長さを持つ合計強度の暗号と同等の強度は、はるかに強力です。Rijndael を変更すると、セキュリティを危険にさらす多くの間違いを犯す可能性があります。256 ビットの AES キーは、おそらく 2048 ビットの RSA キーと同等の強度があります
しかし、パラノイアをまったく新しいレベルに引き上げたい場合は、何かを暗号化し、もう一度暗号化するだけです。2 回暗号化すると、実質的に鍵のサイズが 2 倍になります。そして、間違いを犯す心配はありません。
すべての行が 1 つの 64 ビット数値を保持するように、64 ビット数値の 8 行を使用できると思います。その上でキーの追加を問題なく実行できます。
*int64_t __lrotl(int64_t,int)* および *int64_t __lrotr(int64_t,int)* の 64 ビット バージョンを使用できるため、左/右シフトは問題になりません。軟膏の唯一のハエは、%4 から %8 に変更する必要があるvoid mixcolumns()とvoid invmixcolumns()ですが、機能するとは思いませんが、理論的には機能するはずです。
AES-512 の正式な標準はありませんが、2 つの異なる 256 ビット キーを使用して AES-256 を 2 回実行するだけで、その効果を簡単にシミュレートできます。
2 回実行することの主な問題は最適化ですが、ハードウェア暗号化サポートを使用しないため、Javascript には特に影響しない可能性があります。これを念頭に置いて、最も簡単な方法は、選択したライブラリに完全に依存します。ほとんどのライブラリは、あらゆる種類のストリーミング機能を念頭に置いて設計されていないため、256 ビットごとにデータの 2 つの別々のパスを実行することになるでしょう。 「512ビット」キーのチャンク。
他の人が質問したように、より大きな問題は、真の 512 ビット保護が必要な理由です。現時点では 256 ビットで十分ですが、それが心配な場合は、可変長のキーを受け入れるようにシステムを設計し、256 ビット チャンクごとに 1 つのパスを単純に実行することをお勧めします。このようにして、アップグレードが必要だと感じたときはいつでも、より大きなキーを発行/生成することで、後でサイズを増やすことができます。
暗号化を追加するには、2 回行うことができます。
たとえば、AES-256 で 2 回暗号化すると、256 ビット Powered by 2 になり、65536 ビットの暗号化になります。;) ただし、そのパフォーマンスの結果を気に入っていただけるとは思いません。ただし、128 ビットの暗号化を 2 回行うと、16,384 ビットの暗号化になります。1 回の暗号化には 1 つのキーのみを使用する必要があります。2 回暗号化する場合は、2 つの異なる暗号化に 2 つのキーを使用する必要があります。この種の暗号化を突破することは誰にとっても非常に困難になると約束できます。;)