K0NSULT // ai-truth/ipIII
k0nsult.cloud / ai-truth / ipIII / orchestrator / verify

Weryfikator integralności evidence-package

Publiczne narzędzie „zero-trust". Wklej pakiet dowodowy (JSON) wygenerowany przez API ipIII, a przeglądarka policzy SHA-256 jego kanonicznego payloadu — lokalnie, w Twojej przeglądarce (Web Crypto crypto.subtle.digest) — i porówna z zadeklarowanym package_sha256. Żadne dane nie opuszczają Twojego urządzenia. Zero zewnętrznych bibliotek.

Weryfikacja integralności, nie autentyczności prawnej. To narzędzie potwierdza wyłącznie, że treść pakietu nie została zmodyfikowana względem policzonego skrótu (package_sha256 = wewnętrzny hash integralności). Nie potwierdza tożsamości wystawcy ani ważności prawnej. Kryptograficzny podpis wystawcy (PAdES / znacznik czasu TSA / PQC) pozostaje ROADMAP. Dopóki go nie ma, zgodny hash dowodzi spójności treści — nie jej pochodzenia.
Zaufaj, ale zweryfikuj — sam, offline.

Pakiet z GET /api/ip3/v1/reports/evidence-package/:id (oraz /engagements/:id/report-package) zawiera pole package_sha256. API liczy je jako skrót kanonicznego JSON payloadu bez tego pola (hash dodawany na końcu). Ten weryfikator odtwarza dokładnie tę operację po stronie klienta.

PRZEBIEG: wklej JSONusuń pole package_sha256SHA-256 z JSON.stringifyporównajZGODNY / NIEZGODNY

Narzędzie weryfikacji

Jak liczony jest package_sha256 (mechanizm kanoniczny)

API buduje obiekt payload, a następnie dopisuje skrót jako ostatnie pole:

// strona serwera (Node.js, kanon)
const payload = { package_kind, generated_at, doctrine, incident, evidence,
                  audit_trail, manifest, chain_of_custody, closure_ready };
payload.package_sha256 = sha256( JSON.stringify(payload) );  // hash payloadu BEZ tego pola

Weryfikator odtwarza to samo: parsuje JSON, usuwa klucz package_sha256, liczy SHA-256( JSON.stringify(reszta) ) i porównuje z hashem zadeklarowanym.

// strona klienta (przeglądarka, Web Crypto — CSP-safe)
const buf = new TextEncoder().encode(JSON.stringify(objBezPola));
const dig = await crypto.subtle.digest('SHA-256', buf);
const hex = [...new Uint8Array(dig)].map(b => b.toString(16).padStart(2,'0')).join('');
NOTE — założenie kanoniczności. Weryfikacja zakłada, że wklejony JSON zachowuje oryginalną kolejność kluczy z odpowiedzi API (dopóki nie edytujesz pakietu, parser JS ją zachowuje). Jeśli pakiet został ręcznie „upiększony", posortowany, przepuszczony przez inne narzędzie zmieniające kolejność pól albo formatowanie znaków Unicode — skrót może się nie zgadzać mimo identycznej treści logicznej. To oczekiwane: package_sha256 jest skrótem konkretnej serializacji, nie abstrakcyjnej treści. Weryfikuj pakiet dokładnie tak, jak zwrócił go /api/ip3/v1.

Co oznacza wynik

WerdyktZnaczenieCzego nie oznacza
ZGODNYPoliczony skrót = zadeklarowany package_sha256. Treść pakietu jest spójna z jego skrótem integralności.Nie dowodzi, kto wystawił pakiet, ani jego ważności prawnej (brak podpisu wystawcy — ROADMAP).
NIEZGODNYSkróty się różnią. Treść została zmieniona względem hasha, albo zmieniono kolejność/format serializacji.Sam w sobie nie przesądza o złej intencji — może wynikać z re-formatowania JSON (patrz NOTE).
BŁĄD WEJŚCIAJSON nie parsuje się, brak pola package_sha256 i nie podano oczekiwanego, albo hash ma zły format.Nie jest werdyktem o pakiecie — to sygnał, że nie ma czego porównać.
Prywatność. Cała operacja wykonuje się w przeglądarce. Wklejony JSON nie jest wysyłany na żaden serwer — brak żądań sieciowych, brak logów po stronie K0NSULT. Możesz odłączyć internet po załadowaniu strony i weryfikować offline.

Reguła statusów (§16)

StatusZnaczenieWarunek nadania
LIVEWeryfikator działa produkcyjnie na kliencie (Web Crypto).Kod inline + brak zależności + reprodukcja kanonicznego skrótu API.
ROADMAPPodpis wystawcy: PAdES / TSA / PQC.Autentyczność (kto wystawił) — jeszcze nie zaimplementowana.
GAPUznanie hasha za dowód pochodzenia.Zabronione — hash to integralność, nie tożsamość.
Doktryna claim ≤ proof. To narzędzie deklaruje dokładnie tyle, ile dowodzi: spójność treści z jej skrótem. Ani słowa więcej. Zgodny skrót nie jest certyfikatem, opinią prawną ani podpisem — jest tym, czym jest: dowodem, że bajty się nie zmieniły.