独自の暗号化アルゴリズムを実装しようとするのは悪い考えであることはわかっています。そうではないと思う理由の一つは次のとおりです。
たとえばplainText = new byte[]{2,5,1,6,7}
、ボブに送りたいとしましょう。
AES 暗号化または別のよく知られたアルゴリズムを使用すると、次のようになります。
cipherText = Aes.Encrypt(plainText, key, iv); // now I have some cipher text that is not readable to anyone if they do not have the key and iv vector.
誰かがそのメッセージを解読したい場合は、次のようなことをしなければなりません:
newPlainText = Aes.Decrypt(cipherText, key, iv);
ここで私の質問は、正しいキーを入力したかどうかを AES がどのように認識するかです。ブルート フォース攻撃が発生しないアルゴリズムを使用する方が安全だと思います。言い換えれば、ハッカーがあなたが AES を使用したことを知っている場合、method Aes.Decrypt
例外がなくなるまで多くのパスワードを試行し続けることができます。次のアルゴリズムを考えてみましょう。
{2,5,1,6,7}
同じバイト配列をボブに送りたいとしましょう。私の暗号化アルゴリズムは次のようになります。
パスワードは = "securePassword";
プレーン テキストの各バイトを反復処理し、パスワードの各文字の ASCII 値に対して Xor 演算子を実行します。たとえば、最初のバイトは2 Xor (ASCII value of 's')
次の値になり、次の値は5 Xor (ASCII value of 'e')
最後になり{2 Xor 's', 5 Xor 'e', 1 Xor 'c', 6 Xor 'u', 7 Xor 'r'}
ます。
このアルゴリズムでは、書き込みキーを持っているかどうかを知ることができないため、解読できないと思います。よく知られているアルゴリズムを使用すると、パスワードがあまり長くない場合、ブルート フォース攻撃が行われます。
*私の質問は、AES などのよく知られた対称暗号化アルゴリズムは、入力したキーが正しいかどうかをどのように認識するのでしょうか? 正しいキーを提供するかどうかわからないアルゴリズムを使用することは、より安全ではありませんか? *