NIP-104 definiert Ende-zu-Ende-verschlüsselte Direktnachrichten unter Verwendung eines Double-Ratchet-Protokolls (basierend auf der Signal-Architektur), das Forward Secrecy und Post-Compromise Security für Nostr-Konversationen bietet.

Warum Es Wichtig Ist

Bestehende Nostr-DM-Lösungen haben Einschränkungen:

  • NIP-04: Verschlüsselt Inhalte, aber gibt Metadaten preis
  • NIP-17 + NIP-59: Löst Metadaten-Lecks durch Gift-Wrapping, aber fehlt Forward/Backward Secrecy

NIP-104 vervollständigt das Bild: Wenn der private Schlüssel eines Benutzers kompromittiert wird, können Angreifer vergangene Nachrichten nicht lesen (Forward Secrecy) oder zukünftige Nachrichten unbegrenzt weiterlesen (Post-Compromise Security).

Wie Es Funktioniert

Initiale Einrichtung (X3DH)

Zwei Parteien führen einen erweiterten dreifachen Diffie-Hellman-Austausch mit Identitätsschlüsseln und Prekeys durch, um einen initialen gemeinsamen Root-Key abzuleiten.

Der Double Ratchet

  1. DH Ratchet: Jedes Mal, wenn Parteien Nachrichten austauschen, werden neue Diffie-Hellman-Schlüssel generiert, die neue Root-Keys und Chain-Keys erzeugen
  2. Symmetric Ratchet: Separate Sende- und Empfangsketten leiten individuelle Nachrichtenschlüssel für jede Nachricht ab

Diese kontinuierliche Schlüsselrotation stellt sicher, dass die Kompromittierung eines Schlüssels minimalen Nachrichteninhalt preisgibt.

Event Kinds

  • Kind 442: Veröffentlicht Benutzer-Prekeys für die X3DH-Initialisierung
  • Kind 443: Initiale Konversationseinrichtung mit verschlüsselter erster Nachricht
  • Kind 444: Nachfolgende verschlüsselte Nachrichten in etablierten Konversationen

Alle verschlüsselten Nachrichten werden in Kind-1059-GiftWrap-Events zum Metadatenschutz verpackt.

Wichtige Tags

  • p - Öffentlicher Schlüssel des Empfängers
  • prekey - Prekey des Empfängers für DH-Berechnung
  • dh_sending - Aktueller DH-Sende-Öffentlichkeitsschlüssel
  • current_index - Nachrichtennummer in der Kette
  • previous_length - Länge der vorherigen Nachrichtenkette

Einschränkungen

Nachrichten funktionieren pro Gerät-Client-Paarung. Die Synchronisierung über mehrere Geräte erfordert eine separate Initialisierung für jedes Gerät, ein Kompromiss für erhöhte Sicherheit.


Primäre Quellen:

Erwähnt in:

Siehe auch: