
Алгоритм Keccak — це сімейство криптографічних геш-функцій, які перетворюють довільні вхідні дані на цифровий відбиток фіксованої довжини. Він є основою стандарту SHA-3 і широко застосовується в блокчейн-технологіях.
Геш-функцію можна розглядати як “машину для створення відбитків”: однаковий вхід завжди забезпечує однаковий вихід, але відновити початкові дані лише за результатом майже неможливо. Keccak підтримує змінну довжину виходу, а найпоширенішим є 256-бітний варіант (Keccak-256). Такий фіксований розмір дає змогу ефективно перевіряти, індексувати та контролювати цілісність даних.
Keccak має ключову роль, адже виконує функції основної “машини для відбитків” у системах на кшталт Ethereum, забезпечуючи створення адрес, селекторів функцій смартконтрактів та індексацію подій.
Наприклад, на біржах на кшталт Gate, коли ви вносите ETH, адреса з префіксом “0x” утворюється шляхом гешування публічного ключа через Keccak-256 і вибору останніх 20 байтів. Для викликів функцій селектор генерується шляхом застосування Keccak-256 до підпису функції та вибору перших 4 байтів. Журнали подій використовують Keccak для створення тем для швидкого пошуку.
Keccak використовує “губчасту конструкцію”. Уявіть губку: спочатку вона “вбирає” вхідні дані для змішування внутрішнього стану, потім “видавлює” потрібний геш-вихід.
Крок 1, Вбирання: вхідне повідомлення розбивається на блоки, які XOR-яться у “записувану область” стану — як вода вбирається губкою, так і дані інтегруються у стан.
Крок 2, Перестановка: функція перестановки (Keccak-f) застосовується кілька разів для перемішування бітів у стані. Це оборотний процес “перемішування”; Keccak-f[1600] зазвичай виконується 24 раунди.
Крок 3, Видавлювання: вихід зчитується з “читальної області” стану. Для довших виходів виконуються додаткові перестановки перед отриманням нових даних — як повторне видавлювання води з губки.
Для стандартних параметрів Keccak-256 внутрішній стан має 1 600 біт, розділених на бітрейт (область читання/запису) 1 088 біт і ємність (буфер безпеки) 512 біт. Збільшення ємності підвищує рівень безпеки.
У Ethereum є чотири основні застосування Keccak: створення адрес, селектори функцій, теми подій та індексація структур даних.
Головна різниця між Keccak і SHA3 полягає у параметрах доповнення (“розділення домену”). SHA3-256 використовує суфікс доповнення 0x06, а поширений у Ethereum Keccak-256 — 0x01.
Це означає, що однакові вхідні дані дають різні результати для Keccak-256 і SHA3-256. Під час розробки або аудиту важливо перевіряти, використовується “Keccak-256” чи “SHA3-256” — вони не взаємозамінні. Коли NIST стандартизував SHA-3 у 2015 році, було внесено цю зміну для розділення домену (джерело: NIST, 2015).
Крок перший: перевірте, чи ваші вхідні дані представлені байтами чи текстом. Якщо це рядок, завжди кодуйте його як UTF-8; для шістнадцяткових рядків перетворюйте їх у “сирі” байти і не включайте префікс “0x” у дані.
Крок другий: оберіть правильну функцію. В EVM стандартом є keccak256 (тобто Keccak-256). Деякі бібліотеки називають SHA3-256 як sha3 — уважно перевіряйте документацію та версії бібліотек, щоб уникнути помилок.
Крок третій: перехресно перевіряйте результати. Використовуйте дві незалежні бібліотеки або інструменти для обчислення гешів і переконайтеся, що вони збігаються; для тестування можна скористатися відомими селекторами, наприклад, "transfer(address,uint256)", що дає "0xa9059cbb".
Сприймайте геші як незворотні відбитки у своїх процесах — це не шифрування і не випадкові числа. Щоб запобігти атакам rainbow table, завжди додавайте випадкову сіль перед гешуванням і гешуйте разом і сіль, і дані.
Виділяють три основні помилки: різниця доповнення, помилки кодування і неправильне використання у прикладних сценаріях.
Безпека Keccak ґрунтується на губчастій конструкції та параметрі ємності. Для Keccak-256 стійкість до колізій — близько 2^128 операцій; стійкість до знаходження прообразу — близько 2^256 операцій.
Станом на січень 2025 року для стандартних параметрів не виявлено практичних атак на колізії чи прообрази; дослідження здебільшого стосуються скорочених варіантів або теоретичних меж. За продуктивністю провідні бібліотеки мають оптимізовані реалізації для CPU/GPU з високою пропускною здатністю; апаратне прискорення (наприклад, ASIC) розвивається для ресурсомістких задач.
Keccak залишатиметься основою безпеки систем як ядро SHA-3; у екосистемі EVM він фундаментальний для адрес, селекторів і індексації журналів. Із розвитком апаратного прискорення та вдосконаленням бібліотек зростатимуть і продуктивність, і інструментарій. Деякі нові сценарії (наприклад, zero-knowledge proofs) можуть використовувати альтернативні геші на кшталт Poseidon, але це не впливає на стабільність Keccak для загальних завдань відбитків і індексації. Для розробників головне — чітко розрізняти Keccak-256 і SHA3-256 і ретельно контролювати процеси кодування та тестування: тоді Keccak залишатиметься надійним низькорівневим інструментом.
В Ethereum для створення адреси облікового запису використовується Keccak-256 — публічний ключ гешується через Keccak-256, а останні 20 байтів стають адресою. Якщо ви користуєтесь Gate або іншим гаманцем, цей процес відбувається автоматично; якщо розробляєте смартконтракти, використовуйте вбудовану функцію keccak256() у Solidity. Для ознайомлення спробуйте бібліотеки на кшталт Web3.js, щоб перевірити, як геші перетворюють дані довільної довжини у фіксований 256-бітний результат.
Це зазвичай пов’язано з різними підходами до кодування вхідних даних. Keccak-256 очікує байтові дані — якщо вводите текстові рядки, інструменти можуть по-різному обробляти кодування символів (UTF-8 або ASCII). Вирішення — уніфікувати кодування і чітко вказувати формат вхідних даних під час розробки; платформи на кшталт Gate зазвичай надають чіткі інструкції. Також перевіряйте, чи використовуєте Keccak-256 або SHA3-256 — їхні результати відрізняються навіть для однакових вхідних даних.
Keccak-256 широко використовується у смартконтрактах: для перевірки цілісності даних (гешування транзакційних даних для порівняння), створення унікальних ідентифікаторів (гешування комбінацій параметрів) або реалізації контролю доступу (зберігання чутливої інформації у вигляді гешу замість відкритого тексту). Деякі контракти гешують дані користувачів перед зберіганням, щоб не розкривати сирі значення. Ця гнучкість робить Keccak базовим інструментом Web3 — але пам’ятайте, що гешування одностороннє: відновити вихідні дані з гешу неможливо.
Ні. Для користувача Web3 чи початківця-розробника достатньо розуміти, що “Keccak — це одностороння геш-функція: однаковий вхід завжди дає однаковий вихід”. Поглиблене вивчення криптографії — опційне (для аудитів безпеки чи досліджень); більшість розробників просто викликають готові бібліотечні функції, наприклад, keccak256 у Solidity. Почніть із експериментів у реальних задачах, як-от підписи чи створення адрес на Gate або тестових мережах.
Викликаючи Keccak у позаланцюжковому коді (front end чи back end), переконайтесь, що версія бібліотеки відповідає тій, що використовується у ланцюжку — зазвичай Keccak-256. Стандартні бібліотеки на кшталт Web3.js чи ethers.js допомагають уникнути більшості помилок, адже реалізують Keccak коректно за замовчуванням. Будьте уважні до серіалізації даних — якщо геші генеруються поза ланцюгом для перевірки у ланцюгу, методи серіалізації (наприклад, ABI-кодування) повинні точно збігатися. Завжди ретельно тестуйте у середовищах розробки, особливо для підписів чи верифікації контрактів.


