Sie sind auf Seite 1von 13

Zertifikat & Sicherheit

Tutorial: Privaten CertKey zurckrechnen

TORSTEN JAHNKE
CERTIFICATE RECALCULATE
DONNERSTAG, 20. OKTOBER 2016

1. Rechtlicher Hinweis

Bei der hier vorliegenden Anleitung handelt es sich


nicht um theoretische Informationen, sondern es
kann aus technischer Sicht auch in der Praxis
angewendet werden.
Diese Anleitung dient auf keine Fall dazu um zu
Straftaten anzustiften oder zu verleiten oder
diese zu untersttzen. Diese Anleitung soll
lediglich zum technischen Verstndnis und zur
Aufklrung dienen.
Bereits das Herunterladen von Zertifikaten und das
berechnen eines privaten Schlssels von einem
fremden Zertifikat stellt eine strafbare Handlung
dar, was auf keinen Fall von meiner Seite aus
untersttzt werden wird.
Ich weise ausdrcklich darauf hin, dass das
verwenden der nachfolgenden Informationen zu
kriminellen

Zwecken

verboten

ist

und

das

benutzen dieser Anleitung hierfr untersagt wird.


Das zurckrechnen von Schlsseln bei ffentlichen
Zertifikaten ist strengstens verboten!

Seite 1 von 12

2. Einfhrung
Immer wieder habe ich Diskussionen mit Sicherheitsverantwortlichen, in denen mir
erklret wird, wie sicher ihre System sind weil auf Zertifikate fr die
Verschlsselung gesetzt wird. Dabei ist es vllig egal welche Verschlsselung
oder welches System dahinter steckt, Zertifikate sind die ultimative Lsung.
Wenn ich provokativ dann die Frage stelle, was wre wenn es nicht sicher wre,
bekomme ich auf eine sehr herablassende Art und Weise zu hren, Zertifikate
sind nicht zu knacken weil es Zertifikate sind und es technisch nicht geht.
Dass das jedoch falsch ist, werde ich hier entsprechend zeigen und Sie knnen das
auch selbst ausprobieren. Es ist problemlos mglich einen privaten Schlssel von
einem Public Zertifikat zurckzurechnen. Und das sogar innerhalb von wenigen
Minuten.
Damit die Theorie einen entsprechenden Sinn bekommt, verwende ich hier in dem
Beispiel ein 256-Bit Verschlsselung bei welchem ich aus dem Zertifikat den
entsprechenden privaten Key zurckrechnen werde.

Seite 2 von 12

3. Mathematik
Gerade in Deutschland kommt zu oft der Satz Erklren Sie es einfach, denn ich
muss es schnell verstehen. Also gut, wenn man es einfach darstellen mchte
dann ist ein Zurckrechnen eine simple Gleichung. Schematisch dargestellt kann
man fr eine Verschlsselung von Daten folgende Gleichung aufstellen:
PublicKey + PrivateKey + Daten = Verschlsselte-Daten
Stellt man die Gleichung nun um, kommt man auf folgende schematische
Darstellung:
(Verschlsselte-Daten) Daten PublicKey = PrivateKey
Somit ist der PrivateKey = X und damit lautet die Aufgabe: Lsen Sie die
Gleichung nach X und fertig. Keine Sorge, ganz so einfach ist es wirklich nicht.
Um den private Key eines Zertifikates zurckrechnen zu knnen, ist es notwendig
zu wissen wie eine Verschlsselung aufgebaut ist. Jede Zertifikatsverschlsslung
basiert mathematisch auf einen Tupel (Liste) von mindestens 2, jedoch
hchstens 6 Long-Integer Objekten. Die jeweiligen Objekte treten in fester und
folgender Reihenfolge auf:
1. RSA Modulus (n)
2. Public Exponent (e)
3. Private Exponent (d)
4. Erster Faktor von n (p)
5. Zweiter Faktor von n (q)
6. CRT (Chinese Remainder Theorem) Koeffizient (1/p) mod q (u)
Der Modulus n ist das Produkt von zwei Primzahlen. Der ffentliche Exponent
e muss grer als 1 und ungerade sein. Im Falle eines privaten Schlssels gilt
somit folgendes:
1. e != 1
2. p*q = n
3. e*d = 1 mod (p-1)(q-1)
4. p*u = 1 mod q
Das war es auch schon im Groen und Ganzen. Das hier ist sicherlich keine
detaillierte mathematische Erklrung oder Formel. Das wrde an der Stelle doch
etwas zu weit fhren. Die Grundlagen sind damit jedoch erklrt.

