Как бы я перепроектировал криптографический алгоритм? - PullRequest
16 голосов
/ 12 июня 2009

Я написал приложение, которое шифрует текст таким образом:

  1. Получить вводимый текст

  2. Обратный текст

  3. Преобразование в шестнадцатеричное

  4. XOR с ключом

  5. Кодирование Base64

Теперь я сам не делал много шифрования / кодирования, поэтому мой вопрос может показаться глупым, но, скажем, я получил файл с содержимым из вышеуказанного алгоритма, и я не знал об этом алгоритме. Как начать «ломать» текст, есть ли какие-то руководящие принципы, принципы, правила, которым нужно следовать?

Мой вопрос не связан с этими 5 шагами, это был чистый пример.

В качестве другого примера возьмем текст: A751CD9E1F99. Как бы я начал исследовать, что это могло бы означать?

Ответы [ 11 ]

17 голосов
/ 13 июня 2009

Чтобы взломать шифр, криптоаналитики используют всю информацию, которую они могут собрать. Атаки делятся на несколько категорий, в зависимости от того, что известно. Некоторые из основных атак, от самых сложных до самых легких,

  • только зашифрованный текст: это самая сложная атака. Аналитик пытается собрать как можно больше зашифрованных сообщений и анализирует их, чтобы найти закономерности или искажения частоты символов. Однако, с хорошими, современными шифрами, нет никаких шаблонов. Это невозможно с хорошим шифром, правильно используемым.
  • известный открытый текст: наличие открытого текста, соответствующего некоторому зашифрованному тексту, является большим шагом к восстановлению неизвестного открытого текста из новых зашифрованных текстов. Именно здесь действительно начинается «обратное проектирование», потому что он может проверить свои гипотезы об алгоритме по известным входным и выходным данным. Во время Второй мировой войны криптоаналитики усердно работали над созданием обширных списков «шпаргалок» - слов, которые могут появляться в сообщениях противника - для использования атак с использованием открытого текста. Например, погодные условия в определенный день, или названия мест сражений и т. Д., Вероятно, будут сообщаться в штаб-квартиру в зашифрованных сообщениях.
  • selected-openintext: еще лучше, когда криптоаналитик может обмануть своего врага, зашифровав сообщение, созданное криптоаналитиком. В военное время иногда фальшивая информация передавалась противнику в надежде, что она будет зашифрована и поможет криптоаналитику взломать код.
  • адаптивный выбранный открытый текст: это своего рода итеративный подход к известному открытому тексту. Криптоаналитик может многократно зашифровывать выбранный им открытый текст системой и просматривает результаты, чтобы скорректировать свою следующую попытку.

В настоящее время вероятные способы взломать код - это недостатки в системе. Например, может использоваться плохое управление ключами, что позволяет украсть или угадать ключ. В других случаях может использоваться атака «по боковому каналу». Например, путем тщательного измерения времени, которое требуется для определенных криптографических операций, атака может догадаться, что определенные биты или байты ключа равны нулю, вызывая быстрый путь через некоторый алгоритм.

Рядом с концом спектра "металлическая шляпа" находятся методы перехвата радиоизлучений от компьютерного оборудования. Это позволяет удаленному агенту "видеть" то, что отображается на мониторе. Есть даже специально разработанные шрифты, чтобы попытаться прервать этот тип прослушивания.

7 голосов
/ 13 июня 2009

По сути, этот тип шифрования будет легко расшифровать. Кодировка base64 будет достаточно легко распознать. (Вы будете использовать только 64 символа, что типично для Base64.) Следующим шагом будет поиск оригинального ключа XOR. это немного сложнее, но есть несколько алгоритмов, которые могут обнаружить эти ключи, если доступно достаточно зашифрованных данных. Вашего простого текста будет недостаточно, но если они знают, что он должен стать шестнадцатеричной строкой, все станет намного проще. Тогда они должны поменять ваши другие шаги. Все они слишком просты.

Если возможно, он сможет взломать, если хакер знает исходное значение до шифрования. В таких случаях такой короткой строки, как указанная, может быть достаточно, чтобы по крайней мере обнаружить вашу полную процедуру шифрования, хотя ключ, который вы использовали для XOR строки, может быть не полностью известен.

Хорошо, давайте попробуем расшифровать A751CD9E1F99 ... 12 символов. Кажется, вы используете только несколько символов, так что это всего лишь шестнадцатеричная строка. Оригинал должен был состоять из 6 символов. Значения будут находиться в диапазоне от 0x51 до 0xCD, что слишком велико для использования в кодировке base64. Кроме того, так как большинство значений выше 0x7F, это говорит о том, что вы сделали некоторую кодировку поверх него. Атака по словарю уже могла бы дать некоторое представление об используемом ключе XOR, где вы бы XOR суммировали 6 шестнадцатеричных значений с множеством слов по 6 символов, просто чтобы увидеть, какое из них возвращает другое слово в вашем словаре. Те, которые, кажется, возвращают правильные слова, могут быть ключами, которые вы использовали для XOR оригинала. Со второй зашифрованной строкой эти обнаруженные ключи могут быть использованы снова, фильтруя набор возможных ключей в еще меньший набор. В современной системе такая атака по словарю может вернуть результат в течение дня.

