Я считаю, что шаблон конфигурации должен быть применен к файлу machine.config; это не обязательно хороший шаг, если вам нужно легко развернуть этот код.
Вы можете программно зарегистрировать примитивы шифрования BCrypt с классом CryptoConfig с помощью вызова AddAlgorithm с именем, которое вы можете позже использовать.
Пока поставщик хеша BCrypt реализует HashAlgorithn
, вы должны иметь возможность просто зарегистрировать его, вы также можете проверить это, вызвав HashAlgorithm.Create(string)
с именем, которое вы используете, чтобы убедиться, что он правильно строит алгоритм.
Поставщик членства должен иметь возможность использовать его без проблем.
Вот хорошая статья на эту тему.
Обновление
(глубокий вдох) - извинения, если это tl; др.
Хорошо, так что прочитав о хешировании паролей в BCrypt.Net - это, очевидно, хорошо и следует принятой практике. Кроме того, он полностью несовместим с тем, как работает класс HashAlgorithm
, поскольку для его работы требуется дополнительное состояние, и его нельзя просто расширить для реализации контракта HashAlgorithm
.
Таким образом, у вас есть выбор - придерживайтесь MembershipProvider
и используйте SHA512, как вы уже сейчас - вы говорите о повышении безопасности на странице , поэтому я думаю, что могут быть проблемы с самой аутентификацией, а не с хранением паролей (что, конечно, все же должно быть сделано должным образом) - поэтому попробуйте просто убедиться, что трафик аутентификации отправляется через HTTPS, если это еще не сделано.
Использование алгоритмов растяжения паролей вслепую имеет свои собственные проблемы - см. Ответы на моего собственного недавнего SO на эту тему - если вы выполняете растягивание на сервере, вы можете в конечном итоге вызвать DOS-атаку на сайт!
Другой вариант, как вы предложили, полностью управлять членством - таким образом, вы можете использовать любые типы и управлять необходимым хранением информации о пароле вручную.
Мои сайты теперь используют алгоритм, очень похожий на PBKDF2, который я взял из книги Брюса Шнайера и Нильса Фергюсона «Практическая криптография», для которой я использую 512-битную случайную соль и SHA512 (хранилище дешево), а также многие тысячи итераций для хеширования ясности текст. Сервер тестирует себя один раз для каждого домена приложения, чтобы установить «уровни» защиты, равные диапазонам в миллисекунды - таким образом, со временем вновь хешированные пароли получат постоянный уровень защиты, даже если оборудование улучшится. Библиотека также является автономной, и я смог развернуть ее на SQL Server 2008 R2, чтобы предоставить SP CLR, если нам нужно будет создавать записи паролей на уровне SQL.
Но это защищает только пароли - тогда вам нужен механизм аутентификации, который может защитить сам процесс входа в систему; плюс еще одна система для защиты аутентифицированного токена сеанса (система cookie аутентификации .Net на самом деле очень хороша для этого).
Исходя из этого, я потратил неделю на реализацию SCRAM примитивов, которые я затем подключил к своим веб-сервисам MVC для аутентификации, и я планирую сделать то же самое, чтобы разрешить вход в систему из веб-браузера. используя Javascript (блокировка не-JS клиентов). Ключ в том, что клиент делает все вычисления хеша; таким образом, я придерживался SHA, потому что зрелые реализации легко доступны практически в любой среде (например, у нас есть приложения для iPhone - и они также должны проходить аутентификацию).
Однако в вашем случае, учитывая существующие инвестиции в MembershipProvider, я бы посчитал достаточным 512 бит SHA плюс SSL плюс cookie-файл аутентификации Asp.Net, если база данных действительно безопасный (!) И у вас нет дыр для SQL-инъекций на сайте.