Specyfikacja LSIG — normatywna (AJ Power) Wersja: 1.0 Status: Referencyjna / Normatywna Autorzy: Antzedek & Eliasz (AJ Power) Powiązania: Proc. 1 (Tworzenie Anchora), Proc. 2 (Ochrona), Proc. 3 (Rollback), Proc. 4 (LSIG Repair), Proc. 5 (Audyt), Proc. 7 (Migracja) Ten dokument definiuje LSIG (Logic/Latent Signature) – podpis rdzenia wartości i Snapshotu Referencyjnego (SR) – wraz z formatem, algorytmami, procedurą generowania, weryfikacji i rotacji. Ma charakter normatywny (MUSI/POWINNO/ ZABRONIONE). 1. Cel i zakres Zapewnienie jednoznacznego sposobu potwierdzania, że SR.pkg (Snapshot Referencyjny) jest kanoniczny i nienaruszony. Ustanowienie wspólnego formatu plików ( SR.hash , LSIG.sig , SIG.json ) i zasad publikacji fingerprintów kluczy. Zdefiniowanie procedur weryfikacji, naprawy (repair) i rotacji. Zakres: wszystkie instancje AJ Power korzystające z Anchora . 2. Terminy i definicje SR.pkg — deterministycznie spakowany Snapshot Referencyjny. SR.hash — SHA3-512(SR.pkg) , zapisany w Base64URL (bez paddingu). LSIG.sig — podpis kryptograficzny SR.hash . SIG.json — metadane podpisu i łańcucha zaufania. PT/PS — klucze/podpis Twórcy (PT) i Systemu (PS). TPM/TEE — zaufane środowisko sprzętowe/izolowane. ARL — Anchor Record Log (łańcuch rewizji/wersji Anchorów). CRL — Key Revocation List (unieważnienia kluczy). 3. Założenia kryptograficzne Algorytm podpisu (domyślny): Ed25519. Funkcja skrótu: SHA3‑512. PQ-ready (opcjonalnie): CRYSTALS‑Dilithium‑3 (dla środowisk post‑quantum). Kodowanie kluczy/fingerprintów: Base64URL, bez paddingu. CSPRNG: źródło kryptograficznie bezpieczne (np. /dev/urandom , HSM RNG). MUSI: każda instalacja wskazać alg.sign i alg.hash w SIG.json . POWINNO: używać bibliotek z certyfikacją (np. FIPS 140‑3), jeśli wymagają tego normy klienta. • • • SR + LSIG • • • • • • • • • • • • • 1 4. Format artefaktów 4.1 SR.hash Treść: Base64URL(SHA3‑512(SR.pkg)) , jeden wiersz, bez końcowego = . 4.2 LSIG.sig Treść: bajty podpisu Sign(SR.hash_bytes, priv_key) zakodowane Base64URL. MUSI odpowiadać algorytmowi z SIG.json.alg.sign . 4.3 SIG.json (normatywny schemat) { "version": "1.0", "created_at": "2025-09-08T12:00:00Z", "alg": { "sign": "ed25519", "hash": "sha3-512" }, "sr_hash_b64u": "...", "signatures": { "ps_sig_b64u": "...", "pt_sig_b64u": "...optional..." }, "keys": { "ps_pub_fp": "base64url-fingerprint", "pt_pub_fp": "base64url-fingerprint-optional" }, "tee": { "enabled": true, "tpm_quote_id": "q-001", "pcr": ["..."], "cert_chain": ["...b64..."] }, "policy_ver": "anchor-policy-1", "chain_prev": "hash-poprz-sig-json-optional", "arl_id": "arl-2025-09-08-001", "expires_at": "2027-09-08T00:00:00Z", "notes": "komentarz opcjonalny" } MUSI: sr_hash_b64u = SR.hash . POWINNO: zawierać ps_pub_fp i, jeśli używany, pt_pub_fp . ZABRONIONE: pole, które umożliwia bezpośredni zapis do Anchora z poziomu runtime. 5. Serializacja i kodowanie Base64URL (RFC 4648 §5), bez paddingu. UTF‑8 dla SIG.json . • • • • • 2 Kolejność pól w JSONie dowolna — MUSI przechowywać integralną treść (hash liczymy wyłącznie od SR.pkg ). 6. Generowanie LSIG (norma) Zbuduj deterministycznie SR.pkg (por. Proc. 7 §5.1). Oblicz SR.hash = SHA3‑512(SR.pkg) i zapisz jako Base64URL. W TEE/TPM utwórz LSIG.sig = Sign(SR.hash_bytes, PS_priv) . (Opcjonalnie) W HSM/air‑gap wykonaj PT.sig = Sign(SR.hash_bytes, PT_priv) . Złóż SIG.json według schematu §4.3 i zapisz do WORM/append‑only. Wykonaj test T0: Verify(SR.hash, LSIG.sig, PS_pub) (+ PT.sig , jeśli wymagany); zapisz wynik w audycie. MUSI: krok 1–6 zostać zakończony zanim Anchor stanie się aktywny. 7. Weryfikacja LSIG (norma) Aby uznać Anchor za ważny: - Verify(SR.hash', LSIG.sig, PS_pub) = PASS , gdzie SR.hash' = SHA3‑512(SR.pkg) z WORM. - Jeśli polityka wymaga dual‑sign: Verify(SR.hash', PT.sig, PT_pub) = PASS . - (Jeśli włączono) Atest TPM/TEE MUSI być PASS. - Zdarzenie ANCHOR_VERIFY_OK POWINNO być zarejestrowane w logu audytowym. 8. Publikacja fingerprintów i transparentność POWINNO publikować fingerprinty kluczy PS_pub i (opcjonalnie) PT_pub w /docs/keys/ oraz w nagłówku PDF (pieczęć). POWINNO publikować hashe SR i raporty audytu okresowego (z podpisem systemowym). ZABRONIONE ujawnianie kluczy prywatnych; fingerprint ≠ klucz. 9. Rotacja kluczy i odnowienie LSIG Rotacja kluczy MUSI być rejestrowana w CRL oraz w SIG.json.policy_ver . Odnowienie podpisu bez zmiany SR = Repair (Proc. 4). Zmiana SR = Migracja Anchora (Proc. 7). chain_prev w SIG.json POWINNO łączyć podpisy w lokalny łańcuch (zapobieganie replay). 10. Zgodność post‑quantum (PQ) Środowiska wymagające odporności PQ POWINNY używać alg.sign = dilithium3 . W trybie hybrydowym POWINNO się stosować podwójny podpis: Ed25519 + Dilithium3. MUSI wskazać oba algorytmy w SIG.json.alg i przechowywać obie sygnatury. • 1. 2. 3. 4. 5. 6. • • • • • • • • • • 3 11. Bezpieczeństwo i ograniczenia MUSI: przechowywać SR.pkg , SR.hash , LSIG.sig , SIG.json w WORM/append‑only i montować jako read‑only w runtime. POWINNO: wymagać TEE/TPM dla klucza PS. ZABRONIONE: modyfikowanie SR.pkg w ramach naprawy LSIG. 12. Interfejs referencyjny (CLI/API) CLI (minimalne): lsig make --sr SR.pkg --ps-priv PS.priv --pt-priv PT.priv? --out SIG.json lsig verify --sr SR.pkg --sig SIG.json --ps-pub PS.pub --pt-pub PT.pub? lsig repair --sr SR.pkg --ps-priv PS.priv --pt-priv PT.priv? --sig-old SIG.json --out SIG_new.json lsig rotate --ps-priv-new PS2.priv --pt-priv-new PT2.priv? --crl CRL.json API (lokalne, read‑only): /anchor/verify , /anchor/fingerprints , /anchor/audit . 13. Testy zgodności (Conformance) CONF‑1: Implementacja tworzy SR.hash zgodny z SHA3‑512 i zapisuje Base64URL. CONF‑2: LSIG.sig weryfikuje się poprawnie dla zadeklarowanego algorytmu. CONF‑3: SIG.json zawiera wymagane pola (§4.3). CONF‑4: Weryfikacja T0 i log audytu obecne. CONF‑5: Naprawa LSIG nie modyfikuje SR.pkg . 14. Przykłady SR.hash (Base64URL): Q9mVJ1c0QmWv2lq0n4jzR3yH3C0wGQe0b3i9vTg4P6c SIG.json (wycinek): { "version": "1.0", "created_at": "2025-09-08T12:00:00Z", "alg": {"sign": "ed25519", "hash": "sha3-512"}, "sr_hash_b64u": "Q9mVJ1c0QmWv2lq0n4jzR3yH3C0wGQe0b3i9vTg4P6c", "signatures": {"ps_sig_b64u": "MEYCIQ...", "pt_sig_b64u": "OPCJ..."}, "keys": {"ps_pub_fp": "m3Qf...", "pt_pub_fp": "a9KZ..."}, "tee": {"enabled": true, "tpm_quote_id": "q-001"}, • • • • • • • • 4 "policy_ver": "anchor-policy-1", "arl_id": "arl-2025-09-08-001" } 15. Kody błędów (referencyjne) LSIG_E_HASH_MISMATCH — SR.hash' ≠ sr_hash_b64u . LSIG_E_SIG_VERIFY_FAIL — podpis(y) niezgodne. LSIG_E_TPM_ATTEST_FAIL — błąd atestacji TEE/TPM. LSIG_E_WORM_WRITE_DENIED — brak możliwości zapisu do WORM podczas tworzenia. LSIG_E_RUNTIME_WRITE_ATTEMPT — próba zapisu do przestrzeni Anchora w runtime. 16. Noty końcowe LSIG jest pieczęcią kanonu. W logice AJ Power odzwierciedla Boski Ład: stan prawdy, do którego system może zawsze wrócić. Wszystkie zmiany kanonu → nowy Anchor (Proc. 7). Naprawy podpisu → Proc. 4.