Die Programmiersprache Go hat sich seit ihrer Einführung als leistungsstarke und benutzerfreundliche Plattform für die Erstellung moderner Softwareanwendungen etabliert. Besonders im Bereich der Kryptographie bietet Go eine umfassende Sammlung von Paketen innerhalb seiner Standardbibliothek, die Entwicklern helfen, robuste und sichere Anwendungen zu bauen. Die Bedeutung von Sicherheit in der Softwareentwicklung kann nicht genug betont werden, insbesondere wenn es um Kryptographie geht, die die Grundlage für den Schutz sensibler Daten bildet. Deshalb ist die jüngste eingehende Sicherheitsprüfung der Go-Kryptographiepakte ein wesentlicher Schritt, um das Vertrauen der Entwickler-Community und der Endnutzer zu stärken und die Integrität des Go-Ökosystems zu gewährleisten. Die Sicherheitsüberprüfung wurde von der unabhängigen Sicherheitsfirma Trail of Bits im Auftrag von Google durchgeführt.
Im Mittelpunkt stand dabei ein Kernset an kryptographischen Paketen, die außerdem Teil des neuen nativen FIPS 140-3 Moduls sind. FIPS 140-3 ist ein bedeutender Sicherheitsstandard in der Kryptographie, der die Konformität zu festgelegten Sicherheitsanforderungen garantiert und insbesondere im staatlichen und behördlichen Umfeld hohe Relevanz besitzt. Das Audit resultierte in einer insgesamt positiven Bilanz: Es wurde lediglich ein Problem von geringer Schwere im Rahmen der veralteten und nicht unterstützten Integration von Go mit BoringCrypto festgestellt sowie einige neutrale Hinweise aufgezeigt, die keine unmittelbaren Risiken für die Sicherheit darstellen. Der Umfang des Audits war breit gefasst und umfasste diverse Implementierungen aus unterschiedlichen Bereichen der Kryptographie. Dazu gehörten Schlüsselvereinbarungen wie ECDH und moderne post-quantum ML-KEM Verfahren, digitale Signaturen, darunter ECDSA, RSA und Ed25519, verschiedene Verschlüsselungsmodi wie AES-GCM, AES-CBC und AES-CTR, unterschiedliche Hashfunktionen einschließlich SHA-1, SHA-2 und SHA-3, Schlüsselableitungsfunktionen wie HKDF und PBKDF2 sowie Authentifizierungsmethoden wie HMAC und sogar der kryptographische Zufallszahlengenerator.
Besonders bemerkenswert war die Berücksichtigung von tiefgreifenden, niedrigen Ebenen wie der Verarbeitung großer Ganzzahlen und elliptischer Kurven, inklusive der komplexen Assemblerelemente. Nicht geprüft wurden allerdings Protokolle höherer Ebenen wie TLS oder X.509 Zertifikate. Die Sicherheit der Go-Kryptographiebibliotheken basiert auf mehreren grundlegenden Prinzipien. Komplexität wird dort strikt vermieden, wo sie keinen direkten Nutzen bringt, um potenzielle Schwachstellen zu minimieren.
Die Entwickler setzen auf klare und nachvollziehbare Code-Strukturen, die Lesbarkeit wird großgeschrieben, da dies die Wartung erleichtert und die Effektivität von Code-Reviews und Audits erhöht. Darüber hinaus werden interne und externe APIs bewusst sicher gestaltet, sodass selbst interne Anwendungen von bewährten Sicherheitsmechanismen profitieren. Ein weiterer Vorteil ergibt sich aus der Natur der Go-Sprache selbst, deren Speicherverwaltung und Typsystem dazu beitragen, klassische Programmierfehler im Bereich der Speicherbehandlung zu reduzieren, die häufig Angriffsvektoren darstellen. Das einzige tatsächliche Sicherheitsproblem, das als relevant eingestuft wurde, trägt die Bezeichnung TOB-GOCL-3. Es betrifft die Speicherverwaltung in der Go+BoringCrypto Integration, einem älteren und inzwischen als nicht unterstützte Komponente definierten Experiment, das speziell bei Google für die interne Nutzung entwickelt wurde und nicht standardmäßig aktiviert ist.
Die Schwachstelle wurde als gering eingestuft, da sie nur unter speziellen Bedingungen ausgenutzt werden kann und vergleichsweise geringe Auswirkungen hätte. Diese wurde bereits im Rahmen von Go Version 1.24 behoben. Darüber hinaus wurden fünf weitere „informative“ Sicherheitsfunde dokumentiert. Diese stellen keine unmittelbare Gefahr dar, sind allerdings für die allgemeine Einhaltung bewährter Sicherheitspraktiken bedeutend.
Einige davon thematisierten potenzielle Timing-Seiteneffekte, also kleine, aber relevante Schwankungen in der Ausführungsgeschwindigkeit kryptographischer Operationen, die theoretisch sensible Informationen offenbaren könnten. Eines der wichtigsten Ergebnisse in diesem Abschnitt, kennzeichnet als TOB-GOCL-2, betraf die Implementierung der elliptischen Kurve P-256 bei der digitalen Signatur mit ECDSA auf Power ISA Architekturen (ppc64 und ppc64le). Timing-Seiteneffekte stellen eine Herausforderung in der Kryptographie dar, da viele klassische Verfahren darauf ausgelegt sind, unabhängig von geheimen Daten möglichst konstant zu arbeiten, um keine Rückschlüsse auf Schlüssel oder Klartextinformation zuzulassen. In dem speziellen Fall des Power ISA konnte festgestellt werden, dass eine bedingte Verzweigung in der Assembly-Implementierung die Ausführungszeit variieren ließ. Die Behebung erfolgte durch den Einsatz eines bewährten Patterns zur bedingten aber konstanten Auswahl von Ergebnissen ohne Verzweigungen, ein Ansatz, der bereits an anderer Stelle bei Go verwendet wird.
Dieses Problem wurde unter der CVE-Nummer CVE-2025-22866 erfasst. Weitere Hinweise auf Timing-Seiteneffekte fanden sich in der Umwandlung von Bytes in interne Feld-Elemente bei NIST elliptischen Kurven, sowie in der Skalierungsfunktion bei Ed25519 Signaturen. Obwohl diese entsprechenden Funktionen derzeit nur mit öffentlichen, somit nicht geheimeingeschränkten Eingaben arbeiten, wurden vorsorglich Anpassungen vorgenommen, um zukünftig für solche potenziellen Risiken vorzubeugen. Dieser vorsorgliche Ansatz ist Teil der bewussten Sicherheitsstrategie von Go, um die Ausbreitung unerwünschter Nebeneffekte zu verhindern und die allgemeine Komplexität zu reduzieren. Das Thema Speicherverwaltung betrifft insbesondere die Nutzung von cgo, einer Schnittstelle zwischen Go und C Code.
Im Traditionsfall der Go+BoringCrypto Integration ergaben sich Schwierigkeiten bei der manuellen Verwaltung von Speicherbereichen, was Ursache für die erwähnte geringe Schwachstelle war. Dieser komplexe Mix aus Sprachen und Speichersemantiken birgt viele potentielle Ursachen für Fehler, weshalb das Go-Team beschlossen hat, sich sukzessive von dieser Integration zu verabschieden und stattdessen einen nativen, rein in Go geschriebenen FIPS 140-3 Modus zu fördern. Dieses reine Go-Modul ist leichter wartbar, entspricht modernen Sicherheitsanforderungen und vermeidet die Fallstricke, die mit cgo einhergehen. Ein weiterer Fokus lag auf der Vollständigkeit der Implementierung bestimmter kryptographischer Standards. Hier wurden zwei Fälle hervorgehoben.
Eine Umsetzung des NIST CTR_DRBG (deterministischer Zufallszahlengenerator basierend auf AES-CTR) wurde speziell auf die Bedürfnisse der FIPS 140-3 Compliance zugeschnitten. Die Implementierung umfasst zwar nicht die komplette Spezifikation von NIST SP 800-90A einschließlich einiger optionaler Funktionen wie Personalisierungsstrings, was in generischen Verwendungskontexten zu Risiken führen könnte, für die spezifische geplante Verwendung ist das jedoch ausreichend und sorgt für eine klarere und wartbarere Codebasis. Dokumentation warnt zudem explizit vor einer breiteren Nutzung. Zudem wurde die Umsetzung von PBKDF2 (Password-Based Key Derivation Function 2) auf korrekte Erfüllung der Schlüsselgrößenbeschränkung geprüft, wie sie RFC 8018 definiert. Ursprünglich wurde eine theoretisch mögliche Überschreitung der Schlüsselgröße nicht geprüft, was zu einem zyklischen Verhalten führen könnte.
Obwohl praktisch kaum jemand einen so gigantischen Schlüssel erzeugt, ist die Einhaltung der Standards essentiell für Korrektheit und Kompatibilität. Durch Korrekturen in Go Version 1.24 wurde hier eine Konsistenz zu den Vorgaben hergestellt. Blickt man auf die Zukunft, ist klar, dass die Go-Entwickler nicht auf den Erfolgen ruhen wollen. Die Integration eines rein in Go geschriebenen FIPS 140-3 Modus ist bereits abgeschlossen und durchläuft zurzeit die erforderliche Zertifizierung der CMVP.
Dies wird eine breite Verfügbarkeit eines unterstützten und zertifizierten Sicherheitsmodus ermöglichen und die alten, proprietären Lösungen ablösen. Daneben wird Go zunehmend moderne kryptographische Verfahren integrieren, darunter Post-Quantum-Kryptographie, die als Antwort auf die Bedrohungen durch zukünftige Quantencomputer gilt. So finden sich neue Implementierungen für ML-KEM-768 und ML-KEM-1024 im crypto/mlkem Paket und deren Integration in das TLS Package. Außerdem ist geplant, den Zugang zu leistungsstarken kryptographischen Funktionen weiter zu vereinfachen. Neue High-Level APIs sollen Entwicklern ermöglichen, bewährte Algorithmen ohne tiefes Spezialwissen einzusetzen.
Besonders für Basisanforderungen wie sicheres Passwort-Hashing werden nutzerfreundliche Mechanismen angeboten, welche automatisch auf aktuelle Technologien umstellen können, sobald diese verfügbar sind. Dies ist ein kleiner, aber wichtiger Beitrag zu einer breit zugänglichen und sicheren Softwareentwicklung. Insgesamt verdeutlicht die Sicherheitsüberprüfung der Go-Kryptographiebibliotheken das hohe Engagement des Go-Teams, sichere und robuste Werkzeuge bereitzustellen. Diese Bemühungen sind ein vertrauensbildender Faktor für die Entwickler, die auf Go vertrauen, um Anwendungen mit hohen Sicherheitsanforderungen wie Finanzanwendungen, dezentrale Systeme oder kritische Infrastrukturen zu bauen. Die Kombination aus technischer Exzellenz, klaren Richtlinien zur Codequalität, und einer transparenten Fehlerbehandlung setzt Maßstäbe in der modernen Softwareentwicklung.
Die Zukunft der Go-Kryptographie sieht vielversprechend aus: Mit fortlaufenden Verbesserungen, der Integration von Post-Quantum-Verfahren und der stetigen Abkehr von komplexen, fehleranfälligen Schnittstellen hin zu nativen, hochgradig wartbaren Lösungen steht Go gut positioniert, um auch in den kommenden Jahren als zuverlässige Säule für sichere Softwareanwendungen zu dienen.