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.

Zkompilujte úlohy Kera BNN pro běhové prostředí Selvedge.

Řetězený hash důkazů původu událostí pro systémové události.

Certifikáty důkazů odvození, nikoli přepisy provedení.

Selvedge vychází ve čtvrtém kole programu základního vydání, po Knot a Ledger. Jakmile vyjde, vyzkoušejte modul WASM v sandboxu a přehrajte si důkazový obal sami.

Plocha pro nástroje Model Context Protocol.

Ed25519 zapečetěno, SHA3-256 přepis, offline ověření.

Binární neuronové sítě IR grafu, JIT a interpret.

Běhové prostředí komponent, hostitel WASI 0.2 Preview 2.

Selvedge spouští nedůvěryhodný kód v sandboxu s omezenými schopnostmi a zaznamenává provedení do zapečetěného přepisu. Omezení určuje, čeho se kód může dotknout; přepis ukazuje, co se skutečně stalo, a lze jej přehrát pro kontrolu.

Server Model Context Protocol pro nástroje agentů.

Dlouhodobě běžící agentské běhové prostředí s frontou.

build, verify, run, replay. Vhodné pro CI.

Nástroje agentů, pluginy třetích stran, inference Kera BNN a regulovaná data vstupují přes stejnou řízenou hranici. Každé běhové prostředí vytváří stejný zapečetěný důkazový obal, takže změny nasazení nemění příběh auditu.

Ed25519 podpis 5-15 us, ověření 15-30 us.

Včetně spuštění procesu, 8-9x rychlejší.

Výpočetní modul, oproti 1187-1494 us vanilla.

Selvedge Wasmtime startuje 62 až 243x rychleji než vanilla Wasmtime na úrovni API. Upřímný kompromis je horká cesta: vanilla drží 22 ns opakovaného volání a komponentní model, který vytváří přepis, běží pomaleji. Kera JIT je 2x rychlejší za tepla pro práci s grafy. Čísla pocházejí z BENCHMARKS.md v repozitáři.

Každé rozhodnutí brány je zaznamenáno a hashováno.

max_execution_time_ns, odděleně od paliva.

max_memory_bytes, výchozí 256 MiB, strop 4 GiB.

max_instructions, vyčerpání čistě zastaví zátěž.

Hodiny, náhodnost, souborový systém, síť, prostředí, stdio, proces, vlastní. Výchozí odepření.

Sada schopností s výchozím odepřením brání každé volání hostitele v osmi doménách WASI. Limity zdrojů na paměť, palivo a čas omezují nekontrolované chování. Každé rozhodnutí brány a čtení zdrojů je v přepisu.

Potřebujete kryptografický důkaz toho, co zátěž dělala, ne důvěru v běhové prostředí.

Povolit souborový systém, odepřít síť, ale bez záznamu na volání v auditním protokolu.

FP a reálný čas prosakují. Přehrání produkuje přibližně stejný výstup, ne přesně.

Sandbox zastaví útěk. Nedokazuje, že se zátěž uvnitř chovala správně.

Konvenční sandboxy zastaví špatný kód v útěku. Nevytvářejí záznam o tom, co kód uvnitř skutečně dělal. Když se auditor zeptá, odpověď je tvrzení, ne důkaz.

Selvedge zachycuje přesně to, co se provedlo, od vstupu po výstup, každé volání hostitele zapečetěno.

Ledger zaznamenává, co se stalo v systému. Selvedge zaznamenává, jaký kód běžel.

AION vydává certifikáty nad kroky solveru, ne nad běhy provádění.

Stejné vstupy plus stejná obálka znamenají vždy stejný výstup.

Pevná epocha a deterministický PRNG ChaCha20 nahrazují čas hostitele a entropii.

Interní výpočty, ukládání a akumulace používají binární, celočíselné, s pevnou řádovou čárkou nebo adaptivní celočíselné/pevné reprezentace. Pohyblivá řádová čárka je přijímána pouze na deklarovaném vnějším rozhraní a je explicitně převedena před zahájením interní práce; neexistuje žádný interní záložní mechanismus s pohyblivou řádovou čárkou. Virtuální hodiny zůstávají pevné, takže přehrání produkuje stejné bajty.

Žádné interní plovoucí čárky, žádné hodiny

Ověřovatel přehrává offline pouze s bajty modulu a obálkou.

Podpis ed25519 nad kořenem obálky. Ne próza.

Každé volání hostitele je zahašováno do řetězce. Úpravy přeruší řetězec.

Stejný tok při každém provádění. Přehrání je mechanické.

Důkaz AION vydán, podepsán ed25519, obálka připravena k odeslání.

Každé volání hostitele a výsledek je zahašováno do řetězce SHA3-256.

Wasmtime nebo Kera běží v sandboxu s výchozím odmítnutím.

Modul načten, schopnosti omezeny, limity zdrojů aplikovány.

Selvedge spouští kód WASM nebo Kera v sandboxu s výchozím odmítnutím, hashuje každé volání hostitele do řetězce přepisu SHA3-256 a zabalí výsledek do podepsané obálky důkazu AION. Obálka se přehrává bez původního sandboxu.

Selvedge je deterministický WebAssembly sandbox pro nedůvěryhodný kód. Jeho manifest oprávnění a zapečetěný přepis běží na hardwaru, který ovládáte, takže protistrana může přehrát záznam na svém vlastním počítači a spor se stane vyhledáním, nikoli žádostí o ujištění.

