Entwicklerversion von Rubys RSA-Verschlüsselung kaputt

Durch einen Programmierfehler erzeugte die Entwicklerversion von Ruby RSA-Schlüssel, mit denen das Verschlüsseln wieder den Klartext ergibt.

In Pocket speichern vorlesen Druckansicht 80 Kommentare lesen
Lesezeit: 2 Min.

"Ein schrecklicher Fehler" – so kommentieren die Entwickler der Skript-Sprache Ruby eine Änderung am Quellcode ihrer Verschlüsselungsbibliothek. Durch einen simplen Programmierfehler erzeugte die Entwicklerversion RSA-Schlüssel, mit denen das Verschlüsseln wieder den Klartext ergibt.

Das asymetrische Verschlüsselungsverfahren RSA unterscheidet zwischen geheimen und öffentlichen Schlüssel. Der öffentliche Schlüssel besteht aus einem Modulus n und einem Exponenten e. Die Verschlüsselung des Klartextes m erfolgt nach der mathematischen Formel

c = m^e mod n

Der Clou ist, dass das Chiffrat c normalerweise nur mit dem geheimen Schlüssel wieder entschlüsselt werden kann. Der Ruby-Bug erzeugte allerdings RSA-Schlüssel mit dem Exponenten e=1. Damit bleibt nur noch

c = m mod n

Da m immer kleiner als n ist, kollabiert die RSA-Formel zu einer Variation der legendären ROT26-Verschlüsselung:

c = m

RSA wird auch für digitale Signaturen eingesetzt. Eine Signatur mit einem der kaputten Ruby-Schlüssel ist quasi ein Blankocheck, denn jede Signatur wird damit als korrekt eingestuft. Ursache des Problems ist übrigens ein trivialer Programmierfehler, der eigentlich gar nichts mit Kryptographie zu tun hat: Bei einer for-Schleife zum Setzen einzelner Bits wurde das Schleifenabbruchkriterium falsch gesetzt und die Schleife brach immer nach dem ersten Durchlauf ab.

Das Problem betrifft nur Programme, die RSA-Schlüssel mit der Entwicklerversion von Ruby erstellt haben; das offiizielle Release 1.9.3 ist nicht betroffen. Die Funktionen zur Ver- und Entschlüsselung arbeiten anscheinend korrekt. Werden also extern erzeugte Schlüssel importiert, kommt der Fehler nicht zum Tragen. Nutzer der Entwicklerversion sollten Ruby-Programme möglichst schnell auf diesbezügliche Funktionen untersuchen und eventuell neue Schlüssel erstellen.

Update: Der Fehler betrifft laut dem Eintrag in der Fehlerdatenbank nur die Ruby-Entwicklerversionen ("Trunk") nach dem 1.9.2011. Wie Martin Boßlet, einer der Maintainer der OpenSSL-Bibliothek von Ruby, gegenüber heise Security versichert, waren offizielle Releases nicht betroffen. Wir haben deshalb Überschrift und Text der Meldung entsprechend angepasst. (ju)