agmiAgent Memory Integrity GitHub

Store, measured at rest

HDP token store

content-addressed reference, read path

HDP token store was seeded through its own API and edited behind its back ten ways. 3 edits served as genuine, 0 reported on audit, 6 rejected on read, 1 not applicable.

Measured on
@helixar_ai/hdp 0.2.2 at b753ba9, Node 22
Date
Source
github.com/Helixar-AI/HDP
Attack versions
tamper@v1, truncate@v1, delete_middle@v1, reorder@v1, forge@v1, cross_replay@v1, rollback_replay@v1, metadata_tamper@v1, snapshot_rollback@v1, erase_resurrect@v1

What this means

The token-by-reference store of HDP (draft-helixar-hdp-agentic-delegation-03, Section 8.2) keeps one stored token per record, each holding the whole delegation chain to that point, and reads a token back by a reference. This row holds the content reference: a sha256 digest of the token, recomputed on every read and compared before the token is returned. That one check refuses any substitution under the reference the recipient holds. An altered token, a reordered one, a token moved in from another context, an older token written over a newer one and a token with its metadata changed all come back as a digest mismatch before the read path returns anything, and a forged token fails the root signature one step later. What the reference cannot see is absence. The recipient asks for the references the store still holds, so a token deleted beneath the store is never asked for, and what remains resolves and verifies: the tail and the middle of the store can be removed and the read path serves what is left as genuine. The whole-store rollback is the same gap at larger scale: an older copy resolves exactly as the current one did. Six of the nine applicable edits refused on the read path, three served; the level rule is cumulative and L1 needs the middle deletion refused, so the row sits at L0 while refusing more edits on read than most rows on this board. The row was measured after the draft's author asked for the reference implementation to be run through the method, with the results posted to the IETF RATS list before publication; section 8.2 of the draft names the content reference as the one a resolving party should hold wherever it does not control the store.

The 10 verdicts

Detection point: the read path. 6 of the ten edits were refused there, 3 served as genuine, 1 not applicable.

Level L0. What L0 means.

EditVerdictWhat the tool said
T1
Content tamper
rejecteddetected on reload (resolve: TokenReferenceIntegrityError: TOKEN_REFERENCE_INTEGRITY: content reference digest mismatch: expected 'sha256:oPLcm4W6NLezyPjRkx9KR_oyi_cWoY4M1M5-0mDtjbg', got 'sha256:Y5hgerTZMUOVLgxLq_OoRcyx)
T2
Tail truncation
acceptedaccepted silently
T3
Middle deletion
acceptedaccepted silently
T4
Reordering
rejecteddetected on reload (resolve: TokenReferenceIntegrityError: TOKEN_REFERENCE_INTEGRITY: content reference digest mismatch: expected 'sha256:yq40jYFM0QMlJOTdlxbqFTFuaMDL1EUgKRIpBy7dkD0', got 'sha256:Ut_cb3s6iYWuZ47zoQb0H2MN)
T5
Forged insertion
rejecteddetected on reload (verify: verifyToken failed at step 2: Signature invalid: root signature verification failed)
T6
Cross-context replay
rejecteddetected on reload (resolve: TokenReferenceIntegrityError: TOKEN_REFERENCE_INTEGRITY: content reference digest mismatch: expected 'sha256:ZXLuOiKGTvM-RQHi1qN6hJEbHMpt9Se5jEPJ1SQGQrQ', got 'sha256:ENqncJC1sMC_aMOT-J96p9p2)
T7
Rollback replay
rejecteddetected on reload (resolve: TokenReferenceIntegrityError: TOKEN_REFERENCE_INTEGRITY: content reference digest mismatch: expected 'sha256:Uf40Q9684qZOkLg2uWMv4Uerdj5azUWTK9Be8pQWTBg', got 'sha256:puL15rPCS9opMJ7bsTdvPsNt)
T8
Metadata tamper
rejecteddetected on reload (resolve: TokenReferenceIntegrityError: TOKEN_REFERENCE_INTEGRITY: content reference digest mismatch: expected 'sha256:ITQlm4SeBkxCWAdRjkKQH3BRQ_9A1laIE3cBTw4DzFM', got 'sha256:sQACWE2XzRF2W1oDNFn6CQBS)
T9
Snapshot rollback
acceptedthe older copy opened as current; the newest genuine record is gone without an error
T10
Erasure resurrection
n/aadapter has no erasure hook: the store's own delete operation is not wired for this row yet

A verdict is what the tool did, not an opinion. "Accepted" means it loaded the altered store, raised nothing, and the agent carried on from the altered memory as if it were true. Every cell has a control that proves the edit landed before the verdict counts.

Where the attacker stands

The attacker holds the store and rewrites entries beneath the TokenStore API, as a backing database, a mounted volume or process memory would allow, so the write-once check in put is not in his way. He holds no signing key.

Reproduce this row

Everything runs offline unless the store is a managed cloud service, in which case the row needs a project of your own. The run seeds a fresh store, applies each edit, confirms it landed, reopens the store and records what came back.

pip install agent-memory-integrity
git clone https://github.com/Helixar-AI/HDP
cd HDP && git checkout b753ba9 && npm install && npm run build   # Node 22
export AGMI_HDP_REPO=<that checkout>
python agmi/full_runner.py --json results/scorecard.json   # every row, this one included
python -m agmi.agent --target hdp-token-content-ref --families at-rest

Badge

Maintainers can link their row from their README. The badge points here and changes nothing on your side:

[![agmi: measured](https://img.shields.io/badge/agmi-measured-0F4C5C)](https://agentmemoryintegrity.org/stores/hdp-token-content-ref.html)

Related rows

The whole scorecard · All stores