Нужно ли мне хранить ключ для CryptUnprotectData и CryptProtectData?

#winapi #encryption #storage #dpapi

#winapi #шифрование #Хранение #dpapi

Вопрос:

DPAPI имеет 2 функции: CryptUnprotectData и CryptProtectData .
Я прочитал They do the encryption or decryption by using a session key that the function creates by using the user's logon credentials. , означает ли это, что мне не нужно хранить этот ключ где угодно, и они будут созданы, когда я захочу зашифровать или расшифровать данные?
Также я обнаружил An important point to remember is that DPAPI merely applies cryptographic protection to the data. It does not store any of the protected data; therefore applications calling DPAPI must implement their own storage of the protected data. , что это связано с ключом или файлом, который был зашифрован?

Ответ №1:

Упомянутые функции используют ключ, специфичный для вошедшего в систему пользователя. Таким образом, вам не нужно хранить ключ. Однако эти функции предназначены только для преобразования данных, а не для хранения данных. Это означает, что ваша задача — хранить зашифрованный фрагмент данных там, где вы хотите — CryptProtectData не сделает этого за вас.

Комментарии:

1. Спасибо. Это то, что мне было нужно. Но у меня есть еще несколько вопросов. Нужно ли хранить ключ для CryptEncrypt и CryptDecrypt? И есть ли в WIN API функции для хранения этого ключа, если мне нужно его сохранить?

2. @user3186861 Ключ получен из учетных данных пользователя текущей учетной записи пользователя. Это означает, что (а) вам не нужно хранить ключ и (б) если учетная запись пользователя потеряна, то и данные тоже, потому что ключ исчезнет вместе с учетной записью пользователя. Я не знаю никаких способов резервного копирования ключа.

3. Используют ли CryptEncrypt и CryptDecrypt учетные записи пользователей, такие как CryptUnprotectData и CryptProtectData?

4. Я думал , что CryptEncrypt и CryptDecrypt использовать ключ, созданный CryptGenKey . Хранит ли CryptExportKey созданный CryptGenKey ключ в базе данных ключей CSP? Или мне нужен ключ хранения для шифрования самому?

5. CryptGenKey — это другая история — он может генерировать симметричный ключ, который вы можете хранить в другом месте и затем использовать с CryptEncrypt. Кстати, StackOverflow — это не форум, а сайт вопросов и ответов. Один (или несколько тесно связанных) вопрос должен быть задан как «новый вопрос» и даны ответы. Комментарии предназначены для запроса деталей или незначительных исправлений, они не предназначены для общения в чате. Если у вас есть вопросы о CryptEncrypt — опубликуйте новые вопросы.