Как мне переделать криптографический алгоритм?
Я написал приложение, которое шифрует текст таким образом:
Теперь я сам не делал много шифрования/кодирования, поэтому мой вопрос может казаться глупым, но, скажем, я получаю файл, который имеет контент из вышеуказанного алгоритма, и я не знал об этом алгоритме. Как можно начинать "ломать" текст, есть ли какие-либо рекомендации, принципы, правила, которые следует соблюдать?
Мой вопрос не связан с этими 5 шагами, это был чистый пример.
В качестве другого примера возьмите текст: A751CD9E1F99. Как бы я начал исследовать, что это может означать?
Ответы
Ответ 1
Чтобы разбить шифр, криптоаналитики используют всю информацию, которую они могут собрать. Атаки делятся на несколько категорий, в зависимости от того, что известно. Некоторые из основных атак, от самых сложных до легких, - это
- ciphertext-only: это самая сложная атака. Аналитик пытается собрать как можно больше зашифрованных сообщений и анализирует их, чтобы искать шаблоны или искажения в частоте символов. Однако с хорошими современными шифрами нет шаблонов. Это недопустимо с хорошим шифром, правильно используемым.
- known-plaintext: наличие открытого текста, соответствующего некоторому зашифрованному тексту, является большим шагом к восстановлению неизвестного открытого текста из новых зашифрованных текстов. Именно здесь начинается "обратная инженерия", потому что он может проверить свои гипотезы об алгоритме против известных входных и выходных данных. Во время Второй мировой войны, криптоаналитики упорно трудились, чтобы построить обширные списки "шпаргалка" и— слова, которые, вероятно, чтобы появиться в вражеских сообщениях и— использовать открытый текст атаку. Например, погодные условия в определенный день, или названия мест сражений и т.д., Скорее всего, будут отправлены в штаб-квартиру в зашифрованных сообщениях.
- selected-plaintext: еще лучше, когда криптоаналитик может обмануть своего врага в шифрование сообщения, созданного криптоаналитиком. В военное время иногда поддельная информация просочилась бы врагу, надеясь, что она будет зашифрована и поможет криптоаналисту сломать код.
- адаптивный выбранный-открытый текст: это своего рода итеративный подход к известному открытым текстом. Криптоаналитик может повторно использовать свой выбранный-открытый текст, зашифрованный системой, и рассматривает результаты, чтобы настроить его следующую попытку.
В настоящее время вероятные способы разбить код - это недостатки системы. Например, может использоваться плохое управление ключами, позволяющее краже или угадывать ключ. В других случаях может использоваться атака "бокового канала". Например, тщательно измеряя время, необходимое для определенных криптографических операций, атака может угадать, что определенные биты или байты ключа равны нулю, что приводит к быстрому пути через некоторый алгоритм.
Рядом с контуром "tinfoil hat" конец спектра - это методы, позволяющие перехватывать радиоизлучения от вычислительного оборудования. Это позволяет удаленному агенту "см." что отображается на мониторе. Есть даже специально разработанные шрифты, чтобы попытаться сорвать подобный подслушивание.
Ответ 2
В принципе, такого рода шифрование было бы разумно легко дешифровать. Кодирование base64 было бы разумно легко распознать. (Вы будете использовать только 64 символа, что характерно для Base64.)
Следующим шагом будет поиск исходного ключа XOR. что немного сложнее, но есть несколько алгоритмов, которые могут обнаружить эти ключи, если имеется достаточно зашифрованных данных. Простого текста будет недостаточно, но если они знают, что он должен стать шестнадцатеричной строкой, все становится намного проще.
Затем они перевернут ваши другие шаги. Все они слишком легкие.
Если возможно, он должен иметь возможность взломать, если хакер знает исходное значение перед шифрованием. В таких случаях строка, такая же короткая, как и предоставленная, может быть достаточной, чтобы, по крайней мере, обнаружить вашу полную процедуру шифрования, хотя ключ, который вы использовали для XOR, может быть не полностью известен.
Хорошо, попробуйте расшифровать A751CD9E1F99... 12 символов. Кажется, вы используете только несколько символов, поэтому, похоже, это всего лишь шестнадцатеричная строка. Оригинал должен быть 6 символов. Значения будут находиться в диапазоне от 0x51 до 0xCD, что слишком велико для использования в кодировке base64. Кроме того, поскольку большинство значений выше 0x7F, которые предполагают, что вы сделали некоторую кодировку. Атака по словарю может уже дать некоторое представление о используемом ключе XOR, где вы должны XOR 6 шестнадцатеричных значений с большим количеством слов из 6 символов, чтобы увидеть, какой из них возвращает другое слово в словаре. Те, которые возвращают действительные слова, могут быть ключами, которые вы использовали для XOR оригинала. С помощью второй зашифрованной строки эти обнаруженные ключи могут быть использованы снова, отфильтровывая набор возможных ключей до еще меньшего набора. В современной системе такая атака по словарю может вернуть результат в течение дня.
Около 50 лет назад эта схема шифрования была бы очень мощной. В настоящее время ожидаем, что он будет взломан в течение дня, любым, кто заинтересован в его расшифровке.
Я не эксперт по взлому шифрования, но я знаю достаточно, чтобы узнать, какие методы шифрования слишком слабы для использования. Около 10 лет назад я работал над проектом, который хранит пароль в зашифрованном файле, используя сложный механизм XOR, такой как ваш. Затем клиент решил проверить безопасность и попросил специалиста изучить только файлы паролей. Он знал только одно имя пользователя и пароль, а учетная запись пользователя не имела административных прав. Но для него было достаточно информации, чтобы он взломал эту безопасность в течение часа, прочитал информацию об учетных записях администратора и затем использовал эту информацию, чтобы делать все, что ему нравится. Моя компания тогда дала ему бесплатное пиво в течение недели...:-)
Таким образом, 10 лет назад специалисту понадобилось всего час. В настоящее время они с легкостью взламывают еще более сложные алгоритмы, просто потому, что компьютеры более мощные. Если вам нужно использовать такой тип шифрования, вы можете просто не использовать шифрование. Для хакера это не имело бы значения.
Ответ 3
Вы можете попытаться угадать алгоритм, если знаете, как его расшифровать. Я могу создать много алгоритмов, которые приведут к "A751CD9E1F99" для некоторого ввода.
Теперь, если у вас много доступных входов/выходов, вы можете попробовать изменить только немного свой вход, чтобы увидеть, что происходит с выходом, например. Хорошие алгоритмы шифрования обычно приводят к значительным изменениям выпуска для незначительных изменений ввода.
Ответ 4
Думаю, вам следует начать с чтения Кодовой книги. Вы спрашиваете, как взломать методы шифрования, и это даст вам представление о том, как они работают.
Ответ 5
Вам понадобится более крупная текстовая база, а также понимание того, что крипт исходит из определенного языка/домена. Затем, основываясь на частоте слов в этом языке/домене, можно потенциально расшифровать определенные атрибуты из текста.
Конечно, хорошие шифры работают вокруг этого. С помощью этого метода можно легко с легкостью сломать только плохо реализованные шифры.
Ответ 6
Криптоанализ резиновых шлангов может быть весьма эффективным.
Ответ 7
Неразличимость Ciphertext - это хорошая страница, чтобы начать понимать, какие криптоалгоритмы предназначены для предотвращения/защиты. Указанный тип атак (например, IND-CPA) также может дать вам представление о том, с чего вы можете начать.
Ответ 8
Если у вас есть доступ к черному ящику, который выполняет шифрование, вы можете получить много информации, подав ему определенные входные значения.
В качестве простого примера, если в "черном ящике" используется шифрование стиля "один раз", если вы загружаете все нули, вы получаете одноразовый блокнот. (На самом деле, подавая ему любое входное значение, вы получите одноразовый блок с дополнительным xor.)
Обратите внимание, что хорошие криптосистемы устойчивы к таким атакам, даже если криптосистема уже известна (но ключ отсутствует).
Ответ 9
Нападавший, вероятно, (в общем) сделает следующее:
Идентифицировать и побеждать любые "видимые для глазного кодирования" или тривиальные криптографии, такие как реверсирование текста, кодирование Base64, ROT13, ect.
В тот момент, когда они находят высокое состояние энтропии, они пытаются получить больше фрагментов закодированных данных и XOR их вместе. Это приводит к XOR-началу двух оригинальных текстовых текстов с отмененным ключом в случае, если кодирование действительно основано на XOR (например, RC4), и ключ был постоянным. Если злоумышленник может получить какую-либо комбинацию данных с кодировкой в виде обычного текста, все другие кодированные данные могут быть декодированы.
При окончательном отчаянии они могут попытаться протестировать большинство распространенных практик, например, когда они используют RC4 или другие простые альгоки с динамическим ключом и помещают ключ в конец или начало файла/данных.
Если у них есть только доступ к кодированному тексту, это в значительной степени конец пути. В случае, если у них есть доступ к.. как API, где они могут создавать кодированную версию поставляемого простого текста, тогда они будут тривиально идентифицировать, если его бит на основе (например, XOR) или блок-шифр, или канал прямого преобразования кодирование, но получение ключа и фактического алгоритма все еще является проблемой.
Если у них есть доступ к программе декодирования для симметричного кодирования ключа (например, вашего XOR) или программы кодирования асимметричного кодирования ключа, то, скорее всего, он будет мгновенно побежден, если он изменит его.
Ответ 10
Это невозможно, вы можете отказаться от расшифровки XOR, если у вас нет знаний о том, какой ключ был использован.
В общем случае это еще более невозможно (если это возможно:)) для определения того, что может означать зашифрованная строка.
Ответ 11
Err... Я бы сказал:
- Base64 декодирует вывод.
- XOR выход с входом для получения ключа.
Я предполагаю, что, поскольку это простой алгоритм шифрования, это должно быть легко изменить его таким образом, если вы знаете ввод и вывод, но не ключ.