NIP-46: Nostr Connect
NIP-46 definiert Remote-Signing über Nostr-Relays. Ein Client spricht mit einem separaten Signer, oft Bunker genannt, sodass Signing-Keys außerhalb der App bleiben können, die der Nutzer gerade aktiv verwendet.
Funktionsweise
- Der Client erzeugt ein lokales Keypair, das nur für die Bunker-Session verwendet wird.
- Die Verbindung wird mit einer
bunker://- odernostrconnect://-URI aufgebaut. - Client und Signer tauschen verschlüsselte kind-
24133-Request- und Response-Events über Relays aus. - Nach dem Verbinden ruft der Client
get_public_keyauf, um den tatsächlichen Nutzer-pubkey zu erfahren, für den signiert wird.
Verbindungsmethoden
- bunker:// - Vom Signer initiierte Verbindung
- nostrconnect:// - Vom Client initiierte Verbindung über QR-Code oder Deep Link
nostrconnect://-Flows enthalten ein erforderliches Shared Secret, damit der Client verifizieren kann, dass die erste Antwort wirklich vom beabsichtigten Signer kommt. Das verhindert einfaches Connection Spoofing.
Unterstützte Operationen
sign_event- Ein beliebiges Event signierenget_public_key- Den pubkey des Nutzers vom Signer abrufennip04_encrypt/decrypt- NIP-04-Verschlüsselungsoperationennip44_encrypt/decrypt- NIP-44-Verschlüsselungsoperationenswitch_relays- Den Signer nach einem aktualisierten Relay-Set fragen
Viele Implementierungen verwenden beim Setup außerdem Permission-Strings wie sign_event:1 oder nip44_encrypt, damit der Signer einen engen Scope statt Vollzugriff freigeben kann.
Relay- und Vertrauensmodell
NIP-46 verschiebt private keys aus dem Client heraus, entfernt aber nicht das Vertrauen in den Signer. Der Signer kann Anfragen genehmigen, ablehnen oder verzögern, und er sieht jede Operation, die der Client von ihm ausführen lassen will. Auch die Wahl der Relays ist wichtig, weil das Protokoll von der Zustellung von Requests und Responses über Relays abhängt, die beide Seiten erreichen können.
Die Methode switch_relays existiert, damit der Signer die Session im Lauf der Zeit auf ein anderes Relay-Set umstellen kann. Clients, die das ignorieren, arbeiten weniger zuverlässig, wenn sich die Relay-Präferenzen des Signers ändern.
Primärquellen:
Erwähnt in:
- Newsletter #1: Notable Code Changes
- Newsletter #3: December Recap
- Newsletter #4: Primal Android Becomes a Full Signing Hub
- Newsletter #12: NDK Collaborative Events and NIP-46 Timeout
- Newsletter #19: NipLock signer support
- Newsletter #19: Forgesworn Heartwood signer
- Newsletter #19: Flotilla Aegis NIP-46 login
Siehe auch: