Wir kommen nun zur Mathematik und zur Anwendung,
Systeme, die Kryptographie nutzen, zu implementieren.
Aber da ist eine Sache, die ich wirklich betonen möchte,
und sichergehen, dass ihr sie versteht.
Eigene Kryptographie zu implementieren ist sehr anspruchsvoll,
es ist etwas, das man sehr leicht falsch machen kann.
Ein Beispiel davon, um es im Kopf zu haben,
und das ist eine wichtige Sache:
Wir betrachten Programme oft als black boxes
mit Eingaben und Ausgaben,
und unsere Verschlüsselungsfunktion wird üblicherweise einen Schlüssel und eine Nachricht bekommen
und einen Geheimtext erzeugen.
Und die Implementationen, die wir in diesem Kurs zeigen,
werden funktional korrekt sein,
sie werden die korrekten Ausgaben erzeugen.
Sie werden nicht sicher sein,
und der Grund dafür, dass sie nicht sicher sind, ist:
Wenn wir etwas benutzen, ist es keine echte black box.
Es gibt viele Dinge, die jemand
dabei beobachten könnte.
Er könnte beobachten, wie lange es dauert.
Und wenn man Eigenschaften einer Funktion
beobachten kann, neben ihrem Verhalten als Funktion,
neben den Ein- und Ausgaben,
dann nennt man das einen Seitenkanal.
Ein Beispiel für einen Seitenkanal ist die Dauer.
Die Zeitspanne, die die Funktion braucht, könnte variieren.
Sie könnte von der Nachricht oder vom Schlüssel abhängen.
Der meiste Code, den wir in diesem Kurs schreiben,
wird diese Eigenschaft haben.
Wir werden nicht anfangen, Komplexität hinzuzufügen
zu unserem Code, um uns um etwas wie Seitenkanäle zu kümmern.
Aber um die Sachen korrekt zu implementieren,
ist das wirklich wichtig.
Und Code kann auf vielerlei Weise Seitenkanäle haben.
Er könnte den Cache des Prozessors beeinflussen
und das könnte irgendwie sichtbar sein.
Er könnte sogar beeinflussen, wieviel Energie
dein Prozessor verbraucht.
Man hat gezeigt, dass man Smartcards knacken kann,
indem man den Stromverbrauch während der Verschlüsselung misst,
und das liefert Erkenntnisse über den Schlüssel.
Das ist nur ein Beispiel der Art Dinge,
wegen denen es sehr schwer ist, die Implementation von Kryptographie richtig zu machen.
Das sind Dinge, um die ihr euch, wenn ihr Kryptographie
für eine wichtige Anwendung baut, kümmern müsst.
Das sind Dinge, um die wir uns nicht kümmern werden,
in den meisten Programmen, die wir im Kurs schreiben.
Darum solltet ihr diese Implementationen nicht als sicher betrachten.
Der einzige Grund, eigene Kryptographie zu implementieren
ist zum Spaß und zum Lernen.
Und wir hoffen, dass ihr das von diesen Kurs haben werdet, indem ihr es macht.
Aber wenn ihr tatsächlich Kryptographie verwenden wollt,
um irgendetwas Wichtiges zu schützen,
dann solltet ihr Bibliotheken verwenden,
die sorgsam untersucht worden sind,
die so geschrieben sind, dass sie
solche Dinge wie Seitenkanäle berücksichtigen,
und die von anderen Personen geprüft wurden,
so sorgfältig, dass sie einen höheren Level des Vertrauens genießen,
dass sie korrekt und sicher sind.
Ich möchte sichergehen, dass jeder gut aufgepasst hat
bei diesem letzten Punkt
und wir machen ein Quiz:
Sollte man Programmcode von diesem Kurs verwenden,
um nukleare Launch Codes zu schützen?
Die Antworten sind Nein Kreuze die richtige Antwort an