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-Workloads für die Selvedge-Laufzeit kompilieren.
Hash-verkettete Ereignis-Herkunft für Systemereignisse.
Beweis-Zertifikate für Schlussfolgerungen, keine Ausführungsprotokolle.
Selvedge erscheint in der vierten Runde des Foundation-Release-Programms, nach Knot und Ledger. Danach können Sie ein WASM-Modul in einer Sandbox testen und den Beweis-Umschlag selbst abspielen.
Oberfläche für die Ausführung von Model Context Protocol-Tools.
Ed25519-versiegelt, SHA3-256-Transkript, Offline-Verifizierung.
Binäre neuronale Netze als Graph-IR, JIT und Interpreter.
Komponentenmodell-Laufzeit, WASI 0.2 Preview 2-Host.
Selvedge führt nicht vertrauenswürdigen Code in einer Sandbox mit begrenzten Fähigkeiten aus und zeichnet die Ausführung in einem versiegelten Transkript auf. Die Begrenzung beschränkt, was der Code berühren kann; das Transkript zeigt, was tatsächlich passiert ist, und kann zur Überprüfung erneut abgespielt werden.
Model Context Protocol-Server für Agent-Tools.
Langlaufende Agent-Laufzeit mit einer Warteschlange.
build, verify, run, replay. CI-freundlich.
Als Crate in Ihre Anwendung eingebunden.
Agent-Tools, Plugins von Drittanbietern, Kera-BNN-Inferenz und regulierte Datenarbeit gelangen alle über dieselbe kontrollierte Grenze hinein. Jede Laufzeit erzeugt denselben versiegelten Beweis-Umschlag, sodass Änderungen bei der Bereitstellung die Prüfungsgeschichte nicht verändern.
Ed25519-Signatur 5-15 us, Verifizierung 15-30 us.
Computermodul, vs. 1187-1494 us Vanilla.
Selvedge Wasmtime startet auf API-Ebene 62 bis 243x schneller als Vanilla Wasmtime. Der ehrliche Kompromiss ist der heiße Pfad: Vanilla hält den 22-ns-Wiederholungsaufruf, und das Komponentenmodell, das das Transkript erzeugt, läuft dort langsamer. Kera JIT ist bei Graph-Arbeit warm 2x schneller. Die Zahlen stammen aus der BENCHMARKS.md des Repositorys.
Wählen Sie die Laufzeit für die Arbeitslast
Jede Gate-Entscheidung wird aufgezeichnet und gehasht.
max_execution_time_ns, getrennt von Fuel.
max_memory_bytes, Standard 256 MiB, Obergrenze 4 GiB.
max_instructions, Erschöpfung stoppt die Arbeitslast sauber.
Uhr, Zufall, Dateisystem, Netzwerk, Umgebung, Stdio, Prozess, benutzerdefiniert. Standardmäßig verweigert.
Ein Standard-Deny-Fähigkeitssatz sperrt jeden Host-Aufruf über acht WASI-Domänen. Ressourcenlimits für Speicher, Fuel und Zeit begrenzen außer Kontrolle geratenes Verhalten. Jede Gate-Entscheidung und jeder Ressourcen-Lesezugriff ist im Transkript enthalten.
Sie benötigen kryptografische Beweise dafür, was die Arbeitslast getan hat, nicht Vertrauen in die Laufzeit.
Vertrauen Sie der Laufzeit, nicht der Arbeitslast
Dateisystem erlauben, Netzwerk verweigern, aber keine Aufzeichnung pro Aufruf im Audit-Trail.
FP und Wall-Clock lecken durch. Replay erzeugt ungefähr dieselbe Ausgabe, nicht exakt.
Eine Sandbox stoppt Ausbrüche. Sie beweist nicht, dass sich die Arbeitslast im Inneren korrekt verhalten hat.
Konventionelle Sandboxes hindern schlechten Code am Ausbrechen. Sie erzeugen keine Aufzeichnung darüber, was der Code im Inneren tatsächlich getan hat. Wenn ein Prüfer fragt, ist die Antwort eine Behauptung, kein Beweis.
Selvedge erfasst genau, was ausgeführt wurde, von Eingabe bis Ausgabe, jede Host-Aufruf versiegelt.
Ledger zeichnet auf, was in einem System passiert ist. Selvedge zeichnet auf, welcher Code lief.
AION stellt Zertifikate über Solver-Schritte aus, nicht über Ausführungsabläufe.
Wie sich Selvedge von AION und Ledger unterscheidet
Gleiche Eingaben plus gleiche Hülle ergeben immer dasselbe Ergebnis.
Eine feste Epoche und ein geseedeter ChaCha20-PRNG ersetzen Host-Zeit und Entropie.
Interne Berechnung, Speicherung und Akkumulation verwenden binäre, ganzzahlige, Festkomma- oder adaptive ganzzahlige/Festkomma-Darstellungen. Gleitkommazahlen werden nur an einer deklarierten externen Grenze akzeptiert und vor Beginn der internen Arbeit explizit konvertiert; es gibt keinen internen Gleitkomma-Fallback. Die virtuelle Uhr bleibt fest, sodass die Wiedergabe dieselben Bytes erzeugt.
Keine internen Gleitkommazahlen, keine Uhren
Standardmäßig deterministische Ausführung
Verifizierer spielt offline mit Modul-Bytes und Hülle allein ab.
ed25519-Signatur über die Hüllenwurzel. Kein Prosa.
Jeder Host-Aufruf wird in die Kette gehasht. Änderungen brechen die Kette.
Warum sich das Transkript von einem Log unterscheidet
Gleicher Ablauf bei jeder Ausführung. Wiedergabe ist mechanisch.
AION-Beweis ausgestellt, ed25519-signiert, Hülle versandbereit.
Jeder Host-Aufruf und jedes Ergebnis wird in eine SHA3-256-Kette gehasht.
Wasmtime oder Kera wird in der Sandbox mit Standard-Verweigerung ausgeführt.
Modul geladen, Capabilities gepinnt, Ressourcengrenzen angewendet.
Selvedge führt WASM- oder Kera-Code in einer Sandbox mit Standard-Verweigerung aus, hasht jeden Host-Aufruf in eine SHA3-256-Transkriptkette und verpackt das Ergebnis in eine signierte AION-Beweishülle. Die Hülle spielt ohne die ursprüngliche Sandbox ab.
Selvedge ist eine deterministische WebAssembly-Sandbox für nicht vertrauenswürdigen Code. Sein Berechtigungsmanifest und sein versiegeltes Transkript laufen auf Hardware, die Sie kontrollieren, sodass eine Gegenpartei den Datensatz auf ihrem eigenen Rechner abspielen kann und ein Streit zu einer Nachschlageoperation statt einer Zusicherungsanfrage wird.
Code in Grenzen halten, die Aufzeichnung bewahren
Selvedge bringt ein Programm, das du nicht gewählt hast, in einen Raum ohne Internet, ohne Zugang zu deinen Dateien und ohne etwas über deinen Rechner zu lernen. Es hinterlässt eine Quittung, die sagt, was zurückkam und was das Programm tun durfte, sodass du eine spätere Behauptung prüfen kannst, statt jemandem aufs Wort zu glauben.
Selvedge führt Code, den du nicht geschrieben hast, in einem WebAssembly-Komponenten-Host ohne Netzwerk, Dateisystem, Umgebung oder bewegliche Uhr aus. Jeder abgeschlossene Lauf gibt einen Datensatz zurück, den eine andere Partei erneut abspielen kann, sowie einen Ausführungsbericht, der angibt, was der Code tun durfte. Veröffentlicht unter Apache 2.0.
Führe Code aus, den du nicht geschrieben hast.
Führe nicht vertrauenswürdigen Code auf Hardware aus, die du kontrollierst.
Eine deterministische WebAssembly-Sandbox.
Die Veröffentlichung ist in vierzehntägigen Runden geplant. Das Repository und seine Dokumentation gehen gemeinsam live.
Es erledigt hier eine kleine Aufgabe, und sonst nirgendwo.
Was es getan hat, schriftlich festgehalten
Versiegelt, sodass nichts geändert werden kann
Ausführung erfolgreich abgeschlossen in 18,4 ms
Der Raum, die Quittung und die Liste sind das gesamte Versprechen.
Der Code wird bei jedem Lauf mitgeführt.
Hier kommt es als Liste an. Jeder Job, der das fehlerhafte Programm verwendet hat, nennt es mit Code, Datum und einer kurzen Berechtigungsliste, sodass Sie sehen können, was betroffen war und wie weit es hätte gehen können. Wenn die Personen, die es erstellt haben, nicht mehr vertraut wird, tritt der Entzug in einem festgelegten Aktualisierungsintervall in Kraft, nicht erst, wenn ein Zertifikat abläuft. Die Software wird unter der Apache-2.0-Lizenz veröffentlicht.
Die übliche Version dieses Gesprächs ist eine Schätzung. Jemand arbeitet aus, welche Version wahrscheinlich lief, an welchen Tagen, für welche Personen, und die Antwort kommt als Bereich mit einem Vorbehalt. Das lässt die Fakten, die zur Eingrenzung einer Korrektur nötig sind, als Rekonstruktion statt als Aufzeichnung zurück. Die Korrektur beginnt mit einer Liste, die geprüft werden kann.
Jeder Job zeichnet einen kurzen Code für das genaue Programm auf, das die Arbeit erledigt hat. Nicht seinen Namen, nicht seine Versionsnummer, das Programm selbst, sodass zwei Builds mit demselben Namen dennoch unterschiedliche Codes haben. Wenn sich später herausstellt, dass dieses Programm fehlerhaft ist, ist der Code der Weg, wie jeder Job, den es berührt hat, gefunden wird.
Wenn etwas schiefgeht, benennt ein Code das Programm.
Das Programm selbst wird jedes Mal frisch aus seinem eigenen Code geladen, und die Quittung trägt einen Code für diesen Code, sodass das, was heute lief, nachweislich das ist, was letzten Monat lief. Dazwischen sammelt sich nichts an, um das sich später jemand sorgen müsste.
Ein neuer Selvedge-Raum kostet so wenig, dass einer pro Job erschwinglich ist, also muss nichts geteilt werden. Wenn etwas wirklich übertragen werden muss, wird es absichtlich übergeben und erscheint in der Aufzeichnung als etwas, das übergeben wurde.
Jeder Job bekommt einen neuen Raum. Nichts vom letzten ist darin: keine übrig gebliebenen Notizen, keine halb fertige Arbeit, keine Erinnerung daran, wer es angefordert hat. Das klingt offensichtlich und ist es meistens nicht, weil das Stehenlassen eines Raums billiger ist als ein neuer, also behalten die meisten Systeme den Raum und nutzen ihn wieder.
Ein neuer Raum ist bereit für den nächsten Job.
Ausgabe, Ergebnis und Ressourcennutzung.
Nichts zu finden ist schwache Evidenz, weil es davon abhängt, wie gründlich jemand gesucht hat und wie viel Zeit er vor dem Meeting hatte. Eine Liste mit zwei Berechtigungen ist starke Evidenz, weil es nichts anderes zu finden gab.