Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Security_nv  
#1 Оставлено : 13 января 2015 г. 13:33:55(UTC)
Security_nv

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.01.2015(UTC)
Сообщений: 4
Российская Федерация
Откуда: Россия

Добрый день, Уважаемые!

В примерах sdk есть образец шифрования и расшифровки файла EncryptFile и DecryptFile. По ним получается зашифровать и расшифровать файл. А если говорить о сообщениях, зашифрованных и сторонних продуктах, например в outlook'е. То есть я защитил эл. почту созданным сертификатом и отправил шифрованное и подписанное сообщение.

Оно пришло адресату. Вручную через почту адресат может его прочитать, но можно ли расшифровать его без помощи outlook'а? Сохранить письмо и расшифровать аналогично методу из DecryptFile? Ведь в отличии от примера нет вектора инициализации, сессионного ключа и т.д. Или они как-то передаются с сообщением? Или как?

Если у кого-либо есть информация по данному поводу - буду рад выслушать.

Спасибо за внимание.
Offline Юрий  
#2 Оставлено : 13 января 2015 г. 16:34:47(UTC)
Юрий

Статус: Активный участник

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 675
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
Google -> S/MIME
С уважением,
Юрий Строжевский
Offline Security_nv  
#3 Оставлено : 19 января 2015 г. 10:42:56(UTC)
Security_nv

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.01.2015(UTC)
Сообщений: 4
Российская Федерация
Откуда: Россия

С s/mime более-менее стало ясно.

Взял текст "test". Получил зашифрованное сообщение от него с помощью CryptEncryptMessage, добавил к нему заголовки:
From: <почта> \r\n
To: <почта> \r\n
MIME-Version: 1.0 \r\n
Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=\"smime.p7m\" \r\n
Content-Transfer-Encoding: base64 \r\n
Content-Disposition: attachment; filename=smime.p7m \r\n\r\n
Потом поместил зашифрованные данные, преобразованные в base64.

Письмо отправил через сокеты, получил в почтовом клиенте. При попытке открыть запрашивает пин. Ввожу, все верно, но сообщение открывается пустое. Что-то где-то упускаю, видимо. Есть идеи что именно?

И смежный вопрос: как из outlook'а/exchange сервера получить s/mime, а не outlook'овский *.msg?
Offline Юрий  
#4 Оставлено : 19 января 2015 г. 11:12:35(UTC)
Юрий

Статус: Активный участник

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 675
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
Ужас.

Вот как видится ваше сообщение стороннему посетителю форума:
"Я сделал какую-то программу. Она что-то делает правильно, а что-то ошибочно. Есть идеи где именно в моей программе проблемы?"
С уважением,
Юрий Строжевский
Offline Security_nv  
#5 Оставлено : 19 января 2015 г. 12:22:13(UTC)
Security_nv

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.01.2015(UTC)
Сообщений: 4
Российская Федерация
Откуда: Россия

В поисках информации по вопросу я сталкивался с проблемами пользователей, по описанию которых даже я, при том что опыт программирования по части шифрования у меня неделя, понимал в чем проблема, т.к. сам сталкивался с этим.
Опираясь на это, я считаю, что по описанию проблемы можно понять в чем может быть загвоздка. В данном случае проблема такая: сообщение приходит, outlook обращается к ключевому контейнеру, ввожу ПИН, сообщение открывается, но пустое. При этом p7mviewer его открывает как надо, расшифровывает верно.

Шифрование:

BYTE* pbContent = (BYTE*) "test";
DWORD cbContent = (DWORD)(strlen((char *)pbContent));
CRYPT_ALGORITHM_IDENTIFIER EncryptAlgorithm;
CRYPT_ENCRYPT_MESSAGE_PARA EncryptParams;
CRYPT_SIGN_MESSAGE_PARA SigParams;
BYTE* pbEncryptedBlob = NULL;
DWORD cbEncryptedBlob;
if(!CryptAcquireContext( &hCryptProv, 0, NULL, PROV_GOST_2001_DH, CRYPT_VERIFYCONTEXT))
{
HandleError("Cryptographic context could not be acquired.");
}
printf("CSP has been acquired. \n");

hStoreHandle = CertOpenSystemStore(hCryptProv, L"MY");
if(!hStoreHandle)
{
HandleError( "Error getting store handle.");
}
printf("The MY store is open. \n");
pRecipientCert = GetRecipientCert(hStoreHandle);
if(!pRecipientCert)
{
HandleError( "No Certificate with AT_KEYEXCHANGE key in store.");
}

GetCertDName(&pRecipientCert->pCertInfo->Subject, &szDName);
printf("A recipient's certificate has been acquired: %s\n", szDName);

memset(&EncryptAlgorithm, 0, sizeof(CRYPT_ALGORITHM_IDENTIFIER));
EncryptAlgorithm.pszObjId = szOID_CP_GOST_28147;
memset(&EncryptParams, 0, sizeof(CRYPT_ENCRYPT_MESSAGE_PARA));
EncryptParams.cbSize = sizeof(CRYPT_ENCRYPT_MESSAGE_PARA);
EncryptParams.dwMsgEncodingType = MY_ENCODING_TYPE;
EncryptParams.hCryptProv = hCryptProv;
EncryptParams.ContentEncryptionAlgorithm = EncryptAlgorithm;
if(!CryptEncryptMessage(&EncryptParams,1,&pRecipientCert,pbContent,cbContent,NULL,&cbEncryptedBlob))
{
HandleError( "Getting EncrypBlob size failed.");
}
printf("The encrypted message is %d bytes. \n", cbEncryptedBlob);

pbEncryptedBlob = (BYTE*)malloc(cbEncryptedBlob);
if(!pbEncryptedBlob) HandleError("Memory allocation error while encrypting.");

if(!CryptEncryptMessage(&EncryptParams,1,&pRecipientCert,pbContent,cbContent,pbEncryptedBlob,&cbEncryptedBlob))
{
HandleError("Encryption failed.");
}
printf( "Encryption succeeded. \n");


После чего полученный blob записываем в файл

FILE *hOutputFile;
hOutputFile = _tfopen( outname , TEXT("wb");
fwrite( pbBlob, cbBlob, 1, hOutputFile);
fclose(hOutputFile);

Далее генерируем заголовок для письма
From: <почта> \r\n
To: <почта> \r\n
MIME-Version: 1.0 \r\n
Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=\"smime.p7m\" \r\n
Content-Transfer-Encoding: base64 \r\n
Content-Disposition: attachment; filename=smime.p7m \r\n\r\n
читаем полученный на прошлом шаге файл, кодируем в base64, дописываем сюда и отправляем полученное сообщение.

Достаем из вложения smime.p7m, смотрим через p7mviewer - видит "test". Открываем в outlook'е - пусто. Только запрашивает доступ к ключевому контейнеру.
Offline Максим Коллегин  
#6 Оставлено : 19 марта 2015 г. 16:50:05(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
Нашел ссылку на форуме:
http://www.cryptopro.ru/...osts&t=1495#post7635
Знания в базе знаний, поддержка в центре поддержки
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.