Ausgewählte Aspekte der IT Sicherheit (IT Security)¶
Wichtige kryptographische Grundlagen - Kryptographie (crypography)¶
- Anwendung von Mathematik für das Problem der sicheren Kommunikation
- Fast alle Netzwerksicherheitsverfahren basieren auf Kryptographie.
- Krypographische Algorithmen (Cipher)
Anwendungen von Kryptographie¶
Folgende (Schutz)-Ziele können mit Hilfe von Kryptographie erreicht werden:
Vertraulichkeit (confidentiality) bzw. Geheimhaltung (secrecy): Daten dürfen lediglich von autorisierten Benutzern gelesen bzw. modifiziert werden, dies gilt sowohl beim Zugriff auf gespeicherte Daten, wie auch während der Datenübertragung.
Integrität (integrity): Daten dürfen nicht unbemerkt verändert werden. Alle Änderungen müssen nachvollziehbar sein.
Nicht-Abstreitbarkeit / Unbestreitbarkeit (non-repudiation): Die Authentizität einer Nachricht kann validiert werden, d.h. der/die Author:in kann nicht leugnen, dass er/sie der/die Author:in der Nachricht ist und er/sie die Nachricht so verfasst hat.
Kryptographie erlaubt die sichere Kommunikation über einen unsicheren Kanal. Dabei wird kann neben der Vertraulichkeit auch die Korrektheit der Nachricht und die Identität des Absenders gewährleistet werden.
Nebenbemerkung:
- Ein weiteres Schutzziel in der IT-Security ist Verfügbarkeit, d.h. dass ein IT-System nutzbar ist und nicht durch Unterbrechungen gestört ist.
Verschlüsselung (Encryption) $E$¶
Verschlüsselung ist der Prozess eine Nachricht im Klartext (plaintext) in ein "unlesbares" (unverständliches) Format zu überführen:
$$ C = E_K(P) $$
- $E$ Verschlüsselungsfunktion (encryption)
- $P$: Nachricht als Klartext (plaintext)
- $C$: verschlüsselte Nachricht (ciphertext)
- $K$: Der Schlüssel (key) ist ein Parameter für die Verschlüsselungsfunktion.
D.h. durch die Verschlüsselungsfunktion wird eine Nachricht in eine verschlüsselte Nachricht überführt.
Entschlüsselung (Decryption) $D$¶
$$ P = D_{K'}(C) $$
- $D$ Entschlüsselungsfunktion (decryption)
Für die Entschlüsselung benötigt man wieder einen Schlüssel $K'$:
- bei symmetischen Verfahren ist dies derselbe Schlüssel wie beim Verschlüsseln, d.h. $K=K'$. Nur dann kann die Nachricht wieder (sinnvoll) gelesen werden.
- beim asymmetrischen Verfahren benutzt man beim Verschlüsseln und Entschlüsseln zwei unterschiedliche Schlüssel (Schlüsselpaar), siehe unten. Die beiden Schlüssel müssen natürlich zueinander passen.
Kerckhoff-Prinzip¶
Typischerweise geht man davon aus, dass das Verfahren zum Verschlüsseln und Entschlüsseln öffentlich ist.
"Alle Algorithmen ($E$ und $D$) sind öffentlich. Nur die Schlüssel sind privat."
Beachte: Security by obscurity (hier: Geheimhaltung der Algorithmen) funktioniert nicht wirklich und sollte daher in der Praxis (in der Regel) nicht angewandt werden.
Bei asymmetrischen Verfahren ist einer der Schlüssel öffentlich (siehe unten).
Länge der Schlüssel¶
Brute-force Attacken (hier: Angriff mittels Ausprobieren aller möglichen Schlüssel).
Beispiel: Zahlen als Schlüssel mit Länge $l$.
Der Aufwand ist exponentiell in der Schlüssellänge (Zeichen).
Beispiel Dezimalzahlen als Schlüssel:
- $10^l = \exp(l \ln 10)$ (Exponentialfunktion)
- bei $l=3$ haben gibt es die möglichen Schlüssel $000$ bis $999$ also $10^3 = 1000$ Möglichkeiten.
Alice, Bob and Mallory¶
- In der kyrptographischen Literatur werden typischerweise die beiden Akteure, die sicher kommunizieren wollen, mit Alice und Bob bezeichnet.
- Mallory dagegen will die Kommunikation abhören bzw. Nachrichten verändern, z.B. durch eine Man-in-the-middle Attack (MitM-Attack). Bei einer MitM-Attack setzt sich der/die Angreifer:in zwischen die Kommunkationspartner:innen.
Symmetrische Verfahren (symmetric key cryptography)¶
- Alice und Bob haben beide den gleichen (geheimen) Schlüssel $K$. Diese muss zu Beginn einer Kommunikation irgendwie ausgetauscht werden.
- Hier ergibt sich das Problem, wie der Schlüssel $K$ sicher ausgetauscht werden kann.
- Symmetrische Verfahren sind sehr effizient in Bezug auf Resourcenverbrauch (wie CPU-Nutzung und Nutzdaten (payload))
Standards für symmetrische Verfahren¶
Ver- und Entschlüsseln auf der Kommandozeile per openssl
oder gpg
¶
Verschlüsseln:
openssl enc -aes-256-cbc -salt -in msg.txt -out msg.enc
Entschlüsseln
openssl enc -aes-256-cbc -d -in msg.enc -out msg.txt
Aufgabe¶
Probieren Sie oben stehenden Befehl aus. Was ist Salting?
Beim symmetrischen Verfahren ergibt sich das sogenannte Schlüsselverteilungsproblem: Wie können die beiden Kommunikationspartner den (symmetrischen) Schlüssel über einen unsicheren Kanal austauschen? Ein/e Angreifer:in könnte beim Schlüsselaustausch diesen ebenfalls erhalten.
Whitfield Diffie und Martin E. Hellman entwarfen das asymmetrische Verschlüsselungsverfahren, das dieses Problem löst.
Asymmetrische Verfahren (Public Key Cryptography)¶
- Alice erzeugt zwei (korrespondierende) Schlüssel:
- einen öffentlichen Schlüssel (public key). Dieser wird veröffentlicht.
- einen privaten Schlüssel (private key). Diesen kennt nur Alice.
- Bob tut das Gleiche, d.h. er erzeugt auch so ein Schlüsselpaar und veröffentlich seinen öffentlichen Schlüssel.
Schlüsselerzeugungsalgorithmus (key generation algorithm)¶
Ein Schlüsselpaar ($K$, $K'$) wird mit einem Schlüsselerzeugungsalgorithmus erzeugt: Dieser Algorithmus generiert einen privaten Schlüssel (private key) zufällig gleichverteilt (uniform) aus der Menge der möglichen privaten Schlüssel. Der Algorithmus gibt neben dem priaten Schlüssel auch den korresponierenden öffentlichen Schlüsel (public key) zurück.
Sichere Kommunikation¶
Wenn Bob Alice eine Nachricht senden will, verschlüsselt er die Nachricht mit dem öffentlichen Schlüssel von Alice. Da nur Alice den korresponierenden privaten Schlüssel hat, kann nur sie die Nachricht entschlüsseln. Analog verschlüsselt Alice eine Nachricht an Bob mit dem öffentlichen Schlüssel von Bob. Diese Nachricht kann dann nur Bob entschlüsseln.
Verschlüsselung und Entschlüsselung funktionieren mit zwei Algorithmen: Der Verschlüsselungsalgorithmus entspricht der Verschlüsselungsfunktion mit dem öffentlichen Schlüssel $K$. Der Entschlüsselungsalgorithmus (Entschlüsselungsfunktion) verwendet dagegen den zu $K$ korresponierenden privaten Schlüssel $K'$.
Kryptographische Hashfunktionen¶
Eine Hashfunktion nimmt als Input Daten beliebiger Menge auf und erzeugt deterministisch ein Hash-Wert fester Länge.
$$h = H(d)$$
- $d$: Datensatz (Nachricht etc.) beliebiger Länge
- $H$: Hash-Funktion/Algorithmus
- $h$: Hash-Wert mit fester Länge, d.h. die Länge ist unabhängig von der Länge von $d$.
Weitere (englische) Begriffe, die in diesem Zusammenhang einen solchen Hash-Wert bezeichnen, sind: Hash, Summary, Digest, Checksum oder Fingerprint.
Da Hashs feste Länge haben und aus beliebigen Daten berechnet werden, können Kollisionen (collisions) auftreten. Kollision bedeutet, dass zwei Datensätze $d$ und $d'$ den gleichen Hash-Wert $h$ haben. Bei geeignet langen Hash-Werten ist die Wahrscheinlichkeit der Kollision (echter Daten) bei kryptographische Hashfunktionen aber extrem gering.
Quiz "Birthday-Paradox"¶
Betrachte $n$ Personen mit zufälligen Geburtsdaten mit der Annahme, dass alle Personen nicht in einem Schaltjahr (365 Tage) geboren wurden. Bei wievielen Personen $n$ ist die Wahrscheinlichkeit, dass zwei Personen an einem Tag geboren wurden (Kollision), mindestens 50%?
- 23
- 57
- 184
- 367
Erklärung¶
Anzahl der Kombinationen $n=23$ (unterscheidbare) Personen auf $d = 365$ Tage zu verteilen, ohne dass ein Geburtstag auf den gleichen Tag fällt:
$$ 365 \cdot 364 \dots (365-23+1) = \frac{365!}{(365-23)!} $$
Anzahl der Kombinationen 23 (unterscheidbare) Personen auf 365 Tage beliebig zu verteilen: $365^{23}$
Wahrscheinlichkeit, dass von den 23 Personen alle an einem unterschiedlichem Tag Geburtstag haben, ist das Verhältnis der Kombinationen: $$ \frac{365!}{(365-23)! 365^{23} } \approx 0.4927 $$
Wahrscheinlichkeit, dass von den 23 Personen nicht alle an einem unterschiedlichem Tag Geburtstag haben:
$$ 1 -\frac{d!}{(d-n)! d^{n} } = 1-\frac{365!}{(365-23)! 365^{23} } \approx 0.5073 $$
(Gewünschte) Eigenschaften kryptographischer Hashfunktionen¶
- Entanglement: Jedes Bit des Hashwertes wird von jedem Bit des Inputs bestimmt. Wenn ein Bit des Inputs verändert wird, sollte im Durchschnitt sich jedes Hash-Bit mit einer Wahrscheinlichkeit von 50% ändern.
- Pseudo-randomness: Hashwerte sollten wie (gleichverteilte) Zufallsdaten aussehen. Es sollte keine interen Struktur bzw. Relation zum Input erkennbar sein. Alle Test auf Zufall sollten erfüllt sein.
- Nonreversibility: Wenn der Hashwert gegeben ist, ist es praktisch nicht machbar (infeasible) einen anderen Input zu generieren, der den gleichen Hashwert produziert.
Gewährleistung der Authentizität mittels digitaler Signatur¶
Alice kann eine (öffentliche oder geheime) Nachricht mit Ihrem privaten Schlüssel signieren. Dabei wird eine digitale Signatur erzeugt. Die Nachricht und die zusätzliche digitale Signatur werden an Bob (eventuell mit seinem öffentlichen Schlüssel verschlüsselt) versendet bzw. veröffentlicht. Die digitale Signatur ergibt sich aus dem Hash-Wert der Nachricht, der mit dem privaten Schlüssel von Alice verschlüsselt wird.
Bob kann die Signatur verwenden, um die Authentizität der Nachricht zu überprüfen: Mittels der Nachricht, des öffentlichen Schlüssels (von Alice) und der Signatur wird mit einem Signatur-Verifizierungsalgorithmus bestimmt, ob die Nachricht authentisch ist.
Dazu wird von Bob mit dem öffentlichen Schlüssels (von Alice) der verschlüsselte Hash-Wert entschlüsselt. Außerdem wird aus der Nachricht der Hashwert mit derselben Hash-Funktion (z.B. SHA-2), die Alice verwendt hat, berechnet. Wenn die beiden Hash-Werte gleich sind, kann man davon ausgehen, dass die Integrität der Nachricht gewährleistet ist. Das heißt, dass die empfangene Nachricht vollständig der von Alice signierten Nachricht entspricht. Wenn Mallory die Nachricht verändert, wird von Bob ein anderer Hash-Wert als der in der digitalen Signatur berechnet. Daher erkennt Bob, dass die Nachricht verändert wurde.
Außerdem wird so das Schutzziel Nicht-Abstreitbarkeit gewährleistet: Alice kann nicht abstreiten, dass die Nachricht von Ihr stammt. Nur Sie hat Ihren privaten Schlüssel und kann somit die korrekte Signatur, die zu Ihrem öffentlichen Schlüssel korresponiert, erstellen (d.h. den Hash mit Ihrem privaten Schlüssel verschlüsseln).
Kombination symmetischer mit asymmetrischen Verfahren¶
Die Performanz (Rechenaufwand) verhindern es, dass größere Datenmengen in der Praxis mittels asymmetischer Verfahren ausgetauscht werden können.
Lösungsidee:
Austausch eines "symmetrischen Schlüssels" (für ein symmetisches Verschlüsselungsverfahren) mittels Public Key Kryptographie zu Beginn der Kommunikation-Session. Der "symmetrische Schlüssel" wird dabei jedes mal zufällig und neu erzeugt. Diffie-Hellman-Schlüsselaustausch
Public Key Infrastructure (PKI)¶
Aber auch bei der asymmetrischen Kryptographie ergibt sich ein ungelöstes Problem (ähnlich zum Schlüsselaustauschproblem der symmetrischen Kryptographie):
- Wie kann der öffentliche Schlüssel, z.B. von Alice an Bob, austauscht werden, ohne dass Mallory diesen (unbemerkt) gegen seinen öffentlichen Schlüssel austauscht. Anders ausgedrückt: Wie kann die Authentizität des öffentlichen Schlüssels geprüft werden?
Mallory könnte im Kommunikationskanal zwischen Alice und Bob stehen (man-in-the-middle) und die Nachrichten immer mit seinen privaten Schlüsseln entschlüsseln. Alice und Bob haben fäschlicherweise öffentliche Schlüssel von Mallory, denken aber diese kommen von Bob bzw. Alice. Mallory kann dann die abgefangenen Nachrichten weitersenden. Zuvor verschlüsselt er diese mit den richtigen öffentlichen Schlüsseln von Alice bzw. Bob.
Lösung:
- Vertrauen in Zertifizierungsstellen (Certificate Authorities, kurz CA), die für die Echtheit (Authentizität) der öffentlichen Schlüssel (von Alice und Bob) bürgen.
Skizzierung der PKI-Idee¶
CAs signieren die öffentlichen Schlüssel von Alice und Bob (typischerweise zusammen mit weiteren Daten über Alice und Bob) mit privaten Schlüsseln der CAs. Die CAs erstellen so digitale Zertifikate für die öffentlichen Schlüssel (von Alice und Bob). Das digitale Zertifikat ist dabei ein von der Zertifizierungsstelle signierter Datensatz, in dem die Eigenschaften von Alice bzw. Bob, wie z.B. Ihre Namen, Email Adressen zusammen mit dem öffentlichen Schlüssel beschrieben sind. Üblich ist hier der Standard X.509.
Ein digitales Zertifikats hat typischerweise folgenden Inhalt:
- Name des Zertifikatinhabers,
- Zertifizierungsstelle,
- Gültigkeitsdauer,
- Seriennummer,
- öffentlicher Schlüssel des Inhabers, zur Überprüfung der Echtheit des Schlüssels,
- digitale Signatur der Zertifizierungsstelle, zur Überprüfung der Echtheit des Zertifikats.
Root-Zertifikate (optional)¶
Die Zertifikate der großen CAs (root CAs) werden als Root-Zertifikate bezeichnet. Diese liegen typischerweise auch im Standard X.509 vor. Root-Zertifikate sind unsigniert oder selbst-signiert. Im Root-Zertifikat sind die Informationen über die entsprechende root-CA und der öffentliche Schlüssel der CA enthalten.
Die Root-Zertifikate der großen CA werden typischerweise mit Betriebssystemen bzw. Webbrowsern etc. ausgeliefert (gespeichert im local trust store oer root store). Alice und Bob besitzen somit (in der Regel) die korrekten Root-Zertifikate der großen CAs. Oft gibt es auch weitere (kleinere) CAs (Intermediate CAs), die Ihre Zerfifikate von Root-CAs signieren lassen.
Wenn Alice und Bob ihre öffentlichen Schlüssel von solchen Intermediate CAs signieren lassen, können Sie über eine Chain of Trust als vertrauenswürdig angesehen werden. Eine Intermediate CA signiert, z.B. die Zertifikate von Alice und Bob. Das Zertifikat der Intermediate CA ist wiederum signiert von einer Root-CA.
Identitätsüberprüfung im Detail (optional)¶
Die Identitätsüberprüfung in einem digitalen Zertifikat, um sicherzustellen, dass es von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde und die Identität des Inhabers korrekt ist, erfolgt durch mehrere Schritte:
Vertrauenswürdige Wurzel-Zertifikate: Bob muss eine Liste von vertrauenswürdigen Wurzel-Zertifikaten besitzen. Diese Wurzelzertifikate gehören zu den Zertifizierungsstellen, denen Bob vertraut. Diese Wurzelzertifikate sind normalerweise vorinstalliert und Teil des sogenannten trust stores in Betriebssystemen und Anwendungen.
Zertifikatskette überprüfen: Das digitale Zertifikat von Alice enthält normalerweise nicht nur ihre Identitätsinformationen und den öffentlichen Schlüssel, sondern auch eine Signatur von einer Zwischenzertifizierungsstelle, die wiederum von einer übergeordneten Zertifizierungsstelle signiert wurde. Dies führt zu einer "Zertifikatskette" bis zur Wurzelzertifizierungsstelle.
Signaturen überprüfen: Bob überprüft die Signatur jedes Zertifikats in der Kette. Dies geschieht durch die Anwendung des öffentlichen Schlüssels der ausstellenden Zertifizierungsstelle auf die Signatur des Zertifikats. Wenn die Signatur überprüft werden kann, bedeutet dies, dass das Zertifikat (und somit auch der öffentliche Schlüssel) von der ausstellenden Zertifizierungsstelle signiert wurde und somit authentisch ist.
Ablaufdatum überprüfen: Bob überprüft auch das Ablaufdatum jedes Zertifikats in der Kette, um sicherzustellen, dass es noch gültig ist.
Identitätsinformationen prüfen: Bob überprüft die im Zertifikat enthaltenen Identitätsinformationen, wie den Namen und die E-Mail-Adresse, und vergleicht sie mit den erwarteten Informationen für Alice.
Wenn alle diese Überprüfungen erfolgreich sind, kann Bob sicher sein, dass Alices Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde und die darin enthaltenen Identitätsinformationen korrekt sind. Dies bildet die Grundlage für das Vertrauen in die Authentizität von Alices öffentlichem Schlüssel und somit für die Sicherheit der Kommunikation.
Beispiele für CAs):¶
- IdenTrust
- GeoTrust
- Let's Encrypt (freier Service gesponsort durch Organisationen, wie Electronic Frontier Foundation, Mozilla Foundation, Linux Foundation etc.)
certbot
Software-Werkzeug um Zertifikate von "Let's Encrypt" zu beantragen.
- CAcert (gemeinschaftsbetriebene, nichtkommerzielle Zertifizierungsstelle)
CAs nehmen (oft) Gebühren für Ihre Dienste.
Für Interessierte: Wie die automatische Beantragung von Zertifikaten bei CAs abläuft kann, ist über Automatic Certificate Management Environment (ACME) geregelt.
Web of Trust¶
Eine dezentrale Alternative zu PKI ist das Web of Trust. Das sich aber nicht wirklich breit durchgesetzt hat.
Transport Layer Security (TLS)¶
Im Internet wird in der Regel das TLS-Protokoll zur Authentifizierung und Verschlüsselung verwendet. TLS läuft als separate Schicht zwischen TCP und den Protokollen der Anwendungs- und Darstellungsschicht, d.h. es umschließt die TCP-Verbindungen. TLS garantiert dabei die Authentizität eines Servers mittels eines Zertifikat und verschlüsselt die Verbindung zwischen Client und Server.
- TLS verwendet Public-Key Kryptographie und PKI, um (zufällige) Schlüssel zwischen Knoten (Rechner) eines Netzwerks auszutauschen. Die eigentliche Kommunikation zum Datenaustausch findet dann mittels symmetrischer Verschlüsselung statt.
- TLS ist der Nachfolger von SSL, daher wird TLS auch als TLS/SSL bezeichnet.
- TLS gepaart mit HTTP ergibt HTTPS.
- Wenn Client und Server eine TLS-Connection aufgebaut haben, wird der Inhalt des Austauschs geschützt, inkl. URLs und Header-Dateien etc. Nur Host und Port der TCP-Verbindung können von einem Angreifer gelesen werden.
- Basis für sichere Anwendungen, wie Online-Banking etc.
- Typischerweise one-way TLS Encryption, d.h. Server mit Zertifikat. Aber auch two-way TLS möglich (hier muss sich auch der Client mit Zertifikat ausweisen).
SHA (Secure Hash Algorithms)¶
Die SHA-Famile (SHA-2 und SHA-3) erzeugen solche kryptographischen Hashfunktionen.
Hinweis: In der Praxis wird manchmal auch MD5 verwendet. Dieser ist aber verwundbar auf Kollisionen.
sha256sum <<< "Das ist ein beliebiger Text."
7df6d2201e904d2c028a5269a1fce420acb30d5c687a66c86705283a7aef7b9d -
# Ohne Punkt am Ende, erhält man einen komplett anderen Hashwert!
sha256sum <<< "Das ist ein beliebiger Text"
8cc1181fdde2251c11bd4f7414a6623b186d50f3b562a5255da8ccdd633633c3 -
Verifikation von heruntergeladenen Dateien¶
Für Dateien, die im Internet heruntergeladen werden können, werden oft auch Checksummen (Hashwerte) zur Verifikation angeboten. Mit diesen kann überprüft werden, ob die Datei korrekt (ohne Fehler) heruntergeladen wurde. Wenn ein Angreifer allerdings einen "falschen" Download (kompromitierte Webserver/Downloadserver) vorgaugelt, so kann er natürlich auch korrespondierende falsche Checksummen zur Verifikation anbieten.
Aufgabe (optional)¶
Studieren Sie folgenden heise-Artikel: Kryptographie-in-der-IT-Empfehlungen-zu-Verschluesselung-und-Verfahren
Zukunft der Kryptographie¶
Hinweis: Mit dem Aufkommen von Quanten-Computern werden die gängigen asymmetrischen Verschlüsselungsverfahren unsicher. Die Forschung Post-Quanten-Kryptographie versucht entsprechenden sichere Verfahren zu entwickeln, siehe z.B. https://en.wikipedia.org/wiki/Post-quantum_cryptography
openssl
¶
"OpenSSL is a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library." - von der openssl-Webseite.
Beschreibung aus der Manpage
DESCRIPTION
OpenSSL is a cryptography toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) network protocols and related cryptography standards required by them.
The openssl program is a command line tool for using the various cryptography functions of OpenSSL's crypto library from the shell. It can be used for
o Creation and management of private keys, public keys and parameters
o Public key cryptographic operations
o Creation of X.509 certificates, CSRs and CRLs
o Calculation of Message Digests
o Encryption and Decryption with Ciphers
o SSL/TLS Client and Server Tests
o Handling of S/MIME signed or encrypted mail
o Time Stamp requests, generation and verification
Sehen Sie sich die Manpage zu
openssl
an:man openssl
Mit
openssl help
können Sie sich dieopenssl
Kommandos auslisten lassen.Mit
openssl help kommando
erhalte Sie die Beschreibung, wie ein spezielles Kommando benutzt wird, z.B.:
openssl version
OpenSSL 1.1.1 11 Sep 2018
openssl help genrsa
Usage: genrsa [options] Valid options are: -help Display this summary -3 Use 3 for the E value -F4 Use F4 (0x10001) for the E value -f4 Use F4 (0x10001) for the E value -out outfile Output the key to specified file -rand val Load the file(s) into the random number generator -writerand outfile Write random data to the specified file -passout val Output file pass phrase source -* Encrypt the output with any supported cipher -engine val Use engine, possibly a hardware device -primes +int Specify number of primes
Erzeugen eines Private/Public Keypaares mit openssl
¶
Zwei Bash-Variablen für Dateinamen:
# Privacy Enhanced Email (pem) Format
private_keyfile="private.pem"
public_keyfile="public.pem"
Erzeugung des privaten Schlüssles interaktiv auf der Kommandozeile:
genrsa
ist das (Unter-)Kommando
openssl genrsa -out ${private_keyfile} 2048
Generating RSA private key, 2048 bit long modulus (2 primes) ............+++++ ..+++++ e is 65537 (0x010001)
Oft ist es sinnvoll den Private-Key mit einem symmetrischen Verschlüsselungsalgorithus zu schützen. Der Befehl ist dann
openssl genrsa -aes128 -out ${private_keyfile} 2048
aes128
verschlüsselt den Private Key mit einem symmetrischen Verschlüsselungsalgorithmus (AES)
Dabei wird eine Passphase
festgelegt, die später auch immer interaktiv eingegeben werden muss, wenn der Private-Key verwendet wird. Die Passphase dient dazu.
Hinweis: Der private Schlüssel muss gut verwahrt werden und darf auf keinen Fall weitergegeben werden etc. Hier nur zur Demonstration, wie ein private Keyfile aussieht. Diesen verwende ich aber natürlich nicht.
Erzeugen des korrespondierenden öffentlichen Schlüssels. Falls der Private-Key mit AES verschlüsselt wurde, hier die Passphase abgefragt:
openssl rsa -in ${private_keyfile} -pubout -out ${public_keyfile}
writing RSA key
cat ${public_keyfile}
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs4FlI8fG3xU70x/tZ03P sWPGJPxeYIBhp9ykEDC24c/a9fVYzXUkA/M04G4WuT8TIuWrt7laBx48CNpWnXak fbleELyxmG2MkdHbd++h7HioNZyGhnw4WOIyBsf7BmmVVNX956w7OMACSOhdUgqx es5Fd6YW9vwJGrT13p/hzSTL7h9dU9C2jJVaAy0IhAY1LpB5PGIYzsu3QxcNkeXV gX36IS2IqPmsjtHxINHE6ClOCswRPpCiTyVZV74XDu88+eO8x7KLy4txyON8Ndbb 4B1ii27MOY7K7WfqO27Oqsbzx+RJyJ4cUTBtGORMNbb/bszqBZjCZWAhf+5YL+A4 TwIDAQAB -----END PUBLIC KEY-----
Digitale Signatur mit openssl
¶
Recap: Mittels einer Digitalen Signatur lässt sich eine Nachricht unterschreiben mittels des privaten Keys und der Passphrase.
Dann kann mittels des öffentlichen Schlüssels überprüft werden, ob die Signatur gültig ist.
# Nachricht in Datei
filename="my_message.txt"
echo -e "Das ist meine Nachricht: Ja, glaubt mir.\nIch habe immer Recht." > $filename
Unterschreiben (Signieren) einer Nachricht mittels eines privaten Schlüssels¶
Die Nachricht kann mit dem private Key signiert werden. Falls der Private-Key mit AES verschlüsselt wurde, muss hier natürlich wieder die Passphase interaktiv eingegeben werden:
signature_file="signature.sha256"
openssl dgst -sha256 -sign $private_keyfile -out binary.$signature_file.sha256 $filename
Nebenbemerkung: Binärdateien können mittels hexdump
angezeigt werden
hexdump binary.$signature_file.sha256
0000000 5a03 9021 cd89 2260 9cfc d906 d904 8ea7 0000010 a01e 5ff1 ff65 485e f033 2924 b382 f448 0000020 5b78 82ce 65d5 d5f4 039b 3295 6fee 8769 0000030 7c28 b220 7367 cd39 dfd5 c938 c00d 735d 0000040 481e b280 b329 1143 b6cc e13e e554 d397 0000050 2a6e 5799 37fa bfed 4c1c cea2 a166 d712 0000060 ea93 31e5 e86d 06ad f258 7b9c bf3b 9c14 0000070 a04d 4aa4 d90d 518c f7cd 70e6 ac06 58b5 0000080 ef60 4c21 efec b7ce e25a c999 c012 c4ac 0000090 4cd3 8827 a598 db7b 1ea0 8d79 1329 606f 00000a0 d7c2 426c a5c0 f0ef 7bff 0894 9649 da3d 00000b0 7fb3 07c9 8ad5 5a40 04b8 0385 bb72 f2f4 00000c0 1455 8409 7ceb da7e 9666 7ad2 86a8 90ea 00000d0 61a3 84e9 eb80 d8c0 386a 393f 4ee2 c200 00000e0 2271 4fbe 2519 3e2c e5e7 b8d3 92ad 598a 00000f0 1e29 4bfc 47c9 2261 a9e0 f321 33df 5a17 0000100
Die Signatur kann man auch mittels Base64 in eine ASCII-Textdatei umwandeln:
openssl base64 -in binary.$signature_file.sha256 -out $signature_file
cat $signature_file
A1ohkInNYCL8nAbZBNmnjh6g8V9l/15IM/AkKYKzSPR4W86C1WX01ZsDlTLub2mH KHwgsmdzOc3V3zjJDcBdcx5IgLIps0MRzLY+4VTll9NuKplX+jftvxxMos5moRLX k+rlMW3orQZY8px7O78UnE2gpEoN2YxRzffmcAastVhg7yFM7O/Ot1rimckSwKzE 00wniJile9ugHnmNKRNvYMLXbELApe/w/3uUCEmWPdqzf8kH1YpAWrgEhQNyu/Ty VRQJhOt8ftpmltJ6qIbqkKNh6YSA68DYajg/OeJOAMJxIr5PGSUsPufl07itkopZ KR78S8lHYSLgqSHz3zMXWg==
Validieren¶
Überprüfen, ob die Signatur mit der Datei zusammenpasst:
Eventuell muss man die binäre Signatur für openssl
aus der Textdatei erzeugen:
openssl base64 -d -in $signature_file -out binary.$signature_file.sha256
Das eigentliche Verifizieren erfogt mittels:
openssl dgst -sha256 -verify $public_keyfile -signature binary.$signature_file.sha256 $filename
Verified OK
Nachrichten verschlüsseln und entschlüsseln¶
Verschlüsseln der Nachricht mit dem Public-Key:
openssl rsautl -encrypt -inkey $public_keyfile -pubin -in $filename -out $filename.enc
hexdump -C $filename.enc
00000000 2d 08 94 8e 9e e0 b6 36 1a 8d 97 d0 d9 41 3a ad |-......6.....A:.| 00000010 31 bb e0 eb 90 15 17 9c 63 fa ab 7d 45 3c 68 ab |1.......c..}E<h.| 00000020 a5 5b 64 f1 fe 95 79 6e fa be 15 a1 5e 8b b0 58 |.[d...yn....^..X| 00000030 3f e5 b9 24 92 af b0 34 dc 4f d1 ef 0b 00 a7 39 |?..$...4.O.....9| 00000040 b8 51 e1 83 fc 98 68 f9 71 99 57 22 27 91 e6 1e |.Q....h.q.W"'...| 00000050 3c 19 c7 74 09 c5 5b a6 76 56 89 23 ff af 73 16 |<..t..[.vV.#..s.| 00000060 91 50 eb 18 f4 e3 ca 4a f7 6a 49 b6 94 32 82 a6 |.P.....J.jI..2..| 00000070 c2 ad 6c 65 57 78 d3 87 98 31 a2 29 d9 09 9a 67 |..leWx...1.)...g| 00000080 77 43 d4 d7 97 8f 95 79 01 88 63 05 3e 30 16 90 |wC.....y..c.>0..| 00000090 8f b5 56 e3 42 54 2d e1 cc b7 59 f2 3e 58 41 ff |..V.BT-...Y.>XA.| 000000a0 af f2 8b eb 5b 2c 49 0e 7c bc 19 19 1a f5 7b 81 |....[,I.|.....{.| 000000b0 6e 0c 84 cf a2 5a e7 85 fc 33 9b b5 ba 97 00 8e |n....Z...3......| 000000c0 f4 b9 5b ad d7 46 40 79 b7 bd ff db 54 ef 19 d2 |..[..F@y....T...| 000000d0 1c 8f c6 2e 46 de ec 5f 31 7e fb 79 23 65 ee 89 |....F.._1~.y#e..| 000000e0 f3 66 f3 23 ad b4 28 c3 1b 6a be 31 46 ec 97 6f |.f.#..(..j.1F..o| 000000f0 cb 8d fa be a2 38 c5 3a 76 ff c5 7b 9b c2 96 35 |.....8.:v..{...5| 00000100
openssl rsautl -decrypt -inkey $private_keyfile -in $filename.enc > top_secret.txt
cat top_secret.txt
Das ist meine Nachricht: Ja, glaubt mir. Ich habe immer Recht.
Aufgabe (optional)¶
- Suchen Sie sich ein/e Kommiliton(en/in) und spielen Sie eine asymmetrisch verschlüsselte Kommunikation per verschlüsselter Text-Datei mit
openssl
über einen ungeschützen Kanal (z.B. per Email-Anhänge) durch:
- Erzeugen Sie zuerst die Private-Public Keys mit
openssl
. Wieviele Schlüsselpaare benötigen Sie? - Public-Key Austausch: Tauschen Sie die Schlüssel (vertrauenwürdig) aus.
- Welche Schlüssel erhält der Kommunikationspartner?
- Wieso ist der Austausch in der Praxis bei Kommunikationspartnern, die sich z.B. nicht persönlich treffen können, schwierig? Was ist das Problem dabei? Welche Lösungen wurden hierfür entwickelt?
- Schreiben Sie eine verschlüsselte Nachricht und und übermitteln Sie diese an die/den Kommunikationspartner/in. Diese/r soll mit einer verschlüsselten Nachricht antworten(, die der Empfänger natürlich entschlüsseln kann).
- Wie kann dabei gewährleistet werden, dass eine Nachricht wirklich von ihrem Kommunikationspartner stammt. Beachten Sie dabei, dass der Public-Key im Allgemeinen jedem/jeder bekannt ist. Wie müssen Sie Kommunikations-Schema erweitern, dass dies gewährleistet wird. Spielen Sie dies auch dann wieder (wie oben) durch.
Hinweis: Schreiben Sie Shellskripte, in denen Sie die openssl
-Befehle verwenden, um die Benutzung einfacher zu machen.
Datei für Zertifikatsantrag bei CA¶
Mitte Hilfe des openssl-Kommandos req
lässt sich ein eine Datei für einen Zertifikatsantrag
bei einem CA stellen:
openssl req --new -sha256 -key ${public_keyfile} -out ${csr_file}
CSR steht für Certificate Signing Request
mehr hierzu siehe z.B. https://www.keycdn.com/blog/openssl-tutorial
PGP - Pretty Good Privacy für Email-Verschlüsselung¶
Verschlüsselte (signierte) Emails lassen sich per PGP (Standard OpenPGP) austauschen, z.B. mit der GnuPG-Implementierung, siehe auch https://gnupg.org/. Gängige Email-Clients unterstützen dies.
Aufgabe:¶
- Arbeiten Sie das Tutorial https://wiki.ubuntuusers.de/GnuPG/ durch und erzeugen Sie ein Schlüsselpaar. Richten Sie anschließend Ihren Email-Client entsprechend ein. Tauschen Sie ggf. die öffentlichen Schlüssel mit Ihren Kommiliton:innen aus.
Hinweis: Wenn Sie die Schlüssel auf der Kommandozeile mit gpg
erzeugen und anschließend in ein Email-Programm, wie Thunderbird, importieren wollen, so müssen Sie auch den privaten Schlüssel exportieren, z.B. mit
gpg --export-secret-keys --armor > my-secret-keys.asc
, siehe auch man gpg
.
Weitere IT-Security Themen¶
Aufgabe: Studieren Sie folgende grundlegenden Hinweise zur Sicherheit:¶
Aufgabe¶
Beantworten Sie folgende Fragen:
- Was ist ein Digitales Zertifikat? Wozu dient es und wie wird dabei das Vertrauen gewährleistet?
- Was ist Spoofing?
VPN - Virtual Private Network¶
Aufgabe (optional)¶
Lesen Sie folgende Informationen über Virtual Private Networks vom BSI.
Aufgabe (optional)¶
Installieren Sie den openconnect-Client auf Ihrer Maschine und richten die VPN Verbindung zur HTW Berlin ein. Hinweis: Nicht parallel mit dem Cisco-Client einrichten.
- Gateway:
vpncl.htw-berlin.de
- Überprüfen, ob das Zertifikat vorhanden ist:
ls /etc/ssl/certs/T-TeleSec_GlobalRoot_Class_2.pem
VPN-Verbindung aufbauen auf der Kommandozeile: sudo openconnect vpncl.htw-berlin.de
.
Eventuell mit weiteren Optionen:
authgroup="HTW-SSL-VPN-Split"
etc.
sudo openconnect vpncl.htw-berlin.de --authgroup=${authgroup} --user=${user}
Für Nutzung in der graphischen Oberfläche Gnome, siehe https://rz.htw-berlin.de/anleitungen/vpn/linux2/
Penetration Testing (optional)¶
Aufgaben: (Recherche):
- Was ist Penetration Testing? Was für Typen von Penetration Tests gibt es? Informieren Sie sich bei Interesse, z.B. mittels des Praxis-Leitfaden: IT-Sicherheits-Penetrationstest des BSI
Hinweis:
Neben den (bereits, erwähnten bzw. behandelten) Netzwerk-Werkzeugen, wie z.B. nmap
, netcat
gibt es hierzu auch spezielle entwickelte Werkzeuge:
Verschlüsselung von Festplatten bzw. Verzeichnissen¶
Aufgaben (optional):¶
- Richten Sie auf Ihrem Linux-Rechner ein verschlüsseltes Verzeichnis ein, z.B. mit ecryptfs, siehe https://wiki.ubuntuusers.de/ecryptfs/Einrichten/
Literatur¶
- E. Nemeth et al, Unix and Linux System Administrator Handbook, fifth edition, 2018 Pearson Education
- J. Woods, Understanding Public Key Infrastructure and X.509 Certificates, Linux Journal 2019