Около 50 лет назад эта схема шифрования была бы очень мощной. В настоящее время ожидайте, что это будет взломано в течение дня любым, кто заинтересован в попытке расшифровать его.

Я не специалист по взлому шифрования, но я знаю достаточно, чтобы знать, какие методы шифрования слишком слабы для использования. Около 10 лет назад я работал над проектом, в котором пароль сохранялся в зашифрованном файле с использованием сложного механизма XOR, подобного вашему. Затем клиент решил проверить безопасность и попросил специалиста исследовать только файлы паролей. Он знал только одно имя пользователя и пароль, и эта учетная запись не имела прав администратора. Но ему было достаточно информации, чтобы взломать эту защиту в течение часа, прочитать информацию об учетных записях администратора, а затем использовать эту информацию, чтобы просто делать то, что ему нравится. Затем моя компания дала ему бесплатное пиво на неделю ... :-) Таким образом, 10 лет назад специалисту понадобился всего час. В настоящее время они сравнительно легко взламывают даже более сложные алгоритмы, просто потому, что компьютеры намного мощнее. Если вам нужно использовать этот тип шифрования, то вы также можете не использовать шифрование. Для хакера это не имеет большого значения.

5 голосов
/ 12 июня 2009

Я думаю, вам следует начать с чтения Кодовой книги . Вы спрашиваете, как взломать методы шифрования, и это даст вам представление о том, как они работают.

5 голосов
/ 12 июня 2009

Вы сможете попробовать угадать алгоритм, если знаете, как его расшифровать. Я могу создать множество алгоритмов, которые приведут к «A751CD9E1F99» для некоторого ввода.

Теперь, если у вас есть много доступных входов / выходов, вы можете попробовать немного изменить свой вход, чтобы посмотреть, например, что происходит с выходом. Хорошие алгоритмы шифрования обычно приводят к значительным изменениям вывода при незначительных изменениях ввода.

4 голосов
/ 13 июня 2009

Криптоанализ резиновых шлангов может быть весьма эффективным.

3 голосов
/ 12 июня 2009

Вам понадобится большая текстовая база, чем эта, и некоторое понимание того, что крипта происходит от определенного языка / домена. Затем, основываясь на частоте слов в этом языке / области, можно потенциально расшифровать определенные атрибуты из текста.

Конечно, хорошие шифры работают вокруг этого. С помощью этого метода можно легко взломать только плохо реализованные шифры.

2 голосов
/ 12 июня 2009

Неразличимость зашифрованного текста - хорошая страница для начала, чтобы понять, какие криптоалгоритмы предназначены для предотвращения / защиты. Упомянутый тип атак (например, IND-CPA) также может дать вам представление о том, с чего можно начать.

0 голосов
/ 29 марта 2016

Злоумышленник, вероятно, (в целом) сделает следующее:

Идентификация и устранение любых «видимых для глаз кодирования» или тривиальных криптографических сообщений, таких как реверсирование текста, кодирование Base64, ROT13 и т. Д.

В тот момент, когда они находят состояние с высокой энтропией, они пытаются получить больше фрагментов закодированных данных и совместно их XOR. Это приводит к XOR-обработке двух исходных текстовых сообщений с ключом, отмененным в случае, если кодировка действительно основана на XOR (например, RC4) и ключ был постоянным. Если злоумышленник может получить какую-либо комбинацию данных, закодированных в виде обычного текста, все остальные закодированные данные могут быть декодированы.

При окончательном отчаянии они могут попытаться проверить себя против наиболее распространенных практик, например, когда они используют RC4 или другие простые алгоритмы с динамическим ключом, и поместить ключ в конец или начало файла / данных.

Если у них есть доступ только к закодированному тексту, это в значительной степени конец пути. В случае, если у них есть доступ к ... как API, где они могут создавать кодированную версию предоставленного простого текста, они будут тривиально определять, является ли он основанным на битах (например, XOR), или блочным шифром, или блочным шифром прямой передачи кодирование, но получение ключа и фактического алгоритма все еще является проблемой.

Если у них есть доступ к программе декодирования для кодирования симметричного ключа (например, к вашему XOR) или к программе кодирования асимметричного кодирования ключа, кодирование, скорее всего, мгновенно нарушается путем его обращения.

0 голосов
/ 13 июня 2009

Если у вас есть доступ к черному ящику, который выполняет шифрование, вы можете получить много информации, передав ей определенные входные значения.

В качестве простого примера, если черный ящик выполняет шифрование в стиле «одноразовой панели», если вы подаете все нули, вы получаете одну временную панель. (Фактически, если вы введете любое входное значение, вы получите одноразовый блокнот с дополнительным xor.)

Обратите внимание, что хорошие криптосистемы устойчивы к таким атакам, даже если криптосистема уже известна (но ключ не известен).

0 голосов
/ 12 июня 2009

Э-э ... Я бы сказал:

  1. Base64 декодирует вывод.
  2. XOR выход с помощью ввода для получения ключа.

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

...