Seite 3 von 12

4. Bentigte Tools
Die Berechnungen des private Key fhrt man am einfachsten auf einem Linux
System durch. Ich verwende hier ein Ubuntu 16.10 Server System und nutze nur
die sogenannte Shell, also Command Line oder Befehlszeile, denn mehr ist auch
nicht notwendig.
Unter dem Punkt 5. Vorbereitung

finden Sie alle Befehle um nach der

Installation von Ubuntu die notwendigen zustzlichen Pakete installieren zu


knnen.
Bentigt wird nun folgendes:
1. Ubuntu 16.10 ISO Image
2. VirtualBox oder andere Virtualisierung ist ausreichend zum testen
3. OpenSSH
4. Python
5. MSIEVE
http://sourceforge.net/projects/msieve
Fr

die

Windows

Version

wird

noch

zustzlich

die

pthreadGC2.dll bentig, weshalb Windows hier auen vor bleibt.


6. GMPY2
https://github.com/aleaxit/gmpy
7. PyCrypto
https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto2.7a1.tar.gz
https://github.com/dlitz/pycrypto

Lassen Sie mich nun in einer Step-by-Step Anleitung zeigen, wie einfach und schnell
das Berechnen eines private Keys eines Zertifikates funktioniert.

Seite 4 von 12

5. Vorbereitung
Damit dass alles auf Ubuntu luft, habe ich hier eine detaillierte Anleitung wie b
Ubuntu und die entsprechenden Tools nutzt und installiert. Dazu installiere ich
die derzeit aktuelle Version von Ubuntu Server 16.10.
1.

Standartinstallation in Englisch mit deutscher Tastatur & OpenSSH fr Putty

2.

Update von Ubuntu APT mit folgendem Befehl:

curl
https://repogen.simplylinux.ch/txt/yakkety/sources_c1db51413069555560fda24aff25ea551eb
b674b.txt | sudo tee /etc/apt/sources.list

3.

sudo apt-get update

4.

sudo apt-get upgrade

5.

sudo apt-get dist-upgrade

6.

>>>>> REBOOT

7.

mkdir /home/cert

8.

sudo apt-get y install mc

9.

sudo apt-get y install bc

10. sudo apt-get y install python


11. sudo apt-get -y install python-dev
12. sudo apt-get -y install python3-dev
13. sudo apt-get y install build-essential
14. sudo apt-get -y build-dep python-dev
15. sudo apt-get -y build-dep python3-dev
16. sudo apt-get y install zlib1g-dev
17. sudo apt-get -y install libgmp3-dev
18. sudo apt-get -y install libmpc-dev
19. wget http://freefr.dl.sourceforge.net/project/msieve/msieve/Msieve%20v1.52/msieve152.tar.gz
20. tar zxvf msieve152.tar.gz
21. cd msieve152
22. make all
23. cp msieve /home/certs
24. cd ..
25. git clone https://github.com/aleaxit/gmpy.git
26. cd gmpy
27. python setup.py build_ext
28. python setup.py install
29. cd ..
30. git clone https://github.com/dlitz/pycrypto.git
31. cd pycrypto
32. python setup.py build_ext
33. python setup.py install
34. >>>>> REBOOT

Seite 5 von 12

6. Privaten Key errechnen Teil 1


1. Erstellen eines private Keys mit OpenSSL
openssl genrsa 256 > /home/certs/rsa256.key

2. Erstellen des public Keys mit OpenSSL


openssl rsa -pubout -in /home/certs/rsa256.key -out
/home/certs/rsa256.pub

3. Kopieren des public Keys fr Import


cp /home/certs/rsa256.pub /home/certs/rsa256.imp

4. Erstellen einer Testdatei


echo "Das ist ein Test" > /home/certs/test-file.txt

5. Verschlsseln der Testdatei


