keccak

Алгоритм Keccak — це геш-функція, яка стискає довільні дані у фіксований «відбиток» і складає основу стандарту SHA-3, затвердженого NIST. Його активно застосовують в Ethereum для створення адрес, вибору функцій контракту та журналів подій. Keccak реалізує конструкцію «sponge» (губка), що забезпечує глибоке перемішування даних через процеси поглинання та видачі разом із 24 раундами перестановок. Така архітектура дозволяє отримувати результати різної довжини, поєднуючи безпеку та ефективність.
Анотація
1.
Keccak — це криптографічна хеш-функція, обрана основою для стандарту SHA-3.
2.
Блокчейн Ethereum використовує алгоритм Keccak-256 для створення адрес і хешів транзакцій.
3.
Keccak застосовує конструкцію sponge, що забезпечує високий рівень безпеки та гнучку довжину вихідних даних.
4.
У порівнянні з традиційними алгоритмами SHA-2, Keccak має кращу стійкість до колізій і переваги у продуктивності.
keccak

Що таке алгоритм Keccak?

Алгоритм Keccak — це сімейство криптографічних геш-функцій, які перетворюють довільні вхідні дані на цифровий відбиток фіксованої довжини. Він є основою стандарту SHA-3 і широко застосовується в блокчейн-технологіях.

Геш-функцію можна розглядати як “машину для створення відбитків”: однаковий вхід завжди забезпечує однаковий вихід, але відновити початкові дані лише за результатом майже неможливо. Keccak підтримує змінну довжину виходу, а найпоширенішим є 256-бітний варіант (Keccak-256). Такий фіксований розмір дає змогу ефективно перевіряти, індексувати та контролювати цілісність даних.

Чому Keccak важливий у Web3?

Keccak має ключову роль, адже виконує функції основної “машини для відбитків” у системах на кшталт Ethereum, забезпечуючи створення адрес, селекторів функцій смартконтрактів та індексацію подій.

Наприклад, на біржах на кшталт Gate, коли ви вносите ETH, адреса з префіксом “0x” утворюється шляхом гешування публічного ключа через Keccak-256 і вибору останніх 20 байтів. Для викликів функцій селектор генерується шляхом застосування Keccak-256 до підпису функції та вибору перших 4 байтів. Журнали подій використовують Keccak для створення тем для швидкого пошуку.

Як працює алгоритм Keccak?

Keccak використовує “губчасту конструкцію”. Уявіть губку: спочатку вона “вбирає” вхідні дані для змішування внутрішнього стану, потім “видавлює” потрібний геш-вихід.

Крок 1, Вбирання: вхідне повідомлення розбивається на блоки, які XOR-яться у “записувану область” стану — як вода вбирається губкою, так і дані інтегруються у стан.

Крок 2, Перестановка: функція перестановки (Keccak-f) застосовується кілька разів для перемішування бітів у стані. Це оборотний процес “перемішування”; Keccak-f[1600] зазвичай виконується 24 раунди.

Крок 3, Видавлювання: вихід зчитується з “читальної області” стану. Для довших виходів виконуються додаткові перестановки перед отриманням нових даних — як повторне видавлювання води з губки.

Для стандартних параметрів Keccak-256 внутрішній стан має 1 600 біт, розділених на бітрейт (область читання/запису) 1 088 біт і ємність (буфер безпеки) 512 біт. Збільшення ємності підвищує рівень безпеки.

Як Keccak використовується в Ethereum?

У Ethereum є чотири основні застосування Keccak: створення адрес, селектори функцій, теми подій та індексація структур даних.

  • Створення адрес: Адреса Ethereum створюється шляхом застосування Keccak-256 до публічного ключа та вибору останніх 20 байтів для адреси з префіксом “0x”. Депозитні адреси на Gate формуються саме так. Деякі формати контрольної суми адрес також використовують Keccak для перевірки регістру символів.
  • Селектори функцій: Текстовий підпис функції (наприклад, "transfer(address,uint256)") гешується через Keccak-256, і перші 4 байти використовуються як селектор. Відомий селектор "0xa9059cbb" отримується саме так.
  • Теми подій: Назва події та типи параметрів об’єднуються і гешуються через Keccak-256 для створення теми. Це забезпечує швидкий пошук подій у ланцюжку.
  • Індексація структур даних: У деревоподібних структурах стану або ключах mapping Keccak-256 гешує ключі для мінімізації колізій і прискорення запитів.

