Deterministic WebAssembly Sandbox | Dweve Selvedge
Selvedge runs untrusted code in a deterministic WebAssembly sandbox and returns a replayable run record. Publishing in the fourth release round.
Compilează sarcinile de lucru Kera BNN pentru runtime-ul Selvedge.
Proveniența evenimentelor prin lanț hash pentru evenimente de sistem.
Certificate de raționament, nu transcrieri de execuție.
Selvedge publică în a patra rundă a programului de lansare fundațională, după Knot și Ledger. Odată publicat, testează un modul WASM în sandbox și redă singur plicul de dovezi.
Suprafață de execuție pentru instrumente Model Context Protocol.
Sigilat cu Ed25519, transcriere SHA3-256, verificare offline.
Rețele neuronale binare IR graf, JIT și interpretor.
Runtime pentru model de componente, gazdă WASI 0.2 Preview 2.
Selvedge rulează cod neîncrezut într-un sandbox cu capacități limitate și înregistrează execuția într-o transcriere sigilată. Izolarea limitează ce poate accesa codul; transcrierea arată ce s-a întâmplat efectiv și poate fi redată pentru revizuire.
Server Model Context Protocol pentru instrumente de agenți.
Runtime de agenți de lungă durată cu o coadă.
build, verify, run, replay. Compatibil cu CI.
Instrumente de agenți, plugin-uri terțe, inferență Kera BNN și date reglementate intră toate prin aceeași graniță controlată. Fiecare runtime produce același plic de dovezi sigilat, astfel încât schimbările de implementare nu modifică povestea de audit.
Semnare Ed25519 5-15 us, verificare 15-30 us.
Pornirea procesului inclusă, de 8-9 ori mai rapidă.
Modul de calcul, față de 1187-1494 us vanilla.
Selvedge Wasmtime pornește de 62 până la 243 de ori mai repede decât Wasmtime vanilla la nivel de API. Compromisul onest este calea fierbinte: vanilla deține apelul repetat de 22 ns, iar modelul de componente care produce transcrierea rulează mai lent acolo. Kera JIT este de 2 ori mai rapid la cald pentru lucrul cu grafuri. Cifrele provin din BENCHMARKS.md din depozit.
Fiecare decizie de poartă este înregistrată și hașurată.
max_execution_time_ns, separat de combustibil.
max_memory_bytes, implicit 256 MiB, plafon 4 GiB.
max_instructions, epuizarea oprește sarcina curat.
Ceas, aleatoriu, sistem de fișiere, rețea, mediu, stdio, proces, personalizat. Refuz implicit.
Un set de capabilități cu refuz implicit blochează fiecare apel de gazdă în opt domenii WASI. Limitele de resurse pentru memorie, combustibil și timp limitează comportamentul necontrolat. Fiecare decizie de poartă și citire de resurse este în transcriere.
Ai nevoie de dovezi criptografice despre ce a făcut sarcina, nu de încredere în runtime.
Permite sistemul de fișiere, refuză rețeaua, dar fără înregistrare per apel în jurnalul de audit.
FP și timpul real se scurg. Redarea produce aproximativ aceeași ieșire, nu exact aceeași.
Un sandbox oprește evadarea. Nu dovedește că sarcina s-a comportat corect în interior.
Sandbox-urile convenționale opresc codul rău să evadeze. Nu produc o înregistrare a ceea ce a făcut codul de fapt în interior. Când un auditor întreabă, răspunsul este o afirmație, nu o dovadă.
Selvedge captează exact ce s-a executat, de la intrare la ieșire, fiecare apel de gazdă sigilat.
Registrul înregistrează ce s-a întâmplat într-un sistem. Selvedge înregistrează ce cod a rulat.
AION emite certificate pentru pașii solverului, nu pentru rulările de execuție.
Cum se deosebește Selvedge de AION și Ledger
Aceleași intrări plus același plic înseamnă aceeași ieșire, întotdeauna.
O epocă fixă și un PRNG ChaCha20 cu seed înlocuiesc timpul gazdei și entropia.
Calculul intern, stocarea și acumularea folosesc reprezentări binare, întregi, cu virgulă fixă sau adaptive întreg/virgulă fixă. Virgula mobilă este acceptată doar la o graniță externă declarată și este convertită explicit înainte de începerea lucrului intern; nu există nicio rezervă internă de virgulă mobilă. Ceasul virtual rămâne fix, astfel încât reluarea produce aceiași octeți.
Fără virgulă mobilă internă, fără ceasuri
Verificatorul reia offline doar cu octeții modulului și plicul.
Semnătură ed25519 peste rădăcina plicului. Nu proză.
Fiecare apel de gazdă este inclus în lanț. Editările rup lanțul.
De ce transcrierea este diferită de un jurnal
Aceeași flux la fiecare execuție. Reluarea este mecanică.
Dovadă AION emisă, semnată ed25519, plicul gata de trimis.
Fiecare apel de gazdă și rezultat este inclus într-un lanț SHA3-256.
Wasmtime sau Kera execută în sandbox-ul cu refuz implicit.
Modul încărcat, capacități fixate, limite de resurse aplicate.
Selvedge rulează cod WASM sau Kera într-un sandbox cu refuz implicit, include fiecare apel de gazdă într-un lanț de transcriere SHA3-256 și împachetează rezultatul într-un plic de dovadă AION semnat. Plicul se reia fără sandbox-ul original.
Selvedge este un sandbox WebAssembly determinist pentru cod neîncrezător. Manifestul său de permisiuni și transcrierea sigilată rulează pe hardware pe care îl controlezi, astfel încât o contraparte poate reia înregistrarea pe propria mașină, iar o dispută devine o căutare, nu o cerere de asigurare.
Ține codul în limite, păstrează registrul
Selvedge pune un program pe care nu l-ai ales într-o cameră fără internet, fără acces la fișierele tale și fără nimic de învățat despre mașina ta. Lasă o chitanță care spune ce a revenit și ce i s-a permis programului să facă, astfel încât să poți verifica o afirmație ulterioară în loc să iei pe cineva de cuvânt.
Selvedge rulează cod pe care nu l-ai scris într-o gazdă de componente WebAssembly fără rețea, sistem de fișiere, mediu sau ceas în mișcare. Fiecare rulare finalizată returnează o înregistrare pe care o altă parte o poate reda și un raport de execuție care spune ce i s-a permis codului să facă. Publicat sub Apache 2.0.
Rulează cod neîncrezător pe hardware pe care îl controlezi.
Publicarea este planificată în runde bilunare. Depozitul și documentația sa apar împreună.
Face o singură treabă mică, aici, și nicăieri altundeva.
Sigilat, ca să nu poată fi schimbat nimic
Execuția s-a finalizat cu succes în 18,4 ms
Camera, chitanța și lista sunt întreaga promisiune.
Un singur rezumat denumește construcția.
Aici ajunge ca o listă. Fiecare job care a folosit programul defectuos îl numește prin cod, dată și o scurtă listă de permisiuni, astfel încât să poți vedea ce a fost afectat și cât de departe ar fi putut ajunge. Dacă cei care l-au creat nu mai sunt de încredere, retragerea intră în vigoare la un interval de reîmprospătare stabilit, nu ori de câte ori expiră un certificat. Software-ul este publicat sub licența Apache 2.0.
Versiunea obișnuită a acestei conversații este o estimare. Cineva își dă seama ce versiune rula probabil, în ce zile, pentru ce persoane, iar răspunsul ajunge ca un interval cu o avertizare. Asta lasă faptele necesare pentru a dimensiona o corecție ca pe o reconstrucție, nu ca pe o înregistrare. Corecția începe cu o listă care poate fi verificată.
Fiecare job înregistrează un cod scurt pentru programul exact care a făcut treaba. Nu numele lui, nu numărul versiunii, ci programul în sine, astfel încât două construcții care împărtășesc un nume să aibă totuși coduri diferite. Dacă acel program se dovedește ulterior defectuos, codul este modul prin care fiecare job atins de el este găsit.
Când ceva se dovedește greșit, un singur cod numește programul.
Programul în sine este încărcat proaspăt de fiecare dată din propriul cod, iar chitanța poartă un cod pentru acel cod, astfel încât ceea ce a rulat astăzi este în mod demonstrabil ceea ce a rulat luna trecută. Nimic nu se acumulează între timp de care să-și facă cineva griji mai târziu.
O cameră Selvedge nouă costă atât de puțin încât una per job este accesibilă, deci nimic nu trebuie împărtășit. Dacă ceva chiar trebuie să treacă mai departe, este predat intenționat și apare în înregistrare ca ceva care a fost predat.
Fiecare job primește o cameră nouă. Nimic din cea anterioară nu este în ea: nicio notă rămasă, nicio lucrare neterminată, nicio amintire a cine a cerut. Asta sună evident și de obicei nu este adevărat, pentru că menținerea unei camere în picioare este mai ieftină decât construirea uneia noi, așa că majoritatea sistemelor păstrează camera și o reutilizează.
O cameră nouă este gata pentru următorul job.
Ieșire, rezultat și utilizarea resurselor.
A nu găsi nimic este o dovadă slabă, pentru că depinde de cât de atent a căutat cineva și cât timp a avut înainte de întâlnire. O listă de două permisiuni este o dovadă puternică, pentru că nu mai era nimic altceva de găsit.
Schimbă ce se întâmplă când pui o întrebare mai târziu. În loc ca cineva să treacă prin ce a făcut programul și să raporteze că nu a găsit nimic îngrijorător, lista de permisiuni este chiar acolo și este scurtă.
Cele mai multe înregistrări îți spun ce a făcut un program. O chitanță Selvedge spune și ce i s-a permis să facă, ceea ce este un lucru diferit și mai util. Un program căruia nu i s-a permis niciodată să se apropie de fișierele tale nu a putut fi lângă fișierele tale, iar acest lucru este consemnat, indiferent dacă cineva se întâmpla să privească în acel moment.
Un cod nu este o copie a programului; el numește exact lucrul care a rulat.
Închide și un mic truc. Un program care poate citi ceasul se poate comporta într-un fel înainte de un termen și altfel după el, iar nimeni nu ar vedea vreodată diferența. Un ceas care nu se mișcă nu poate fi urmărit, așa că nu există nimic față de care să te comporți diferit.