2010-02-22 2 views
4

Я разрабатываю веб-приложение, для которого конечным пользователям необходимо создать учетную запись. Эта часть очень проста: я буду использовать свои пароли с SHA-256, чтобы никто, кроме самого пользователя, не знал пароль. Теперь сложная часть. После создания учетной записи пользователь должен указать пароль своего почтового сервера. Теперь встает вопрос: как я могу защитить этот пароль прилично (пароль будет храниться в базе данных)? Если я зашифрую пароль с помощью TripleDES, любой разработчик или системный администратор сможет расшифровать пароль и посмотреть его. Каков обычный способ справиться с такой проблемой? Большое спасибо.Как защитить конфиденциальные пароли, хранящиеся в базе данных

+3

Разработчики не должны иметь доступ к производственной базе данных. – Giorgi

+1

Возможно, вы не контролируете, какие почтовые серверы используют пользователи, но для таких случаев, когда пользователь хочет, чтобы вторая сторона (вы) получила доступ к некоторым своим ресурсам, размещенным сторонней стороной (почтовым сервером пользователя) не обнаружив пароль третьей стороны, был изобретен 3-legged-oauth – keppla

ответ

10

Обычный способ сделать это - использовать симметричный ключ шифрования, который получен из пароля пользователя. Стандартный способ сделать это - использовать алгоритм, указанный в RFC2898, который генерирует набор криптографически безопасных байтов, которые вы можете использовать в качестве ключа и IV. Вероятно, это поддерживается библиотекой для вашего языка, например .NET, и это то, что я использую, имеет класс Rfc2898DeriveBytes.

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

+0

Ссылка на класс: http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx. – AxelEckenberger

+1

Предостережение: это означает, что вам необходимо передать пароль пользователя от клиента на сервер, чтобы соединение было безопасным. Одним из преимуществ хеширующих паролей является то, что вы можете хэш-запись пользователя на клиентской машине, а затем передавать только хэш на сервер. Но, предполагая безопасное соединение, предложение blowdart имеет огромное преимущество использования другого ключа шифрования для данных каждого пользователя, что значительно снижает угрозу компрометации. –

+0

Как правило, вы * * передаете пароль пользователя от клиента к серверу, но как только он достигает сервера, вы затем хэшируете его для сравнения. Итак, что бы вы делали, одновременно с хэшированием для проверки пароля вы должны получить ключ и поместить его в состояние сеанса на сервере, чтобы вы могли использовать его на протяжении всего сеанса пользователя. – blowdart

Смежные вопросы