Какой алгоритм я должен использовать для хеширования паролей в мою базу данных? [дубликат]

1116 Все дело в порядке.

food.update(snake) проверяет, сталкивается ли еда с коктейлем, и помещает еду в новое положение.
snake.update(food) Испытание: змея сталкивается с пищей и добавляет к змею сегмент.

Таким образом, если food.update(snake) будет выполнено до snake.update(food), то змея никогда не будет есть пищу, потому что еда удалена раньше:

food.update(snake)
snake.update(food)

snake.update(food)
food.update(snake)

Змея никогда не находится в том положении, в котором она нарисована, потому что змея вытягивается self.draw_snake() до того, как ее перемещают self.movement().

Вы должны сделать это в следующем порядке:

  1. Переместить змею
  2. Проверьте, есть ли змея на еде
  3. Нарисуйте змею [1114 ]
class Snake(object):

    # [...]

    def update(self,food):
        self.movement()
        self.add_segment(food)
        self.draw_snake()
21
задан Dustman 22 September 2008 в 18:41
поделиться

10 ответов

Этот ответ 2008 года теперь опасно устарел. SHA (все варианты) является теперь тривиально вскрываемой, и лучшей практикой, теперь (с Jan 2013), чтобы использовать расширяющий ключ хеш (как PBKDF2) или идеально RAM, интенсивная одна (как Bcrypt) и добавить соль в расчете на пользователя также.

Точки 2, 3 и 4 все еще стоят уделения внимания.

Посмотрите Безопасность IT-систем сайт SE для больше.

<час>

Исходный 2008 ответ:

  1. Использование проверенный алгоритм. SHA-256 использует 64 символа в базе данных, но с индексом на столбце, который не является проблемой, и это - доказанный хеш и более надежный, чем MD5 и SHA-1. Это также реализовано на большинстве языков как часть комплекта стандартной защиты. Однако не плохо себя чувствуйте при использовании SHA-1.

  2. только хешируют пароль, но помещают другую информацию в него также. Вы часто используете хеш "username:password:salt" или подобный, а не просто пароль, но если Вы играете с этим тогда, Вы делаете его еще тяжелее для выполнения атаки с подбором по словарю.

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

  4. не пишут журналы как" [AddUser], Хеш GeorgeBush:Rep4Lyfe:ASOIJNTY является xyz"

43
ответ дан 29 November 2019 в 06:07
поделиться

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

Кардинальные правила:

  1. Никогда не хранят незашифрованный пароль (что означает, что Вы никогда не можете отображать или передавать его также.)
  2. Никогда не передают сохраненное представление пароля по незащищенной строке (или простой текст, закодированный или хешированный).
  3. Скорость является Вашим врагом.
  4. Регулярно повторно анализируют, и улучшают Ваш процесс как аппаратные средства, и криптоанализ улучшается.
  5. Криптография и процесс очень маленькие часть решения.
  6. Точки отказа включают: устройство хранения данных, клиент, передача, обработка, пользователь, легальные ордеры, проникновение и администраторы.

Шаги:

  1. Осуществляют некоторые разумные минимальные требования пароля.
  2. пароли Изменения часто.
  3. Использование самый сильный хеш можно добраться - , SHA-256 был предложен здесь.
  4. Объединение пароль с зафиксированная соль (то же для Вашей целой базы данных).
  5. Объединение результат предыдущего шага с уникальная соль (возможно, имя пользователя, рекордный идентификатор, гуид, долгое случайное число, и т.д.), который хранится и присоединяется к этой записи.
  6. Выполнение хеш-алгоритм многократно - как 1 000 + времена . Идеально включайте различную соль каждый раз с предыдущим хешем. Скорость является Вашим врагом, и несколько повторений уменьшает скорость. Время от времени удвойте повторения (это требует, чтобы получение нового хеша - сделало это в следующий раз, когда они изменяют свой пароль.)

