Wie Adressen in IOTA verwendet werden




Für Neueinsteiger ist besonders die Art, wie Adressen in IOTA verwendet werden, kompliziert. Im Folgenden wird auf jede Spezialität eingegangen.

Nicht wiederverwendbare Adressen

Im Gegensatz zu traditionellen Blockchain Systemen wie Bitcoin, bei denen eine Adresse wiederverwendet werden kann, sollte bei IOTA eine Adresse für ausgehende transfers nur einmal verwendet werden. Dies Bedeutet dass es kein Limit für die Anzahl an Empfänge pro Adresse gibt. Jedoch sollte immer eine neue Adresse verwendet werden, sobald IOTA von genau dieser Adresse gesendet wurden. Der Grund hierfür ist, dass bei einem ausgehendem Transfer ein Teil des private Keys genau dieser Adresse zum Vorschein komm. Dies erleichtert potenziellen Angreifern den kompletten private Key dieser Adresse durch eine "bruteforce" Attacke herauszufinden und die IOTA auf der Adresse zu stehlen. Je mehr ausgehende transaktionen von derselben Adresse gemacht werden, desto einfacher ist die bruteforce Attacke. Es sollte beachtet werden, dass der Zugriff auf den private Key einer Adresse nicht den Seed an sich oder den private Key anderer Adressen innerhalb des Seeds/Accounts gefährdet.

Zusammengefasst: Man kann pro Adresse beliebig viele Transfers empfangen, bis von dieser Adresse ein ausgehender Transfer getätigt wird. Danach sollte die Adresse nicht erneut verwendet werden!

Dies wirft die folgende Frage auf: "Was passiert, wenn ich eine Transaktion tätige; muss ich mich um die Sicherheit der restlichen IOTA sorgen?" Die Antwort hierauf ist nein, das Wallet kümmert sich um alles automatisch und die Token sind absolut sicher. Hierzu später mehr.

Addressen Index

Eine neue Adresse wird aus einer Kombination von Seed und Adressen Index berechnet, wobei der Adressen Index jegliche positive Integer (0 miteinbezogen) sein kann. Das Wallet startet normalerweise beim Index 0, aber es überspringt jeden Adressen Index, zu dem die korrelierende Adresse bereits an den Tangle geknüpft wurde.

Was “attach to tangle” bedeutet

Der Prozess eine Transaktion zu tätigen kann in zwei Haupt-Schritte unterteilt werden:
1. Das lokale signieren/unterschreiben der Transaktion. Hierfür wird der Seed benötigt.
2. Die Vorbereiteten Informationen für die Transaktion werden genommen, zwei Transaktionen im Tangle ausgesucht und die PoW begonnen. Dieser Schritt wird auch “attaching” genannt.
Die folgende Analogie macht es verständlicher
Der erste Schritt ist, als würde man einen Brief schreiben. Man nimmt ein Blatt Papier, schreibt einige Informationen darauf und unterschreibt am Ende mit seiner Unterschrift, um zu bestätigen, dass dieser Brief in der Tat von einem selbst kommt. Anschließend wird das papier in einen Umschlag mit der Adresse des Empfängers gelegt. Schritt zwei: Um den "Brief" (Transaktion) mit dem Tangle zu verknüpfen, nimmt man zwei zufällige der neusten "Briefe" im Tangle und knüpft eine Verbindung zwischen unserem "Brief" und jedem der zwei ausgesuchten "Briefen" geknüpft. Die Funktion “Attach address” im Wallet ist eigentlich nichts anderes als eine 0 IOTA Transaktion zu der zu verknüpfenden Adresse zu machen.

Wieso werden Adressen mit dem Tangle verknüpft?

