ChaCha20 ist eine moderne, schnelle Stromchiffre, die verwendet wird, um Daten zu verschlüsseln. Eine Stromchiffre (oder Stream Cipher) verschlüsselt Daten in Form von einzelnen Bits oder Bytes und eignet sich besonders gut für die Verschlüsselung von Datenströmen, wie zum Beispiel in Netzwerken oder bei großen Datenmengen.
Wie jede Stromchiffre erzeugt ChaCha20 aus dem Schlüssel und der Nonce einen Schlüsselstrom (eine Folge von pseudozufälligen Bits), der mit den Klartextdaten XOR-verknüpft wird, um den Chiffretext zu erzeugen. Das gleiche Verfahren wird auch für die Entschlüsselung verwendet, indem der Schlüsselstrom wieder mit dem Chiffretext XOR-verknüpft wird, um den Klartext zurückzubekommen. ChaCha20 wird, neben AES, in TLS 1.3 verwendet und findet auch bei sonstigen Open-Source-Projekten (z. B. Keypass) Anwendung.
Zusammenfassung
Im ersten Schritt wird eine initale Matrix aufgestellt, welche aus vier Konstanten (rot), dem verwendeten Schlüssel (grün), einem Counter (hellgrün) und der Nonce (grau) besteht. In diesem Beispiel wurde der UTF-8 String „12345678123456781234567812345678“ als Schlüssel verwendet. Als Counter wurde die 0 verwendet und ebenso wurden nur Nullbytes als Nonce genutzt.
Grundsätzlich besteht bei ChaCha20 die Möglichkeit zwischen einer 8 Byte oder 12 Byte Nonce zu wählen. Dementsprechend wird der Index 13 gefüllt oder verbleibt mit Nullen.
Hinweis: Beim Aufstellen der intialen Matrix ist LittleEndian zu berücksichtigen. So wird das Schlüsselmaterial und die Nonce im LittleEndian-Format eingefügt: dies dreht die Reihenfolge der Bytes. In der Abbildung kann nachvollzogen werden, wie die jeweiligen Bytes neu angeordnet werden um ein neues Wort zu bilden.
Im Herzen von ChaCha20 stehen zwei Operationen: Die Rotate– und die QuaterRound-Operation.
Die Rotate-Operation schneidet führt einen Shift nach links um n viele Stellen (hier 3) durch und konkateniert diese auf der rechten Seiten. In diesem Beispiel werden drei Bits (011) auf der linken Seite entfernt und im unteren Wort auf der rechten Seite wieder eingefügt.
Die Quaterround-Operation besteht aus mehrachen Additionen sowie XOR- und Rotate-Operationen. Die Quaterround-Operation wird mit vier Argumenten ausgeführt, welche für den jeweiligen Index in der Matrix stehen (in der ersten Runde: die initiale Matrix).
Bei der dargestellten Quaterround-Operation handelt es sich um zwei Runden: je nachdem, ob es sich um eine gerade oder ungerade Rundenzahl handelt, werden die Rotate-Operationen mit den Argumenten 16 und 12 bzw. 8 und 7 ausgeführt.
Die Quaterround-Operation wird nacheinander acht Mal mit verschiedenen Indizes ausgeführt, wordurch Schlüsselmaterial und Nonces in der Matrix diffundieren. Ausgeführt auf die initale Matrix ergibt dies die Runde 1 und 2 des Verschlüsselungsalgorithmus.
Nach zehnfacher Ausführung dieser doppelten Runde, wobei jeweils das Ergebnis des vorherigen Schritts der Start des nächsten Schritts bildet, erhalten wir am Ende ein Ergebnis, welches wir mit der ursprünglichen Matrix addieren. Nach einer letztmaligen Ausführung der LittleEndian-Operation erhalten wir den Schlüsselstrom, welcher über XOR mit dem Klartext verknüpft werden kann.
Implementierung in Excel
ChaCha20 wurde in Excel implementiert, um die einzelnen Verarbeitungsschritte besser nachvollziehen zu können. Hierbei ist zu berücksichtigen, dass nur die ersten 64 Byte vom Schlüsselstrom generiert werden. Grundsätzlich ist eine Erweiterung für beliebig lange Klartexte möglich. In diesem Fall ist zu berücksichtigen, dass für die weiteren 64 Byte der Counter in der Matrix inkrementiert werden muss.
Download der Microsoft Excel-Datei. Auf Makros wurde verzichtet; aufgrund der Lambda-Funktionen wird das Ergebnis jedoch nur unter Office 365 oder Excel 2024 lauffähig sein.
SHA256: CE8E4112E2F11F463CC061A14DB5A6FA206718DEF9D179F618C7AB2C98A3AC6B