genesis.limit-connect.com/prez · 17.–18.10.2026.

Silazak na uređaj

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.

63,4×brža provjera po zapisu na Honor A16, isporučeni binarni (CI95 63,3–63,5, n=30); Termux/android gradnja istog koda 28,4×
30 / 30računa potpisanih na telefonu, server presuda DRŽI
0 / 3478izmijenjenih bajtova prihvaćeno kao valjano
3,5 msmedijan postkvantnog potpisa računa na A16

Doktrina

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.

Polazište

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.

Jezgra

diošto radi
Zapis105 B: verzija, autor, redni broj, prethodni zapis, sažetak tijela. Sadržaj računa ne putuje.
Hibridni potpisEd25519 i ML-DSA-65 (FIPS 204). Valjan samo ako vrijede oba. Žica 3478 B.
Knjigatok po autoru, MMR akumulator, presuda DRŽI / PAD / NEPOZNATO; rupa u slijedu je NEPOZNATO, ne PAD
Dokaz dvoličnostidva 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
Gradnjano_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).

Bez operacijskog sustava

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.

mjeravrijednost
presuda na EU (c14528)PRESUDA: DRZI, exit 0; krivotvorine autora, Ed25519 i ML-DSA → PAD
kod47 618 B (optimizirano za veličinu) do 92 226 B (za brzinu)
vršna radna memorijaoko 230–255 KB (ML-DSA-65 provjera)
hibridna provjera2 159 032 instrukcija
zapis u epohimedijan 83 731 instrukcija (25,8× manje)
izvor brojkivelič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)
ponovljivosttri 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.

Epohalni pečat

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.

Ubrzanje provjere po zapisu, n=30 neovisnih pokretanja

strojmedijan95 % CIpresudaatom
x86_64, glibc build, radni prostor45,5×44,9–46,0DRŽIponovljeno 19.10. istim protokolom (c14914); zapis od 17.10. (48,8×) nije ponovljen i povučen je
x86_64, glibc build, EU poslužitelj42,5×42,2–42,6DRŽIponovljeno 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 build53,8×53,1–54,2DRŽIc14517 (referenca)
Honor A16 (Android 16), aarch64, Termux, isporučeni binarni63,4×63,3–63,5DRŽIc14524; 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đaju28,4×28,4–28,4ispod 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 put37,4×37,3–37,6ispod 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 Keccak62,5×62,3–63,4DRŽIisti 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.

Račun potpisan na telefonu

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.

hipotezamjerenje na stvarnim A16 računimapresuda
H1 ključ i potpis na uređaju30/30 potpisano, svaka žica 3478 BDRŽI
H2 server provjerava30/30 DRŽI, exit 0DRŽI
H3a izmjena bilo kojeg bajta0 od 3478 prihvaćeno (3446 PAD, 32 NEPOZNATO: promijenjen autor je nepoznat autor)DRŽI
H3b iznos ±1 cent nakon potpisaPAD 6/6DRŽI
H3c neuravnotežen računtelefon odbio potpisati, ništa nije zapisanoDRŽI
H4 server bez ključeva0 pojava ključa ili sjemena u kodu provjere; 0 tajnih datoteka u paketu s telefonaDRŽI
H5 isti bajti na svim arhitekturamalokalno x86 = ARM bajt-isto; na telefonu bi trebalo izvesti sjeme, pa se ne radiNEPOZNATO
H6 dvoličnost uhvaćenalokalno PAD s dokazom; na telefonu je može proizvesti samo vlasnik sjemenaNEPOZNATO
H7 vrijeme potpisa na A16medijan 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.

Na floti

Kako je kod stigao do telefona

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.

Granice istine

Deset riječi: koja je danas dobila test

riječtest
SAMOSTALANtelefon gradi potpisnik, rađa ključ i potpisuje bez servera
DOKAZIVserver presuđuje samo javnim ključem; 0 od 3478 izmjena prolazi
ISTINITΣD = ΣP prije potpisa; neuravnoteženo se ne može potpisati
SVJEDOČENdva aktera, dva builda, ista presuda; rezultat preračunat iz sirove datoteke
PRENOSIVista jezgra na x86, ARM-u, WASM-u i goloj RISC-V slici, isti bajti

Lanac

  1. c14446 · c14448 kopija jezgre na EU
  2. c14514 testovi jezgre na floti 5+4+6
  3. c14517 pred-registracija mjerenja na više strojeva
  4. c14524 Honor A16: 63,4×, svjedok Ivan
  5. c15003 Mi13: 37,4×, ispod cilja 40× (pred-registracija c15001)
  6. c15018 pinirano na veliku jezgru: Mi13 37,1× i 37,3× (ispod cilja), A16 62,9× (DRŽI); ciklusi i testovi (pred-registracija c15010)
  7. 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)
  8. 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)
  9. c15222 flota: .cargo/config.toml sa softverskim Keccakom za aarch64 musl (commit 2fd2ce5ce5); Termux/android izuzet (pred-registracija c15219, intent c15218)
  10. 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)
  11. c14525 pred-registracija R1, potpis na uređaju
  12. c14528 gola RISC-V slika na EU: PRESUDA DRZI
  13. c14532 · c14534 privremena objava izvora uz DA, neutralizirano
  14. c14536 R1 na A16: DRŽI
  15. c14539 · c14540 A(b) na EU: DRŽI, objava obrisana

Sljedeće