Noise Protocol Framework

Das Noise Protokoll Framework dient als Open-Source-Framework für Verschlüsselungsprotokolle zum Ende-zu-Ende-verschlüsselten Datenaustausch, basierend auf dem Diffie-Hellman-Schlüsselaustausch (DH). Es wurden anhand des Frameworks bereits sichere Alternativen zum bekannten TLS erstellt, die die Integrität und Authentizität der übertragenen Nachrichten durch die Nutzung eines Verfahrens namens Authenticated Encryption with Additional Data (AEAD) gewährleistet.

Herkunft

Das Framework wurde von Trevor Perrin mit Unterstützung von Moxie Marlinspike entwickelt und wird in dem Instant Messenger WhatsApp, dem Lightning-Netzwerk zur Skalierung der möglichen Bitcoin Transaktionen und dem VPN-Tunnel-System WireGuard verwendet. Weiterhin gibt es Entwürfe zum geplanten Noise-Socket, welcher als TLS-Socket für ein auf dem Framework aufgebautes Noise-Protokoll dienen soll.

Funktionsweise

Das Protokoll beginnt, gleich wie bei TLS mit der Handshake-Phase, durch die die beiden Public-Keys der Parteien ausgetauscht werden. Die Schlüssel der beiden Parteien können flüchtig und/oder statisch sein. Infolgedessen wird durch die Durchführung einer Reihe von DH Operationen ein gemeinsamer Secret-Key berechnet, mit Hilfe dessen ein symmetrisches Verschlüsselungsverfahren genutzt werden kann und die Nachrichten zum Schutz der Authentizität durch einen Message Authentication Code (MAC) abgesichert werden. Beim Noise Protokoll Framework kann zwischen unterschiedlichen Handshaker-Pattern, DH Funktionen, Hash Funktionen und Verschlüsselungsfunktionen ausgewählt werden, durch die man ein konkretes Noise Protokoll erhält.

Handshake

Der Kern des Noise Protokolls ist der jeweilige Satz an Variablen der Parteien zur Zeit des Handshakes und die Regeln des gewählten Handshake-Pattern nach denen die einzelnen Handshake-Nachrichten verarbeitet, gesendet und empfangen werden. Jede Partei hat folgende Variablen:

Eine Handshake Nachricht besteht immer aus einem DH Public-Key gefolgt von einer frei, je nach Applikation, gewählten Payload. Der Sender stellt die jeweilige Nachricht, je nach Nachrichtenmuster, schrittweise aus Token zusammen. Möglichen Token sind:

Nachdem der letzte Token einer Handshake-Nachricht verarbeitet wurde, schreibt der Sender noch die Payload in den Nachrichtenbuffer, verschlüsselt die Nachricht, falls schon ein Verschlüsselungsschlüssel k generiert wurde und hasht die Ausgabe mit dem alten h, um ein neues h abzuleiten.

Beispiele

Handshake-Pattern eines Handshakes ohne Authentifizierung:

 → e
 ← e, ee

Handshake-Pattern eines Handshakes mit Authentifizierung des Responders:

 → e
 ← e, ee, s, es

In diesem Fall sind die endgültigen ck und k Werte ein Hash beider DH Ergebnisse. Da man anhand der Token erkennt, dass ein DH zwischen dem flüchtigen Schlüsselpaar des Initiators und dem statischen Schlüsselpaar des Responders durchgeführt wurde. Kann der Initiator die Payload der zweiten Nachricht entschlüsseln, wurde der Responder erfolgreich authentifiziert.

Handshake-Pattern eines Handshakes mit Authentifizierung des Initiators:

 → e
 ← e, ee, s, es
 → s, se

Dies wird auf dieselbe Weise wie die Authentifizierung des Responders durchgeführt.

Es gibt noch eine Vielzahl an möglichen Patterns, aus denen ausgewählt werden kann, die immer je nach Anwendungsbereich ausgewählt werden.

Eigenschaften

Das Noise-Protokoll-Framework ist kompatibel mit verschiedenen Verschlüsselungs- und Hashmethoden.

Folgende Verschlüsselungsverfahren werden unterstützt:

Folgende Hashverfahren werden unterstützt:

Folgende Diffie-Hellman-Funktionen werden unterstützt:

Implementierungen