Digitale Signaturen
Erstmal einfach — Was ist eine digitale Signatur?
Wie eine Unterschrift unter einem Dokument — nur fälschungssicher und mathematisch. Du benutzt deinen privaten Schlüssel, um eine Nachricht zu „unterschreiben", und jeder kann mit deinem öffentlichen Schlüssel prüfen, dass:
- die Nachricht wirklich von dir kommt (Authentizität),
- sie unterwegs nicht verändert wurde (Integrität),
- du sie nicht später abstreiten kannst (Nichtabstreitbarkeit).
Live: ECDSA im Browser
Wir erzeugen ein Schlüsselpaar, unterschreiben eine Nachricht und prüfen die Signatur. Probier dann: verändere die Nachricht — die Verifikation schlägt fehl.
Warum eigentlich? — Wofür braucht man das im Alltag?
- Software-Updates: Dein OS prüft, dass das Update wirklich von Apple/Microsoft signiert ist — nicht von einem Angreifer im Netzwerk.
- TLS-Zertifikate: Eine Zertifizierungsstelle unterschreibt, dass dieser öffentliche Schlüssel wirklich zu „bank.de" gehört.
- Git-Commits: Mit
git commit -Skannst du beweisen, dass ein Commit wirklich von dir kam. - Kryptowährungen: Eine Bitcoin-Transaktion ist nichts anderes als eine signierte Nachricht „ich verschicke X an Y".
- PDF-/Vertrags-Signaturen, JWT-Tokens, …
Tiefer rein — Verschlüsseln ≠ signieren
Bei RSA sieht's so aus, als wären beide Operationen „dasselbe rückwärts" — das stimmt nur grob. In der Praxis:
- Verschlüsseln: Empfänger-Public-Key wird benutzt, nur Empfänger kann mit seinem Private-Key entschlüsseln.
- Signieren: Absender-Private-Key wird benutzt, jeder kann mit dem Public-Key prüfen.
Außerdem: man signiert nicht die ganze Nachricht, sondern ihren Hash (sonst wäre die Signatur so groß wie die Nachricht und unfassbar langsam). Das ist auch der Grund, warum Hash-Kollisionen für Signaturen so gefährlich sind.
Häufiger Denkfehler — Die berühmten Signatur-Fails
- PS3 (2010): Sony nutzte für ECDSA denselben Zufallswert k in jeder Signatur. Aus zwei Signaturen ließ sich der private Master-Schlüssel direkt ausrechnen. fail0verflow demonstrierte das auf der CCC-Konferenz.
- Bleichenbacher-Angriff (1998, 2017 neu): RSA-Signaturen ohne ordentliches Padding ließen sich fälschen — Angreifer konnten beliebige Werte als „signiert" durchgehen lassen.
- SHA-1-Kollisionen (SHAttered 2017): Mit dem ersten praktischen Bruch von SHA-1 konnte man zwei PDFs basteln, die denselben Hash hatten — also dieselbe Signatur. Eine harmlose Version signieren, später durch eine bösartige austauschen.