29.01.2003 16:40:29Что происходит? Ответов: 5
Владимир
Мне необходимо организовать обмен шифрованными данными между двумя сторонами используя Ваш криптопровайдер. Просмотрев примеры нашел все необходимое и испытал его в работе. Все вроде бы работает, но есть некоторые непонятные вещи.
1. Экспорт/иvпорт ключей. Как в вашей документации так и в MSDN написано что функция CryptImportKey (CPImportKey) импортирует ключ из блоба, при этом в качестве параметра может быть указан некоторый ключ, которым "осуществляется снятие криптографической защиты импортируемого ключа" (цитата). Но ведь прb экспорте открытого ключа я его не шифровал. Что же за ключ я получаю после импорта? Длина его другая 256 бит вместо экспортированных 1024. Что это за ключ и откуда он взялся (в смысле получен он по какому-либо алгоритму и т.д.)?
2. Операция импорта ключей происходит как на отправителе так и на получателе. Вся разница заключается в том какой ключ каким импортируется. В результате в обоих случаях я получаю т.н. ключ парной связи. Являются ли эти ключи одинаковыми для отправителя и получателя? Если да, то зачем мне приходится генерировать еще один ключ и шифровать его ключом парной связи? Почему нельзя его экспортировать?
Насколько я смотрел примеры MSDN там обмен шифрованными данными осуществляется без подобных промежуточных ключей. Вообщем чем обусловлен именно такой порядок работы?

ЗЫ
Мне приходится все это спрашивать у вас, т.к. от меня требуют какоу-либо внятное объяснение происходящему
 
Ответы:
30.01.2003 12:52:45Григорий
1. Как сказано в MSDN:
"hPubKey [in] The meaning of this parameter differs depending on the CSP type and the type of key BLOB being imported."
То есть, на самом деле, снятие криптографической защиты импортируемого ключа - только одно из возможных применений этого параметра.
Второе применение этого параметра в КриптоПро CSP - это выработка ключа парной связи.

2. Да, эти ключи являются одинаковыми для отправителя и получателя.
Сессионный ключ необходим для повышения стойкости защиты, потому что применение ключа парной связи для шифрования больших объемов данных ставит его под угрозу компрометации. В случае успешной атаки на этот ключ, злоумышленник получит доступ ко всему обмену между этой парой участников. А при применении сессионного ключа, в худшем случае будет дешифровано одно конкретное сообщение.
30.01.2003 14:45:09kure
Кроме этого если вы посмотрите в MSDN функция CrypttEncrypt. Именно к этой функции приведен пример в котором есть импорт/экспорт ключей правда по алгоритму RSA
03.02.2003 10:28:03Владимир
2 Григорий
>> Как сказано в MSDN:
Вообще то я цитировал ваш хелп, а не MSDN. А в вашем хелпе ни про какие вторые применения не сказано, что конечно печально

>> 2....
А кто гарантирует что ключ парной связи не будет вскрыт? Вы мне так и не сказали какой алгоритм используется для его генерации. Насколько я понял для ключа парной связи используются 2 открытых ключа - отправителя и получателя - а их я могу получить легально, например в подписи сообщения.
Я не знаток в теории криптографии, поэтому если вы мне скажете, что изпользуете алгоритм А, стойкость которого равна Б, то этого в принципе будет достаточно.

2 kure
Пример я видел, компилировал и запускал. Но пример MSDN отличается от вашего как раз отсутствием ключей парной связи - там просто экспортируется ключ сессии на ключе получателя.
Кстати, если смотреть MSDN, то там есть такая схема под названием Encoding Enveloped Data, где нарисован процесс зашифровки сообщения. Для вашего криптопровайдера эта схема реализуется с добавление ключа парной связи?
И причем здесь алгоритм RSA? Или применение ключа парной связи обязатаельно для ГОСТовых алгоритмов?
Различия в процессах подготовки шифрованного сообщения заставляет меня писать свою функцию для каждого провайдера, а мне хотелось бы универсальности.
03.02.2003 10:37:41kure
Вот если бы использовали функции более высокого уровня (Simplified или ЛовЛежел мессаге, типа CryptEncryptMessage) то у вас получилось бы универсально. А так придется для алгоритма RSA делать свою схему экспорта. У нас используется алгоритм Диффи Хелмана.
03.02.2003 13:14:54Григорий
>> 2....
Для создания ключа парной связи используется алгоритм Диффи-Хеллмана. Для этого нужен или секретный ключ отправителя и открытый ключ получателя, или наоборот, секретный ключ получателя и открытый ключ отправителя. Таким образом, ключом парной связи могут обладать только эти два субъекта.