Защита закрытого ключа RSACryptoServiceProvider паролем или иным способом

Я хочу зашифровать некоторые данные сервера с помощью .NET RSACryptoServiceProvider и расшифровать их, когда кто-то вводит ключ / пароль через веб-страницу. Какие у меня есть варианты защиты или, в идеале, даже отказа от хранения закрытого ключа на сервере, избегая при этом того, чтобы пользователь каждый раз предоставлял его все?

  • Зашифровать закрытый ключ с помощью симметричной системы и попросить пользователя ввести для этого пароль?
  • Хранить большую часть закрытого ключа на сервере, но может ли пользователь ввести его N символов?
  • Сохранить его в MachineKeyStore сервера и использовать секретный KeyContainerName в качестве пароля?
  • Использовать CspParameters.KeyPassword каким-либо образом, который работает через Интернет?
  • Что-то другое?

person stovroz    schedule 19.11.2009    source источник
comment
Спасибо за идею зашифровать закрытый ключ с помощью симметричного шифрования ... Я разрабатываю веб-приложение, и мне нужно было зашифровать (упрощенный сценарий) зарплату сотрудников с помощью асимметричного шифрования (чтобы даже я (разработчик) не мог знать чью-либо зарплату ). Решение состоит в том, чтобы зашифровать зарплату с помощью открытого ключа, а затем зашифровать закрытый ключ с помощью надежного симметричного шифрования. Менеджер по персоналу должен будет вводить пароль каждый раз, когда он / она захочет просмотреть зарплату.   -  person Rosdi Kasim    schedule 19.03.2016


Ответы (2)


Помимо аппаратного подхода (HSM или Smartcard), вам в значительной степени придется использовать один секрет для защиты другого секрета. Так что вы продолжаете добавлять пароль. Я предлагаю использовать DPAPI,

http://en.wikipedia.org/wiki/Data_Protection_API

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

person ZZ Coder    schedule 22.11.2009

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

Если HSM не подходит (в конце концов, они довольно дороги), вам следует получить симметричный ключ, используя PBKDF2 или аналогичную надежную систему, и зашифровать этим закрытый ключ. Использование защиты паролем CSP также является вариантом, но это несколько менее прозрачно, что именно происходит, и вы должны позаботиться о том, чтобы ключ не был доступен администраторам домена и т. Д.

person Rasmus Faber    schedule 19.11.2009