18.12.2007 9:24:06алгоритм работы Ответов: 16
Михаил Макушев
Подскажите ссылку или последовательность работы с CSP через CryptoAPI. Работа для Delphi, с несимметричными открытыми ключами. То есть у меня есть контейнер созданный функцией CryptAcquireContext, сгенерированный ключ функцией CryptGenKey, затем при попытке получить этот ключ функцией CryptGetUserKey и применить его к некоторому блоку с помощью функции CryptEncrypt получаю ошибку, номера которой нет в вашей документации. Объясните мне примерно что я делаю не так и где можно найти как надо делать правитьно?
 
Ответы:
18.12.2007 12:00:58Kirill Sobolev
КриптоПро CSP поддерживает шифрование произвольных блоков данных только на симметричных ключах.
18.12.2007 12:04:16Михаил Макушев
Хорошо, а непроизвольные (т.е. фиксированного объема)? мне это не принципиально. Мне нужна принцип построения каркаса программы.
18.12.2007 13:45:36Kirill Sobolev
Я имел ввиду, что асимметричные ключи могут применяться только для шифрования симметричных ключей по алгоритму Диффи-Хельмана.
18.12.2007 13:51:59Михаил Макушев
"Имя, сестра, имя!"... есть что ни будь вроде ссылок на то в какой последовательности и что желательно применить?
18.12.2007 14:04:26Юрий
Вам же говорят, что CryptEncrypt не может работать с ассиметричными ключами. Единственная функция, которая может как-то с этим справится это CryptSignHash.
18.12.2007 14:12:04Михаил Макушев
Хорошо. Я правильно понимаю: сначала применяю сессионный симметричный ключ, затем его через ... что? Как применить публичный и приватные ключи?
18.12.2007 14:19:29Юрий
Сначала читают про то, что собираются использовать.
Вы прочитали что-нибудь про CryptoAPI?
18.12.2007 15:04:22Михаил Макушев
http://www.citforum.ru/security/articles/defense
"...
Описанная схема реализована и в CryptoAPI.
..."
Поправьте меня ели я ошибаюсь. Или скажите что статья врет. Тогда следует сказать что CryptoAPI ВООБЩЕ не работает с ассиметричными ключами
18.12.2007 15:48:40Юрий
И вправду реализована :) И даже описана чуть ниже в абзаце "Обмен ключами". Правда не очень хорошо описана, но все же что-то есть.
18.12.2007 15:54:14Юрий
Дабы не разводить долгих дискурсий все-таки поясню подробнее.
В связи со сложностью работы ассиметричных алгоритмов с большими объемами данных шифрование данных выполняют с помощью симметричных алгоритмов, на некоем сессионном ключе. В дальшейшем сам сессионный ключ шифруется с помощью ассиметричных алгоритмов и отправляется вместе с сообщением получателю.
18.12.2007 16:07:13Юрий
Небольшая поправка: в алгоритме Диффе-Хелмана сессионный ключ не шифруется, а изначально получается как некая производная от закрытого/открытого ключей получателя и отправителя. Но в более простом случае алгоритм работы с ассиметричными алгоритмами в CryptoAPI можно считать аналогичным описаному мною ранее.
18.12.2007 16:28:59Kirill Sobolev
Не CryptoAPI не работает - ему по большому счету все равно, а работает или не работает конкретный CSP. КриптоПро CSP не позволяет использовать шифрование на ключевой паре, а MS провайдер - позволяет.
19.12.2007 10:20:03Михаил Макушев
То есть если я правильно понял из ваших слов, КриптоПро не поддерживает экспорт сессионного ключа шифруемого публичным получателя?
19.12.2007 11:39:32Михаил Макушев
Однако в документации по CSP написано
"СКЗИ КриптоПро CSP позволяет использовать стойкие сертифицированные средства криптографической защиты информации в составе обширного инструментария и программного обеспечения корпорации Microsoft, для реализации различных защищенных систем документооборота и электронной коммерции, на основе Инфраструктуры Открытых Ключей (Public Key Infrastructure), соответствующей международным рекомендациям X.509, RFC 2459."
19.12.2007 12:04:02Kirill Sobolev
>> То есть если я правильно понял из ваших слов, КриптоПро не >> поддерживает экспорт сессионного ключа шифруемого публичным >>>получателя
Поддерживает. Но не открытым ключем, а ключем обмена, получаемого из ОК получателя и секретного ключа отправителя (он может быть эфемеральный, т.е. временный). Получатель создает аналогичный ключ обмена из своего секретного ключа и ОК отправителя (переданного вместе с сообщением) и им уже расшифровывает сессионный ключ.
19.12.2007 13:58:32Михаил Макушев
Хорошо. Я допускаю такие принципы работы. Но какой алгоритм построения шифрованного сообщения? Какие функции надо применять в какой последовательности?