使用 CipherStash Stack 实现数据级访问控制
在传统的安全模型中,应用程序的访问是以会话背后的真人用户为中心的。然而,AI agent 的兴起——它们通过提示词(prompts)链接工具、传播数据,并在日志和追踪中运行——打破了这一假设。当一个 agent 代表用户执行操作时,它通常会继承广泛的权限,如果该 agent 被攻破或遭遇提示词注入(prompt-injected),就会产生重大的安全风险。
CipherStash Stack 引入了数据级访问控制 (DLAC),这是一种范式转变,将安全从边界或行级降低到单个数据值。通过确保每一件敏感数据都携带其自身的加密,并确保解密权与特定身份绑定,CipherStash 确保了保护措施会随着数据移动而移动。
CipherStash Stack 的五大支柱
CipherStash Stack 被设计为一组可组合的构建块,允许团队增量式地(一次一个字段)采用 DLAC,而不是通过“大爆炸”式的迁移。
1. 值级加密
不同于保护磁盘的静态加密(encryption-at-rest),CipherStash 为单个字段提供可搜索加密。使用 EQL,Postgres 可以直接在密文上执行过滤、排序和连接。这意味着数据不仅在静态和传输中保持加密,而且在使用中也保持加密。
2. ZeroKMS 密钥管理
为每一个值管理唯一的数据密钥通常在计算上非常昂贵。ZeroKMS 通过作为由 AWS KMS 支持的超快速密钥服务解决了这个问题。据报道,它比直接调用 AWS KMS 快多达 14 倍,消除了对复杂的应用端密钥缓存的需求。
3. 透明 SQL 代理
对于无法更改代码的遗留应用程序或 BI 工具,CipherStash Proxy 位于应用和 Postgres 之间。它透明地重写 SQL 语句,在输入时加密参数,在输出时解密结果,允许开发者使用纯 SQL 的同时维持 DLAC。
4. 身份绑定认证
CipherStash 与 OIDC 提供商(如 Auth0)集成,以确保解密是针对真实的终端用户身份进行授权的。这消除了对共享服务账号或长期密钥的依赖;CipherStash Token Service 在每次解密请求时验证并映射声明(claims)。
5. Agent 技能
为了防止开发者(或 AI agent)“手写”加密这一常见陷阱,CipherStash 提供了agent skills。这些是文档化的构建块,允许 AI 编程助手第一次实现该 stack 时就能正确实现,确保安全决策作为可审查的代码记录在 pull requests 中。
TypeScript 中的技术实现
实现 DLAC 从定义加密模式(schema)开始。开发者可以指定哪些字段被加密以及需要哪种类型的可搜索操作:
import { encryptedTable, encryptedColumn } from '@cipherstash/stack/schema';
export const users = encryptedTable('users', {
email: encryptedColumn('text').equality().freeTextSearch(),
meta: encryptedColumn('json').searchableJson(),
});
一旦定义了模式,SDK 就会处理加密和查询过程:
import { client } from '@cipherstash/stack';
import { users } from './encryption/schema';
// 为插入操作加密一个值
await db.insert(users).values({
email: await client.encrypt('alice@example.com', { column: users.email }),
});
// 使用加密项进行查询
const needle = await client.encrypt('alice@example.com', { column: users.email });
const rows = await db.select().from(users).where(eq(users.email, needle));
DLAC 与传统安全模型对比
区分 DLAC 与其他常见的数据库安全策略非常重要:
| 策略 | 保护级别 | 弱点 |
|---|---|---|
| Transparent DB Encryption | 磁盘/物理 | 对被盗凭据无效;数据库会将明文交给任何已登录的用户。 |
| Row-Level Security (RLS) | 行/策略 | 策略存在于数据库配置中;数据库仍需读取明文以评估策略。 |
| Tokenization Vaults | 外部 | 每次读取都需要往返密钥库(vault),使应用逻辑复杂化。 |
| CipherStash DLAC | 值/密码学 | 保护是数据本身的属性。配置错误的规则会导致密文,而不是明文泄露。 |
保护 AI Agent 工作流
在 CipherStash 模型中,agent 被视为一等公民身份。agent 不再是借用人类的会话,而是拥有自己的密钥和策略。由于强制执行发生在加密层,agent 只能看到其被明确授权访问的字段的解密字节。
这种架构为防止提示词注入提供了关键保障。如果一个 agent 被操纵去窃取数据,它无法泄露它不持有密钥的数据。虽然行级安全(Row-Level Security)可能会限制 agent 可以获取哪些行,但 CipherStash 限制了它在这些行内实际能读取的内容。
性能与生产规模
CipherStash 声称在高度受监管的行业中保护了超过十亿个值,包括能源(Amber Electric)、医疗(Journalia)和金融合规(BNDRY)。在 1000 万行数据集上的性能基准测试显示,精确匹配查询的中位数为 454μs,范围查询的中位数为 1.46ms,这证明了值级加密不会以显著的延迟为代价。