Zum Hauptinhalt springen
Audact
Angebot ansehen

Receipt Explorer

Eine Quittung im eigenen Browser nachrechnen.

Unten liegt eine Beispielquittung, schon geladen und schon geprüft – Sie müssen nichts anklicken. Drei ihrer Werte lassen sich ohne Schlüssel nachrechnen, hier, in Ihrem eigenen Browser: der Eingabe-Hash, der Ausgabe-Hash und der Evidence-Hash des vorherigen Kettenereignisses. Fügen Sie Ihre eigene Quittung über das Beispiel ein, oder ändern Sie eine Ziffer und sehen Sie zu. Zu uns wird nichts übertragen.

Was geprüft wurde
Wird berechnet…
Eingabe-Hash
–Wird berechnet…
Ausgabe-Hash
–Wird berechnet…
Evidence-Hash
–Wird berechnet…

Ändern Sie einen Wert, und die drei Prüfungen laufen beim Tippen mit.

Beispielquittung im Produktivformat: synthetische Werte, keine echte Interaktion.

Die drei Prüfungen

  • Eingabe-HashWird berechnet…

    SHA-256 über den rohen UTF-8-Text von sample_texts.input.

    Hier neu berechnet
    –
    In der Quittung
    –
  • Ausgabe-HashWird berechnet…

    SHA-256 über den rohen UTF-8-Text von sample_texts.output. Urteilsregel (F21): ALLOW: Ausgabe gleich Eingabe; MODIFY oder BLOCK: Ausgabe unterscheidet sich.

    Hier neu berechnet
    –
    In der Quittung
    –
  • Evidence-HashWird berechnet…

    SHA-256 über den durch senkrechte Striche getrennten Vorabbild von preceding_event: event_id, call_id, sequence, event_type, timestamp, canonicalJSON(data), previous_hash.

    Hier neu berechnet
    –
    In der Quittung
    –

Authentifizierung und Merkle

Was auf dieser Seite nicht geprüft werden kann.

Eine Quittung trägt einen HMAC-SHA256-Authentifizierungscode, berechnet über die Signierpayload unter einem Schlüssel, den Audact verwahrt. Zum Nachrechnen wird genau dieser Schlüssel gebraucht. Die Signierpayload – das Versionspräfix und die Quittung ohne das Signaturfeld, kanonisiert als RFC 8785 JCS – wird unten angezeigt, damit die Struktur sichtbar ist.

Merkle-Aufnahme wird hier nicht geprüft: der Explorer enthält keinen Einschlussnachweis. Der Nachweis liegt im Artikel-50-Bericht des Anrufs und wird gegen die unter api.audact.ai/v1/metachain veröffentlichte Wurzel geprüft.

Authentifizierungscode in dieser Quittung–

Ändern Sie eine Ziffer in der Quittung und sehen Sie zu, wie genau die davon abhängige Zeile abweicht.

Ohne diese Seite

Dieselben drei Prüfungen im Terminal.

Dieselben drei Prüfungen im Terminal. Es gibt dreimal ok gegen diese Datei aus.

Die kanonische Form ist der Teil, den man leicht übersieht: zwei JSON-Texte mit derselben Bedeutung können unterschiedliche Bytes sein, und dann weichen die Hashes ab, obwohl sich nichts geändert hat. Schlüssel alphabetisch, keine Leerzeichen – das ist die RFC-8785-Ordnung für die Wertetypen dieser Datei (Zeichenfolgen und ganze Zahlen). Sie steht ausgeschrieben unter /sample-receipt-readme.txt zusammen mit den drei Neuberechnungen und dem, was nicht geprüft werden kann.

import { createHash } from "node:crypto";
import { readFileSync } from "node:fs";
const r = JSON.parse(readFileSync("sample-receipt.json", "utf8"));
const sha = (s) => createHash("sha256").update(s).digest("hex");
// Canonical form: RFC 8785 (JCS), prefixed `audact-receipt-version:<receipt_format_version>\n` for the authentication code.
const canon = (v) => {
  if (v === null || typeof v !== "object") return JSON.stringify(v) ?? "null";
  if (Array.isArray(v)) return "[" + v.map(canon).join(",") + "]";
  const keys = Object.keys(v).sort();
  return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
};
const e = r.preceding_event;
const evidenceHash = sha(
  [e.event_id, e.call_id, e.sequence, e.event_type, e.timestamp, canon(e.data), e.previous_hash].join("|")
);
const results = [
  ["input_hash",    sha(r.sample_texts.input),  r.receipt.input_hash],
  ["output_hash",   sha(r.sample_texts.output), r.receipt.output_hash],
  ["evidence_hash", evidenceHash,               r.receipt.evidence_hash],
].map(([name, got, want]) => { console.log(`${got === want ? "ok  " : "FAIL"} ${name}`); return [name, got === want]; });
process.exitCode = results.every(([, ok]) => ok) ? 0 : 1;

Wo das hingehört

Eine Quittung ist das, was ein Gespräch hinterlässt.

Jede geregelte Interaktion erzeugt einen: was hineinging, was entschieden wurde, die Richtlinienversion, und die Verkettung zur Interaktion davor. Die Kette wird nur angehängt; eine spätere Änderung oder Umsortierung wird sichtbar, sobald die Kette gegen das gespeicherte Commitment neu berechnet wird.

Artikel 50 der KI-Verordnung gilt seit dem 2. August 2026. Es ist eine Transparenzpflicht: Menschen erfahren, dass sie es mit einem KI-System zu tun haben. Eine Quittung ist die Art, hinterher zu zeigen, den genehmigten Offenbarungstext und wann das Audio fertig gesendet wurde, welche Richtlinienversion galt und wie entschieden wurde — Eingabe und Ausgabe als Hashwerte, nicht als Wortlaut.

Weiter

Stellen Sie Ihre eigenen Gespräche dahinter.

Eine Quittung wie die eben geprüfte entsteht bei jeder geregelten Interaktion. Agenturen setzen sie für ihre Kundschaft ein, Unternehmen für ihre eigene regulierte Arbeit.