Простите меня, если это глупый и очевидный вопрос, но у меня проблемы с поиском правильных ресурсов. Я не эксперт по безопасности, и я изо всех сил пытаюсь понять, как правильно пойдите об этом.Как шифровать и дешифровать конфиденциальную информацию на C# без введенного пользователем пароля
Вот сценарий. У меня есть внутреннее приложение на внутреннем сервере: не то, что будет когда-либо выходить на сайт клиента. Это приложение имеет базу данных пар имени пользователя и пароля, которые используются для связи с защищенными веб-службами. Мне не нужно скрывать эти пароли от коллег, но я хочу защитить их в случае нападения на сервер и кражи данных.
Традиционно один бы соль и хэш их. Это процесс, который я понимаю в принципе, но он зависит от пользователя, вводящего пароль, который затем может быть проверен против сохраненного хэша. Для меня это не так.
Итак: поиск вокруг есть различные решения, которые используют фиксированную «пропущенную фразу» для защиты строки. Вот один пример: https://stackoverflow.com/a/10177020/271907 и вот еще https://stackoverflow.com/a/10366194/188474.
Однако, как я понимаю, ни одно из них не предлагает полезного решения в моем случае. Эта фраза «передать» должна храниться где-то для моего приложения, чтобы выполнить его работу. Если я буду жестко программировать его в приложение, он может быть изменен в обратном порядке. Если я зашифрую его и поместим в отдельный файл, его можно украсть и обработать, используя радужный стол.
Я изучил использование reg_iis для шифрования ключа согласно Encrypting Web Config using ASPNET_REGIIS, но, честно говоря, это просто оставило меня еще более запутанным. Я даже не уверен, могут ли эти зашифрованные файлы конфигурации быть перенесены между машинами или мне придется перешифровывать между dev и test и live. Я не знаю, насколько они безопасны: AFAIK должен быть ключом где-то, и если есть ключ, он может быть сломан.
Чтобы еще больше мутить воды, я нашел этот ответ, который не использует ключ: https://stackoverflow.com/a/10176980/271907. Однако автор признает, что он устарел, и я не знаю, насколько безопасен результат.
Есть ли какой-либо разумный подход к решению этой проблемы, который не оставляет места в безопасности где-то?
«Это приложение имеет базу паролей пользователей и паролей, которые используются для связи с защищенными веб-службами» - поэтому у вас должен быть доступ к открытым текстам паролей, чтобы вы могли отправить имя пользователя \ пароль на любую веб-службу вы хотите поговорить с? –
Можете ли вы прояснить этот контекст? «Это приложение имеет базу данных пар имени и пароля, которые используются для связи с защищенными веб-службами. Мне не нужно скрывать эти пароли от коллег», хранится ли она в базе данных как обычный текст и статические значения? – jtabuloc