Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.03;
Скачать: CL | DM;

Вниз

Электронная подпись RSA и CryptoAPI   Найти похожие ветки 

 
stas ©   (2010-12-16 17:30) [0]

Поясните пожалуйста, на пальцах если можно, как сделать электронную подпись по алгоритму RSA. Информации вроде бы нашел много, но никак немогу уложить в голове как что делается.
Мне надо чтобы один человек имел закрытый ключ, а несколько человек открытые и могли проверять подпись.
Как я понимаю процесс:
1. Единоразово создаю 2 ключа закрытый и открытый.
2. Закрытый остается у этого 1-го человека, а открытый раздается всем остальным
3. Этот 1 чел подписывает сообщение допустим "Hello" в результате получаем зашифрованную строку. (или как?)
4. Расшифровать ее могут только владельцы открытых ключей и проверить верна ли подпись.

Если кто в этом понимает, скажите какие мне надо использовать cryptoAPI на каждом этапе?

p.s. заголовочный файл для CryptoAPI имеется.


 
Ega23 ©   (2010-12-16 17:36) [1]


> Как я понимаю процесс:


Всё правильно.
Иногда (если большие объёмы данных гоняются), создаётся одноразовый сессионный ключ симметричного шифрования (AES, например), этим ключом зашифровываются сами данные, сам ключ шифруется приватным ключом асимметричного шифрования и отправляется клиентам.
Те открывают ключ публичным ключом и расшифровывают им данные.
Просто симметричное шифрование гораздо быстрее, чем асиметричное работает.


 
stas ©   (2010-12-16 17:38) [2]

Ega23 ©   (16.12.10 17:36) [1]
Ясно спасибо.
А какие функции из CryptoApi надо использовать, допустим чтобы получить эти 2 ключа?


 
Ega23 ©   (2010-12-16 17:45) [3]


> А какие функции из CryptoApi надо использовать, допустим
> чтобы получить эти 2 ключа?


А я без понятия, я не использовал CryptoApi.


 
Eraser ©   (2010-12-16 17:48) [4]

> stas ©  

http://tinyurl.com/25a97rv


 
Рамиль_   (2010-12-16 17:59) [5]

Про подпись верно, про шифрацию нет.
Только не вздумай шифровать закрытым ключом. Шифровать надо открытым ключом пользователя, для которого предназначено сообщение.


 
xayam ©   (2010-12-16 18:00) [6]

Чего-то уже было похожее...
http://www.delphimaster.net/view/15-1276424776/0;8
Ну и так
http://www.delphimaster.net/?s=%2Bdelph*+%2BCryptoAPI*


 
Ega23 ©   (2010-12-16 19:47) [7]


>  Шифровать надо открытым ключом пользователя, для которого
> предназначено сообщение.


Если чё - они одинаковые. 1 - зашифровал, 2 - расшифровал. 2 - зашифровал, 1 - расшифровал.
А кому какой ключ давать - это твоё дело. Но нормальные люди приватный ключ в офисе в сейфе хранят. А публичный - на то и публичный.


 
stas ©   (2010-12-16 19:58) [8]

Eraser ©   (16.12.10 17:48) [4]
Да я искал) я не могу найти полный пример, а то как-то кусками непонятно.

Ega23 ©   (16.12.10 17:45) [3]
А что использовал? мне в принципе не принципиально Crypto API.


 
Ega23 ©   (2010-12-16 20:41) [9]


> А что использовал?

Не помню точно. Завтра скажу.


 
Германн ©   (2010-12-16 20:43) [10]


> stas ©

Посмотри это http://sourceforge.net/projects/tplockbox/


 
Rouse_ ©   (2010-12-16 20:43) [11]


> Рамиль_   (16.12.10 17:59) [5]
> Только не вздумай шифровать закрытым ключом.

Фига себе - откровение :) Это где ты такое вычитал? :)


 
DVM ©   (2010-12-16 23:10) [12]


> stas ©

Успехов тебе в освоении CryptoAPI. Из всех API Microsoft это пожалуй самый запутанный и нелогичный имхо. Одной и той же цели в нем можно достичь добрым десятком иногда способов, сотни функций, часть из которых на мой взгляд просто не нужны, только сбивают с толку, некоторые функции работают не так как описано. Все это имхо.


 
DVM ©   (2010-12-16 23:25) [13]


> stas ©

