Huhu Liebe Bitcoiner,
ich hab einmal eine Frage bezüglich Eindeutigkeit von Hashes.
Hashes sind bekannt dafür, aus einem Eingangsfolge deterministisch eine zufällig aussehenden Ausgangsfolge zu generieren. Dabei kann man mithilfe des Hashalgorithmus (da deterministisch) und einer Eignagnssequenz leicht den Ausgangswert bestimmen, andersherrum aber nicht. Damit liefert dieser Algorithmus ein asynchrone Schwierigkeit (Wie das Primzahlenproblem, die Multiplikation zweier Primzahlen geht einfache aber nur aus der Information dieser Zahl wieder die Priemzahlen zu bestimmen ist extrem aufwändig.)
Die Ausgangssequenz ist festgelegt auf eine feste Anzahl von Bits währen die Eingangssequenz beliebig lang sein darf.
Allein aus der letzten Eigenschaft lässt sich schnell herleiten, dass es mehrere Eingangssequenzen geben muss die die gleichen Ausgangwerte haben.
In der Blockchaintechnologie (Ich rede hier von der Konvention wie sie in Bitcoin verwendet wird) werden an vielen Stellen Hashes verwendet. Auch wenn es sehr unwahrscheinlich ist, an welchen Stellen im Bitcoin-Konzept kann es Probleme bei zwei Hashes geben, die exakt gleich sind?
Generell (ohne die genaue Implementierung zu kennen) würde ich sagen, dass es nur Probleme bei Hashes gibt, die den selben Use-Case haben. Der Merkletree-Hash sollte in meinen Augen also unabhängig vom Mining-Hash sein. Eine Gleichheit würde hier also nie problematisch werden da diese Hashes nie im gleichen Kontext auftreten. (Analysetools könnten Probleme bekommen aber ich würde mich mit den Überlegungen erstmal nur auf Bitcoin selber beschränken.)
Mining Hashes
Gibt es Probleme, wenn zwei Blockheader gehasht den gleichen wert ergeben? Intuitiv würde ich sagen nein, da dieser Hash lediglich beweisen soll, dass er unterhalb der Difficulty liegt. Die Blöcke sind auf ihren jeweiligen Vorgänger gelinkt und nehmen unabhängig ihres Hashes immer ihren festen Platz in der Blockchain ein.
Merkletree Hash
Hier kenne ich mich nicht mehr so gut aus. Ich würde sagen, dass wenn zwei Blöcke den selbem Merkletree Hash teilen, dann kann nicht mehr ganz klar zwischen den Payloads der beiden Blöcke unterschieden werden. Wenn ich vom Header ausgehe und den Merkletree suche, dann finde ich zwei Versionen mit jeweils unterschiedlichem Inhalt. Könnte das dazu führen einen Block aus der Vergangenheit zu überschreiben, nur weil ein neu geminter Block einen Merkletree Hash hat, der irgendwann schoneinmal benutzt wurde? Die Chance dafür steigt ja mit jedem Block an.
weitere Hashes
Innerhalb des Merkletrees gibt es ja auch jede Menge Hashes, aber ich würde sagen hier gibt es weniger Probleme. Alleine wenn man sich vorstellt, dass in zwei Bäumen exakt die gleichen Informationen gespeichert sind, dann gleichen sich deren Hashes natürlicher weise. Und Hashes unterschiedlicher Merkletrees werden nicht miteinander in Bezeihung gesetzt, da sie nichts miteinander zu tun haben.
Gibt es noch weitere Anwendungen der Hashes in Bitcoin? Speziell mit Wallets hab ich mich noch nicht so auseinander gesetzt.