Die meisten Systeme signieren den Bericht. FahCel signiert jeden Messwert und verkettet sie miteinander. Dadurch wird jede Manipulation eines Werts an beliebiger Stelle der Historie mathematisch nachweisbar.
Die Versiegelung erfolgt bei Eingang. Der Nachweis existiert also, bevor jemand danach fragt. Für QS-Verantwortliche werden drei typische Stresssituationen zu Dingen, die bereits erledigt sind.
Exportiere ein signiertes PDF mit Zeitstempel, vollständiger Messhistorie und Prüfergebnis – aufbereitet für den Abgleich mit den Unterlagen, anhand derer du bereits geprüft wirst.
EU GDP · 21 CFR Part 11 §11.10(e)Sobald ein Messwert einen Grenzwert überschreitet, wird das Team informiert. Der Datensatz ist bereits in der Kette versiegelt, nicht erst nachträglich rekonstruiert.
Bei Eingang versiegelt · nicht erst beim BerichtÜbergib den Datensatz und das offene Prüfwerkzeug. Prüfer können die Kette selbst offline nachrechnen und zum selben Ergebnis kommen.
Deterministisch · offline · Open SourceEin einzelner Hash zeigt, ob ein Messwert bearbeitet wurde, nicht aber, ob er gelöscht, umgeordnet oder unbemerkt eingefügt wurde. Zwei Hashes – einer über die Nutzdaten, einer über die Nutzdaten plus den vorherigen record_hash – machen jede Form der Manipulation erkennbar.
Ein Fingerabdruck der fachlichen Messdaten, unabhängig von ihrer Position in der Kette. Die genauen Felder und die Kanonisierungsregel sind proprietär, aber deterministisch: Derselbe Messwert liefert auf jedem System immer denselben Hash.
Das Kettenglied. Jeder record_hash enthält den record_hash des vorherigen Messwerts. So bilden die Hashes einen gerichteten Abhängigkeitsgraphen. Der erste Messwert verwendet prev_hash = '0'.
Eine verkettete Liste, in der jede Verknüpfung unabhängig prüfbar ist. Wird Messwert #3 geändert, schlagen die Prüfungen von #4 bis #N fehl: Ihr gespeicherter record_hash stimmt nicht mehr mit dem neu berechneten überein.
Das Prüfwerkzeug ist deterministisch und identisch mit dem Code zur Versiegelung der Kette. Dieselben Messwerte liefern immer dasselbe Ergebnis. Kunden und Auditoren führen die Vollversion offline mit exportierten Datensätzen aus. Die zentrale Versiegelungsregel bleibt proprietär.
// hashChain.js export function verifyChain(readings) { const sorted = [...readings].sort( (a, b) => a.device_timestamp - b.device_timestamp ); let prev_hash = sorted[0].prev_hash; // anchor ('0' at genesis) let firstTampered = null; for (const r of sorted) { core sealing — proprietary, redacted const data_hash = sha256(canon(██████████)); const record_hash = sha256(canon({ ████████ ┄ ████, prev_hash, ████████████ })); if (data_hash !== r.data_hash || prev_hash !== r.prev_hash || record_hash !== r.record_hash) { firstTampered ??= r.seq; // remember first failure } prev_hash = r.record_hash; // walk forward regardless } return { valid: firstTampered === null, first_tampered_at: firstTampered, total: sorted.length, }; }
Das Prüfwerkzeug durchläuft Messwerte in device_timestamp -Reihenfolge, nicht in Eingangsreihenfolge. Ein später eingegangener, aber früher erfasster Messwert wird an der richtigen Position eingeordnet.
Für jeden Messwert berechnet das Prüfwerkzeug data_hash und record_hash aus den gespeicherten Feldern mit denselben Kanonisierungsregeln neu. Gespeicherten Werten wird nicht vertraut; sie werden neu berechnet und verglichen.
Die erste Abweichung in einem der Hashes wird markiert. Jeder folgende Messwert gilt als verdächtig: Selbst wenn seine eigenen Hashes gültig wirken, ist die Integrität der Kette bereits verloren.
valid, first_tampered_at, sowie die Gesamtzahl geprüfter Messwerte. Dieselben Werte stehen im Audit-PDF. Prüfer sehen genau das, was dein QS-Team gesehen hat, und können es selbst nachvollziehen.
Ein einzelner Hash erkennt bearbeitete Messwerte, aber keine gelöschten, umgeordneten oder unbemerkt eingefügten. FahCel speichert zwei: einen data_hash über die Nutzdaten des Messwerts und einen record_hash über diese Nutzdaten plus den vorherigen record_hash. Zusammen machen sie jede Form der Manipulation erkennbar, nicht nur Änderungen einzelner Felder.
record_hash in einem Kühlkettenprotokoll?Der record_hash ist das Kettenglied: der SHA-256 der kanonischen Nutzdaten des Messwerts, kombiniert mit dem vorherigen record_hash. So bilden die Hashes einen gerichteten Abhängigkeitsgraphen. Der erste Messwert einer Sendung verwendet prev_hash = '0'. Ändere einen Messwert, und jeder record_hash danach ändert sich.
Führe verifyChain() für die exportierten Messwerte aus. Es berechnet jeden data_hash aus den Nutzdaten und jeden record_hash aus den Nutzdaten plus seinem Vorgänger neu und vergleicht sie mit den gespeicherten Werten. Die Prüfung ist deterministisch, reproduzierbar und funktioniert offline. Ein Auditor kann das Ergebnis daher ohne Vertrauen in FahCel nachvollziehen.
Ab diesem Messwert schlägt die Prüfung fehl. Wird Messwert #3 geändert, fallen #4 bis #N durch, weil ihr gespeicherter record_hash nicht mehr mit dem neu berechneten übereinstimmt. Die erste gebrochene Verknüpfung wird markiert, alles danach gilt als nicht vertrauenswürdig. Du erfährst also, wo die Manipulation begann, nicht nur, dass sie stattfand.
Das Hashing nutzt SHA-256 gemäß FIPS 180-4. Der manipulationserkennbare Audit-Trail orientiert sich an 21 CFR Part 11 §11.10(e). Diese Vorgabe verlangt sichere, computergenerierte Audit-Trails mit Zeitstempel, die frühere Informationen nicht verdecken. Er unterstützt außerdem die Dokumentationsanforderungen der EU GDP.
In einer 20-minütigen QS-Demo versiegeln wir Temperaturmesswerte bei Eingang, führen verifyChain vor deinen Augen aus und manipulieren dann einen Messwert. Du siehst genau, wo die Kette dies erkennt. Keine Folien – das echte System und die echten Hashes.