ОНОВЛЕННЯ: Нещодавно з цього запитання я дізнався, що в усьому обговоренні нижче я (і я впевнений, що і інші) був трохи заплутаним: те, що я продовжую називати райдужним столом, насправді називається хеш-таблицею. Веселкові столи - це більш складні істоти, і насправді вони є різновидом Hellman Hash Chains. Хоча я вважаю, що відповідь все та ж (оскільки справа не зводиться до криптоаналізу), деякі обговорення можуть бути дещо перекошеними.
Питання: " Що таке райдужні столи і як вони використовуються? "
Як правило, я завжди рекомендую використовувати криптографічно сильну випадкову величину як сіль, для використання з хеш-функціями (наприклад, для паролів), наприклад, для захисту від атак Rainbow Table.
Але чи насправді криптографічно необхідно, щоб сіль була випадковою? Чи достатньо в цьому відношенні якогось унікального значення (унікального для кожного користувача, наприклад userId)? Фактично це не дозволило б використовувати одну таблицю Веселки для злому всіх (або більшості) паролів у системі ...
Але чи справді відсутність ентропії послаблює криптографічну міцність хеш-функцій?
Зауважте, я не запитую про те, навіщо використовувати сіль, як її захищати (це не обов’язково), використовуючи єдиний константний хеш (не потрібно) чи яку хеш-функцію використовувати.
Тільки потрібна солі ентропія чи ні.
Дякую всім за відповіді на даний момент, але я хотів би зосередитись на областях, які (трохи) мені менш відомі. В основному це має наслідки для криптоаналізу - я був би дуже вдячний, якщо хтось має якийсь внесок від крипто-математичного PoV.
Крім того, якщо є додаткові вектори, які не враховувались, це теж чудово (див. Пункт @Dave Sherohman на декількох системах).
Окрім цього, якщо у вас є якась теорія, ідея чи найкраща практика - підкріпіть це будь-якими доказами, сценарієм нападу або емпіричними доказами. Або навіть обгрунтовані міркування щодо прийнятних компромісів ... Я знайомий з Передовою практикою (велика буква В) з цього питання, я хотів би довести, яку цінність це насправді надає.
РЕДАГУВАТИ: Тут є дійсно хороші відповіді, але я думаю, як каже @Dave, це зводиться до Веселкових таблиць для загальних імен користувачів ... і можливих менш поширених імен теж. Однак що, якщо мої імена користувачів є глобально унікальними? Не обов’язково унікальний для моєї системи, але для кожного користувача - наприклад, електронна адреса.
Не було б стимулу будувати RT для одного користувача (як підкреслював @Dave, сіль не тримається в таємниці), і це все одно запобігало б кластеризації. Єдина проблема полягала б у тому, що у мене можуть бути однакові адреси електронної пошти та пароль на іншому сайті - але сіль все одно не завадить цьому.
Отже, це зводиться до криптоаналізу - необхідна ентропія чи ні? (Зараз я думаю, що це не потрібно з точки зору криптоаналізу, а з інших практичних причин).