Хеширование нескольких значений - самый безопасный метод? - PullRequest
1 голос
/ 17 марта 2012
hash(value1 & value2 & salt)
hash(hash(value1 & value2) & salt)
hash(hash(value1 & value2) & hash(salt))
hash(hash(value1 & salt) & hash(value2 & salt))
hash(hash(value1 & salt1) & hash(value2 & salt2))
hash(value1 & salt1 &value2 & salt2)
hash(value1 & salt1) and hash(value2 & salt2)  '2 separate hashes for each input

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

Разве лучше, чтобы внешний / окончательный алгоритм хеширования отличался от внутренних?

Дополнительный вопрос: является ли соль главным образом для того, чтобы сделать коротких паршивых пользователей pw более защищенными от атак грубой силой? Так что, если бы pw был большим (скажем, ByteArray файла изображения), добавила бы соль какую-либо реальную цель? Спасибо.

1 Ответ

2 голосов
/ 17 марта 2012

Если предположить, что & означает конкатенацию, самое безопасное:

hash(value1 & delim & value2 & delim & salt)

... где delim - разделитель, который не может появляться ни в одной из других строк.Неважно, в каком значении порядка1, значении2 и соли указан.

Разделитель предотвращает алиасинг, например, (value1, value2) = ('fail', 'stone') против (value1, value2) = ('fails', 'tone').

...