eXeL@B —› Основной форум —› Расшифровка алгоритма шифрования микропроцессорного устройства |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 26 ноября 2010 02:25 · Личное сообщение · #1 Здравствуйте. Я на форуме новенький и на взмоме программ не специализируюсь, я электронщик. Прошу вашей помощи в отломе алгоритма обмена микропроцессорной системы. В кратце опишу принцип ее работы. Одно промышленное устройство (программатор) подключается к контроллеру для изменения его настроек или перепрошивки по своему протоколу (протокол описывать не буду т.к. с ним я разобрался, проблема в шифровании). И в начале сеанса связи контроллер посылает программатору 2 байта, а затем ждет правильного ответа от него (тоже размером 2 байта), и если все прокатило, то начинается сеанс обмена данными. Я хочу сделать свой бюджетный вариант программатора. Мне удалось сдернуть весе варианты ЗАПРОС-ОТВЕТ, их я прикрепил к сообщению (в файле все понятно - слева посылка контроллера, а справа ответ программатора). В принципе я уже могу устанавливать сеанс связи по этой таблице, но у меня цель сделать автономное устройство с ЖК экраном для внесения некоторый корректировок в контроллер, и сами понимаете что я очень ограничен в объеме используемой памяти и не могу просто взять и запихнуть эту таблицу в AVR микроконтроллер с 4К памяти... Буду благодарен за любую оказанную помощь. a047_25.11.2010_CRACKLAB.rU.tgz - Zapros-Otvet.rar |
|
Создано: 28 ноября 2010 09:00 · Поправил: gazlan · Личное сообщение · #2 V1KT0P пишет: хоть и странный, но компактный способ Дались вам эти регрессии... Все гораздо проще. Второй ниббл совершенно симметричен с первым в том отношении, что управляется двумя параметрами (степенями свободы) геометрии таблицы. Но если первый был фиксирован по внутренней строке подгруппы (все нибблы строки идентичны), то второй фиксирован по внутреннему столбцу подгруппы (все нибблы столбца идентичны). Таким образом, алго вычисления второго ниббла - это просто транспозиция алго вычисления первого. В эташе таблицы, исходник и исполняемый файл. Если для первого ниббла XOR выполнялся между строками (по столбцу), то для второго ниббла XOR выполнен между столбцами (по строке), так что строку отчета следует рассматривать как массив из 256 nibbles без пробелов - они вставлены только для удобства чтения. Если трактовать каждый внутренний блок (клеточку в моей таблице) как вложенный двумерный объект с внутренними координатами (строка, столбец) и полную таблицу как охватывающий двумерный объект с координатами (строка блока, столбец блока), то получаем ровно 4 степени свободы, управляющие шифрованием. Для каждого ниббла фиксируются две из них, и оставшиеся две задают алго шифрования (начальную константу и изменение шага XOR'а - этакий микро-AES ). Не удивлюсь, если и сами эти параметры получаются пермутацией какого-либо S-box'а - алго сделан очень изящно и компактно 3f99_27.11.2010_CRACKLAB.rU.tgz - qw2.rar |
|
Создано: 29 ноября 2010 02:41 · Личное сообщение · #3 |
|
Создано: 29 ноября 2010 04:29 · Личное сообщение · #4 |
|
Создано: 29 ноября 2010 08:25 · Поправил: gazlan · Личное сообщение · #5 V1KT0P пишет: посмотреть на пример решения #23, #25 с предыдущей страницы. Не в точности, конечно, но похоже. Ссылки как-то затрудняюсь, разве что, на статьи по блочным шифрам . h**p://w*w.enlight.ru/crypto/ h**p://pv.bstu.ru/crypto/blcipher.pdf Тут кроме XOR и комбинаторики ничего больше и нет. Думаю, оставшиеся два ниббла должны иметь тот же метод преобразования. Коротко, 4 ниббла запроса образуют 4-мерное координатное пространство с 16 возможными битовыми состояниями по каждой координате (всего 65,536 состояний). Фиксируя две координаты из четырех, мы получаем подпространство 16*16, которое удобно назвать блоком. Блоки можно составить в таблицу 16*16, отобразив, таким образом, все пространство состояний запроса в двухуровневый набор таблиц 16*16. На верхнем уровне - таблица блоков 16*16, на нижнем - собственно, сами блоки в виде массива 256 возможных ответов (16*16). В этой таблице, например, фиксированы две координаты (два старших ниббла), а все возможные комбинации состояний двух младших образуют двумерное пространство 16*16: Code:
Алго шифрования является, по сути, кривым зеркалом, отражающим каждый бит запроса в другую точку таблицы (или, что тоже самое, в ту же самую точку другой таблицы). TC предоставил нам таблицу Q-A, которую можно трактовать или как отражение таблицы запроса в саму себя, или как две связанные таблицы (словарь) "Запрос - Ответ". Математически это одно и то же - некоторое алго преобразования координат. Это алго можно рассматривать как просто табличную подстановку: для каждого ниббла строим таблицу замен (S-box) размером 4*4 и элемент с номером i (0..15) из "Запрос" заменяем на элемент с тем же самым номером из S-box. Из приведенной выше таблицы с двумя фиксированными старшими нибблами (00**), мы видим, что изменение младшего ниббла q0 ответа зависит только от номера строки в этой таблице, и изменение следующего ниббла ответа q1 зависит только от номера столбца в этой таблице. Для других таблиц, ситуация аналогична. Это позволяет утверждать, что преобразование 4-адреса осуществляется независимо по каждой из координат, и, таким образом, сводится к нахождению 4-х преобразований 1-адресов (преобразования нибблов независимы). Тем самым, вся задача поиска алго преобразования (отражения) разбивается на 4 независимых подзадачи. Как я уже показывал, S-boxes для разных блоков получаются как пермутация некоторого исходного блока. Причем, независимо от того, как именно алгоритмически реализована эта пермутация, математически это может быть записано как некоторая последовательность XOR-преобразований над исходным S-box. Вычислив все эти последовательности (я это сделал только для двух младших нибблов) и зная начальные состояния S-box(es) можно построить функционально идентичный алгоритм преобразования (отражения). |
|
Создано: 29 ноября 2010 13:08 · Поправил: gazlan · Личное сообщение · #6 Пришло в голову, что сортировка по заданному нибблу может облегчить изучение таблицы. В эташе программа сортировки по нибблам запроса (0..3). Скажем, если указать в качестве первого параметра 0, то первые 16 таблиц будут построены для q0 = 00h, следующие 16 для q0 = 01h etc. Остальные нибблы сортируются в обычном порядке. Если указать в качестве первого параметра 3, то первые 16 таблиц будут построены для q3 = 00h, следующие 16 для q3 = 01h etc. Работает все с тем же файлом от TC (из второго поста). Заодно, немного изменил заголовок таблиц, для облегчения навигации. Теперь две первых цифры (до двоеточия) обозначают строку блока, две последние - столбец. В любом текстовом редакторе, поддерживающем функцию поиска, можно быстро перейти к любому блоку, просто набрав его номер как: LL:CC Code:
8bda_29.11.2010_CRACKLAB.rU.tgz - qas.rar |
|
Создано: 29 ноября 2010 20:55 · Поправил: V1KT0P · Личное сообщение · #7 gazlan Построил 4-мерную таблицу, таблицу 00 я взял за отправную, так как там в линии повторяются символы, то она сократилась до одной строчки: Code:
Проксорил таблицу 00 с остальными, получились таблицы состоящии из одного элемента. В результате сократилось до одной таблицы: Code:
Вот тут я не могу понять как разбить эту таблицу на две строки. Код генерирующий 4-й ниббл: Code:
добавил: Сделал тоже самое с третим нибблом: Code:
Код который генерирует два последних ниббла: Code:
Слишком большой код получился, тот что я выше подобрал попроще будет. Вся загвоздка в этих таблицах, они не идеально симметричны. Кое где сдвиги и дефекты из-за которых я не могу понять как разбить на две строки . С первыми двумя нибблами вообще у меня тоже самое не получается, то ли я не неправильно строю для них пространство. Как не пробывал проксорить, не получаются таблицы с одним элементом =(. |
|
Создано: 30 ноября 2010 06:23 · Личное сообщение · #8 V1KT0P пишет: Проксорил таблицу 00 с остальными Признаться, не понял ваш метод - не вижу разделения переменных. Может быть вам стоит приложить к сообщению эташ с таблицами и комментариями - будет проще понять, как именно было сделано? Как мне представляется, XOR должен выполняться по срезу - выборке из 16 таблиц (при трех "защемленных" степенях свободы). При этом, "траектория" для двух младших нибблов может быть определена по строке и, соответственно, столбцу внутренних блоков, а вот для двух старших - аналогично, но уже для "внешней" таблицы (таблицы блоков). Сведется ли все к единственной константе, предсказать не берусь, хотя выглядит заманчиво |
|
Создано: 30 ноября 2010 11:39 · Личное сообщение · #9 gazlan Кстати заметил, у первого и второго ниббла таблицы по диагонали совпадают о_О. А также структура таблицы одинакова, особенно хорошо видно при сравнении их ксоров. Жесть, только что заметил охрененную закономернусть между ксором пространства первого и второго ниббла. Щас мне уже на пары надо, но вечером думаю я смогу табличным методом создать алгоритм генерации первого и второго ниббла. Отличия там будут только в изначальном массиве, который я думаю также как и с первым можно сгенерировать конгруэнтным генератором. 3348_30.11.2010_CRACKLAB.rU.tgz - Tables.7z |
|
Создано: 30 ноября 2010 17:51 · Личное сообщение · #10 |
|
Создано: 30 ноября 2010 20:00 · Поправил: Модератор · Личное сообщение · #11 |
|
Создано: 01 декабря 2010 02:33 · Личное сообщение · #12 Зашел в тупик. В аттаче таблица из которой спокойно строится первый и второй ниббл. Также там та же таблица из которой убрана каждая вторая строка ибо они повторяются. gazlan Что посоветуешь? f1a9_30.11.2010_CRACKLAB.rU.tgz - nibbl_2_xor2.7z |
|
Создано: 01 декабря 2010 13:08 · Личное сообщение · #13 |
|
Создано: 01 декабря 2010 13:23 · Поправил: V1KT0P · Личное сообщение · #14 |
|
Создано: 01 декабря 2010 14:49 · Личное сообщение · #15 |
|
Создано: 01 декабря 2010 16:53 · Личное сообщение · #16 shved Щас пересчитал, получается что таблицы займут ровно 1280 байт, это если я не запутался. Из этих таблиц путем простого ксора получается полная таблица второго ниббла, а ксор второго ниббла с двум значениями младших нибблов дают первый ниббл. Ты же пишешь как минимум на 8 битном проце? Не на 4 битном? |
|
Создано: 01 декабря 2010 17:03 · Поправил: gazlan · Личное сообщение · #17 V1KT0P пишет: Что посоветуешь? Признаться, ничего еще не успел посмотреть, занят был другими делами, но, на мой, взгляд, ситуация выглядит так: 1. Прежде всего, стоило бы, конечно, доказать основное утверждение о независимости нибблов - на нем базируется все остальное. Ортогональность пространства запросов очевидна (как следствие полноты - 64 K). Достаточно показать, что пространство ответов изоморфно с ним (т.е. не содержит неуникальных ответов). Не проверял, но это должно быть так. 2. Если есть какой-либо метод, работающий, скажем, для младшего ниббла, то он же, в силу изоморфности пространства состояний, пригоден и для любого другого ниббла. 3. Стобцы (строки) матрицы запросов (4*(16*256)) можно переставлять между собой как угодно (менять нибблы местами), при соответствующей перестановке в матрице ответов (это равносильно просто изменению порядка сортировки карты (MAP) от TC). Короче говоря, если что-то работает для 16 таблиц первого ниббла, то пересортировав исходный массив, получим такой же набор таблиц (но не значений в них) для второго итд. Осталось применить к ним этот же метод повторно. |
|
Создано: 01 декабря 2010 17:16 · Личное сообщение · #18 V1KT0P пишет: а ксор второго ниббла с двум значениями младших нибблов дают первый ниббл. допустим для пары запрос-ответ должен быть такой результат 0000 -> 33CD По твоему алоритму я посчитал два самых младших ниббла "C" и "D", теперь мне не понятно че дальше делать, можешь пример набросать? как мне вотрую половину получить, которая "33" V1KT0P пишет: Ты же пишешь как минимум на 8 битном проце? Да на 8 битном, но на языке высоко уровня, не на асме. |
|
Создано: 01 декабря 2010 17:21 · Личное сообщение · #19 |
|
Создано: 01 декабря 2010 17:23 · Поправил: shved · Личное сообщение · #20 |
|
Создано: 01 декабря 2010 17:33 · Личное сообщение · #21 |
|
Создано: 01 декабря 2010 20:56 · Поправил: V1KT0P · Личное сообщение · #22 shved Все-таки 3,2 кб получилось в итоге . Проверил все комбинации, работает. Переменные с и d это переставленные местами нибблы, ибо при генерации таблицы я неправильно поставил их места. А переделывать неохота и так запарился с этими таблицами... 3d80_01.12.2010_CRACKLAB.rU.tgz - generate.7z |
|
Создано: 02 декабря 2010 02:52 · Личное сообщение · #23 |
|
Создано: 02 декабря 2010 16:07 · Личное сообщение · #24 |
<< . 1 . 2 . |
eXeL@B —› Основной форум —› Расшифровка алгоритма шифрования микропроцессорного устройства |