Hash-boom
Een hash-boom ( (en) Merkle tree ) is een boom die kan worden gebruikt om gegevens (data) veilig tussen twee computers te sturen. Ze worden op het moment vooral gebruikt om na te gaan of alle gegevens zijn aangekomen en of de gegevens onbeschadigd zijn. De hash-boom is uitgevonden door Ralph Merkle in 1979 en daarom worden hash-bomen ook wel Merkle-bomen genoemd.
Opbouw
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Hashtree.jpg/500px-Hashtree.jpg)
Een hash-boom is vaak een binaire boom. Dit houdt in dat elke parent node twee child nodes heeft. Het is wel mogelijk om een hash tree te maken met meerdere child nodes. Om een hash tree te maken beginnen we onderaan, bij de bladeren van de boom. We hakken het bericht in stukken en elk stuk zetten we om in een hashwaarde met behulp van een hashfunctie . Elk blaadje krijgt dus de hashwaarde . De parent nodes kunnen we bepalen door de hashwaarde van de twee childs en om te zetten in een nieuwe hashwaarde . Zo wordt de hele boom opgebouwd tot de top . Deze top node is de belangrijkste node van de boom en wordt opgestuurd door een betrouwbare bron. De ontvanger kan beginnen met downloaden van de datablocks nadat hij deze top binnen heeft gekregen.
Zodra de hele boom is gedownload kan er onderzocht worden of de gegevens kloppen. De ingekomen datablokken worden omgezet in hashwaarden en de hele boom wordt opgezet. Als een datablok niet klopt krijgt deze een andere hashwaarden dan de juiste datablock. Zo krijgen de parents van deze child ook andere hashwaarden en zal dus de top van de boom niet overeenkomen met de top die opgestuurd is. De boom is dus onjuist en moet opnieuw gedownload worden.
Toepassingen
Hash-bomen zijn vooral toe te passen in peer-to-peer-netwerken. Een betrouwbare bron berekent de hele boom en stuurt de top op. De rest van de datablokken kan van elke bron vandaan komen. Met behulp van de hashfunctie kan er dan bepaald worden of alle data zijn aangekomen en of er geen fouten in zitten of dat er iemand veranderingen heeft aangebracht.
De originele doel van hash-trees was om het mogelijk te maken om efficiënt om te gaan met Lamport one-time signatures. Lamport Signatures zijn zeer moeilijk te kraken, maar elke Lamport Key kan maar voor één bericht gebruikt worden. In combinatie met hash trees kunnen ze ineens wel voor meerdere berichten gebruikt worden waardoor Lamport Signatures veel efficiënter worden, omdat alleen de top een handtekening nodig heeft.
Voorbeeld
Persoon A wil graag het bericht "Dit is een hash boom" downloaden binnen een netwerk. Persoon B krijgt deze vraag binnen en begint de boom op te stellen. Hij begint met het in stukken hakken van het bericht. Dit levert hem 5 stukjes op. Hij gebruikt een 8-bit hashfunctie. Dit is enkel ter illustratie, want in het echt worden er veel langere hashfuncties gebruikt. Hij zet elk stukje van het bericht om in hashwaarden en heeft dus nu de bladeren van de boom gemaakt.
De volgende stap is de hashwaarden van elke parent node te berekenen door de twee hashwaarden van de childnodes samen te nemen en om te zetten in een nieuwe hashwaarde. Hiermee gaat hij door tot hij de top node heeft bereikt. Deze node stuurt hij op naar persoon A.
Persoon A krijgt dus de top node binnen van persoon B. Hij kan nu beginnen met downloaden van het bericht. Alle stukjes komen van verschillende personen vandaan. Zodra alles binnen is begint hij de boom op te bouwen zoals persoon B dat had gedaan. Dus eerste alle stukjes van het bericht omzetten in hashwaarden en daarmee de parentnodes te bepalen. De top node die hij zo krijgt vergelijkt hij met de hashwaarde van de top node die hij van persoon B binnen heeft gekregen. Als alles goed is binnen gekomen moeten deze hashwaarden dus gelijk aan elkaar zijn. Is dit niet het geval dan is er iets mis met de binnengekomen stukjes.
Referenties
- Merkle tree patent 4,309,569
- Tree Hash EXchange format (THEX)
- Dit artikel of een eerdere versie ervan is een (gedeeltelijke) vertaling van het artikel Hash tree op de Engelstalige Wikipedia, dat onder de licentie Creative Commons Naamsvermelding/Gelijk delen valt. Zie de bewerkingsgeschiedenis aldaar.
- Efficient Use of Merkle Trees – RSA labs