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.

Compila i workload BNN di Kera per il runtime Selvedge.

Provenienza degli eventi con catena di hash per gli eventi di sistema.

Certificati di prova del ragionamento, non trascrizioni di esecuzione.

Selvedge pubblica nel quarto round del programma di rilascio della fondazione, dopo Knot e Ledger. Una volta pubblicato, metti in sandbox un modulo WASM e riproduci tu stesso la busta di prova.

Superficie di esecuzione degli strumenti del Model Context Protocol.

Sigillato con Ed25519, trascrizione SHA3-256, verifica offline.

Reti neurali binarie IR a grafo, JIT e interprete.

Runtime del modello a componenti, host WASI 0.2 Preview 2.

Selvedge esegue codice non attendibile in una sandbox con limiti di capacità e registra l'esecuzione in una trascrizione sigillata. Il contenimento limita ciò che il codice può toccare; la trascrizione mostra cosa è realmente accaduto e può essere riprodotta per la revisione.

Deterministico per impostazione predefinita

Server Model Context Protocol per gli strumenti agente.

Runtime agente a lunga esecuzione con una coda.

build, verify, run, replay. Adatto alla CI.

Collegato alla tua applicazione come crate.

Strumenti agente, plugin di terze parti, inferenza BNN Kera e dati regolamentati entrano tutti attraverso lo stesso confine controllato. Ogni runtime produce la stessa busta di prova sigillata, quindi i cambi di distribuzione non modificano la storia di audit.

Firma Ed25519 5-15 us, verifica 15-30 us.

Avvio del processo incluso, 8-9 volte più veloce.

Modulo di calcolo, rispetto a 1187-1494 us vanilla.

Selvedge Wasmtime si avvia da 62 a 243 volte più velocemente di Wasmtime vanilla a livello API. Il compromesso onesto è il percorso caldo: vanilla mantiene la chiamata ripetuta da 22 ns, e il modello a componenti che produce la trascrizione è più lento lì. Kera JIT è 2 volte più veloce a caldo per il lavoro sui grafi. I dati provengono dal BENCHMARKS.md del repository.

Scegli il runtime in base al carico di lavoro

Ogni decisione di gate è registrata e sottoposta a hash.

max_execution_time_ns, separato dal fuel.

max_memory_bytes, 256 MiB predefinito, tetto di 4 GiB.

max_instructions, l'esaurimento arresta il carico di lavoro in modo pulito.

Orologio, casualità, filesystem, rete, ambiente, stdio, processo, personalizzato. Negazione predefinita.

Un insieme di capacità a negazione predefinita controlla ogni chiamata host in otto domini WASI. I limiti di risorse su memoria, fuel e tempo vincolano il comportamento fuori controllo. Ogni decisione di gate e lettura di risorse è nella trascrizione.

Ti serve una prova crittografica di ciò che il carico di lavoro ha fatto, non fiducia nel runtime.

Fidati del runtime, non del carico di lavoro

Consenti filesystem, nega rete, ma nessuna registrazione per chiamata nel registro di audit.

FP e tempo reale trapelano. La riproduzione produce approssimativamente lo stesso output, non esattamente.

Una sandbox impedisce la fuga. Non dimostra che il carico di lavoro si sia comportato correttamente all'interno.

Le sandbox convenzionali impediscono al codice dannoso di fuggire. Non producono una registrazione di ciò che il codice ha effettivamente fatto all'interno. Quando un revisore chiede, la risposta è un'asserzione, non una prova.

Selvedge cattura esattamente ciò che è stato eseguito, dall'input all'output, ogni chiamata host sigillata.

Il registro registra cosa è successo in un sistema. Selvedge registra quale codice è stato eseguito.

AION emette certificati sui passaggi del solver, non sulle esecuzioni.

Come Selvedge differisce da AION e Ledger

Stessi input più stessa busta significa stesso output, sempre.

Un'epoca fissa e un PRNG ChaCha20 seminato sostituiscono tempo e entropia dell'host.

Calcolo interno, archiviazione e accumulo usano rappresentazioni binarie, intere, a virgola fissa o adattive intere/a virgola fissa. La virgola mobile è accettata solo a un confine esterno dichiarato e viene esplicitamente convertita prima che inizi il lavoro interno; non esiste fallback interno a virgola mobile. L'orologio virtuale rimane fisso, quindi il replay produce gli stessi byte.

Niente virgole mobili interne, niente orologi

Il verificatore riproduce offline con byte del modulo e busta soltanto.

Firma ed25519 sulla radice della busta. Non prosa.

Ogni chiamata host è hashata nella catena. Le modifiche rompono la catena.

Perché il trascritto è diverso da un log

Stesso flusso a ogni esecuzione. Il replay è meccanico.

Prova AION emessa, firmata ed25519, busta pronta per l'invio.

