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.
Kompilera Kera BNN-arbetsbelastningar för Selvedge-körtid.
Hash-kedjad händelseursprung för systemhändelser.
Resonemangsbeviscertifikat, inte exekveringstranskript.
Selvedge publiceras i den fjärde omgången av stiftelsens utgivningsprogram, efter Knot och Reskontra. När det sker, sandlåda en WASM-modul och spela upp beviskuvertet själv.
Model Context Protocol-verktygsexekveringsyta.
Ed25519-förseglad, SHA3-256-transkript, offlineverifiering.
Graf-IR binära neurala nätverk, JIT och tolk.
Komponentmodellkörning, WASI 0.2 Preview 2-värd.
Selvedge kör icke betrodd kod i en kapabilitetsbegränsad sandlåda och registrerar exekveringen i ett förseglat transkript. Inneslutning begränsar vad koden kan röra; transkriptet visar vad som faktiskt hände och kan spelas upp för granskning.
Model Context Protocol-server för agentverktyg.
bygg, verifiera, kör, spela upp. CI-vänligt.
Länkad till din applikation som en crate.
Agentverktyg, tredjepartsplugins, Kera BNN-inferens och reglerad datahantering går alla in genom samma kontrollerade gräns. Varje körtid producerar samma förseglade beviskuvert, så driftsändringar ändrar inte granskningsberättelsen.
Ed25519-signering 5-15 us, verifiering 15-30 us.
Beräkningsmodul, jämfört med 1187-1494 us vanilla.
Selvedge Wasmtime startar 62 till 243x snabbare än vanilla Wasmtime på API-nivå. Den ärliga avvägningen är den heta sökvägen: vanilla håller det 22 ns upprepade anropet, och komponentmodellen som producerar transkriptet kör långsammare där. Kera JIT är 2x snabbare varm för grafarabeta. Siffrorna kommer från repositoryts BENCHMARKS.md.
Varje gate-beslut registreras och hashas.
max_execution_time_ns, separat från fuel.
max_memory_bytes, 256 MiB standard, 4 GiB tak.
max_instructions, utmattning stoppar arbetsbelastningen rent.
Klocka, slump, filsystem, nätverk, miljö, stdio, process, anpassad. Standard neka.
En standard-neka-förmågsuppsättning gatear varje värdanrop över åtta WASI-domäner. Resurstak på minne, fuel och tid begränsar rymningsbeteende. Varje gate-beslut och resursavläsning finns i transkriptet.
Du behöver kryptografiska bevis på vad arbetsbelastningen gjorde, inte förtroende för runtime.
Lita på runtime, inte arbetsbelastningen
Tillåt filsystem, neka nätverk, men ingen per-anrop-post i granskningsspåret.
FP och väggklocka läcker igenom. Uppspelning producerar ungefär samma utdata, inte exakt.
En sandlåda stoppar rymning. Den bevisar inte att arbetsbelastningen betedde sig korrekt inuti.
Konventionella sandboxar stoppar dålig kod från att rymma. De producerar inte en post över vad koden faktiskt gjorde inuti. När en revisor frågar är svaret ett påstående, inte bevis.
Selvedge fångar exakt vad som exekverades, från indata till utdata, varje värdanrop förseglat.
Ledger registrerar vad som hände i ett system. Selvedge registrerar vilken kod som kördes.
AION utfärdar certifikat över lösningssteg, inte exekveringskörningar.
Hur Selvedge skiljer sig från AION och Ledger
Samma indata plus samma kuvert innebär alltid samma utdata.
En fast epok och en seedad ChaCha20-PRNG ersätter värdtid och entropi.
Intern beräkning, lagring och ackumulering använder binära, heltals-, fixpunkts- eller adaptiva heltals/fixpunktsrepresentationer. Flyttal accepteras endast vid en deklarerad extern gräns och konverteras explicit innan internt arbete påbörjas; det finns inget internt flyttalsfallback. Den virtuella klockan förblir fast, så uppspelning producerar samma byte.
Verifieraren spelar upp offline med endast modulbyte och kuvert.
ed25519-signatur över kuvertroten. Inte prosa.
Varje värdanrop hashas in i kedjan. Ändringar bryter kedjan.
Varför transkriptet skiljer sig från en logg
Samma flöde vid varje exekvering. Uppspelning är mekanisk.
AION-bevis utfärdat, ed25519-signerat, kuvert redo att skickas.
Varje värdanrop och resultat hashas in i en SHA3-256-kedja.
Wasmtime eller Kera exekverar i sandlådan med standardvägran.
Modul laddad, caps låsta, resursgränser tillämpade.
Selvedge kör WASM- eller Kera-kod i en sandlåda med standardvägran, hashvarje värdanrop in i en SHA3-256-transkriptkedja och omsluter resultatet i ett signerat AION-beviskuvert. Kuvertet spelar upp utan den ursprungliga sandlådan.
Selvedge är en deterministisk WebAssembly-sandlåda för icke betrodd kod. Dess behörighetsmanifest och förseglade transkript körs på hårdvara du kontrollerar, så en motpart kan spela upp posten på sin egen maskin och en tvist blir en uppslagning snarare än en begäran om försäkran.
Håll koden inom gränserna, behåll protokollet
Selvedge placerar ett program du inte valt i ett rum utan internet, utan väg till dina filer och utan något att lära sig om din maskin. Det lämnar ett kvitto som säger vad som kom tillbaka och vad programmet fick göra, så att du kan kontrollera ett senare påstående i stället för att ta någon på orden.
Selvedge kör kod du inte skrivit i en WebAssembly-komponentvärd utan nätverk, filsystem, miljö eller rörlig klocka. Varje avslutad körning returnerar en post som en annan part kan spela upp, och en körningsrapport som anger vad koden fick göra. Publicerad under Apache 2.0.
Kör ej betrodd kod på hårdvara du kontrollerar.
Publicering planeras i fjorton dagars rundor. Förvaret och dess dokumentation publiceras tillsammans.
Den gör ett litet jobb, här, och ingen annanstans.
Rummet, kvittot och listan är hela löftet.
Här kommer det som en lista. Varje jobb som använde det felaktiga programmet namnger det med kod, datum och en kort behörighetslista, så att du kan se vad som påverkades och hur långt det kunde ha nått. Om de som skapade det inte längre är betrodda, träder återkallelsen i kraft med ett fast uppdateringsintervall snarare än när ett certifikat löper ut. Programvaran publiceras under Apache 2.0-licensen.
Den vanliga versionen av den här konversationen är en uppskattning. Någon räknar ut vilken version som troligen kördes, vilka dagar, för vilka personer, och svaret kommer som ett intervall med en reservation. Det gör att fakta som behövs för att avgränsa en korrigering blir en rekonstruktion snarare än en registrering. Korrigeringen börjar med en lista som kan kontrolleras.
Varje jobb registrerar en kort kod för det exakta program som utförde arbetet. Inte dess namn, inte dess versionsnummer, själva programmet, så att två byggen som delar namn ändå har olika koder. Om programmet senare visar sig vara felaktigt är koden hur varje jobb det rörde hittas.
När något visar sig vara fel namnger en kod programmet.
Själva programmet laddas in på nytt varje gång från sin egen kod, och kvittot bär en kod för den koden, så att det som kördes idag är bevisligen det som kördes förra månaden. Inget ackumuleras däremellan som någon behöver oroa sig för senare.
Ett nytt Selvedge-rum kostar så lite att ett per jobb är överkomligt, så inget behöver delas. Om något verkligen behöver föras över görs det medvetet och det syns i registreringen som något som fördes över.
Varje jobb får ett nytt rum. Inget från det förra finns i det: inga kvarlämnade anteckningar, inget halvfärdigt arbete, inget minne av vem som bad om det. Det låter självklart och det är oftast inte sant, eftersom att hålla ett rum stående är billigare än att bygga ett nytt, så de flesta system behåller rummet och återanvänder det.
Att inte hitta något är svaga bevis, eftersom det beror på hur noggrant någon letade och hur lång tid de hade innan mötet. En lista med två behörigheter är starka bevis, eftersom det inte fanns något annat där att hitta.
Det ändrar vad som händer när du ställer en fråga senare. Istället för att någon går igenom vad programmet gjorde och rapporterar att de inte hittade något oroande, finns behörighetslistan där direkt, och den är kort.
De flesta loggar berättar vad ett program gjorde. Ett Selvedge-kvitto säger också vad det fick göra, vilket är en annan och mer användbar sak. Ett program som aldrig fick komma nära dina filer kan inte ha varit nära dina filer, och det står i loggen oavsett om någon råkade titta just då.
En kod är inte en kopia av programmet; den namnger exakt det som kördes.
Det stänger också en liten fint. Ett program som kan läsa klockan kan bete sig på ett sätt före en deadline och på ett annat efter den, och ingen skulle någonsin se skillnaden. En klocka som aldrig rör sig kan inte bevakas, så det finns inget att bete sig annorlunda om.
Det ger dig ett test du kan köra själv. Om något ser fel ut, kör det igen med samma indata. Om svaret är detsamma, beter sig programmet korrekt och problemet ligger någon annanstans. Om det är annorlunda, har något ändrats, och jämförelsen visar vilken del.
De flesta program ger lite olika svar varje gång, eftersom de tittar på klockan, använder lite slump eller märker hur upptagen maskinen är. Ett program som körs i Selvedge kan inte göra något av det. Klockan inuti är fixerad och rör sig aldrig, och allt slumpmässigt börjar från samma nummer varje körning. Fråga två gånger, få samma svar.
Kör det igen imorgon och se om det fortfarande stämmer.
Det är samma idé som ett sigill på ett kuvert, och det gör mer. Ett sigill berättar att brevet öppnades. Detta berättar vilken sida som ändrades, och det fungerar fortfarande när brevet har kopierats ett dussin gånger sedan dess. Varje läsare får samma svar från den kopierade loggen.