, О, и если Вы не выполняете SSL или некоторую другую безопасность строки тогда, не позволяют Вашему паролю быть переданным в простом тексте. И если Вы только выдерживаете сравнение, заключительный хеш от клиента к Вашему сохраненному хешу тогда не признают что быть переданным в простом тексте также. Необходимо отправить данный случай (число, используемое однажды) клиенту и сделать, чтобы они хешировали это со своим сгенерированным хешем (использующий шаги выше) хеш, и затем они отправляют Вас что один. На стороне сервера Вы выполняете тот же процесс и и видите, хешируют ли два один раза соответствие. Тогда избавьтесь от них. Существует лучший путь, но это - самое простое.

32
ответ дан 29 November 2019 в 06:07
поделиться

CodingHorror имел большую статью об этом в прошлом году

http://www.codinghorror.com/blog/archives/000953.html

, рекомендация в конце статьи является BCrypt

15
ответ дан 29 November 2019 в 06:07
поделиться

Вышеупомянутые алгоритмы являются криптографически безопасными алгоритмами хеширования (но MD5 не считается безопасным сегодня).

Однако существуют алгоритмы, которые конкретно создали для получения ключей из паролей. Это ключевые функции деривации . Они разработаны для использования с симметричными шифрами, но они хороши для хранения пароля также. PBKDF2, например, использует соль, большое количество повторений и хорошую хеш-функцию. Если у Вас есть библиотека, что реализует ее (например.NET), я думаю, что необходимо рассмотреть его.

8
ответ дан 29 November 2019 в 06:07
поделиться

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

6
ответ дан 29 November 2019 в 06:07
поделиться

Используйте сильную crytographic хеш-функцию как MD5 или SHA1, но удостоверьтесь, что Вы используете пользу соль , иначе Вы будете восприимчивы к нападения таблицы радуги.

6
ответ дан 29 November 2019 в 06:07
поделиться

Обновление Jan 2013

исходный ответ с 2008, и вещи переместились немного за прошлые 5 лет. Готовая доступность облачных вычислений и мощных видеокарт параллельного процессора означает, что пароли до 8 или 9 символов, хешированных как MD5 или SHA1, теперь тривиально вскрываемы.

Теперь длинная соль - необходимость, как что-то более жесткое как SHA512.

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

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

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

протяжение Ключа является одним способом сражаться с этим. Расширяющий ключ алгоритм (как PBKDF2) применяет более быстрый хеш (как SHA512) тысячи времен, обычно заставляя поколение хеша взять 1/5 секунды или около этого. Кто-то, которого вход в систему не заметит, но если можно только генерировать 5 хешей в секунду атаки перебором, намного более жесток.

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

Так:

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

  • протяжение Ключа для замедления поколения хеша. Я, вероятно, пошел бы с PBKDF2.

  • соль В расчете на пользователя означает новое нападение на пользователя и некоторую работу, выясняющую, как получить соль.

Вычислительная мощность и доступность повышаются экспоненциально - возможности являются этими правилами, изменится снова еще за 4 года. Если бы Вы должны соответствовать требованиям завтрашнего дня безопасность, я исследовал бы хеши стиля bcrypt/scrypt - они берут более медленные расширяющие ключ алгоритмы и добавляют шаг, который использует много RAM для генерации хеша. Используя такое большое количество RAM уменьшает эффективность дешевых параллельных процессоров.

Исходный сентябрь 2008 (оставленный внутри, таким образом, комментарии имеют смысл)

MD5+salt или SHA1+salt не 'тривиально вскрываемы' - большинство взломов зависит от огромных таблиц радуги, и они становятся менее полезными с солью [update, now they are].

MD5+salt является относительно слабой опцией, но это не будет легко поврежденным [update, now it is very easy to break].

SHA2 идет полностью до 512 - это будет довольно невозможным расколоться с легко доступным набором [update, pretty easy up to 9 char passwords now] - хотя я уверен, что существует Cray в некотором военном бункере где-нибудь, который может сделать это [You can now rent this 'Cray' from Amazon]

5
ответ дан 29 November 2019 в 06:07
поделиться

MD5 или SHA в сочетании со случайным образом сгенерированным соленым значением для каждой записи

2
ответ дан 29 November 2019 в 06:07
поделиться

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

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

0
ответ дан 29 November 2019 в 06:07
поделиться

MD5 / хеши SHA1 являются оба хорошим выбором. MD5 немного более слаб, чем SHA1.

-2
ответ дан 29 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

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