Advanced Intelligent Corruption Handling
Advanced Intelligent Corruption Handling (oder: AICH) ist eine Erweiterung von Intelligent_Corruption_Handling, das dazu dient, Übertragungsfehler mit minimalem Aufwand zu beheben.Obgleich das Standard-ICH recht wirkungsvoll ist, hat es die Beschränkung, dass immer nur vollständige 9,28 MB-Blöcke überprüft werden können, aber keine kleineren. Wenn es in solch einem Block mehr als eine fehlerhafte Position gibt, oder wenn böswillige Clients fehlerhafte Daten immer wieder oder sogar ein gesamtes Teilstück fälschen, kann ICH nicht mehr wirkungsvoll eingesetzt werden, da die fehlerhaften Blöcke komplett, also wieder 9,28 MB, übertragen werden müssen. Hier setzt AICH an, um eine komplette Datenintegrität mit minimalen Redownloading-Aufwand herzustellen. Dazu wird das zu übertragende Objekt/Datei in 9,28 MB große Teilstücke geteilt. Jedes Teilstück wird in 180 kB Blöcke zerlegt, das ergibt 53 Blöcke pro Teilstück. Für jeden Block wird mit Hilfe des SHA1-Hash-Algorithmus ein Hash-Wert errechnet. Diese Werte werden Block Hash genannt und bilden den untersten Level eines kompletten AICH-Hash-Baumes. Im Bild rechts ist ein vollständiger Hash-Baum für eine vier Teilstücke große Datei zu sehen. Jedes Teilstück enthält 53 Blöcke, macht zusammen 212 Node-Hashes auf 7 Tree-Leveln bis zum Root Hash. Der gesamte Baum wird AICH-Hashset genannt.
Die blauen und gelben Punkte zeigen die mathematischen Abhängigkeiten der kleinsten Block-Hashes bis zum Root-Hash. Dies bedeutet, mit einem Root-Hash kann man überprüfen, ob eine Datei vollständig und fehlerfrei geladen wurde.
Fehlerbehebung
Immer wenn ein Fehler entdeckt wird, wird von einem beliebigen, anderen Client ein Recovery-Paket mit einem kompletten AICH-Hashset angefordert. Das angeforderte Hashset enthält für alle 53 Blöcke deren Block-Hashes und zusätzlich Verify-Hashes für den gesamten Hashbaum. Die Anzahl der Verify-Hashes hängt von der Anzahl der Teilstücke der Datei ab (2x >= 'Anzahl Teilstücke', wobei x die Anzahl der Verify-Hashes angibt).
Nach dem Empfang werden die Verify-Hashes aus dem Recovery-Packet gegen den vertrauenswürdigen Root-Hash geprüft. Wenn sie zusammenpassen, werden alle 53 Blöcke des fehlerhaften Teils gegen Block-Hashes vom Recovery-Packet geprüft. Passen Block-Hashes nicht zusammen, werden die entsprechenden Blöcke noch mal zum Download angefordert.
Vertrauenswürdiger Root-Hash
Am Besten erhält man vertrauenswürdige Root-Hashes, indem man Dateien über deren Root-Hash zum Download anfordert. In der Annahme, dass die Quelle dieser Verbindung vertrauenswürdig ist, wird dem Root-Hash sofort vertraut und dieser für diese Datei gespeichert. Wenn kein Root-Hash vorhanden war, so muss dem Root-Hash vertraut werden, der vom sendenden Client zur Verfügung gestellt wird. Dieser Quelle wird nur dann vertraut, wenn mindestens 10 unterschiedliche Quellen den gleichen Wert senden und wenn mindestens 92% aller Quellen diesem Wert zustimmen. Wenn dieser als nicht vertrauenswürdig eingestuft wird, ist er nur für diese Sitzung gültig und wird weder gespeichert noch können darüber Hashlinks erzeugt werden.
Weblinks
• eMule - FAQ - Corruption Handling

