Есть ли у хеш-соли какое-либо другое применение, кроме как предотвращать атаки радужного стола?

Я слышал, что единственная цель соли - предотвратить атаки радужной таблицы, но, конечно же, она должна иметь большую ценность, чем эта? Разве это не предотвратило бы и атаку по словарю? А как насчет брутфорса, там соль пригодится? И не могли бы вы объяснить почему?

Во-вторых, предположим, что у меня есть алгоритм, который берет микропериод, соль из 128 символов и случайное число от 1 до 10 миллиардов и хеширует их вместе. Обеспечит ли это высокий уровень безопасности? Ибо даже если бы злоумышленник знал одну из этих деталей, мне кажется, что вычислить остальные все равно было бы невозможно с вычислительной точки зрения. Но правда ли это?

Спасибо,

Бен

Изменить:. Чтобы уточнить, у злоумышленника нет доступа к алгоритму хеширования, поэтому он не может спамить какую-либо информацию в систему. Все, что у них есть, - это хэш, и они должны решить, как он был скомпилирован. Конечно, даже если бы они знали, как генерируется хеш, попытка перебора всех комбинаций с помощью длинной соли сделала бы это нереальным?

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

$salt = "some random characters I made up";
hash('sha256', microtime(true).$salt.mt_rand(1000,9999));

Я знаю, что это всего 1000-9999 вместо упомянутых выше миллиардов.

Еще раз спасибо.


person Ben    schedule 03.03.2010    source источник
comment
Как в следующий раз, когда вы войдете в систему, как система узнает, какое было микровремя при создании пароля? Если вы не сохраните это, вы не сможете аутентифицировать вход в систему. Если вы сохраните это, то это всего лишь часть соли, и вы все равно собираетесь вставить ее в базу данных.   -  person Richard Gadsden    schedule 07.07.2011


Ответы (2)


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

Атаки по словарю и атаки методом перебора - это, по сути, одно и то же. Соление не останавливает их, так как ваш алгоритм проверки похож на

plain-text-passwd = 'secret provided by user'
salt = getSalt(username) //looks the salt value up in database based on the users username
hash-password-in-db = getPassword(username) // looks up hashed password bassed on users username
if(hash(plain-text-passwd + salt) == hash-password-in-db) //if true, password is correct

При атаках на основе словаря и брутфорсинга значение для plain-text-passwd рассылается пользователем спамом, который, в свою очередь, хешируется с добавлением соли. Так что соление ничего не делает

Во-вторых, предположим, что у меня есть алгоритм ...

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

person Jase Whatson    schedule 03.03.2010

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

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

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

person caf    schedule 03.03.2010