Zum Hauptinhalt springen

3. Implementation Advice (Implementierungshinweise)

3. Implementation Advice (Implementierungshinweise)

Jeder Block von ChaCha20 umfasst 16 Verschiebeoperationen und eine Inkrementoperation zum Laden des Zustands, jeweils 80 XOR-, Additions- und Roll-Operationen für die Runden, 16 weitere Additions- und 16 XOR-Operationen zum Schutz des Klartexts. Abschnitt 2.3 beschreibt die ChaCha-Blockfunktion als "adding the original input words" (Addieren der ursprünglichen Eingabewörter). Das bedeutet, dass wir den ChaCha-Zustand vor Beginn der Runden zur Seite kopieren, um ihn später wieder zu addieren. Das ist korrekt, aber man kann einige Operationen sparen, wenn man stattdessen den Zustand kopiert und auf der Kopie arbeitet. Dann muss man für den nächsten Block den Zustand nicht neu aufbauen, sondern nur den Blockzähler erhöhen. Das spart etwa 5,5 % der Taktzyklen.

Es wird nicht empfohlen, eine generische Big-Integer-Bibliothek wie die in OpenSSL für die arithmetischen Operationen in Poly1305 zu verwenden. Solche Bibliotheken nutzen dynamische Allokation, um Ganzzahlen beliebiger Größe zu verarbeiten, aber diese Flexibilität geht auf Kosten der Leistung sowie der Sicherheit gegen Seitenkanäle. Es gibt effizientere Implementierungen mit konstanter Laufzeit, eine davon in D. J. Bernsteins eigener Bibliothek NaCl ([NaCl]). Ein konstanter Zeit, aber nicht optimaler Ansatz wäre die naive Implementierung der Arithmetik für 288-Bit-Ganzzahlen, denn selbst eine naive Implementierung überschreitet bei der Multiplikation von (acc+block) und r nicht 2^288. Eine effiziente Implementierung mit konstanter Laufzeit findet sich in der Public-Domain-Bibliothek poly1305-donna ([Poly1305_Donna]).