genesis.limit-connect.com/prez · 17.–18.10.2026.
U 36 sati Genesis je dobio novu jezgru, epohalni pečat koji provjeru čini 28 do 63 puta bržom, ovisno o stroju i gradnji, i prvi račun potpisan na telefonu. Ključ je rođen na telefonu Honor A16 i nikad ga nije napustio. Server je provjerio svih 30 računa, a da nije imao ni jedan tajni bajt. Uz svaku tvrdnju stoji atom u lancu.
Atom nosi dokaz. Server nema ključeva. Istinu potvrđuju svjedoci, ne server.
Prihvaćena 17.10. Ova prezentacija prati put od te rečenice do mjerenja koje je potvrđuje na jednom uređaju.
Na testnoj instanci Fenixa server je potpisivao sve faze računa (izdan, fiskaliziran, storniran) ključem tvrtke koji je držao na disku, a pri prvom računu ga je sam i rađao. Tko ima server, ima ključ svake tvrtke. Premještanje ključa nije bilo moguće bez gubitka provjere starih računa, pa je zaustavljeno (STOP) dok jezgra ne zna provjeriti ključ po epohama i primiti potpis s uređaja.
Prvo mjerenje razbilo je i jedno očekivanje: prepisivanje provjere iz Pythona u Rust dalo je samo 1,07×, jer kriptografiju u Pythonu ionako radi C ispod haube. Ubrzanje je trebalo tražiti u mehanizmu, ne u jeziku.
| dio | što radi |
|---|---|
| Zapis | 105 B: verzija, autor, redni broj, prethodni zapis, sažetak tijela. Sadržaj računa ne putuje. |
| Hibridni potpis | Ed25519 i ML-DSA-65 (FIPS 204). Valjan samo ako vrijede oba. Žica 3478 B. |
| Knjiga | tok po autoru, MMR akumulator, presuda DRŽI / PAD / NEPOZNATO; rupa u slijedu je NEPOZNATO, ne PAD |
| Dokaz dvoličnosti | dva valjana potpisa istog autora za isti redni broj; provjerljiv offline samo javnim ključem |
| Temeljnica | ΣD = ΣP u cijelim centima prije potpisa; neuravnotežen račun se ne može ni potpisati |
| Gradnja | no_std, forbid(unsafe_code); ista jezgra radi na x86, ARM-u, u WASM-u i na goloj RISC-V slici bez operacijskog sustava |
Na floti: testovi jezgre 5+4+6 (c14514), gola RISC-V slika „PRESUDA: DRZI" pod QEMU-om na EU (c14528). Uz dekoder temeljnice 5+4+7 (c14540).
Ista jezgra radi i kao gola slika: vlastiti početak izvođenja, izravan ispis na serijski port, fiksna memorija od 1 MiB i izlaz preko uređaja za gašenje. Nema Linuxa, nema standardne biblioteke, nema datotečnog sustava. Program se pokreće izravno na procesoru (RISC-V, pod emulatorom QEMU), provjeri hibridni potpis, MMR dokaz i krivotvorine, ispiše presudu i ugasi stroj.
| mjera | vrijednost |
|---|---|
| presuda na EU (c14528) | PRESUDA: DRZI, exit 0; krivotvorine autora, Ed25519 i ML-DSA → PAD |
| kod | 47 618 B (optimizirano za veličinu) do 92 226 B (za brzinu) |
| vršna radna memorija | oko 230–255 KB (ML-DSA-65 provjera) |
| hibridna provjera | 2 159 032 instrukcija |
| zapis u epohi | medijan 83 731 instrukcija (25,8× manje) |
| izvor brojki | veličina koda, memorija, 2 159 032 instrukcija i 108 µs prepisani su iz README-a kernela (sha256 a9d900f0…, atom c14629); nisu zasebno izmjereni u atomu, a c14528 navodi druge ulaze (binarka 206 416 B, 2 160 435 instrukcija za jedan zapis) |
| ponovljivost | tri pokretanja, ispis bajt-isti |
Instrukcije su brojane u emulatoru, ne vrijeme na stvarnom čipu. Slika ne stane u mikrokontroler od 8 KB; treba čip s oko 256 KB RAM-a. Nesigurni kod (unsafe) postoji samo u tankom sloju gole slike, jezgra ga zabranjuje.
Hibridni potpis je skup (3478 B, medijan 147 µs provjere na x86 radnom prostoru, 72 µs na EU poslužitelju, n=30, 19.10.). Zato se potpisuje samo dvaput po epohi: zaglavlje sa sidrom lanca ključeva i pečat s korijenom svih zapisa. Između njih svaki zapis putuje kao paket od 169 B (stane u LoRa okvir od 255 B) i provjerava se s dva SHA3 sažetka. Ključ zapisa otkriva se tek u sljedećem paketu, pa krivotvoritelj ne zna ključ dok mu je potreban. Ideja odgođenog otkrivanja poznata je iz TESLA-e; naše je da otkrivanje ne treba sinkronizirano vrijeme, jer ga veže lanac zapisa.
| stroj | medijan | 95 % CI | presuda | atom |
|---|---|---|---|---|
| x86_64, glibc build, radni prostor | 45,5× | 44,9–46,0 | DRŽI | ponovljeno 19.10. istim protokolom (c14914); zapis od 17.10. (48,8×) nije ponovljen i povučen je |
| x86_64, glibc build, EU poslužitelj | 42,5× | 42,2–42,6 | DRŽI | ponovljeno 19.10. (UTC) istim protokolom i istim kodom, kriterij upisan unaprijed (c14949), rezultat c14950; stroj nije bio miran (load oko 2 na 8 jezgri) |
| x86_64, statični musl build | 53,8× | 53,1–54,2 | DRŽI | c14517 (referenca) |
| Honor A16 (Android 16), aarch64, Termux, isporučeni binarni | 63,4× | 63,3–63,5 | DRŽI | c14524; ponovljeno 19.10. istim binarnim i istim protokolom: 63,2× (CI95 63,2–63,3, n=30), razlika medijana 0,2×, kriterij upisan unaprijed (c14994), rezultat c14996 |
| Honor A16 (Android 16), aarch64, Termux/android gradnja (bionic) na uređaju | 28,4× | 28,4–28,4 | ispod cilja 40× | isti izvor flote (d5c17fa381) izgrađen na A16 u Termuxu, rustc 1.99.1, cilj android/bionic (binarni sha d0484e9a…), isti stroj i ista jezgra u istom danu kao isporučeni binarni (62,9×, CI95 62,9–62,9); pred-registrirano c15077, rezultat c15080; isti izvor izgrađen na EU za statični aarch64-musl daje 63,5× (rustc 1.96.0) i 64,3× (rustc 1.99.1), zrno sha 4cb80076…, c15190; uzrok je LLVM 21.1.8 u Termuxu: ista gradnja za musl s rustc 1.92.0 (LLVM 21.1.3) daje jednako 29,8×, a LLVM 22 i 23 daju 63–64× (c15240) |
| Xiaomi Mi13 (13 Lite), aarch64, Termux, zadani hardverski SHA3 put | 37,4× | 37,3–37,6 | ispod cilja 40× | isti binarni kao A16 (sha 6192bd49…), pred-registrirano c15001, rezultat c15003; donja granica CI 37,3 < 40; hibridna provjera 177 µs |
| Xiaomi Mi13 (13 Lite), aarch64, statični musl, softverski Keccak | 62,5× | 62,3–63,4 | DRŽI | isti izvor (zrno sha 4cb80076…), rustc 1.96.0, keccak_backend="soft" (binarni sha 67c72735…); pred-registrirano c15198, rezultat c15200; jedan SHA3 poziv 449 ns naspram 779 ns sa zadanim hardverskim putem; kontrola A16 s istim binarnim 64,3× |
Kriterij je pred-registriran u c14517 prije mjerenja: donja granica CI ≥ 40×. Usput je nađeno da isti kod s drugim buildom daje drugi broj (45,5 prema 53,8), pa je svaki binarni fiksiran svojim sha256. Isti kod na drugom stroju također daje drugi broj (42,5 na EU poslužitelju, 45,5 na radnom prostoru), a intervali se ne preklapaju, pa se ubrzanje iskazuje kao raspon po strojevima, ne kao jedan broj: 42,5–45,5× na x86 glibc, 63,4× na Honor A16 s isporučenim binarnim (28,4× s Termux/android gradnjom istog koda) i 37,4× na Mi13 sa zadanim hardverskim SHA3 putem (62,5× sa softverskim), dakle ukupno 28 do 63×. Cilj ≥ 40× ispunjen je na x86 (42,5–53,8×; verzija kompilatora x86 gradnji nije bilježena), na Honor A16 s gradnjom LLVM ≥ 22 (63–64×) i na Mi13 uz softverski Keccak (62,5×). Ispod cilja su dvije konfiguracije: Mi13 sa zadanim hardverskim SHA3 putem (37,4×, donja granica CI 37,3) i Termux gradnja s LLVM 21 na A16 (28,4×). Obje su posljedica izbora u gradnji, a ne svojstvo jezgre: ubrzanje ovisi o stroju i o načinu gradnje binarnog (vidi odlomak ispod). Presude prema pred-registriranom kriteriju (c14517) nisu mijenjane. Za buduća mjerenja uvedena je dodatna donja granica prihvatljivosti ≥ 25× (c15245, nije retroaktivna); obje konfiguracije ispod cilja leže iznad nje. 48,8× od 17.10. nije ponovljen. A16 rezultat je neovisno preračunat iz sirove datoteke drugim kodom (svjedok: Ivan).
Jezgra, ciklusi i način gradnje (20.10., c15018, c15066, c15080, c15190, c15200). Mjerenje je ponovljeno uz pinirenje na veliku jezgru (taskset, 30 pokretanja po 1000 zapisa, kriterij isti, pred-registracije c15010, c15071, c15073, c15077, c15186, c15188, c15197, c15198). Mi13, jezgra cpu7 (Cortex-A710): 37,1× (CI95 37,0–37,1) binarnim izgrađenim na uređaju i 37,3× (37,1–37,4) binarnim s A16; oba ispod cilja 40×. Honor A16, jezgra cpu7 (Cortex-A78): 62,9× (62,9–62,9) isporučenim binarnim (sha 6192bd49…), DRŽI. Isti izvor izgrađen u Termuxu na samom A16 (rustc 1.99.1, cilj android/bionic) daje 28,4× (CI95 28,4–28,4), ispod cilja 40×, na istoj jezgri u istom danu. Isti izvor zamrznut u zrno (sha256 4cb80076…) i izgrađen na EU za statični aarch64-musl daje 63,5× s rustc 1.96.0 i 64,3× s rustc 1.99.1. Uzrok sporije Termux gradnje je verzija LLVM-a. Termux koristi sistemski LLVM 21.1.8; ista gradnja za musl s rustc 1.92.0 (LLVM 21.1.3) jednako je spora (29,8×, 983–989 ns po SHA3 pozivu), dok rustc 1.96.0 (LLVM 22.1.2) i 1.99.1 (LLVM 23.1.1) daju 431–434 ns. Dakle nije uzrok ciljna libc ni sam rustc, nego LLVM ≤ 21; aarch64 binarne treba graditi s rustc ≥ 1.96. Granica između 21.1.x i 22.x nije sužena, asembler petlje nije uspoređen, a Termux će ubrzati kad dobije LLVM ≥ 22 (c15240). LTO i jedna jedinica generiranja koda ne mijenjaju ništa (27,9×). Uzrok niskog omjera na Mi13 je nađen. A710 ima hardverske SHA3 instrukcije i crate keccak ih bira, ali je taj put na A710 za jedno stanje sporiji od softverskog (779 ns prema 449 ns po SHA3 pozivu). Isti izvor s isključenim hardverskim putem (keccak_backend="soft") daje na Mi13 62,5× (CI95 62,3–63,4), DRŽI, a na A16 64,3×. Raniji zaključak da Keccak ne objašnjava Mi13 (c15066) povučen je: uspoređivane su dvije Termux gradnje, a gradnja mijenja Keccak 2,4 puta. Jedan uređaj i jedna jezgra po telefonu. Primijenjeno u floti (commit 2fd2ce5ce5, c15222): softverski Keccak vrijedi za aarch64 musl gradnju (kernel i rub). Izvorna gradnja u Termuxu (android) je izuzeta jer je s softom sporija (Mi13 26,8×, A16 28,4×) i ostaje na zadanom backendu (Mi13 37×); 62× se dobiva isporukom musl binarnog, ne gradnjom na uređaju. Obrada jednog paketa (funkcija primi) sastoji se od oko šest poziva SHA3, a faze čine 97–98 % ukupnog vremena, pa skriveni trošak kopiranja ili alokacije ne postoji. Hibridna provjera košta isto na oba telefona (oko 380 000 ciklusa na Mi13, oko 376 000 na A16), a Mi13 ograničava takt velike jezgre (1,98 do 2,17 GHz uz hardverskih 2,40). Brojke u grafu i tablici vrijede za naveden fiksirani binarni i način gradnje, ne za jezgru općenito. Testovi jezgre (cargo test --release, 22 prošla, 0 palih) prolaze izvorno na oba telefona i na EU.
Telefon je iz izvornog koda izgradio vlastiti potpisnik (39 s), rodio ključ, potpisao 30 računa i odbio potpisati neuravnotežen račun. Na server su otišli samo javni ključ i potpisani računi. Server, drugi build i drugi akter, dao je presudu za svaki račun. Hipoteze su pred-registrirane u c14525, rezultat je u c14536.
| hipoteza | mjerenje na stvarnim A16 računima | presuda |
|---|---|---|
| H1 ključ i potpis na uređaju | 30/30 potpisano, svaka žica 3478 B | DRŽI |
| H2 server provjerava | 30/30 DRŽI, exit 0 | DRŽI |
| H3a izmjena bilo kojeg bajta | 0 od 3478 prihvaćeno (3446 PAD, 32 NEPOZNATO: promijenjen autor je nepoznat autor) | DRŽI |
| H3b iznos ±1 cent nakon potpisa | PAD 6/6 | DRŽI |
| H3c neuravnotežen račun | telefon odbio potpisati, ništa nije zapisano | DRŽI |
| H4 server bez ključeva | 0 pojava ključa ili sjemena u kodu provjere; 0 tajnih datoteka u paketu s telefona | DRŽI |
| H5 isti bajti na svim arhitekturama | lokalno x86 = ARM bajt-isto; na telefonu bi trebalo izvesti sjeme, pa se ne radi | NEPOZNATO |
| H6 dvoličnost uhvaćena | lokalno PAD s dokazom; na telefonu je može proizvesti samo vlasnik sjemena | NEPOZNATO |
| H7 vrijeme potpisa na A16 | medijan 3489 µs, CI95 2219–4441, p95 6929 (n=30) | izmjereno |
H6 je na telefonu NEPOZNATO i to pokazuje model: server ne može ni simulirati dvoličnost autora, jer bez sjemena ne može proizvesti drugi valjan potpis.
Preuzimanje datoteke iz aplikacije na telefonu nije uspjelo tri puta, a ssh s telefona na EU odbio je ključ. Uz Ivanov DA izvorni kod je postao javan na jednoj već javnoj putanji, kao skripta koja sama provjerava 13 sažetaka prije gradnje. Javan je bio oko pet minuta, zatim je prepisan na prazno i obrisan; putanja vraća 404 (c14532, c14534, c14540). Tajni podaci nikad nisu bili dio prijenosa.
| riječ | test |
|---|---|
| SAMOSTALAN | telefon gradi potpisnik, rađa ključ i potpisuje bez servera |
| DOKAZIV | server presuđuje samo javnim ključem; 0 od 3478 izmjena prolazi |
| ISTINIT | ΣD = ΣP prije potpisa; neuravnoteženo se ne može potpisati |
| SVJEDOČEN | dva aktera, dva builda, ista presuda; rezultat preračunat iz sirove datoteke |
| PRENOSIV | ista jezgra na x86, ARM-u, WASM-u i goloj RISC-V slici, isti bajti |
c14446 · c14448 kopija jezgre na EUc14514 testovi jezgre na floti 5+4+6c14517 pred-registracija mjerenja na više strojevac14524 Honor A16: 63,4×, svjedok Ivanc15003 Mi13: 37,4×, ispod cilja 40× (pred-registracija c15001)c15018 pinirano na veliku jezgru: Mi13 37,1× i 37,3× (ispod cilja), A16 62,9× (DRŽI); ciklusi i testovi (pred-registracija c15010)c15066 · c15077 · c15080 SHA3 po pozivu i faze primi(); Termux/android gradnja na A16 28,4× (ispod cilja) naspram isporučenog binarnog 62,9× (pred-registracije c15065, c15071, c15073, c15077)c15190 · c15200 zrno: kompilator 1.96.0 i 1.99.1 (musl) 63,5× i 64,3× na A16; softverski Keccak na Mi13 62,5× (DRŽI) umjesto 37,3× (pred-registracije c15186, c15188, c15197, c15198)c15222 flota: .cargo/config.toml sa softverskim Keccakom za aarch64 musl (commit 2fd2ce5ce5); Termux/android izuzet (pred-registracija c15219, intent c15218)c15240 uzrok sporije Termux gradnje: LLVM 21 (musl s LLVM 21.1.3 29,8×, LLVM 22/23 63–64×); c15245 dodatni prag prihvatljivosti ≥ 25×, nije retroaktivan (pred-registracija c15238)c14525 pred-registracija R1, potpis na uređajuc14528 gola RISC-V slika na EU: PRESUDA DRZIc14532 · c14534 privremena objava izvora uz DA, neutraliziranoc14536 R1 na A16: DRŽIc14539 · c14540 A(b) na EU: DRŽI, objava obrisana