security-basics

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 Kryptography

  • 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.

Kryptography erlaubt die sichere Kommunikation über einen unsicheren Kanal. Dabei wird die Korrektheit der Nachricht und die Identität des Absenders gewährleistet.

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 plaintext
  • $C$: verschlüsselte Nachricht - ciphertext
  • $K$: Schlüssel (Parameter)

Entschlüsselung (Decryption) $D$

$$ P = D_K(C) $$
  • $D$ Entschlüsselungsfunktion (Decryption)

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 $K$ sind privat."

Beachte: Security by obscurity (hier: Geheimhaltung der Algorithmen) funktioniert nicht wirklich.

Länge der Schlüssel

Brute-force Attacken (hier: Angriff mittels Ausprobieren aller möglichen Schlüssel)

Beispiel: Zahlen als Schlüssel. Länge $l$

Der Aufwand ist exponentiell in der Schlüssellänge (Zeichen).

Alice, Bob and Mallory

  • In der kyrptographischen Literatur werden typischerweise zwei Akteure, die sicher kommunizieren 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.

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 ausgetauscht werden kann.
  • Symmetrische Verfahren sind sehr effiziert in Bezug auf Resourcenverbrauch (wie CPU Nutzung und Nutzdaten (payload))

Standards für symmetrische Verfahren

Anwendungen in SSH, TSL, IPsec, VPNs, PGP (wird später behandelt).

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 erzeugt auch so ein Schlüsselpaar.

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. Dies Nachricht kann dann nur Bob entschlüsseln.

Gewährleistung der Authentizität mittels digitaler Signatur

Alice kann ein (ö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 versendet bzw. veröffentlicht.

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.

Kombination symmetischer mit asymmetrischen Verfahren

  • Die Performanz (hier Resourcenverbrauch siehe oben) verhindern es, dass größere Datenmengen in der Praxis mittels asymetischer Verfahren ausgetauscht werden.
  • Idee: Austausch eines symmetrischen Schlüssels mittels Public Key Kryptographie zu Beginn der Kommunikation-Session. Dieser wird dabei jedes Mal zufällig neu erzeugt.

Public Key Infrastructure (PKI)

Bisher ungelöstes Problem:

  • Wie kann der öffentliche Schlüssel, z.B. von Alice an Bob, so austauscht werden, ohne dass Mallory diesen gegen seinen öffentlichen Schlüssel austauscht. Wie kann die Authentizität des öffentlichen Schlüssels geprüft werden?

Lösung:

Eine dezentrale Alternative ist das Web of Trust (das sich aber nicht wirklich durchgesetzt hat).

Skizzierung der PKI-Idee

Die CA signiert die öffentlichen Schlüssel von Alice und Bob mit Ihrem privatem Schlüssel und erstellt so ein digitales Zertifikat für die öffentlichen Schlüssel. 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.

Da der öffentliche Schlüssel der Zertifizierungsstelle Alice und Bob bekannt ist, können Sie darauf vertrauen, dass sie somit die korrekten öffentlichen Schlüssel voneinander erhalten haben, wenn sie die Zertifikate einsehen.

Die Zertifikate der großen CA werden typischerweise mit Betriebssystemen bzw. Webbrowsern etc. ausgeliefert (gespeichert im local trust store), sodass diese Alice und Bob vertrauenswürdig bekannt sind.

CAs nehmen Gebühren für Ihre Dienste.

Beispiele für CAs):

  • IdenTrust
  • GeoTrust
  • Let's Encrypt (freier Service gesponsort durch Organisationen, wie Electronic Frontier Foundation, Mozilla Foundation, Linux Foundation etc.)
  • CAcert (gemeinschaftsbetriebene, nichtkommerzielle Zertifizierungsstelle)

