OpenSSL¶
OpenSSL ist eine leistungsstarke Open-Source-Implementierung von SSL (Secure Sockets Layer) und TLS (Transport Layer Security) Protokollen. Es enthält eine Vielzahl von Werkzeugen zum Erzeugen und Verwalten von Schlüsseln und Zertifikaten. 2
Befehle zur Schlüssel- und Zertifikatserzeugung:¶
- Private Key generieren:
openssl genpkey -algorithm RSA -out private_key.pem -aes256
- Öffentlichen Schlüssel extrahieren:
openssl rsa -pubout -in private_key.pem -out public_key.pem
- Zertifikatsignierungsanforderung (CSR) erstellen:
openssl req -new -key private_key.pem -out request.csr
- Selbstsigniertes Zertifikat erstellen:
openssl req -x509 -key private_key.pem -in request.csr -out certificate.pem -days 365
Weitere Befehle für OpenSSL
Schlüsselgenerierung
-aes256
: Verschlüsselt den privaten Schlüssel mit AES-256.
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:4096
-pkeyopt rsa_keygen_bits:4096
: Setzt die Schlüssellänge auf 4096 Bits.
Zertifikate
openssl req -new -key private_key.pem -out request.csr
openssl req -x509 -key private_key.pem -in request.csr -out certificate.pem -days 365
Verschlüsselung und Entschlüsselung
Hashing
OpenSSL-Befehlsoptionen
Hier sind einige allgemeine Optionen, die häufig verwendet werden:
-in
: Gibt die Eingabedatei an.-out
: Gibt die Ausgabedatei an.-aes256
,-aes-128-cbc
,-des3
: Gibt den Verschlüsselungsalgorithmus an.-salt
: Fügt Salz zu einer Verschlüsselung hinzu, um die Sicherheit zu erhöhen.-d
: Dekodiert oder entschlüsselt Daten.
Primzahlen¶
Primzahlen sind natürliche Zahlen größer als 1, die nur durch 1 und sich selbst teilbar sind. Sie spielen eine zentrale Rolle in der Kryptographie, insbesondere bei der Generierung von Schlüsselpaaren für Algorithmen wie RSA.
Befehle zur Primzahlgenerierung mit OpenSSL:¶
- Primzahl generieren:
openssl prime -generate -bits 2048
- Dieser Befehl erzeugt eine 2048-Bit-Primzahl.
- Testen, ob eine Zahl prim ist:
openssl prime -hex 0xD3A8D3B1
- Dieser Befehl überprüft, ob die angegebene hexadezimale Zahl eine Primzahl ist.
Weitere Befehle für Primzahlen
Generieren von Primzahlen
hex
: Gibt die Primzahl im hexadezimalen Format aus.safe
: Generiert eine "sichere" Primzahl, d.h. 𝑝 p ist prim und ( 𝑝 − 1 ) / 2 (p−1)/2 ist ebenfalls prim.
Testen von Zahlen auf Primzahl-Eigenschaft
RSA-Verschlüsselung¶
RSA das verbreitetste asymmetrische Verschlüsselungsverfahren (public-key cryptography). Es bildet die Grundlage für die Gewährleistung der Vertraulichkeit und Integrität von digitalen Daten. Die Entwicklung geht zurück in die 70er-Jahre auf die drei Mathematiker Ronald R ivest, Adi S hamir und Leonard A dleman.1
RSA bildet zusammen mit ECC (elliptic-curve cryptography) die beiden wichtigsten asymmetrischen Verschlüsselungsverfahren.
RSA (Rivest-Shamir-Adleman) ist ein asymmetrisches Kryptosystem, das weit verbreitet für sichere Datenübertragung eingesetzt wird. Es basiert auf der mathematischen Schwierigkeit, große Primzahlen zu faktorisieren.
- Schlüsselgenerierung: Zwei große Primzahlen (
p
) und (q
) werden gewählt. Das Produkt (n = p * q
) bildet den Modul. Der öffentliche Schlüssel besteht aus (n
) und einem Exponenten (e
) (typischerweise 65537), während der private Schlüssel aus (n
) und einem Exponenten (d
) besteht, der die Umkehrung von (e
) modulo ((p-1)*(q-1)
) ist. - Verschlüsselung: Eine Nachricht (
m
) wird mit dem öffentlichen Schlüssel verschlüsselt:c = m^e mod n
. - Entschlüsselung: Der verschlüsselte Text (
c
) wird mit dem privaten Schlüssel entschlüsselt:m = c^d mod n
.
Kongruenz - Bedeutung¶
Zwei natürliche Zahlen a und b sind zueinander kongruent, wenn diese bei der Division durch eine natürliche Zahl N den gleichen Rest (remainder) liefern. Man sagt dann "a und b sind kongruent modulo n" oder "a und b sind kongruent nach dem Modulus n". Die formale Schreibweise dazu:
Kongruenz in RSA¶
Kongruenz mit der dahinterliegenden Zahlentheorie ist der grundlegende Baustein des RSA-Verfahrens. Nachrichten werden normalerweise als Strings angesehen, die ver- und entschlüsselt werden. Jeder String ist aber letztendlich eine Folge von Bits, eine solche Folge von Bits kann aber ebenso gut als Integer bzw, natürliche Zahl interpretiert werden. Es besteht also prinzipiell eine eineindeutige (sogenannte bijektive) Beziehung zwischen einem String und einem Integer. RSA wendet ausschliesslich Integer-Operationen an. Eine Nachricht wird in RSA als Integer/natürliche Zahl repräsentiert.
Symbol | Bedeutung |
---|---|
m | unverschlüsselter Wert |
c | verschlüsselter Wert |
n | Modulus. Entspricht zusammen mit e den öffentlichen Schlüssel. |
e | Exponent für Verschlüsselung (encrypt). Entspricht (zusammen mit dem Modulus n) dem öffentlichen Schlüssel (public key). |
d | Exponent für Entschlüsselung (decrypt). Entspricht dem privaten Schlüssel (private key). |
Wahl von n, e und d¶
Für die Wahl von n, e und d gibt es zahlentheoretische Grundlagen, die auf das 17. und 18. Jahrhundert zurückgehen, zum Beispiel
- Kleiner fermatsche Satz
- Satz von Euler (Verallgemeinerung des kleinen fermatschen Satzes)
n (Modulus)¶
Im Unterschied zum obigen Beispiel sind die effektiv verwendeten Zahlen um Dimensionen grösser. Der Modulus n hat in RSA typischerweise eine Länge von 2048 oder gar 4096 Bits. Diese entspricht einer natürlichen Zahlen mit etwa 600 bis 1200 Stellen. Der gewählte Modulus n hat eine fundamentale Eigenschaft, die RSA letztendlich eine hohe Sicherheit verleiht: n ist das Produkt zweier sehr grossen Primzahlen (bis zu einige hundert Stellen lang) p und q
e (public key)¶
e (bildet zusammen mit n den public key) wird prinzipiell auch aus n abgeleitet. Heutzutage wird meistens der universelle Wert 65637 gewählt.
d (private key)¶
d (private key) wird aus e sowie p und q abgeleitet. Vor allem aber: Es gibt bis heute keine Algorithmen, die den Modulus n in vernünftiger Zeit in die beiden Primfaktoren p und q zerlegen könnten. Dies ist aber Voraussetzung, um diesen geheimen Schlüssel berechnen zu können. p und q werden nur bei der Erzeugung von n und d benötigt, danach werden diese beiden Primzahlen nicht mehr gebraucht und weggeworfen. Das macht die Stärke des RSA-Verfahrens aus.
Die Primfaktorzerlegung als "pièce de résistance" des Verfahrens steht im Kontrast zur Tatsache, dass eine grosse Zahl äusserst effizient auf prim getestet werden kann. Grosse Primzahlen können mit den heutigen Algorithmen einfach gefunden werden, was letztendlich die Grundlage zur Verbreitung von RSA beitrug.
Operationen mit sehr grossen natürlichen Zahlen | Laufzeit |
---|---|
Test auf Primzahl | schnell |
Finden einer Primzahl | schnell |
Division, Berechnung Restbetrag (mod) | schnell |
Multiplikation, Potenzen | schnell |
Primfaktorzerlegung | sehr langsam |
-
Weitere Informationen: https://www.golinuxcloud.com/openssl-cheatsheet/ ↩
-
Quelle: https://docs.google.com/document/d/143kpSF6D4UGF13yX7ubqC5HKnQnFIb2sBTf7_x4V3Uo/edit ↩