У чому різниця між Keccak і SHA3?

Головна різниця між Keccak і SHA3 полягає у параметрах доповнення (“розділення домену”). SHA3-256 використовує суфікс доповнення 0x06, а поширений у Ethereum Keccak-256 — 0x01.

Це означає, що однакові вхідні дані дають різні результати для Keccak-256 і SHA3-256. Під час розробки або аудиту важливо перевіряти, використовується “Keccak-256” чи “SHA3-256” — вони не взаємозамінні. Коли NIST стандартизував SHA-3 у 2015 році, було внесено цю зміну для розділення домену (джерело: NIST, 2015).

Як правильно використовувати Keccak у розробці

Крок перший: перевірте, чи ваші вхідні дані представлені байтами чи текстом. Якщо це рядок, завжди кодуйте його як UTF-8; для шістнадцяткових рядків перетворюйте їх у “сирі” байти і не включайте префікс “0x” у дані.

Крок другий: оберіть правильну функцію. В EVM стандартом є keccak256 (тобто Keccak-256). Деякі бібліотеки називають SHA3-256 як sha3 — уважно перевіряйте документацію та версії бібліотек, щоб уникнути помилок.

Крок третій: перехресно перевіряйте результати. Використовуйте дві незалежні бібліотеки або інструменти для обчислення гешів і переконайтеся, що вони збігаються; для тестування можна скористатися відомими селекторами, наприклад, "transfer(address,uint256)", що дає "0xa9059cbb".

Сприймайте геші як незворотні відбитки у своїх процесах — це не шифрування і не випадкові числа. Щоб запобігти атакам rainbow table, завжди додавайте випадкову сіль перед гешуванням і гешуйте разом і сіль, і дані.

Які типові ризики та підводні камені при використанні Keccak?

Виділяють три основні помилки: різниця доповнення, помилки кодування і неправильне використання у прикладних сценаріях.

  • Різниця доповнення: Використання Keccak-256 замість SHA3-256 призведе до різних результатів, що може спричинити невідповідність адрес або селекторів — це може призвести до втрати коштів чи збоїв викликів контрактів.
  • Помилки кодування: Обробка тексту як hex або навпаки повністю змінює результат гешу. Уніфікуйте стратегії кодування під час розробки і покривайте крайові випадки тестами.
  • Неправильне використання у застосуванні: Гешування — це не шифрування. Зберігання чутливих даних після одного гешу може залишити їх вразливими до словникових атак. Завжди додавайте випадкову сіль і контролюйте політики доступу. Для фінансової безпеки (наприклад, розпізнавання депозитів у ланцюжку на Gate) проводьте ретельне тестування та аудит перед запуском.

Наскільки безпечний і ефективний Keccak?

Безпека Keccak ґрунтується на губчастій конструкції та параметрі ємності. Для Keccak-256 стійкість до колізій — близько 2^128 операцій; стійкість до знаходження прообразу — близько 2^256 операцій.

Станом на січень 2025 року для стандартних параметрів не виявлено практичних атак на колізії чи прообрази; дослідження здебільшого стосуються скорочених варіантів або теоретичних меж. За продуктивністю провідні бібліотеки мають оптимізовані реалізації для CPU/GPU з високою пропускною здатністю; апаратне прискорення (наприклад, ASIC) розвивається для ресурсомістких задач.

Які перспективи розвитку Keccak?

