zurück zum Artikel

Entwicklerversion von Rubys RSA-Verschlüsselung kaputt

Jürgen Schmidt

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

"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 [1] 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 [2]:

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 [3] 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 [4])


URL dieses Artikels:
https://www.heise.de/-1374789

Links in diesem Artikel:
[1] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=33633
[2] http://de.wikipedia.org/wiki/ROT13
[3] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/openssl/ossl_pkey_rsa.c?r1=33633&r2=33632&pathrev=33633
[4] mailto:ju@ct.de