/media/sda-magnetic/david/Dok-15-2023-11-27/fernuni-hagen/cs-i-ii/old-cs-2-02/verschlüsselung.txt


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