Kryptografie in der Praxis - David Wong - E-Book

Kryptografie in der Praxis E-Book

David Wong

0,0

Beschreibung

Moderne Kryptografie kompetent vermittelt - Lehrbuch Basiswissen IT-Sicherheit - Relevante kryptografische Techniken - Blockchain und Post-Quantum-Kryptografie Die Kryptografie ist die wesentliche Grundlage der IT-Sicherheit. Um den Angreifern auf Ihre Systeme einen Schritt voraus zu sein, müssen Sie die Tools, Frameworks und Protokolle verstehen, die Ihre Netzwerke und Anwendungen schützen. Dieses Buch führt in einfacher Sprache und mit anschaulichen Illustrationen in Authentifizierung, Verschlüsselung, Signaturen, Geheimhaltung und andere Kryptografiekonzepte ein. Es enthüllt die kryptografischen Techniken, die die Sicherheit von Web-APIs, die Registrierung und Anmeldung von Benutzern und sogar die Blockchain bestimmen. Sie erfahren, wie diese Techniken moderne Sicherheit ermöglichen und wie Sie sie in Ihren eigenen Projekten anwenden können. Neben den modernen Methoden nimmt das Buch auch die Zukunft der Kryptografie vorweg und geht auf neue und innovative Entwicklungen wie Kryptowährungen und Post-Quantum-Kryptografie ein. Alle Techniken sind vollständig mit Diagrammen und Beispielen illustriert, so dass Sie leicht erkennen können, wie sie in die Praxis umgesetzt werden können.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 675

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Copyright und Urheberrechte:

Die durch die dpunkt.verlag GmbH vertriebenen digitalen Inhalte sind urheberrechtlich geschützt. Der Nutzer verpflichtet sich, die Urheberrechte anzuerkennen und einzuhalten. Es werden keine Urheber-, Nutzungs- und sonstigen Schutzrechte an den Inhalten auf den Nutzer übertragen. Der Nutzer ist nur berechtigt, den abgerufenen Inhalt zu eigenen Zwecken zu nutzen. Er ist nicht berechtigt, den Inhalt im Internet, in Intranets, in Extranets oder sonst wie Dritten zur Verwertung zur Verfügung zu stellen. Eine öffentliche Wiedergabe oder sonstige Weiterveröffentlichung und eine gewerbliche Vervielfältigung der Inhalte wird ausdrücklich ausgeschlossen. Der Nutzer darf Urheberrechtsvermerke, Markenzeichen und andere Rechtsvorbehalte im abgerufenen Inhalt nicht entfernen.

David Wong

Kryptografie in der Praxis

Eine Einführung in die bewährten Tools, Frameworks und Protokolle

David Wong

Übersetzung: Frank Langenau

Lektorat: Sandra Bollenbacher

Copy-Editing: Petra Heubach-Erdmann, Düsseldorf

Satz: inpunkt[w]o, www.inpunktwo.de

Herstellung: Stefanie Weidner

Umschlaggestaltung: Helmut Kraus, www.exclam.de

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

ISBN:

Print

978-3-86490-939-9

PDF

978-3-98890-006-7

ePub

978-3-98890-007-4

mobi

978-3-98890-008-1

1. Auflage 2023

Copyright © 2023 dpunkt.verlag GmbH

Wieblinger Weg 17

69123 Heidelberg

Authorized translation of the English 1st edition of Real-World Cryptography © 2021 Manning Publications (ISBN 9781617296710). This translation is published and sold by permission of Manning Publications, the owner of all rights to publish and sell the same.

Hinweis:

Dieses Buch wurde mit mineralölfreien Farben auf PEFC-zertifiziertem Papier aus nachhaltiger Waldwirtschaft gedruckt. Der Umwelt zuliebe verzichten wir zusätzlich auf die Einschweißfolie. Hergestellt in Deutschland.

Schreiben Sie uns:

Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: [email protected].

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.

Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.

Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag noch Übersetzer können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.

5 4 3 2 1 0

Meinen Eltern, Anne Cerclet und Henry Wong, die meine Neugierde geweckt haben. Meiner Frau, Felicia Lupu, die mich auf dieser Reise unterstützt hat.

Inhalt

Vorwort

Danksagungen

Über dieses Buch

Über den Autor

Teil APrimitive: Die Elemente der Kryptografie

1Einführung

1.1Kryptografie sichert Protokolle

1.2Symmetrische Kryptografie: Was ist symmetrische Verschlüsselung?

1.3Kerckhoffs’ Prinzip: Nur der Schlüssel wird geheim gehalten

1.4Asymmetrische Kryptografie: Zwei Schlüssel sind besser als einer

1.4.1Schlüsselaustausch oder wie man zu einem gemeinsamen Geheimnis kommt

1.4.2Asymmetrische Verschlüsselung – anders als die symmetrische

1.4.3Digitale Signaturen – wie Unterschrift mit Stift und Papier

1.5Klassifizierende und abstrahierende Kryptografie

1.6Theoretische Kryptografie vs. praktische Kryptografie

1.7Von der Theorie zur Praxis: Wählen Sie Ihr eigenes Abenteuer

1.8Ein Wort der Warnung

Zusammenfassung

2Hashfunktionen

2.1Was ist eine Hashfunktion?

2.2Sicherheitseigenschaften einer Hashfunktion

2.3Sicherheitsbetrachtungen für Hashfunktionen

2.4Hashfunktionen in der Praxis

2.4.1Commitments

2.4.2Subressourcenintegrität

2.4.3BitTorrent

2.4.4Tor

2.5Standardisierte Hashfunktionen

2.5.1Die Hashfunktion SHA-2

2.5.2Die Hashfunktion SHA-3

2.5.3SHAKE und cSHAKE: Zwei Funktionen mit erweiterbarer Ausgabe (XOF)

2.5.4Mehrdeutiges Hashing mit TupleHash vermeiden

2.6Hashing von Kennwörtern

Zusammenfassung

3Message Authentication Codes (MACs)

3.1Zustandslose Cookies, ein motivierendes Beispiel für MACs

3.2Ein Beispiel in Code

3.3Sicherheitseigenschaften eines MAC

3.3.1Fälschen eines Authentifizierungstags

3.3.2Längen des Authentifizierungstags

3.3.3Replay-Angriffe

3.3.4Authentifizierungstags in konstanter Zeit verifizieren

3.4MAC im wahren Leben

3.4.1Authentifizierung von Nachrichten

3.4.2Schlüssel ableiten

3.4.3Integrität von Cookies

3.4.4Hashtabellen

3.5MACs in der Praxis

3.5.1HMAC, ein Hash-basierter MAC

3.5.2KMAC – ein MAC, der auf cSHAKE basiert

3.6SHA-2- und Length-Extension-Angriffe

Zusammenfassung

4Authentifizierte Verschlüsselung

4.1Was ist eine Chiffre?

4.2Die Blockchiffre AES (Advanced Encryption Standard)

4.2.1Wie viel Sicherheit bietet AES?

4.2.2Die Schnittstelle von AES

4.2.3Die Interna von AES

4.3Der verschlüsselte Pinguin und die Betriebsart CBC

4.4Fehlende Authentizität, deshalb AES-CBC-HMAC

4.5All-in-one-Konstruktionen: Authentifizierte Verschlüsselung

4.5.1Was ist authentifizierte Verschlüsselung mit zugehörigen Daten (AEAD)?

4.5.2Der AEAD-Modus AES-GCM

4.5.3ChaCha20-Poly1305

4.6Andere Arten der symmetrischen Verschlüsselung

4.6.1Key-Wrapping

4.6.2Authentifizierte Verschlüsselung, die gegen Nonce-Missbrauch resistent ist

4.6.3Datenträgerverschlüsselung

4.6.4Datenbankverschlüsselung

Zusammenfassung

5Schlüsselaustausch

5.1Was sind Schlüsselvereinbarungen?

5.2Der Diffie-Hellman-(DH-)Schlüsselaustausch

5.2.1Gruppentheorie

5.2.2Das Problem des diskreten Logarithmus: Die Basis von Diffie-Hellman

5.2.3Die Diffie-Hellman-Standards

5.3Der Elliptic Curve Diffie-Hellman-(ECDH-)Schlüsselaustausch

5.3.1Was ist eine elliptische Kurve?

5.3.2Wie funktioniert der Elliptic Curve Diffie-Hellman-(ECDH-)Schlüsselaustausch?

5.3.3Die Standards für Elliptic Curve Diffie-Hellman

5.4Angriffe auf kleine Untergruppen und andere Sicherheitsüberlegungen

Zusammenfassung

6Asymmetrische und hybride Verschlüsselung

6.1Was ist asymmetrische Verschlüsselung?

6.2Asymmetrische Verschlüsselung in der Praxis und hybride Verschlüsselung

6.2.1Schlüsselvereinbarungen und Schlüsselkapselung

6.2.2Hybride Verschlüsselung

6.3Asymmetrische Verschlüsselung mit RSA: Das Schlechte und das weniger Schlechte

6.3.1RSA nach Lehrbuch

6.3.2Warum man RSA PKCS#1 v1.5 nicht verwenden sollte

6.3.3Asymmetrische Verschlüsselung mit RSA-OAEP

6.4Hybride Verschlüsselung mit ECIES

Zusammenfassung

7Signaturen und Null-Wissen-Beweise

7.1Was ist eine Signatur?

7.1.1Signieren und Verifizieren in der Praxis

7.1.2DER Anwendungsfall von Signaturen: Authentifizierter Schlüsselaustausch

7.1.3Eine praktische Anwendung: Infrastrukturen für öffentliche Schlüssel

7.2Null-Wissen-Beweise (ZKPs): Der Ursprung der Signaturen

7.2.1Schnorr-Identifikationsprotokoll: Ein interaktiver Null-Wissen-Beweis

7.2.2Signaturen als nicht interaktive Null-Wissen-Beweise

7.3Die Signaturalgorithmen, die Sie verwenden sollten (oder nicht)

7.3.1RSA PKCS#1 v1.5: Ein schlechter Standard

7.3.2RSA-PSS: Ein besserer Standard

7.3.3Der Elliptic Curve Digital Signature-Algorithmus (ECDSA)

7.3.4Der Edwards-curve Digital Signature Algorithm (EdDSA)

7.4Subtiles Verhalten von Signaturverfahren

7.4.1Substitutionsangriffe auf Signaturen

7.4.2Malleability von Signaturen

Zusammenfassung

8Zufälligkeit und Geheimnisse

8.1Was ist Zufälligkeit?

8.2Langsame Zufälligkeit? Verwenden Sie einen Pseudozufallszahlengenerator (PRNG)

8.3Zufälligkeit in der Praxis erzeugen

8.4Zufallszahlenerzeugung und Sicherheitsüberlegungen

8.5Öffentliche Zufälligkeit

8.6Schlüsselableitung mit HKDF

8.7Schlüssel und Geheimnisse verwalten

8.8Dezentralisiertes Vertrauen mit Schwellenwertkryptografie

Zusammenfassung

Teil BProtokolle: Die Rezepte der Kryptografie

9Sicherer Transport

9.1Die Protokolle für sicheren Transport – SSL und TLS

9.1.1Von SSL zu TLS

9.1.2TLS in der Praxis verwenden

9.2Wie funktioniert das TLS-Protokoll?

9.2.1Der TLS-Handshake

9.2.2Wie TLS 1.3 Anwendungsdaten verschlüsselt

9.3Der Stand der Dinge im verschlüsselten Web heute

9.4Andere sichere Transportprotokolle

9.5Das Noise-Protokoll-Framework: Eine moderne Alternative zu TLS

9.5.1Die vielen Handshakes von Noise

9.5.2Ein Handshake mit Noise

Zusammenfassung

10Ende-zu-Ende-Verschlüsselung

10.1Warum Ende-zu-Ende-Verschlüsselung?

10.2Eine Vertrauensbasis, die nirgendwo zu finden ist

10.3Das Scheitern der verschlüsselten E-Mail

10.3.1PGP oder GPG? Und wie funktionieren sie?

10.3.2Vertrauen zwischen Benutzern mit dem Netz des Vertrauens skalieren

10.3.3Schlüsselermittlung ist ein echtes Problem

10.3.4Wenn nicht PGP, was dann?

10.4Sicheres Messaging: Ein moderner Blick auf die Ende-zu-Ende-Verschlüsselung mit Signal

10.4.1Benutzerfreundlicher als WOT: Vertrauen, aber verifizieren

10.4.2X3DH: Der Handshake des Signal-Protokolls

10.4.3Double Ratchet: Das Post-Handshake-Protokoll von Signal

10.5Der Stand der Ende-zu-Ende-Verschlüsselung

Zusammenfassung

11Benutzerauthentifizierung

11.1Authentifizierung – eine Wiederholung

11.2Benutzerauthentifizierung – oder wie wird man Kennwörter los?

11.2.1Ein Kennwort für alles: Single Sign-on (SSO) und Kennwort-Manager

11.2.2Kein Interesse an Ihren Kennwörtern? Verwenden Sie einen asymmetrischen kennwortauthentifizierten Schlüsselaustausch

11.2.3Einmalkennwörter sind eigentlich keine Kennwörter: Mit symmetrischen Schlüsseln kennwortlos werden

11.2.4Kennwörter durch asymmetrische Schlüssel ersetzen

11.3Benutzergestützte Authentifizierung: Pairing von Geräten mit menschlicher Hilfe

11.3.1Vorher vereinbarte Schlüssel (Pre-shared keys)

11.3.2Symmetrischer kennwortauthentifizierter Schlüsselaustausch mit CPace

11.3.3Gab es einen MITM-Angriff auf meinen Schlüsselaustausch? Prüfen Sie einfach einen kurzen authentifizierten String (SAS)

Zusammenfassung

12Krypto wie in Kryptowährung?

12.1Eine kleine Einführung in byzantinische fehlertolerante (BFT) Konsensalgorithmen

12.1.1Ein Problem der Stabilität: Verteilte Protokolle zur Rettung

12.1.2Ein Problem des Vertrauens? Dezentralisierung hilft

12.1.3Ein Problem der Größe: Erlaubnisfreie und zensurresistente Netzwerke

12.2Wie funktioniert Bitcoin?

12.2.1Wie Bitcoin mit Kontoständen und Transaktionen umgeht

12.2.2BTCs schürfen im digitalen Goldzeitalter

12.2.3Verzweigungschaos – Konflikte beim Mining lösen

12.2.4Die Blockgröße mit Merkle-Bäumen reduzieren

12.3Ein Rundgang durch die Kryptowährungen

12.3.1Volatilität

12.3.2Latenz

12.3.3Größe der Blockchain

12.3.4Vertraulichkeit

12.3.5Energieeffizienz

12.4DiemBFT: Ein byzantinisch fehlertolerantes (BFT) Konsensprotokoll

12.4.1Sicherheit und Lebendigkeit: Die beiden Eigenschaften eines BFT-Konsensprotokolls

12.4.2Eine Runde im DiemBFT-Protokoll

12.4.3Wie viel Unehrlichkeit kann das Protokoll tolerieren?

12.4.4Die DiemBFT-Regeln für eine Abstimmung

12.4.5Wann gelten Transaktionen als finalisiert?

12.4.6Die Intuitionen hinter der Sicherheit von DiemBFT

Zusammenfassung

13Hardware-Kryptografie

13.1Angreifermodell der modernen Kryptografie

13.2Nicht vertrauenswürdige Umgebungen: Hardware als Rettung

13.2.1White-Box-Kryptografie – eine schlechte Idee

13.2.2In Ihrer Brieftasche: Smartcards und Secure Elements

13.2.3Lieblinge der Banken: Hardware-Sicherheitsmodule (HSMs)

13.2.4Trusted Platform Modules (TPMs): Eine nützliche Standardisierung von Secure Elements

13.2.5Vertrauliche Datenverarbeitung mit einer vertrauenswürdigen Ausführungsumgebung (TEE)

13.3Welche Lösung ist für mich geeignet?

13.4Leakage-resiliente Kryptografie oder wie man Seitenkanalangriffe in Software entschärft

13.4.1Programmierung in konstanter Zeit

13.4.2Nicht das Geheimnis verwenden! Maskieren und Blinding

13.4.3Was ist mit Fehlerangriffen?

Zusammenfassung

14Post-Quanten-Kryptografie

14.1Was sind Quantencomputer und warum fürchten sich Kryptografen vor ihnen?

14.1.1Quantenmechanik – das Studium des Kleinen

14.1.2Von der Geburt des Quantencomputers zur Quantenüberlegenheit

14.1.3Der Einfluss der Algorithmen von Grover und Shor auf die Kryptografie

14.1.4Post-Quanten-Kryptografie – die Verteidigung gegen Quantencomputer

14.2Hash-basierte Signaturen – eine Hashfunktion genügt

14.2.1Lamport-Einmal-Signaturverfahren

14.2.2Kleinere Schlüssel mit Winternitz-Einmal-Signaturen (WOTS)

14.2.3Vielfache Signaturen mit XMSS und SPHINCS+

14.3Kürzere Schlüssel und Signaturen mit gitterbasierter Kryptografie

14.3.1Was ist ein Gitter?

14.3.2Lernen mit Fehlern (LWE), eine Basis für die Kryptografie?

14.3.3Kyber, ein gitterbasierter Schlüsselaustausch

14.3.4Dilithium, ein gitterbasiertes Signaturverfahren

14.4Muss ich in Panik geraten?

Zusammenfassung

15Ist es das? Die Kryptografie der nächsten Generation

15.1Je mehr, desto besser: Sichere Mehrparteienberechnung (MPC)

15.1.1Private Mengenüberschneidung (PSI)

15.1.2MPC für allgemeine Zwecke

15.1.3Der Zustand von MPC

15.2Vollständig homomorphe Verschlüsselung (FHE) und die Versprechen einer verschlüsselten Cloud

15.2.1Ein Beispiel für homomorphe Verschlüsselung mit RSA-Verschlüsselung

15.2.2Die verschiedenen Arten der homomorphen Verschlüsselung

15.2.3Bootstrapping, der Schlüssel zur vollständig homomorphen Verschlüsselung

15.2.4Ein FHE-Schema, das auf dem Problem Lernen mit Fehlern basiert

15.2.5Wo wird es verwendet?

15.3Allgemeine Null-Wissen-Beweise (ZKPs)

15.3.1Wie zk-SNARKs funktionieren

15.3.2Homomorphe Commitments, um Teile des Beweises zu verbergen

15.3.3Bilineare Paarungen, um unsere homomorphen Commitments zu verbessern

15.3.4Woher kommt die Prägnanz?

15.3.5Von Programmen zu Polynomen

15.3.6Programme sind für Computer; wir brauchen stattdessen arithmetische Schaltungen

15.3.7Eine arithmetische Schaltung in ein Rang-1-Constraint-System (R1CS) konvertieren

15.3.8Von R1CS zu einem Polynom

15.3.9Es gehören zwei dazu, um ein im Exponenten verstecktes Polynom auszuwerten

Zusammenfassung

16Wann und wo Kryptografie scheitert

16.1Die Suche nach dem richtigen kryptografischen Primitiv oder Protokoll ist eine langweilige Angelegenheit

16.2Wie verwende ich ein kryptografisches Primitiv oder Protokoll? Höfliche Standards und formale Verifizierung

16.3Wo sind die guten Bibliotheken?

16.4Kryptografie missbrauchen: Entwickler sind der Feind

16.5Sie machen es falsch: Brauchbare Sicherheit

16.6Kryptografie ist keine Insel

16.7Ihre Verantwortlichkeiten als Kryptografie-Praktiker – keine »selbst gedrehte« Krypto

Zusammenfassung

AAntworten zu den Übungen

A.1Kapitel 2

A.2Kapitel 3

A.3Kapitel 6

A.4Kapitel 7

A.5Kapitel 8

A.6Kapitel 9

A.7Kapitel 10

A.8Kapitel 11

Index

Vorwort

Wenn Sie dieses Buch in die Hand nehmen, fragen Sie sich vielleicht: »Warum noch ein Buch über Kryptografie?« oder sogar: »Warum sollte ich dieses Buch lesen?« Um diese Frage zu beantworten, müssen Sie verstehen, wie alles begann.

Ein Buch – seit Jahren im Entstehen

Wenn Sie heutzutage etwas über irgendeine Sache erfahren wollen, suchen Sie danach mit Google oder Bing oder Baidu – das Prinzip dürfte klar sein. Was Kryptografie angeht und je nachdem, wonach Sie suchen, fallen die Quellen möglicherweise recht spärlich aus. Auf dieses Phänomen bin ich schon vor langer Zeit gestoßen und es hat mich seither immer wieder frustriert.

An der Uni musste ich für einen Kurs einen Angriff per Differential Power Analysis (DPA) implementieren. Dieser Angriff war zu dieser Zeit ein Durchbruch in der Kryptoanalyse, denn es war der erste Seitenkanalangriff, der veröffentlicht wurde. Ein Angriff per Differential Power Analysis ist etwas Magisches: Indem man den Stromverbrauch eines Geräts misst, während es etwas ver- oder entschlüsselt, ist man in der Lage, seine Geheimnisse herauszufinden. Mir war klar, dass herausragende Papers großartige Ideen vermitteln können, wobei man nur wenig Aufwand in Klarheit und Verständlichkeit investieren muss. Ich erinnere mich, wie ich mir das Hirn zermarterte, um zu ergründen, was der Autor zu sagen versuchte. Schlimmer noch, ich konnte keine guten Online-Quellen finden, die das Paper erklärten. Also habe ich mir weiter den Kopf zerbrochen, und schließlich habe ich es verstanden. Und dann dachte ich, vielleicht könnte ich anderen helfen, die wie ich diese Tortur durchmachen müssen.

Hoch motiviert zeichnete ich einige Diagramme, animierte sie und nahm mich dabei auf, wie ich sie durchging. Das war mein erstes YouTube-Video über Kryptografie: https://www.youtube.com/watch?v=gbqNCgVcXsM.

