Algorytmy haszujące (Hashing Algorithms)
Algorytmy haszujące to funkcje matematyczne, które przekształcają dane wejściowe o dowolnym rozmiarze w dane wyjściowe o ustalonym rozmiarze (hash), wykorzystywane do integralności danych, przechowywania haseł i konsensusu blockchain.
Algorytmy haszujące to fundamentalne prymitywy kryptograficzne, które przyjmują dowolne dane wejściowe i generują dane wyjściowe o stałej długości, zwane skrótem lub hashem. Są zaprojektowane tak, aby były deterministyczne (to samo wejście zawsze daje to samo wyjście), szybkie w obliczaniu i niemożliwe do odwrócenia (funkcja jednokierunkowa).
Kryptograficzne funkcje skrótu muszą spełniać dodatkowe właściwości: odporność na kolizje (trudno znaleźć dwa wejścia o tym samym hash), odporność na przeciwobraz (trudno znaleźć wejście na podstawie hasha) i efekt lawinowy (małe zmiany wejścia powodują duże zmiany wyjścia).
Kluczowe algorytmy to: SHA-256 (Bitcoin, szeroko stosowany), Keccak-256 (Ethereum), SHA-3 (standard NIST), Blake2/Blake3 (szybkie, bezpieczne) i Poseidon (przyjazne dla ZK). Różne algorytmy oferują kompromisy w zakresie bezpieczeństwa, szybkości i przydatności do określonych zastosowań, takich jak dowody z wiedzą zerową.
Zastosowania w blockchain obejmują: kopanie proof-of-work, drzewa Merkle dla integralności danych, generowanie adresów, identyfikatory transakcji i schematy zobowiązań. Zrozumienie haszowania jest niezbędne dla bezpieczeństwa i rozwoju blockchain.
graph LR
Center["Algorytmy haszujące (Hashing Algorithms)"]:::main
Pre_cryptography["cryptography"]:::pre --> Center
click Pre_cryptography "/terms/cryptography"
Pre_mathematics["mathematics"]:::pre --> Center
click Pre_mathematics "/terms/mathematics"
Rel_proof_of_work["proof-of-work"]:::related -.-> Center
click Rel_proof_of_work "/terms/proof-of-work"
Rel_digital_signatures["digital-signatures"]:::related -.-> Center
click Rel_digital_signatures "/terms/digital-signatures"
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;
🧒 Wyjaśnij jak 5-latkowi
Generated ELI5 content
🤓 Expert Deep Dive
Generated expert content
❓ Częste pytania
Dlaczego nie można odwrócić hasha, aby uzyskać oryginalne dane wejściowe?
Funkcje skrótu kompresują dowolną ilość danych wejściowych do danych wyjściowych o stałym rozmiarze, więc wiele możliwych danych wejściowych mapuje się na każdy hash (informacja jest tracona). Są również zaprojektowane ze złożonością matematyczną, która sprawia, że odwrócenie jest obliczeniowo niewykonalne. Nazywa się to odpornością na przeciwobraz.
Jakiego algorytmu haszującego używa Bitcoin?
Bitcoin używa SHA-256 (SHA-256d, a właściwie podwójnego SHA-256) do kopania proof-of-work i haszowania transakcji, oraz RIPEMD-160 w połączeniu z SHA-256 do generowania adresów. Te wybory równoważą bezpieczeństwo, wydajność i odporność na znane ataki.
Co sprawia, że funkcja skrótu jest 'przyjazna dla ZK' (ZK-friendly)?
Funkcje skrótu przyjazne dla ZK, takie jak Poseidon i Pedersen, są zaprojektowane tak, aby były wydajne wewnątrz obwodów dowodów z wiedzą zerową. Tradycyjne hashe, takie jak SHA-256, są kosztowne w dowodach ZK, ponieważ używają operacji bitowych, które są kosztowne do udowodnienia. Hashe ZK-friendly używają operacji arytmetycznych natywnych dla systemów dowodzenia.