ОБНОВЛЕНИЕ: Недавно я узнал из этого вопроса, что во всем обсуждении ниже я (и я уверен, что другие тоже сделали) был немного запутанным: что я держу называя радужный стол, на самом деле называется хеш-таблицей. Радужные столы являются более сложными существами и на самом деле являются вариантом Хеллманских хэш-цепей. Хотя я считаю, что ответ по-прежнему остается тем же (поскольку он не доходит до криптоанализа), некоторые из обсуждений могут быть немного искажены. Вопрос: "Что такое таблицы радуги и как они используются?
Как правило, я всегда рекомендую использовать криптографически сильное случайное значение в качестве соли, которое будет использоваться с хеш-функциями (например, для паролей), например, для защиты от атак Rainbow Table.
Но действительно ли криптографически необходимо, чтобы соль была случайной? Будет ли какое-либо уникальное значение (уникальное для пользователя, например, userId) достаточным в этом отношении? Фактически это предотвратит использование единой таблицы Rainbow для взлома всех (или большинства) паролей в системе...
Но действительно ли отсутствие энтропии действительно ослабляет криптографическую силу хеш-функций?
Обратите внимание: я не спрашиваю, зачем использовать соль, как ее защитить (она не обязательна), используя единый хэш хэша (не) или какую функцию хеша использовать. < ш > Просто нужна ли соль энтропии или нет.
Спасибо всем за ответы до сих пор, но я хотел бы сосредоточиться на тех областях, в которых я (немного) меньше знаком. Главным образом последствия для криптоанализа - я был бы признателен большинству, если бы кто-нибудь имел некоторый вклад от криптоматематического ПОВ.
Кроме того, если есть дополнительные векторы, которые не были рассмотрены, этот большой ввод тоже (см. @Dave Sherohman point на нескольких системах).
Помимо этого, если у вас есть теория, идея или лучшая практика, пожалуйста, подтвердите это либо с помощью доказательства, сценария атаки, либо эмпирических данных. Или даже действительные соображения относительно приемлемых компромиссов... Я знаком с Лучшей Практикой (капитал B капитала P) по этому вопросу, я хотел бы доказать, какую ценность это фактически обеспечивает.
EDIT: некоторые действительно хорошие ответы здесь, но я думаю, что, как говорит @Dave, это сводится к таблицам Rainbow для общих имен пользователей... и возможно менее распространенным именам. Однако, что, если мои имена пользователей уникальны по всему миру? Не обязательно уникально для моей системы, но для каждого пользователя - например. адрес электронной почты. Не было бы стимулов для создания RT для одного пользователя (поскольку @Dave подчеркивается, соль не хранится в секрете), и это все равно будет препятствовать кластеризации. Только проблема заключается в том, что у меня может быть один и тот же адрес электронной почты и пароль на другом сайте, но соль все равно не помешает. Итак, он возвращается к криптоанализу - нужна ли энтропия или нет? (Мое современное мышление не является необходимым с точки зрения криптоанализа, но оно по другим практическим причинам.)