openssl rsautl -encrypt -in /home/certs/test-file.txt -pubin -inkey
/home/certs/rsa256.pub -out /home/certs/test-file.enc

6. berprfen der verschlsselten Datei


base64 /home/certs/test-file.enc

7. Lschen des private Keys


rm /home/certs/rsa256.key

8. Lschen der Orginal Datei


rm /home/certs/test-file.txt

9. Extrahieren von Modulus


KEY_HEXA=$(openssl rsa -pubin -in /home/certs/rsa256.pub -modulus | grep
Modulus | cut -d'=' -f2)

10. Vorbereitung der Faktorisierung


echo "ibase=16;$KEY_HEXA" | bc > /home/certs/worktodo.ini

11. Worktodo.ini manuell nachbearbeiten alles bitte in eine Zeile schreiben

Seite 6 von 12

12. Faktorisierung des Modulus mit msieve


/home/certs/msieve -p -v np

13. Bei mir hat es lediglich 5 Sekunden gedauert, doch selbst Standard Computer
berechnen in wenigen Minuten die beiden Primzahlen (prp39 Faktoren) p und
q. Normale Hardware bentigt etwas weniger als 3 Minuten.

Seite 7 von 12

7. Privaten Key errechnen Teil 2


Mit dem Tool GMPY2 und den beiden Primzahlen ist es nun mglich den privaten
Key

des

Zertifikates

zurckzurechnen.

Dafr

muss

nun

der

public

Key eingelesen werden. Die beiden Primzahlen die mit msieve errechnet
wurden, werden als Faktoren p und q bentigt. Die erste jeweils p, die
zweite entsprechend q.
Um gmpy2 zu nutzen, starte ich python auf dem Ubuntu System als
Befehlszeile hierfr und initialisiere gmpy2 so, damit es auch das macht, was
es machen sollte.
1. Initialisieren von gmpy2
import gmpy2
from Crypto.Cipher import ARC2
from Crypto.Hash import MD2
from Crypto.Util.number import bytes_to_long, long_to_bytes
from Crypto.PublicKey import RSA

2. Importieren des public Keys


Dazu ist es notwendig den public Key etwas zu modifizieren, wofr zu
Beginn die Datei rsa256.imp erstellt wurde. Die Datei wird bearbeitet und
Anfange kommt pub = RSA.importKey(""", am Ende kommt ein """) zum
Bereitstellen fr den Import.

Seite 8 von 12

Jetzt wird der public Key mit Copy & Paste in die Python Befehlszeile
eingefgt und mit Return besttigen.

3. Modulus und ffentlicher Exponent auslesen


n = long(pub.n)
e = long(pub.e)

Beide Werte lassen sich nun mit print n und print e entsprechend
anzeigen.

4. Privaten Exponent auslesen


Mit den beiden Primzahlen aus der Fakturierung mit msieve lt sich nun
der private Exponent berechnen. Einfach mit Copy & Paste die beiden
Primzahlen jeweils mit Buchstaben und dem Gleichheitszeichen in die
Befehlszeile entsprechend einzufgen
p = 266087866968479883483820134044973325079
q = 320776535896140418755906825782837188613

und den privaten Exponenten d berechnen zu lassen. Dafr wird folgende


Formel (Copy & Paste) bentigt:
d = long(gmpy2.invert(e,(p-1)*(q-1)))

Seite 9 von 12

5. Privaten Key anzeigen lassen


Es wurden alle Berechnungen durchgefhrt und nun setzen wir den private
Key wieder zusammen. Mit folgendem Befehl
key = RSA.construct((n,e,d))

wird der private Key endgltig wieder hergestellt. Um den private


Key anzeigen zu lassen, ist folgender Befehl erforderlich:
print key.exportKey()

Den private Key nun mit Copy & Paste wieder herstellen und berprfen,
ob die vorher verschlsselte Datei gelesen werden kann.
Dazu erstelle ich die Datei key im Verzeichnis /home/certs und fge den
entsprechenden Text dort ein.
Mit OpenSSL kann nun berprft werden, ob die zu Beginn verschlsselte
Datei wieder lesbar gemacht werden kann:
openssl rsautl -decrypt -in /home/certs/test-file.enc -inkey
/home/certs/key

Seite 10 von 12

