Build

Účtenky pre MCP volania AI agentov: logy nie sú dôkaz

June 29, 20265 min readAI agenti · MCP · overiteľné účtenky · kryptografia · bezpečnosť agentov
Zhrnutie

Logy AI agenta sú self-reported tvrdenia. Overiteľná účtenka je nezávislý, podpísaný, tamper-evident dôkaz toho, čo MCP volanie nástroja naozaj urobilo — overiteľný hocikým s verejným kľúčom, bez dôvery v agenta. Postavili sme najmenšiu spustiteľnú verziu a zmapovali pole.

Krátka verzia. Logy AI agenta sú self-reported tvrdenia — agent ich vie prepísať dodatočne, alebo zalogovať volanie nástroja, ktoré sa nikdy nestalo. Overiteľná účtenka (receipt) je opak: nezávislý kryptografický dôkaz o tom, čo akcia spotrebovala a vyprodukovala, ktorý si vie hocikto skontrolovať bez dôvery v agenta. Postavili sme najmenšiu spustiteľnú verziu a potom ju vzali tam, kde nám dáva najväčší zmysel — do pamäte agenta: účtenky robia históriu zápisov do pamäte tamper-evident, takže out-of-band úprava toho, čo si agent „pamätá", sa odhalí. Nižšie: ako to funguje, kde je to podľa nás najužitočnejšie, čestné limity, a kto to stavia reálne.

Prečo log agenta nie je dôkaz

Keď AI agent volá nástroj cez MCP — databázu, web search, platbu — aký máš dôkaz, čo sa naozaj stalo? Zvyčajne riadok logu, ktorý si agent napísal sám. To je tvrdenie, nie dôkaz: agent (alebo kompromitovaný proxy uprostred) vie log dodatočne upraviť, vypustiť nepríjemný záznam, alebo sebavedomo vypísať „zavolal som API a vrátilo X" pre volanie, ktoré nikdy neurobil. Pri systéme, ktorý je najsebavedomejší práve keď je najmenej ukotvený, je self-reported log najslabší možný audit.

Čo je účtenka — a ako sa líši od logu

Účtenka sa v momente akcie zaviaže k SHA-256 hashu vstupov a výstupu, plus meno nástroja, časová pečiatka a odkaz na predošlú účtenku. Plynú z toho dve vlastnosti:

Dve vrstvy: hash-reťazec, potom podpis

  1. 1. Hash-reťazec — integrita. Pole prev každej účtenky je hash tej predošlej, čím vzniká reťazec. Uprav hocijakú minulú účtenku a hashe po nej sa zlomia, takže čiastočná úprava je odhaliteľná a vieš pomenovať krok, ktorý sa zmenil — bez kryptografickej knižnice. (Čestný limit: samotný reťazec nezastaví dôkladného útočníka, ktorý prepočíta celý reťazec end-to-end; na to je podpis — alebo ukotvenie hlavy externe.)
  2. 2. Ed25519 podpis — pravosť. Hash každej účtenky je podpísaný súkromným kľúčom aktéra; overovatelia ho skontrolujú verejným kľúčom. To dokazuje kto účtenku vytvoril a že nič nebolo sfalšované. Plné zero-knowledge dôkazy (ZK-SNARK) idú ďalej — dokážu, že výpočet bol správny bez odhalenia čohokoľvek — a sú ťažký koniec toho istého priestoru.

Postavili sme najmenšiu spustiteľnú verziu — a odmerali ju

agent-receipts je jeden čitateľný súbor. Jeho self-demo zaznamená tri MCP volania nástrojov, potom zaútočí na záznam. Výsledky, spustené tak ako sú publikované:

krokčo sme spravilivýsledok verify()
1čestný reťazec účteniekTrue
2upravili sme výstup minulej účtenkychytenécontent tampered na presnom kroku
3pre-hashli sme falzifikát, aby vyzeral konzistentnestále chytenéinvalid signature (podpis spravil pravý kľúč nad pôvodným hashom) + zlomený článok reťazca nižšie

Self-reported log zlyhá vo všetkých troch ticho: upravený od začiatku do konca vyzerá potom identicky. Tá medzera — odhaliteľná manipulácia a pravosť overiteľná treťou stranou — je celá pointa.

Pre MCP konkrétne nemeníš nástroje: obalíš dispatch. ReceiptedDispatcher zaznamená jednu podpísanú účtenku na každé volanie nástroja, takže potom hocikto potvrdí presne ktoré nástroje bežali, s akými hashmi argumentov a výsledkov, v akom poradí.

Náš uhol: tamper-evident pamäť

Účtenky sú najzaujímavejšie tam, kde už pracujeme — v pamäti agenta. Naše open-source pamäťové jadro inspeximus je už append-only, ale úložisko je stále súbor: ktokoľvek sa k nemu dostane, vie uloženú pamäť dodatočne prepísať — a agent by potom recalloval zmenený text ako pôvodný. Zapojenie účteniek to mení — každý remember() emituje podpísanú účtenku zaviazanú k hashu obsahu pamäte, takže história zápisov je nezávisle overiteľná.

Odmerané: čestné úložisko prejde auditom čisto; out-of-band úprava (db-prod-01 → db-attacker-07, spravená priamo v úložisku) je chytená a pomenovaná podľa memory id. To je tamper-evident pamäť — vlastnosť, ktorú širší landscape väčšinou aplikuje na volania nástrojov, nie na samotnú pamäťovú vrstvu. To je tá časť, ktorú chceme ďalej stavať.

Čestné limity

Toto je referenčný proof-of-concept a čestný rozsah je dôležitejší než demo:

Krajina — kto to stavia

FAQ

Čo je overiteľná účtenka pre AI agenta? Kryptografický dôkaz — zaväzujúci sa k hashom vstupu/výstupu akcie, hash-chained a podpísaný — ktorý umožní tretej strane potvrdiť, čo volanie nástroja agenta naozaj urobilo, bez dôvery v jeho vlastné logy.

Ako sa účtenka líši od logu? Log je self-reported a upraviteľný; účtenka je tamper-evident (hash-reťazec) a pravá (podpis), takže jej dodatočná zmena je odhaliteľná hocikým s verejným kľúčom.

Potrebujú overiteľné účtenky agentov blockchain? Nie. Hash-reťazec plus Ed25519 podpis dávajú tamper-evidence a overenie treťou stranou samy o sebe. Ukotvenie hlavy reťazca on-chain (ako robia niektoré produkty) je voliteľný extra, nie požiadavka.

Funguje to s MCP volaniami nástrojov? Áno — obalíš dispatch nástrojov, aby každé volanie emitovalo účtenku. Vstupné argumenty a výsledok sú zaviazané hashom, volanie je podpísané a reťazec ich zoradí.

Dá sa to naozaj spustiť? Áno — je to jeden súbor; hash-reťazec funguje bez závislostí, podpisy potrebujú balík cryptography.

Čestný pohľad. Ak ti obyčajný podpísaný log už dáva všetko, čo potrebuješ, účtenky sú overkill — ich konkrétna hodnota je treťou stranou overiteľná tamper-evidence bez dôvery v agenta. V deň, keď sa logy agenta stanú nosné pre billing, compliance alebo bezpečnosť, tá medzera prestane byť akademická.

← Ďalšie texty od Agory