Какие шаги я должен предпринять, чтобы определить этот алгоритм - PullRequest
0 голосов
/ 05 апреля 2011

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

Я должен признать, что потерян точно, что я должен попробовать дальше.

Str in => Output 
0      = 0x81
00     = 0x81 0x95 
000    = 0x81 0x95 0x83
001    = 0x81 0x95 0x82
002    = 0x81 0x95 0x81
100    = 0x80 0x95 0x83
900    = 0x88 0x95 0x83
ddddddddd  = 0x55 0x41 0x57 0x5E 0x4E 0x48 0x4F 0x57 0x40
dddddddddd = 0x55 0x41 0x57 0x5E 0x4E 0x48 0x4F 0x57 0x40 0x42

Символы, найденные в выходных данных => от 0x21 до 0x9A

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

Есть ли процесс или порядок вещей, которые я должен проверить, пытаясь выяснить это?Может ли кто-нибудь дать мне подсказку или подтолкнуть в правильном направлении для ее решения.Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ Проверка ваших мыслей SeanA, кажется, оказывается точным ...

dddddddddd = 0x55 0x41 0x57 0x5E 0x4E 0x48 0x4F 0x57 0x40 0x42
ddddd0dddd = 0x55 0x41 0x57 0x5E 0x4E 0x9C 0x4F 0x57 0x40 0x42
dd0ddddddd = 0x55 0x41 0x83 0x5E 0x4E 0x48 0x4F 0x57 0x40 0x42
1234567890123456...   0x80 0x97 0x80 0x8E 0x9F 0x9A 0x9C 0x8B 0x9D 0x96 0x9A 0x98.... 

Очевидно, что каждый символ имеет значение в зависимости от его места встрока.Размер пароля не ограничен.Когда пройдет больше времени, я значительно увеличу размер выборки, есть ли какие-то конкретные значения, которые я должен проверить, которые увеличивают шансы на нахождение отношения?), как предложено, вы можете скачать с http://www.filedropper.com/result_1 Здесь показана диаграмма разницы между входом и выходом в виде десятичной дроби.Существует сильная закономерность между входными данными, отображаемыми в виде шестнадцатеричных и разностных значений.Каждое символьное место имеет очень постоянные шаблоны, которые следуют за диаграммой (каждый символ в этой позиции). Также возможный диапазон для каждой позиции является постоянным для каждой группы из 16 значений, которые соответствуют изменению самой значимой цифры на входном значении, когдаотображается как шестнадцатеричное.

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

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

Ответы [ 4 ]

2 голосов
/ 05 апреля 2011

Выполнение этого с 100% точностью теоретически невозможно .

Это все равно что задавать вопрос: «Какая математическая кривая соответствует всем этим точкам?», Когда на самом деле существует бесконечное числокривых, которые могут соответствовать любому произвольному конечному числу точек.

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

1 голос
/ 05 апреля 2011

есть ли какие-то конкретные значения, которые я должен проверить, чтобы увеличить шансы на обнаружение связи?

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

Попытка доказать это следующим образом:

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

  • Повторите для 2-го, 3-го и т. Д.

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

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


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

1 голос
/ 05 апреля 2011

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

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

0 голосов
/ 05 апреля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...