Jahre später, nachdem ich das Video hochgeladen hatte, bekomme ich immer noch Lob von verschiedenen Leuten im Internet. Gerade gestern, als ich an diesem Vorwort schrieb, postete jemand: »Danke, wirklich eine tolle Erklärung, die mir wahrscheinlich Stunden erspart hat, dieses Paper zu verstehen.«

Was für eine Auszeichnung! Dieser winzige Schritt, mich auf die andere Seite der Bildungslandschaft zu wagen, genügte, um mir Lust auf mehr zu machen. Ich begann, weitere Videos aufzunehmen, und rief dann einen Blog ins Leben, um über Kryptografie zu schreiben. Zu finden ist der Blog hier: https://cryptologie.net.

Bevor ich mit diesem Buch begann, hatte ich fast 500 Artikel angehäuft, in denen die vielen Konzepte erklärt wurden, die über diese Einführung hinausgehen. Das war alles nur Übung. In meinem Hinterkopf reifte die Idee, ein Buch zu schreiben, langsam heran, Jahre bevor Manning Publications sich mit einem Buchvorschlag an mich wenden würde.

Der Lehrplan eines Kryptografen in der Praxis

Ich hatte meinen Bachelor in theoretischer Mathematik abgeschlossen und wusste nicht, was als Nächstes auf mich zukam. Außerdem hatte ich mein ganzes Leben lang programmiert und wollte beides unter einen Hut bringen. Natürlich wurde ich neugierig auf die Kryptografie, die das Beste aus beiden Welten zu vereinen schien, und ich begann, die verschiedenen Bücher zu lesen, die mir zur Verfügung standen. Schnell erkannte ich meine Berufung.

Dennoch störte mich etwas: Insbesondere die langen Einführungen, die mit dem geschichtlichen Hintergrund beginnen, denn ich interessierte mich nur für die technischen Einzelheiten und das war schon immer so. Ich schwor mir, wenn ich jemals ein Buch über Kryptografie schreiben würde, dann sollte es sich gänzlich über Vigenère-Chiffren, Cäsar-Chiffren und andere Überbleibsel der Geschichte ausschweigen. Nachdem ich also an der Universität Bordeaux einen Master in Kryptografie erworben hatte, war ich der Auffassung, für die reale Welt bereit zu sein. Doch was wusste ich schon …

Ich glaubte, mein Abschluss würde ausreichen, doch in meiner Ausbildung fehlte eine Menge Wissen über die eigentlichen Protokolle, die ich angreifen wollte. Ich hatte viel Zeit damit verbracht, etwas über die Mathematik elliptischer Kurven zu lernen, doch nichts darüber, wie diese in kryptografischen Algorithmen verwendet werden. Ich hatte etwas über LFSRs, ElGamal, DES und eine Reihe anderer kryptografischer Primitive gelernt, die ich nie wiedersehen würde.

Mein erster Auftrag zu Beginn meiner Arbeit in der Industrie bei Matasano, der späteren NCC Group, bestand darin, OpenSSL, die beliebteste SSL/TLS-Implementierung zu kontrollieren – d. h. den Code, der im Grunde das gesamte Internet verschlüsselt. Oh Mann, hat mir das Kopfzerbrechen bereitet. Ich weiß noch, wie ich jeden Tag mit starken Kopfschmerzen nach Hause kam. Was für eine katastrophale Bibliothek und ein ebensolches Protokoll! Damals hatte ich keine Ahnung, dass ich Jahre später Mitautor von TLS 1.3, der neuesten Version des Protokolls, werden würde.

Doch zu diesem Zeitpunkt dachte ich bereits: »Das hätte ich in der Uni lernen sollen. Das Wissen, das ich mir jetzt aneigne, wäre nützlich gewesen, um mich auf die Praxis vorzubereiten!« Schließlich war ich jetzt ein spezialisierter Sicherheitsexperte für Kryptografie. Ich überprüfte reale kryptografische Anwendungen. Ich hatte den Job, den man sich nach dem Abschluss eines Kryptografie-Studiums nur wünschen kann. Ich implementierte, verifizierte, verwendete und empfahl, welche kryptografischen Algorithmen infrage kämen. Das ist der Grund, warum ich der erste Leser des Buches bin, das ich schreibe. Das ist es, was ich meinem früheren Ich geschrieben hätte, um es auf die reale Welt vorzubereiten.

Wo sich die meisten Fehler verstecken

Im Rahmen meiner Beratertätigkeit habe ich viele reale kryptografische Anwendungen überprüft, wie zum Beispiel OpenSSL, das verschlüsselte Backup-System von Google, die TLS-1.3-Implementierung von Cloudflare, das Protokoll der Zertifizierungsstelle von Let’s Encrypt, das Sapling-Protokoll der Kryptowährung Zcash, das Schwellenwert-Proxy-Wiederverschlüsselungsschema von NuCypher und Dutzende anderer realer kryptografischer Anwendungen, die ich leider nicht öffentlich nennen darf.

Zu Beginn meiner Tätigkeit sollte ich das benutzerdefinierte Protokoll prüfen, das ein bekanntes Unternehmen zur Verschlüsselung seiner Kommunikation geschrieben hatte. Es stellte sich heraus, dass es Signaturen für fast alles verwendete, außer für die ephemeren Schlüssel, was das gesamte Protokoll zum Scheitern brachte, da man diese Schlüssel hätte leicht ersetzen können – ein Anfängerfehler von jemandem mit etwas Erfahrung bei sicheren Transportprotokollen, was aber Leuten fehlt, die dachten, ihre Expertise genügt, um eine eigene Kryptografie zu entwickeln. Ich erinnere mich, wie ich am Ende des Engagements die Schwachstelle erklärte und ein Raum voller Ingenieure für gut 30 Sekunden verstummte.

Diese Geschichte wiederholte sich in meiner beruflichen Laufbahn viele Male. Einmal habe ich bei der Prüfung einer Kryptowährung für einen Kunden einen Weg gefunden, Transaktionen aus bereits bestehenden Transaktionen zu fälschen, weil nicht klar war, was signiert wurde. Als ich mir TLS-Implementierungen für einen anderen Kunden ansah, fand ich einige subtile Möglichkeiten, um eine RSA-Implementierung zu knacken. Das daraus resultierende Whitepaper mit einem der Erfinder von RSA mündete schließlich in einer Reihe von CVEs (Common Vulnerabilities and Exposures), die an ein Dutzend Open-Source-Projekte gemeldet wurden. Als ich mich kürzlich im Rahmen von Recherchen für mein Buch mit dem neueren Matrix-Chat-Protokoll befasst habe, stellte ich fest, dass das Authentifizierungsprotokoll gebrochen war, was zu einem Bruch der Ende-zu-Ende-Verschlüsselung führte. Es gibt so viele Details, die Ihnen entgleiten können, wenn Sie Kryptografie einsetzen. An diesem Punkt war mir klar, dass ich etwas darüber schreiben musste. Deshalb enthält mein Buch viele dieser Anekdoten.

In meinem Job geht es unter anderem darum, Kryptografie-Bibliotheken und -Anwendungen in einer Vielzahl von Programmiersprachen zu überprüfen. Ich habe Fehler entdeckt (zum Beispiel CVE-2016-3959 in der Standardbibliothek von Golang), Möglichkeiten untersucht, wie Bibliotheken dazu verleiten können, sie zu missbrauchen (zum Beispiel in meinem Paper »How to Backdoor Diffie-Hellman«), und Ratschläge gegeben, welche Bibliotheken verwendet werden sollten. Die Entwickler wussten nie, welche Bibliotheken sie verwenden sollten, und die Antwort fand ich auch immer ziemlich knifflig.

