Криптографічне хешування
Cryptographic hashing генерує digest фіксованої довжини з вхідних даних будь-якого розміру, з властивостями детермінізму, незворотності та стійкості до колізій, що забезпечує цілісність даних та автентифікацію.
Криптографічна хеш-функція приймає вхідні дані довільної довжини та повертає digest фіксованої довжини. Вона характеризується детермінізмом, фіксованим розміром вихідних даних та односторонністю. На додаток до детермінізму та фіксованої довжини, криптографічні хеш-функції спрямовані на забезпечення стійкості до знаходження першообразу (preimage resistance) (враховуючи digest, знайти першообраз неможливо), стійкості до знаходження другого першообразу (second-preimage resistance) (знайти інший вхід з таким самим digest неможливо) та стійкості до колізій (collision resistance) (важко знайти два входи, які призводять до однакового digest). Вони розроблені для ефективного обчислення, а вихідний digest повинен демонструвати avalanche effect: невелика зміна у вхідних даних призводить до значно відмінного digest. Вони використовуються для перевірки цілісності даних, цифрових підписів та хешування паролів, коли це доречно. Примітка: nonce не є властивістю самої хеш-функції; він може використовуватися в протоколах для додавання солі (salting) або варіації контекстів хешування, але не є частиною основних властивостей хеш-функції.
graph LR
Center["Криптографічне хешування"]:::main
Pre_cryptography["cryptography"]:::pre --> Center
click Pre_cryptography "/terms/cryptography"
Center --> Child_merkle_tree["merkle-tree"]:::child
click Child_merkle_tree "/terms/merkle-tree"
Rel_digital_signatures["digital-signatures"]:::related -.-> Center
click Rel_digital_signatures "/terms/digital-signatures"
Rel_proof_of_work["proof-of-work"]:::related -.-> Center
click Rel_proof_of_work "/terms/proof-of-work"
Rel_cryptographic_primitives["cryptographic-primitives"]:::related -.-> Center
click Rel_cryptographic_primitives "/terms/cryptographic-primitives"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧒 Простими словами
🧼 Уявіть блендер: ви кидаєте туди яблуко, і отримуєте склянку специфічного пюре. З пюре неможливо знову зібрати яблуко. Але якщо ви додасте до наступного яблука одну зернинку, колір пюре зміниться на яскраво-фіолетовий. Так ви дізнаєтеся, що 'вхід' змінився. Це і є хеш-функція.
🤓 Expert Deep Dive
Надійний хеш має властивість стійкості до колізій — неможливо знайти два різних файли, які дають однаковий хеш. У блокчейні хешування використовують для створення Дерев Меркла, що дозволяє швидко перевіряти цілісність мільйонів транзакцій, перевіряючи лише один 'Кореневий хеш'.