RS Adressformat

From Nxt Wiki
Jump to: navigation, search
This page is a translated version of the page RS Address Format and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎русский • ‎українська

Seit der Version 1.0.1 der Nxt-Software, wird das Reed-Solomon Adressformat für Nxt-Konten unterstützt. Es ist das Standardformat für den offiziellen Klient.

Die Form der Adresse verbessert die Vertrauenswürdigkeit durch Einführung der Redudanz, welche Fehler aufdecken und korrigieren kann wenn die Nxt-Kontonummer eingegeben und benutzt werden.

Die Adressen sind immer in folgender Form:

NXT-XXXX-XXXX-XXXX-XXXXX

... wobei X eine eindeutige Nummer oder ein alphabetisches Zeichen ist (die Buchstaben O und I werden nicht verwendet; wie auch die Nummern 1 und 0). Alle Adressen beginnen immer mit "NXT-". Bindestriche teilen die Adresse in Gruppen von 4, 4, 4, und abschließend 5 Zeichen. Die Adressen sind unabhängig von Groß- und Kleinschreibung.

1 Hintergrund

Das Standardformat für Nxt-Kontoummern ist eine numerische Kennung von 64-Bit, welche vom privaten Schlüssel des Kontos abgeleitet ist. Die ersten Benutzer von Nxt beschwerten sich über das fehleranfällige Format, da durch die vielfältige Eingabe der Nummer bereits das verdrehen eines Zeichens eine Transaktion unbeabsichtigt an ein falsches Konto senden konnte.

Reed-Solomon Fehlerkorrektur behandelt dieses Thema, indem Redundanz an die Adresse angehängt wird. Andere Optionen wurde überprüft (MD5 Hashes, Prüfsummen Ziffern, etc.), aber man entschied sich für das Reed-Solomon Format u. a. aus folgenden Gründen:

  • die grundlegende Fehlerkorrektur des Systems kann Benutzer bei dem Eintippen der Adressen unterstützen.
  • einige Programmiersprachen haben keine native MD5-Hashfunktion, und die Reed-Solomon Implementierung ist einfacher umzusetzen als MD5.

1.1 Vorteile der Reed-Solomon Adressen

  • Die Wahrscheinlichkeit einer zufälligen Adresskollision, durch die in der Nxt-Implementierung verwendeten 4 "Prüf-Bits", liegt bei 1:1000000 (20-Bit Redundanz).
  • Es werden bis zu zwei Schreibfehler in der Adresse erlaubt, die korrigiert werden
  • Es werden bis zu vier Schreibfehler garantiert, die entdeckt werden können.
  • Die Adresslänge beträgt immer 17 Zeichen und beginnt immer mit "NXT-". Das macht die Adresse sehr einfach als Nxt-Adresse erkennbar.
  • C++, PHP und JavaScript Implementierungen finden sich unter: https://drive.google.com/file/d/0B7kbeA6whDvNWVczbEtvQ1YtZGc

2 Kodierung einer Nxt Reed-Solomon Adresse

  • Großschreibung ist für das Reed-Solomon Format nicht verpflichtend, aber zur Vereinheitlichung werden alle Adressen in Großbuchstaben dargestellt.
  • Adressen sind durch Bindestriche in vier Gruppen unterteilt. Die ersten drei Gruppen bestehen jeweils aus vier Zeichen und die vierte und letzte Gruppe besteht aus 5 Zeichen.
  • Die alten numerischen Adressen sind weiterhin gültig und werden vom System erkannt. Sie unterstützen die Rückwärtskompatibilität.

Reed-Solomon Beispiel-Adressen:

NXT-3DH5-DSAE-4WQ7-3LPSE
NXT-K4G2-FF32-WLL3-QBGEL

3 Technische Details

Die erste und wichtigste Regel ist, dass kein Fehlerkorrektur-System unfehlbar ist: "Du darfst dich nicht auf die Fehlerkorrektur verlassen. Punkt."

Das Problem widerspricht dabei der Intuition: entweder kann man eine einfache Ja/Nein Prüfung der Adressgültigkeit vornehmen, die eine doppelte Adresse von 1 zu 1 Million ergibt, oder man kann die Eingabe versuchen und die Fehler korrigieren. Beides ist nicht möglich.

Das Problem ist dabei, dass der Reed-Solomon Algorithmus nur bis zu zwei Fehler erlaubt. Wenn mehr als zwei Fehler bei der Adresseingabe gemacht werden, werden mit einer Wahrscheinlichkeit von etwa 10% falsche Positive erzeugt. Transaktionen werden dann an falsche Adressen verschickt.

Gehe davon aus, dass der Algorithmus eher "Fehler errät", anstatt den Benutzer zu helfen Fehler aufzuzeigen.

Reed-Solomon (RS) Adressen für Nxt werden wie folgt kodiert:

  1. Nehme die ursprüngliche 64-Bit Kontonummer, addiere ein Null-Bit, um 65 Bits zu erhalten und teile diese in dreizehn mal 5-Bit Symbole auf (65 / 5 = 13).
  2. Ordne die jeweiligen Symbole von 5-Bit vom kleinsten zum größten Bit in der Little-Endian-Sortierung, z.B. die Bits 0-4, 5-9, 10-14, usw. bis zu 60-64.
  3. Füge vier Symbole der Parität (20 Bits) an, erzeugt von der Reed-Solomon Kodierung aus den dreizehn Symbolen von Schritt 1 (die unangetastet bleiben). Dies erzeugt ein Codewort von 13 + 4 = 17 Symbolen.
  4. Verdrehe die Codewort Symbole in einer vordefinierten Reihenfolge und verschlüssele sie eins-zu-eins mit einem Alphabet von 32 Zeichen, unterteilt in vier Gruppe durch Bindestriche.