Eine Dusk-Wallet-Verbindung wirkt wie ein einziger einfacher Klick. Aber als ich mir angesehen habe, was dahinter steckt, wurde mir klar, dass da ziemlich viel los ist.

Ich habe zuerst den Wallet-Discovery-Flow durchgegangen. Ein dApp greift sich nicht einfach irgendeine Dusk-Wallet, die gerade auf der Seite sitzt. Wallets melden sich selbst, die dApp entdeckt sie, und wenn mehr als eine installiert ist, muss ein Provider ausgewählt werden. Jede Wallet bringt außerdem ihre eigene Identität mit. Das ist zwar eine kleine Einzelheit, aber sie ist wichtig, weil die Website wissen muss, mit welcher Wallet sie tatsächlich spricht.

Dann habe ich mir die Berechtigungsseite angesehen. Eine Profilanfrage, eine geschützte Receive-Adresse, eine Transaktion, ein Contract-Call oder eine Signatur sind nicht alles dasselbe. Das läuft über unterschiedliche Wallet-Anfragen, und die Wallet kann während der aktiven Verbindung außerdem Profil-, Chain- und ausgewählte-Node-Änderungen melden. „Verbunden“ bedeutet also nicht wirklich, dass die dApp unbegrenzten Zugriff hat.

Der Signier-Teil war für mich der interessanteste. Dusk setzt den Origin und die Chain-ID in den Kontext der signierten Nachricht. Auth Signing enthält außerdem eine Nonce und Zeitstempel. Die Signatur ist also nicht nur „dieses Konto hat etwas signiert“ – es gibt auch Kontext um die Anfrage herum.

Außerdem habe ich die jüngsten Wallet-Änderungen in diesem Bereich geprüft. Provider-Nachrichten wurden eingeschränkt, sodass ein anderer installierter Dusk-Provider dieselbe dApp-Anfrage nicht empfangen kann. Origin- und Permission-Handling wurden verschärft, und dApp-RPC- sowie benutzerdefinierte Node-Verbindungen wurden auf HTTPS oder lokale Entwicklungs-Endpunkte beschränkt. In den eigenen Sicherheitshinweisen von Dusk werden außerdem Grenzen erwähnt, etwa dass JavaScript-Speicher nicht zuverlässig löschbar ist.

Für mich verändert das, wie der kleine Button „Connect Wallet“ aussieht. Es ist nicht wirklich eine einzige Berechtigung. Zwischen der Website und dem Schlüssel, der entscheidet, welche Wallet verwendet wird, welche Dinge die dApp anfragen kann und was der Nutzer tatsächlich signiert, liegt eine ganze Ebene.

$DUSK @Dusk #dusk