iX 2/2020
S. 125
Praxis
Sicher programmieren

Kryptografie in Go

Bequem und sicher

Reinhard Wobst

Die Programmiersprache Go eignet sich nicht nur für Web-Backends, sondern auch zur Implementierung kryptografischer Anwendungen. Vieles ist standardmäßig enthalten, für Passwort-Hashing und Zufallserzeugung empfehlen sich Zusatzpakete.

Die Vorzüge von Go bestehen unter anderem in der Einfachheit, oft fast nicht messbaren Kompilierzeiten, einer leistungsfähigen und vor allem sicheren Implementierung von Nebenläufigkeit mit Channels sowie hoher Fehlersicherheit, nicht zuletzt dank meist kurzer und klarer Compilerfehlermeldungen ­[1–4]. Für einfache kryptografische Anwendungen wie die symmetrische Verschlüsselung von Daten, selbst noch mit per RSA chiffriertem Sitzungsschlüssel, reichen bereits die Standardpakete aus. Für mehr gibt es Zusatzangebote aus dem Pool freier Go-Software im Netz.

Ein Demoprogramm soll die Chiffrierung eines Bytefelds mit AES im ­Counter Mode (CTR) zeigen. Dabei wird ein nicht geheimer, aber unbedingt zufälliger erster Block (Nonce) fortlaufend chiffriert und bei jedem Schritt inkrementiert, wobei man ihn als 128-Bit-Zahl auffasst. Der so entstehende Schlüsselstrom wird bitweise per XOR mit dem Klartext verknüpft und ergibt den Geheimtext. Das Programm ist im Kern in Listing 1 zu sehen und schnell erklärt: Die Nonce wird mit Zufallswerten von rand.Reader gefüllt und in den ersten Block des Geheimtextes geschrieben (alle Listings siehe ix.de/zqwx). aes.NewCipher(key) liefert eine neue Instanz einer Blockchiffre zurück, in der Algorithmus (AES) und Schlüssel enthalten sind.

Kommentare lesen (1 Beitrag)