Хранение ключа сеанса
Примечание.
В этом разделе предполагается, что пользователи имеют набор пар открытых и закрытых ключей. Инструкции и пример создания пар ключей можно найти в примере программы C: создание контейнера ключей и создание ключей.
Хранение ключа сеанса
- Создайте простой ключ BLOB с помощью функции CryptExportKey. Это приведет к передаче ключа сеанса из CSP в пространство памяти приложения. Укажите, что открытый ключ Exchange используется для подписи ключевого BLOB-объекта.
- Сохраните подписанный ключ BLOB на диск. Предполагается, что все диски небезопасны.
- Когда ключ необходим, считывает ключ BLOB с диска.
- Импортируйте ключ BLOB обратно в CSP с помощью функции CryptImportKey.
Пример создания ключа сеанса и экспорта этого ключа в простой большой двоичный объект ключа, который можно записать в файл диска, см. в примере программы C: экспорт ключа сеанса.
Эта процедура обеспечивает только минимальную безопасность. Если сохраненный ключ сеанса будет использоваться для шифрования данных позже, предыдущая процедура не обеспечивает достаточную безопасность.
Чтобы обеспечить более высокую безопасность, подписывайте ключ BLOB с закрытым ключом Exchange перед сохранением на диске. Когда ключ BLOB позже считывается с диска, его подпись может быть проверена, чтобы убедиться, что ключ BLOB нетронут.
Если ключ BLOB не подписан, любой пользователь с доступом к диску или другому носителю, где хранится ключ, может создать новый ключ сеанса.
Новый ключ сеанса можно зашифровать с помощью ключа обмена открытым ключом исходного пользователя, и этот новый ключ можно заменить на исходный. Если пользователь неузнавательно использовал замененный ключ сеанса для шифрования файлов и сообщений, то пользователь, создавший замещающий ключ, может легко расшифровать их.
Цифровые подписи подробно рассматриваются в хэшах и цифровых подписях.