secure hash algorithm, sicherer Hash-Algorithmus
1.) SHA-2
2.) SHA-224
3.) SHA-256
4.) SHA-384
5.) SHA-512
6.) SHA-512/224
7.) SHA-512/256
Algorithmus Keccak
1.) Kryptologie
2.) Kryptographie: Entwicklung von Systemen zur Verschlüsselung
3.) Kryptoanalyse: Entschlüsselung
1.) Kryptographen sind die guten
2.) Kryptoanalytiker sind die bösen
Kryptosystem
1.) Klartext
2.) Empfänger
3.) Chiffretext (Geheime Form)
4.) Verschlüsselungsmethode
5.) Schlüsselparameter
6.) Entschlüsselungsmethode
Einfache Methoden:
1.) Cäsar-Chiffre: Falls ein Buchstabe im Klartext der N-te Buchstabe im Alphabet ist, so ersetze man ihn durch den (N+K)-ten Buchstaben
2.) Leistungsstärkere Methode: Mit Alphabet drüber legen - Caesar-Chiffre - 27! > 10^28 Möglichkeiten
Möglichkeit: Mit Diagramm - manche Wörter haben in einer Sprache, eine größere Häufigkeit
Vigenere-Chiffre
1.) Caesar-Chiffre
2.) Alphabet
3.) Vigenere-Chiffre
1.) Caesar-Chiffre
2.) Vigenere-Chiffre
1.) Caesar-Chiffre
2.) Vigenere-Chiffre
3.) Vernam-Chiffre - der Schlüssel ist so lang, wie der Text: Heißer Draht
1.) Addition
2.) Bei Binär-Codierten Zahlen: XOR
Ver- und Entschlüsselungsmaschinen
- Produktchiffre: Methoden, um Kryptoanalyiter in die Irre zu führen
- nicht lineare Substitution
Kryptosysteme
- Problem der Schlüsselverteilung
- Kryptosysteme mit öffentlichen Schlüssel
- Public-Key-Systemen
Jedermanns Schlüssel: P
Geheimer Schlüssel: S
Botschaft: M
Chiffretext: C = P (M)
1.) S(P(M)) = M für jede Botschaft
2.) Alle Paare (S,P) sind verschieden
3.) Die Ableitung von S aus P ist ebenso schwer, wie das Entschlüsseln von M ohne Kenntnis des Schlüssels S
4.) Sowohl S als auch P lassen sich leicht berechnen
Allgemeines Schema: 1976, W. Diffie und M. Hellman
RSA-Cryptosysteme
- R. Rivest
- A. Shamir
- L. Adleman
große Zahlen: 200 Ziffern
Verfahren einfach:
Die Botschaft wird in Zahlen zerlegt, die kleiner N sind
Zum lg N
Danach werden diese Zahlen unabhängig voneinander zu einer Potenz Modulo N erhoben
C = P (M) = M^p mod N (Verschlüsseln)
M = S (C) = C^s
M verschlüsseln
C Entschlüsseln
ps
mod (x-1) (y-1)= 1
Der Secure Hash Algorithm, kurz SHA, und alle seine Versionen, sind kryptografische Hash-Funktionen. Entwickelt wurde SHA vom US-Geheimdienst NSA im Auftrag der US-Standardisierungsbehöre NIST.
PGP, SSL, IPsec und S/MIME.
MD4 - Message Digest 4: RSA-Miterfinder Ron Rivest
MD5 - Message Digest 5: MD4 hat Ron Rivest 1991
SHA-1 - Secure Hash Algorithm Version 1
SHA-2 - Secure Hash Algorithm Version 2: SHA-224, SHA-256, SHA-384 und SHA-512
SHA-3 - Secure Hash Algorithm Version 3: FIPS 202
SHAKE128 und SHAKE256
- Ein Ausgangs-Text beliebiger Länge wird so verarbeitet, dass daraus einen Ergebnis-Text (der Hash) mit der immer gleichen Länge entsteht.
- Es ist nahezu unmöglich, aus dem Hash den Ausgangs-Text zu berechnen.
- Außerdem kann man fast sicher davon ausgehen, dass jeder Ausgangs-Text einen anderen Hash erzeugt.
Verwendete Funktionen
- XOR
- AND
- Shift
- Sigma
Vier Sigma-Funktionen
roh0
roh1 (kleines Sigma)
Epsilon0 (großes Sigma)
Epsilon1
Insgesamt werden vier sogenannte Sigma-Funktionen verwendet. σ0 und σ1 (das kleine Sigma) bzw. Σ0 und Σ1
sigma0:
1. Der Ausgangswert wird um 7 Stellen nach rechts rotiert
2. der Ausgangs-Wert wird um 18 Stellen nach rechts rotiert
3. der Ausgangs-Wert wird um 3 Stellen nach rechts geshifted
Bei σ1 (sigma1) sieht es ganz ähnlich aus:
der Ausgangs-Wert wird um 17 Stellen nach rechts rotiert
der Ausgangs-Wert wird um 19 Stellen nach rechts rotiert
der Ausgangs-Wert wird um 10 Stellen nach rechts geshifted
Nun zu Σ0 (Sigma0). Auch hier keine großen Überaschungen, hier nun ohne Shift:
der Ausgangs-Wert wird um 2 Stellen nach rechts rotiert
der Ausgangs-Wert wird um 13 Stellen nach rechts rotiert
der Ausgangs-Wert wird um 22 Stellen nach rechts rotiert
https://de.wikipedia.org/wiki/Secure_Hash_Algorithm
https://www.dfn-cert.de/informationen/themen/verschluesselung_und_pki/openssl-kurzreferenz.html
Die beschriebenen Befehle sind Unix Shell-Kommandos. Zur besseren Lesbarkeit sind lange Befehle am Zeilenende umgebrochen, sie sind dann in der Shell ohne Zeilenumbruch einzugeben.
openssl req -newkey rsa:2048 -out request.pem -keyout pub-sec-key.pem
Generiert einen neuen 2048 Bit langen RSA-Schlüssel und legt ihn in der Datei pub-sec-key.pem ab. Passend dazu wird ein Request in der Datei request.pem erstellt.
openssl req -new -out request.pem -key pub-sec-key.pem
Wie zuvor, nur wird der Request zum bereits vorhandenen Schlüssel pub-sec-key.pem generiert.
openssl req -text -noout -in request.pem
Zeigt den Request request.pem an.
openssl req -verify -noout -in request.pem
Verifiziert die Selbstsignatur des Requests request.pem.
openssl req -noout -modulus -in request.pem | openssl sha1 -c
Generiert einen SHA1-Fingerabdruck vom Modulus des Schlüssels aus dem Request request.pem.
openssl req -x509 -days 365 -newkey rsa:2048
-out self-signed-certificate.pem -keyout pub-sec-key.pem
Generiert einen 2048 Bit langen RSA-Schlüssel und legt ihn in der Datei pub-sec-key.pem ab. Es wird ein selbst signiertes Zertifikat erstellt und in der Datei self-signed-certificate.pem gespeichert. Das Zertifikat ist 365 Tage gültig und für simple Testzwecke gedacht.
openssl req -x509 -days 365 -new -out self-signed-certificate.pem
-key pub-sec-key.pem
Wie zuvor, erstellt jedoch ein selbst signiertes Zertifikat aus einem vorhandenen Schlüssel pub-sec-key.pem.
openssl x509 -x509toreq -in self-signed-certificate.pem
-signkey pub-sec-key.pem -out request.pem
Erstellt neuen Request aus altem Selbstzertifikat.
openssl x509 -text -noout -in self-signed-certificate.pem
Gibt das Zertifikat self-signed-certificate.pem als Klartext aus.
openssl x509 -fingerprint -noout -in self-signed-certificate.pem
Gibt den Fingerabdruck des X.509 Zertifikats self-signed-certificate.pem aus. Der Default-Algorithmus ist SHA-1. Mit zusätzlicher Option -sha256 wird der Algorithmus SHA-256 verwendet.
openssl verify -issuer_checks -CAfile self-signed-certificate.pem
self-signed-certificate.pem
Überprüft ein selbst signiertes Zertifikat.
openssl s_client -showcerts -CAfile self-signed-certificate.pem
-connect www.dfn-pca.de:443
Baut eine OpenSSL-Verbindung unter Verwendung des Zertifikats self-signed-certificate.pem zum angegebenen Server auf. Es wird dabei die gesamte Zertifikatskette angezeigt.
openssl crl -noout -text -CAfile self-signed-certificate.pem crl.pem
Gibt die Zertifikats-Widerrufsliste crl.pem in Klartext aus.
openssl pkcs12 -export -inkey pub-sec-key.pem -certfile certificate-chain.pem
-out pub-sec-key-certificate-and-chain.p12 -in signed-certificate.pem
Um eine mit SSL/TLS abgesicherte Verbindung anzubieten, benötigen Sie ein Server-Zertifikat. Dieses muss von einer Zertifizierungsstelle (Certification Authority oder kurz CA) signiert sein.
1. OpenSSL installieren
2. Erstellen der CA
Legen Sie zunächst ein Verzeichnis an, in dem Sie das Zertifikat ablegen wollen. Wir nehmen in unserem Beispiel /root/ca:
root@linux# mkdir /root/ca
root@linux# cd /root/ca
Die CA enthält einen geheimen Schlüssel, welcher automatisch erzeugt und in der Datei cakey.pem
Das CA-Zertifikat wird nach cacert.pem geschrieben.
Der folgende Befehl erzeugt das einen Schlüssel für das Zertifikat mit einer Länge von 2048 Bit:
openssl req -new -x509 -newkey rsa:2048 -keyout cakey.pem -out cacert.pem -days 3650
Wer den geheimen Schlüssel der CA kennt, kann damit beliebige Server-Zertifikate signieren. Deshalb wird diese Schlüsseldatei nicht im Klartext auf der Festplatte abgelegt, sondern mit einer Passphrase verschlüsselt.
Enter PEM pass phrase: wrzlprmpft
Verifying - Enter PEM pass phrase: wrzlprmpft
Common Name (CN)
1.) Schlüssel - key
2.) Zertifikat - cert
3.) CA
3. Schlüssel für das Server-Zertifikat erzeugen
Dazu erzeugen wir zunächst einen 2048 Bit langen RSA Schlüssel, der mit AES 128 verschlüsselt auf der Platte abgelegt wird
openssl genrsa -out serverkey.pem -aes128 2048 -days 3650
4. Certificate Signing Request erzeugen CSR
openssl req -new -key serverkey.pem -out req.pem -nodes
Beim Server-Zertifikat ist der Common Name von entscheidender Bedeutung. Hier muss der DNS-Name stehen, unter dem der Client den Server anspricht! Wird das Zertifikat für eine HTTPS-Verbindung zu www.hinzag.eu verwendet
etc/ssl/openssl.cnf
6. Server-Zertifikat signieren
Certificate Authority (CA) erstellen
Eine eigene OpenSSL CA erstellen und Zertifikate ausstellen
OpenSSL bringt umfassende Werkzeuge mit, um eine eigene, kleine Certificate Authority (CA) betreiben zu können.
Certificate Authority (CA) erstellen
Zu Beginn wird die Certificate Authority generiert. Dazu wird ein geheimer Private Key erzeugt:
openssl genrsa -aes256 -out ca-key.pem 2048
Der Key trägt den Namen „ca-key.pem“ und hat eine Länge von 2048 Bit.
Die Option „-aes256“ führt dazu, dass der Key mit einem Passwort geschützt wird.
Root-Zertifikat
Das Root-Zertifikat „ca-root.pem“
openssl req -x509 -new -nodes -extensions v3_ca -key ca-key.pem -days 1024 -out ca-root.pem -sha512
1.) Als erstes erstellen wir ein Schlüsselpaar für unsere Certificate Authority (CA)
2.) Dazu erstellen wir zuerst einen Schlüssel(vpn-cakey.pem) und danach das Zertifikat(vpn-ca.pem)
Zertifikate für den Server Top
Jetzt erstellen wir die Zertifikate für die Clients, dazu müssen wir
zuerst ein paar Vorbereitungen treffen:
Ein Certificate Signing Request (CSR; deutsch Zertifikatsignierungsanforderung) oder Certification Request
Public-Key-Infrastruktur
https://wiki.ubuntuusers.de/CA/
Eine "Certification Authority" (CA / Zertifizierungsstelle) ist eine Instanz, die digitale Zertifikate ausstellt und beglaubigt.
Paket ca-certificates
selbstsignierten Zertifikate
CAs sind wesentlicher Bestandteil einer PKI (Public-Key-Infrastruktur)
- CA
- PKI
- TLS-verschlüsselte Verbindung zum Server
Signatur ins Server-Zertifikat
privater Schlüssel in RSA-Format erstellen
übliche Dateiendung: key
Außerdem: Zertifizierungsantrag, csr. Certificate Signing Request
Ein Certificate Signing Request (CSR; deutsch Zertifikatsignierungsanforderung) oder Certification Reques ist ein digitaler Antrag, mittels einer digitalen Signatur aus einem öffentlichen Schlüssel ein digitales Zertifikat zu erstellen.
Zwei Dateien:
1.) beispiel.key
2.) beispiel.csr
Der Zertifizierungsantrag wird zum Signieren an eine CA übertragen
Man hat einen CSR - einen Certificate Signing Request - das ist ein Antrag - eine Datei - aber die ist ein Antrag - und den schickt man einer CA - und: Die signiert das - also beglaubigt das. Die CA kann man selber betreiben - das ist nicht offiziell. Dann heißt CA nicht einfach, nicht das Büro in dem man sitzt - sondern ist die ganze Software-Sammlung.
Jetzt schickt man den CSR an eine CA.
PKI-Datei: Man nennt alle Dateien gesammelt - PKI-Datei
Die CA verfügt über zwei Dateien:
- ca.key
- ca.crt
Also, sagen wir so
1.) Es gibt eine CA
2.) Es gibt den Websitebetreiber
1.) Es gibt einen Schlüssel
2.) Es gibt eine Zertifikat
Schlüssel: Key
Zertifikat: CRT
In dem CRT ist der Key. Aber man hat zwei Dateien
Der Websitenbetreiber, hat
1.) Ein Zertifkat
2.) Ein Key
Die CA hat ein
1.) Zertifikat
2.) Einen Key
Damit gibt es:
1.) CA
1.1.) Key
1.2.) CRT
2.) Homepage
2.1.) Key
2.2.) CRT
Die CA kann man selber sein. Dann ist das Zertifikat selbst signiert.
Jetzt hat man noch den Zertifkatsantrag
1.) Key
2.) CRT
3.) CSR
CSR = Zertifkatsantrag
Also, man hat statisch
1.) CA
1.1.) Key
1.2.) CRT
2.) Homepage
2.1.) Key
2.2.) CRT
Jetzt das ist statisch, wenn es fertig ist. Damit die CA aber ein CRT für die Homepage erstellen kann, braucht die CA einen Antrag. Also, wenn die CA hundert Mal einen Key und einen CRT hat, dann hat der Nutzer davon nichts, wenn er keinen Antrag stellt.
Also: Antrag: CSR
1.) CA
1.1.) Key
1.2.) CRT
2.) Homepage
2.1.) Key
2.2.) CRT
2.3.) CSR
beispiel.key
beispiel.crt
beispiel.csr
CSR kann natürlich verschwinden - wenn der Antrag gestellt wurde und: Das Zertifkat da ist, kann der Antrag weg.
Dem Benutzer reicht aber das CRT der Homepage nicht. Er braucht auch das CRT des CA
ca.crt
homepage.crt
Also, er kriegt das homepage.crt und überprüft die Richtig mit dem CRT des CA.
Speicherformate:
CA-Zertifikate - also, von der CA - einem Dienst, unterscheiden sich nicht von Client und Serverzertifikaten
1.) CA-Zertifikat
2.) Client-Zertifikat
3.) Server-Zertifikat
Linux, zwei verschiedene Dateiformate:
1.) PEM-Format, Base64-kodiert
2.) DER-Format, binär kodiert (ASN.1-Format)
PEM-Format: Also, in der Datei:
BEGIN CERTIFICATE"/"END CERTIFICATE
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
In diesem Format sind sie lesbar und enthalten, Strings wie
MIIG9TCCBd2gAwIBAgISA101uy+kA82E9A89jwHfDLh1MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0I
Bemerkung: Intermediate Certificates
CA-Zertifikate hinterlegen: (Abspeichern)
- Dateien in einem Verzeichnis - alle im PEM-Format und müssen Dateiendung *.pem haben
- Einzelne Dateien mit allen CA's - in einer PEM
- NSS-Datenbank
- ...
- Hardware-Tokens, können in Hardware gespeichert werden
OpenSSL
GnuTLS
NSS
/etc/ssl/certs
Paket: Programm: ca-certificates, allgemein, anerkannte öffentliche CA-Zertifikate
Aufbau eine CA-Certificates:
1.) Subject: Beschreibung wofür
2.) Issuer: Ausstellende Instanz
Selbstsignierte Zertifikate sind keine, die über eine CA signiert wurden
1.) beispiel.key
2.) beispiel.csr
3.) Signieren
4:)
Es gibt die Möglichkeit, dass sie
CRT, CSR, KEY heißen.
CRT: Zertifikat
CSR: Antrag
KEY: Schlüssel
Oder sie heißen alle PEM, weil sie im PEM Format sind.
Dann heißen die entsprechend
req.pem
cert.pem
key.pem
Certificate Authority (CA) erstellen
openssl genrsa -aes256 -out ca-key.pem 2048
Root-Zertifikat
openssl req -x509 -new -nodes -extensions v3_ca -key ca-key.pem -days 1024 -out ca-root.pem -sha512
Root-Zertifikat auf den Clients importieren
sudo cp ca-root.pem /usr/share/ca-certificates/myca-root.crt
sudo dpkg-reconfigure ca-certificates
Ein neues Zertifikat ausstellen
openssl genrsa -out zertifikat-key.pem 4096
openssl req -new -key zertifikat-key.pem -out zertifikat.csr -sha512
openssl x509 -req -in zertifikat.csr -CA ca-root.pem -CAkey ca-key.pem -CAcreateserial -out zertifikat-pub.pem -days 365 -sha512
zertifikat-key.pem, zertifikat-pub.pem, ca-root.pem