Невидимая война Ara (ara@cracklab.ru) Хакер, номер #085, стр. 085-064-4 Прежде всего давай определимся с тем, какие инструменты для работы с алгоритмом RSA у нас есть? Мы будем использовать две утилиты - RSA-Tool и BigInt Calculator Pro. Скачать их можно с сайта http://cracklab.ru. Первая, кроме генерации больших простых чисел, открытых и закрытых ключей, шифрования и дешифрования, также может по известному числу n раскладывать его на p и q и вычислять d. Опять же напомню - сроки вычисления (читай - подбора) зависят от длины используемых ключей. Вторая утилита производит математические операции с очень большими числами, а также имеет в своем составе модуль RSA. В нем мы будем проверять найденные решения. [вычисление лицензионного кода] Для начала проверим работу RSA с помощью RSA-Tool (она позволяет работать с десятичными числами) на примере от Брюса Шнайера: n=3337, p=47, q=71, e=79, d=1019. Сперва введем n, жмем Exact size. Получим размер ключа - 12 бит, введем его в поле KeySize. Для нахождения p и q факторизуем n (Factor N). Получим 47 и 71. Для нахождения d надо ввести выбранную e в шестнадцатеричном виде и нажать Calc D. d=1019 - все точно, как в примере. Вернемся к нашей программе. Сперва разберемся, что за строки 14162795658430266512815 и 188013097933370886974627? Мы уже разобрались, что открытый ключ должен состоять из двух чисел - n и e. Что же из этих двух чисел n, а что e? RSA-Tool нам все расскажет, к тому уже числа довольно маленькие (для криптостойкого RSA). Для начала можно попробовать факторизовать первое число (все, как в примере). Не вышло? Пробуем второе. А второе прекрасно разложилось на два сомножителя. Следовательно, первое число - это e. Размер ключа - 78 бит, значит, у нас RSA-78. Надо в поле E ввести первое число, не забыв перевести его в шестнадцатеричный вид. Нажав Calc D, мы находим недостающее число - 1113439. Здесь необходимо отметить, что на самом деле получилось все наоборот: нам было заранее известно число d, а находили мы e. Дело в том, что с математической точки зрения числа d и e равнозначны, то есть можно шифровать с помощью d, расшифровывать - с помощью е, и наоборот. Практической разницы выбор числа для шифрования не имеет. Что мы получили в итоге и для чего все это было изучено и проделано? Получается, что программа декодирует введенный ответный код по алгоритму RSA, а значит, для получения правильного кода нужно закодировать «код ЭВМ». Но есть небольшая деталь - этому делфи-компоненту нужно, чтобы первый байт декодированного числа был 07, тогда он отбрасывается и получается нужное число. Такой уж странный замысел был у его разработчиков. Значит, алгоритм наших дальнейших действий такой: |