безопасность-ии

Как твой ИИ использует ключ Stripe, ни разу его не увидев

Паттерн runtime-инъекции секретов, который позволяет lodos списать деньги с клиента твоим ключом Stripe так, что ключ ни разу не попадает в контекст ИИ-модели.

3 мин чтения

Вот неприятный компромисс, на который идёт каждый продукт с «ИИ-агентом»: чтобы делать полезную работу, агенту нужны твои учётные данные. Чтобы списать деньги с клиента, ему нужен твой ключ Stripe. Чтобы выкатить деплой, ему нужен твой облачный токен. Обычный ответ на это: отдать эти секреты модели и надеяться, что ничего не утечёт.

Мы не хотели надеяться. Поэтому lodos устроен так, что утечка структурно невозможна, и сборка просто падает, если кто-то когда-нибудь это нарушит.

В чём проблема, когда модели дают секрет

Как только секрет в открытом виде попадает в контекст языковой модели, ты теряешь над ним контроль. Он может всплыть в стенограмме, в вызове инструмента, в логе, в кратком пересказе, который модель напишет позже, или в ответе на хитро сформулированный уточняющий вопрос. Prompt-инъекция, то есть вредоносная инструкция, спрятанная в веб-странице, письме или документе, который читает агент, превращает этот скрытый риск в активный канал утечки.

Честный вывод такой: модель вообще не должна видеть секрет. Всё остальное это лишь латание дыры поверх изъяна в проекте.

Ссылка, инъекция, аудит

lodos прогоняет каждый набор учётных данных через три стадии.

1. Ссылка

Твой ИИ никогда не работает со значением. Он работает с подстановкой:

{{secrets.stripe.sk_live}}

Эта ссылка это всё, что вообще видит модель: в чате, в workflow, в задаче. Она может рассуждать о том, как использовать ключ Stripe, ни разу его не держа.

2. Инъекция

Когда задаче действительно нужны учётные данные, lodos расшифровывает их локально и передаёт изолированному подпроцессу как переменную окружения, вне поля зрения модели, и значение исчезает в тот же момент, как задача завершается.

# 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

Модель видит строку слева. Подпроцесс получает значение справа. Эти двое никогда не встречаются внутри стенограммы.

3. Аудит

Каждый доступ дописывается в защищённую от подделки цепочку HMAC. Лог фиксирует, что секрет был использован, но никогда какое значение. Пути к полям непрозрачны, и любая попытка изменить историю рвёт цепочку.

Почему мы не просто доверяем политике

Было бы легко написать «ИИ настроен не раскрывать секреты» и на этом успокоиться. Мы считаем, что без принудительного контроля это ничего не стоит, поэтому встроили гарантию прямо в процесс релиза.

При каждом релизе запускается проверка инвариантов на этапе сборки, и сборка падает, если хоть что-то из этого когда-либо нарушено:

  • Нигде нет инструмента, который возвращал бы значение секрета в открытом виде.
  • Нет сырого провайдера model-API, только встроенный Claude Code с твоим собственным логином.
  • Нет eval, Function, vm или child_process ни на одном пути рендеринга.
  • Неизвестные инструменты завершаются с отказом по умолчанию, их никогда молча не разрешают.
  • Агент работает с явно запрещённым bash.
  • Ни один одиночный грант не может собрать «смертельную тройку»: приватные данные + недоверенный контент + утечка.
  • Workflow только декларативные, нет пути исполнения кода.

Если будущий коммит добавит инструмент, который передаёт модели секрет, релиз просто не выйдет.

От чего мы отказались и что выпустили взамен

Стена заставила нас делать лучшие проекты, а не меньше функций:

От чего отказались Что выпустили взамен
Сырой model-API, который ИИ вызывает напрямую Встроенный Claude Code с твоим собственным логином
Разрешать ИИ запускать команды на хосте (bash) Runtime-инъекция в подпроцесс, слепая к секретам
eval() в workflow Декларативный YAML, без пути исполнения кода
Презентации, сгенерированные через картинки (облачный egress) Офлайновые текстовые презентации, ноль сети

Отказ от утечек не убрал возможности. Он их сфокусировал.

Итог

Ты можешь поручить ИИ-агенту настоящую работу с учётными данными, не отдавая ему сами учётные данные. Секрет остаётся зашифрованным на твоей машине, попадает в подпроцесс только в момент использования и никогда не пересекает границу в контекст модели.

В этом и состоит вся идея lodos: твой ИИ видит твою работу, а не твои секреты. Прочитай полную архитектуру безопасности или скачай lodos и дай своему агенту задачу вместо ключа.

безопасность-иисекретыprompt-инъекцияархитектура

Запусти свою компанию на собственной машине.

Записывайся в лист ожидания и получи доступ первым, когда lodos откроется.