Datenintegrität · Pro Messwert

Jeder Messwert wird kryptografisch versiegelt sobald er eingeht.

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.

Hash-Algorithmus
SHA-256 FIPS 180-4 · 21 CFR Part 11 §11.10(e)
Hashes pro Messwert
Zwei data_hash · record_hash
Verifizierung
Deterministisch offline, reproduzierbar, Open Source
Ursprung
prev_hash = '0' ein Ursprung pro Gerätelebensdauer
Vor deiner nächsten Inspektion

Die Kryptografie übernimmt die Arbeit. Du bist bereit.

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.

Auditbereites Paket mit einem Klick

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)

Abweichungswarnungen in Echtzeit

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

Prüfung, die der Auditor wiederholen kann

Ü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 Source
Nachweisregister · Live

Ändere einen Messwert. Sieh zu, wie die Kette bricht.

Wähle einen Messwert und ändere die Temperatur. Jeder folgende record_hash wird neu berechnet und verglichen. Die erste gebrochene Verknüpfung wird markiert, alle nachfolgenden Werte gelten als nicht vertrauenswürdig.
Gerät FC-L421 · Gefrierraum 3 · Charge L2604-B Kette verifiziert Ursprung: 0 · Messwerte: 6
✓
6 von 6 Messwerten verifiziert. Jeder data_hash stimmt mit seinen Nutzdaten überein; jeder record_hash verweist auf seinen Vorgänger.
Prüfzeit · 0.4 ms
Das Prinzip

Zwei Hashes pro Messwert. Einer versiegelt die Daten, einer die Historie.

Ein 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.

Ebene 1 · Integrität der Nutzdaten

data_hash

SHA-256(deterministicJSON(// Messfelder – proprietär
  { ████████ ┄ ████████ ┄ ████,
    ███████ ┄ ██████ ┄ █████ ┄ ████████,
    ████████ ┄ █████████ ┄ ███████,
    ██████████ ┄ ███████████ }

))

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.

Zweck. Manipulationen einzelner Messdaten erkennen. Ändert sich ein Feld – eine Dezimalstelle, eine Sekunde –, ändert sich der data_hash.
Ebene 2 · Integrität der Historie

record_hash

SHA-256(deterministicJSON({
  ...business_fields,
  prev_hash // record_hash des vorherigen Messwerts
}))

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'.

Zweck. Ändere einen Messwert, und jeder nachfolgende record_hash ändert sich. Die Kette zeigt dir wo die Manipulation begann.
Kettenstruktur

Jeder Messwert hängt von allen vorherigen Messwerten ab.

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.

Messwert #001 · Ursprung
-20.4 °C
prev_hash0
data_hasha17b…39fc
record_hashc4f0…91ae
prev_hash
Messwert #002
-20.3 °C
prev_hashc4f0…91ae
data_hash7d22…8e01
record_hashe8a3…1c77
prev_hash
Messwert #003
-20.6 °C
prev_hashe8a3…1c77
data_hashb91c…4a20
record_hash2f6d…d8b3
prev_hash
Messwert #004
-20.5 °C
prev_hash2f6d…d8b3
data_hash03fe…6a15
record_hash91ba…47ec
Verifizierung

verifyChain() – deterministisch, reproduzierbar, offline.

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,
  };
}
1

Nach Gerätezeitstempel sortieren

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.

2

Beide Hashes vollständig neu berechnen

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.

3

Erste gebrochene Verknüpfung finden

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.

4

Überprüfbares Ergebnis liefern

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.

Häufige Fragen

Was Auditoren und QS-Leitungen fragen bevor sie der Kette vertrauen.

Warum braucht jeder Temperaturmesswert zwei Hashes?

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.

Was ist ein 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.

Wie prüfst du, ob eine Temperaturkette unverändert ist?

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.

Was passiert, wenn jemand einen früheren Temperaturmesswert ändert?

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.

An welchen Standards orientiert sich die Hash-Kette?

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.

Sieh, wie die Kette hält – oder bricht. Live.

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.

// über die API deines eigenen Datenloggers prüfen
$ fahcel verify readings.csv
→ 14.208 Messwerte geprüft
→ Ursprung: prev_hash = '0'
→ Kette: verifiziert ✓

// einen Messwert ändern, erneut ausführen
$ fahcel verify readings_edited.csv
→ Integritätsverletzung bei Messwert 8.341
→ Kette: GEBROCHEN ✗