Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
cms - использование приватного ключа для шифрования симметричного
Статус: Новичок
Группы: Участники
Зарегистрирован: 08.12.2010(UTC) Сообщений: 6
|
Здравствуйте. Решаем задачу передачи зашифрованных сообщений между программами (Java, C#). В качестве формата обмена сообщениями выбрали cms (pkcs#7). На C# для шифрования используем следующий код (построен по примерам из sdk, без подписывания сообщения): Код:
static byte[] Encrypt_cms(byte[] data)
{
ContentInfo content = new ContentInfo(data);
EnvelopedCms cms = new EnvelopedCms(content);
CmsRecipientCollection recipients = new CmsRecipientCollection();
CmsRecipient recipient = new CmsRecipient(new X509Certificate2(farCert));
recipients.Add(recipient);
encryptedMessage.Encrypt(recipients);
return encryptedMessage.Encode();
}
Данные успешно расшифровываются на других системах (jcp), путем генерации ключа согласования, расшифровывания симметрического ключа и, в конечном счете, расшифровкой переданного сообщения. Поскольку приватный ключ отправителя в коде не используется, приходим к выводу, что для шифрования используется эфемерная пара ключей. Вопрос: что нужно изменить в коде, чтобы для шифрования симметрического ключа использовалась явно указанная пара ключей, а не эфемерная? Наличие в пространстве имен System.Security.Cryptography.Pkcs класса KeyAgreeRecipientInfo и перечисления KeyAgreeKeyChoice вселяют надежду, что это все-таки возможно. Спасибо
|
|
|
|
Статус:: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
AgreeKey не подразумевает использования статического DH. Так что ответ на вопрос: высокоуровневым API - никак. Встречный вопрос - а зачем? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 08.12.2010(UTC) Сообщений: 6
|
Ключевая пара фиксирована с обеих сторон, и очень высока вероятность, что заказчик потребует использования этих приватных ключей при создании ключей согласования... Видимо, для некоторой аутентификации. При этом подпись сообщения (как в примерах для CMS) для решения этой проблемы, к сожалению, не рассматривается.
Вообще говоря уже есть код на Java+JCP, который работает по нужной схеме (использует фиксированные ключевые пары сторон для AgreeKeys) и упаковывает сообщение в CMS - осталось сделать то же самое на C#.
Может Вы посоветуете другой способ/стандарт обмена шифром между разнородными системами? Или это решается НЕвысокоуровневым API? На Java, например, пришлось для этой задачи вручную заполнять объект класса EnvelopedData. В C# пытался сделать по аналогии, но большинство полей и методов оказались доступны только для чтения (либо я неправильно это делал).
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Класс KeyAgreeRecipientInfo используется micrsoft исключительно при расшифровании сообщения. При зашифровании сообщения выбор между agree и transport осуществляется по типу алгоритма, для ГОСТ как и для RSA - transport. Да же, если этот выбор заменить на agree (что не так просто), то высокоуровневые функции работать все равно пока не будут. Придется спускаться на уровень CryptoApi. Я надеюсь коллеги подскажут примерчик. |
С уважением, Александр. |
|
|
|
Статус:: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Уточню. PKCS7 обвязка CSP не поддерживает статический DH. Если только вручную кодировать на уровне CSP. http://msdn.microsoft.co...y/aa377945(v=vs.85).aspxЦитата:pSenderId A pointer to a CERT_ID structure. This member is used when the dwKeyChoice member contains CMSG_KEY_AGREE_STATIC_KEY_CHOICE. This member is not currently used. MS не особо этот вариант поддерживает. Если нужна аутентификация - проще подписать документ. Отредактировано пользователем 14 декабря 2010 г. 14:32:21(UTC)
| Причина: Не указана |
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
cms - использование приватного ключа для шифрования симметричного
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close