hash tree
Megjelenés
Főnév
hash tree (tsz. hash trees)
- (informatika) A hash tree, más néven Merkle tree, egy speciális adatstruktúra, amely egy fa-szerkezetben tárolt adatok hash értékein alapszik. Célja, hogy gyorsan és hatékonyan lehessen ellenőrizni adatok integritását és hitelességét, különösen elosztott rendszerekben.
🌳 Alapgondolat
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.
🧱 Példastruktúra
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.
🛡️ Fő cél: adatintegritás ellenőrzése
- A hash fa lehetővé teszi, hogy csak néhány hash értékkel igazoljuk egy adatblokk hitelességét.
- Ezért használják blokkláncokban, verziókezelésben, tanúsítványláncokban.
📈 Használati példák
| 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ök
| 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 |
🧪 Hash Tree működése vizuálisan
H1234
/ \
H12 H34
/ \ / \
H1 H2 H3 H4
- Ha pl.
D3változik, akkorH3,H34, ésH1234is változik. - A gyökér változása alapján egyből észrevehető a módosítás.
🛠️ Hash Tree vs Hash List
| 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 |
📦 Alap C++ vázlat
#include <string>
#include <vector>
#include <openssl/sha.h>
std::string hash(const std::string& data) {
unsigned char hash[SHA256_DIGEST_LENGTH];
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[i];
std::string right = (i + 1 < level.size()) ? level[i + 1] : left;
next.push_back(hash(left + right));
}
level = next;
}
return level[0];
}
✅ Összefoglalás
| 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) |