mirror of
https://github.com/theoleuthardt/hwr-notes.git
synced 2026-06-06 03:11:08 +00:00
172 lines
7.1 KiB
Markdown
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 |
|