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.
Kera BNN-i töökoormuste kompileerimine Selvedge'i käituskeskkonna jaoks.
Räsi-ahelaga sündmuste päritolutõend süsteemisündmuste jaoks.
Põhjendustõendid, mitte täitmisprotokollid.
Selvedge avaldatakse fondi väljalaskeprogrammi neljandas voorus, pärast Knoti ja Raamatupidamisraamatut. Kui see juhtub, pange ise WASM-moodul liivakasti ja mängige tõendikonteiner uuesti.
Model Context Protocol tööriista täitmispind.
Ed25519 pitseeritud, SHA3-256 protokoll, võrguühenduseta kontroll.
Graafi IR binaarsed närvivõrgud, JIT ja interpreter.
Komponendimudeli käituskeskkond, WASI 0.2 Preview 2 host.
Selvedge käivitab usaldamata koodi võimekuse piiratud liivakastis ja salvestab täitmise pitseeritud protokolli. Isolatsioon piirab seda, mida kood puudutada saab; protokoll näitab, mis tegelikult juhtus, ja seda saab ülevaatamiseks uuesti esitada.
Model Context Protocol server agentide tööriistade jaoks.
Pikaajaline agendi käituskeskkond järjekorraga.
ehita, kontrolli, käivita, esita uuesti. CI-sõbralik.
Agendi tööriistad, kolmanda osapoole pluginad, Kera BNN-i inferents ja reguleeritud andmetöö sisenevad kõik sama kontrollitud piiri kaudu. Iga käituskeskkond toodab sama pitseeritud tõendikonteineri, nii et juurutuse muudatused ei muuda auditilugu.
Ed25519 allkiri 5-15 µs, kontroll 15-30 µs.
Protsessi käivitamine sisaldub, 8-9x kiirem.
Arvutusmoodul, võrreldes 1187-1494 µs tavalisega.
Selvedge Wasmtime käivitub API tasandil 62 kuni 243 korda kiiremini kui tavaline Wasmtime. Aus kompromiss on kuum tee: tavaline hoiab 22 ns korduvat väljakutset ja komponendimudel, mis transkripti toodab, töötab seal aeglasemalt. Kera JIT on graafitöös soojalt 2x kiirem. Arvud pärinevad repo failist BENCHMARKS.md.
Iga väravaotsus salvestatakse ja räsitakse.
max_memory_bytes, vaikimisi 256 MiB, ülempiir 4 GiB.
max_instructions, ammendumine peatab töökoormuse puhtalt.
Kell, juhuslikkus, failisüsteem, võrk, keskkond, stdio, protsess, kohandatud. Vaikimisi keelatud.
Vaikimisi keelatud võimaluste komplekt kontrollib iga hostikõnet kaheksas WASI valdkonnas. Ressursipiirangud mälule, kütusele ja ajale piiravad kontrolli alt väljunud käitumist. Iga väravaotsus ja ressursi lugemine on transkriptis.
Sul on vaja krüptograafilist tõendit selle kohta, mida töökoormus tegi, mitte usaldust käitusaja vastu.
Luba failisüsteem, keela võrk, kuid auditijäljes puudub kutsepõhine kirje.
FP ja seinakella aeg lekivad. Taasesitus annab ligikaudu sama väljundi, mitte täpselt sama.
Liivakast peatab põgenemise. See ei tõenda, et töökoormus sees õigesti käitus.
Tavalised liivakastid takistavad halval koodil põgenemast. Nad ei loo kirjet selle kohta, mida kood sees tegelikult tegi. Kui audiitor küsib, on vastuseks väide, mitte tõend.
Selvedge jäädvustab täpselt selle, mis käivitati, sisendist väljundini, iga hostikõne pitseerituna.
Raamatupidamine salvestab, mis süsteemis juhtus. Selvedge salvestab, mis kood käis.
AION väljastab sertifikaate lahendaja sammude kohta, mitte täitmiskordade kohta.
Kuidas Selvedge erineb AIONist ja Ledgerist
Samad sisendid pluss sama ümbrik tähendab alati sama väljundit.
Fikseeritud ajastu ja seemendatud ChaCha20 PRNG asendavad hosti aja ja entroopia.
Sisemine arvutus, salvestus ja akumulatsioon kasutavad binaarseid, täisarvulisi, fikseeritud punkti või kohanduvaid täisarvu/fikseeritud punkti esitusi. Ujukoma on lubatud ainult deklareeritud välispiiril ja see teisendatakse enne sisemise töö algust selgesõnaliselt; sisemist ujukoma varuvarianti pole. Virtuaalne kell jääb fikseerituks, nii et taasesitus annab samad baidid.
Kontrollija taasesitab võrguühenduseta, kasutades ainult mooduli baite ja ümbrikku.
ed25519 allkiri ümbriku juurte kohal. Mitte proosa.
Iga hosti kutse on räsitud ahelasse. Muudatused katkestavad ahela.
Sama voog igal täitmisel. Taasesitus on mehaaniline.
AION tõestus väljastatud, ed25519 allkirjastatud, ümbrik valmis saatmiseks.
Iga hosti kutse ja tulemus on räsitud SHA3-256 ahelasse.
Wasmtime või Kera täidab koodi vaikimisi keelavas liivakastis.
Moodul laaditud, võimalused piiratud, ressursipiirangud rakendatud.
Selvedge käivitab WASM-i või Kera koodi vaikimisi keelavas liivakastis, räsib iga hosti kutse SHA3-256 transkriptiahelasse ja mähib tulemuse allkirjastatud AION tõestusümbrikusse. Ümbrik taasesitatakse ilma algse liivakastita.
Selvedge on deterministlik WebAssembly liivakast usaldamata koodi jaoks. Selle õiguste manifest ja pitseeritud transkript töötavad riistvaral, mida sa kontrollid, nii et vastaspool saab rekordi oma masinas taasesitada ja vaidlus muutub otsinguks, mitte kinnituspäringuks.
Selvedge paneb programmi, mida sa ei valinud, ruumi, kus pole internetti, pole teed sinu failideni ja pole midagi, mida sinu masina kohta õppida. See jätab kviitungi, mis ütleb, mis tagasi tuli ja mida programmil lubati teha, et saaksid hiljem väidet kontrollida, mitte kellegi sõna võtta.
Selvedge käivitab koodi, mida sa ei kirjutanud, WebAssembly komponendi hostis, kus pole võrku, failisüsteemi, keskkonda ega liikuvat kella. Iga lõpetatud käitus tagastab kirje, mida teine osapool saab taasesitada, ja täitmisaruande, mis ütleb, mida koodil lubati teha. Avaldatud Apache 2.0 litsentsi all.
Käivita usaldamata kood riistvaral, mida sa kontrollid.
Avaldamine on kavandatud kahenädalaste voorudena. Hoidla ja selle dokumentatsioon lähevad käiku koos.
See teeb ühte väikest tööd, siin ja mitte kusagil mujal.
Ruum, kviitung ja nimekiri on kogu lubadus.
Siin saabub see nimekirjana. Iga töö, mis kasutas vigast programmi, nimetab selle koodi, kuupäeva ja lühikese õiguste nimekirjaga, nii et näete, mida mõjutati ja kui kaugele see võis ulatuda. Kui selle loojad pole enam usaldusväärsed, jõustub tagasivõtmine kindla värskendusintervalli järel, mitte serdi aegumisel. Tarkvara on avaldatud Apache 2.0 litsentsi all.
Selle vestluse tavaline versioon on hinnang. Keegi arvutab välja, milline väljalase tõenäoliselt töötas, millistel päevadel, kelle jaoks, ja vastus tuleb vahemikuna koos hoiatusega. See jätab paranduse ulatuse kindlakstegemiseks vajalikud faktid rekonstruktsioonina, mitte andmena. Parandus algab nimekirjaga, mida saab kontrollida.
Iga töö salvestab lühikese koodi täpse programmi jaoks, mis töö tegi. Mitte selle nime, mitte versiooninumbrit, vaid programmi ennast, nii et kahel sama nime jagaval versioonil on erinevad koodid. Kui see programm hiljem osutub vigaseks, on kood see, mille abil leitakse iga töö, mida see puudutas.
Kui midagi osutub valeks, nimetab üks kood programmi.
Programm ise laaditakse iga kord värskelt oma koodist ja kviitung kannab selle koodi koodi, nii et täna töötanud asi on tõestatavalt sama, mis eelmisel kuul töötanud asi. Vahepeal ei kogune midagi, mille pärast hiljem muretseda.
Uus Selvedge ruum maksab nii vähe, et üks töö kohta on taskukohane, nii et midagi ei pea jagama. Kui midagi tõesti vajab ülekandmist, antakse see teadlikult üle ja see ilmub andmetesse kui üleantud asi.
Iga töö saab uue ruumi. Eelmisest pole selles midagi: ei jäänud märkmeid, poolikut tööd ega mälestust sellest, kes küsis. See kõlab ilmselgena ja tavaliselt pole see tõsi, sest ruumi püsti hoidmine on odavam kui uue ehitamine, nii et enamik süsteeme hoiab ruumi ja kasutab seda uuesti.
Mitte millegi leidmine on nõrk tõend, sest see sõltub sellest, kui põhjalikult keegi otsis ja kui kaua tal enne koosolekut aega oli. Kahe õiguse nimekiri on tugev tõend, sest seal polnud midagi muud leida.
See muudab seda, mis juhtub, kui hiljem küsimuse esitate. Selle asemel, et keegi käiks läbi, mida programm tegi, ja teataks, et ta ei leidnud midagi murettekitavat, on õiguste nimekiri kohe olemas ja see on lühike.
Enamik logisid räägivad sulle, mida programm tegi. Selvedge'i kviitung ütleb ka, mida tal oli lubatud teha, mis on erinev ja kasulikum asi. Programm, millel pole kunagi olnud luba sinu failidele ligi pääseda, ei saa olla sinu failidele ligi pääsenud, ja see on kirjas, olenemata sellest, kas keegi juhtus sel ajal vaatama või mitte.
Kood ei ole programmi koopia; see nimetab täpselt selle asja, mis käivitus.
See sulgeb ka väikese triki. Programm, mis suudab kella lugeda, võib käituda ühtemoodi enne tähtaega ja teistmoodi pärast seda, ja keegi ei märkaks kunagi erinevust. Kella, mis kunagi ei liigu, ei saa jälgida, nii et pole midagi, mille suhtes teistmoodi käituda.
See annab sulle testi, mida saad ise teha. Kui miski tundub vale, käivita see uuesti sama sisendiga. Kui vastus on sama, käitub programm õigesti ja probleem on kusagil mujal. Kui see on erinev, on midagi muutunud ja võrdlus ütleb, milline osa.
Enamik programme annab iga kord veidi erinevaid vastuseid, sest nad vaatavad kella, kasutavad natuke juhust või märkavad, kui hõivatud masin on. Selvedge'is töötav programm ei saa seda teha. Selle sees olev kell on fikseeritud ja ei liigu kunagi, ja igasugune juhuslikkus algab igal käivitamisel samast numbrist. Küsi kaks korda, saa sama vastus.
Käivita see homme uuesti ja vaata, kas see ikka ühtib.
See on sama idee nagu pitser ümbrikul, ja see teeb rohkem. Pitser ütleb sulle, et kiri avati. See ütleb sulle, milline leht muutus, ja see töötab ka siis, kui kirja on sellest ajast saadik tosin korda kopeeritud. Iga lugeja saab kopeeritud kirjest sama vastuse.