RSA_verify помогите разобраться...

Тема в разделе "WASM.CRYPTO", создана пользователем Fallout, 7 сен 2006.

  1. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Честно сказать я с RSA не сталкивался ещё... но вот вопрос....

    имеем буфер байт 128байт длинной и некий ключ 16 байт длиной полученный из МД5 хеша....
    далее вызываем функцию... функция из OpenSSl


    RSA_verify ( NID_md5, pointer_to_MD5, 0x10, pointer_to_128bytesignature, 0x80, pointer_to_RSA_struct );

    так вот если Мд5 верный то все нормально сооственно могу ли я создать этот буфер 128 байтовый со своим МД5 хешом и соотсвенно своим же хешом и проверить Ж) вот и ка кбы это сделать если можно а то я запутался чего то.... буду признателен.....


    вот ещё посомтрел в RSA структуре поля те что не нуль... то бишь известные мне получаеться....


    BIGNUM *d; // private exponent
    BIGNUM *q; // secret prime factor
    BIGNUM *dmp1; // d mod (p-1)



    как я понимаю расшифровать то я могу.... имея этот хеш... но могу ли я зашифровать своим паблик ключем каким нибудь этот текст но при этом чтоб для расшифровки использывался тот хеш что захочу?.... то бишь менять хеш я могу ... вот...
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    подписывание данных :
    - сперва генерится пара ключей (128 байт = 1024 бит) - секретный и публичный
    - от данных берется MD5 хеш (16 байт)
    - этот хеш шифруется (ф-ция RSA_sign) секретным ключем и получается подпись (128 байт = 1024 бит)
    - секретный ключ прячется, а публичный и подпись распространяется с данными

    проверка подписи:
    - от данных берется MD5 хеш
    - подпись расшифровывается публичным ключем и получается MD5 хеш (ф-ция RSA_verify)
    - эти два хеша сверяются и если они совпадают - значит данные во время распространения не пострадали (ф-ция RSA_verify возвращает TRUE)

    может их просто не обнулили (т.к. не используются)?
     
  3. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    2bogrus
    Спасибо разъеснил основу....

    Значит публичный ключ есть в программе.... так что для того что бы программа проверила подпись которую я создам для своих данных (а данных то господи 4 байта и наверное код продукта виндовс.... хотя там хитро хеш береться только от продукта виндовс и ксориться этими 4 байтами).... мне нужен секретный ключ которого у меня нет.... и подобрать который уйдет уйма времени так?....

    Тогда попытаюсь более подробно описать...... как устреоно в программе....

    программа читает ProduktID Виндовса потом убирает все "-" и получает строку вот так например "55683648700179423418" далее берет от этой строки МД5 хеш.... потом ксорит его с этими 4мя байтами данных..... (данные вообще полностью представляют 4 байта значемых и далее 128 байт подпись) и вызывает функцию RSA_verify куда указывает этот проксореный хеш сооственно его размер 16 байт .. соотсвенно далее сигнатуру и её размер.... возможно ли мне как то в такой ситуации быстро найти ключ?.... в программе используються части от OpenSSL библиотеки... то бишь как бы мне создать подпись под мои данные... может быть есть совет куда идти и тд и тп...
     
  4. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Вот поля структуры и что есть собстно...

    int pad; - 0
    long version; - 0
    const RSA_METHOD *meth; - pointer

    ENGINE *engine; - 0
    BIGNUM *n; - pointer
    BIGNUM *e; - pointer to (0x10001)


    остальное все по нулям.... то то меня этот RSA_METHOD поинтер удивил когда увидел "Eric Young's PKCS#1 RSA", =)

    ведь теоритически можно получить зная e и m числа ... то что мне надо?.... или все таки учитывая длинну ключа лет сто считать?
     
  5. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    генерить подписи под этот публичный ключ можно только имея число BIGNUM *d; // private exponent
     
  6. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    есть ли какой нибудь неплохой софт который смог бы расчитать это значение или его расчет учитывая длинну ключа зарание будет обречен.... нашел RSA Tool почитав справку впринцыпи да и вообще осведомившись об алгоритме понял что тупо в лоб искать это значение для ключа 1024 уйдет пару лет..... но может быть кто подскажет ... тут другой путь?
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Я в похожем случае патчил после RSA_verify на mov eax,1 (xor eax,eax\inc eax)
     
  8. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Да я тоже так делаю счас, но все таки хотелось уж совсем красиво Ж)
     
  9. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    никакой RSA не застрахован от рандомного перебора d :)
     
  10. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    А чем бы его по перебирать я вот уже обнаружил значение P :) ..... вот .... или может есть инструментик хороший?
     
  11. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    о :) этого достаточно (N есть в публичном) , D=65537^(-1) mod ((P-1)*(N/P-1))

    инструментик для случайного перебора? сомневаюсь ...
     
  12. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Счас посчитаем... благо калькулятор для работы с БОЛЬШИМИ числами есть.

    Так страно у меня RSA Tool высчитал два значение P и Q но вот Q считал оооочень долго.... да и такое ощущения что толи значения левые толи ещё чего....

    могут ли они такие быть для 1024битного ключа Ж)

    P - EA8C71BE9F
    Q - 3835C8456730A656B1

    потом автоматом RSA Tool переключился на MPSQ метод после чего вылетил балго успел скриншот экрана взять..... толи сам ключ так по дурацки сгенерирован что для него нашлись такие небольшия числа... но опять таки в той же программе жму Calc D и получаю..... "EF7DCDF06CBFC457BA3DFFA8101" что явно не 1024 бита Ж) ладно счас покапаемся
     
  13. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    нет, не могут.
    Для 1024-битного N размер P*Q должен быть именно 1024 бита. В твоем случае гораздо меньше.

    Подходов к дружбе с подобными защитами принципиально три:
    1) поиск секретного ключа -- для килобита нереально, если при генерации ключа не использовался слабый генератор случайных чисел.
    2) патч функции проверки чтоб она всегда что надо возвращала
    3) подмена открытого ключа -- генеришь свою пару открытый/закрытый ключ, после чего подменяешь открытый ключ в программе на свой, к которому ты знаешь секретный ключ.
     
  14. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Спасибо....

    1)ПОпробывал и отказался.
    2)Использую сейчас.
    3)Думаю так сделать ведь проще для новых версий например со старыми ключами... нашем бинарно паблик кий и заменил своим..... правдо он заксорен но это мелочи....


    Вопросик ещё один как я понимаю я шифрую некую информацию MD5 хеш от которой именно этой информации я передаю в функцию проверки... то бишь получаеться там зашифровано значение хеша? и после расшифровки оба значения сравниваються и все?
     
  15. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    правильно говорить не шифрую MD5 (после шифрования объем данных не уменьшается), а подсчитываю контрольную сумму, да - после расшифровки оба хеша просто сравниваются
     
  16. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Вообщем решил просто находить и переписывать публичный ключ на свой и все .... удобно и универсально. Всем спасибо..... может настанет правдо тот день когда факторизация таких вот здоровых чисел будет моментальная.... =) а пока ещё не настал то так...

    Хух сделал ....

    Интересно а можно передать какую нибудь информацию в RSA_Sign чтоб было легче обнаружить публичный ключ?... или лучше вообще забыть?
     
  17. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    а в чем сложность поиска открытого ключа в проге?
     
  18. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    я хотел сказать закрытый ключ а не публичный .. извеняюсь за опечатку..... а ищу да просто строку байт.....
     
  19. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    надо исходники смотреть.
    т.к. S=m^d mod N, то если подписать m=1, то получим в качестве подписи аккуратненько d, т.е. секретный ключ :)
    Проблема в том, что m, как правило, дополняется по определнным правилам.
     
  20. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Там используеться функция из OpenSSL так что.... да и то что я могу дать на подпись от неё береться МД5 хешь.... хешь береться от данных вида ЧЕГОУГОДНО+ИХ_4БАЙТА