WinCrypt
От: help_please  
Дата: 31.03.05 17:40
Оценка:
Я тока разбираюсь в WinCrypt поэтому возможно вопрос тупой для знающий (но прошу ответить срочно надо через два дня сдавать прогу ) и подскажите как можно экспортировать приватный ключ?
Проблема такая:
Все шифруется и дешифруется (ключи создаются (возможно я их не так создаю)) на одном компьютере.
Если попробовать дешифровать на другом компьютере то ERROR.
ключи создаю и экспортирую так:

if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0)&&(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))&&(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)))
{
return false;
}

...

if(!CryptGenKey(hProv,AT_KEYEXCHANGE,CRYPT_EXPORTABLE,&hXchgKey))
{
return false;
}
...

if(!CryptExportKey(hXchgKey,0,PUBLICKEYBLOB,0,(BYTE *)&key,&dwLen))
{
return false;
}
...

if(!CryptGenKey(hProv,CALG_RC4,CRYPT_EXPORTABLE,&hKey))
{

return false;
}
...

if(!CryptExportKey(hKey,hXchgKey,SIMPLEBLOB,CRYPT_OAEP,(BYTE *)&key_priv,&dwLen))
{
return false;
}
...
Заранее спасибо!
Re: WinCrypt
От: SergH Россия  
Дата: 31.03.05 17:47
Оценка: 1 (1)
Здравствуйте, help_please, Вы писали:

_>if(!CryptExportKey(hXchgKey,0,PUBLICKEYBLOB,0,(BYTE *)&key,&dwLen))

_> {
_> return false;
_> }
_>...

Надо PRIVATEKEYBLOB
Делай что должно, и будь что будет
Re[2]: WinCrypt
От: help_please  
Дата: 31.03.05 17:55
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, help_please, Вы писали:


_>>if(!CryptExportKey(hXchgKey,0,PUBLICKEYBLOB,0,(BYTE *)&key,&dwLen))

_>> {
_>> return false;
_>> }
_>>...

SH>Надо PRIVATEKEYBLOB


Пробовал не хочет экспортировать приватный (поэтому я еще, спрашивал как можно экспортировать приватный ключ?
)
Re: WinCrypt
От: Gomes Россия http://irazin.ru
Дата: 01.04.05 06:57
Оценка:
Здравствуйте, help_please, Вы писали:

_>подскажите как можно экспортировать приватный ключ?


Секретный ключ надо экспортировать/импортировать на другом ключе.

Это метод класса (думаю и так понятно — ключа нет, размера нет):
DeriveKey( NULL, 0 );

И получившийся ключ m_hDerivedKey подставляешь сюда:
CryptExportKey( m_hSignKey, m_hDerivedKey, PRIVATEKEYBLOB, 0, pbSecKeyBlob, pdwSecKeyBlobSize );

Конечно вместо нулей можно подставить реальный ключ.
Re[3]: WinCrypt
От: SergH Россия  
Дата: 01.04.05 10:43
Оценка:
Здравствуйте, help_please, Вы писали:

_>Пробовал не хочет экспортировать приватный (поэтому я еще, спрашивал как можно экспортировать приватный ключ?

_> )

Какая ошибка? У меня работает.
Делай что должно, и будь что будет
Re[2]: WinCrypt
От: SergH Россия  
Дата: 01.04.05 10:45
Оценка:
Здравствуйте, Gomes, Вы писали:

G>Секретный ключ надо экспортировать/импортировать на другом ключе.


Не путайте секретный и приватный, это разные понятия. Секретный действительно можно только на другом ключе, приватный можно и так. Во вяском случае, при использоватнии стандарных провайдеров.
Делай что должно, и будь что будет
Re[3]: WinCrypt
От: Gomes Россия http://irazin.ru
Дата: 01.04.05 11:01
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Не путайте секретный и приватный, это разные понятия. Секретный действительно можно только на другом ключе, приватный можно и так. Во вяском случае, при использоватнии стандарных провайдеров.


О как. Всю жисть считал что одна фигня Чем же они отличаются?

P.S. Перевод яндексом слова private: конфиденциальный, секретный, тайный.
P.P.S. MSDN: If the key BLOB type specified by dwBlobType is PRIVATEKEYBLOB, then this is typically a handle to a session key that is to be used to encrypt the key BLOB. Some CSPs allow this parameter to be zero, in which case the application should encrypt the private key BLOB manually so as to protect it.
Re[4]: WinCrypt
От: SergH Россия  
Дата: 01.04.05 11:12
Оценка:
Здравствуйте, Gomes, Вы писали:

SH>>Не путайте секретный и приватный, это разные понятия. Секретный действительно можно только на другом ключе, приватный можно и так. Во вяском случае, при использоватнии стандарных провайдеров.


G>О как. Всю жисть считал что одна фигня Чем же они отличаются?


Для ассиметричных алгоритмов используется пара ключей: публичный/приватный (public/private). Для симметричных — один, секретный (secret). Это более-менее стандартная терминология, MSDN её придерживается. Для экспорта секретного ключа используется SIMPLEBLOB.

G>P.P.S. MSDN: If the key BLOB type specified by dwBlobType is PRIVATEKEYBLOB, then this is typically a handle to a session key that is to be used to encrypt the key BLOB. Some CSPs allow this parameter to be zero, in which case the application should encrypt the private key BLOB manually so as to protect it.


Во, именно это я и имел ввиду.
Делай что должно, и будь что будет
Re[5]: WinCrypt
От: Gomes Россия http://irazin.ru
Дата: 01.04.05 11:30
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Для ассиметричных алгоритмов используется пара ключей: публичный/приватный (public/private).

Или просто открытый/секретный.

SH>Для симметричных — один, секретный (secret).

Не встречал для него такого названия. Хотя он, несомненно, является секретным по сути.

В общем, имхо, если говорят секретный, то подразумевают private из ключевой пары.

G>>P.P.S. MSDN: If the key BLOB type specified by dwBlobType is PRIVATEKEYBLOB, then this is typically a handle to a session key that is to be used to encrypt the key BLOB. Some CSPs allow this parameter to be zero, in which case the application should encrypt the private key BLOB manually so as to protect it.

SH>Во, именно это я и имел ввиду.
Ну дык это нам и говорит о том, что для Microsoft CSP необходимо передавать этот параметр.
Re[6]: WinCrypt
От: SergH Россия  
Дата: 01.04.05 11:42
Оценка:
Здравствуйте, Gomes, Вы писали:

G>Не встречал для него такого названия. Хотя он, несомненно, является секретным по сути.


А какое? "Сессионный" — это не тип ключа, это то, как он используется. Хотя про MSDN я погорячился, там пишут симметричный.

G>Ну дык это нам и говорит о том, что для Microsoft CSP необходимо передавать этот параметр.


Не, вот как раз Microsoft обходится и без этого.
Делай что должно, и будь что будет
Re[7]: WinCrypt
От: Gomes Россия http://irazin.ru
Дата: 01.04.05 12:13
Оценка:
Здравствуйте, SergH, Вы писали:

SH>А какое? "Сессионный" — это не тип ключа, это то, как он используется. Хотя про MSDN я погорячился, там пишут симметричный.

Ну если строго, то, видимо, симметричный. А так, имхо, просто "ключ шифрования". Случай с ключевой парой шифрования оговаривается отдельно.

SH>Не, вот как раз Microsoft обходится и без этого.

У меня так не получалось.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.