私がこれを持っていると想像してください:
$cdata = AES_256($data, $pass);
AES_256は、AESアルゴリズムを実装します。
$cdata
の内容と内容を知って$data
いて、コードも持っているAES_256()
場合、リバースエンジニアリングして見つけることはできます$pass
か?
私がこれを持っていると想像してください:
$cdata = AES_256($data, $pass);
AES_256は、AESアルゴリズムを実装します。
$cdata
の内容と内容を知って$data
いて、コードも持っているAES_256()
場合、リバースエンジニアリングして見つけることはできます$pass
か?
簡単な答え:いいえ。
これはテスト済みであり、Wikiリンクで言及されています。
関連キー攻撃は、最大9ラウンドの256ビットAESを破壊する可能性があります。選択平文攻撃は、192ビットおよび256ビットのAESを8ラウンド、 128ビットのAESを7ラウンド壊す可能性がありますが、2128-2119ではワークロードは実用的ではありません。
言い換えれば、宝くじに当たるのと同じ日に、宝くじを壊すよりも、照明に当たる可能性が高くなります。
これは既知平文攻撃と呼ばれます。他の人が説明したように、AESのような優れた暗号はそれを免れるはずです。
$pass
が実際にはパスワードであり、256ビットのキーではない場合は、運が良かった可能性があります。
実行するのは簡単ではありませんが、通常のパスワードに対するブルートフォース攻撃は、256ビットキーのブルートフォース攻撃よりもはるかに高速です。
したがって、多くのパスワードブルートフォーシングツールの1つを変更すると、(パスワードの強度に応じて)数週間から数年かかる可能性のある攻撃が発生しますが、3x10^51年に比べると高速です...
ウィキペディアからの別の引用:
AESは、256ビットキーの使用を許可します。対称256ビットキーをブルートフォース攻撃で破るには、128ビットキーの2^128倍の計算能力が必要です。1秒あたり10億(10 ^ 18)のAESキーをチェックできるデバイスは、256ビットのキースペースを使い果たすのに約3 x 10^51年かかります。
元のテキストの方が速いかもしれないことを知っているときのブルートフォースは、それでも3 x 10^51年は長い時間です。さらに、1秒あたり10億(10 ^ 18)キーをチェックできるデバイスがおそらくないという問題があります。
要するに:すべてが可能ですが、これは私たちが現在住んでいる世界では実現可能ではありません。
ブルートフォース攻撃は可能ですが、時間がかかります。数十年またはそれ以上のように。それがAESのような暗号化アルゴリズムのポイントです。
AESは、すべての優れた暗号化アルゴリズムと同様に、隠すことによるセキュリティに依存しません。
言い換えれば、コードには「秘密」がないので、コードを持っていても特に役に立ちません。
既知平文は別の問題ですが、私はあまりよく知らないので、他の回答者に任せます。
もちろんそうではありません-唯一のアプローチはブルートフォースです。NISTは、新しい標準のために簡単に解読できる暗号を選択するほど愚かだと本当に思いますか?
スーパーコンピューターの力で、AES暗号化をクラッシュさせる時間が劇的に短縮されました....聞いた...
2x2 ^ 256の可能な組み合わせは、ブルートフォースに多くなります。しかし、ブルートフォーシングが唯一の方法です。実際には約30年かかります。AESは、現時点で可能な限り最高の暗号化です。しかし、それはCPUを使用するのにそれだけの時間しかかかりません。GPU(グラフィックプロセッシングユニット)は厳密に数学ベースであるため、人々は、CPUよりもはるかに高速に数学ベースのアルゴリズムを解読するためにGPUのみを使用するプログラムを作成しています。言い換えれば、AESは30年続くことはないかもしれません。永遠のコードだけが可能だったら。動的暗号化は、近い将来、人々が実際に情報を隠すことができる唯一の方法かもしれないように見えます。