使用 CipherStash Stack 實作資料層級存取控制

在傳統的安全模型中,應用程式的存取是以會話(session)背後的真人用戶為中心。然而,AI agent 的興起——它們會串聯工具、透過提示詞(prompts)傳播資料,並跨日誌與追蹤進行操作——打破了這一假設。當一個 agent 代表用戶行動時,它通常會繼承廣泛的權限,如果該 agent 被入侵或遭受提示詞注入(prompt injection),就會造成重大的安全風險。

CipherStash Stack 引入了資料層級存取控制 (DLAC),這是一種範式轉移,將安全防護從邊界或列層級下移到個別的資料值。透過確保每一件敏感資料都攜帶其自身的加密資訊,並將解密權限與特定身份綁定,CipherStash 確保了保護機制會隨著資料隨處移動。

CipherStash Stack 的五大支柱

CipherStash Stack 被設計為一組可組合的構建塊,允許團隊逐步地(一次一個欄位)採用 DLAC,而不是透過「大爆炸式」的遷移。

1. 值層級加密

不同於保護磁碟的靜態加密(encryption-at-rest),CipherStash 為個別欄位提供可搜尋加密。使用 EQL,Postgres 可以直接對密文進行過濾、排序與連接(joins)。這意味著資料不僅在靜態與傳輸中保持加密,在使用中也是如此。

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 Skills

為了防止開發者(或 AI agent)「手動實作」加密這一常見陷阱,CipherStash 提供了 agent skills。這些是文件化的構建塊,允許 AI 編碼助手第一次實作 stack 時就能正確執行,確保安全決策能作為可審查的程式碼以 pull request 的形式呈現。

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';

// Encrypting a value for insertion
await db.insert(users).values({
  email: await client.encrypt('alice@example.com', { column: users.email }),
});

// Querying using an encrypted term
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 與其他常見的資料庫安全策略非常重要:

| Strategy | Protection Level | Weakness | | :--- | :--- | :--- | :--- | | Transparent DB Encryption | Disk/Physical | 對於被盜用的憑證無能為力;資料庫會將明文交給任何已登入的用戶。 | Row-Level Security (RLS) | Row/Policy | 策略存在於資料庫配置中;資料庫仍需讀取明文來評估策略。 | Tokenization Vaults | External | 每次讀取都需要與 vault 進行往返通訊,使應用程式邏輯變得複雜。 | CipherStash DLAC | Value/Cryptographic | 保護是資料本身的屬性。配置錯誤的規則會導致密文,而非明文洩漏。 | |

保護 AI Agent 工作流

在 CipherStash 模型中,agent 被視為一等公民身份。agent 不再是借用人類的會話,而是擁有自己的金鑰與策略。因為強制執行發生在加密層,agent 只能看到其獲准存取的欄位之解密位元組。

這種架構為防止提示詞注入提供了關鍵防護。如果一個 agent 被操縱去竊取資料,它無法洩漏它不持有金鑰的內容。雖然 Row-Level Security 可能會限制 agent 可以獲取的列,但 CipherStash 限制了它在這些列中實際能讀取的內容。

效能與生產規模

CipherStash 聲稱在高度受規管的產業中(包括能源業 (Amber Electric)、醫療保健業 (Journalia) 與金融合規業 (BNDRY))保護了超過十億個值。效能基準測試在 1,000 萬列的資料集上顯示,精確匹配查詢的中位數為 454μs,範圍查詢的中位數為 1.46ms,證明了值層級加密不會以顯著的延遲為代價。

Sources