Transport Layer Security (TLS)

  • TSL verwendet Public-Key Kryptographie und PKIs, um Nachrichten zwischen Knoten (Rechner) eines Netzwerks auszutauschen.
  • Nachfolger von SSL.
  • TSL gepaart mit HTTP ergibt HTTPS.
  • TSL läuft als separate Schicht und umschließt so TCP-Verbindungen.
  • 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.
  • Typischerweise one-way TSL Encryption, d.h. Server mit Zertifikat. Aber auch two-way TLS möglich (hier muss sich auch der Client mit Zertifikat ausweisen).

Kryptographische Hashfunktionen

  • Eine Hashfunktion nimmt als Input Daten beliebiger Menge auf und erzeugt deterministisch ein Hash-Wert fester Länge.
  • 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. Bei geeignet langen Hash-Werten ist die Wahrscheinlichkeit bei kryptographische Hashfunktionen aber extrem gering.

(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, relation zum Input erkennbar sein. Alle Test auf Zufall sollten erfüllt sein.
  • Nonreversibility: Wenn der Hashwert gegeben ist, ist es nicht machbar (infeasible) einen anderen Input zu generieren, der den gleichen Hashwert produziert.

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.

In [1]:
sha256sum <<< "Das ist ein beliebiger Text."
7df6d2201e904d2c028a5269a1fce420acb30d5c687a66c86705283a7aef7b9d  -
In [2]:
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 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

Studieren Sie (optional) folgenden heise-Artikel: Kryptographie-in-der-IT-Empfehlungen-zu-Verschluesselung-und-Verfahren

Hinweis: Mit dem Aufkommen von Quanten-Computern werden (sind?) die gängigen asymetrischen Verschlüsselungsverfahren unsicher. Die Forschung Post-Quanten-Kryptographie versucht entsprechenden sichere Verfahren zu entwickeln, siehe z.B. https://de.wikipedia.org/wiki/Post-Quanten-Kryptographie

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 die openssl Kommandos auslisten lassen.

  • Mit openssl help kommando erhalte Sie die Beschreibung, wie ein spezielles Kommando benutzt wird, z.B.:

In [6]:
openssl version
OpenSSL 1.1.1  11 Sep 2018
In [3]:
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:

In [60]:
# 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
In [61]:
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

In [62]:
cat ${private_keyfile}
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAs4FlI8fG3xU70x/tZ03PsWPGJPxeYIBhp9ykEDC24c/a9fVY
zXUkA/M04G4WuT8TIuWrt7laBx48CNpWnXakfbleELyxmG2MkdHbd++h7HioNZyG
hnw4WOIyBsf7BmmVVNX956w7OMACSOhdUgqxes5Fd6YW9vwJGrT13p/hzSTL7h9d
U9C2jJVaAy0IhAY1LpB5PGIYzsu3QxcNkeXVgX36IS2IqPmsjtHxINHE6ClOCswR
PpCiTyVZV74XDu88+eO8x7KLy4txyON8Ndbb4B1ii27MOY7K7WfqO27Oqsbzx+RJ
yJ4cUTBtGORMNbb/bszqBZjCZWAhf+5YL+A4TwIDAQABAoIBAHqQg0pnAfcYPHzv
c93xVzq78XMXjik9/2/qS2tyl6yfi9Yc68F9llXMHfKPuJxL4PkW8KTFvh7WGg/B
ZRqnA7GEfCHZdTmqsyxtqfi+ekVILTJN6dyxvJeT+qx+p3u9Y+VFJ9Sj2Nvq3qSB
ZBa8jmpXpT8I/O0vMdg2bxrO+BJlRLhtBb98ZqOQfnss8qY6bmCK0dySH5Vqgiev
mkZ1bii9GVAsrGjTbp/mabMvc8oOOpGjfj8ti0j71Pjr3Ty/iVFXp61NwtFqeM/+
ew9/d09O7dV6gjIe18DSOOej8K+AkGLXY690e+gl9FnaveDo6tpFT2sYL6kGnJOX
/lXZMEECgYEA20Sz07RztXlRSbDx3sFaTxs6cj1HEo5vhWosgEdU0cWGI4gwgx/M
5Xkrii2Mx2eURbo4SodOi2sesXeSCHSo1ATjjVVdJbHLH9zRPO7hW8szrZl1vCyn
7mdyby5XCQLr3v88t0GO2kFNer0kBhVEPzgwL4h0yUliL4M50KKgBBcCgYEA0ZN2
8bHXTjGLxQNJHJtlmLYrbVAjCGe1SI7sU1xfJb/6HWpXCvNhDBUvt9XEC+MzCndx
4tj3kORlrjuoB1J2KA3HONLNlVZXBPM86GY5/4FStq6Z799Pv+XOtK898LP/+GlS
haaRylS1xXwLkBbAoBy0+byw2i/AIJDUAaYPOIkCgYAIucMuOZAhOKKzfAckBi3B
2COLSET7yA9ID+GVeUE219VutIy5qxpMR3YkGYvwo36TB8YVsSy+/5RJG6kEDSBq
z4b+qNb8GQcsTW1GL3toW73CusikpGJKanNzWTS9dxBL33xbDpDQvqiGqeA1HcOJ
gILqYVPEbtcpbN9wHgigIQKBgAx7KsdEHx1yB+/ovS7t9kP8/WMaNavneT1j/aEN
TEFUSJH95kcprWrpzBi3q2BF3KFP8cFfyIahg4i31s7w00aZY3b33vR42t/ZmJQC
mouj6QgmJ9bIRtiX2BKcqSSvo5vosdhxzhbtqpGjTJD9OeWPMBv7Z9DmrRuDZIzg
leF5AoGBALFQegLynwclH88sb/ammeSK1MXOniXTAjGKRlTxPGE2zjLoIf9uc657
DH0wSem2z7Q/fr2LFxHjnzNi2JO3r75qRoAvDvNu5IfbMTHzbhJ4/F7ChsjLeqgk
+Af/t1dwfcv474mBn0fhwmzOb7wyrkn1AxDZZchaqMWqmiCX0fNh
-----END RSA PRIVATE KEY-----

Erzeugen des korrespondierenden öffentlichen Schlüssels. Falls der Private-Key mit AES verschlüsselt wurde, hier die Passphase abgefragt:

In [63]:
openssl rsa -in ${private_keyfile} -pubout -out ${public_keyfile}
writing RSA key
In [64]:
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.

In [65]:
# 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:

In [66]:
signature_file="signature.sha256"
In [70]:
openssl dgst -sha256 -sign $private_keyfile -out binary.$signature_file.sha256 $filename

Nebenbemerkung: Binärdateien können mittels hexdump angezeigt werden

In [86]:
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:

In [80]:
openssl base64 -in binary.$signature_file.sha256 -out $signature_file
In [81]:
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:

In [76]:
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:

In [82]:
openssl rsautl -encrypt -inkey $public_keyfile -pubin -in $filename -out $filename.enc
In [84]:
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
In [87]:
openssl rsautl -decrypt -inkey $private_keyfile -in $filename.enc > top_secret.txt
In [88]:
cat top_secret.txt
Das ist meine Nachricht: Ja, glaubt mir.
Ich habe immer Recht.

Aufgabe

  1. 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).
  2. 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

Verschlüsselte (signierte) Emails lassen sich per PGP austauschen, z.B. GnuPG austauschen, siehe z.B. https://gnupg.org/. Gängige Email Clients unterstützen dies, für ein Tutorial siehe z.B. https://wiki.ubuntuusers.de/GnuPG/

Optionale Aufgabe:

  • Arbeiten Sie das Tutorial durch und richten Sie Ihren Email Client entsprechend ein. Tauschen Sie die öffentlichen Schlüssel mit Ihren Kommilitoninnen/en aus.

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/

Aufgabe (optional): Firewall

Recherchieren Sie zum Thema Firewall. Was ist eine Firewall und wozu dient Sie. Richten Sie ggf. auf Ihrem Rechner eine Firewall ein. Einfache Programme hierzu sind ufw und firewalld. Profi-Programme sind nftables und das in die Jahre gekommene iptables.

Literatur