挑战
将 LLM 和向量数据库与敏感数据结合使用引入了新的安全风险:
- 嵌入逆向攻击 — 研究表明,向量嵌入可以被逆向工程,重构原始文本,从而暴露存储在向量数据库中的 PII
- LLM 上下文泄露 — 发送给 LLM 的敏感数据如果未正确隔离,可能会出现在对其他用户的响应中
- 合规性要求 — GDPR、HIPAA 和 SOC2 要求数据在静态和传输过程中加密,但向量数据库存储的是数学表示,而非传统文本字段
- 搜索功能 — 在嵌入前对文本进行加密会破坏语义,使相似性搜索失效
- 密钥管理 — 需要轮换每个租户的加密密钥,而无需重新嵌入整个数据集
- 审计跟踪 — 每次访问解密的敏感数据都需要记录,以满足合规性要求
我们的解决方案
我们实施了上下文加密架构,该架构在存储前选择性地加密敏感字段,并通过分层方法保留语义可搜索性——在元数据中加密 PII,同时保持清理过的非敏感内容可用于嵌入。
架构
- 加密引擎:采用 AES-256-GCM 和每个租户的加密密钥
- 密钥管理:使用 AWS KMS 进行密钥生成、轮换和访问控制
- PII 检测:基于 NER(命名实体识别)的 PII 分类器
- 向量数据库:Milvus,用于对清理后的嵌入进行相似性搜索
- LLM 层:将清理后的上下文发送给 LLM,生成后重新注入敏感字段
- 审计系统:记录每次解密事件,包括用户、时间戳和目的
- 数据库:PostgreSQL,用于存储加密元数据
上下文加密策略
数据分类
在任何数据进入管道之前,PII 分类器会根据敏感度级别对每个字段进行分类:
- 高度敏感(例如,政府 ID、金融账户号码、医疗 ID)—— 加密,从不嵌入,从不发送给 LLM
- 敏感 PII(例如,全名、电子邮件地址、电话号码)—— 静态加密,在嵌入前替换为占位符
- 上下文相关(例如,职位头衔、公司名称)—— 静态加密,经同意后可用于嵌入
- 非敏感(例如,产品描述、公共信息)—— 按原样存储和嵌入
加密层
第 1 层:静态字段级加密敏感字段在存储前使用 AES-256-GCM 进行加密。每个租户都通过 AWS KMS 的密钥层次结构获得一个专用数据加密密钥 (DEK)。影子字段存储可搜索的哈希值,用于精确匹配查找,而无需解密。
第 2 层:嵌入前清理在文本发送到嵌入模型之前,会检测 PII 并将其替换为保留类型的占位符。这在移除可识别信息的同时,保留了相似性搜索的语义。原始数据到占位符的映射与向量记录一起加密存储。
第 3 层:LLM 生成后的上下文注入LLM 接收带有占位符的清理上下文以生成响应。生成后,系统将从加密存储中重新注入实际值到响应中。这可以防止敏感数据进入 LLM 训练数据或被提供商缓存。
向量数据库安全
集合设计
向量集合存储清理过的嵌入以及加密的原始元数据。通过分区键实现租户隔离,每个租户的元数据都使用其自己的密钥进行加密。API 层在任何解密操作之前验证租户所有权。
密钥管理与轮换
密钥层次结构
采用多级密钥层次结构:AWS KMS 中的主密钥封装了每个租户的密钥加密密钥,而密钥加密密钥又封装了用于字段级加密的每个租户的数据加密密钥。这使得高效的密钥轮换成为可能,而无需重新加密整个密钥链。
密钥轮换流程
- 生成新 DEK — 在现有密钥加密密钥下创建新的数据加密密钥
- 新写入 — 所有新数据都使用新密钥加密;旧密钥仍对读取有效
- 后台重新加密 — 批量作业使用新密钥重新加密现有记录
- 旧 DEK 退役 — 一旦所有记录迁移完成,旧密钥被标记为非活跃
- 审计日志 — 记录轮换事件,包括时间戳和受影响的记录数量
审计与合规性
解密审计日志
每次解密事件都会记录请求者、解密内容、时间、原因(请求上下文)以及使用的密钥——从而提供完整的合规性跟踪。
GDPR 擦除权
系统支持在关系数据库和向量数据库中完全删除数据,并可选地进行密钥轮换,以通过加密方式确保没有残留访问。所有删除操作都记录在 GDPR 审计跟踪中。
主要特点
- 字段级加密 — 对敏感字段而非整个记录进行 AES-256-GCM 加密
- PII 清理 — 占位符保留嵌入的语义
- LLM 后注入 — 敏感数据从不发送给 LLM 提供商
- 每个租户密钥 — 采用 AWS KMS 管理的独立加密密钥
- 密钥轮换 — 零停机轮换,并伴随后台重新加密
- 嵌入安全 — 清理过的嵌入可防止对 PII 的逆向攻击
- 审计跟踪 — 记录每次解密以供合规性报告
- GDPR 合规性 — 跨加密存储和向量数据库的自动化擦除
成果
技术栈
常见问题
MicrocosmWorks 开发了一个选择性加密管道,该管道在文档进入向量数据库之前,识别并加密其中的敏感实体,例如姓名、账号和健康数据,同时保留 LLM 进行有意义的检索和生成所需的周围语义上下文。在查询时,系统只解密响应所需的特定实体,并根据请求用户的访问级别进行限制,因此 LLM 永远不会看到它无权显示的原始敏感数据。
MicrocosmWorks 通过在令牌级别加密敏感实体,同时在原始未加密文本上计算嵌入(embeddings),然后将加密文本与语义向量一起存储在向量数据库中来解决了这个问题。搜索使用高质量的嵌入检索语义相关的块,解密层仅为授权用户重建原始内容,从而在保护静止数据的同时,保持了完整的搜索质量。
MicrocosmWorks 设计了上下文加密方法,通过确保个人身份信息 (personally identifiable information) 和受保护健康信息 (protected health information) 在向量存储中处于静态加密状态,并且仅在授权查询处理期间在内存中解密,从而解决了 HIPAA、SOC 2、GDPR 和 CCPA 中的特定要求。系统会为每次解密事件生成防篡改审计日志,这满足了这些合规框架普遍要求的访问监控和问责制要求。
MicrocosmWorks 开发了一个迁移工具,能够增量处理现有的 vector database 集合,在存储的文档块中加密敏感实体,同时保留其 vector embeddings,因此您无需为整个语料库重新计算 embeddings。此次迁移作为后台进程运行,可以暂停和恢复,并且查询管道在过渡期间能够无缝处理已加密和尚未迁移的文档块。
MicrocosmWorks 优化了加密和解密操作,为每次查询增加了大约 15-30 毫秒的开销,与典型的 LLM 生成时间(500 毫秒至 2 秒)相比,这可以忽略不计。摄取过程中的实体检测和加密为每个文档块增加了大约 100 毫秒,由于摄取通常是批处理过程,因此这也微乎其微。系统使用硬件加速的 AES 操作并在内存中缓存解密密钥,以最大程度地减少加密开销。
