Якщо ваш вхід - це 20-значний номер, то є 10 20 можливих входів.
Якщо ваш вихід - це 12-символьний буквено-цифровий рядок, то існує 62 12 можливих виходів.
Вхідні дані:
100000000000000000000
Виходи:
3226266762397899821056
Якщо ми уважно придивимось, то побачимо, що нижнє число довше.
Що означає, що є більше можливих виходів, ніж входів .
Це означає, що хешування є безглуздим, оскільки кожен можливий вихід може бути відображений безпосередньо на один вхід. Тож це означає, що було б неймовірно легко перебити та отримати фактичні цифри назад.
Отже, ми просто використовуватимемо коротший хеш!
В чому справа? Просто використовуйте ціле число, випадкове, якщо вам доведеться.
Візьмемо паролі як приклад.
Ви ніколи не зберігаєте пароль. Ви зберігаєте тільки хеш. Це дозволяє легко перевірити заданий вклад на цей хеш (щоб побачити, чи вказаний пароль правильний), не зберігаючи фактичний пароль.
Це працює, тому що:
- наші алгоритми хешування не створюють однаковий хеш для двох входів легко (зіткнення малоймовірні)
- нерозумно вважати, що хтось міг розібратися в оригінальному введенні для даного хешу
І чому це? Ну а пароль, який я використав, може бути довжиною 1 000 000 символів. Як ви це зрозумієте з короткого хешу? Ви не можете. Ви можете лише спробувати обчислити якомога більше хешів, порівняти їх із наявним та сподіватися на збіг. У цьому випадку зазвичай навіть не доречно знайти фактичний оригінальний вхід, оскільки спрацює будь-який вхід, який видає той самий хеш.
Отже, якщо я зловмисник і отримав базу даних з хешами, я міг би порівняти хеші з набором, який я раніше обчислював, щоб знайти дійсний вхід для цього хеша. Зазвичай протидіють засолюванню хешей.
Тож зловмисник змушений буде тримати грубі сили так довго, поки не знайде дійсний вклад для відповідного хешу (що займе назавжди, тому що існує шалена кількість можливих хешей).
Але що робити, якщо паролі були обмежені певною довжиною і вони могли містити лише цифри?
Це різко скорочує можливі введення даних і, таким чином, час, який знадобиться для грубої сили відповідного хешу.
І це в основному, що ви робите, коли хешуєте номери кредитних карт. Але це гірше, тому що якщо зловмисник отримав збіг, то це буде не просто довільний рядок, а, швидше за все, дійсний номер кредитної картки!