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.
Kompiluj obciążenia BNN Kera dla środowiska uruchomieniowego Selvedge.
Prowieniencja zdarzeń systemowych oparta na łańcuchu skrótów.
Certyfikaty dowodu rozumowania, a nie transkrypty wykonania.
Selvedge publikuje w czwartej rundzie programu wydań podstawowych, po Knot i Ledger. Gdy to nastąpi, uruchom moduł WASM w piaskownicy i samodzielnie odtwórz kopertę dowodu.
Powierzchnia wykonywania narzędzi Model Context Protocol.
Zapieczętowany Ed25519, transkrypt SHA3-256, weryfikacja offline.
Binarne sieci neuronowe IR wykresu, JIT i interpreter.
Środowisko uruchomieniowe komponentów, host WASI 0.2 Preview 2.
Selvedge uruchamia niezaufany kod w piaskownicy z ograniczonymi możliwościami i zapisuje wykonanie w zapieczętowanym transkrypcie. Ograniczenie kontroluje, do czego kod może uzyskać dostęp; transkrypt pokazuje, co faktycznie się wydarzyło, i można go odtworzyć w celu przeglądu.
Serwer Model Context Protocol dla narzędzi agenta.
Długotrwałe środowisko uruchomieniowe agenta z kolejką.
buduj, weryfikuj, uruchamiaj, odtwarzaj. Przyjazny dla CI.
Narzędzia agenta, wtyczki innych firm, wnioskowanie BNN Kera i dane regulowane wchodzą przez tę samą kontrolowaną granicę. Każde środowisko uruchomieniowe tworzy tę samą zapieczętowaną kopertę dowodu, więc zmiany wdrożeniowe nie zmieniają historii audytu.
Podpis Ed25519 5-15 us, weryfikacja 15-30 us.
Uwzględniono uruchomienie procesu, 8-9x szybciej.
Moduł obliczeniowy, vs 1187-1494 us w wersji podstawowej.
Selvedge Wasmtime startuje 62 do 243 razy szybciej niż zwykły Wasmtime na poziomie API. Uczciwym kompromisem jest ścieżka gorąca: zwykły utrzymuje 22 ns powtarzanego wywołania, a model komponentów, który generuje transkrypt, działa tam wolniej. Kera JIT jest 2x szybszy na ciepło dla pracy z grafem. Liczby pochodzą z BENCHMARKS.md w repozytorium.
Wybierz środowisko wykonawcze dla obciążenia
Każda decyzja bramki jest rejestrowana i hashowana.
max_execution_time_ns, oddzielnie od paliwa.
max_memory_bytes, domyślnie 256 MiB, maksymalnie 4 GiB.
max_instructions, wyczerpanie czysto zatrzymuje obciążenie.
Zegar, losowość, system plików, sieć, środowisko, stdio, proces, niestandardowe. Domyślnie odmowa.
Domyślnie odmawiający zestaw możliwości bramkuje każde wywołanie hosta w ośmiu domenach WASI. Limity zasobów na pamięć, paliwo i czas ograniczają niekontrolowane zachowanie. Każda decyzja bramki i odczyt zasobów jest w transkrypcie.
Potrzebujesz kryptograficznego dowodu tego, co zrobiło obciążenie, a nie zaufania do środowiska wykonawczego.
Zezwól na system plików, odmów sieci, ale bez rejestru na wywołanie w śladzie audytowym.
FP i czas rzeczywisty przeciekają. Odtworzenie daje w przybliżeniu ten sam wynik, nie dokładnie ten sam.
Piaskownica zatrzymuje ucieczkę. Nie dowodzi, że obciążenie zachowało się poprawnie w środku.
Konwencjonalne piaskownice zatrzymują zły kod przed ucieczką. Nie tworzą rejestru tego, co kod faktycznie zrobił w środku. Gdy audytor pyta, odpowiedzią jest twierdzenie, a nie dowód.
Selvedge rejestruje dokładnie to, co zostało wykonane, od wejścia do wyjścia, każde wywołanie hosta zapieczętowane.
Rejestr zapisuje, co się stało w systemie. Selvedge zapisuje, jaki kod działał.
AION wydaje certyfikaty dla kroków solvera, a nie dla przebiegów wykonania.
Czym Selvedge różni się od AION i Ledger
Te same dane wejściowe plus ta sama koperta oznaczają zawsze ten sam wynik.
Stała epoka i ziarno PRNG ChaCha20 zastępują czas hosta i entropię.
Obliczenia wewnętrzne, przechowywanie i akumulacja wykorzystują reprezentacje binarne, całkowite, stałoprzecinkowe lub adaptacyjne całkowite/stałoprzecinkowe. Liczby zmiennoprzecinkowe są akceptowane tylko na zadeklarowanej granicy zewnętrznej i są jawnie konwertowane przed rozpoczęciem pracy wewnętrznej; nie ma wewnętrznego fallbacku zmiennoprzecinkowego. Wirtualny zegar pozostaje stały, więc odtworzenie daje te same bajty.
Brak wewnętrznych liczb zmiennoprzecinkowych, brak zegarów
Weryfikator odtwarza offline, używając tylko bajtów modułu i koperty.
Podpis ed25519 nad korzeniem koperty. Nie proza.
Każde wywołanie hosta jest hashowane do łańcucha. Edycje przerywają łańcuch.
Ten sam przepływ przy każdym wykonaniu. Odtworzenie jest mechaniczne.
Dowód AION wydany, podpisany ed25519, koperta gotowa do wysyłki.
Każde wywołanie hosta i wynik jest hashowane do łańcucha SHA3-256.
Wasmtime lub Kera wykonuje kod w piaskownicy z domyślną odmową.
Moduł załadowany, uprawnienia ograniczone, limity zasobów zastosowane.
Selvedge uruchamia kod WASM lub Kera w piaskownicy z domyślną odmową, hashuje każde wywołanie hosta do łańcucha transkryptu SHA3-256 i opakowuje wynik w podpisaną kopertę dowodu AION. Koperta odtwarza się bez oryginalnej piaskownicy.
Selvedge to deterministyczna piaskownica WebAssembly dla niezaufanego kodu. Jej manifest uprawnień i zapieczętowany transkrypt działają na sprzęcie, który kontrolujesz, więc druga strona może odtworzyć zapis na własnej maszynie, a spór staje się wyszukiwaniem, a nie prośbą o zapewnienie.
Selvedge umieszcza program, którego nie wybrałeś, w pomieszczeniu bez internetu, bez dostępu do twoich plików i bez możliwości poznania twojego komputera. Pozostawia pokwitowanie mówiące, co wróciło i co program mógł zrobić, abyś mógł sprawdzić późniejsze twierdzenia zamiast polegać na czyimś słowie.
Selvedge uruchamia kod, którego nie napisałeś, w hoście komponentów WebAssembly bez sieci, systemu plików, środowiska ani ruchomego zegara. Każde zakończone uruchomienie zwraca zapis, który inna strona może odtworzyć, oraz raport wykonania mówiący, co kod mógł zrobić. Opublikowane na licencji Apache 2.0.
Uruchamiaj niezaufany kod na sprzęcie, który kontrolujesz.
Deterministyczna piaskownica WebAssembly.
Publikacja jest planowana w dwutygodniowych rundach. Repozytorium i jego dokumentacja zostaną opublikowane razem.
Wykonuje jedną małą czynność, tutaj, i nigdzie indziej.
Zapieczętowane, więc nic nie może zostać zmienione
Wykonanie zakończone pomyślnie w 18,4 ms
Pokój, paragon i lista to cała obietnica.
Kod jest przenoszony z każdym uruchomieniem.
Tutaj pojawia się jako lista. Każde zadanie, które używało wadliwego programu, nazywa go kodem, datą i krótką listą uprawnień, więc możesz zobaczyć, co zostało dotknięte i jak daleko mogło się tognąć. Jeśli ludzie, którzy go stworzyli, nie są już zaufani, wycofanie następuje w ustalonym interwale odświeżania, a nie wtedy, gdy wygaśnie certyfikat. Oprogramowanie jest publikowane na licencji Apache 2.0.
Zwykła wersja tej rozmowy to szacunek. Ktoś ustala, która wersja prawdopodobnie działała, w które dni, dla których osób, a odpowiedź przychodzi jako zakres z zastrzeżeniem. To pozostawia fakty potrzebne do określenia zakresu poprawki jako rekonstrukcję, a nie zapis. Poprawka zaczyna się od listy, którą można sprawdzić.
Każde zadanie zapisuje krótki kod dokładnego programu, który wykonał pracę. Nie jego nazwę, nie numer wersji, sam program, więc dwie kompilacje o tej samej nazwie mają różne kody. Jeśli ten program później okaże się wadliwy, kod jest tym, jak każde zadanie, którego dotknął, zostanie znalezione.
Kiedy coś okaże się złe, jeden kod nazywa program.
Zaczyna się od tego samego czystego kształtu.
Sam program jest ładowany od nowa za każdym razem z własnego kodu, a paragon niesie kod tego kodu, więc to, co działało dziś, jest w sposób możliwy do udowodnienia tym, co działało w zeszłym miesiącu. Nic nie gromadzi się między nimi, o co ktoś musiałby się martwić później.
Nowy pokój Selvedge kosztuje tak mało, że jeden na zadanie jest przystępny, więc nic nie musi być współdzielone. Jeśli coś naprawdę musi być przeniesione, jest przekazywane celowo i pojawia się w zapisie jako coś, co zostało przekazane.
Każde zadanie dostaje nowy pokój. Nic z poprzedniego nie jest w nim: żadnych pozostawionych notatek, żadnej niedokończonej pracy, żadnej pamięci o tym, kto prosił. To brzmi oczywiste i zwykle nie jest prawdą, ponieważ utrzymanie pokoju stojącego jest tańsze niż budowanie nowego, więc większość systemów trzyma pokój i używa go ponownie.
Nowy pokój jest gotowy na następne zadanie.
Znalezienie niczego to słaby dowód, ponieważ zależy od tego, jak dokładnie ktoś szukał i ile miał czasu przed spotkaniem. Lista dwóch uprawnień to mocny dowód, ponieważ nie było tam nic innego do znalezienia.
To zmienia to, co się dzieje, gdy później zadajesz pytanie. Zamiast kogoś, kto przegląda, co program zrobił, i raportuje, że nie znalazł nic niepokojącego, lista uprawnień jest tuż obok i jest krótka.
Większość rejestrów mówi, co zrobił program. Paragon Selvedge mówi również, do czego miał pozwolenie, co jest inną i bardziej przydatną rzeczą. Program, który nigdy nie miał dostępu do Twoich plików, nie mógł mieć do nich dostępu, i to jest w rejestrze, niezależnie od tego, czy ktoś akurat patrzył, czy nie.
Kod to nie kopia programu; nazywa dokładnie to, co zostało uruchomione.
Zamyka to też pewną sztuczkę. Program, który może odczytać zegar, może zachowywać się inaczej przed terminem i inaczej po nim, i nikt nigdy nie zauważy różnicy. Zegar, który się nie porusza, nie może być obserwowany, więc nie ma nic, co mogłoby zachowywać się inaczej.