2012-03-05 3 views
0

У меня есть база данных с тысячами зашифрованных паролей md5, и мне нужно перейти на sha256. Каков самый безопасный способ сделать это, сохранив старые пароли с доступом md5 и новым с помощью шифрования sha256? Благодарю.Как перейти от md5 к шифрованию sha256

+2

Пока вы на нем, вы можете перейти на PBKDF2 и соль. Вам нужно будет сохранить соль и результат PBKDF2 вместо пароля. SHA-256 (который является безопасным хешем, а не типом шифрования) все еще восприимчив к радужным таблицам и тому подобному. –

+0

Интересно! Существует ли какая-либо vbscript (классическая asp) реализация PBKDF2 с солью? – afazolo

+0

С помощью google я узнал, что могу использовать произвольно сгенерированную строку для каждого пользователя в виде соли. Чтобы проверить, является ли пароль, предоставленный пользователем действительным, я бы совпадал с паролем, поставляемым с солью, принимал хэш и сравнивал его с хешем, хранящимся в базе данных, правильно ?. Мой вопрос: соль может быть зашифрованной строкой md5? – afazolo

ответ

5

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

+0

Я тоже думал об этом. Просто были сомнения в безопасности. – afazolo

1

Я бы добавил новый столбец для хэша sha256. Таким образом, вы можете просто проверить новый столбец на null при входе в систему и сохранить новый хеш, когда у вас есть доступ к паролю открытого текста.

2

Если возможно, используйте PBKDF2 или bcrypt. Обычная SHA-2 слишком быстрая.

Если вы не можете использовать любой из них, то вы должны по крайней мере итерацию SHA-256 несколько тысяч раз, чтобы замедлить пароль угадывание атаки:

var hash = SHA256(SHA256(salt)+password) 
for(int i=0; i<10000; i++) 
    hash = SHA256(hash); 
return hash; 

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


Для обновления я использовал бы старый хеш для ввода новой функции. Таким образом, существующие хэши получают большую часть повышения безопасности при обновлении без необходимости входа пользователя в систему. Не храните старые хеши MD5.

Затем при первом входе в систему каждого пользователя обновите свой хэш до чистого нового хэша, который больше не использует MD5.

+0

Если вам задан хэш, все равно трудно найти соответствующую строку, которая генерирует этот хеш, даже с MD5. Хеши обычно треснуты с использованием таблиц обратного поиска или грубой силы, чьи шансы быстро уменьшаются, добавляя новые буквы на вход, поэтому конкатенации длинной случайной соли на пароль уже достаточно. – Calmarius

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