tipARHITEKTURA_PLAN
statusPLAN — prije realizacije
kontekstatom_adresiran.py je spreman (post-kvantna grupna enkripcija, BELA princip). Sada gradimo GenesisKanal — sloj koji veže sobe + poruke + atome + Brsljani sync. Nema Slacka, Teamsa, ni jednog tudeg alata.
nacel a[
"ZAKON 41 — samo nasi resursi (kyber-py = open-source koji hostamo, WebCrypto = W3C native)",
"ZAKON 17 — WebSocket je klijent-server (OK), Brsljani je server-server pull (OK, ne krsi ZAKON 17)",
"ZAKON 2 — svaki dogadjaj u lancu (soba kreirana, poruka poslana = dokaz u chainu)",
"ZAKON 3 — trojna pohrana: krunica + dvorac + brsljani",
"BELA princip — neovlasteni vidi matematicku sjenku, ne gresku"
]
arhitektura_cvorovi{
"backend": "genesis FastAPI (EU server, :8010) — sobe, poruke, kyber profili",
"realtime": "WebSocket na genesis — delivery za online clanove",
"persistence": "Brsljani P2P pull svakih 30s — offline clanovi, multi-node replikacija",
"kljucevi_javni": "genesis PostgreSQL — samo kyber_pk (javni kljuc)",
"kljucevi_privatni": "iskljucivo na klijentu — IndexedDB + WebCrypto AES-GCM enkriptiran"
}
modeli{
"KanalSoba": {
"soba_id": "WeisE3 hash (content-adresa od naziv+kreator+ts)",
"naziv": "ime sobe (max 120 znakova)",
"tip": "firma | tim | bilateralni | javni_kanal",
"kreator_wid": "weise3_id kreatora",
"clanovi": "JSON lista {clan_id, kyber_pk_hex, dodan_ts}",
"genesis_pecat": "ML-DSA potpis kreatora — dokaz postojanja",
"created_at": "auto",
"weise3_id": "ZAKON 27",
"bunker_seal_id": "ZAKON 27"
},
"KanalPoruka": {
"poruka_id": "WeisE3 hash",
api_endpointi{
"POST /api/v1/kanal/soba/": "kreiraj sobu, dodaj kreatora kao prvog clana",
"GET /api/v1/kanal/soba/{soba_id}/": "detalji sobe (clanovi s kyber pk-evima)",
"POST /api/v1/kanal/soba/{soba_id}/clanovi/": "dodaj clana (treba njegov kyber_pk)",
"POST /api/v1/kanal/poruka/": "posalji poruku (body: AdresiraniAtom JSON)",
"GET /api/v1/kanal/soba/{soba_id}/poruke/": "povuci poruke (paginacija, pull za Brsljani)",
"GET /api/v1/kanal/profil/{wid}/kyber/": "dohvati javni kyber kljuc korisnika
websocket_tok[
"klijent -> WS /ws/kanal/{soba_id}?genesis_token=... -> autentikacija",
"genesis -> pamti online clanove u Redis (genesis:kanal:online:{soba_id})",
"posiljatelj -> POST /api/v1/kanal/poruka/ -> server pohrani u DB",
"server -> broadcast atom_json svim online clanovima sobe via WS",
"offline klijent -> Brsljani pull ili direktni GET poruka na /api/v1/kanal/soba/{id}/poruke/"
]
kljuc_management{
"generiranje": "browser WebCrypto ili kyber-py WASM — pri prvoj genesis prijavi",
"pohrana_sk": "IndexedDB klijenta, AES-GCM enkriptiran genesis passphrase-om",
"pohrana_pk": "genesis baza (javan, dijeli se slobodno za omotnice)",
"multi_device": "svaki uredaj = novi keypair, soba ih sve cuva u clanovi[]",
"gubitak_kljuca": "bez SK nema dekripcije — BELA. Moznost: key backup u genesis Vault (optional, opt-in)"
}
brsljani_sync{
"sto_se_sinkronizira": "KanalSoba + KanalPoruka (atom_json je vec sifiran, sigurno za replikaciju)",
"interval": "pull svakih 30s (postojeci brsljani cron)",
"endpoint": "GET /api/v1/kanal/soba/{id}/poruke/?after_ts=... (standardna paginacija)",
"napomena": "poruka je sifirana — i na MAR, ES, DE cvorovima pohranjene su samo sifrirane omotnice. Ni cvor-operator ne moze citati sadrzaj."
}
faze_realizacije[
{
"naziv": "P0 — KyberProfil i kljucevi",
"zadaci": [
"model KyberProfil u genesis/models/",
"POST /api/v1/kanal/profil/kyber/ — klijent salje pk",
"GET /api/v1/kanal/profil/{wid}/kyber/ — dohvat pk-a za adresiraj()",
"browser: WebCrypto keygen ili kyber-py (WASM build)"
],
"napomena": "Bez ovoga nema omotnica. P0 je temelj svega."
},
{
"naziv": "P1 — KanalSoba CRUD",
"zadaci": [
"model KanalSoba (soba_id WeisE3, tip, clanovi JSON, pe
sto_ne_gradimo[
"end-to-end read receipts (kompleksno, V2)",
"video/voice pozivi (WASM WebRTC — posebna sesija)",
"public key infrastructure (koristimo genesis profil kao PKI)",
"push notifikacije (WebSocket je dovoljno za sada)"
]
kyber_py_napomenakyber-py je referentna Python implementacija ML-KEM-768 (NIST FIPS 203). Za internu produkcijsku upotrebu prihvatljivo. Za third-party audit: zamijeniti s liboqs (OpenQuantumSafe) koji je certificiran. Planirati za V2.
zakoni[
"ZAKON 2",
"ZAKON 3",
"ZAKON 17",
"ZAKON 27",
"ZAKON 37",
"ZAKON 41",
"ZAKON 43"
]
prethodni_entryc1138_security_audit_p0_p1_p2_p3.dok.json
created_at2026-05-24T15:20:00Z