Dauerhafte Nonces: Zwei-Geräte-Signatur auf Solana

·7 Min. Lesezeit·Von SSP Editorial Team
SSP-Markencover für einen Multisig-erklärt-Artikel über dauerhafte Nonces auf Solana und Zwei-Geräte-Signatur

Dauerhafte Nonces: Zwei-Geräte-Signatur auf Solana

SSP ist eine 2-von-2-Wallet. Jede Transaktion braucht zwei Signaturen: eine von der Wallet, der Browser-Erweiterung auf Ihrem Computer, und eine vom SSP Key auf Ihrem Telefon. Genau darin liegt der Sinn dieses Designs — ein Dieb, der ein Gerät stiehlt, kann Ihre Mittel trotzdem nicht bewegen. Doch es bringt ein sehr menschliches Problem mit sich. Der Computer baut und signiert eine Transaktion in einem Sekundenbruchteil. Das Telefon signiert vielleicht erst zwei oder drei Minuten später mit, weil ein Mensch das Telefon in die Hand nehmen, die Anfrage ansehen und auf Genehmigen tippen muss.

Auf Solana ist diese Lücke ein Problem. Dieser Artikel erklärt, warum, und wie SSP es löst, ohne etwas Fragiles zu speichern.

Der Blockhash, der abläuft

Jede normale Solana-Transaktion trägt eine Information namens aktueller Blockhash. Es ist der Fingerabdruck eines aktuellen Blocks der Kette, und er erfüllt zwei Aufgaben zugleich. Er beweist, dass die Transaktion kürzlich erstellt wurde, und verhindert, dass dieselbe signierte Transaktion für immer wiederholt wird.

Der Haken steckt im Wort aktuell. Ein Blockhash ist nur etwa 150 Blöcke lang gültig. Auf Solana kommen Blöcke schnell, also sind 150 Blöcke nur etwa 60 bis 90 Sekunden. Nach diesem Fenster lehnt das Netzwerk die Transaktion rundheraus ab — nicht weil mit den Signaturen etwas nicht stimmt, sondern weil der Blockhash veraltet ist.

Stellen Sie nun den SSP-Signaturablauf gegen diese Uhr. Die Wallet baut die Transaktion, fixiert einen frischen Blockhash und signiert. Anschließend wird der Nutzer auf seinem Telefon benachrichtigt. Antwortet er innerhalb von 90 Sekunden, ist alles gut. Ist er in einer Besprechung, liegt das Telefon in einem anderen Raum, oder will er die Transaktion einfach in Ruhe lesen, stirbt der Blockhash leise. Die Signatur der Wallet ist kryptografisch noch gültig, aber die Transaktion, an der sie hing, ist jetzt wertlos. Das Ganze muss von Grund auf neu gebaut und neu signiert werden.

Für eine Wallet mit einem einzigen Unterzeichner, die in einem Atemzug signiert und sendet, ist das 90-Sekunden-Fenster großzügig. Für eine 2-von-2-Wallet, bei der ein Mensch zwischen den beiden Signaturen steht, ist es ein Rennen, das der Nutzer immer wieder verliert.

Was eine dauerhafte Nonce ist

Solana hat darauf eine eingebaute Antwort, und sie ist älter als SSP: die dauerhafte Nonce. Die Idee ist, den ablaufenden Blockhash durch einen Wert zu ersetzen, der nicht abläuft.

Eine dauerhafte Nonce lebt in ihrem eigenen kleinen Konto auf der Kette — einem Nonce-Konto. Dieses Konto gehört dem System, hält nur 80 Byte Daten, und eines dieser Daten ist der Nonce-Wert selbst: ein langlebiger Stellvertreter für einen Blockhash. Eine Transaktion kann so gebaut werden, dass sie den Wert des Nonce-Kontos anstelle eines aktuellen Blockhashs verwendet. Da dieser Wert nicht altert, bleibt die Transaktion so lange gültig, wie es dauert — Minuten, Stunden, Tage.

Nichts ist jedoch umsonst, und eine Nonce braucht einen Schutz gegen Wiederholung. Dieser Schutz ist eine Regel: Jede Transaktion, die eine dauerhafte Nonce verwendet, muss eine bestimmte Anweisung, nonceAdvance, als allererste Anweisung tragen. Wenn die Transaktion schließlich landet, verbraucht nonceAdvance den aktuellen Nonce-Wert und dreht das Konto auf einen neuen weiter. Die Nonce ist einmalig. Die Transaktion, die Sie am Montag signiert haben, kann bis Mittwoch warten, aber sobald sie ausgeführt ist, kann genau diese Nonce nie wieder eine andere Transaktion autorisieren. Wenn Sie Solanas eigene Beschreibung des Mechanismus lesen möchten, ist die Dokumentation zu dauerhaften Transaktions-Nonces die Primärquelle.

So kauft eine dauerhafte Nonce Zeit, ohne ein Wiederholungsrisiko zu kaufen. Genau diese Eigenschaft braucht eine Wallet mit zwei Geräten.

SSPs Kniff: ein Nonce-Konto, das Sie nie speichern müssen

