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