Selvedge umístí program, který jste si nevybrali, do místnosti bez internetu, bez cesty k vašim souborům a bez možnosti cokoli se o vašem počítači dozvědět. Zanechá účtenku, která říká, co se vrátilo a co program směl dělat, takže si můžete pozdější tvrzení ověřit, místo abyste někomu věřili na slovo.

Selvedge spouští kód, který jste nenapsali, v hostiteli komponent WebAssembly bez sítě, souborového systému, prostředí a pohyblivých hodin. Každé dokončené spuštění vrátí záznam, který může jiná strana přehrát, a zprávu o provedení, která uvádí, co kód směl dělat. Publikováno pod licencí Apache 2.0.

Spouštějte nedůvěryhodný kód na hardwaru, který ovládáte.

Publikace je plánována ve čtrnáctidenních kolech. Úložiště a jeho dokumentace budou zveřejněny společně.

Dělá jednu malou práci, tady, a nikde jinde.

Provádění bylo úspěšně dokončeno za 18,4 ms

Místnost, účtenka a seznam jsou celý slib.

Tady to přijde jako seznam. Každá úloha, která použila vadný program, ho pojmenovává kódem, datem a krátkým seznamem oprávnění, takže vidíte, co bylo ovlivněno a jak daleko to mohlo zajít. Pokud lidé, kteří ho vytvořili, už nejsou důvěryhodní, odvolání nabude účinnosti v nastaveném intervalu obnovování, ne až když vyprší certifikát. Software je publikován pod licencí Apache 2.0.

Obvyklá verze tohoto rozhovoru je odhad. Někdo zjistí, která verze pravděpodobně běžela, ve které dny, pro které lidi, a odpověď přijde jako rozsah s upozorněním. To nechává fakta potřebná k rozsahu opravy jako rekonstrukci, ne jako záznam. Oprava začíná seznamem, který lze zkontrolovat.

Každá úloha zaznamenává krátký kód pro přesný program, který práci vykonal. Ne jeho název, ne číslo verze, program samotný, takže dvě sestavení, která sdílejí název, mají stále různé kódy. Pokud se později ukáže, že je program vadný, kód je to, jak se najde každá úloha, které se dotkl.

Když se něco ukáže jako špatné, jeden kód pojmenovává program.

Program samotný se načte pokaždé čerstvě ze svého vlastního kódu a účtenka nese kód pro tento kód, takže to, co běželo dnes, je prokazatelně to, co běželo minulý měsíc. Nic se mezitím nehromadí, o co by se někdo musel později starat.

Nová místnost Selvedge stojí tak málo, že jedna na úlohu je dostupná, takže se nemusí nic sdílet. Pokud něco skutečně potřebuje přenést, předá se to záměrně a objeví se to v záznamu jako něco, co bylo předáno.

Každá úloha dostane novou místnost. Nic z té předchozí v ní není: žádné zbytky poznámek, žádná nedokončená práce, žádná paměť toho, kdo žádal. To zní samozřejmě a obvykle to není pravda, protože udržovat místnost stojí méně než stavět novou, takže většina systémů místnost ponechá a znovu ji použije.

Nová místnost je připravena pro další úlohu.

Najít nic je slabý důkaz, protože záleží na tom, jak tvrdě někdo hledal a jak dlouho měl čas před schůzkou. Seznam dvou oprávnění je silný důkaz, protože tam nebylo nic jiného k nalezení.

Mění to, co se stane, když se později zeptáte. Místo toho, aby někdo procházel, co program udělal, a hlásil, že nenašel nic znepokojivého, je seznam oprávnění přímo tam a je krátký.

Většina záznamů říká, co program udělal. Účtenka Selvedge také říká, co mu bylo dovoleno udělat, což je jiná a užitečnější věc. Program, který se nikdy nesměl přiblížit k vašim souborům, se k nim nemohl dostat, a to je v záznamu, ať už se v tu chvíli někdo díval, nebo ne.

Kód není kopií programu; označuje přesně to, co běželo.

Také to uzavírá malý trik. Program, který umí číst hodiny, se může chovat jinak před termínem a jinak po něm, a nikdo by rozdíl nikdy neviděl. Hodiny, které se nikdy nepohnou, nelze sledovat, takže není co dělat jinak.

Dává vám test, který si můžete spustit sami. Pokud něco vypadá špatně, spusťte to znovu se stejným vstupem. Pokud je odpověď stejná, program se chová správně a problém je jinde. Pokud se liší, něco se změnilo, a srovnání říká, která část.

Většina programů dává pokaždé mírně jiné odpovědi, protože se dívají na hodiny, používají trochu náhody nebo si všímají, jak je stroj vytížený. Program běžící v Selvedge nic z toho dělat nemůže. Hodiny uvnitř jsou pevné a nikdy se nepohnou, a cokoli náhodného začíná při každém spuštění od stejného čísla. Zeptejte se dvakrát, dostanete stejnou odpověď.

Spusťte to znovu zítra a podívejte se, jestli stále souhlasí.

Je to stejná myšlenka jako pečeť na obálce, a dělá víc. Pečeť vám řekne, že byl dopis otevřen. Toto vám řekne, která stránka se změnila, a stále funguje, když byl dopis od té doby tucetkrát zkopírován. Každý čtenář dostane ze zkopírovaného záznamu stejnou odpověď.

Tento kód dělá pozdější hádku krátkou. Pokud vám někdo ukáže odpověď, kterou program dal v březnu, a chcete vědět, jestli je to odpověď, která skutečně vyšla, porovnáte kódy. Buď se shodují, nebo ne, a mezi tím není nic k diskuzi.