Как сохранить пароли *правильно*?

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

b = ['six', 'small', 'he', 'foxes', 'saw']
b.sort(key=lambda s: (len(s), s))

Для записи приведенные выше результаты приводятся в этом отсортированном списке ::

['he', 'saw', 'six', 'foxes', 'small']

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

18
задан Cœur 21 October 2018 в 08:25
поделиться

6 ответов

Вы правильно поняли. Всего два предложения:

  1. Если однажды SHA1 станет слишком слабым, и вы захотите использовать что-то другое, невозможно отменить хеширование старых паролей и перефразировать их с новой схемой. По этой причине я предлагаю прикрепить к каждому паролю номер «версии», который сообщает вам, какую схему вы использовали (длина соли, какой хэш, сколько раз). Если однажды вам нужно перейти с SHA на что-то более сильное, вы можете создавать пароли нового стиля, сохраняя при этом пароли старого стиля в базе данных, и все равно их различать. Мигрировать пользователей по новой схеме будет проще.

  2. Пароли по-прежнему передаются от пользователя к системе без шифрования. Посмотрите на SRP , если это проблема. SRP настолько нов, что вы должны быть немного параноиком по поводу его реализации, но пока он выглядит многообещающим.

Редактировать: Оказывается, bcrypt опередил меня в идее № 1. Сохраненная информация - это (стоимость, соль, хеш), где стоимость - это сколько раз было выполнено хеширование. Похоже, bcrypt сделал что-то правильно. Увеличение количества раз, которое вы хэшируете, может быть сделано без вмешательства пользователя.

12
ответ дан 30 November 2019 в 09:18
поделиться

На самом деле это зависит от того, для чего предназначены пароли. Вы должны бережно хранить любой пароль, но иногда требуется гораздо большая осторожность, чем другим. Как правило, все пароли должны быть хэшированы, и каждый пароль должен иметь уникальную соль. 1250 Действительно, соли не должны быть такими сложными, даже маленькие могут стать настоящим кошмаром для взломщиков, пытающихся проникнуть в систему. Они добавляются в пароль, чтобы предотвратить использование таблиц Rainbow для взлома паролей нескольких учетных записей. Я бы не t добавить одну букву алфавита к паролю и назвать его солью, но вам не нужно делать его уникальным путеводителем, который также зашифрован где-то еще в базе данных.

Еще одна вещь, касающаяся солей. Ключом к созданию пароля + соли при хешировании является сложность сочетания двух. Если у вас есть 12-символьный пароль и вы добавите в него 1-символьную соль, соль мало что даст, но взлом пароля по-прежнему является монументальным подвигом. Обратное также верно.

Если у вас есть 12-символьный пароль и вы добавите в него 1-символьную соль, соль мало что даст, но взлом пароля по-прежнему является монументальным подвигом. Обратное также верно.

Если у вас есть 12-символьный пароль и вы добавите в него 1-символьную соль, соль мало что даст, но взлом пароля по-прежнему является монументальным подвигом. Обратное также верно.

2
ответ дан 30 November 2019 в 09:18
поделиться

Использование:

  1. Хэшированное хранилище паролей
  2. 128+-битная соль пользовательского уровня, случайная, регенерированная (т.е. вы создаете новые соли, когда вы делаете новые хэши паролей, вы не делаете постоянно сохраняйте одну и ту же соль для данного пользователя)
  3. Сильный, вычислительно дорогой метод хеширования
  4. Методология, которая несколько отличается (алгоритм хеширования, сколько итераций хэширования вы используете, в каком порядке соли объединяются, что-то ) из любых «стандартных руководств по реализации», подобных этим, и из любой другой реализации хранилища паролей, которую вы написали
1
ответ дан 30 November 2019 в 09:18
поделиться

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

0
ответ дан 30 November 2019 в 09:18
поделиться

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

0
ответ дан 30 November 2019 в 09:18
поделиться

Я думаю, что никакой дополнительной итерации по паролю не требуется, просто убедитесь, что есть соль и сложная;) Я лично использую SHA-1 в сочетании с 2 солевыми ключевыми фразами.

0
ответ дан 30 November 2019 в 09:18
поделиться
Другие вопросы по тегам:

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