Keccak залишатиметься основою безпеки систем як ядро SHA-3; у екосистемі EVM він фундаментальний для адрес, селекторів і індексації журналів. Із розвитком апаратного прискорення та вдосконаленням бібліотек зростатимуть і продуктивність, і інструментарій. Деякі нові сценарії (наприклад, zero-knowledge proofs) можуть використовувати альтернативні геші на кшталт Poseidon, але це не впливає на стабільність Keccak для загальних завдань відбитків і індексації. Для розробників головне — чітко розрізняти Keccak-256 і SHA3-256 і ретельно контролювати процеси кодування та тестування: тоді Keccak залишатиметься надійним низькорівневим інструментом.

FAQ

Я хочу згенерувати адресу гаманця за допомогою Keccak — з чого почати?

В Ethereum для створення адреси облікового запису використовується Keccak-256 — публічний ключ гешується через Keccak-256, а останні 20 байтів стають адресою. Якщо ви користуєтесь Gate або іншим гаманцем, цей процес відбувається автоматично; якщо розробляєте смартконтракти, використовуйте вбудовану функцію keccak256() у Solidity. Для ознайомлення спробуйте бібліотеки на кшталт Web3.js, щоб перевірити, як геші перетворюють дані довільної довжини у фіксований 256-бітний результат.

Чому різні інструменти дають різні результати гешування Keccak?

Це зазвичай пов’язано з різними підходами до кодування вхідних даних. Keccak-256 очікує байтові дані — якщо вводите текстові рядки, інструменти можуть по-різному обробляти кодування символів (UTF-8 або ASCII). Вирішення — уніфікувати кодування і чітко вказувати формат вхідних даних під час розробки; платформи на кшталт Gate зазвичай надають чіткі інструкції. Також перевіряйте, чи використовуєте Keccak-256 або SHA3-256 — їхні результати відрізняються навіть для однакових вхідних даних.

Окрім створення адрес, для чого ще застосовується Keccak у смартконтрактах?

Keccak-256 широко використовується у смартконтрактах: для перевірки цілісності даних (гешування транзакційних даних для порівняння), створення унікальних ідентифікаторів (гешування комбінацій параметрів) або реалізації контролю доступу (зберігання чутливої інформації у вигляді гешу замість відкритого тексту). Деякі контракти гешують дані користувачів перед зберіганням, щоб не розкривати сирі значення. Ця гнучкість робить Keccak базовим інструментом Web3 — але пам’ятайте, що гешування одностороннє: відновити вихідні дані з гешу неможливо.

Чи потрібні глибокі знання криптографії, щоб працювати з Keccak?

Ні. Для користувача Web3 чи початківця-розробника достатньо розуміти, що “Keccak — це одностороння геш-функція: однаковий вхід завжди дає однаковий вихід”. Поглиблене вивчення криптографії — опційне (для аудитів безпеки чи досліджень); більшість розробників просто викликають готові бібліотечні функції, наприклад, keccak256 у Solidity. Почніть із експериментів у реальних задачах, як-от підписи чи створення адрес на Gate або тестових мережах.

На що звертати увагу при використанні Keccak у позаланцюжкових застосуваннях?

Викликаючи Keccak у позаланцюжковому коді (front end чи back end), переконайтесь, що версія бібліотеки відповідає тій, що використовується у ланцюжку — зазвичай Keccak-256. Стандартні бібліотеки на кшталт Web3.js чи ethers.js допомагають уникнути більшості помилок, адже реалізують Keccak коректно за замовчуванням. Будьте уважні до серіалізації даних — якщо геші генеруються поза ланцюгом для перевірки у ланцюгу, методи серіалізації (наприклад, ABI-кодування) повинні точно збігатися. Завжди ретельно тестуйте у середовищах розробки, особливо для підписів чи верифікації контрактів.

Просте «вподобайка» може мати велике значення

Поділіться

