Могу ли я расшифровать файл .gpg с помощью Windows CNG Store?

#c# #.net #windows #cryptography #cng

#c# #.net #Windows #криптография #cng

Вопрос:

Я создаю этот инструмент на C #, который возьмет файл .gpg и расшифрует его с помощью Windows CNG. Я получаю файл .gpg в качестве входного параметра, и он зашифрован моим ключом с помощью WinPT. Его расшифровка выполняется с помощью этого инструмента, и я также могу расшифровать с помощью BouncyCastle и моего секретного ключа. У принимающей стороны файла всегда будут права / ключ для его расшифровки (это предположение). Мы больше не хотим использовать секретный ключ, но вместо этого хотели бы использовать ключ из Windows CNG Store ИЛИ класса ProtectedData (предпочтительно).

Я проверил этот пост, где более или менее объясняется, как работает шифрование и дешифрование с использованием Unprotect и Protect, но я не могу заставить его работать, когда входным файлом является .gpg. Он работает с массивами байтов, и преобразование данных .gpg в массив байтов также не помогает.

Ссылка: https://security.stackexchange.com/questions/51519/pgp-private-key-storage-on-windows-server-advice?answertab=active#tab-top

Возможно ли вообще расшифровать файл .gpg с помощью этого метода?

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

1. Да: CNG — это файл, созданный CryptoNG, программой, используемой для создания зашифрованных архивов. Он включает алгоритм шифрования AES-256 и требует пароля для того, чтобы расшифровать архив обратно в исходный набор файлов. Библиотека Net использует алгоритм шифрования AES-256, и пока у вас есть ключи, вы должны быть в состоянии расшифровать.

2. @jdweng в этом случае, работая с классом CngKey в .net, мне все равно понадобился бы секретный ключ? Это единственное, чего я хотел бы избежать — так что что-то в направлении класса ProtectedData

3. При шифровании всегда нужен ключ. Вопрос в количестве ключей и в том, где хранятся ключи. Вы могли бы попросить службу предоставить ключ, но тогда вам все равно нужен безопасный способ подключения к серверу, такой как использование сертификата или помещение ключа шифрования в сертификат.

4. Допустим, Джон зашифровал файл с помощью WinPT на своем ноутбуке. Затем он загружает его в папку на каком-то сервере. Когда он загружает инструмент, также загружается соответствующий зашифрованный файл, который он ранее загрузил. У него нет секретного ключа на компьютере, на котором он находится в данный момент, по крайней мере, не экспортирован. Поэтому он должен быть сохранен где-нибудь в реестре / контейнере компьютера. Возможно ли расшифровать файл без экспортированного секретного ключа? Чтобы программа c # знала, какой ключ взять из хранилища ключей Windows, и расшифровала его таким образом. TL; DR: Зашифровать с помощью WinPT, расшифровать с помощью ProtectedData / CNG

5. Вот почему я сказал использовать сертификат и / или обернуть его в SOAP. Я сказал использовать ключ (ы). У вас могут быть закрытые и открытые ключи. Таким образом, вы можете шифровать / расшифровывать с помощью открытых ключей, которые не требуют секретных ключей, или закрытых ключей с использованием секретного ключа.