# 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 |