Ogni chiamata host e risultato è hashata in una catena SHA3-256.

Wasmtime o Kera esegue all'interno della sandbox a negazione predefinita.

Modulo caricato, capacità bloccate, limiti delle risorse applicati.

Selvedge esegue codice WASM o Kera all'interno di una sandbox a negazione predefinita, hashata ogni chiamata host in una catena di trascritti SHA3-256 e avvolge il risultato in una busta di prova AION firmata. La busta si riproduce senza la sandbox originale.

Selvedge è una sandbox WebAssembly deterministica per codice non fidato. Il suo manifest dei permessi e il trascritto sigillato girano su hardware che controlli, quindi una controparte può riprodurre il record sulla propria macchina e una disputa diventa una ricerca piuttosto che una richiesta di garanzia.

Tieni il codice nei limiti, tieni il registro

Selvedge mette un programma che non hai scelto in una stanza senza internet, senza accesso ai tuoi file e senza nulla da imparare sulla tua macchina. Lascia una ricevuta che dice cosa è tornato e cosa al programma era permesso fare, così puoi verificare un'affermazione successiva invece di prendere qualcuno in parola.

Selvedge esegue codice che non hai scritto in un host componente WebAssembly senza rete, filesystem, ambiente o orologio in movimento. Ogni esecuzione completata restituisce un record che un'altra parte può riprodurre e un rapporto di esecuzione che dichiara cosa al codice era permesso fare. Pubblicato sotto Apache 2.0.

Esegui codice non fidato su hardware che controlli.

La pubblicazione è prevista in round quindicinali. Il repository e la sua documentazione vengono pubblicati insieme.

Fa un piccolo lavoro, qui, e da nessun'altra parte.

Sigillato, così nulla può essere modificato

Esecuzione completata con successo in 18,4 ms

La stanza, la ricevuta e l'elenco sono l'intera promessa.

Il codice viene trasportato con ogni esecuzione.

Qui arriva come elenco. Ogni job che ha usato il programma difettoso lo identifica per codice, data e un breve elenco di permessi, così puoi vedere cosa è stato coinvolto e quanto lontano avrebbe potuto arrivare. Se chi lo ha creato non è più considerato affidabile, il ritiro entra in vigore a un intervallo di aggiornamento prestabilito, non quando scade un certificato. Il software è pubblicato con licenza Apache 2.0.

La versione abituale di questa conversazione è una stima. Qualcuno calcola quale release era probabilmente in esecuzione, in quali giorni, per quali persone, e la risposta arriva come un intervallo con una nota di cautela. Questo lascia i fatti necessari per definire una correzione come una ricostruzione, non come una registrazione. La correzione inizia con un elenco che può essere verificato.

Ogni job registra un codice breve per il programma esatto che ha svolto il lavoro. Non il suo nome, non il suo numero di versione, ma il programma stesso, così due build che condividono lo stesso nome hanno comunque codici diversi. Se quel programma in seguito si rivela difettoso, il codice è il modo in cui ogni job che lo ha toccato viene trovato.

Quando qualcosa si rivela sbagliato, un codice identifica il programma.

Il programma stesso viene caricato fresco ogni volta dal proprio codice, e la ricevuta trasporta un codice per quel codice, così ciò che è stato eseguito oggi è dimostrabilmente ciò che è stato eseguito il mese scorso. Nulla si accumula nel mezzo di cui preoccuparsi in seguito.

Una nuova stanza Selvedge costa così poco che una per job è conveniente, quindi nulla deve essere condiviso. Se qualcosa ha davvero bisogno di essere trasportato, viene consegnato apposta e appare nella registrazione come qualcosa che è stato consegnato.

Ogni job riceve una nuova stanza. Nulla dell'ultima è dentro: nessuna nota avanzata, nessun lavoro a metà, nessun ricordo di chi ha chiesto. Sembra ovvio e di solito non è vero, perché mantenere una stanza in piedi costa meno che costruirne una nuova, quindi la maggior parte dei sistemi tiene la stanza e la riusa.

Una nuova stanza è pronta per il job successivo.

Non trovare nulla è una prova debole, perché dipende da quanto attentamente qualcuno ha cercato e da quanto tempo ha avuto prima della riunione. Un elenco di due permessi è una prova forte, perché non c'era altro da trovare.

Cambia ciò che accade quando fai una domanda in seguito. Invece di qualcuno che esamina cosa ha fatto il programma e riferisce di non aver trovato nulla di preoccupante, l'elenco dei permessi è lì, ed è breve.

La maggior parte dei registri ti dice cosa ha fatto un programma. Una ricevuta Selvedge dice anche cosa gli era permesso fare, che è una cosa diversa e più utile. Un programma a cui non è mai stato permesso di avvicinarsi ai tuoi file non può essere stato vicino ai tuoi file, e questo risulta nel registro che qualcuno stesse guardando o no in quel momento.