Уявіть, що ви можете взяти будь-які дані — одне слово, роман, відео на 4 ГБ — і звести їх до короткого рядка символів фіксованої довжини, який унікально ідентифікує їх. Зміните одну кому в оригіналі — і рядок стане абсолютно іншим. І немає способу обернути процес, щоб відновити оригінальні дані.
Саме це робить криптографічна хеш-функція. Це один з найфундаментальніших будівельних блоків сучасної безпеки, і вона тихо захищає практично все, що ви робите онлайн.
Метафора відбитка пальця
Хеш працює як цифровий відбиток пальця. Ваш відбиток унікально ідентифікує вас, але ніхто не може відтворити ваше обличчя з нього. Аналогічно, криптографічний хеш унікально ідентифікує фрагмент даних, не розкриваючи, що це за дані.
Подайте будь-який вхід у хеш-функцію, і ви отримаєте дайджест (також називають хеш-значенням або контрольною сумою) — рядок шістнадцяткових символів фіксованої довжини. SHA-256, один з найпоширеніших алгоритмів, завжди видає 64-символьний вихід незалежно від розміру вхідних даних.
| Вхід | Дайджест SHA-256 (перші 16 символів) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Повний дамп Вікіпедії | (все одно 64 символи) |
Чотири основні властивості
Функція кваліфікується як криптографічний хеш лише тоді, коли задовольняє ці властивості:
- Детерміністичність. Один і той самий вхід завжди дає один і той самий вихід, на будь-якій машині, у будь-який час.
- Одностороння (стійкість до пре-образу). Маючи хеш, обчислювально неможливо знайти оригінальний вхід. Ви не можете «розхешувати» дані.
- Стійкість до колізій. Практично неможливо знайти два різних входи, що дають однаковий дайджест. Для SHA-256 ймовірність випадкової колізії становить приблизно 1 до 2^128 — число, більше за кількість атомів у видимому Всесвіті.
- Лавинний ефект. Зміна одного біта у вході змінює приблизно половину бітів у виході. Немає помітного шаблону або зв'язку між подібними входами.
Ключова відмінність: Хешування — це не шифрування. Шифрування оборотне з ключем; хешування навмисно необоротне. Ви шифруєте дані для захисту під час передачі. Ви хешуєте дані для перевірки їхньої цілісності або зберігання доказу без збереження оригіналу.
Поширені хеш-алгоритми
MD5 (1991)
- Вихід: 128 бітів (32 шістнадцяткових символи)
- Статус: Криптографічно зламаний. Дослідники можуть генерувати колізії за секунди на ноутбуці.
- Ще зустрічається у: Небезпекових контрольних сумах для завантажень файлів та застарілих системах.
SHA-1 (1995)
- Вихід: 160 бітів (40 шістнадцяткових символів)
- Статус: Застарілий для безпеки. Google продемонстрував практичну колізію у 2017 році (атака «SHAttered»).
- Ще зустрічається у: Старіших репозиторіях Git, деяких застарілих сертифікатах.
SHA-256 (2001)
- Вихід: 256 бітів (64 шістнадцяткових символи)
- Статус: Чинний стандарт. Відомих практичних атак немає.
- Використовується у: TLS-сертифікати, Bitcoin, хешування паролів, цифрові підписи, перевірка цілісності файлів.
SHA-3 (2015)
- Вихід: Змінний (зазвичай 256 бітів)
- Статус: Найновіший стандарт, заснований на повністю іншому внутрішньому дизайні (конструкція губки Keccak) від родини SHA-2.
- Використовується у: Перспективних системах, Ethereum, ситуаціях, що вимагають різноманітності алгоритмів.
| Алгоритм | Розмір виходу | Безпечний? | Швидкість |
|---|---|---|---|
| MD5 | 128 бітів | Ні | Дуже швидкий |
| SHA-1 | 160 бітів | Ні | Швидкий |
| SHA-256 | 256 бітів | Так | Помірний |
| SHA-3-256 | 256 бітів | Так | Помірний |
Де використовується криптографічне хешування
Зберігання паролів
Коли ви створюєте акаунт, добре спроєктована система ніколи не зберігає ваш пароль у відкритому вигляді. Вона зберігає хеш. Коли ви входите, система хешує те, що ви ввели, і порівнює зі збереженим значенням. Навіть якщо базу даних зламано, зловмисники отримують хеші — не паролі.
Сучасні системи йдуть далі, додаючи випадкову сіль (додаткові дані, що додаються перед хешуванням) та використовуючи навмисно повільні алгоритми, такі як bcrypt, scrypt або Argon2, щоб зробити підбір грубою силою непрактичним.
Перевірка цілісності файлів
Розповсюджувачі програмного забезпечення публікують контрольні суми SHA-256 поряд із завантаженнями. Після завантаження ви обчислюєте хеш файлу на своїй машині та порівнюєте. Збіг доводить, що файл не було пошкоджено або підроблено під час передачі.
Цифрові підписи
Коли ви цифрово підписуєте документ, система спочатку хешує документ, потім шифрує хеш вашим приватним ключем. Отримувач розшифровує його вашим публічним ключем і порівнює зі своїм власним хешем документа. Це набагато ефективніше, ніж шифрування всього документа, і доводить як авторство, так і цілісність.
Блокчейн
Кожен блок у блокчейні містить хеш попереднього блоку, створюючи незмінний ланцюг. Зміна будь-якої минулої транзакції змінює хеш її блоку, що руйнує ланцюг від цієї точки далі, роблячи підробку негайно видимою.
Чому MD5 та SHA-1 вважаються зламаними
Хеш-алгоритм «зламаний», коли хтось може навмисно створити два різних входи, що дають однаковий хеш (колізія). Це підриває кожен випадок використання, що покладається на унікальність.
- MD5: Колізії можна генерувати за секунди. Дослідники створили два різних PDF-файли з ідентичними хешами MD5.
- SHA-1: Атака SHAttered у 2017 році створила два різних PDF з однаковим хешем SHA-1, що потребувало приблизно 6500 років обчислень на одному процесорі (здійсненно з хмарними ресурсами).
Практичне правило: Ніколи не використовуйте MD5 або SHA-1 для нічого, пов'язаного з безпекою — паролів, сертифікатів, цифрових підписів або перевірки цілісності, де може бути задіяний зловмисник. Використовуйте натомість SHA-256 або SHA-3.
Далі
Хешування — одна з тих концепцій, що стають інтуїтивно зрозумілими, коли ви з нею поекспериментуєте. Спробуйте захешувати речення, потім змініть один символ і спостерігайте лавинний ефект на власні очі.
- Як генерувати та перевіряти хеші — покрокове керівництво
- Генератор хешів — обчислюйте SHA-256, MD5, SHA-512 та інше миттєво у вашому браузері
- Ідентифікатор хешів — вставте невідомий хеш та визначте його алгоритм
