Хочу подписывать команды , т.е. что бы бот мог убедится в том, что команды именно от того,кого надо. Почитал про 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) малые ключи ключи нестойки вообще. за пару минут ломаются перебором. 2) большие ключи - а вот хрен ты напишешь вычисления на больших ключах. Размера переменных не хватит. по этому придется писать собственный математический движек для вычислений. Советую по этому поводу поискать инфу про Арифметику больших чисел Когдато на делфи + asm пытался реализовать собственный двиг, но надоело быстро. По этому как вариант могу предложить: 1) покопайся в Crypto API там вроде была реализация RSA 2) ищи готовые модули Для того чтобы не запомнили - нужны сессионные ключи. т.е. к обычной команде добавляется еще и допустим текущая дата + что-то известное. Самое классное это: Бот шлет запрос команды и спец число 64 битное. В шифрованном ответе по мимо команды и параметров для неё высылается еще и этот число. Бот принимает данные, расшифровывает и проверяет числа. Но опятьже нагрузка на сервак будет большая при расчетах. Потому что RSA довольно таки медленная вешь
На каком языке ты пишешь ... влзникал похожий вопрос на delphi ... мне помогло http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1271
у каждого сертификата есть определенные политики применения. например для подписывания электронной почты или идентификация сервера, или идентификация клиента на сервере... или еще их там кучи разных. насколько я понял читать их следует в поле "улучшенный ключ": 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, а следовательно мое предположение не будет работать верно. хотелось бы четкое определение "всех политик".