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.
Kääntää Kera BNN -työkuormat Selvedge-ajoympäristöön.
Hash-ketjutettu tapahtumaprosessointi järjestelmätapahtumille.
Päättelytodistussertifikaatit, ei suorituspöytäkirjoja.
Selvedge julkaistaan perustan julkaisuohjelman neljännellä kierroksella Knotin ja Ledgerin jälkeen. Kun se julkaistaan, hiekkalaatikoi WASM-moduuli ja toista todistekuori itse.
Model Context Protocol -työkalujen suorituspinta.
Ed25519-sinöity, SHA3-256-pöytäkirja, offline-varmistus.
Graafi-IR-binäärineuroverkot, JIT ja tulkki.
Komponenttimallin ajonaikainen ympäristö, WASI 0.2 Preview 2 -isäntä.
Selvedge suorittaa luottamatonta koodia kyvykkyysrajoitetussa hiekkalaatikossa ja tallentaa suorituksen sinöityyn pöytäkirjaan. Rajoitus määrittää, mihin koodi voi koskea; pöytäkirja näyttää, mitä todella tapahtui, ja sen voi toistaa tarkistusta varten.
Model Context Protocol -palvelin agenttityökaluille.
Pitkäkestoinen agenttiajoympäristö jonolla.
build, verify, run, replay. CI-ystävällinen.
Linkitetty sovellukseesi crate-tiedostona.
Agenttityökalut, kolmannen osapuolen lisäosat, Kera BNN -päätelmät ja säännelty data kulkevat kaikki saman hallitun rajan läpi. Jokainen ajonaikainen ympäristö tuottaa saman sinöidyn todistekuoren, joten käyttöönoton muutokset eivät muuta tarkastustarinaa.
Compute module, vs 1187-1494 us vanilla.
Selvedge Wasmtime starts 62 to 243x faster than vanilla Wasmtime at the API level. The honest trade is the hot path: vanilla holds the 22 ns repeated call, and the component model that produces the transcript runs slower there. Kera JIT is 2x faster warm for graph work. Figures are from the repository BENCHMARKS.md.
Jokainen porttipäätös tallennetaan ja tiivistetään.
max_execution_time_ns, erillään fuelista.
max_memory_bytes, oletus 256 MiB, yläraja 4 GiB.
max_instructions, loppuminen pysäyttää työkuorman siististi.
Kello, satunnaisuus, tiedostojärjestelmä, verkko, ympäristö, stdio, prosessi, mukautettu. Oletusarvoisesti estetty.
Oletusarvoisesti estetty ominaisuusjoukko portittaa jokaisen isäntäkutsun kahdeksalla WASI-alueella. Resurssikatot muistille, fuelille ja ajalle rajoittavat karkaavaa käytöstä. Jokainen porttipäätös ja resurssiluku ovat transkriptissä.
Tarvitset kryptografista näyttöä siitä, mitä työkuorma teki, et luottamusta runtimeen.
Salli tiedostojärjestelmä, estä verkko, mutta ei kutsukohtaista merkintää auditointijäljessä.
FP ja seinäaika vuotavat läpi. Toisto tuottaa suunnilleen saman tulosteen, ei täsmälleen samaa.
Hiekkalaatikko pysäyttää karkaamisen. Se ei todista, että työkuorma käyttäytyi oikein sisällä.
Perinteiset hiekkalaatikot estävät huonon koodin karkaamisen. Ne eivät tuota tietuetta siitä, mitä koodi todella teki sisällä. Kun auditoija kysyy, vastaus on väite, ei näyttö.
Selvedge tallentaa täsmälleen sen, mitä suoritettiin, syötteestä tulosteeseen, jokainen isäntäkutsu sinetöitynä.
Kirjanpito tallentaa, mitä järjestelmässä tapahtui. Selvedge tallentaa, mitä koodi teki.
AION myöntää sertifikaatit ratkaisijan vaiheista, ei suorituskerroista.
Miten Selvedge eroaa AIONista ja Ledgeristä
Samat syötteet ja sama kirjekuori tuottavat aina saman tulosteen.
Kiinteä aikaleima ja siemenellä alustettu ChaCha20-PRNG korvaavat isäntäkoneen ajan ja satunnaisuuden.
Virtuaalikello, siemenellä alustettu RNG
Sisäinen laskenta, tallennus ja kumulointi käyttävät binääri-, kokonaisluku-, kiintoluku- tai mukautuvia kokonaisluku/kiintolukuesityksiä. Liukulukuja hyväksytään vain määritellyllä ulkoisella rajapinnalla, ja ne muunnetaan eksplisiittisesti ennen sisäistä työtä; sisäistä liukulukuvaravaihtoehtoa ei ole. Virtuaalikello pysyy kiinteänä, joten toisto tuottaa samat tavut.
Oletusarvoisesti deterministinen suoritus
Varmistaja toistaa offline-tilassa moduulitavuilla ja kirjekuorella yksin.
ed25519-allekirjoitus kirjekuoren juuresta. Ei proosaa.
Jokainen isäntäkutsuhash ketjuun. Muokkaukset rikkovat ketjun.
Sama kulku jokaisessa suorituksessa. Toisto on mekaanista.
AION-todiste myönnetty, ed25519-allekirjoitettu, kirjekuori valmis lähetettäväksi.
Jokainen isäntäkutsu ja tulos hashataan SHA3-256-ketjuun.
Wasmtime tai Kera suorittaa oletusarvoisesti kieltävässä hiekkalaatikossa.
Moduuli ladattu, rajoitukset kiinnitetty, resurssirajat sovellettu.
Selvedge suorittaa WASM- tai Kera-koodia oletusarvoisesti kieltävässä hiekkalaatikossa, hashää jokaisen isäntäkutsun SHA3-256-transkriptioketjuun ja käärii tuloksen allekirjoitettuun AION-todistekirjekuoreen. Kirjekuori toistuu ilman alkuperäistä hiekkalaatikkoa.
Mitä se säästää ja mitä riskejä se vähentää
Selvedge on deterministinen WebAssembly-hiekkalaatikko luottamattomalle koodille. Sen käyttöoikeusmanifesti ja sinetöity transkriptio toimivat laitteistolla, jota hallitset, joten vastapuoli voi toistaa tallenteen omalla koneellaan ja kiista muuttuu hakemistohausta, ei vakuutuspyynnöstä.
Selvedge laittaa ohjelman, jota et valinnut, huoneeseen ilman internettiä, ilman reittiä tiedostoihisi ja ilman mitään opittavaa koneestasi. Se jättää kuitin siitä, mitä palasi ja mitä ohjelma sai tehdä, jotta voit tarkistaa myöhemmän väitteen sen sijaan, että ottaisit jonkun sanan siitä.
Selvedge suorittaa koodia, jota et kirjoittanut, WebAssembly-komponenttipalvelimessa ilman verkkoa, tiedostojärjestelmää, ympäristöä tai liikkuvaa kelloa. Jokainen valmis suoritus palauttaa tallenteen, jonka toinen osapuoli voi toistaa, ja suoritusraportin, joka kertoo, mitä koodi sai tehdä. Julkaistu Apache 2.0 -lisenssillä.
Suorita luottamatonta koodia laitteistolla, jota hallitset.
Deterministinen WebAssembly-hiekkalaatikko.
Julkaisu on suunniteltu joka toinen viikko. Arkisto ja sen dokumentaatio julkaistaan yhdessä.
Se tekee yhden pienen tehtävän täällä, eikä missään muualla.
Suoritus valmistui onnistuneesti 18.4 ms:ssa
Huone, kuitti ja lista ovat koko lupaus.
Tässä se saapuu listana. Jokainen työ, joka käytti viallista ohjelmaa, nimeää sen koodilla, päivämäärällä ja lyhyellä käyttöoikeuslistalla, joten näet, mitä vaikutukset koskivat ja kuinka pitkälle ne saattoivat ulottua. Jos tekijöihin ei enää luoteta, peruutus tulee voimaan tietyllä päivitysvälillä sen sijaan, että se odottaisi varmenteen vanhenemista. Ohjelmisto on julkaistu Apache 2.0 -lisenssillä.
Tämän keskustelun tavallinen versio on arvio. Joku selvittää, mikä julkaisu todennäköisesti oli käynnissä, minä päivinä, kenelle, ja vastaus saapuu vaihteluvälinä varauksin. Tämä jättää korjauksen laajuuden määrittämiseen tarvittavat tosiasiat rekonstruktioksi eikä tallenteeksi. Korjaus alkaa listasta, joka voidaan tarkistaa.
Jokainen työ tallentaa lyhyen koodin tarkalle ohjelmalle, joka teki työn. Ei sen nimeä, ei sen versionumeroa, vaan itse ohjelman, joten kahdella samannimisellä koontiversiolla on silti eri koodit. Jos ohjelma myöhemmin osoittautuu vialliseksi, koodi on se, jonka avulla jokainen sen koskettama työ löydetään.
Kun jokin osoittautuu vääräksi, yksi koodi nimeää ohjelman.
Itse ohjelma ladataan tuoreena joka kerta omasta koodistaan, ja kuitti kantaa koodia sille koodille, joten tänään ajettu asia on todistettavasti sama kuin viime kuussa ajettu. Väliin ei kerry mitään, mistä kenenkään tarvitsisi myöhemmin huolehtia.
Uusi Selvedge-huone maksaa niin vähän, että yksi per työ on edullista, joten mitään ei tarvitse jakaa. Jos jotain todella täytyy siirtää, se luovutetaan tarkoituksella ja se näkyy tallenteessa luovutettuna asiana.
Jokainen työ saa uuden huoneen. Edellisestä ei ole siinä mitään: ei jääneitä muistiinpanoja, ei keskeneräistä työtä, ei muistia siitä, kuka pyysi. Tämä kuulostaa itsestäänselvältä, eikä se yleensä ole totta, koska huoneen ylläpito on halvempaa kuin uuden rakentaminen, joten useimmat järjestelmät pitävät huoneen ja käyttävät sen uudelleen.
Uusi huone on valmis seuraavaa työtä varten.
Ei löytynyt mitään on heikko todiste, koska se riippuu siitä, kuinka huolellisesti joku etsi ja kuinka kauan hänellä oli aikaa ennen kokousta. Kahden käyttöoikeuden lista on vahva todiste, koska siellä ei ollut muuta löydettävää.
Se muuttaa sitä, mitä tapahtuu, kun kysyt kysymyksen myöhemmin. Sen sijaan, että joku kävisi läpi, mitä ohjelma teki, ja raportoisi, ettei löytänyt mitään huolestuttavaa, käyttöoikeuslista on siinä suoraan, ja se on lyhyt.
Useimmat tietueet kertovat, mitä ohjelma teki. Selvedge-kuitti kertoo myös, mihin sillä oli lupa, mikä on eri ja hyödyllisempi asia. Ohjelma, jota ei koskaan päästetty tiedostojesi lähelle, ei ole voinut olla tiedostojesi lähellä, ja se on tietueessa riippumatta siitä, sattuiko joku katsomaan sillä hetkellä.
Koodi ei ole kopio ohjelmasta; se nimeää täsmälleen sen asian, joka suoritettiin.
Se myös sulkee pienen tempun. Ohjelma, joka voi lukea kelloa, voi käyttäytyä yhdellä tavalla ennen määräaikaa ja toisella tavalla sen jälkeen, eikä kukaan koskaan näkisi eroa. Kello, joka ei koskaan liiku, ei voi olla tarkkailtavana, joten ei ole mitään, mistä käyttäytyä eri tavalla.
Se antaa sinulle testin, jonka voit suorittaa itse. Jos jokin näyttää väärältä, suorita se uudelleen samalla syötteellä. Jos vastaus on sama, ohjelma toimii oikein ja ongelma on jossain muualla. Jos se on erilainen, jokin muuttui, ja vertailu kertoo minkä osan.