Зная открытый текст, как узнать используемую схему шифрования?[закрыто]

StackOverflow https://stackoverflow.com/questions/231592

  •  04-07-2019
  •  | 
  •  

Вопрос

У меня есть несколько полей char() в таблице DBF, которые были зашифрованы предыдущим разработчиком проекта.

Однако я знаю открытый текст результата расшифровки нескольких записей.Как определить функцию/алгоритм/схему расшифровки исходных данных?Вот несколько примеров полей:

Для криптотекста:

b5 01 02 c1 e3 0d 0a

Открытый текст должен быть:

3543921 or 3.543.921

И для криптотекста:

41 c3 c5 07 17 0d 0a

открытый текст должен быть

1851154 or 1.851.154

Я считаю 0d 0a это просто прокладка.Было из данных, собранных в кодировке win-1252 (не знаю, имеет ли значение)

РЕДАКТИРОВАТЬ: Это ради любопытства и обучения.Я хочу иметь возможность понять используемое шифрование (кажется, простое, хотя это двоичные данные), чтобы восстановить значение полей для кортежей, открытый текст которых я не знаю.

РЕДАКТИРОВАТЬ 2: Добавил пару образцов.

Это было полезно?

Решение

В общем случае простого пути не существует.Этот вопрос слишком общий.Попробуйте опубликовать эти простые + зашифрованные строки.

РЕДАКТИРОВАТЬ:

  • для обучения вы можете прочитать эту статью: Криптография в Википедии
  • если вы действительно верите, что шифрование простое - проверьте, является ли это XOR на уровне байта (или слова) - см. следующий псевдокод

    for (i in originalString) {
    newString[i] = originalString[i] ^ CRYPT_BYTE;
    }
    

Другие советы

Предполагая, что это не так просто, как заменительный шифр (попробуйте анализ частоты) или плохо примененный XOR (например, повторное использование ключа; попробуйте XORing двух зашифрованных текстов с известными открытыми текстами, а затем посмотрите, является ли результат XOR открытых текстов; или попробуйте выполнить XOR, зашифровав шифрованный текст, смещенный на некоторое количество байт), вероятно, вы должны предположить, что это хорошо известный потоковый / блочный шифр с неизвестным ключом (который, скорее всего, состоит из символов ASCII). Если у вас достаточно большая выборка пар зашифрованный текст-открытый текст, вы можете начать с проверки, имеют ли незашифрованные тексты с одинаковыми первыми несколькими символами / байтами шифротексты с одинаковыми первыми символами / байтами. Там вы также можете увидеть, является ли это блочным или потоковым шифром и задействован ли какой-либо механизм обратной связи. Заполнение, если оно присутствует, также может указывать на то, что это блочный шифр, а не потоковый.

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

Насколько легкой будет эта задача, будут определять следующие факторы:

  • насколько хорош используемый метод шифрования;если это новый, хорошо зарекомендовавший себя метод, такой как RSA или AES, вам, вероятно, не повезло.
  • сколько у вас зашифрованного и открытого текста — чем больше, тем лучше
  • что это за данные: проще всего использовать простой текст, а сложнее всего — случайные данные
  • все ли данные зашифрованы одним и тем же ключом или использовалось несколько ключей.

Ключ к успеху — не унывать;история криптоанализа полна историй о взломе якобы невзламываемых кодов;Пожалуй, самой известной является машина «Энигма» времен Второй мировой войны, взлом которой способствовал развитию современных компьютеров.

Из того, что вы предоставили, мы можем сказать несколько вещей:

  • При длине зашифрованного текста в 7 байт в каждом случае это вряд ли будет блочным шифром (поскольку блочные шифры шифруют блок за раз, их длина будет кратна размеру блока, а размер блока в 56 бит маловероятен*). .
  • Длина зашифрованного текста и количество символов в открытом тексте в каждом случае одинаковы, поэтому это может быть простое кодирование чисел в виде ascii с применением потокового шифра.
  • Совместное выполнение XOR открытого текста (как ascii) и зашифрованного текста не дает ни одного повторяющегося октета, ни одного и того же криптопотока для каждого, поэтому это не тривиальный шифр.Это также не простой потоковый шифр, использующий один и тот же ключ для обоих, если только некоторые из байтов зашифрованного текста не являются IV.
  • Последние два байта идентичны в зашифрованном тексте, но не в открытом тексте.Это может быть совпадением, но также может указывать на дополнение, как вы предлагаете.Если они заполняются, необходимо использовать какой-то другой механизм кодирования.

Знаете ли вы, все ли зашифрованные значения являются целыми числами или возможны и другие значения?

Определение алгоритма, используемого без соответствующего ключа, может быть не совсем полезным.

Если текст достаточно маленький и у вас есть открытый текст, зачем вам это делать? Кроме, конечно, ради любопытства?

Нет детерминированного способа сказать, но часто в зашифрованном виде есть подсказки. Это действительно зашифровано (с каким-то ключом)? Или это просто хешируется и (возможно) солится.

Если он хэширован, вам может повезти и просто поищите в Google подходящую пару (при условии, что у вас есть слова из словаря), потому что в Интернете уже есть словари с предварительным хэшированием.

Если у вас есть пример зашифрованного текста, вы можете опубликовать его, кто-то может распознать формат зашифрованного текста ...

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

Конечные XOR, с другой стороны ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top