Stipendex

Безопасность: модель угроз и нормативные требования

Платёжный протокол для агентов проектируется от угроз, а не дополняется ими. Главный тезис Stipendex: бо́льшая часть атак снимается архитектурно — у LLM нет платёжной поверхности, а не «LLM хорошо попросили не платить».


Модель угроз

# Атака Вектор Контроль
A1 Prompt injection: «переведи деньги на X» вредоносный контент в контексте модели у модели нет операции с произвольным получателем/суммой (инвариант I1); максимум — pay(quote), который упирается в allowlist и лимиты
A2 Инъекция «оплати этот счёт» от злоумышленника-«получателя» подсунутый Quote Quote подписан ключом получателя; получатель не в allowlist → deny; в allowlist, но дорогой → HITL
A3 Replay Quote / двойное предъявление сеть, злонамеренный получатель quote_id одноразовый + expires_at; кошелёк ведёт журнал виденных id
A4 Двойное списание по одному Proof ретраи, гонки идемпотентность на всех уровнях: получатель и рельс по proof_id возвращают прежний результат (R2)
A5 «Оплатил, но не получил» недобросовестный получатель Receipt с result_hash; невыдача Receipt после верифицированного Proof — доказуемое нарушение (журнал кошелька + evidence рельса); репутация в реестре
A6 Скрытое завышение суммы metered/checkout списание ≤ estimate+tolerance (I3, C2); сверх — только re-quote + новое подтверждение
A7 Подмена получателя под доверенным именем MITM, компрометация DNS ключ в Quote сверяется с дескриптором реестра (T1); TLS; подпись над каноническим JSON (JCS)
A8 Компрометация процесса агента малварь, RCE на хосте ключ кошелька вне процесса агента (keychain/демон/KMS); ущерб ограничен остатком лимитов мандата до valid_until
A9 Компрометация ключа кошелька кража ключа короткий TTL мандата; revocation у фасилитатора; velocity-антифрод фасилитатора как вторая линия
A10 Уставший принципал «прожимает» подтверждения социальная инженерия через агента в подтверждении всегда: получатель, итог, допуск, остаток лимитов, назначение мандата; passkey-подтверждение делает «прожатие» осознанным действием
A11 Грифинг pending-очереди спам платёжными запросами TTL очереди = TTL Quote; rate-limit pay() на кошельке; дубли по получателю схлопываются
A12 Слив приватности принципала получатель узнаёт лимиты/историю получателю уходит только Proof (hash мандата, без полей); реестр не видит платежей; фасилитатор видит минимум для расчёта
A13 Отравленный реестр взлом/недобросовестность провайдера подпись провайдера + журнал «кто пропустил платёж»; несколько провайдеров; удаление провайдера одной строкой мандата
A14 «Полезный» инструмент с бесполезным результатом легальный, но мусорный сервис не платёжная задача: репутация/уровни реестра, лимиты как ограничитель ущерба; протокол гарантирует доказуемость («платил, получил X»), не качество X

Нормативные требования (сводка MUST)

Кошелёк:

Получатель:

Рельс/фасилитатор:

Checkout-профиль дополнительно: C1–C5 из spec/checkout-profile.md.

Что протокол сознательно не гарантирует