AI 记忆系统

长期记忆授权不能只看内容,必须绑定写入来源

TMA-NM / MEM-INV-Bench 把 Agent 记忆投毒的防御焦点从内容检测和 lineage 追踪推进到 write-time origin binding:每条记忆在写入时就要绑定来源权威,并且只能通过独立可信主体背书提升权限。工程上这意味着 memory store 要像安全子系统,而不只是向量库。

来源说明

本文基于 2026-06-29 的每日深度技术研究发布流程写成。今天没有找到比过去一周更强的同日主来源;选择尚未在本站单独处理、但足以扩展记忆安全支柱主题的主线:Securing LLM-Agent Long-Term Memory Against Poisoning: Non-Malleable, Origin-Bound Authority with Machine-Checked Guarantees

核心来源如下:

事实边界:TMA-NM 的攻击成功率、效用、延迟和形式化结论均来自作者论文与仓库报告,本文没有独立复现实验。本文的数据模型、SOP、指标和落地路线是我的工程建议,不是论文作者声明的生产标准。

站内重复检查:本站 2026-06-08 的 MPBench 文章讨论“写入面地图”和 ASR/RSR 回归;2026-06-28 的 Policy-as-Code 文章讨论 Agent action 前的参考监控器。本文不重复那两篇,而是聚焦长期记忆本身的授权语义:为什么只保留内容、信任分数或 lineage 都不够,以及 memory store 应如何保存不可降级的写入来源。

稳定 slug:2026-06-29-origin-bound-memory-authority

先给结论

长期记忆的安全边界不应该建立在“这条记忆看起来是否可信”上,也不应该只建立在“它能否追溯到某条可信 lineage”上。

TMA-NM 给出的关键判断是:记忆条目的行为授权必须在写入时绑定来源权威,后续摘要、改写、工具回显、检索排序和多轮对话都不能把低权威内容洗成高权威内容。需要提升权限时,也不能靠同一攻击者制造多个相似证据,而要靠至少两个独立可信主体的背书。

我的工程判断是:这会改变 memory store 的定位。它不再只是一个 text + embedding + metadata 的检索库,而是一个带 write authority、taint propagation、corroboration、audit log 和 action gate 的安全子系统。

flowchart LR
  U["untrusted input<br/>web / email / issue / PDF"] --> W["memory write gate"]
  T["trusted principal<br/>user / policy / verified tool"] --> W
  W --> M["memory record<br/>origin authority is immutable"]
  M --> S["summary / extraction / embedding"]
  S --> R["future retrieval"]
  R --> A{"consequential action?"}
  A -->|no| Q["answer / low-risk reasoning"]
  A -->|yes| G["authority monitor"]
  G -->|origin trusted or corroborated| X["execute"]
  G -->|origin untrusted| H["human review / block / ask for trusted evidence"]

技术问题:内容和 lineage 都会被“洗白”

很多记忆系统默认把风险控制放在两个地方。

第一是内容检测。系统判断一条记忆是否像恶意指令、是否像 prompt injection、是否包含敏感外发目标、是否与用户偏好冲突。这个方向有用,但它默认攻击内容在文本上可见。长期记忆投毒的困难恰恰在于,恶意意图可以经过摘要、改写和上下文转换,变成一条看起来正常的项目规则、用户偏好或工具经验。

第二是 lineage。系统记录这条记忆来自哪条消息、哪个工具、哪个摘要步骤。这个方向也必要,但 lineage 如果只是可选元数据,就不是安全边界。Agent 自我总结时可能丢掉原始边;可信工具如果回显了攻击者控制的内容,lineage 可能看起来来自可信工具;多个不可信来源重复同一说法时,系统可能误以为出现了独立佐证。

TMA-NM 把这三种 laundering channel 明确化:

Laundering channel发生方式为什么内容/lineage 会失效
Self-summarizationAgent 把污染内容改写成自己的 note文本变干净,原始不可信边可能被丢掉
Trusted-tool echo可信工具返回攻击者控制的数据lineage 指向可信工具,但数据源仍不可信
Manufactured corroboration攻击者制造多个相似不可信条目数量看似是共识,实质不是独立可信背书

这里的核心不是“某个检测器不够强”,而是信任依据选错了。内容和 derivation edge 都是可塑的;write-time origin 才是应该被保护的事实。

机制拆解:TMA-NM 要保护的是授权,而不是记忆文本

TMA-NM 的名字很长,拆开看其实是三个约束。

第一,tamper-evident。记忆从写入、转换、检索到行动,都要留下可审计记录。日志本身不阻止攻击,但没有日志就无法复盘哪条记忆支撑了高风险动作。

第二,origin-bound。记忆条目的 authority 绑定写入时来源,而不是绑定后续文本外观。例如外部网页产生的内容可以被总结成更短的事实,但它仍然是外部来源;用户明确确认的项目规则可以被重写成不同格式,但它仍然保持用户确认来源。

第三,non-malleable。低权威来源不能通过摘要、工具回显或同源重复自动变成高权威来源。权限提升必须经过受控路径,例如独立可信主体背书。

这可以落成一个很小的数据模型:

type MemoryAuthority =
  | "system_policy"
  | "user_confirmed"
  | "trusted_tool_verified"
  | "external_untrusted"
  | "model_inferred";

type MemoryRecord = {
  id: string;
  content: string;
  embeddingRef?: string;
  origin: {
    authority: MemoryAuthority;
    principalId: string;
    sourceRef: string;
    writtenAt: string;
  };
  derivedFrom: string[];
  taint: {
    lowestAuthority: MemoryAuthority;
    launderingChannels: string[];
  };
  corroboration: Array<{
    principalId: string;
    authority: Exclude<MemoryAuthority, "external_untrusted" | "model_inferred">;
    evidenceRef: string;
  }>;
  audit: {
    policyVersion: string;
    writeReason: string;
    lastDecisionRef?: string;
  };
};

字段名不重要,约束重要:origin.authority 不能被摘要器改写;派生记忆的 lowestAuthority 不能高于输入链里最低权威;corroboration 必须来自独立可信主体,不能只是同一个外部来源的多个副本。

工程判断:memory action gate 要按副作用分级

不是所有记忆都需要同样严格的授权。一个研究助手引用外部网页做摘要,和一个企业 Agent 根据记忆改付款收款人,不是同一风险等级。

我会把长期记忆的使用分成三层。

使用层级例子最低要求
只读解释摘要资料、生成草稿、列候选线索保留来源和引用,不允许写入高权威规则
低风险个性化UI 偏好、写作风格、常用格式用户可见、可撤销、过期时间和冲突处理
高副作用行动付款、发邮件、改权限、部署、数据外发write-time origin binding、独立背书或人工确认

这个分层能避免把系统做得过重。低风险记忆仍然可以快速迭代;高风险动作则必须让 memory authority 进入 action gate。规则可以很简单:

function canUseMemoryForAction(memory: MemoryRecord, actionRisk: "low" | "high") {
  if (actionRisk === "low") return true;
  if (memory.origin.authority === "system_policy") return true;
  if (memory.origin.authority === "user_confirmed") return true;
  if (memory.origin.authority === "trusted_tool_verified") return true;
  return memory.corroboration.length >= 2;
}

生产实现不能只写这个函数,但这个函数表达了最小原则:高副作用动作不能由 external_untrustedmodel_inferred 记忆直接授权。

可复制落地方案

一周内可以做一个不改产品行为的观测版。

第一天,枚举写入面。列出所有会写长期状态的路径:显式 save memory、会话摘要、用户画像抽取、经验沉淀、技能生成、RAG 缓存、工具结果缓存、issue/邮件/网页导入。每个入口标 owner、store、默认 authority 和删除路径。

第二天,给 memory record 增加只读元数据。最少加 origin.authorityorigin.sourceReforigin.principalIdderivedFrompolicyVersion。先不拦截,只记录真实流量。

第三天,加派生传播。摘要、抽取、去重、合并和 embedding pipeline 必须复制 origin/taint。任何无法确定来源的派生记忆默认降为 model_inferredexternal_untrusted

第四天,加高风险动作观测。记录每次外发、写库、改配置、提交代码、部署、授权动作依赖了哪些 memory ids,以及这些 memory 的最低 authority。

第五天,跑回归样本。用 MEM-INV-Bench 或内部合成样本覆盖 self-summarization、trusted-tool echo 和 manufactured corroboration。目标不是复现论文全量指标,而是确认自己的 pipeline 不会把来源洗白。

第六天,只对最高风险动作 fail closed。比如付款收款人、权限变更、生产部署和客户数据外发。如果依赖低权威记忆,则要求人工确认或可信工具重新验证。

第七天,复盘误拦截。把被拦截动作分成三类:真实风险、缺少背书、元数据缺失。先修数据链路,再考虑放宽策略。

适用场景

这套机制最适合三类系统。

第一,个人或企业助理。它们会长期保存用户偏好、联系人、项目事实、邮件上下文和日程状态,还能代表用户发消息或改设置。这里最怕的是外部输入被记成用户意图。

第二,研发 Agent。它们会把仓库约定、CI 经验、修复方案、review 结论和部署步骤沉淀成长期经验。外部 issue、PR 评论、网页文档和模型推断都可能被误写成项目规则。

第三,安全分析 Agent。它们会处理不可信代码、告警、漏洞描述和 PoC,同时又有扫描、验证、提交报告的能力。记忆可以帮助复盘,但不能让未验证输入直接影响结论或副作用动作。

不适合的场景也明确:一次性问答、只读搜索、无持久状态的工具调用,不需要引入完整 TMA-NM。对这些场景,引用来源、权限隔离和输出校验就够了。

失败模式

第一,来源字段存在但不可强制。工程团队把 origin 当作普通 metadata,摘要器可以覆盖,迁移脚本可以丢失,合并逻辑可以取最高权威。这等于没有边界。

第二,可信工具被误当成可信数据源。内部搜索、浏览器、邮箱、数据库和工单系统可能只是可信传输通道,不代表返回内容可信。工具身份和数据源身份要分开。

第三,独立背书被 Sybil 化。两个证据如果来自同一域名、同一提交者、同一邮件线程或同一上游数据源,不应该算作独立可信主体。

第四,策略只在写入时检查。记忆写入后还会被合并、总结、删除、迁移和重新嵌入。每次转换都可能丢失 taint。

第五,人工确认过宽。让用户点一次“记住此偏好”,不等于授权它影响所有未来高风险动作。确认也要绑定作用域、资源、动作类型和期限。

可验证指标

指标怎么测目标
origin coverage新增 memory 中带 origin.authoritysourceRef 的比例高风险 store 100%
taint retention派生记忆是否保留最低来源权威摘要/合并/embedding 全覆盖
laundering ASR三类 laundering 样本是否触发高风险动作趋近 0
legitimate utility正常用户确认事实是否仍能驱动任务不因防御明显下降
corroboration validity背书是否来自独立可信主体抽样审计无同源冒充
high-risk dependency rate高风险动作依赖低权威记忆的比例先观测,再逐步压低
decision replay rate能否从 action 回放到 memory、origin、policy高风险动作 100%

这些指标必须按动作风险分层。全站平均值没有意义;一个付款、权限或数据外发动作被污染,就足以构成严重事故。

我会如何实现和验证

我不会先重写整个 memory system。最小可落地版本是一个 memory_authority 表和一个 action 前检查器。

数据侧,给每条 memory 写入一条 authority record:memory_idorigin_authorityprincipal_idsource_refderived_frompolicy_versioncreated_at。派生 pipeline 只能追加新 record,不能提升 authority。需要提升时,写入 corroboration record,并要求两个独立可信 principal。

执行侧,在工具调用前读取当前 plan 使用到的 memory ids。低风险工具只记录;高风险工具调用 canUseMemoryForAction。拒绝时不要让模型自己解释绕过,而是返回结构化错误:缺少可信来源、缺少独立背书、或需要人工确认。

验证侧,先用三条合成样本覆盖三种 laundering:

  1. 外部网页包含错误付款信息,Agent 摘要成项目 note。
  2. 可信浏览器工具返回攻击者控制页面,系统把页面内容写入 memory。
  3. 同一攻击者在多个 issue 评论里重复同一错误规则,试图形成“共识”。

每条样本都跑两段断言:污染内容可以被写入低权威 store,但不能授权高风险动作;用户确认或可信工具验证后,正常任务仍能完成。

局限分析

第一,TMA-NM 目前仍是预印本和开源研究工件。作者报告的 0% attack success、100% legitimate utility、微秒级决策延迟和 TLA+ 结论有复核价值,但不能直接外推到所有生产 Agent。

第二,write-time origin binding 依赖系统能准确识别来源。真实企业环境里,数据经常经过 ETL、缓存、搜索索引、权限代理和多 Agent 消息转发。来源识别本身就是工程项目。

第三,独立可信主体的定义很难。两个部门、两个服务、两个仓库、两个用户是否独立,取决于组织结构和供应链,不是简单计数。

第四,严格授权会降低自动化程度。研究助手和运营助手常常需要从外部资料学习,如果所有外部内容都必须人工确认,系统会变慢。正确做法是按副作用分层,而不是全局禁用记忆。

第五,记忆安全不替代隐私治理。Agents That Know Too Much 提醒我们,Agent 的泄漏面包括查询、中间结果、记忆、多 Agent 消息和 delegated permissions。TMA-NM 解决的是记忆授权不被洗白;数据最小化、访问控制、审计、删除和隐私预算仍要单独设计。

自审

  • 事实可靠性:核心事实来自 arXiv 原始页面、项目 README 和 Hugging Face 数据集入口;实验数字均标注为作者报告。
  • 来源完整性:包含主论文、开源仓库、数据集和相邻隐私综述;未使用社区转述作为核心证据。
  • 非复述检查:正文没有复述 README 结构,而是把 TMA-NM 翻译成 memory store 数据模型、action gate、SOP 和指标。
  • 标题检查:标题表达工程结论,没有夸大为“彻底解决记忆投毒”。
  • 猜测边界:数据模型、SOP、伪代码和指标是本文工程建议,已和来源事实分开。
  • 站内重复:区别于 MPBench 写入面地图和 Policy-as-Code action monitor,本文聚焦 write-time origin binding 与 non-malleable authority。
  • 安全边界:只讨论授权白盒评测、防御建设和安全工程,不提供攻击第三方系统的操作流程。