Ich machte mich daran, das Disco-Protokoll zu entwickeln (https://discocrypto.com; https://embeddeddisco.com), und schrieb dessen umfangreiche Kryptografie-Bibliothek in weniger als 1000 Zeilen Code, noch dazu in mehreren Sprachen. Disco stützte sich auf nur zwei kryptografische Primitive: die Permutation von SHA-3 und Curve25519. Ja, allein mit diesen beiden Dingen, die in 1000 Zeilen Code implementiert wurden, konnte ein Entwickler jede Art von authentifizierendem Schlüsselaustausch, Signaturen, Verschlüsselung, MACs, Hashing, Schlüsselableitung usw. realisieren. Dies gab mir eine einzigartige Sichtweise auf das, was eine gute kryptografische Bibliothek ausmachen sollte.

Da ich in meinem Buch derartige praktische Einsichten darstellen wollte, enthalten natürlich die verschiedenen Kapitel Beispiele, wie man »Krypto« in verschiedenen Programmiersprachen anwendet, wobei renommierte kryptografische Bibliotheken zum Einsatz kommen.

Wozu noch ein neues Buch?

Als ich eine meiner jährlichen Kryptografie-Schulungen bei Black Hat (einer bekannten Sicherheitskonferenz) abhielt, kam ein Student zu mir und fragte, ob ich ein gutes Buch oder einen Online-Kurs über Kryptografie empfehlen könne. Ich erinnere mich, dass ich dem Studenten empfahl, ein Buch von Boneh und Shoup zu lesen und den Kurs Cryptography I von Boneh auf Coursera zu besuchen. (Diese beiden Quellen empfehle ich auch am Ende dieses Buches.)

Der Student sagte mir: »Okay, ich habe es versucht, aber es ist zu theoretisch!« Diese Antwort gab mir zu denken. Zuerst war ich anderer Meinung, aber langsam wurde mir klar, dass er recht hatte. Die meisten Quellen sind ziemlich mathematiklastig und die meisten Entwickler, die sich mit Kryptografie beschäftigen, haben mit Mathematik nicht viel am Hut. Welche Alternativen gab es denn für sie?

Die anderen beiden einigermaßen renommierten Quellen zu dieser Zeit waren Applied Cryptography und Cryptography Engineering (beide Bücher von Bruce Schneier). Doch spiegelten diese Bücher nicht mehr den neuesten Stand wider. Applied Cryptography widmete vier Kapitel den Blockchiffren und ein ganzes Kapitel der Funktionsweise von Chiffren, aber es gab kein einziges Kapitel über authentifizierte Verschlüsselung. Im neueren Cryptography Engineering wurde die Kryptografie mit elliptischen Kurven nur in einer Fußnote erwähnt. Andererseits wurden viele meiner Videos oder Blogbeiträge zu erstklassigen Quellen für bestimmte kryptografische Konzepte. Ich wusste, dass ich etwas Wertvolles beisteuern kann.

Nach und nach interessierten sich viele meiner Studenten für Kryptowährungen und stellten immer mehr Fragen zu diesem Thema. Gleichzeitig begann ich, immer mehr Anwendungen für Kryptowährungen zu überprüfen. Später wechselte ich zu Facebook und war für die Sicherheit der Kryptowährung Libra (heute als Diem bekannt) verantwortlich. Zu jener Zeit waren Kryptowährungen eines der heißesten Arbeitsgebiete, die eine Vielzahl äußerst interessanter kryptografischer Primitive zusammenbrachten, die bis dahin in der realen Welt wenig bis gar keine Anwendung gefunden hatten (Null-Wissen-Beweise, aggregierte Signaturen, Schwellenwertkryptografie, Mehrparteienberechnungen, Konsensprotokolle, kryptografische Akkumulatoren, verifizierbare Zufallsfunktionen, verifizierbare Verzögerungsfunktionen, … die Liste geht noch weiter). Und dennoch enthielt kein Krypto-Buch ein Kapitel über Kryptowährungen. Meine Ziele waren damit klar.

Ich konnte also etwas schreiben, das Studenten, Entwicklern, Beratern, Sicherheitsingenieuren und anderen vermitteln würde, worum es in der modernen angewandten Kryptografie geht. Es sollte ein Buch mit wenigen Formeln, dafür aber mit vielen Diagrammen werden. Auf die geschichtlichen Hintergründe wollte ich weitgehend verzichten, dafür aber von kryptografischen Fehlern, mit denen ich selbst zu tun hatte, erzählen. Die veralteten Algorithmen sollten nur eine untergeordnete Rolle spielen, aber Kryptografie, die ich aus eigener Erfahrung kannte, sollte breiten Raum einnehmen: TLS, das Noise-Protokoll-Framework, das Signal-Protokoll, Kryptowährungen, HSMs, Schwellenwert-Kryptografie usw. Das Buch sollte weniger die theoretische Kryptografie beleuchten, sondern vor allem das enthalten, was relevant werden könnte: PAKE (Password-Authenticated Key Exchange), Null-Wissen-Beweise, Post-Quanten-Kryptografie usw.

Als sich Manning Publications 2018 bei mir meldete und mich fragte, ob ich ein Buch über Kryptografie schreiben möchte, kannte ich die Antwort bereits. Was ich schreiben wollte, wusste ich. Ich hatte nur darauf gewartet, dass mir jemand die Gelegenheit und einen Vorwand gab, meine Zeit damit zu verbringen, das Buch zu schreiben, das ich im Sinn hatte. Es trifft sich gut, dass Manning eine Reihe von Büchern über die »reale Welt« im Programm hat, und so schlug ich natürlich vor, dass mein Buch sie erweitern sollte. Was Sie hier vor sich haben, ist das Ergebnis von mehr als zwei Jahren harter Arbeit und viel Hingabe. Ich hoffe, es gefällt Ihnen!

Danksagungen

Vielen Dank an Marina Michaels für ihre kontinuierliche Hilfe und ihre Einblicke, ohne die dieses Buch wahrscheinlich nicht zustande gekommen wäre.

Mein Dank geht auch an Jean-Philippe Aumasson, Fabian Becker, Daniel Li, Jeff Lau, Filipe Casal, Curtis Light, Vincent Herbert, Donald Piret, Dan Cashman, Ricky Han, Tshaka Lekholoane, Frances Buran, Sam Zaydel, Michael Rosenberg, Pascal Knecht, Seth David Schoen, Eyal Ronen, Saralynn Chick, Robert Seacord, Eloi Manuel, Rob Wood, Hunter Monk, Jean-Christophe Forest, Liviu Bartha, Mattia Reggiani, Olivier Guerra, Andrey Labunov, Carl Littke, Yan Ivnitskiy, Keller Fuchs, Roman Zabicki, M K Saravanan, Sarah Zennou, Daniel Bourdrez, Jason Noll, Ilias Cherkaoui, Felipe De Lima, Raul Siles, Matteo Bocchi, John Woods, Kostas Chalkias, Yolan Romailler, Gerardo Di Giacomo, Gregory Nazario, Rob Stubbs, Ján Jančár, Gabe Pike, Kiran Tummala, Stephen Singam, Jeremy O’Donoghue, Jeremy Boone, Thomas Duboucher, Charles Guillemet, Ryan Sleevi, Lionel Rivière, Benjamin Larsen, Gabriel Giono, Daan Sprenkels, Andreas Krogen, Vadim Lyubashevsky, Samuel Neves, Steven (Dongze) Yue, Tony Patti, Graham Steel und alle Livebook-Kommentatoren für die vielen Diskussionen und Korrekturen sowie das fachliche und redaktionelle Feedback.

An alle Rezensenten: Adhir Ramjiawan, Al Pezewski, Al Rahimi, Alessandro Campeis, Bobby Lin, Chad Davis, David T Kerns, Domingo Salazar, Eddy Vluggen, Gábor László Hajba, Geert Van Laethem, Grzegorz Bernaś, Harald Kuhn, Hugo Durana, Jan Pieter Herweijer, Jeff Smith, Jim Karabatsos, Joel Kotarski, John Paraskevopoulos, Matt Van Winkle, Michal Rutka, Paul Grebenc, Richard Lebel, Ruslan Shevchenko, Sanjeev Jaiswal, Shawn P Bolan, Thomas Doylend, William Rudenmalm – eure Vorschläge haben dem Buch wirklich gutgetan.

Über dieses Buch

An Kryptografie in der Praxis schreibe ich nun seit mehr als zwei Jahren. Ursprünglich war es gedacht als Einführung in alles, was man über die Art von Kryptografie wissen muss, die in der realen Welt verwendet wird. Aber das ist natürlich eine unmögliche Aufgabe. Kein Gebiet lässt sich in einem einzigen Buch zusammenfassen. Deshalb musste ich ein Gleichgewicht finden zwischen dem Umfang an Details, die ich dem Leser vermitteln möchte, und der Größe des abzudeckenden Gebiets. Ich hoffe, Sie sehen das genauso wie ich. Wenn Sie nach einem praktischen Buch suchen, das Ihnen die Kryptografie so, wie sie in Unternehmen und Produkten implementiert und verwendet wird, nahebringt, und wenn Sie neugierig darauf sind, wie Kryptografie in der realen Welt hinter den Kulissen funktioniert, aber nicht auf ein Nachschlagewerk aus sind, dann ist dieses Buch genau das richtige für Sie.

Wer dieses Buch lesen sollte

Im Folgenden habe ich den Leserkreis aufgelistet, der meiner Meinung nach von diesem Buch profitieren wird (doch lassen Sie sich deshalb bitte nicht in eine Schublade stecken).

Studenten

Wenn Sie Informatik, Sicherheit oder Kryptografie studieren und etwas über Kryptografie in der realen Welt lernen möchten (weil Sie entweder einen Job in der Industrie anstreben oder an angewandten Themen in der Wissenschaft arbeiten möchten), dann dürfte dieses Buch meiner Ansicht nach für Sie genau richtig sein. Warum? Weil ich, wie ich im Vorwort schrieb, selbst einmal Student war und ein Buch verfasst habe, das ich damals selber gern gehabt hätte.

Sicherheitspraktiker

Pentester, Sicherheitsberater, Sicherheitsingenieure, Sicherheitsarchitekten und andere Experten im Sicherheitsbereich haben den Großteil meiner Studenten ausgemacht, als ich angewandte Kryptografie unterrichtet habe. Deshalb habe ich diesen Stoff durch die vielen Fragen verfeinert, die mir gestellt wurden, als ich komplizierte kryptografische Konzepte für Nicht-Kryptografen zu erklären versuchte. Da ich selbst als Sicherheitspraktiker tätig bin, ist dieses Buch auch von der Kryptografie geprägt, die ich für große Unternehmen geprüft habe, und von den Bugs, die ich im Rahmen dieser Arbeit kennengelernt und gefunden habe.

Entwickler, die Kryptografie direkt oder indirekt verwenden

Diese Arbeit ist auch von vielen Diskussionen geprägt worden, die ich mit Kunden und Mitarbeitern geführt habe, die im Großen und Ganzen weder Sicherheitsexperten noch Kryptografen waren. Heutzutage wird es immer schwieriger, Code zu schreiben, der gänzlich ohne Kryptografie auskommt, und deshalb muss man ein gewisses Verständnis für die Verfahren haben, auf die man setzt. Dieses Buch vermittelt Ihnen unter anderem dieses Verständnis anhand von Programmbeispielen in verschiedenen Programmiersprachen.

Kryptografen, die sich für andere Gebiete interessieren

Dieses Buch ist eine Einführung in angewandte Kryptografie, die für Leute wie mich nützlich ist. Wie schon erwähnt, habe ich es zuerst für mich selbst geschrieben. Wenn ich es geschafft habe, gute Arbeit zu leisten, sollte ein theoretischer Kryptograf in der Lage sein, die Welt der angewandten Kryptografie schnell zu erfassen; ein anderer, der an symmetrischer Verschlüsselung arbeitet, sollte schnell erfassen können, wie der kennwortgeschützte Schlüsselaustausch funktioniert, wenn er das entsprechende Kapitel liest; und ein Dritter, der sich mit Protokollen beschäftigt, sollte schnell ein gutes Verständnis für Quantenkryptografie bekommen; und so weiter.

Ingenieure und Produktmanager, die mehr wissen möchten

Dieses Buch versucht auch, Fragen zu beantworten, die für mich eher produktorientiert sind: Was sind die Kompromisse und Beschränkungen dieser Ansätze? Welches Risiko gehe ich ein? Würde mir dieser Weg helfen, die Vorschriften einzuhalten? Was muss ich tun, um mit einer Regierung zusammenzuarbeiten?

Neugierige, die wissen wollen, worum es in der Welt der realen Kryptografie geht

Um dieses Buch zu lesen, müssen Sie keiner der oben genannten Typen sein. Es genügt, wenn Sie ein wenig neugierig sind, was Kryptografie ist und wie man sie in der realen Welt verwendet. Denken Sie daran, dass ich weder die Geschichte der Kryptografie noch die Grundlagen der Informatik lehre. Deshalb sollten Sie zumindest schon einmal von Kryptografie gehört haben, bevor Sie sich auf ein Buch wie dieses einlassen.

Vorausgesetztes Wissen, die lange Version

Was brauchen Sie, um dieses Buch optimal nutzen zu können? Zunächst einmal setzt dieses Buch voraus, dass Sie ein gewisses Grundverständnis davon haben, wie Ihr Laptop oder das Internet funktioniert, und zumindest sollten Sie von Verschlüsselung schon mal gehört haben. Da es in diesem Buch um Kryptografie in der realen Welt geht, wird es schwierig sein, die Dinge in den richtigen Zusammenhang zu bringen, wenn Sie sich mit Computern gar nicht auskennen oder noch nie etwas von Verschlüsselung gehört haben.

Wenn Sie einigermaßen wissen, worauf Sie sich einlassen, ist es von großem Vorteil, wenn Ihnen Bits und Bytes geläufig sind und wenn Sie bitweise Operationen wie XOR, Linksschieben und derartige Dinge schon einmal gesehen oder sogar verwendet haben. Ist es andernfalls ein K.-o.-Kriterium? Nein, aber es kann bedeuten, dass Sie hier und da einige Minuten ins Stocken geraten, um etwas zu googeln, bevor Sie weiterlesen können.

Doch ganz gleich, wie qualifiziert Sie sind, müssen Sie wahrscheinlich von Zeit zu Zeit eine Pause einlegen, um sich weitere Informationen aus dem Internet zu holen. Entweder (Asche auf mein Haupt) weil ich vergessen habe, einen Begriff zu erklären, bevor ich ihn verwende, oder weil ich irrtümlich davon ausgegangen bin, dass Sie ihn bereits kennen. In jedem Fall sollte dies kein Problem darstellen, da ich versuche, die verschiedenen Konzepte, die ich einführe, in möglichst einfachen Worten zu erklären.

Wenn Sie schließlich das Wort Kryptografie verwenden, denken Sie möglicherweise an Mathematik. Falls Sie nicht nur daran denken, sondern auch noch das Gesicht verziehen, wird es Sie erfreuen zu hören, dass Sie sich darüber keine Sorgen machen müssen. In Kryptografie in der Praxis geht es darum, Einblicke zu vermitteln, damit Sie ein Gespür dafür bekommen, wie das Ganze funktioniert. Zudem wird versucht, mathematische Details möglichst zu vermeiden.

Natürlich würde ich lügen, wenn ich behaupte, dass dieses Buch gänzlich ohne Mathematik auskommt. Es gibt keinen Kryptografieunterricht ohne Mathematik. Daher formuliere ich es so: Es ist hilfreich, wenn Sie ein gutes Niveau in Mathematik erreicht haben, aber auch, wenn das nicht der Fall ist, sollte Sie das nicht davon abhalten, den größten Teil dieses Buches zu lesen. Einige Kapitel werden Ihnen vielleicht nicht so liegen, es sei denn, Sie haben ein weitergehendes Verständnis von Mathematik, was insbesondere die letzten Kapitel (14 und 15) zur Quantenkryptografie und Kryptografie der nächsten Generation betrifft. Doch nichts ist unmöglich und Sie können diese Kapitel mit Willenskraft und durch Googeln zu Matrixmultiplikationen und anderen Dingen, die Sie vielleicht nicht kennen, meistern. Wenn Sie diese Kapitel überspringen möchten, sollten Sie aber auf keinen Fall Kapitel 16 auslassen, denn das ist das Sahnehäubchen auf dem Kuchen.

Wegweiser durch das Buch

Kryptografie in der Praxis ist in zwei Teile gegliedert. Den ersten Teil sollten Sie von der ersten bis zur letzten Seite lesen. Er deckt die meisten Bausteine der Kryptografie ab: nämlich die Elemente, aus denen Sie am Ende wie mit LEGO-Steinen komplexere Systeme und Protokolle konstruieren.

Kapitel 1

ist eine Einführung in praktische Kryptografie, die Ihnen eine Vorstellung davon vermittelt, was Sie lernen werden.

In

Kapitel 2

geht es um Hashfunktionen, einen fundamentalen Algorithmus der Kryptografie, mit dem sich aus Bytestrings eindeutige Bezeichner erstellen lassen.

Kapitel 3

erläutert, was Datenauthentifizierung ist und wie Sie sicherstellen können, dass niemand Ihre Nachrichten verändert.

Kapitel 4

befasst sich mit Verschlüsselung, die es zwei Teilnehmern ermöglicht, ihre Kommunikation vor Beobachtern zu verbergen.

Kapitel 5

stellt den Schlüsselaustausch vor, der es Ihnen ermöglicht, interaktiv ein gemeinsames Geheimnis mit einer anderen Person auszuhandeln.

Kapitel 6

beschreibt die asymmetrische Verschlüsselung, die es mehreren Personen ermöglicht, Nachrichten an eine einzige Person zu verschlüsseln.

Thema von

Kapitel 7

sind Signaturen, die kryptografischen Entsprechungen von Unterschriften mit Stift auf Papier.

In

Kapitel 8

geht es um Zufälligkeit und darum, wie Sie Ihre Geheimnisse verwalten.

Der zweite Teil dieses Buches enthält die Systeme, die aus diesen Elementen aufgebaut sind.

In

Kapitel 9

erfahren Sie, wie Sie die Verbindungen zwischen Computern mit Verschlüsselung und Authentifizierung (über das SSL/TLS-Protokoll) sichern.

Kapitel 10

beschreibt die Ende-zu-Ende-Verschlüsselung, bei der es im Grunde darum geht, wie Menschen wie Sie und ich einander vertrauen können.

Kapitel 11

zeigt, wie Computer Personen authentifizieren und wie Personen dabei helfen können, dass sich Computer miteinander synchronisieren.

Kapitel 12

ist dem aufstrebenden Gebiet der Kryptowährungen gewidmet.

Kapitel 13

konzentriert sich auf Hardware-Kryptografie, d. h. auf die Geräte, mit denen Sie verhindern können, dass Ihre Schlüssel entwendet werden.

Es gibt zwei Bonuskapitel: Kapitel 14 über Post-Quanten-Kryptografie und Kapitel 15 über Kryptografie der nächsten Generation. Diese beiden Gebiete finden allmählich Eingang in Produkte und Unternehmen, entweder weil sie an Relevanz gewinnen oder weil sie immer praktischer und effizienter werden. Ich bin Ihnen nicht böse, wenn Sie diese beiden letzten Kapitel auslassen, aber Sie sollten unbedingt Kapitel 16 mit abschließenden Bemerkungen lesen, bevor Sie dieses Buch ins Regal stellen. Kapitel 16 fasst die verschiedenen Herausforderungen und die verschiedenen Lektionen zusammen, die ein Kryptografie-Praktiker (also Sie, wenn Sie dieses Buch durchgearbeitet haben) im Kopf behalten muss. Wie sagte doch Spidermans Onkel Ben Parker: »Aus großer Kraft folgt große Verantwortung.«

Über den Code

Dieses Buch enthält viele Beispiele von Quellcode sowohl in nummerierten Listings als auch im laufenden Text. In beiden Fällen ist der Quellcode in Schreibmaschinenschrift formatiert, um ihn vom normalen Text zu unterscheiden. Manchmal ist der Code auch fett gedruckt, um Code hervorzuheben, der sich gegenüber früheren Schritten im Kapitel geändert hat, zum Beispiel wenn eine neue Funktion zu einer bestehenden Codezeile hinzukommt.

In vielen Fällen wurde der ursprüngliche Quellcode neu formatiert; wir haben Zeilenumbrüche hinzugefügt und die Einrückungen bearbeitet, um dem verfügbaren Platz auf den Buchseiten zu entsprechen. Hat das in seltenen Fällen nicht ausgereicht, wurden Zeilenfortsetzungszeichen () in die Listings eingefügt. Außerdem wurden oftmals die Kommentare aus den Quellcode-Listings entfernt, wenn der Code ohnehin im Text beschrieben wird. In vielen Listings heben begleitende Codeanmerkungen wichtige Konzepte hervor.

Über den Autor

David Wong ist leitender Kryptografie-Ingenieur bei O(1) Labs und arbeitet an der Kryptowährung Mina. Davor war er Sicherheitsverantwortlicher für die Kryptowährung Diem (vormals bekannt als Libra) bei Novi, Facebook, und davor Sicherheitsberater bei der NCC Group im Bereich Kryptografiedienste.

Im Laufe seiner Karriere hat David Wong an mehreren öffentlich finanzierten Open-Source-Audits teilgenommen, beispielsweise an OpenSSL und Let’s Encrypt. Er war Sprecher auf verschiedenen Konferenzen, einschließlich Black Hat und DEF CON, und hat in einem regelmäßig stattfindenden Kryptografiekurs bei Black Hat unterrichtet. Hervorzuheben sind seine Beiträge zu Standards wie TLS 1.3 und zum Noise Protocol Framework. Er hat Schwachstellen in vielen Systemen gefunden, einschließlich CVE-2016-3959 in der Golang-Standardbibliothek, CVE-2018-12404, CVE-2018-19608, CVE-2018-16868, CVE-2018-16869 und CVE-2018-16870 in verschiedenen TLS-Bibliotheken.

Unter anderem ist er Autor des Disco-Protokolls (www.discocrypto.com und www.embeddeddisco.com) und des Decentralized Application Security Project für Smart Contracts (www.dasp.co). Zu seinen Forschungen gehören Cache-Angriffe auf RSA (http://cat.eyalro.net), ein auf QUIC basierendes Protokoll (https://eprint.iacr.org/2019/028), Timing-Angriffe auf ECDSA (https://eprint.iacr.org/2015/839) oder Hintertüren in Diffie-Hellman (https://eprint.iacr.org/2016/644). Aktuell finden Sie ihn in seinem Blog unter www.cryptologie.net.

Teil A

Primitive: Die Elemente der Kryptografie

Willkommen in der Welt der Kryptografie! Das Buch, das Sie in den Händen halten (falls Sie sich für die gedruckte Version entschieden haben), ist in zwei gleiche Teile mit jeweils acht Kapiteln aufgeteilt. Wenn Sie es ganz durcharbeiten, lernen Sie (fast) alles, was es über Kryptografie in der Praxis zu wissen gibt – und zwar in der Welt, in der Sie sich befinden.

Beachten Sie, dass der erste Teil des Buches so geschrieben wurde, dass Sie die Kapitel der Reihe nach lesen sollten. Allerdings nennt Ihnen jedes Kapitel, was vorausgesetzt wird, sodass dies nicht als obligatorische Einschränkung gedacht ist. Die ersten acht Kapitel führen Sie durch die Grundlagen – die Bausteine der Kryptografie. Jedes Kapitel führt ein neues Element ein und erläutert, was es bewirkt, wie es arbeitet und wie es zusammen mit anderen Elementen verwendet werden kann. In diesem ersten Teil geht es vor allem darum, Ihnen gute Abstraktionen und Einblicke zu vermitteln, bevor wir im zweiten Teil alle beschriebenen Elemente praktisch einsetzen.

Viel Erfolg!

1Einführung

In diesem Kapitel:

Worum geht es bei Kryptografie?Theoretische und praktische KryptografieWas lernen Sie bei diesem Abenteuer?

Sei gegrüßt, Reisender, halte dich fest. Du bist im Begriff, eine Welt voller Wunder und Geheimnisse zu betreten – die Welt der Kryptografie. Kryptografie ist eine uralte Disziplin, um Situationen zu sichern, die von böswilligen Charakteren gestört werden. Dieses Buch beherbergt die Zaubersprüche, die wir brauchen, um uns gegen die Bösartigkeit zu verteidigen. Viele haben versucht, dieses Handwerk zu erlernen, aber nur wenige haben die Herausforderungen überlebt, die auf dem Weg zur Meisterschaft überwunden werden müssen. In der Tat warten aufregende Abenteuer auf Sie!

In diesem Buch werden wir erkunden, wie kryptografische Algorithmen unsere Briefe sichern, unsere Verbündeten identifizieren und Schätze vor unseren Feinden schützen können. Der Segeltörn durch das kryptografische Meer wird nicht die sanfteste Reise sein, denn die Kryptografie ist die Grundlage aller Sicherheits- und Datenschutzmaßnahmen in unserer Welt – der kleinste Fehler könnte tödlich sein.

HINWEIS

Wenn Sie sich verloren vorkommen, denken Sie daran, immer weiter zu gehen. Irgendwann wird alles einen Sinn ergeben.

1.1Kryptografie sichert Protokolle

Unsere Reise beginnt mit einer Einführung in Kryptografie – die Wissenschaft, die darauf abzielt, Protokolle gegen Saboteure zu verteidigen. Aber zuerst: Was ist ein Protokoll? Einfach ausgedrückt ist es eine Liste von Schritten, die eine (oder mehrere) Personen befolgen müssen, um etwas zu erreichen. Stellen Sie sich zum Beispiel die folgende Situation vor: Sie möchten Ihr Zauberschwert für einige Stunden unbeaufsichtigt lassen, um ein Nickerchen zu machen. Ein Protokoll hierfür könnte folgendermaßen aussehen:

Die Waffe auf den Boden legen

Unter einem Baum ein Nickerchen machen

Die Waffe vom Boden aufheben

Selbstverständlich ist das kein großartiges Protokoll, da jeder Ihr Schwert stehlen kann, während Sie schlafen … Und deshalb geht es bei der Kryptografie darum, die Gegner zu kennen, die Sie hintergehen wollen.

Im Altertum, als Herrscher und Generäle damit beschäftigt waren, sich gegenseitig zu verraten und Putsche zu planen, bestand eines ihrer größten Probleme darin, einen Weg zu finden, vertrauliche Informationen mit denjenigen auszutauschen, denen sie vertrauten. Daraus ist die Idee der Kryptografie entstanden. Aber erst nach Jahrhunderten harter Arbeit ist die Kryptografie zu der ernsthaften Disziplin geworden, die sie heute ist. Heute sind alle Bereiche um uns herum von ihr durchdrungen, um die grundlegendsten Dienste in unserer chaotischen und feindseligen Welt bereitzustellen.

In diesem Buch geht es um die Praxis der Kryptografie. Es nimmt Sie mit auf eine Entdeckungsreise durch die Computerwelt, um die heute verwendeten kryptografischen Protokolle zu beschreiben, und zeigt Ihnen auch, aus welchen Bestandteilen sie bestehen und wie alles zusammenwirkt. Während ein typisches Kryptografie-Buch zunächst die Entdeckung der Kryptografie beschreibt und Sie durch ihre Geschichte führt, erscheint es mir wenig sinnvoll, auf diese Weise zu beginnen. Ich möchte Ihnen von der Praxis erzählen, und zwar etwas darüber, was ich selbst erlebt habe, als ich als Berater kryptografische Anwendungen für große Unternehmen überprüfte, oder von der Kryptografie, die ich selbst als Entwickler auf diesem Gebiet verwendet habe.

Es wird (fast) keine grausigen mathematischen Formeln geben. Der Zweck dieses Buches ist es, die Kryptografie zu entmystifizieren, einen Überblick über das zu geben, was heutzutage als nützlich angesehen wird, und ein Gefühl dafür zu vermitteln, wie die Dinge um Sie herum aufgebaut sind. Dieses Buch ist für Neugierige, interessierte Ingenieure, abenteuerlustige Entwickler und wissbegierige Forscher gedacht. Kapitel 1 – dieses Kapitel – startet eine Tour durch die Welt der Kryptografie. Sie lernen die verschiedenen Arten der Kryptografie kennen, die für uns von Bedeutung sind, und wie sich die Welt darauf geeinigt hat, diese zu verwenden.

1.2Symmetrische Kryptografie: Was ist symmetrische Verschlüsselung?

Eines der grundlegenden Konzepte der Kryptografie ist die symmetrische Verschlüsselung. Die meisten kryptografischen Algorithmen in diesem Buch verwenden sie und sie ist daher auch äußerst wichtig. Ich führe dieses neue Konzept hier anhand unseres ersten Protokolls ein.

Stellen Sie sich vor, dass Königin Alice einen Brief an Lord Bob schicken muss, der ein paar Schlösser entfernt wohnt. Sie bittet ihren loyalen Boten, sich auf seinem treuen Ross durch die gefährlichen Ländereien zu kämpfen, um Lord Bob die wichtige Nachricht zu überbringen. Doch sie ist misstrauisch, denn obwohl ihr loyaler Bote ihr schon seit vielen Jahren dient, möchte sie, dass die zu überbringende Botschaft vor allen passiven Beobachtern, einschließlich dem Boten, geheim bleibt! Höchstwahrscheinlich enthält der Brief kontroverse Gerüchte über die auf dem Weg liegenden Königreiche.

Was Königin Alice braucht, ist ein Protokoll, das die Übergabe der Nachricht an Lord Bob persönlich ohne Mittelsmänner nachbildet. Dieses Problem lässt sich in der Praxis unmöglich lösen, es sei denn, man führt Kryptografie (oder Teleportation) in die Gleichung ein. Letztlich tun wir das seit langer Zeit, indem wir einen neuen Typ von kryptografischem Algorithmus erfunden haben – einen sogenannten symmetrischen Verschlüsselungsalgorithmus (auch als Chiffre bekannt).

HINWEIS

Übrigens wird eine Art von kryptografischem Algorithmus oftmals als Primitiv bezeichnet. Ein Primitiv ist die kleinste nützliche Konstruktion in der Kryptografie und wird oft zusammen mit anderen Primitiven verwendet, um ein Protokoll zu erstellen. In erster Linie ist es ein Begriff, der keine besondere Bedeutung hat. Da er aber in der Literatur oft genug vorkommt, sollten Sie ihn zumindest kennen.

Sehen wir uns an, wie wir mithilfe eines Verschlüsselungsprimitives die Nachricht von Königin Alice vor dem Boten verbergen können. Nehmen wir zunächst an, dass das Primitiv eine Blackbox ist (wir können nicht sehen, was sich in ihr befindet oder was sie intern tut), die zwei Funktionen bereitstellt:

ENCRYPT

DECRYPT

Die erste Funktion, ENCRYPT, übernimmt einen geheimen Schlüssel (normalerweise eine große Zahl) und eine Nachricht. Daraufhin gibt sie eine Folge von zufällig aussehenden Zahlen aus, verrauschte Daten, wenn Sie so wollen. Diese Ausgabe nennen wir die verschlüsselte Nachricht. Abbildung 1–1 veranschaulicht dies.

Abb. 1–1Die FunktionENCRYPTübernimmt eine Nachricht und einen geheimen Schlüssel und gibt die verschlüsselte Nachricht aus – eine lange Folge von Zahlen, die wie zufälliges Rauschen aussieht.

Die zweite Funktion, DECRYPT, ist die Umkehrung der ersten Funktion. Sie übernimmt denselben geheimen Schlüssel und die Zufallsausgabe der ersten Funktion (die verschlüsselte Nachricht) und ermittelt dann die ursprüngliche Nachricht. Dies wird in Abbildung 1–2 veranschaulicht.

Abb. 1–2Die FunktionDECRYPTübernimmt eine verschlüsselte Nachricht und einen geheimen Schlüssel und gibt die ursprüngliche Nachricht zurück.

Um dieses neue Primitiv nutzen zu können, müssen sich Königin Alice und Lord Bob zunächst im wirklichen Leben treffen und sich über einen geheimen Schlüssel verständigen. Später kann Königin Alice mit der bereitgestellten Funktion ENCRYPT eine Nachricht mithilfe des geheimen Schlüssels schützen. Dann übergibt sie die verschlüsselte Nachricht an ihren Boten, der sie schließlich an Lord Bob zustellt. Lord Bob ruft dann die Funktion DECRYPT mit der verschlüsselten Nachricht und demselben geheimen Schlüssel auf, um die ursprüngliche Nachricht wiederherzustellen. Abbildung 1–3 zeigt diesen Vorgang.

Während dieses Austauschs führte der Bote lediglich etwas mit sich, das wie zufällig aussah und keinen sinnvollen Einblick in den Inhalt der versteckten Nachricht bot. Tatsächlich haben wir unser unsicheres Protokoll mithilfe der Kryptografie in ein sicheres Protokoll verwandelt. Das neue Protokoll ermöglicht es Königin Alice, einen vertraulichen Brief an Lord Bob zu schicken, ohne dass jemand (außer Lord Bob) den Inhalt des Briefes erfährt.

Dinge mithilfe eines geheimen Schlüssels in Rauschen zu verwandeln, sodass sie nicht mehr vom Zufall zu unterscheiden sind, ist eine gängige Methode in der Kryptografie, um ein Protokoll zu sichern. Mehr davon werden Sie sehen, wenn Sie in den nächsten Kapiteln weitere kryptografische Algorithmen kennenlernen.

Übrigens gehört die symmetrische Verschlüsselung zu einer größeren Kategorie von Kryptografiealgorithmen: der symmetrischen Kryptografie oder der Kryptografie mit geheimen Schlüsseln. Das liegt daran, dass die verschiedenen Funktionen, die das kryptografische Primitiv zugänglich macht, denselben Schlüssel verwenden. Wie Sie später noch sehen, gibt es manchmal mehr als einen Schlüssel.

Abb. 1–3(1) Alice ruft die Funktion ENCRYPT mit einem geheimen Schlüssel auf, um ihre Nachricht in Rauschen zu verwandeln. (2) Dann übergibt sie die verschlüsselte Nachricht an ihren Boten, der nichts über die zugrunde liegende Nachricht erfährt. (3) Sobald Bob die verschlüsselte Nachricht empfängt, kann er den ursprünglichen Inhalt wiederherstellen. Dazu ruft er die Funktion DECRYPT mit demselben geheimen Schlüssel auf, den Alice verwendet hat.

1.3Kerckhoffs’ Prinzip: Nur der Schlüssel wird geheim gehalten

Einen kryptografischen Algorithmus (wie unser Verschlüsselungsprimitiv) zu entwickeln, ist eine einfache Aufgabe, aber einen sicheren kryptografischen Algorithmus zu entwerfen, ist nichts für schwache Nerven. In diesem Buch nehmen wir zwar davon Abstand, derartige Algorithmen zu erstellen, dennoch lernen Sie, wie sich die guten Algorithmen erkennen lassen. Dies kann schwierig sein, da es mehr Auswahlmöglichkeiten gibt, als man für diese Aufgabe formulieren kann. Hinweise finden sich in den wiederholten Misserfolgen in der Geschichte der Kryptografie sowie in den Lehren, die die Gemeinschaft daraus gezogen hat. Wenn wir einen Blick in die Vergangenheit werfen, werden wir erkennen, was einen kryptografischen Algorithmus zu einem vertrauenswürdigen und sicheren Algorithmus macht.

Hunderte von Jahren sind vergangen und viele Königinnen und Fürsten wurden begraben. Seitdem wurde das Papier als wichtigstes Kommunikationsmittel zugunsten besserer und praktischerer Technologien aufgegeben. Heute haben wir Zugang zu leistungsstarken Computern und dem Internet. Zweifellos ist es praktischer, doch es bedeutet auch, dass unsere bisherigen bösartig gesinnten Boten wesentlich leistungsfähiger geworden sind. Die Boten sind nun überall: das WLAN im Starbucks-Café, in dem Sie sitzen, die verschiedenen Server, die das Internet ausmachen und Ihre Nachrichten weiterleiten, und sogar in den Computern, auf denen unsere Algorithmen laufen. Unsere Feinde sind nun in der Lage, viel mehr Nachrichten zu beobachten, da jede Anfrage, die Sie an eine Website richten, durch die falsche Leitung laufen und innerhalb von Nanosekunden verändert oder kopiert werden könnte, ohne dass es jemand bemerkt.

Augenscheinlich gibt es in der jüngeren Geschichte viele Fälle, in denen Verschlüsselungsalgorithmen gescheitert sind, und zwar gebrochen von geheimen staatlichen Organisationen oder von unabhängigen Forschern. Letztlich konnten sie ihre Nachrichten nicht schützen oder ihre Ansprüche erfüllen. Wir haben etliche Lektionen gelernt und langsam verstanden, wie man gute Kryptografie realisiert.

HINWEIS

Ein kryptografischer Algorithmus kann in vielerlei Hinsicht als gebrochen angesehen werden. Bei einem Verschlüsselungsalgorithmus kann man sich mehrere Angriffsmöglichkeiten vorstellen: Der geheime Schlüssel kann dem Angreifer zugespielt werden, Nachrichten lassen sich ohne Hilfe des Schlüssels entschlüsseln, einige Informationen über die Nachricht können durch bloße Betrachtung der verschlüsselten Nachricht aufgedeckt werden usw. Alles, was die Annahmen, die wir über den Algorithmus getroffen haben, in irgendeiner Weise schwächen würde, könnte als Bruch angesehen werden.

Aus dem langen Prozess von Versuch und Irrtum, den die Kryptografie durchlaufen hat, ist ein starkes Konzept hervorgegangen: Um Vertrauen in die Sicherheitsaussagen eines kryptografischen Primitivs zu gewinnen, muss es von Experten öffentlich analysiert werden. Andernfalls verlässt man sich auf Sicherheit durch Unklarheit (Security through obscurity), was in der Vergangenheit nicht gut funktioniert hat. Deshalb nehmen Kryptografen (die Leute, die etwas konstruieren) normalerweise die Hilfe von Kryptoanalytikern (also von den Leuten, die etwas knacken) in Anspruch, um die Sicherheit einer Konstruktion zu analysieren. (Wobei auch Kryptografen oftmals selbst Kryptoanalytiker sind und umgekehrt.)

Nehmen wir als Beispiel den Verschlüsselungsalgorithmus AES (Advanced Encryption Standard). AES ist das Ergebnis eines internationalen Wettbewerbs, den das NIST (National Institute of Standards and Technology) veranstaltet hat.

HINWEIS

Das NIST ist eine US-amerikanische Behörde, deren Aufgabe es ist, Standards zu definieren und Richtlinien für die Verwendung in regierungsnahen Funktionen sowie in anderen öffentlichen oder privaten Organisationen zu entwickeln. Wie AES hat das NIST viele weitverbreitete kryptografische Primitive standardisiert.

Der AES-Wettbewerb dauerte mehrere Jahre, in denen sich viele freiwillige Kryptoanalytiker aus der ganzen Welt versammelt haben, um zu versuchen, die verschiedenen Kandidatenkonstruktionen zu knacken. Nach mehreren Jahren, als genügend Vertrauen durch den Prozess aufgebaut worden war, wurde ein einziger Verschlüsselungsalgorithmus der Wettbewerber nominiert, um zum AES selbst zu werden. Heutzutage vertrauen die meisten Menschen darauf, dass AES ein solider Verschlüsselungsalgorithmus ist, und er wird weithin zur Verschlüsselung fast aller Daten verwendet. Sie zum Beispiel verwenden ihn jeden Tag, wenn Sie im Internet surfen.

Die Idee, kryptografische Standards offen zu gestalten, geht auf Kerckhoffs’ Prinzip zurück, das sich in etwa wie folgt verstehen lässt: Es wäre dumm, sich darauf zu verlassen, dass unsere Feinde nicht herausfinden, welche Algorithmen wir verwenden, denn höchstwahrscheinlich werden sie es herausfinden. Stattdessen sollten wir offen mit diesen Algorithmen umgehen.

Wenn die Feinde von Königin Alice und Lord Bob genau wüssten, wie diese ihre Nachrichten verschlüsseln, wieso ist dann ihr Verschlüsselungsalgorithmus sicher? Die Antwort ist der geheime Schlüssel! Die Geheimhaltung des Schlüssels und nicht die Geheimhaltung des Algorithmus an sich macht das Protokoll sicher. Dieses Konzept zieht sich wie ein roter Faden durch dieses Buch: Sämtliche kryptografischen Algorithmen, die Sie kennenlernen und die in der Praxis üblich sind, sind meistens frei zugänglich und dürfen ohne Einschränkung analysiert und verwendet werden. Nur die geheimen Schlüssel, die als Eingabe für diese Algorithmen dienen, werden geheim gehalten. Bereits im Jahre 1644 sprach Jean Robert du Carlet von einer Ars ipsi secreta magistro (einer Kunst, die selbst für den Meister geheim ist). Im nächsten Abschnitt komme ich auf eine gänzlich andere Art von kryptografischen Primitiven. Aber sehen Sie sich zunächst Abbildung 1–4 an, um das bisher Gelernte einzuordnen.

Abb. 1–4Die kryptografischen Algorithmen, die Sie bisher kennengelernt haben. AES ist eine Instanziierung eines symmetrischen Verschlüsselungsalgorithmus. Dieser ist wiederum Teil der breiteren Klasse von symmetrischen kryptografischen Algorithmen.

1.4Asymmetrische Kryptografie: Zwei Schlüssel sind besser als einer

In unserer Diskussion über symmetrische Verschlüsselung haben wir gesehen, dass sich Königin Alice und Lord Bob zunächst treffen, um sich auf einen symmetrischen Schlüssel zu einigen. Dieses Szenario ist plausibel und viele Protokolle funktionieren tatsächlich auf diese Weise. Allerdings wird dies bei Protokollen mit vielen Teilnehmern schnell unpraktisch: Muss sich unser Webbrowser mit Google, Facebook, Amazon und den anderen Milliarden von Websites treffen, bevor er zu diesen eine sichere Verbindung herstellen kann?

Dieses Problem, das man auch als Schlüsselverteilung bezeichnet, ist lange Zeit schwer zu lösen gewesen, zumindest bis zur Entdeckung einer anderen großen und nützlichen Kategorie kryptografischer Algorithmen in den späten 1970er-Jahren – der asymmetrischen Kryptografie oder Kryptografie mit öffentlichen Schlüsseln (Public Key Cryptography). Asymmetrische Kryptografie verwendet im Allgemeinen verschiedene Schlüssel für verschiedene Funktionen (im Gegensatz zu einem einzigen Schlüssel bei der symmetrischen Kryptografie) oder stellt verschiedenen Teilnehmern verschiedene Sichtweisen bereit. Um zu veranschaulichen, was dies bedeutet und wie Kryptografie mit öffentlichen Schlüsseln hilft, Vertrauen zwischen den Menschen aufzubauen, stelle ich in diesem Abschnitt eine Reihe von asymmetrischen Primitiven vor. Dies ist allerdings nur ein kleiner Ausschnitt dessen, was Sie in diesem Buch lernen werden. Denn ich gehe auf jedes dieser kryptografischen Primitive in den folgenden Kapiteln ausführlicher ein.

1.4.1Schlüsselaustausch oder wie man zu einem gemeinsamen Geheimnis kommt

Als erstes Primitiv der asymmetrischen Kryptografie sehen wir uns den Schlüsselaustausch an. Der erste Algorithmus mit öffentlichen Schlüsseln, der entdeckt und veröffentlicht wurde, war der nach seinen Autoren benannte Schlüsselaustauschalgorithmus Diffie-Hellman (DH). Der DH-Schlüsselaustauschalgorithmus hat vor allem die Aufgabe, ein gemeinsames Geheimnis zwischen zwei Parteien einzurichten. Dieses gemeinsame Geheimnis lässt sich dann für verschiedene Zwecke verwenden (zum Beispiel als Schlüssel für ein symmetrisches Verschlüsselungsprimitiv).

In Kapitel 5 werde ich erklären, wie Diffie-Hellman funktioniert, doch für diese Einführung soll eine einfache Analogie genügen, um zu verstehen, was ein Schlüsselaustausch leistet. Wie viele Algorithmen in der Kryptografie muss auch ein Schlüsselaustausch damit beginnen, dass die Teilnehmer einen gemeinsamen Satz von Parametern verwenden. In unserer Analogie einigen sich Königin Alice und Lord Bob auf ein Quadrat (). Im nächsten Schritt wählen sie jeweils eine eigene Zufallsform für sich aus. Beide legen sie an ihrem jeweiligen geheimen Ort ab. Unsichtbar für andere wählt Königin Alice ein Dreieck () und Lord Bob entscheidet sich für einen Stern (). Diese Objekte müssen unter allen Umständen geheim bleiben! Denn sie stellen ihre privaten Schlüssel dar (siehe Abb. 1–5).

Abb. 1–5Im ersten Schritt eines DH-(Diffie-Hellman-)Schlüsselaustauschs generieren beide Teilnehmer einen privaten Schlüssel. In unserer Analogie wählt Königin Alice ein Dreieck als ihren privaten Schlüssel, während Lord Bob einen Stern als seinen privaten Schlüssel wählt.

Nachdem sie ihre privaten Schlüssel gewählt haben, kombinieren beide individuell ihre geheime Form mit der gemeinsamen Form, auf die sie sich anfangs geeinigt haben (das Quadrat). Die Kombinationen ergeben eindeutige Formen, die ihre öffentlichen Schlüssel darstellen. Nun können Königin Alice und Lord Bob ihre öffentlichen Schlüssel austauschen (daher der Name Schlüsselaustausch), weil öffentliche Schlüssel als öffentliche Informationen gelten. Ich veranschauliche dies in Abbildung 1–6.

Abb. 1–6Der zweite Schritt eines DH-Schlüsselaustauschs, in dem beide Teilnehmer ihre öffentlichen Schlüssel austauschen. Die Teilnehmer erzeugen ihre öffentlichen Schlüssel, indem sie ihre privaten Schlüssel mit einer gemeinsamen Form kombinieren.

Jetzt wird klar, warum dieser Algorithmus als Public-Key-Algorithmus (d. h. Algorithmus mit öffentlichen Schlüsseln) bezeichnet wird. Er benötigt ein Schlüsselpaar, das aus einem privaten Schlüssel und einem öffentlichen Schlüssel besteht. Der letzte Schritt des DH-Schlüsselaustauschalgorithmus ist ziemlich einfach: Königin Alice nimmt den öffentlichen Schlüssel von Lord Bob und kombiniert ihn mit ihrem privaten Schlüssel. Lord Bob macht dasselbe mit dem öffentlichen Schlüssel von Königin Alice und kombiniert ihn mit seinem eigenen privaten Schlüssel. Auf beiden Seiten sollte nun das Ergebnis gleich sein; in unserem Beispiel eine Form, die aus einem Stern, einem Quadrat und einem Dreieck besteht (siehe Abb. 1–7).

Abb. 1–7Im letzten Schritt eines DH-Schlüsselaustauschs erzeugen beide Teilnehmer das gemeinsame Geheimnis. Hierfür kombiniert Königin Alice ihren privaten Schlüssel mit dem öffentlichen Schlüssel von Lord Bob und Lord Bob kombiniert seinen privaten Schlüssel mit dem öffentlichen Schlüssel von Königin Alice. Das gemeinsame Geheimnis lässt sich allein aus der Beobachtung der öffentlichen Schlüssel ermitteln.

Es liegt nun an den Teilnehmern des Protokolls, dieses gemeinsame Geheimnis zu nutzen. In diesem Buch finden Sie mehrere Beispiele dafür, wobei aber vor allem ein Algorithmus infrage kommt, der ein gemeinsames Geheimnis erfordert. So könnten nun Königin Alice und Lord Bob das gemeinsame Geheimnis als Schlüssel verwenden, um weitere Nachrichten mit einem symmetrischen Verschlüsselungsprimitiv zu verschlüsseln. Zur Erinnerung:

Alice und Bob tauschen ihre öffentlichen Schlüssel aus, die ihre jeweiligen privaten Schlüssel maskieren.

Mit dem öffentlichen Schlüssel des anderen Teilnehmers und ihrem jeweiligen privaten Schlüssel können sie ein gemeinsames Geheimnis berechnen.

Ein Angreifer, der den Austausch der öffentlichen Schlüssel beobachtet, bekommt nicht genügend Informationen, um das gemeinsame Geheimnis zu berechnen.

HINWEIS

In unserem Beispiel lässt sich der letzte Punkt leicht aushebeln. Ohne den privaten Schlüssel zu kennen, sind wir nämlich in der Lage, die öffentlichen Schlüssel miteinander zu kombinieren, um das gemeinsame Geheimnis zu ermitteln. Zum Glück ist dies lediglich eine Einschränkung unserer Analogie, doch genügt uns diese, um die Funktionsweise des Schlüsselaustauschs zu verstehen.

In der Praxis ist ein DH-Schlüsselaustausch ziemlich unsicher. Nehmen Sie sich ein paar Sekunden Zeit und überlegen Sie: Warum ist das so?

Da Königin Alice jeden öffentlichen Schlüssel, den sie erhält, als den öffentlichen Schlüssel von Lord Bob akzeptiert, könnte ich die Austauschprozedur abfangen und durch meine ersetzen. Dadurch ist es mir möglich, mich gegenüber Königin Alice als Lord Bob auszugeben (und umgekehrt als Königin Alice gegenüber Lord Bob). Wir sprechen hier von einem Man-in-the-Middle-Angriff (MITM-Angriff), weil das Protokoll erfolgreich angegriffen werden kann. Wie können wir das verhindern? Wie spätere Kapitel zeigen, müssen wir entweder das Protokoll mit einem weiteren kryptografischen Primitiv aufrüsten oder im Voraus wissen, wie der öffentliche Schlüssel von Lord Bob lautet. Aber sind wir dann nicht wieder am Anfang?

Bislang mussten Königin Alice und Lord Bob ein gemeinsames Geheimnis kennen; jetzt müssen Königin Alice und Lord Bob ihre jeweiligen öffentlichen Schlüssel kennen. Wie bringen sie sie in Erfahrung? Ist das wieder ein Henne-Ei-Problem? Irgendwie schon. Es zeigt sich, dass Kryptografie mit öffentlichen Schlüsseln in der Praxis nicht das Problem des Vertrauens löst, aber seine Einrichtung vereinfacht (insbesondere wenn die Anzahl der Teilnehmer groß ist).

Lassen wir es an dieser Stelle gut sein und gehen wir zum nächsten Abschnitt, denn in Kapitel 5 lernen Sie mehr über den Schlüsselaustausch. Es gibt nämlich noch ein paar andere asymmetrische kryptografische Primitive zu entdecken (siehe Abb. 1–8), um unsere Tour durch die praktische Kryptografie abzuschließen.

Abb. 1–8Die kryptografischen Algorithmen, die Sie bisher kennengelernt haben. Zwei große Klassen von kryptografischen Algorithmen sind symmetrische Kryptografie (mit symmetrischer Verschlüsselung) und asymmetrische Kryptografie (mit Schlüsselaustausch).

1.4.2Asymmetrische Verschlüsselung – anders als die symmetrische

Auf die Erfindung des DH-Schlüsselaustauschalgorithmus folgte schnell die Erfindung des RSA-Algorithmus, der nach Ron Rivest, Adi Shamir und Leonard Adleman benannt ist. RSA enthält zwei verschiedene Primitive: einen Verschlüsselungsalgorithmus für den öffentlichen Schlüssel (oder asymmetrische Verschlüsselung) und ein (digitales) Signaturverfahren. Beide Primitive sind Teil der größeren Klasse von kryptografischen Algorithmen – der sogenannten asymmetrischen Kryptografie. Dieser Abschnitt erklärt, was diese Primitive tun und wie sie sich nutzen lassen.

Das erste Primitiv, die asymmetrische Verschlüsselung, hat einen ähnlichen Zweck wie der symmetrische Verschlüsselungsalgorithmus, um den es zuvor ging. Damit lassen sich Nachrichten verschlüsseln, um Vertraulichkeit zu erreichen. Doch im Gegensatz zur symmetrischen Verschlüsselung, bei der die beiden Partner Nachrichten mit demselben symmetrischen Schlüssel ver- und entschlüsseln, sieht es bei der asymmetrischen Verschlüsselung ganz anders aus:

Sie verwendet zwei verschiedene Schlüssel: einen öffentlichen Schlüssel und einen privaten Schlüssel.

Sie bietet eine asymmetrische Sichtweise: Jeder kann mit dem öffentlichen Schlüssel verschlüsseln, aber nur der Besitzer des privaten Schlüssels kann Nachrichten entschlüsseln.

Anhand einer einfachen Analogie will ich erklären, wie man asymmetrische Verschlüsselung verwenden kann. Los geht es wieder mit unserer Freundin, der Königin Alice, die einen privaten Schlüssel (und den dazugehörigen öffentlichen Schlüssel) besitzt. Ihren öffentlichen Schlüssel stellen wir als offene Truhe dar, die sie der Öffentlichkeit zur Verfügung stellt, sodass jeder sie benutzen kann (siehe Abb. 1–9).

Abb. 1–9Um asymmetrische Verschlüsselung zu nutzen, muss Königin Alice zuerst ihren öffentlichen Schlüssel (hier als geöffnete Truhe dargestellt) bekanntmachen. Nun kann jeder mit dem öffentlichen Schlüssel Nachrichten an sie verschlüsseln. Und sie sollte in der Lage sein, diese mit dem zugehörigen privaten Schlüssel zu entschlüsseln.

Jetzt können Sie und ich und jeder, der möchte, eine Nachricht an sie mit ihrem öffentlichen Schlüssel verschlüsseln. Stellen Sie sich in unserer Analogie vor, Sie würden Ihre Nachricht in die offene Truhe legen und sie dann schließen. Sobald die Truhe geschlossen ist, sollte niemand außer Königin Alice in der Lage sein, sie zu öffnen. Die Truhe schützt die Geheimhaltung der Nachricht effektiv vor Beobachtern. Die geschlossene Truhe (oder der verschlüsselte Inhalt) kann dann an Königin Alice geschickt werden und sie kann mit ihrem privaten Schlüssel (der nur ihr bekannt ist, wie Sie wissen) die Nachricht entschlüsseln (siehe Abb. 1–10).

Abbildung 1–11 zeigt eine Zusammenfassung der kryptografischen Primitive, die Sie bisher kennengelernt haben. Um unsere Tour durch die praktische Kryptografie abzuschließen, fehlt nur noch eines!

Abb. 1–10Asymmetrische Verschlüsselung: (1) Jeder kann mit dem öffentlichen Schlüssel von Königin Alice Nachrichten an sie verschlüsseln. (2) Nachdem sie die Nachricht erhalten hat, kann sie (3) den Inhalt der Nachricht mit ihrem zugeordneten privaten Schlüssel entschlüsseln. Niemand ist in der Lage, die an Königin Alice gerichteten Nachrichten zu beobachten, während sie an sie gesendet werden.

Abb. 1–11Die kryptografischen Algorithmen, die Sie bisher kennengelernt haben: Zwei große Klassen der kryptografischen Algorithmen sind die symmetrische Kryptografie (mit symmetrischer Verschlüsselung) und die asymmetrische Kryptografie (mit Schlüsselaustausch und asymmetrischer Verschlüsselung).

1.4.3Digitale Signaturen – wie Unterschrift mit Stift und Papier

Wir haben gesehen, dass RSA einen asymmetrischen Verschlüsselungsalgorithmus bereitstellt, aber wie weiter vorn schon erwähnt, bietet er auch einen Algorithmus für digitale Signaturen. Die Erfindung dieses kryptografischen Primitivs einer digitalen Unterschrift war eine große Hilfe, um Vertrauen zwischen den Alices und Bobs unserer Welt aufzubauen. Vergleichbar ist es mit echten Unterschriften, die man zum Beispiel auf dem Mietvertrag leisten muss, wenn man eine Wohnung anmietet.

»Wie sieht es aus, wenn meine Unterschrift gefälscht wird?«, fragen Sie vielleicht, und tatsächlich bieten echte Unterschriften in der wirklichen Welt nicht viel Sicherheit. Andererseits können kryptografische Signaturen auf die gleiche Weise verwendet werden, bieten aber ein kryptografisches Zertifikat, auf dem Ihr Name steht. Dabei ist Ihre kryptografische Signatur fälschungssicher und lässt sich leicht von anderen überprüfen. Sehr praktisch verglichen mit den archaischen Unterschriften, mit denen Sie früher Schecks unterzeichnet haben!

In Abbildung 1–12 nehmen wir ein Protokoll an, bei dem Königin Alice Lord David zeigen möchte, dass sie Lord Bob vertraut. Dies ist ein typisches Beispiel dafür, wie man in einer Umgebung mit mehreren Partnern Vertrauen aufbauen und dafür asymmetrische Kryptografie einsetzen kann. Durch Unterzeichnung des Papers, das »Ich, Königin Alice, vertraue Lord Bob« enthält, kann sich Königin Alice positionieren und Lord David mitteilen, dass Lord Bob zu vertrauen ist. Wenn Lord David bereits Königin Alice und ihrem Signaturalgorithmus vertraut, kann er sich im Gegenzug dafür entscheiden, Lord Bob zu vertrauen.

Abb. 1–12Lord David vertraut bereits Königin Alice. Da Königin Alice Lord Bob vertraut, kann dann Lord David ebenso auch Lord Bob vertrauen?

Genauer ausgedrückt kann Königin Alice mit dem RSA-Signaturverfahren und ihrem privaten Schlüssel die Nachricht »Ich, Königin Alice, vertraue Lord Bob« unterzeichnen. Dabei wird eine Signatur erzeugt, die wie zufälliges Rauschen aussehen sollte (siehe Abb. 1–13).