Eine im Wallet generierte Adresse sollte immer vor Verwendung mit dem Tangle verknüpft werden. Der Grund hierfür ist, dass das Wallet keine Account Informationen lokal speichert, sondern alle notwendigen Informationen aus dem Tangle abruft. Daher kann eine Adresse, die nicht mit dem Tangle verknüpft ist, zwar problemlos und sicher IOTA empfangen, diese werden aber nicht im Wallet zu sehen sein, da das Wallet die Adresse eventuell nicht mit deinem Account in Verbindung bringt. Hier wird es etwas komplizierter. Möchtest du nicht tiefer einsteigen, kannst du den folgenden Abschnitt überspringen.

Das interessante ist, dass wenn man an eine Adresse, die noch nicht mit dem Tangle verknüpft ist, eine Transaktion sendet, diese automatisch mit dem Tangle verknüpft wird. Aber warum sollte man die Adresse mit dem Tangle verknüpfen, wenn diese doch durch eine Transaktion automatisch verknüpft wird?Wie bereits gelernt werden Adressen mit einem Adressen Index generiert, welcher bei 0 startet. Sucht nun das Wallet nach zu ihm zugehörigen Transaktionen im Tangle, startet es mit der Suche nach der Adresse mit dem Index 0. Findet es diese Adresse wird es mit der Suche nach der Adresse mit Index 1, 2, 3, etc. fortfahren bis es keine passende Adresse mit entsprechender Index Nummer mehr findet. Nehmen wir nun an, dass die Adressen 0-3 verknüpft, Adresse 4 nicht verknüpft und Adresse 5 (mit Token auf Adresse 5) wieder mit dem Tangle verknüpft ist. In diesem Fall würde das Wallet mit dem Suchen nach Adressen nach Adresse 4 stoppen, da es diese Adresse nicht finden kann. Das Wallet würde Adresse 5 und mit ihr die darauf enthaltenen Token nicht darstellen. Um solche Lücken zu verhindern muss man eine Adresse mit dem Tangle verknüpfen bevor das Wallet erlaubt eine weitere Adresse zu generieren.

Das Adressen-Management des Wallets

Das Wallet in der obigen Animation startet mit 174 IOTA und sendet dann eine Transaktion über 24 IOTA an Bob. Die Transaktion zieht alle 174 IOTA von der ersten Adresse des Seeds / "Accounts" ab und sendet, nachdem diese aufgeteilt wurden, 150 IOTA an die nächste Adresse im Account und 24 IOTA an Bob. Auf diese Art und Weise wird verhindert, dass die erste Adresse, die nun als benutzt gilt, nicht erneut verwendet wird und mit 0 Token "zurückbleibt". Die neue Adresse hält nun den rest der Token. Dasselbe passiert bei der nächsten Transaktion, bei der 60 IOTA an Alice gesendet werden.

Was passiert nach einem Snapshot?

Jetzt, da wir wissen wie Adressen vom Wallet verwendet werden, können wir auch verstehen warum die Bilanz nach einem Snapshot im Wallet mit 0 angezeigt wird. Mit einem Snapshot werden alle Transaktionen im tangle gelöscht und lediglich die information welche Adresse wie viele Token besitzt bleibt zurück. Ein Beispeil: Sollte nach der Transaktion zu Alice ein Snapshot gemacht werden, so würde in diesem die Information, dass Adresse "IJMQH..." 90 IOTA besitzt. Allerdings wird diese Transaktionen beim nächsten mal Scannen nach Transaktionen des Wallets aufgrund des Snapshots verschwunden sein. Das Wallet weiß nicht mehr, dass die Adresse "IJMQH..." zu ihm gehört. Dies ist der Grund dafür, dass im Beispiel 3 Adressen re-generiert werden müssen (Adressen index 0, 1, 2), damit (address index 0, 1 and 2), sodass das Wallet diese wieder auf Token hin untersucht. Je mehr Transaktionen vor einem Snapshot gemacht wurden, desto weiter sind die Token von der Adresse mit dem Index 0 entfernt und desto mehr Adressen müssen nach einem Snapshot (re-)generiert werden.