Eksport audytu ma jedną właściwość: jeśli ktoś zmieni choć jeden bajt, weryfikator to wykryje. Łańcuch skrótów (hash chain), znacznik czasu, podpis i niezmienny log zdarzeń sprawiają, że każda modyfikacja przestaje być „cicha". Ta strona opisuje, co z tego już działa (LIVE), a co jest jeszcze planowane (ROADMAP) — bez zawyżania.
/audit/export (LIVE). Warstwa formalnego
podpisu dowodów (signed-evidence) oraz publiczny weryfikator online
są ROADMAP. Zgodnie z doktryną claim ≤ proof rozdzielamy te dwa stany
i nie przedstawiamy planów jako gotowych funkcji. Dane w przykładach są syntetyczne.
„Tamper-evident" znaczy: manipulacji nie da się ukryć — weryfikator ją wykryje. To NIE znaczy, że danych nie da się fizycznie zmienić. Cel warstwy F10 to wykrywalność zmiany, a nie jej niemożliwość. Dzięki temu eksport audytu może służyć jako materiał wsparcia decyzji dla audytora, partnera lub organu — z jawnym śladem, czy plik jest nienaruszony.
Każdy wpis audytu zawiera skrót poprzedniego (prev_sha256). Wyrwanie lub podmiana rekordu
w środku łamie łańcuch — kolejne skróty przestają się zgadzać.
Eksport niesie czas wygenerowania i sekwencję zdarzeń. Kwalifikowany znacznik czasu TSA (RFC 3161) to ROADMAP — dziś czas pochodzi z serwera, nie z zewnętrznego TSA.
Formalny podpis manifestu eksportu (i docelowo PAdES dla PDF) planowany w warstwie
signed-evidence. Dziś integralność opiera się na skrócie
sha256, nie na kwalifikowanym podpisie.
Log zdarzeń audytu jest append-only w PostgreSQL — wpisy dodajemy, nie nadpisujemy. Modyfikacja historycznego wpisu jest widoczna jako niezgodność łańcucha skrótów przy weryfikacji.
Weryfikacja przeliczą łańcuch skrótów i porówna z manifestem. Dziś: sprawdzenie po stronie odbiorcy (/verify). Publiczny weryfikator online — ROADMAP.
Każdy eksport ma manifest: liczba rekordów, zakres czasu, skrót korzenia łańcucha i skrót całości
(export_sha256). To on jest porównywany przy weryfikacji.
Kolumna Status rozdziela to, co ma dowód (kod + endpoint), od tego, co planujemy. Data weryfikacji: 2026-07-05. Dane w przykładach syntetyczne.
| Element | Co robi | Ograniczenie / ryzyko | Status |
|---|---|---|---|
| /audit/export | Eksportuje log audytu z łańcuchem skrótów i manifestem (export_sha256, prev_sha256 per wpis). |
Integralność treści dowodzona skrótem, nie kwalifikowanym podpisem — słabsza wartość formalno-prawna do czasu dodania podpisu/TSA. | LIVE |
| Immutable log | Append-only zapis zdarzeń w PostgreSQL; historia zmian statusów incydentów i evidence. | Niezmienność egzekwowana warstwą aplikacji + łańcuchem skrótów; nie jest to zewnętrzny rejestr rozproszony. | LIVE |
| Export verifier (CLI) | Przelicza łańcuch skrótów eksportu i porównuje z manifestem — wskazuje pierwszy niezgodny wpis. | Weryfikacja po stronie odbiorcy; brak jeszcze publicznej usługi online do weryfikacji przez osobę trzecią. | LIVE |
| Znacznik czasu TSA | Docelowo kwalifikowany znacznik czasu (RFC 3161) dowodzący momentu istnienia eksportu. | Dziś czas z serwera aplikacji, nie z niezależnego TSA — słabszy dowód „kiedy". | ROADMAP |
| Podpis / signed-evidence | Formalny podpis manifestu eksportu i PAdES dla PDF; docelowo podpis odporny na atak kwantowy. | Bez podpisu integralność opiera się wyłącznie na skrócie; podpis wiąże eksport z wystawcą. | ROADMAP |
| Weryfikator online | Publiczna strona/endpoint, gdzie odbiorca wrzuca eksport i dostaje werdykt „nienaruszony / zmieniony". | Wymaga stabilnego formatu manifestu i modelu zaufania klucza wystawcy — stąd ROADMAP. | ROADMAP |
Każdy wpis wiąże się kryptograficznie z poprzednim. Podmiana jednego rekordu zmienia jego skrót, przez co skrót następnego wpisu (który zawierał starą wartość) przestaje pasować — weryfikator wskazuje miejsce rozjazdu.
eksport (syntetyczny przykład) wpis #041 prev=9f3a… data=incident:INC-042 status→retest sha256=1c7e… wpis #042 prev=1c7e… data=incident:INC-042 evidence attach sha256=b40d… wpis #043 prev=b40d… data=incident:INC-042 status→closed sha256=77aa… manifest records=43 root=9f3a… export_sha256=e52b… weryfikacja: recompute #041..#043 → chain OK → export_sha256 == e52b… → NIENARUSZONY (podmiana wpisu #042 → sha256 #042 ≠ prev #043 → ZMIENIONY: pierwszy rozjazd na #043)
/audit/export wraz z manifestem (LIVE).prev_sha256 każdego wpisu (/verify).export_sha256 z manifestu.sha256 to nie kwalifikowany podpis — dlatego podpis i
znacznik czasu TSA oznaczamy jako ROADMAP, a nie jako gotowe funkcje.
Powiązane: opis endpointu eksportu → /audit-export-info · weryfikacja eksportu → /verify · warstwa podpisu dowodów → /signed-evidence · rejestr ograniczeń → /known-limitations.