Kennen ist nicht Tun. Tun ist nicht Sichern.
Aristoteles unterschied drei Formen des Wissens. Die Episteme ist das theoretische Wissen — wissen, dass etwas wahr ist. Die Techne ist das produktive Wissen — wissen, wie man etwas macht. Die Phronesis ist das praktische Wissen — wissen, was in einer konkreten Situation zu tun ist.
Die Kryptographie erfordert alle drei. Und die Distanz zwischen ihnen ist der Raum, in dem die meisten Schwachstellen auftreten.
Episteme: das Paper
Kyber ist eine Errungenschaft der Episteme. Das Paper von Bos et al. (2018) beschreibt ein Schlüsseleinkapselungsschema basierend auf Module-LWE, mit Sicherheitsbeweisen, begründeten Parametern, Analyse bekannter Angriffe. Es ist theoretisches Wissen in seiner reinsten Form: Es definiert, beweist, schlussfolgert.
Das Paper zu lesen und zu verstehen, erzeugt das Gefühl, etwas Wichtiges erfasst zu haben. Die Struktur ist elegant: Die Matrix A wird aus einem öffentlichen Seed erzeugt, das Geheimnis s wird mit einer zentrierten Binomialverteilung abgetastet, der Ciphertext wird auf 3 Bits pro Koeffizient komprimiert, der FO-Transform sichert IND-CCA2. Alles passt zusammen.
Aber die Episteme hat eine Grenze: Das Paper beweist, dass wenn die Komponenten korrekt ausgeführt werden, dann das Schema sicher ist. Die konditionale Aussage ist wahr. Aber die reale Welt evaluiert keine Konditionale; sie führt Code aus.
Episteme (das Paper): Wenn (NTT korrekt ∧ Zeit konstant ∧ FO korrekt)
dann ist das Schema IND-CCA2 sicher.
Techne (der Code): NTT korrekt? OK Zeit konstant? ? FO korrekt? OK
Die Variable, die in der Prämisse nicht vorkommt,
ist die, die die tatsächliche Sicherheit bestimmt.
Techne: die Implementierung
Während meiner Lernphase implementierte ich Kyber in Dart/Flutter — xkyber_crypto — exakt nach FIPS 203. Die Techne, das Paper in Code zu übersetzen, hat ihre eigenen Anforderungen: Datenrepräsentationen wählen, Speicher verwalten, SHAKE128 von Grund auf implementieren, die Multiplikation von Polynomen im NTT-Domän organisieren.
Jede Implementierungsentscheidung offenbart etwas, das das Paper nicht sagt:
Das Paper schreibt: "Sample s ← β_η^k"
Die Implementierung schreibt:
void cbd(Poly r, Uint8List buf) { for (int i = 0; i < KYBER_N ~/ 8; i++) { int t = buf[2 * i] | (buf[2 * i + 1] << 8); for (int j = 0; j < 8; j++) { int aj = (t >> j) & 1; int bj = (t >> (j + 8)) & 1; r.coeffs[8 * i + j] = aj - bj; } } }Das Paper spezifiziert nicht die Reihenfolge der Bits. Es sagt nicht, ob die Schleife parallelisierbar sein soll. Es erwähnt nicht, dass jeder Zugriff auf
r.coeffs[...]in Dart einen Bounds-Check ausführt, den die VM nicht eliminieren kann, und dass jeder Bounds-Check eine Gelegenheit für Zeitvariationen ist.
Die Implementierung war funktional korrekt. Alle Testvektoren bestanden. Aber die Techne offenbarte etwas, das die Episteme nicht konnte: Die Sprache ist wichtig. Dart wurde nicht für hochsichere Kryptographie entwickelt. Es gibt keine Garantie, dass die VM eine Schleife ohne datenabhängige Verzweigungen kompiliert. Es gibt keine Möglichkeit sicherzustellen, dass die Montgomery-Reduktion zeitkonstant ist, wenn ~/ 65536 je nach JIT-Optimierungsphase als Division oder als Verschiebung kompiliert werden kann.
Der Vergleich von Ciphertexts im FO-Transform — der kritischste Punkt — veranschaulicht den Abgrund:
// Ist dies zeitkonstant?
bool verify(Uint8List a, Uint8List b) {
if (a.length != b.length) return false;
int r = 0;
for (int i = 0; i < a.length; i++) {
r |= a[i] ^ b[i];
}
return r == 0;
}
In C wird diese Funktion zu Anweisungen kompiliert, die ein Experte inspizieren und verifizieren kann. In Dart kann der JIT-Compiler die Schleife umordnen, Iterationen zusammenführen, Dead-Code-Eliminierung anwenden, wenn er ableitet, dass r nicht verwendet wird, oder GC-Barrieren bei Schreibvorgängen einfügen. Es gibt kein volatile. Es gibt kein __attribute__((const)). Es gibt keine Möglichkeit, der VM zu sagen: "Dies muss genau so ausgeführt werden, wie es geschrieben steht, ohne Optimierungen, ohne Umordnungen, ohne Überraschungen."
Die Techne, Kyber in Dart zu implementieren, stieß an eine materielle Grenze: Die Sprache stellt die Werkzeuge nicht bereit, die die Kryptographie erfordert.
Phronesis: das Archiv
An diesem Punkt auferlegt die Phronesis — das praktische Wissen, was zu tun ist — eine Entscheidung. Die Implementierung funktioniert. Die Tests bestehen. Aber Sicherheit wird nicht durch Tests bewiesen, die bestehen: Sie wird durch Eigenschaften bewiesen, die garantiert werden.
Es gab keine Möglichkeit, konstante Zeit in der Dart-VM zu garantieren. Es gab keine Möglichkeit, das vom AOT-Compiler erzeugte Assembly zu inspizieren, um zu überprüfen, ob die Schleifen verzweigungsfrei blieben. Es gab keine Möglichkeit sicherzustellen, dass der Garbage Collector nicht genau zum Zeitpunkt des FO-Transform-Vergleichs messbare Pausen einführte.
Die Entscheidung war, das Repository zu archivieren. Nicht wegen technischen Versagens — die Implementierung war korrekt — sondern aus intellektueller Redlichkeit:
Die Entscheidung zu archivieren:
Funktioniert es? Ja. Die Tests bestehen.
Ist es sicher? Kann nicht bewiesen werden.
Kann es sicher gemacht werden? Nur durch Neuschreiben in C/Rust und FFI-Anbindung.
Hat es Wert als Referenz? Ja, als Beispiel, wie weit die Techne
ohne die geeignete Infrastruktur reicht.
Aristoteles schrieb, dass die Phronesis weder Wissenschaft noch Kunst ist: Sie ist die Fähigkeit, gut darüber zu beraten, was für den Menschen gut oder schlecht ist. In der Kryptographie ist die Phronesis die Fähigkeit zu erkennen, wann eine Implementierung unsicher ist, selbst wenn alle Tests besagen, dass sie korrekt ist.
Was das Tun lehrt
Die Serie "Die Distanz des Geheimnisses" hat fünf Distanzen erkundet:
- I: die Distanz zwischen der LWE-Vermutung und dem Sicherheitsbeweis
- II: die Distanz zwischen dem Algorithmus und seiner zeitkonstanten Implementierung
- III: die Distanz zwischen der rechnerischen Sicherheit und der physikalischen Landauer-Grenze
- IV: die Distanz zwischen dem gegenwärtigen Schutz und der zukünftigen Bedrohung (Harvest Now)
- V: die Distanz zwischen institutionellem Vertrauen und mathematischer Diversität
VI fügt eine fundamentalere Distanz hinzu: die Distanz zwischen Wissen und Tun.
Das Kyber-Paper ist wahres Wissen. Die Implementierung in Dart war produktives Wissen. Aber die tatsächliche Sicherheit — die einem echten Angriff widersteht, nicht einem Unit-Test — erfordert etwas, das keines von beiden allein bietet: Die Fähigkeit zu erkennen, dass ein System gleichzeitig funktional korrekt und kryptographisch unsicher sein kann.
Das lernt man nicht im Paper. Man lernt es durch Implementieren, Scheitern, Archivieren.
Mit "Das Wissen und das Tun" schließt sich der Kreis von "Die Distanz des Geheimnisses". Die Erkundung begann mit der Frage, wann wir sagen können, dass etwas sicher ist. Die Antwort nach sechs Essays lautet: niemals vollständig. Aber wir können uns annähern — durch die Kombination der Theorie, die beweist, der Praxis, die konstruiert, und der Weisheit, die die Grenzen beider erkennt.
Querverweise zur Forschung:
- Implementierung in Dart — Code aus xkyber_crypto extrahiert, Kontrast mit FIPS 203
- Konstante Zeit in Dart — Einschränkungen der VM, kritische Punkte
- Implementierung — Algorithmische Details des Schemas
- Schlussfolgerungen — Abschließende Synthese der Forschung
