hwr-notes/IT-Sicherheit/Hausaufgaben/solution.md
2026-04-09 11:24:56 +02:00

172 lines
7.1 KiB
Markdown

# 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
```bash
openssl dgst -md5 me.txt
openssl dgst -sha3-256 me.txt
```
### Ergebnis
| Verfahren | Hashwert |
|-----------|----------|
| MD5 | `cf48c000237cbfc026fbc9002ab5d3f3` |
| SHA3-256 | `415e2e9a0fe8e140c0b7db92faa15586b2296520a6fd3cdd93f05bc74e574808` |
### Erklärung
- `openssl dgst` berechnet 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
```bash
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
```bash
# 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
```bash
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 -sign` erstellt 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 |