NIP-44 definiert einen versionierten Verschlüsselungsstandard für Nostr-Payloads und ersetzt das fehlerhafte NIP-04-Verschlüsselungsschema durch moderne kryptographische Primitive.

Wie es funktioniert

NIP-44 Version 2 verwendet einen mehrstufigen Verschlüsselungsprozess:

  1. Schlüsselvereinbarung: ECDH (secp256k1) zwischen den öffentlichen Schlüsseln von Sender und Empfänger erzeugt ein gemeinsames Geheimnis
  2. Schlüsselableitung: HKDF-extract mit SHA256 und Salt nip44-v2 erstellt einen Konversationsschlüssel
  3. Pro-Nachricht-Schlüssel: HKDF-expand leitet ChaCha-Schlüssel, Nonce und HMAC-Schlüssel aus einem zufälligen Nonce ab
  4. Padding: Inhalt wird aufgefüllt, um die Nachrichtenlänge zu verbergen
  5. Verschlüsselung: ChaCha20 verschlüsselt den aufgefüllten Inhalt
  6. Authentifizierung: HMAC-SHA256 liefert Nachrichtenintegrität

Die Ausgabe ist eine versionierte base64-Payload, die in ein normal signiertes Nostr-Event eingebettet wird. Die Spezifikation verlangt, dass Clients vor dem Entschlüsseln der inneren NIP-44-Payload zuerst die äußere NIP-01-Event-Signatur validieren.

Kryptographische Entscheidungen

  • ChaCha20 statt AES: schneller und widerstandsfähiger gegen Multi-Key-Angriffe
  • HMAC-SHA256 statt Poly1305: Polynomial-MACs lassen sich leichter fälschen
  • SHA256: konsistent mit bestehenden Nostr-Primitiven
  • Versioniertes Format: ermöglicht spätere Algorithmus-Upgrades

Sicherheitseigenschaften

  • Authentifizierte Verschlüsselung: Nachrichten können nicht unbemerkt verändert werden
  • Längenverschleierung: Padding verdeckt die Nachrichtengröße
  • Konversationsschlüssel: derselbe Schlüssel für laufende Gespräche reduziert Rechenaufwand
  • Auditiert: Das Cure53-Sicherheitsaudit fand keine ausnutzbaren Schwachstellen

Implementierungshinweise

NIP-44 ist kein direkter Ersatz für NIP-04-Payloads. Es definiert ein Verschlüsselungsformat, aber keinen Event-Kind für Direktnachrichten. Protokolle wie NIP-17 und NIP-59 legen fest, wie verschlüsselte Payloads in realen Nachrichtenflüssen verwendet werden.

Die Plaintext-Eingabe ist UTF-8-Text mit einer Länge von 1 bis 65535 Bytes. Das ist eine echte Einschränkung für Implementierer: Wenn Ihre Anwendung beliebige binäre Blobs verschlüsseln muss, brauchen Sie eine zusätzliche Kodierung oder ein anderes Containerformat.

Einschränkungen

NIP-44 bietet nicht:

  • Forward Secrecy: Kompromittierte Schlüssel legen vergangene Nachrichten offen
  • Post-Compromise Security: Wiederherstellung nach Schlüsselkompromittierung
  • Abstreitbarkeit: Nachrichten sind nachweislich von bestimmten Schlüsseln signiert
  • Metadaten-Verschleierung: Die Relay-Architektur begrenzt die Privatsphäre

Für hohe Sicherheitsanforderungen bieten NIP-104, also Double Ratchet, oder MLS-basierte Protokolle wie Marmot stärkere Garantien.

Geschichte

NIP-44 Revision 3 wurde im Dezember 2023 nach einem unabhängigen Cure53-Sicherheitsaudit gemerged. Sie bildet die kryptographische Grundlage für NIP-17 Private DMs und NIP-59 Gift Wrap.


Primärquellen:

Erwähnt in:

Siehe auch: