bezpieczenstwo-ai
Jak twoje AI uzywa klucza Stripe, nigdy go nie widzac
Wzorzec wstrzykiwania sekretow w czasie wykonania, dzieki ktoremu lodos obciaza klienta twoim kluczem Stripe, a klucz nigdy nie trafia do kontekstu modelu AI.
Oto niewygodny kompromis, na ktory godzi sie kazdy produkt typu "agent AI": zeby wykonac uzyteczna prace, agent potrzebuje twoich danych uwierzytelniajacych. Zeby obciazyc klienta, potrzebuje twojego klucza Stripe. Zeby wdrozyc, potrzebuje twojego tokena chmurowego. Zwykla odpowiedz to przekazanie tych sekretow modelowi i nadzieja, ze nic nie wycieknie.
My nie chcielismy liczyc na nadzieje. Dlatego lodos jest zbudowany tak, ze wyciek jest strukturalnie niemozliwy, a build sie nie powiedzie, jesli ktokolwiek kiedykolwiek to zlamie.
Problem z przekazaniem modelowi sekretu
Gdy tylko sekret w postaci jawnej trafi do kontekstu modelu jezykowego, tracisz nad nim kontrole. Moze sie pojawic w transkrypcji, w wywolaniu narzedzia, w logu, w podsumowaniu, ktore model napisze pozniej, albo w odpowiedzi na sprytnie sformulowane pytanie uzupelniajace. Prompt injection, czyli zlosliwa instrukcja ukryta na stronie internetowej, w mailu albo w dokumencie, ktory agent czyta, zamienia to utajone ryzyko w aktywna sciezke eksfiltracji.
Uczciwy wniosek jest taki, ze model w ogole nie powinien widziec sekretu. Wszystko inne to lagodzenie skutkow wady projektowej.
Odwolanie, wstrzykniecie, audyt
lodos obsluguje kazde dane uwierzytelniajace w trzech etapach.
1. Odwolanie
Twoje AI nigdy nie pracuje z wartoscia. Pracuje z symbolem zastepczym:
{{secrets.stripe.sk_live}}
To odwolanie to wszystko, co model kiedykolwiek widzi: w czacie, w workflow, w zadaniu. Moze rozumowac o uzyciu klucza Stripe, nigdy go nie trzymajac.
2. Wstrzykniecie
Gdy zadanie naprawde potrzebuje danych uwierzytelniajacych, lodos odszyfrowuje je lokalnie i przekazuje do izolowanego podprocesu jako zmienna srodowiskowa, poza zasiegiem modelu, i znika w chwili, gdy zadanie sie konczy.
# The agent asked to run this; lodos resolved the reference and
# injected the real value into the subprocess environment only.
STRIPE_API_KEY={{secrets.stripe.sk_live}} ./charge-customer.sh
Model widzi linie po lewej. Podproces dostaje wartosc po prawej. Te dwie rzeczy nigdy nie spotykaja sie w transkrypcji.
3. Audyt
Kazdy dostep dopisuje sie do lancucha HMAC odpornego na manipulacje. Log zapisuje to, ze sekret zostal uzyty, a nigdy jaka wartosc. Sciezki pol sa nieprzejrzyste, a kazda proba zmiany historii lamie lancuch.
Dlaczego nie ufamy po prostu polityce
Latwo byloby napisac "AI jest skonfigurowane tak, by nie ujawniac sekretow" i przejsc dalej. Uwazamy, ze bez egzekwowania to nic nie warte, dlatego wbudowalismy te gwarancje w proces wydawniczy.
Skan niezmiennikow w czasie buildu uruchamia sie przy kazdym wydaniu i przerywa build, jesli ktorykolwiek z ponizszych warunkow zostanie naruszony:
- Nigdzie nie istnieje narzedzie, ktore zwraca wartosc sekretu w postaci jawnej.
- Nie ma surowego dostawcy API modelu, jest tylko wbudowany Claude Code z twoim wlasnym logowaniem.
- Nie ma
eval,Function,vmanichild_processna zadnej sciezce renderowania. - Nieznane narzedzia zawodza bezpiecznie (fail closed), nigdy nie sa po cichu dopuszczane.
- Agent dziala z jawnie zablokowanym
bash. - Zadne pojedyncze uprawnienie nie moze domknac "smiertelnej triady": dane prywatne plus tresc niezaufana plus eksfiltracja.
- Workflow sa wylacznie deklaratywne, nie ma sciezki kodu do wykonania.
Jesli przyszly commit doda narzedzie, ktore przekaze modelowi sekret, wydanie po prostu nie zostanie opublikowane.
Czego odmowilismy i co dostarczylismy zamiast tego
Ten mur wymusil lepsze projekty, a nie mniej funkcji:
| Czego odmowilismy | Co dostarczylismy zamiast |
|---|---|
| Surowego API modelu wywolywanego bezposrednio przez AI | Wbudowany Claude Code z twoim wlasnym logowaniem |
| Pozwolenia AI na uruchamianie polecen hosta (bash) | Wstrzykiwanie do podprocesu w czasie wykonania, slepe na sekrety |
eval() w workflow |
Deklaratywny YAML, brak sciezki kodu do wykonania |
| Prezentacji generowanych obrazem (egress do chmury) | Prezentacje tekstowe offline, zero sieci |
Odmowa wyciekow nie odebrala mozliwosci. Ja ukierunkowala.
Wniosek
Mozesz powierzyc agentowi AI prawdziwa prace wymagajaca danych uwierzytelniajacych, nie dajac mu tych danych. Sekret pozostaje zaszyfrowany na twoim komputerze, trafia do podprocesu tylko w chwili uzycia i nigdy nie przekracza granicy kontekstu modelu.
Na tym polega cala idea lodos: twoje AI widzi twoja prace, a nie twoje sekrety. Przeczytaj pelna architekture bezpieczenstwa albo pobierz lodos i daj swojemu agentowi zadanie zamiast klucza.