8. Fazit
Da es sich um ein AES-256 Zertifikat handelt, ist das eine recht einfache und
unkomplizierte Angelegenheit. Handelt es sich um ein AES-512 bentigt man ein
paar Tage, bei einem 1024 kann es sich dann schon mal um Wochen handeln.
Die ersten Einwnde werden sicherlich die sein, die auf die Art der Verschlsselung
gehen. Wer nutzt denn heute noch eine AES Verschlsselung? Eine 3DES
Verschlsselung ist doch viel sicherer und kann nicht geknackt werden. Doch
auch das wre mal wieder ein gewaltiger Irrtum.
Wrde ich jetzt eine 3DES Verschlsselung nehmen, wre hier kein weiterkommen.
Zum einen wrde man andere Tools bentigen und zum anderen ist die
Rechenzeit doch etwas hher als 5 Sekunden.
Der Grte mir bekannte und kontrollierte Angriff auf eine 3DES Verschlsselung
war im Jahr 2004. Der Entwickler einer PayTV Karte hatte sich zurckgezogen
und die Fan Gemeinde hat eine spezielle Software dafr entwickelt die
Verschlsselung auf der Karte zu knacken um weiter den PayTV Sender
unverschlsselt empfangen zu knnen. Nach 5 Monaten und mit mehreren 1000
Downloads des Clients war der Schlssel in einem guten alten Brute-Force
Verfahren kein Geheimnis mehr.
Je hher der Schlssel umso hher muss natrlich auch der Aufwand sein, den
entsprechenden Schlssel zu berechnen.

Seite 11 von 12

9. Was wre wenn?


Inspiriert in einer Diskussion mit einem Bekannten kamen wir auf folgende Idee:
Wir nehmen uns alte Betriebssystem vor, holen aus diesen alten Root Zertifikate
heraus weil die noch etwas schwcher verschlsselt sind und lassen uns den
privaten Key davon berechnen.
Keine dumme Idee, denn wenn man bedenkt dass fr die Verlngerung von
Zertifikaten oder das ndern der Verschlsselung es nicht notwendig ist, den
privaten Key zu ndern. Wurden bei den bekannten RootCAs die privaten Keys
wirklich gendert? Ich wrde da aber mal gar nicht darauf wetten.
Eine ThawteCA oder GeoTrustCA als sein Eigen zu nennen, das htte was. Vor allem,
wenn man bedenkt wer alles unter diesen CAs seine Zertifikate hat.
Um es vorweg zu nehmen, wir haben es natrlich nicht gemacht, denn das
Urheberrecht sagt ganz deutlich, dass das verboten ist.
Bedenkt man nun, dass China mit seinem neuen Super Computer Sunway
TaihuLight mit 93 Petaflops (93 Billiarden Kalkulationen pro Sekunde) derzeit
der schnellste Computer der Welt ist und berlegt man wie einfach es damit
wre so eine Verschlsselung zurck zu rechnen, bezweifle ich doch sehr das sich
China vom deutschen oder europischen Urheberrecht beeindrucken lsst. Es
wre allerdings ungerecht China zu unterstellen sie wrden es tun, nur weil sie
knnten. Vllig unmglich, denn es ist schlielich erst ein Jahr her als China mit
dem Google Zertifikat herumgespielt hat und das durch ein paar technische
Fehler aufgekommen ist.
Rechnen wir hier mit etwas hheren Million Betrgen, ein spezielles Linux und ein
spezieller Kernel der ohne irgendwelche Tools auskommt, dann sind solche
Berechnungen fr 3DES Verschlsselungen zwar immer noch im 1 bis 2 Jahres
Bereich, allerdings dennoch rentabel wenn man bedenkt wie lange Root
Zertifikate gelten.
Die USA werden diese Leistung sicherlich demnchst berholen, es ist ja ein
stndiges Wettrennen. Dass die USA und China im Computer Bereich sehr eng
zusammenarbeiten ist keine unbekannte Sache. Und dann Sie lachen im
Moment? Stimmt. Es ist auch nur eine Theorie.
Doch htte Ihnen gestern jemand erklrt dass man den privaten Key von einem
Zertifikat in Minuten zurckrechnen kann, htten Sie bestimmt auch gelacht.

Seite 12 von 12