hash tree (tsz. hash trees)
A hash tree-ben:
✅ A levélcsomópontok az adatok hash értékei, ✅ A belső csomópontok pedig gyerekeik hash értékeinek kombinációjából származó hash-ek, ✅ A gyökér (root hash) egyetlen rövid ujjlenyomat, amely az egész adatstruktúrát képviseli.
Tegyük fel, 4 adatblokk van: D1
, D2
, D3
, D4
.
Levél hash-ek:
H1 = hash(D1) H2 = hash(D2) H3 = hash(D3) H4 = hash(D4)
Belső szintek:
H12 = hash(H1 || H2) H34 = hash(H3 || H4)
Gyökér:
H1234 = hash(H12 || H34)
👉 H1234
az egész fa “összegzése” — ha bármelyik adat vagy hash megváltozik, a gyökérérték is megváltozik.
Terület | Használat |
---|---|
🌐 BitTorrent | Ellenőrizni, hogy a fájldarabok jók-e |
🔐 Blockchain (pl. Bitcoin, Ethereum) | Blokkok összefűzése és ellenőrzése |
📦 Git | Objektumok integritása |
🗂 Fájlrendszerek | Adatblokk-hibák és ellenőrzések |
☁️ Cloud storage | Részleges fájltöltés és validálás |
Előny | Miért hasznos? |
---|---|
🔐 Adatintegritás | Gyorsan és hatékonyan ellenőrizhető, hogy nem történt változás |
📉 Osztható bizonyítás | Egy blokkhoz tartozó hash-út elég a hitelesítéshez |
⚡ Nagy adatmennyiség kezelése | Csak log(n) hash érték kell az ellenőrzéshez |
H1234 / \ H12 H34 / \ / \ H1 H2 H3 H4
D3
változik, akkor H3
, H34
, és H1234
is változik.
Típus | Leírás |
---|---|
Hash list | Hash-ek lineárisan láncolva (pl. Git commit lánc) |
Hash tree | Fa szerkezetű hash-ek — hatékony részellenőrzéshez |
#include <string>
#include <vector>
#include <openssl/sha.h>
std::string hash(const std::string& data) {
unsigned char hash;
SHA256((const unsigned char*)data.c_str(), data.size(), hash);
return std::string((char*)hash, SHA256_DIGEST_LENGTH);
}
std::string merkleRoot(const std::vector<std::string>& leaves) {
std::vector<std::string> level = leaves;
while (level.size() > 1) {
std::vector<std::string> next;
for (size_t i = 0; i < level.size(); i += 2) {
std::string left = level;
std::string right = (i + 1 < level.size()) ? level : left;
next.push_back(hash(left + right));
}
level = next;
}
return level;
}
Tulajdonság | Hash Tree (Merkle Tree) |
---|---|
Struktúra | Bináris fa, ahol minden csúcs hash |
Alkalmazás | Integritásellenőrzés, blockchain |
Előnye | Részadat-ellenőrzés hatékony |
Hash műveletek száma | O(n), ellenőrzéshez O(log n) |