7.1 KiB
Lösung — Übung 1 IT-Sicherheit
Theo Leuthardt | s_leuthardt23@stud.hwr-berlin.de
Aufgabe 2: Kryptographische Fingerabdrücke
Was wird gemacht?
Aus der Datei me.txt (enthält Name + Email) werden zwei Hashwerte berechnet: MD5 und SHA3-256. Ein Hash ist ein "digitaler Fingerabdruck" — eine feste kurze Zeichenkette, die sich komplett ändert, sobald auch nur ein Zeichen in der Datei verändert wird.
Befehle
openssl dgst -md5 me.txt
openssl dgst -sha3-256 me.txt
Ergebnis
| Verfahren | Hashwert |
|---|---|
| MD5 | cf48c000237cbfc026fbc9002ab5d3f3 |
| SHA3-256 | 415e2e9a0fe8e140c0b7db92faa15586b2296520a6fd3cdd93f05bc74e574808 |
Erklärung
openssl dgstberechnet kryptographische Hashwerte- MD5 erzeugt einen 128-Bit-Hash (32 Hex-Zeichen). MD5 gilt heute als unsicher (Kollisionen möglich), wird aber noch als Prüfsumme verwendet.
- SHA3-256 erzeugt einen 256-Bit-Hash (64 Hex-Zeichen). SHA-3 ist der neueste Standard (Keccak-Algorithmus) und gilt als sicher.
Aufgabe 3: Verschlüsselung mit AES-256
Was wird gemacht?
Die Datei me.txt wird symmetrisch mit AES-256 verschlüsselt. Als Schlüssel (Passwort) dient die eigene Email-Adresse.
Befehl
openssl enc -aes-256-cbc -salt -pbkdf2 -in me.txt -out me.txt.enc -pass pass:s_leuthardt23@stud.hwr-berlin.de
Ergebnis
Verschlüsselte Datei: me.txt.enc
Erklärung
| Parameter | Bedeutung |
|---|---|
enc -aes-256-cbc |
Verschlüsselung mit AES-256 im CBC-Modus (Cipher Block Chaining) |
-salt |
Fügt Zufallsdaten hinzu, damit gleiche Eingaben unterschiedliche Chiffretexte erzeugen |
-pbkdf2 |
Leitet aus dem Passwort einen sicheren Schlüssel ab (Password-Based Key Derivation Function 2) |
-pass pass:... |
Das Passwort (hier: die Email-Adresse) |
Zum Entschlüsseln: openssl enc -d -aes-256-cbc -pbkdf2 -in me.txt.enc -out me_decrypted.txt -pass pass:s_leuthardt23@stud.hwr-berlin.de
Aufgabe 4: Krypto-Software für SHA, AES, RSA und TLS
Recherche-Ergebnis
| Software | SHA | AES | RSA | TLS | Windows | MacOS | Linux |
|---|---|---|---|---|---|---|---|
| OpenSSL | ja | ja | ja | ja | ja | ja | ja |
| GnuPG (GPG) | ja | ja | ja | - | ja | ja | ja |
| VeraCrypt | ja (SHA-512) | ja (AES-256) | - | - | ja | ja | ja |
| LibreSSL | ja | ja | ja | ja | ja | ja | ja |
| Bouncy Castle | ja | ja | ja | ja | ja | ja | ja |
| wolfSSL | ja | ja | ja | ja | ja | ja | ja |
| GnuTLS | ja | ja | ja | ja | - | ja | ja |
| CryptoSys PKI Pro | ja | ja | ja | - | ja | - | ja |
| mbed TLS | ja | ja | ja | ja | ja | ja | ja |
| Cryptomator | ja | ja | - | - | ja | ja | ja |
| IIS Crypto | ja | ja | ja | ja | ja (nur) | - | - |
| Linux Crypto API | ja | ja | ja | - | - | - | ja (nur) |
Erklärung
- OpenSSL ist der De-facto-Standard und auf fast allen Systemen vorinstalliert (macOS, Linux). Unterstützt alle vier Algorithmenklassen.
- GnuPG ist die freie OpenPGP-Implementierung, primär für Verschlüsselung und Signaturen.
- VeraCrypt ist für Festplattenverschlüsselung gedacht (Nachfolger von TrueCrypt).
- LibreSSL ist ein OpenSSL-Fork von OpenBSD mit Fokus auf Sicherheit.
- Bouncy Castle ist eine Java/C#-Kryptographie-Bibliothek.
- wolfSSL und mbed TLS sind leichtgewichtige TLS-Bibliotheken, oft für Embedded-Systeme.
Aufgabe 5: RSA-1024 Schlüsselpaar
Was wird gemacht?
Ein RSA-Schlüsselpaar (1024 Bit) wird generiert: ein privater Schlüssel (geheim halten!) und ein öffentlicher Schlüssel (darf geteilt werden).
Befehle
# Privaten Schlüssel generieren
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:1024 -out private_key.pem
# Öffentlichen Schlüssel extrahieren
openssl pkey -in private_key.pem -pubout -out public_key.pem
Ergebnis
Öffentlicher Schlüssel (public_key.pem):
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5a3V/wKvUXdHPa6CghgGLbdGy
x7s4FkqKwkYPr+Wa9DkEQQTv8k+LNNGtXXqFR9VAINuRiOW4Qzz8yrJplU4AO3jO
izfru7awDSM9MG37gvM3zHPfXf4nfBImfDOXk66RxAQHrCrzsrOQ7BqFm8ueo07I
171OKgcGfrIUmTCM/wIDAQAB
-----END PUBLIC KEY-----
Erklärung
- RSA ist ein asymmetrisches Verschlüsselungsverfahren mit zwei Schlüsseln.
- Der private Schlüssel wird zum Entschlüsseln und Signieren verwendet — darf niemals weitergegeben werden.
- Der öffentliche Schlüssel wird zum Verschlüsseln und Verifizieren verwendet — kann frei verteilt werden.
- 1024 Bit gilt heute als unsicher für produktive Systeme (mindestens 2048 Bit empfohlen), reicht aber für diese Übung.
Aufgabe 6: Datei signieren
Was wird gemacht?
Die Datei me.txt wird mit dem privaten RSA-Schlüssel digital signiert. Damit kann jeder mit dem öffentlichen Schlüssel verifizieren, dass die Datei tatsächlich von dir stammt und nicht verändert wurde.
Befehl
openssl dgst -sha256 -sign private_key.pem -out me.txt.sig me.txt
Ergebnis
Signatur-Datei: me.txt.sig
Signatur (Base64):
hHWGEu44cmgXi9YYGpLYEnuTg4LmArqMB5mCMs9wdVhBlIDPGa0AFVVnp52AD9pG
wAf/i57PwKeT/bCRXpFc+9lOapQFnL6jDWEX/CdNak3yXkLgzIIQVm4BVpKvOlsU
VnHT0cP73+SlT8pCjUq7Ub2bIGvmJVBMcfLrDiVLjXU=
Erklärung
openssl dgst -sha256 -signerstellt zuerst einen SHA-256-Hash der Datei und verschlüsselt diesen dann mit dem privaten Schlüssel.- Zur Verifikation:
openssl dgst -sha256 -verify public_key.pem -signature me.txt.sig me.txt - Eine digitale Signatur gewährleistet Authentizität (Absender ist echt) und Integrität (Datei wurde nicht verändert).
Aufgabe 7: Anbieter für kostenloses Public-Key-Hosting
| Anbieter | Beschreibung | URL |
|---|---|---|
| keys.openpgp.org | Offizieller OpenPGP-Keyserver, verifiziert Email-Adressen | https://keys.openpgp.org |
| keyserver.ubuntu.com | Ubuntus öffentlicher PGP-Keyserver | https://keyserver.ubuntu.com |
| GitHub | SSH/GPG Public Keys können im Profil hinterlegt werden | https://github.com/settings/keys |
| GitLab | Wie GitHub, unterstützt GPG- und SSH-Keys | https://gitlab.com |
| Keybase | Verknüpft Public Keys mit Social-Media-Identitäten | https://keybase.io |
| MIT PGP Keyserver | Einer der ältesten öffentlichen Keyserver | https://pgp.mit.edu |
Erklärung
- Keyserver sind öffentliche Verzeichnisse, in denen jeder seinen öffentlichen Schlüssel hochladen kann.
- Andere können den Schlüssel dann herunterladen, um verschlüsselte Nachrichten zu senden oder Signaturen zu verifizieren.
- keys.openpgp.org ist der modernste Ansatz, da er Email-Verifizierung erfordert (kein Spam möglich).
- GitHub/GitLab sind praktisch für Entwickler, die ihre GPG-Keys für signierte Commits nutzen.
Zusammenfassung der erstellten Dateien
| Datei | Beschreibung |
|---|---|
me.txt |
Originaldatei mit Name und Email |
me.txt.enc |
AES-256 verschlüsselte Version |
private_key.pem |
Privater RSA-1024 Schlüssel (NICHT mitschicken!) |
public_key.pem |
Öffentlicher RSA-1024 Schlüssel |
me.txt.sig |
Digitale Signatur der Datei |