19.11.2001 16:23:17Идентификаторы алгоритмов Ответов: 8
Yuri Pipchenko
Для каких целей и как правильно использовать остальные идентификаторы алгоритмов из wincryptex.h, кроме CALG_G28147 и CALG_G28147_IMIT? С этими двумя вроде бы все понятно.

Проблема такая. Надо зашифровать и подписать файл на диске так, чтобы позже его можно было бы расшифровать и проверить, используя тот же самый ключевой контейнер. НЕ ИСПОЛЬЗУЯ СЕРТИФИКАТЫ. Каких типов нужно генерить ключи и хэши?
 
Ответы:
20.11.2001 15:49:29Kure
Примеры использования CryptoAPI в исхофных текстах лежат в файле: http://www.cryptopro.ru/CryptoPro/test/sample.zip

Пример использования ЭЦП и функции хеширования без использования сертификатов лежит в файле ctkey.c. Алгоритм следующий:
Генерится долговременный ключ в контейнере (на любом носителе) либо AT_SIGNATURE, либо AT_KEYEXCHANGE.
Создается контекст хеша. Хешируется данные. После этого подписываются долговременным ключом.

Пример использования шифрования находутся в файле cryptenc.c. Правда с использованием сертификата. Но сертификат используется для того, чтобы из представления сертификата в открытом ключе получить PUBLICKEYBLOB. Взамен этого его можно получить функцией CryptExportKey из долговременного ключа AT_KEYEXCHANGE.
И дополнительно здесь http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=4
описан алгоритм получения сессионного ключа и шифрования на нем данных и шифрования сессионного ключа с использованием открытого (экспорта).
21.11.2001 11:44:47Yuri Pipchenko
Не понял.
Из файла cryptenc.c практически не получил ни какого ответа.

Хочу зашифровать файл для СЕБЯ. т.е. чтобы только я сам его мог расшифровать. Получилось сделать таким способом:
1. Достаю из контейнера долговременный KEYEXCHANGE
2. Экспортирую его (PUBLICKEYBLOB)
3. Импортирую его же на нем же (получился ключ ДХ сам с собой)
4. Генерю сессионный ключ (CALG_G28147)
5. Экспортирую его на ключе ДХ
6. Шифрую файл на сессионном ключе и вместе с файлом сохраняю блоб с этим ключем.

Это единственный способ? Или можно как-нибудь попроще.

Заранее благодарен за ответ.
21.11.2001 12:41:19Yuri Pipchenko
Можно ли шифровать файл на SYMMETRYMASTERKEY?
Работает-то без проблем, но есть ли какие-нибудь политические препятствия?
21.11.2001 13:09:40Kure
При использовании секретного и открытого ключа точно так.

Существует и втодор вариант (который не рекомендуется пользовать). А именно можно сделать derivekey. Не рекомендуется пользовать его, так как для derivekey используется хеш от заданной последовательности. Последовательность задается прикладом.
21.11.2001 13:25:29Yuri Pipchenko
Так все таки, какие идентификаторы алгоритмов должны (или могут) использоваться для каких целей?
Например:
"CALG_G3411 - только для создания контекста хэша по алгоритму ГОСТ..."
"CALG_G28147 - только для генерации симметр. ключей. ГОСТ..."
...
Я так полагаю, это должно быть указано в документации к CSP. В MSDN про это ничего не пишут :).
Или в крайнем случае, немного подробнее комментарии в wincryptex.h
21.11.2001 13:42:26Kure
Политических препятствий нет.
Но существует рекомендация, которая звучит следующим образом: количество информации шифруемое личным ключом должно быть минимальным.
Поэтому этот ключ и предназначен для шифрования сессионных ключей.
Правильнее было бы делать системы с выработкой сенсового ключа для каждого файла.
Цель в конце какая. Сделать чтобы шифровалась, или разработать продукт?
21.11.2001 13:45:22Kure
В документации
http://www.cryptopro.ru/CryptoPro/test/CPCSP.chm

писаны алгоритмы в функциях GenKey, CreateHash
21.11.2001 14:25:30Yuri Pipchenko
Понятия сессионного и сеансового ключа отличаются?
Сессионный ключ - это ключ ДХ, а сеансовый - симмертр. ключ шифрования? Или я не так понял.
Нельзя ли экспортировать G28147-ключ на мастерключе (что-то подобное CryptExportKey(...SYMMETRICWRAPKEYBLOB...))?