Тема: Warden
Показать сообщение отдельно
Старый 28.05.2010, 13:01   #35
Nomad
Новичок
 
Регистрация: 25.05.2010
Сообщений: 11
Сказал(а) спасибо: 1
Поблагодарили 14 раз(а) в 5 сообщениях
Nomad На верном пути
По умолчанию

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

Вариант 1
У нас известна пара значений s и m для формулы
s = m ^ e mod n
т.е. число m возводится в степень e и затем ищется его остаток от деления на n.
Это можно записать в виде:
s + n * k = m ^ e
где k - целое число раз, которое n встречается в числе m ^ e.
Моим логичным предположением было, что никто не станет возводить в очень большую степень и можно найти перебором число k.
Через какое-то время (заодно перебрав 16 десятичных знаков от 1 для числа k) я осознал неравенство, указанное выше:
e > n`/d
n` - число того же порядка, что и n, но немного меньше его. т.е. к примеру если у n 300 знаков, то у n` может быть 300-298 знаков. Если разделить на наше число d = 257, то получится число из ~298-296 знаков.
А теперь представьте на секунду, что число 2 в 64-й степени равно 18 446 744 073 709 551 615 (задача о зернах на шахматной доске), а какого размера будет число из 300+ знаков (число m) в степени из 300 знаков? Я подозреваю, что такой результат нельзя будет уместить на всех информационных носителях Земли
Естественно, число k тоже невообразимо велико и суть тут в том, что есть математический алгоритм получения остатка от возведения в степень - т.е. m ^ e mod n считается без реального возведения в степень, потому эта функция не обратима.

Вариант 2
Ключ 1024-битный, но на самом деле им подписывается 160-битное значение - хеш SHA1 от тела модуля*. Для обеспечения безопасности к хешу дописываются числа 0xBB, чтобы дополнить его до 1024 бит. При некотором желании (дописывая в конец не значащие данные, используя хитрые алгоритмы, вычисления на GPU и пр.) можно было бы создать модуль, хеш от которого совпадает с уже имеющимся. Это значит, что он автоматически уже был бы подписан и наши проблемы решились бы.
Но тут вступает в силу символ *, поставленный мной выше.
Систему делал человек, сведущий в криптоанализе (или просто параноик), потому хеш считается не от "чистого" модуля, а от бинарного блока в таком виде:
"реальная длина модуля" + "тело модуля в архиве" + "MAIEV.MOD"
Мы можем вручную нарастить этот блок и через годы перебора получить такой же хеш код, как у существующего модуля. Но клиент на своей стороне не будет ничего "наращивать". Это значит, что надо менять само тело модуля, чтобы его в архиве биты стали на "нужные места". Сложность такой операции может оказаться даже больше, чем для факторизации 1024-битного ключа.. Вариант реален, но для его реализации (или хотя бы оценки) нужны ОЧЕНЬ хорошие знания как алгоритма архивации, так и SHA1.

Последний раз редактировалось Nomad; 28.05.2010 в 21:52.
Nomad вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Konctantin (28.05.2010), sven (30.05.2010)