MD5 и SHA512 размеры и безопасность

Насколько мне известно, если вы говорите о md5 он может хранить до 32 characters, Я знаю, что если вы превысите 32 characters он все равно будет хешировать это прекрасно, но на самом деле это может быть hash как md5( 'a' ) хотя вряд ли.

Разве не потенциально опасно и небезопасно использовать (md5) salt в md5 или даже не проверяя на input длина password + salt?

Пример 1:

$pass = md5( 'this is a password' );
$salt = md5( 'this is a salt' );

// Will exceed 32 range and might therefore equal md5( 'a' ) -
// if so this will pass an authorization such as login
md5( $pass . $salt );

Пример 2:

// 32 character password
$pass = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
$salt = 'salt';

// Will also exceed 32 range due to no length check and might equal md5( 'a' )
md5( $pass . $salt );

Если вы не делаете:

$pass = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
$salt = 'salt';

if ( strlen( $pass ) + strlen( $salt ) > 32 )
exit;

else
md5( $pass . $salt );

Кроме того, где находится предел для sha512? 512 characters?

0

Решение

Предисловие:

ни MD5 или SHA-x подходят для хэшей паролей; игнорируя тот факт, что MD5 криптографически взломан и должен быть вообще удален, оба семейства хэшей слишком быстро и не подходят для этой проблемы — это потому, что хэши слишком быстрые, и люди часто выбирают слабый / плохой пароль, который серьезно скомпрометирует домен, что делает пароли MD5 / SHA-x перебором практичными.

Для хеширования пароля используйте Bcrypt вместо (через crypt), что является стандартным в любой уважающей себя сборке PHP. Другие опции, не входящие в стандартную комплектацию PHP, являются scrypt и даже более уязвимыми PBKDF2.

Лучший нужно не заново изобретать колесо, а использовать существующую / протестированную библиотеку, которая будет использовать действительный алгоритм хеширования (т. е. bcrypt), и решить проблемы с неправильным доступом к базе данных, проверкой подлинности, генерацией соли и т. д. Начиная с PHP 5.5+ password_hash а также password_verify Функции могут быть использованы, хотя это все еще только часть системы.


отклик:

выход (диапазон) MD5 — 32 шестнадцатеричных символа, представляющих 128 битов; вход (домен) эффективно неограничен. Для SHA-512 значения составляют 128 символов / 512 бит соответственно. (Обратите внимание, что количество битов эффективной защиты считается Меньше чем фактическое количество бит в диапазоне.)

поскольку ни MD5, ни SHA-x идеальные хэш-функции, то есть будут быть коллизии над доменом, даже если он меньше, чем диапазон — но диапазон настолько велик (а действительный критохэш имеет определенные свойства), что это просто не имеет значения.

То есть результирующие хеши не гарантируются уникальными, а скорее (и особенно с большим количеством битов) крайне невероятно что дубликат будет случайно (или даже умышленно) найден. Ожидаемая частота столкновений может быть оценена День рождения проблема; принцип Pigeon Hole также применяется, но шанс дубликат настолько бесконечно близок к 100% до этого, что не очень применим.

Тем не менее, это не проблема в правильном дизайне. Это потому что криптографические хеш-функции разработаны с определенными свойствами (что также объясняет, почему MD5 неподходящий в такой роли)

Идеальная криптографическая хеш-функция имеет четыре основных свойства:

  • легко вычислить значение хеша для любого данного сообщения
  • невозможно создать сообщение с заданным хешем
  • невозможно изменить сообщение без изменения хеша
  • невозможно найти два разных сообщения с одним и тем же хешем

Имейте в виду, что пока еще не было [сообщено] не обнаружено столкновений на SHA-1/2/3. Это потому, что они все еще подходят криптографические хэш-функции. (См. Комментарий Сумерков о SHA-1.)

Также учтите, что есть меньше атомов в наблюдаемой вселенной (10 ^ 80 или ~ 2 ^ 280), чем диапазон хэша SHA-512! Это одна из причин, почему / как криптографические хеш-функции считаются безопасными.

7

Другие решения

Нет, это не опасно / небезопасно. Нет реального требования безопасности, чтобы два разных пароля не аутентифицировали одинаковые учетные данные! На самом деле у вас может сложиться впечатление, что MD5 будет хэшировать все первые 2 ^ 32-1 значения уникально — на самом деле это не так.

Фактически, MD5 не «хранит» уникальную ценность любого рода. Есть много значений, которые будут хэшироваться на любой данный вывод MD5.

sha2 / 512 имеет, как следует из названия, 512 бит в хэше — вдвое больше длины.

0

По вопросам рекламы [email protected]