| ||||
| ||||
Для каких целей и как правильно использовать остальные идентификаторы алгоритмов из wincryptex.h, кроме CALG_G28147 и CALG_G28147_IMIT? С этими двумя вроде бы все понятно. Проблема такая. Надо зашифровать и подписать файл на диске так, чтобы позже его можно было бы расшифровать и проверить, используя тот же самый ключевой контейнер. НЕ ИСПОЛЬЗУЯ СЕРТИФИКАТЫ. Каких типов нужно генерить ключи и хэши? | ||||
Ответы: | ||||
| ||||
Примеры использования 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 описан алгоритм получения сессионного ключа и шифрования на нем данных и шифрования сессионного ключа с использованием открытого (экспорта). | ||||
| ||||
Не понял. Из файла cryptenc.c практически не получил ни какого ответа. Хочу зашифровать файл для СЕБЯ. т.е. чтобы только я сам его мог расшифровать. Получилось сделать таким способом: 1. Достаю из контейнера долговременный KEYEXCHANGE 2. Экспортирую его (PUBLICKEYBLOB) 3. Импортирую его же на нем же (получился ключ ДХ сам с собой) 4. Генерю сессионный ключ (CALG_G28147) 5. Экспортирую его на ключе ДХ 6. Шифрую файл на сессионном ключе и вместе с файлом сохраняю блоб с этим ключем. Это единственный способ? Или можно как-нибудь попроще. Заранее благодарен за ответ. | ||||
| ||||
Можно ли шифровать файл на SYMMETRYMASTERKEY? Работает-то без проблем, но есть ли какие-нибудь политические препятствия? | ||||
| ||||
При использовании секретного и открытого ключа точно так. Существует и втодор вариант (который не рекомендуется пользовать). А именно можно сделать derivekey. Не рекомендуется пользовать его, так как для derivekey используется хеш от заданной последовательности. Последовательность задается прикладом. | ||||
| ||||
Так все таки, какие идентификаторы алгоритмов должны (или могут) использоваться для каких целей? Например: "CALG_G3411 - только для создания контекста хэша по алгоритму ГОСТ..." "CALG_G28147 - только для генерации симметр. ключей. ГОСТ..." ... Я так полагаю, это должно быть указано в документации к CSP. В MSDN про это ничего не пишут :). Или в крайнем случае, немного подробнее комментарии в wincryptex.h | ||||
| ||||
Политических препятствий нет. Но существует рекомендация, которая звучит следующим образом: количество информации шифруемое личным ключом должно быть минимальным. Поэтому этот ключ и предназначен для шифрования сессионных ключей. Правильнее было бы делать системы с выработкой сенсового ключа для каждого файла. Цель в конце какая. Сделать чтобы шифровалась, или разработать продукт? | ||||
| ||||
В документации http://www.cryptopro.ru/CryptoPro/test/CPCSP.chm писаны алгоритмы в функциях GenKey, CreateHash | ||||
| ||||
Понятия сессионного и сеансового ключа отличаются? Сессионный ключ - это ключ ДХ, а сеансовый - симмертр. ключ шифрования? Или я не так понял. Нельзя ли экспортировать G28147-ключ на мастерключе (что-то подобное CryptExportKey(...SYMMETRICWRAPKEYBLOB...))? | ||||