Полазай фот по этому форуму, там много чего есть http://www.cryptopro.ru/forum
Я там нашел ответы на многие мои вопросы в свое время.


 
Palladin ©   (2010-12-17 00:13) [14]

http://rsdn.ru/article/crypto/usingcryptoapi.xml


 
Германн ©   (2010-12-17 01:28) [15]


> DVM ©


> Palladin ©

С учетом
> мне в принципе не принципиально Crypto API

думаю, что автора на 100% устроит продукт легендарной TurboPower. Тем более что он ныне бесплатный и с исходниками.

P.S. "В принципе не принципиально" хорошо звучит. :)


 
Ega23 ©   (2010-12-17 01:56) [16]

Есть под Delphi исходники и больших целых чисел, и основные алгоритмы шифрования на их основе (MD2, SHA, AES, RSA). Идёт вся эта байда просто в виде набора pas-файлов. Утром постараюсь ссылку дать.


 
Ega23 ©   (2010-12-17 09:56) [17]

Так, ну вот ссылка
http://www.submanifold.be/
Там в менюшке по FGint кликайте


 
Dennis I. Komarov ©   (2010-12-17 11:25) [18]


> думаю, что автора на 100% устроит продукт легендарной TurboPower.
>  Тем более что он ныне бесплатный и с исходниками.

Моно подробней, что за чудо которое фри. Сертификат есть?


 
Медвежонок ХМЛ ©   (2010-12-17 12:10) [19]

Через крипто-апи:

Заполнить структуру CRYPT_SIGN_MESSAGE_PARA
затем вызывать CryptSignMessage

var SignParams     : CRYPT_SIGN_MESSAGE_PARA;
   pbDummyArray,cbDummyArray : Pointer;
begin
Result := False; cbSignatureLen := 0; pbSignature := nil;
ZeroMemory(@SignParams,SizeOf(CRYPT_SIGN_MESSAGE_PARA));
SignParams.cbSize                   := SizeOf(CRYPT_SIGN_MESSAGE_PARA);
SignParams.dwMsgEncodingType        := PKCS_7_ASN_ENCODING or X509_ASN_ENCODING;
SignParams.pSigningCert             := PAuthorCert;
SignParams.HashAlgorithm.pszObjId   := szOID_CP_GOST_R3411; // Заменить гост на нужный алгоритм
SignParams.HashAlgorithm.Parameters.cbData := 0;
SignParams.cAuthAttr                := 0;
SignParams.dwInnerContentType       := 0;
SignParams.cMsgCrl                  := 0;
SignParams.cUnauthAttr              := 0;
//Что-то тут еще со временем
//......................
SignParams.dwFlags                  := 0;

SignParams.cMsgCert   := 1;
SignParams.rgpMsgCert := @PAuthorCert;

//Что именно подписываем
pbDummyArray   := @AMessage;
cbDummyArray   := @AMessageLen;

if CryptSignMessage(@SignParams,ADetached,1,pbDummyArray,cbDummyArray,nil,cbSignatu reLen) then
 begin
  GetMem(pbSignature,cbSignatureLen);
  Result := CryptSignMessage(@SignParams,ADetached,1,pbDummyArray,cbDummyArray,pbSignature,c bSignatureLen);
 end;


 
stas ©   (2010-12-17 14:27) [20]

Ega23 ©   (17.12.10 09:56) [17]
Ага спасибо скачал.
RSASign(test, d, n, Nilgint, Nilgint, Nilgint, Nilgint, signature);
d - это закрытый ключ?
RSAVerify(test, signature, e, n, ok);
e- открытый.

Правильно ?


 
Ega23 ©   (2010-12-17 14:31) [21]


> Правильно ?


А я не помню уже. Читай доку.


 
stas ©   (2010-12-17 14:40) [22]

Ega23 ©   (17.12.10 14:31) [21]
ага, ок.  Спасибо еще раз!
Всем спасибо!



Страницы: 1 вся ветка

Текущий архив: 2011.04.03;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.009 c
2-1294233741
mefodiy
2011-01-05 16:22
2011.04.03
Ошибки при миграции из D7 в D2010


15-1292484895
wow
2010-12-16 10:34
2011.04.03
большие файлы и DVD плеер


15-1292697083
aka
2010-12-18 21:31
2011.04.03
магический квадрат


15-1292509828
stas
2010-12-16 17:30
2011.04.03
Электронная подпись RSA и CryptoAPI


11-1232894425
Лотос
2009-01-25 17:40
2011.04.03
PNG в BMP