RSA\Цифровая подпись

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by winsock, 15 Oct 2010.

  1. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    Хочу подписывать команды , т.е. что бы бот мог убедится в том, что команды именно от того,кого надо.

    Почитал про RSA ,вроде разобрался, но хотелось бы убедится в том, что все правильно понял.

    Итак:
    1)Выбираем два простых числа(q,p).
    2)Считаем произведение чисел (n)
    3)Cчитаем w=(q-1)(p-1)
    4)Выбираем открытую экспоненту
    5)Cчитаем секретную экспоненту как d=1 mod(w)
    6)Генерим подпись как k= m^d mod n

    На стороне бота :
    1)Получаем пару (e,n) и сообсно само сообщение - m
    2)Расшифровываем k^e mod n. И если k=m , все ок
    Но ведь такою защиту можно легко подделать,просто запомнив какая подпись у такой то команды, какая у другой...
     
    #1 winsock, 15 Oct 2010
    Last edited: 15 Oct 2010
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Могу тебя разочаровать.
    1) малые ключи ключи нестойки вообще. за пару минут ломаются перебором.
    2) большие ключи - а вот хрен ты напишешь вычисления на больших ключах. Размера переменных не хватит. по этому придется писать собственный математический движек для вычислений. Советую по этому поводу поискать инфу про Арифметику больших чисел

    Когдато на делфи + asm пытался реализовать собственный двиг, но надоело быстро.

    По этому как вариант могу предложить:
    1) покопайся в Crypto API там вроде была реализация RSA
    2) ищи готовые модули

    Для того чтобы не запомнили - нужны сессионные ключи.
    т.е. к обычной команде добавляется еще и допустим текущая дата + что-то известное.
    Самое классное это: Бот шлет запрос команды и спец число 64 битное. В шифрованном ответе по мимо команды и параметров для неё высылается еще и этот число. Бот принимает данные, расшифровывает и проверяет числа.

    Но опятьже нагрузка на сервак будет большая при расчетах. Потому что RSA довольно таки медленная вешь
     
    #2 slesh, 15 Oct 2010
    Last edited: 15 Oct 2010
  3. SGWW

    SGWW New Member

    Joined:
    2 Jul 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    На каком языке ты пишешь ... влзникал похожий вопрос на delphi ... мне помогло http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1271
     
  4. crypt0n

    crypt0n Member

    Joined:
    20 Feb 2010
    Messages:
    40
    Likes Received:
    5
    Reputations:
    0
    http://z0mbie.daemonlab.org/#rsa
     
  5. SeregaZ

    SeregaZ New Member

    Joined:
    6 Mar 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    у каждого сертификата есть определенные политики применения. например для подписывания электронной почты или идентификация сервера, или идентификация клиента на сервере... или еще их там кучи разных. насколько я понял читать их следует в поле "улучшенный ключ":
    1. CertOpenSystemStore - открываем хранилище, например My
    2. CertEnumCertificatesInStore - гоняем по циклу все личные сертификаты
    3. CertGetEnhancedKeyUsage - в первый раз получаем размер
    4. CertGetEnhancedKeyUsage - во второй раз получаем уже сам массив политик применения
    5. CertCloseStore - закрываем хранилище

    в итоге получаю свой нужный 1.3.6.1.5.5.7.3.2 - идентификация клиента на сервере.

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

    вот собственно вопрос: какой командой можно получить свойство сертификата "все политики применения"? предполагаю что возврат того 0 и есть доказательство что у сертификата все политики, но подозреваю в случае когда сертификат поврежден - мне тоже вернет 0, а следовательно мое предположение не будет работать верно. хотелось бы четкое определение "всех политик".