Пов'язані глосарії
епоха
У Web3 поняття "cycle" означає регулярні процеси або часові інтервали в блокчейн-протоколах і застосунках, що повторюються через певні проміжки часу чи блоків. Серед прикладів: події Bitcoin halving, раунди консенсусу в Ethereum, графіки нарахування токенів, періоди оскарження для виведення на Layer 2, розрахунки фінансових ставок і доходності, оновлення oracle, а також періоди голосування в системах управління. Тривалість, умови запуску та гнучкість таких циклів залежать від конкретної системи. Знання про ці цикли дозволяє ефективно керувати ліквідністю, оптимізувати час своїх дій і визначати межі ризику.
Децентралізований
Децентралізація — це принцип побудови системи, який передбачає розподіл прийняття рішень і контролю між багатьма учасниками. Така структура характерна для блокчейн-технологій, цифрових активів та управління спільнотою. Децентралізація базується на консенсусі вузлів мережі. Це забезпечує автономну роботу системи без залежності від єдиного органу керування, підвищуючи рівень безпеки, захист від цензури та відкритість. У сфері криптовалют децентралізацію ілюструє глобальна співпраця вузлів Bitcoin і Ethereum, децентралізовані біржі, некостодіальні гаманці, а також моделі управління, де власники токенів голосують за встановлення протокольних правил.
Незмінний
Незмінність — це ключова характеристика технології блокчейн, яка унеможливлює зміну або видалення інформації після її запису та підтвердження мережею. Ця властивість реалізується через криптографічні хеш-функції, що об’єднані в ланцюги, а також за допомогою механізмів консенсусу. Завдяки незмінності зберігається цілісність і можливість перевірки історії транзакцій, що забезпечує основу для роботи децентралізованих систем без необхідності довіри.
Спрямований ациклічний граф
Орієнтований ациклічний граф (DAG) — це структура мережі, яка впорядковує об’єкти та їхні напрямні зв’язки у систему з прямим рухом без циклів. Цю структуру даних застосовують для відображення залежностей транзакцій, процесів роботи та історії версій. У криптомережах DAG забезпечує паралельну обробку транзакцій і обмін інформацією для консенсусу, що підвищує пропускну здатність і швидкість підтверджень. DAG також встановлює чіткий порядок і причинно-наслідкові зв’язки між подіями, що є основою прозорості та надійності операцій у блокчейні.
Що означає nonce
Nonce — це «number used once» (число, що використовується один раз). Це поняття забезпечує одноразове виконання операції або її послідовність. У блокчейні та криптографії nonce використовують у трьох основних випадках: nonce транзакції гарантує послідовну обробку операцій рахунку без повторень; nonce майнінгу застосовують для пошуку хеша з потрібним рівнем складності; nonce підпису або входу захищає від повторного використання повідомлень під час «replay attack» (атаки повторного відтворення). Ви стикаєтеся з nonce під час проведення транзакцій у мережі, контролю процесу майнінгу або входу на сайти через гаманець.

Пов’язані статті

Як поставити ETH?
Початківець

Як поставити ETH?

Після завершення злиття Ethereum нарешті перейшов від PoW до PoS. Стакери тепер підтримують безпеку мережі, ставлячи ETH і отримуючи винагороди. Перш ніж робити ставки, важливо вибрати відповідні методи та постачальників послуг. Після завершення злиття Ethereum нарешті перейшов від PoW до PoS. Стакери тепер підтримують безпеку мережі, ставлячи ETH і отримуючи винагороди. Перш ніж робити ставки, важливо вибрати відповідні методи та постачальників послуг.
2022-11-21 10:20:50
Що таке Wrapped Ethereum (WETH)?
Початківець

Що таке Wrapped Ethereum (WETH)?

Wrapped Ethereum (WETH) – це версія ERC-20 рідної валюти блокчейну Ethereum, Ether (ETH). Токен WETH прив'язаний до оригінальної монети. На кожен WETH в обігу є ETH в резерві. Метою створення WETH є сумісність у мережі. ETH не відповідає стандарту ERC-20, і більшість DApps, створених у мережі, дотримуються цього стандарту. Тому WETH використовується для полегшення інтеграції ETH у програми DeFi.
2022-11-24 08:49:09
Що таке Об'єднання?
Початківець

Що таке Об'єднання?

Після того як Ethereum пройде остаточну тестову мережу з Mainnet, Ethereum офіційно перейде з PoW на PoS. Тоді який вплив ця безпрецедентна революція принесе криптосвіту?
2024-07-10 09:12:24