Glossar / Lightning und Layer 2
Node-Alias
- Was ist ein Node-Alias?
- Ein Node-Alias ist der 32 Byte lange Name, den ein Lightning-Node in seine eigene signierte node_announcement schreibt, damit Explorer und Wallets etwas Lesbares anzeigen können statt eines rohen öffentlichen Schlüssels.
Jeder Lightning-Node wählt seinen eigenen Namen und signiert ihn, und darin besteht der ganze Mechanismus und zugleich das ganze Problem. BOLT 7 gibt dem Feld genau 32 Byte, füllt den Rest mit Nullen auf und weist die empfangende Software an, anzudeuten, dass der Name selbst signiert ist. Nichts hindert zwei Nodes daran, sich gleich zu nennen, also behandeln Sie einen Alias niemals als Beweis dafür, wen Sie bezahlen.
So funktioniert es
Ein Node-Alias reist in der node_announcement mit, der Gossip-Nachricht vom Typ 257, signiert mit demselben Schlüssel, den sie benennt.
Die Nachricht trägt eine Signatur, ein Feature-Bitfeld, einen Zeitstempel, die node_id, eine 3 Byte große rgb_color, den 32 Byte großen Alias und die Netzwerkadressen, auf denen der Node Verbindungen annimmt. Alias und Farbe zu setzen ist optional; den Alias als gültiges UTF-8 zu setzen nicht, und alle ungenutzten Bytes am Ende müssen null sein.
Zweiunddreißig Byte sind ein Byte-Budget, keine Zeichenzahl. Das Feld enthält gültiges UTF-8, also passen in einen Namen in einer Schrift, die mehrere Byte pro Zeichen verbraucht, weniger Buchstaben als in einen rein lateinischen.
Umbenennen ist billig. Ein Node muss jeden Zeitstempel höher setzen als den letzten, also ist ein neuer Name einfach eine neue node_announcement, die Peers anstelle des alten Eintrags annehmen und zum Weiterverbreiten in die Warteschlange stellen. Es gibt kein Register, keine Gebühr und keine Eindeutigkeitsprüfung im Protokoll.
Das Feld ist keine kostenlose Werbefläche. BOLT 7 ignoriert Ankündigungen von Nodes, die nicht bereits mit einem bekannten Kanal verbunden sind, und kein Kanal darf angekündigt werden, bis sein Finanzierungs-Output sechs Bestätigungen hat, also kostet ein lesbarer Name eine On-Chain-Transaktion und gebundenes Kapital, bevor ihn überhaupt jemand weiterleitet.
BOLT 7 enthält einen Sicherheitsabschnitt, der speziell über Aliase geschrieben wurde. Weil sie vom Nutzer festgelegt werden, sind sie ein Injektionsvektor beim Anzeigen und beim Speichern, daher wird Implementierern gesagt, sie zu bereinigen, bevor sie in HTML oder JavaScript gelangen, und beim Persistieren vorbereitete Anweisungen zu verwenden. Software, die einen anzeigt, wird außerdem angewiesen, seinen selbst signierten Ursprung anzudeuten.
Wo Sie ihn sehen
Node-Aliase tauchen überall dort auf, wo der Lightning-Graph für einen Menschen gezeichnet wird.
BOLT 7 erlaubt der empfangenden Software, den Alias und die rgb_color zu verwenden, um Nodes in ihren Oberflächen zu referenzieren, weshalb ein Graph-Explorer oder eine Peer-Auswahl einen Namen statt eines Schlüssels zeigt. Ein Routing-Betreiber verlässt sich darauf, denn die node_id ist nichts, was jemand zweimal tippt.
Ob Sie einen haben, hängt davon ab, was Ihre Wallet wirklich ist. Phoenix betreibt einen echten, in sich geschlossenen Lightning-Node auf dem Smartphone, hat also einen Identitätsschlüssel und könnte einen Namen ankündigen. Wallet of Satoshi hält im verwahrenden Modus die Schlüssel für Sie, also gibt es keinen Node von Ihnen im Graphen und nichts zu benennen.
Nichts, was Sie zahlen oder erhalten, hängt vom Namen ab: Rechnungen, Routen und Kanaleröffnungen richten sich alle nach der node_id.
Node-Alias vs. Lightning-Adresse
Ein Node-Alias benennt eine Maschine, während eine Lightning-Adresse einen Ort benennt, an dem man eine Rechnung anfordert. Einen Alias können Sie nicht bezahlen: Er trägt keine Domain, keinen Endpunkt und keinen Betrag, und nichts im Protokoll löst ihn in etwas Zahlbares auf. Eine Lightning-Adresse erledigt die entgegengesetzte Aufgabe, löst sich über HTTPS auf und übergibt Ihrer Wallet eine echte Rechnung.
Node-Alias vs. kurze Kanal-ID
Eine kurze Kanal-ID ist der acht Byte große Locator für den Finanzierungs-Output eines Kanals, und BOLT 7 erlaubt einem Peer außerdem, eine Alias-Kanal-ID auszugeben, die für sie einsteht. Dieser zweite Alias teilt mit einem Node-Alias nichts außer dem Wort. Ein Node darf eine channel_update für einen Kanal senden, der nicht angekündigt wurde, mit short_channel_id auf einen Alias gesetzt, den sein Peer geliefert hat, statt auf den echten, und er muss dont_forward setzen und diese Aktualisierung aus Datenschutzgründen niemals weitergeben. Der eine Alias ist ein öffentlicher Name, den ein Node sichtbar haben will, der andere ein privater Ersatz für eine Zahl, die ein Node verbergen will.