Солевое размещение до одностороннего хеша


7

В одностороннем хешировании своя общая для добавления или добавления соли в секрет, а затем хеш ее: (соль + секрет) или (секрет + соль). Я думал об этой метафоре, когда соль падала на тарелку с едой. Это, конечно, не все падают ни в начале, ни в конце плиты.

Есть ли какие-либо преимущества в плане безопасности, если вместо этого я должен был случайно распределять соль в тайне, как показано ниже?

Простой пример, где соль распространяется все остальные буквы:


Salt = lk2jn35 
Secret = hello 
Salted = lhke2ljlno35

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


Salt = lk2jn35 
Secret = hello 
SaltMask = 010011101011 
Salted = hlelk2jlno35

вопроса хотя это имеет какие-либо дополнительные преимущества безопасности выше и вне традиционного препенда или добавить метод?

3

См. Why is it always 'HASH(salt + password)' that we recommend?. Если вы ищете безопасный метод проверки пароля, есть лучшие варианты, как указывает Томас Порнин в своем ответе на этот вопрос, и Том Лик указывает выше.

H(salt|secret) метод может быть восприимчив к length extension attacks хотя я не могу видеть способ, которым он может быть полезен в этом контексте (так как один должны знать оба компонента для выполнения атаки этого типа, нет никакой пользы), нет причин немедленно его отклонить.

Предполагая, что выбранный алгоритм хеширования is fit for purpose, то я предлагаю следующие соображения:

  • Цель соли не «улучшить» хэш, это сделать его дорогим для выполнения определенных precomputed attacks
  • Соль конкатенация - это вычислительно тривиальная операция, а не где-то рядом с эффективностью key-stretching с точки зрения расхода. Перемешивание бит вокруг нескольких раз - это довольно простая операция.
  • Учитывая намерение использовать соль, можно сказать, что более длинная и более случайная соль лучше по назначению. Из этого следует, что это не делает соль более (или менее) эффективной, если вы просто перемешаете бит ввода.

Предполагая, что «лучшая безопасность» эквивалентна «сложнее для злоумышленника», нет никакой пользы, потому что attacker knows the system и проблема не сложнее, чем раньше. Секрет все тот же секрет, и объем работы по его восстановлению практически не изменился.

(И, как всегда, есть риск того, что вы либо упускать из виду некоторые тонкие аспекты системы, или просто не повезло сегодня, и вы somehow managed сделать хуже общая безопасность.)


9

Как соль и пароль смешиваются вместе, не имеет никакого значения, если хеш-функция «идеальна» (т.е. равна random oracle). Однако идеальные хеш-функции действительно не существуют; мы даже не знаем, могут ли вообще существовать даже «слегка несовершенные» хеш-функции (функции, которые не являются случайными оракулами, но все же гарантированно устойчивы к прообразу).Практические хэш-функции имеют «причуды», которые относятся к их внутренней структуре, и их следует избегать, заботясь о том, как подготовлен вход. Очень сложно сказать, какой способ сочетать пароль и соль лучше, поэтому обычный способ - оставить его подготовленным криптографам. Эти люди пришли после десятилетий работы с некоторыми конструкциями, которые кажутся, чтобы быть сильными, и маловероятно, чтобы одинокий разработчик мог придумать что-то значительно лучше, шлепая одну или две функции.

В любом случае, даже если ваш метод смешивания пароля и соли хорош (это может быть быть хорошим, но это трудно понять наверняка), ваша функция все еще слишком быстра. Здесь вы должны иметь тысячи или даже миллионы вложенных функций функции хэш-функции, потому что функция хэширования пароля должна быть по своей сути медленной. См. this answer для полного рассмотрения вопроса.

  0

Единственная часть этого вопроса, которая является полунаправленной на вопрос, «это может быть хорошо, но это трудно понять наверняка» не будет принято в качестве ответа. Остальное - идеализм и критика за то, что он даже задал вопрос. например не по теме. 16 авг. 132013-08-16 02:35:41

  0

@StrandedPirate фактически весь ответ абсолютно релевантен и правилен, даже если он представляет собой часть научной теории и фона вместо того, чтобы просто дать вам простой ответ. Подводя итог: (1) В идеальном хэш-мире это не имело бы значения; (2) у нас нет идеального хэша, поэтому мы не уверены *; (3) вы не криптограф, поэтому не пытайтесь создать это самостоятельно ('' Do not a Dave ''); (4) Помимо соли, вы делаете это неправильно (используйте медленную схему, предназначенную для защиты паролей). 16 авг. 132013-08-16 14:54:20

  0

Я не знаю, это НЕ ответ, и не «в совершенном мире бла-бла ..». в процессе его перемещения на сайт криптографии реальные эксперты могли бы фактически дать ответ. 16 авг. 132013-08-16 15:13:29

+2

Технически, я - настоящий эксперт в криптографии, и я не говорю «Я не знаю». Вместо этого я говорю: «Криптографы пришли к выводу, после десятилетий исследований, что он по существу не известен». Единственный известный способ «гарантировать», что алгоритм безопасен, - сделать его общедоступным и позволить другим криптографам пытаться сломать его в течение нескольких лет. 16 авг. 132013-08-16 15:57:55