Selvedge i wykonanie z dowodami
Piaskownica to nie świadek
Uruchamianie niezaufanego kodu to jeden z tych pomysłów, które na spotkaniu brzmią dobrze, bo nikt jeszcze nie sporządził raportu o incydencie. Pozwól agentowi wywołać narzędzie. Pozwól wtyczce przekształcić plik. Pozwól modułowi partnera przetworzyć dane. Umieść to w piaskownicy. Cudownie. Kod nie może uciec. Wszyscy kiwają głowami. Potem audytor pyta, co kod faktycznie zrobił w piaskownicy, i nagle okazuje się, że izolacja to nie to samo co dowód.
Piaskownica odpowiada na jedno pytanie: czy obciążenie pozostało w granicach? To konieczne. To jednak nie wystarczy. Trudniejsze pytanie brzmi: co się wydarzyło podczas uruchomienia. Który artefakt został wykonany? Która polityka została zastosowana? O które możliwości zażądano? Które wywołania hosta zostały dozwolone lub odrzucone? Ile paliwa, pamięci i czasu zużyto? Co wyszło na zewnątrz? Czy uruchomienie można odtworzyć bez ufania oryginalnej maszynie? Jeśli odpowiedzi na te pytania żyją w logach i zaufaniu, system ma kostium, a nie ślad audytowy.
Selvedge istnieje właśnie dla tej luki. Strona nazywa to warstwą transkrypcji wykonania dla niezaufanego kodu: AION dowodzi rozumowania, Ledger rejestruje zdarzenia systemowe, a Selvedge przechwytuje wykonanie. Implementacja podąża za tym kształtem. Obszar roboczy to projekt Rust 2024 z pakietami dla rdzennych skrótów i limitów zasobów, silników wykonania, backendów Wasmtime i Kera, determinizmu, hostów WASI i Kera, polityki, weryfikacji AION, CLI, MCP, rejestru, runnera, demona, audytu oraz powierzchni SDK gościa. Publiczna obietnica jest celowo prosta: Selvedge wykonuje niezaufany kod w ramach deterministycznego wykonania, egzekwowania polityki i dyscypliny weryfikacji.
Użyteczne rozróżnienie jest małe i brutalne. Piaskownica mówi, że kod nie wyszedł. Selvedge ma mówić, co kod zrobił.
Transkrypcja to nie log
Logi są przydatne dla ludzi, którzy już debugują. Są mniej przydatne, gdy pytanie brzmi, czy uruchomienie można później zweryfikować przez kogoś, kto nie ufał oryginalnemu hostowi. Wiersz logu może zniknąć, zostać przestawiony, przefiltrowany, przycięty, przeformatowany lub wytłumaczony. Transkrypcja musi być częścią kontraktu wykonania.
Rdzeń Selvedge definiuje skróty SHA3-256, typy błędów, walidację ścieżek, tokeny uwierzytelniania i współdzielone limity zasobów. Plik README opisuje transkrypcje ze skrótami kodu bajtowego, ustawień, standardowego wyjścia, standardowego błędu, wyjścia, pamięci i zmiennych globalnych, plus zużycie paliwa i liczniki wywołań hosta. Strona opisuje, że każde wywołanie hosta jest hashowane do łańcucha SHA3-256, a wynik jest zawijany w kopertę dowodu w stylu AION z opieczętowaniem Ed25519. To jest różnica między systemem mówiącym „zaufaj mi” a systemem mówiącym „oto pakiet”.
W tym projekcie jest zdrowa dawka paranoi. Skrót artefaktu nazywa kod. Skrót ustawień nazywa profil deterministyczny. Transkrypcja nazywa to, co przekroczyło granicę hosta. Podpisana koperta sprawia, że manipulacja jest widoczna. Weryfikacja offline oznacza, że oryginalne środowisko uruchomieniowe nie jest jedynym świadkiem. To jest część, którą wiele historii o piaskownicach pomija, bo jest mniej zabawna niż pokazanie wtyczki działającej w demo. Dema rzadko pytają, kto edytował log audytu. Audytorzy pytają.
Domyślna odmowa też potrzebuje pokwitowań
Defaultdeny to dobra postawa i fatalny slogan, jeśli kończy się na slajdzie. Polityka Selvedge nadaje temu sloganowi realną moc. Pakiet polityki definiuje możliwości WASM, takie jak clock, random, filesystem, network, environment, stdio, process i custom. Niesie limity zasobów dla pamięci, rozmiaru pliku, liczby instrukcji i czasu. Weryfikuje niezmienniki, odrzuca zduplikowane możliwości, zapewnia ustrukturyzowane błędy i mapuje niepowodzenia na wspólny słownik błędów Dweve. Runner stosuje następnie limity zasobów do konfiguracji wykonania, zanim rozpocznie się obciążenie.
To oznacza, że polityka nie jest kwestionariuszem wypełnianym po uruchomieniu. Jest danym wejściowym do wykonania. Jeśli obciążenie prosi o dostęp do czasu, losowości, systemu plików, sieci, środowiska lub procesów, to żądanie musi przejść przez politykę. Jeśli zużyje zbyt dużo paliwa, pamięci lub czasu rzeczywistego, uruchomienie kończy się jako kontrolowane niepowodzenie. Jeśli polityka jest niespójna, powinna zawieść, zanim artefakt zacznie robić cokolwiek interesującego. Bardzo nudne. Bardzo przydatne. Nuda to sposób, w jaki chronimy weekendy.
Najważniejsze jest to, że decyzje polityki nie są oddzielone od dowodów. Piaskownica może zezwalać lub odmawiać szerokiej kategorii, a mimo to pozostawiać cienki ślad audytowy. Selvedge jest zbudowany wokół idei, że każda decyzja bramy i odczyt zasobów należy do historii uruchomienia. To czyni go przydatnym dla narzędzi agentów, wykonywania wtyczek stron trzecich, wnioskowania Kera, obciążeń regulowanych i kodu partnerów. Praca może być niezaufana. Dowody nie powinny być.
Determinizm to miejsce, w którym host przestaje improwizować
Odtwarzalność łatwo obiecać, a trudno dotrzymać. Host ma zegar. Host ma losowość. Zachowanie NaN w arytmetyce zmiennoprzecinkowej może być problematyczne. SIMD może różnić się między architekturami. Systemy plików, zmienne środowiskowe i stan procesów to doskonałe sposoby na przemycenie niedeterminizmu w miejsca, w których nikt się go nie spodziewa. Jeśli chcesz odtwarzalności, musisz usunąć lub kontrolować te źródła, zanim staną się wymówkami.
Selvedge czyni deterministyczne wykonanie domyślnym. README opisuje wirtualny zegar ustawiony na epokę 2024-01-01, losowość ChaCha20 z ziarnem, pomiar paliwa, generowanie zapisu i kanonizację NaN. Mówi również, że wykrywanie SIMD jest najszybsze, ale działa tylko w obrębie tej samej architektury, podczas gdy wyłączenie SIMD jest w pełni przenośną trasą międzyplatformową. Ta ostatnia część ma znaczenie, ponieważ determinizm nie jest modlitwą. To decyzja konfiguracyjna i architektoniczna, a czasami uczciwym kompromisem jest szybkość za przenośność.
Runner domyślnie używa backendu Wasmtime z włączonym deterministycznym wykonaniem. Kera to drugi backend, przeznaczony dla obciążeń Graph IR i binarnych sieci neuronowych. Ten podział jest sensowny. WASM to ogólna ścieżka dla niezaufanych komponentów. Kera to ścieżka dla grafów AI. Oba wymagają tej samej dyscypliny wokół: polityka przed wykonaniem, ustawienia deterministyczne, zapis po wykonaniu i dowód wokół wyniku.
Dlaczego agenci czynią to mniej opcjonalnym
Systemy agentowe sprawiają, że wykonywanie niezaufanego kodu znów jest modne, a to zdanie powinno sprawić, że każda osoba zajmująca się bezpieczeństwem usiądzie nieco prostiej. Model prosi o wywołanie narzędzia. Wtyczka wykonuje transformację. Wygenerowany skrypt pomocniczy dotyka danych. Narzędzie partnera przychodzi przez MCP. Model nie napisał tego narzędzia, narzędzie może nie być sprawdzone z taką samą starannością jak kod produktu, a użytkownik nadal oczekuje, że system wyjaśni, co się stało. Powodzenia z tym, jeśli jedyną odpowiedzią jest katalog logów i dobre chęci.
Selvedge ma powierzchnię serwera MCP dla narzędzi agentowych, CLI dla przepływów pracy typu build, verify, run i replay, demona do długotrwałego wykonywania, pulę runnerów i podgrzewanie pamięci podręcznej, skrzynie rejestru klienta i serwera oraz SDK dla gości. Nie chodzi o to, że każda powierzchnia jest taka sama. Chodzi o to, że kształt dowodów powinien być porównywalny. Niezależnie od tego, czy obciążenie wchodzi jako komponent WASM, graf Kera, narzędzie agentowe czy zadanie usługowe, uruchomienie powinno zakończyć się czymś, co można zweryfikować.
Wydajność to kompromis, nie zaklęcie
Strona Selvedge zawiera liczby z benchmarków z repozytorium BENCHMARKS.md: zimny start to główna wygrana, gorąca ścieżka jest bardziej zniuansowana, Kera JIT ma dobrą historię z ciepłym grafem, a zwykły Wasmtime nadal utrzymuje niektóre gorące ścieżki z powtarzanymi wywołaniami. To właściwy sposób, aby o tym mówić. Praca wykonawcza jest pełna kompromisów. Jeśli model komponentów produkuje transkrypt i kopertę dowodową, ma inne koszty niż minimalna ścieżka. Jeśli zimny start jest twoim problemem, ta ścieżka dowodowa może pomóc. Jeśli obciążenie to ciasne, powtarzane wywołanie bez potrzeby narzutu transkryptu, odpowiedź może być inna. Bardzo niewygodna, ta rzeczywistość. Odmawia bycia broszurą.
Artykułowa wersja historii wydajności jest więc prosta: wybierz środowisko wykonawcze dla obciążenia. Nie używaj koperty dowodowej jako magicznej mikstury przyspieszającej. Użyj jej, gdy koszt braku odtwarzalnych dowodów jest wyższy niż narzut. W przypadku narzędzi agentowych, regulowanego przetwarzania danych, wtyczek stron trzecich i wykonywania, o które później zapyta człowiek, ten koszt jest często realny.
Co sprawdzić przed użyciem
Po pierwsze, zdecyduj, czy potrzebujesz izolacji, dowodów, czy obu. Jeśli obciążenie jest zaufane i wewnętrzne, Selvedge może być większą maszynerią, niż potrzeba. Jeśli obciążenie jest niezaufane, dostarczone przez partnera, wyzwalane przez model lub przeznaczone do audytu, transkrypt zaczyna zasługiwać na swoje miejsce.
Po drugie, przejrzyj politykę. Które możliwości są dozwolone? Które są zabronione? Jakie są limity paliwa, pamięci i czasu? Czy tryb deterministyczny jest wymagany, czy tylko dozwolony? Czy dostęp do systemu plików i sieci jest wystarczająco wąski? Czy polityka jest wersjonowana razem z artefaktem? Jeśli polityka żyje w wiki, a wykonywanie gdzie indziej, projekt już dryfuje.
Po trzecie, przetestuj replay jako zachowanie produktu. Nie czekaj na audyt, aby odkryć, czy koperta weryfikuje się offline. Uruchom ten sam artefakt, tę samą politykę i te same dane wejściowe dwa razy. Porównaj transkrypty. Spróbuj zabronionych możliwości. Zepsuj sumę kontrolną. Zmień ziarno. Wyłącz SIMD, jeśli tożsamość międzyplatformowa ma znaczenie. Irytujące testy są sednem.
Lekcja
Selvedge to nie ładniejszy piaskownica. To warstwa dowodów wykonania. Uruchamia artefakty WASM i Kera, zaczyna od domyślnej odmowy, ogranicza zasoby, kontroluje deterministyczne dane wejściowe, haszuje wykonanie do transkryptów i zawija wyniki w kopertę dowodową, którą można sprawdzić później. To inna obietnica niż „kod został w swoim kącie”.
W miarę jak systemy AI wywołują więcej narzędzi, uruchamiają więcej wygenerowanych pomocników i przyjmują więcej komponentów zewnętrznych, to rozróżnienie przestaje być akademickie. Pytanie nie będzie dotyczyć tylko tego, czy obciążenie wymknęło się spod kontroli. Pytanie będzie dotyczyć tego, co ono zrobiło, na jakich zasadach, z jakimi danymi wejściowymi, jakie wyniki wyprodukowało i czy ktoś inny może odtworzyć to twierdzenie.
Piaskownica to ściana. Selvedge stara się być również świadkiem.