0

標準の XOR 暗号をブルートフォースすることは可能ですか?

これを知っている:

*#(I@KI

XOR関数でエンコードされています

//
std::string CStringCoding::Xor( const std::string& strIn )
{
    std::string sOut = "";

    for(std::size_t loop = 0; loop < strIn.size(); loop++)
    {
        unsigned int iCharacter = static_cast<unsigned int>(strIn[loop] ^ sKey[loop % sKey.size()]);
        sOut += iCharacter;
    }

    return sOut;
}

古典的な単語リストのアプローチでそれをブルートフォースできますか?

私は考えていました:

ワードリスト KEY を生成する

* #(I@KIを KEY で XOR して解読し、STRING を取得します。

STRING を KEY で XOR して CIPHER する

新たに CIPHERED STRING を INPUT CIPHERED STRING と比較する

それらが一致する場合、キーが見つかりました

私はそれをテストしませんでした。行動を起こす前に尋ねるだけで、うまくいかないことをするのに多くの時間を費やしました.

ありがとう。

4

2 に答える 2

3

人間が読める意味のあるテキストを暗号化していると仮定すると、攻撃者が次のことを行う場合、このXOR 暗号を破ることができます。

  1. キーの再利用でエンコードされた暗号文 (例: loop % sKey.size() )
  2. 同じ鍵でエンコードされた 2 つの暗号文

周波数分析は、両方のケースを破ることができます。

しかし、メッセージと同じ長さの完全にランダムなキーで平文を xor することは問題ありません。解読不可能な暗号になります:ワンタイムパッド

OTP はブルート フォース攻撃に対しても耐性があります。

于 2013-07-17T08:34:05.760 に答える