Шифр XOR грубой силы

Можно ли взломать стандартный шифр 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;
}

Могу ли я перебрать это с помощью классического подхода к списку слов?

Я думал о:

Создать КЛЮЧ списка слов

XOR *#(I@KI с КЛЮЧОМ, чтобы РАСШИФРОВАТЬ его и получить СТРОКУ

XOR STRING с КЛЮЧОМ, чтобы зашифровать его

Сравните новую ЗАШИФРОВАННУЮ СТРОКУ с ВХОДНОЙ ЗАШИФРОВАННОЙ СТРОКОЙ

Если они совпадают, КЛЮЧ найден.

Я не проверял это, просто спросил, прежде чем предпринимать действия и тратить слишком много времени на то, что не сработает.

Спасибо.


person PeeS    schedule 17.07.2013    source источник


Ответы (2)


Предполагая, что вы шифруете осмысленный удобочитаемый текст, можно взломать этот шифр XOR, если злоумышленник будет:

  1. зашифрованный текст, закодированный с повторным использованием ключа (например, цикл % sKey.size() )
  2. 2 шифротекста зашифрованы одним и тем же ключом

Анализ частоты может нарушить оба случая.

Но можно использовать xor открытого текста с действительно случайным ключом той же длины, что и сообщение. Это будет нерушимый шифр: одноразовый блокнот

OTP невосприимчив даже к атакам грубой силы. Перебор всех ключей просто дает все открытые тексты, все с равной вероятностью являются настоящим открытым текстом.

person varren    schedule 17.07.2013

Что вы подразумеваете под «шифром XOR»? Как сказал @varren, одноразовый блокнот не сломать. Тем не менее, большинство XOR-шифров, используемых в действительности, являются не OTP, а потоковыми шифрами, такими как RC4. Эти шифры можно взломать, потому что ключ (обычно) короче, чем сообщение, а поток ключей не является истинно случайным, а псевдослучайным. Потоковые шифры можно атаковать методом грубой силы, так как они не соответствуют требованиям для одноразового блокнота.

person rossum    schedule 17.07.2013