Как обновить схему устройства хранения данных пароля (измените алгоритм хеширования),

Тяжеловес:

  • GTK
  • Легкий вес QT
  • WxWidgets

:

  • FLTK
  • Fox
  • Tk
  • Lua IUP
  • Окончательный ++
  • платформы Рисования dlib

без виджетов GUI:

  • Каир SDL
25
задан Charles Sprayberry 28 January 2012 в 23:56
поделиться

6 ответов

Во-первых, добавьте поле в базу данных, чтобы определить, использует ли пароль MD5 или новый алгоритм.

Для всех паролей, все еще использующих MD5:

- В процесс входа в систему, в котором вы проверяете введенный пользователем пароль: временно сохраняете отправленный пользователем пароль в памяти (здесь нет проблем с безопасностью, поскольку он уже где-то в памяти) и выполняете обычный хэш MD5 и сравниваете с сохраненным хешем;

- - Если был задан правильный пароль (соответствует существующему хешу), запустите временно сохраненный пароль с помощью нового алгоритма, сохраните это значение, обновите новое поле, чтобы указать, что этот пароль был обновлен в соответствии с новым алгоритмом.

(Of конечно, вы просто использовали бы новый алгоритм для любых новых пользователей / новых паролей.)

29
ответ дан 28 November 2019 в 20:58
поделиться

Добавить поле даты и времени passwordChange в базу данных.

Все пароли, установленные до дня X, проверьте с помощью MD5

Все пароли, установленные после дня X, проверьте с помощью BCrypt или чего-то еще.

3
ответ дан 28 November 2019 в 20:58
поделиться

Вы можете сохранить либо в самом поле хэша (например, «MD5: d41d8cd98f00b204e9800998ecf8427e») или в другом столбце, какой алгоритм использовался для создания этого хэша. Затем вам придется изменить процесс входа в систему, чтобы использовать правильный алгоритм при проверке пароля. Естественно, любые новые пароли будут хешироваться с использованием нового алгоритма. Будем надеяться, что пароли в конечном итоге истекут, и со временем все хэши MD5 будут прекращены.

3
ответ дан 28 November 2019 в 20:58
поделиться

Поскольку вы не знаете пароль в виде обычного текста, возможно, вам следует создать поле, которое указывает версию шифрования (например, PasswordVersion bit default 0 )

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

Надеюсь, вам не понадобится столбец PasswordVersion , размер которого превышает бит . =)

3
ответ дан 28 November 2019 в 20:58
поделиться

Вы можете посмотреть на расширение gettext . Более конкретно, похоже, что ngettext () будет делать то, что вы хотите: он правильно формирует множественное число слов, если у вас есть число, по которому следует считать.

print ngettext('odor', 'odors', 1); // prints "odor"
print ngettext('odor', 'odors', 4); // prints "odors"
print ngettext('%d cat', '%d cats', 4); // prints "4 cats"

Вы также можете заставить его правильно обрабатывать переведенные формы множественного числа, это его основная цель, хотя это довольно много дополнительной работы.

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

  1. Если ваша база данных указывает, что они используют старый алгоритм без соли, сначала проверьте пароль старый способ, проверив, что MD5-хэш пароля совпадает. Если нет, отклоните вход в систему.
  2. Если пароль был проверен, попросите сервер выбрать случайную строку соли, вычислить хэш SHA256 для соли + пароля и заменить запись в таблице паролей новой, определяющей новый алгоритм, соль и хэш.
  3. Когда пользователь снова войдет в систему, вы увидите, что он использует новый алгоритм, поэтому вычислите хэш соли + пароль и убедитесь, что он соответствует сохраненному хешу.

В конце концов, после этого система работает в течение подходящего времени, вы можете отключить учетные записи, в которых нет t был преобразован (при желании).

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

3
ответ дан 28 November 2019 в 20:58
поделиться

Я не совсем уверен насчет этого варианта, так как я не специалист по криптографии. Пожалуйста, поправьте меня, если я в какой-то момент ошибаюсь!

Я думаю, что у Дэйва П. явно лучший вариант.

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

Проблема, конечно, в том, что тогда придется проверять пароль. через оба хэша . А ты' Я должен сделать то же самое для каждого нового пароля. Что, в общем, довольно глупо . Если вы не хотите использовать аналогичную схему, как объяснил Дейв П., чтобы в конечном итоге вернуться к одноразовым паролям с новым алгоритмом хеширования ... в таком случае, зачем вообще это беспокоить? (Конечно, вы могли бы использовать его в яркой фразе «Повышенная безопасность для всех паролей, применяется немедленно!» - способ на презентации корпоративным костюмам, с относительно невозмутимым лицом ...)

Тем не менее, это вариант, который может быть применяется сразу ко всем текущим паролям, без какой-либо фазы постепенного перехода.

Но мальчик, о мальчик, кто-нибудь будет посмеяться над этим кодом позже! :)

объяснил, чтобы в конечном итоге вернуться к одноразовым паролям с новым алгоритмом хеширования ... в таком случае, зачем вообще с этим беспокоиться? (Конечно, вы могли бы использовать его в яркой фразе «Повышенная безопасность для всех паролей, применяется немедленно!» - способ на презентации корпоративным костюмам, с относительно невозмутимым лицом ...)

Тем не менее, это вариант, который может быть применяется сразу ко всем текущим паролям, без какой-либо фазы постепенного перехода.

Но мальчик, о мальчик, кто-нибудь будет посмеяться над этим кодом позже! :)

объяснил, чтобы в конечном итоге вернуться к одноразовым паролям с новым алгоритмом хеширования ... в таком случае, зачем вообще с этим беспокоиться? (Конечно, вы могли бы использовать его в яркой фразе «Повышенная безопасность для всех паролей, применяется немедленно!» - способ на презентации корпоративным костюмам, с относительно невозмутимым лицом ...)

Тем не менее, это вариант, который может быть применяется сразу ко всем текущим паролям, без какой-либо фазы постепенного перехода.

Но мальчик, о мальчик, разве кто-нибудь потом посмеется, глядя на этот код! :)

с относительно невозмутимым лицом ...)

Тем не менее, это вариант, который может быть применен сразу ко всем текущим паролям, без какой-либо фазы постепенного перехода.

Но мальчик, о мальчик, кто-то собирается хорошо посмеяться посмотрим на этот код позже! :)

с относительно невозмутимым лицом ...)

Тем не менее, это вариант, который может быть применен сразу ко всем текущим паролям, без какой-либо фазы постепенного перехода.

Но мальчик, о мальчик, кто-то собирается хорошо посмеяться посмотрим на этот код позже! :)

6
ответ дан 28 November 2019 в 20:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: