Was in den Nachweis gehört
Ein Nachweis enthält alles, was man zum Nachrechnen braucht: die geprüfte Handlung mit ihren Parametern, den Zustand, von dem die Rechnung ausging, mit Herkunft und Erfassungszeit, die Regeln in der verwendeten Version, das Rechenmodell und seine Version, die Einstellungen der Rechnung wie Löser, dessen Version und Budget, und das Ergebnis: Nachweis, Gegenbeispiel oder unentschieden.
Damit derselbe Inhalt immer dieselben Bytes ergibt, wird er kanonisch geschrieben, nach dem JSON Canonicalization Scheme (RFC 8785): Schlüssel sortiert, Zahlen und Zeichenketten in einer festgelegten Darstellung, kein überflüssiger Leerraum.
Prüfwert mit SHA-256
Über die kanonischen Bytes rechnet KALKÜL SHA-256 nach FIPS 180-4. Der Prüfwert hat 256 Bit und ändert sich, wenn sich ein einziges Zeichen des Datensatzes ändert. Wer den Datensatz hat, rechnet ihn mit jedem Standardwerkzeug nach.
Für die Filmszene zu KALKÜL steht ein Beispieldatensatz in Textzeilen mit seinem SHA-256-Prüfwert im Quelltext; ein Test rechnet ihn mit node:crypto nach. Die kanonische Form nach RFC 8785 ist für den Betrieb vorgesehen.
Vom Datensatz zum Nachweis
Unten der Datensatz der Prüfung, darüber seine kanonische Form, dann Prüfwert, Signatur und Zeitstempel. Jede Schicht prüft man mit offenen Verfahren, ohne Zugang zu KALKÜL.
- Zeitstempel (unabhängiger Dienst): RFC 3161; Schnittstellen Dritte prüfen.
- Signatur (wer es erzeugt hat): Ed25519.
- Prüfwert (ob sich etwas änderte): SHA-256.
- Kanonische Form: JCS.
- Datensatz: Handlung, Zustand, Regeln, Rechenmodell, Ergebnis.
Signatur mit Ed25519
Ein Prüfwert zeigt, dass sich nichts geändert hat, aber nicht, wer ihn erzeugt hat. Dafür signiert KALKÜL den Prüfwert mit Ed25519, einem Signaturverfahren auf der Edwards-Form der Kurve Curve25519 nach RFC 8032. Öffentliche Schlüssel haben 32 Byte, Signaturen 64 Byte, und das Verfahren ist deterministisch: Derselbe Schlüssel und dieselbe Nachricht ergeben immer dieselbe Signatur, ohne Zufall beim Signieren.
Der private Schlüssel liegt nach der Bauweise in einem Hardware-Sicherheitsmodul. Der öffentliche wird veröffentlicht und mit seinem Gültigkeitszeitraum geführt, sodass jeder mit ihm prüfen kann, dass ein Nachweis aus KALKÜL stammt, auch nach einem Wechsel des Schlüssels.
Zeitstempel nach RFC 3161
Eine Signatur sagt nicht, wann. Ein Zeitstempel nach RFC 3161 bestätigt durch einen unabhängigen Zeitstempeldienst (Time Stamping Authority), dass der Prüfwert zu einem bestimmten Zeitpunkt existierte. KALKÜL schickt dafür nur den Prüfwert der Signatur, nicht den Inhalt, und erhält ein signiertes Zeitstempeltoken zurück.
Qualifizierte elektronische Zeitstempel nach der eIDAS-Verordnung (Verordnung (EU) Nr. 910/2014, Artikel 41 und 42) stammen von qualifizierten Vertrauensdiensteanbietern; für sie gilt die Vermutung, dass Datum und Uhrzeit richtig sind und die Daten seitdem unverändert. Vorgesehen ist ein solcher Dienst; welcher, entscheidet der Betreiber.
So rechnen Dritte nach
Eine Prüferin braucht fünf Dinge: den Datensatz, die Signatur, den öffentlichen Schlüssel von KALKÜL, das Zeitstempeltoken und das Zertifikat des Zeitstempeldienstes. Sie bildet die kanonische Form, rechnet SHA-256, prüft die Ed25519-Signatur über den Prüfwert und prüft, dass das Zeitstempeltoken über den Prüfwert der Signatur ausgestellt und gültig signiert ist; so bleibt die Signatur datiert, auch wenn der Schlüssel später kompromittiert wird. Für keinen dieser Schritte braucht sie Zugang zu KALKÜL.
Will sie das Ergebnis selbst bestätigen, rechnet sie die Prüfung neu: mit denselben Regeln, demselben Zustand und einem Löser ihrer Wahl. Ein Gegenbeispiel prüft sie durch Einsetzen, einen Nachweis über den beigelegten Beweis oder eine eigene Gegenrechnung.
d = JCS(Datensatz) RFC 8785
h = SHA-256(d) FIPS 180-4
sig = Ed25519.sign(sk, h) RFC 8032
tst = Zeitstempeldienst(SHA-256(sig)) RFC 3161
prüfen: SHA-256(JCS(Datensatz)) = h
Ed25519.verify(pk, h, sig)
tst nennt SHA-256(sig) und ist gültig signiertEckdaten
- Inhalt
- Handlung, Zustand mit Herkunft, Regeln mit Version, Rechenmodell mit Version, Einstellungen, Ergebnis
- Kanonische Form
- JSON Canonicalization Scheme, RFC 8785
- Prüfwert
- SHA-256 nach FIPS 180-4, 256 Bit
- Signatur
- Ed25519 nach RFC 8032; öffentlicher Schlüssel 32 Byte, Signatur 64 Byte
- Zeitstempel
- RFC 3161; qualifiziert nach eIDAS, Artikel 41 und 42
- Schlüssel
- privat in einem Hardware-Sicherheitsmodul, öffentlich mit Gültigkeitszeitraum
- Prüfung durch Dritte
- ohne Zugang zu KALKÜL, mit Standardwerkzeugen
Weiter
- KALKÜL · TechnikRegelnWie KALKÜL Regeln als Formeln mit einem SMT-Löser prüft: unerfüllbare Negation ist ein Nachweis, erfüllbare ein Gegenbeispiel, alles andere kein Ja.
- KALKÜL · TechnikIntervalleWie KALKÜL nichtlineare Bedingungen und Messunsicherheit mit Intervallen und einer Zerlegung in Boxen entscheidet, und warum unentschieden kein Ja ist.
- ProduktKALKÜLHandlungen vorab rechnen, gegen Regeln prüfen und belegen
Wer prüft bei Ihnen Entscheidungen im Nachhinein? Mit ihm legen wir fest, was ein Nachweis enthalten muss.