tipimplementacija
sustavfenix-v4
zakon[
"ZAKON 37 — FenixVault ML-KEM-768",
"ZAKON 43 — krunica_hash u svakom atomu",
"ZAKON 26 — schema contract",
"ZAKON 32 — fix ima chain entry"
]
sto_je_napravljeno{
"1_atom_adresiran": "services/atom_adresiran.py — već postojao, potpuno implementiran (327 linija). Rust backend AKTIVAN (libgenesis_dna.so). ML-KEM-768 keygen/encap/decap 100% NIST L3.",
"2_model": "kanal/models.py — dodana 2 nova polja: atom_payload (JSONB nullable) i atom_adresiran (Boolean NOT NULL DEFAULT FALSE) + ix_kp_e2e index.",
"3_migracija": "ALTER TABLE kanal_poruka ADD COLUMN IF NOT EXISTS atom_payload JSONB; ALTER TABLE kanal_poruka ADD COLUMN IF NOT EXISTS atom_adresiran B
novi_endpointi[
"POST /api/v4/kanal/e2e/poruka/ — šalje E2E enkriptiranu poruku (Opcija A: server enkriptira plaintext; Opcija B: klijent šalje gotov AtomPayload)",
"GET /api/v4/kanal/e2e/soba/{ref_id}/ — dohvaća E2E poruke sobe; klijent dekriptira lokalno s Kyber dk"
]
kriptografski_stack{
"kem": "ML-KEM-768 (NIST FIPS 203, Razina 3) via libgenesis_dna.so (Rust)",
"aead": "AES-GCM-256 via Python cryptography (FIPS 140-3)",
"hash": "SHA3-256 via hashlib (krunica_hash, ZAKON 43)",
"rust_backend": true,
"ek_size": "1184 B",
"dk_size": "64 B (seed)",
"ct_kem_size": "1088 B",
"ss_size": "32 B"
}
roundtrip_test{
"keygen": "OK",
"enkriptiraj_2_clana": "OK",
"ivan_dekriptira": "OK — plaintext match",
"marija_dekriptira": "OK — plaintext match",
"netko_treci_blokiran": "OK — PermissionError",
"integritet_provjera": "OK — krunica_hash valjan"
}
baza{
"host": "localhost:5432",
"baza": "fenix_v4_dev",
"tablica": "kanal_poruka",
"nova_polja": [
"atom_payload JSONB",
"atom_adresiran BOOLEAN NOT NULL DEFAULT FALSE"
],
"novi_index": "ix_kp_e2e ON kanal_poruka (atom_adresiran, ref_id)"
}
servis{
"naziv": "gunicorn-fenix-v4.service",
"status": "active (running)",
"startup": "GenesisKanal: aktivan",
"e2e_routes_ok": true
}
napomenaplaintext NIKAD ne ulazi u bazu — sadrzaj polje uvijek '[E2E enkriptirano]'. Go hub i svi posrednici vide samo enkriptirani AtomPayload. Klijent dekriptira lokalno s dk_bytes (Kyber private key seed).
faze{
"DONE": [
"services/atom_adresiran.py — ML-KEM-768 Rust backend",
"kanal/models.py — atom_payload + atom_adresiran polja",
"ALTER TABLE migracija",
"kanal/router.py — E2E endpointi",
"Redis PUBLISH za Go hub (genesis:kanal:e2e:{soba_id})",
"Bršljan replikacija (ZAKON 2)",
"Chain entry (ZAKON 32)"
],
"FUTURE": [
"KanalSoba.kyber_pk_mapa — pohrana Kyber EK po sudionicima u soba konfiguraciji",
"JavaScript port atom_adresiran.py za klijentsku dekripciju (