Verschlüsselung schützt den Inhalt einer Nachricht – aber wie beweist ihr, wer sie geschickt hat? Eine E-Mail-Adresse lässt sich leicht fälschen. Was fehlt, ist das digitale Äquivalent einer handschriftlichen Unterschrift – mathematisch wasserdicht und nicht abstreitbar. Das leistet die digitale Signatur.
Nach diesem Block könnt ihr:
- erklären, was eine digitale Signatur beweist (Authentizität, Integrität, Nichtabstreitbarkeit)
- das Hash-then-Sign-Prinzip beschreiben
- RSA-PSS, ECDSA und Ed25519 als Signaturalgorithmen einordnen
- erklären, wo digitale Signaturen in der Praxis vorkommen (TLS, Code Signing, Git, PDF, S/MIME)
- ein Dokument mit OpenSSL signieren und die Signatur verifizieren
Was ist eine digitale Signatur?
Eine digitale Signatur ist das elektronische Äquivalent einer handschriftlichen Unterschrift – aber mathematisch deutlich stärker. Sie beweist gleichzeitig drei Dinge:
- Authentizität: Die Nachricht stammt wirklich von der angegebenen Person / dem angegebenen System
- Integrität: Die Nachricht wurde nach der Signierung nicht verändert
- Nichtabstreitbarkeit (Non-repudiation): Der Unterzeichner kann nicht glaubhaft behaupten, die Nachricht nicht signiert zu haben – denn nur er hat den Private Key
Wichtig: Eine digitale Signatur verschlüsselt nichts. Eine signierte E-Mail ist für jeden lesbar – aber jeder kann verifizieren, dass sie unverändert vom Absender stammt. Verschlüsselung und Signatur sind unabhängige Konzepte, die kombiniert werden können.
Das Hash-then-Sign-Prinzip
Asymmetrische Algorithmen können nur kleine Datenmengen direkt verarbeiten. Dokumente, Software oder E-Mails können Megabytes groß sein – viel zu groß, um sie direkt mit RSA oder ECC zu signieren. Die Lösung: nicht das Dokument signieren, sondern seinen Hash.
Signieren:
Dokument (beliebig groß)
↓
Hash-Funktion (SHA-256)
↓
Hash (32 Byte, feste Länge)
↓
Mit Private Key signieren
↓
Signatur (klein, feste Länge)
→ Gesendet wird: Dokument + Signatur
Verifizieren:
Empfangenes Dokument Empfangene Signatur
↓ ↓
Hash neu berechnen Mit Public Key entschlüsseln
↓ ↓
Vergleich: Hashes identisch?
↓
Ja → Signatur gültig (Dokument unverändert, Absender authentisch)
Nein → Signatur ungültig (Dokument manipuliert oder falscher Absender)
Warum funktioniert das? Weil ein kryptografischer Hash kollisionsresistent ist – es ist praktisch unmöglich, ein anderes Dokument zu finden, das denselben Hash ergibt. Wenn der Hash stimmt, stimmt das Dokument.
Was die Signatur beweist – und was nicht
Szenario: Max schickt Anna ein signiertes Dokument.
Was die Signatur beweist:
✓ Das Dokument wurde mit Max' Private Key signiert
✓ Das Dokument wurde seit der Signierung nicht verändert
✓ Nur Max kann seinen Private Key gehabt haben
Was die Signatur NICHT beweist:
✗ Dass Max den Inhalt wollte (er könnte seinen Key verloren haben)
✗ Dass das Dokument inhaltlich korrekt ist
✗ Wann genau signiert wurde (ohne Zeitstempel-Dienst)
Deshalb sind Zertifikate (Block 06) so wichtig: Sie binden den Public Key an eine Identität. Ohne Zertifikat weiß man nicht, wessen Private Key das war.
Signaturalgorithmen im Vergleich
Nicht jede Signatur ist gleich – die Wahl des Algorithmus entscheidet über Sicherheit, Geschwindigkeit und Kompatibilität. In der Praxis begegnet ihr vor allem ECDSA (in TLS-Zertifikaten) und Ed25519 (in SSH-Schlüsseln und modernen Protokollen). RSA ist Legacy – weit verbreitet, aber nicht mehr die erste Wahl für neue Implementierungen.
RSA-PSS (RSA Probabilistic Signature Scheme) Der klassische RSA-Signaturalgorithmus mit einem modernen Padding-Schema (PSS). Gut unterstützt, aber langsamer und benötigt große Schlüssel (≥2048 Bit). Ältere Implementierungen verwenden noch PKCS#1 v1.5, das als schwächer gilt.
ECDSA (Elliptic Curve Digital Signature Algorithm) Signaturverfahren auf Basis elliptischer Kurven. Viel kürzere Schlüssel als RSA bei gleicher Sicherheit. In TLS-Zertifikaten und im Bitcoin-Protokoll verbreitet. Kurven: P-256, P-384.
EdDSA / Ed25519 Modernes Signaturverfahren auf der Twisted-Edwards-Kurve Curve25519. Gilt als sicherer implementierbar als ECDSA (keine Zufallszahl-Abhängigkeit, die bei ECDSA zu Schwächen führen kann). Wird verwendet in: SSH-Schlüsseln, TLS 1.3, Signal-Protokoll, modernen Git-Signaturen.
| Algorithmus | Schlüssellänge | Geschwindigkeit | Sicherheit | Einsatz |
|---|---|---|---|---|
| RSA-PSS (2048 Bit) | Groß | Langsam | Ausreichend | Legacy-Systeme, TLS |
| RSA-PSS (4096 Bit) | Sehr groß | Sehr langsam | Hoch | Zertifikate, S/MIME |
| ECDSA (P-256) | Klein | Schnell | Hoch | TLS-Zertifikate |
| Ed25519 | Sehr klein | Sehr schnell | Sehr hoch | SSH, moderne TLS |
Wo digitale Signaturen konkret vorkommen
TLS-Zertifikate:
Jedes HTTPS-Zertifikat ist durch eine CA (Certificate Authority) digital signiert – eine vertrauenswürdige Stelle, die die Identität von Domains prüft und bestätigt (mehr dazu in Block 06). Wenn der Browser einem Zertifikat vertraut, bedeutet das: er hat die CA-Signatur verifiziert und festgestellt, dass der Public Key im Zertifikat wirklich zu example.com gehört – laut CA.
CA signiert:
Zertifikatsdaten (Domain, Public Key, Gültigkeit)
↓ Hash + CA's Private Key
CA-Signatur im Zertifikat
Browser prüft:
Zertifikat + CA's Public Key → Signatur gültig?
Ja → Browser vertraut dem Server-Public-Key
Code Signing:
Software-Hersteller signieren ihre Installer und Updates. Windows prüft beim Start einer .exe, ob die Signatur gültig ist und ob das Zertifikat vertrauenswürdig ist. Manipulierte Software hätte eine ungültige Signatur.
Microsoft Edge Update:
edge_setup.exe → SHA-256 Hash → signiert mit Microsoft's Private Key
Windows prüft: Signatur gültig + Microsoft-Zertifikat vertrauenswürdig → OK
Git-Commits signieren: Entwickler können Git-Commits und -Tags mit ihrem GPG- oder SSH-Schlüssel signieren. So ist nachweisbar, dass ein bestimmter Commit wirklich von einem bestimmten Entwickler stammt.
# Git-Commit mit GPG signieren
git commit -S -m "Feature: Login implementiert"
# Signatur eines Commits prüfen
git log --show-signature
# Tag signieren
git tag -s v1.0.0 -m "Release 1.0.0"
PDF-Dokumente: Verträge, Rechnungen und amtliche Dokumente können digital signiert werden. Adobe Acrobat und viele andere Tools unterstützen qualifizierte elektronische Signaturen (QES), die in der EU rechtlich einer handschriftlichen Unterschrift gleichgestellt sind (eIDAS-Verordnung).
S/MIME und PGP: E-Mails werden signiert, damit der Empfänger weiß, dass die Nachricht wirklich vom angegebenen Absender stammt und nicht verändert wurde (mehr dazu in Block 13).
Typischer Denkfehler
„Eine digitale Signatur verschlüsselt das Dokument.” – Nein. Eine signierte E-Mail ist für jeden lesbar. Die Signatur beweist nur, wer sie geschickt hat und dass sie nicht verändert wurde – sie macht den Inhalt nicht geheim. Für Vertraulichkeit braucht man zusätzlich Verschlüsselung. Signatur und Verschlüsselung sind unabhängige Konzepte, die kombiniert werden können, aber nicht müssen.
Digitale Signaturen mit OpenSSL
# Schritt 1: Schlüsselpaar generieren (falls noch nicht vorhanden)
openssl genrsa -out private.pem 4096
openssl rsa -in private.pem -pubout -out public.pem
# Schritt 2: Dokument signieren
# OpenSSL berechnet intern den SHA-256-Hash und signiert ihn
openssl dgst -sha256 -sign private.pem -out signatur.bin dokument.pdf
# → signatur.bin enthält die Signatur (nicht das Dokument selbst)
# Schritt 3: Signatur verifizieren
openssl dgst -sha256 -verify public.pem -signature signatur.bin dokument.pdf
# → "Verified OK" – Signatur gültig, Dokument unverändert
# → "Verification Failure" – Signatur ungültig oder Dokument manipuliert
# Ed25519-Schlüssel für Signaturen (moderner, empfohlen)
openssl genpkey -algorithm Ed25519 -out ed_private.pem
openssl pkey -in ed_private.pem -pubout -out ed_public.pem
openssl pkeyutl -sign -inkey ed_private.pem -in dokument.pdf -out signatur_ed.bin
openssl pkeyutl -verify -pubin -inkey ed_public.pem \
-in dokument.pdf -sigfile signatur_ed.bin
Probiert es selbst:
- Erstellt ein RSA-Schlüsselpaar (falls noch nicht vorhanden):
openssl genrsa -out private.pem 4096undopenssl rsa -in private.pem -pubout -out public.pem- Erstellt eine Textdatei mit einem kurzen Text:
echo "Ich bestätige die Bestellung Nr. 4711" > bestellung.txt- Signiert die Datei:
openssl dgst -sha256 -sign private.pem -out bestellung.sig bestellung.txt- Verifiziert die Signatur:
openssl dgst -sha256 -verify public.pem -signature bestellung.sig bestellung.txt– “Verified OK”?- Ändert ein Zeichen in der Datei und verifiziert erneut – was passiert?
- Diskutiert: Warum beweist dieses Experiment Integrität?
Nichtabstreitbarkeit (Non-repudiation)
Nichtabstreitbarkeit ist eine besondere Eigenschaft der digitalen Signatur: Da nur der Besitzer des Private Key eine gültige Signatur erstellen kann, kann er später nicht glaubhaft bestreiten, das Dokument signiert zu haben.
In der Praxis ist das die Grundlage für:
- Digitale Verträge (rechtsgültig gemäß eIDAS in der EU)
- Software-Releases (Hersteller kann nicht leugnen, eine Version veröffentlicht zu haben)
- Audit-Logs (signierte Log-Einträge können nicht unbemerkt verändert werden)
Unterschied zu Passwörtern:
Passwort: "Ich war das nicht, jemand hat mein Passwort gestohlen" → plausibel
Private Key: Private Key verlässt das HSM (Hardware Security Module – ein
spezieller Chip/Gerät, der Keys sicher verwahrt und nie nach außen gibt) / Gerät nie
→ Abstreitbarkeit schwieriger
Merke: Digitale Signatur = Hash-then-Sign. Private Key signiert, Public Key verifiziert. Die Signatur beweist Authentizität + Integrität + Nichtabstreitbarkeit – aber sie verschlüsselt nichts. Für Vertraulichkeit braucht man zusätzlich Verschlüsselung.
Zusammenfassung
- Eine digitale Signatur beweist Authentizität (wer hat signiert?), Integrität (wurde verändert?) und Nichtabstreitbarkeit (Unterzeichner kann nicht leugnen)
- Das Prinzip ist Hash-then-Sign: Nicht das Dokument wird signiert, sondern sein Hash – das macht Signaturen für beliebig große Dateien nutzbar
- Ed25519 ist der empfohlene Signaturalgorithmus für neue Implementierungen; ECDSA ist verbreitet, RSA-PSS ist Legacy
- Signaturen verschlüsseln nichts – sie sind unabhängig von Vertraulichkeit
Selbsttest
- Warum wird nicht das gesamte Dokument signiert, sondern nur sein Hash?
- Was beweist eine gültige Signatur – und was beweist sie nicht?
- Warum gilt Ed25519 als sicherer implementierbar als ECDSA?
Wie geht es weiter?
Symmetrisch ist schnell, asymmetrisch löst das Schlüsselproblem, Signaturen beweisen Identität – aber keines allein reicht für die Praxis. Block 05 zeigt, wie hybride Verschlüsselung alle drei kombiniert: genau das, was bei jedem HTTPS-Aufruf passiert.