Ein dauerhaftes Nonce-Konto ist immer noch ein Konto, und auf Solana hat jedes Konto eine Adresse. Der naive Ansatz ist, ein Nonce-Konto an irgendeiner zufälligen Adresse zu erstellen und sich diese Adresse dann für immer sorgfältig zu merken — sie in den lokalen Speicher der Wallet zu schreiben, zu sichern, zu hoffen, dass sie ein Zurücksetzen des Geräts übersteht. Das ist eine weitere fragile Sache, die man verlieren kann.

SSP weigert sich, es zu speichern. Stattdessen enthält SSPs Solana-Multisig-Programm eine Anweisung namens provision_nonce, und sie erstellt das Nonce-Konto an einer abgeleiteten Adresse. Die Adresse stammt aus einem deterministischen Rezept: Sie wird aus dem Multisig-Konto selbst, dem festen Textetikett "nonce" und Solanas System-Programm berechnet. Dasselbe Multisig hinein, dieselbe Nonce-Adresse heraus — jedes Mal.

Das ist wichtig wegen dem, was der Rest dieser Serie bereits festgelegt hat. SSPs Solana-Multisig leitet die Multisig-Adresse aus der Mitgliedermenge ab und leitet die Tresor-Adresse aus dem Multisig ab. (Falls Ihnen diese Ableitungen neu sind, geht der Artikel selbstinitiierendes Solana-Multisig sie durch.) Das Nonce-Konto tritt nun derselben Familie bei: Auch es ist eine reine Ableitung. Jedes SSP-Gerät — Ihr Computer, Ihr Telefon, eine frisch neu installierte Wallet — kann die Adresse des Nonce-Kontos von Grund auf neu berechnen. Es gibt keine geheime Adresse zu verlieren, weil es überhaupt keine gespeicherte Adresse gibt.

Aus dem Design folgen einige praktische Hinweise. provision_nonce ist erlaubnisfrei (permissionless): Jeder kann die kleine Miete (etwa 0,00144 SOL) zahlen, um das Nonce-Konto entstehen zu lassen, und wer zahlt, wird seine anfängliche Autorität — in der Praxis der Paymaster des SSP-Relays. Diese Autorität kann später neu zugewiesen werden, ohne dass sich die Adresse des Kontos je ändert, sodass die Adresse, die Sie heute ableiten, korrekt bleibt, selbst wenn der operative Schlüssel dahinter wechselt. Der Ort des Nonce-Kontos ist an Ihr Multisig verankert, nicht an den, der es zufällig finanziert hat.

Der ruhige Signaturablauf

Fügt man die Teile zusammen, verschwindet das Rennen. Die Wallet baut eine Transaktion, die das abgeleitete Nonce-Konto statt eines aktuellen Blockhashs verwendet, platziert nonceAdvance als erste Anweisung und signiert. Eine Push-Benachrichtigung geht ans Telefon. Der Nutzer genehmigt, wann immer er bereit ist — keine Uhr läuft gegen ihn. Der SSP Key fügt die zweite Signatur hinzu, und die vollständig signierte Transaktion wird gesendet. Da sie auf einer dauerhaften Nonce gebaut ist, ist sie noch gültig, und nonceAdvance dreht die Nonce weiter, sodass die Transaktion nicht wiederholt werden kann.

Es gibt noch eine Einschränkung, die genannt werden sollte. Solana begrenzt eine einzelne Transaktion auf 1232 Byte. Eine Multisig-Transaktion muss die Mitgliederliste und die Ausgabeanweisungen innerhalb dieses Limits unterbringen, weshalb SSP Solanas kompaktes Format der versionierten Transaktion verwendet und Daten so knapp wie möglich übergibt. Die dauerhafte Nonce ändert das Größenbudget nicht; sie ändert nur das Zeitbudget.

Alles ableiten, nichts speichern

Das ist der Faden, der sich durch die gesamte Serie Solana-Multisig, auf SSP-Art zieht. Die Multisig-Adresse, der Tresor, der Ihre Mittel hält, und nun das Nonce-Konto, das zwei Geräten Zeit gibt, sich zu einigen — keines davon ist ein Wert, den SSP speichern und schützen muss. Jedes wird bei Bedarf aus Eingaben neu berechnet, die die Wallet ohnehin kennt. Es gibt weniger zu sichern, weniger, was lecken kann, und weniger, was bei einem Zurücksetzen des Geräts schiefgehen kann. Multisig-Designs, die sich auf diese Idee stützen, wie SSPs Ansatz des Einzelunterzeichner-Multisigs, haben tendenziell die wenigsten beweglichen Teile, die kaputtgehen können.

Eine Schlussbemerkung im selben Geist der Ehrlichkeit wie der Rest der Serie: SSPs Solana-Multisig-Programm ist derzeit nur auf dem Devnet bereitgestellt und wartet vor jeder Mainnet-Veröffentlichung auf ein externes Sicherheitsaudit. Das hier beschriebene Design — einschließlich provision_nonce und seines abgeleiteten Nonce-Kontos — ist real und im quelloffenen Programm nachlesbar, aber noch keine Produktionsinfrastruktur. Falls Ihnen SSPs Zwei-Geräte-Modell selbst neu ist, ist der Einführungsartikel was ist 2-von-2-Multisig der Ort zum Anfangen.

Die dauerhafte Nonce ist ein kleines, altes Stück der Solana-Klempnerei. SSPs Beitrag besteht darin, ihre Adresse zu einer weiteren Sache zu machen, die Sie sich nie merken müssen.

Diesen Artikel teilen

Verwandte Artikel