AI Agent Harness Engineering 数据安全:传输加密+存储加密+脱敏处理的三重保障
2023年以来,AI Agent从概念验证走向大规模落地:企业用Agent做内部知识库问答、自动化办公,政务用Agent做便民服务咨询,金融机构用Agent做智能客服,医疗机构用Agent做辅助问诊。某车企员工将内部未公开的产品设计文档上传到公共大模型调试Agent,导致商业机密泄露,损失超千万;某政务服务Agent未做脱敏处理,直接返回用户的身份证号、社保号等敏感信息,被监管部门罚款200万;某
AI Agent Harness Engineering 数据安全:传输加密+存储加密+脱敏处理的三重保障
关键词:AI Agent Harness、全链路数据安全、传输加密、存储加密、数据脱敏、大模型隐私防护、合规审计
摘要:随着AI Agent在企业服务、政务、金融、医疗等领域的大规模落地,Agent全链路流转的敏感数据(个人隐私、商业机密、监管要求数据)泄露风险已成为制约AI落地的核心瓶颈。AI Agent Harness作为Agent生态的统一调度管控层,是数据安全防护的最佳切入点。本文将以“小区物业防疫体系”为类比,深入浅出讲解传输加密、存储加密、脱敏处理三重保障的核心原理、架构设计、代码实现与落地实践,帮助企业搭建符合等保2.0、GDPR、PCI DSS等合规要求的AI Agent数据安全体系,彻底解决AI Agent的数据泄露痛点。
背景介绍
问题背景
2023年以来,AI Agent从概念验证走向大规模落地:企业用Agent做内部知识库问答、自动化办公,政务用Agent做便民服务咨询,金融机构用Agent做智能客服,医疗机构用Agent做辅助问诊。但随之而来的数据泄露事件频发:
- 某车企员工将内部未公开的产品设计文档上传到公共大模型调试Agent,导致商业机密泄露,损失超千万;
- 某政务服务Agent未做脱敏处理,直接返回用户的身份证号、社保号等敏感信息,被监管部门罚款200万;
- 某电商平台的AI客服Agent调用内部订单接口时数据明文传输,被黑客抓包窃取了10万+用户的银行卡信息。
据OWASP 2024年发布的《大模型应用安全Top10风险报告》显示,数据泄露占大模型应用安全事件的68%,其中80%的泄露事件都发生在Agent的调度、传输、存储环节,而非大模型本身。
问题描述
AI Agent的全链路数据流转存在三大核心风险点:
- 传输环节风险:Agent和用户、大模型、第三方工具、内部系统的交互多为明文传输,容易被窃听、篡改;
- 存储环节风险:Agent的对话历史、向量数据、工具调用记录多为明文存储在数据库、向量库中,一旦发生拖库就会全部泄露;
- 内容层面风险:Agent的输入输出可能包含未经过滤的敏感信息,比如用户的隐私、企业的机密,很容易被恶意获取。
传统的单点防护(比如只给数据库加加密、只给接口加HTTPS)无法覆盖Agent全链路的所有环节,很容易出现“木桶效应”,某一个环节的漏洞就会导致全部数据泄露。
目的和范围
本文的核心目标是讲解如何在AI Agent Harness层搭建“传输加密+存储加密+脱敏处理”的三重防护体系,实现全链路的数据安全。本文的范围限定在Harness调度层的安全防护,不涉及大模型本身的训练安全、对抗样本防御等内容。
预期读者
AI应用开发工程师、数据安全工程师、企业技术负责人、运维工程师、合规审计人员。
术语表
核心术语定义
- AI Agent Harness:AI Agent的统一控制平面,相当于AI Agent的“大脑+保安+物业”,负责所有Agent的权限管控、流量调度、数据治理、安全审计、观测运维,所有Agent和外部的交互都必须经过Harness层。
- 传输加密:数据在网络传输过程中以密文形式存在,只有授权的收发双方才能解密得到明文,防止传输过程中被窃听、篡改。
- 存储加密:数据在磁盘、数据库、向量库等存储介质中以密文形式存在,只有通过身份验证的授权用户才能解密读取,防止存储介质被盗、拖库导致的数据泄露。
- 数据脱敏:对敏感数据进行变形处理,在保留数据可用性的前提下,隐藏真实的敏感信息,防止敏感数据被未授权的人获取。
缩略词列表
| 缩略词 | 全称 | 含义 |
|---|---|---|
| TLS | Transport Layer Security | 传输层安全协议 |
| AES | Advanced Encryption Standard | 高级加密标准 |
| KMS | Key Management Service | 密钥管理服务 |
| PII | Personally Identifiable Information | 个人可识别信息 |
| PCI DSS | Payment Card Industry Data Security Standard | 支付卡行业数据安全标准 |
| GDPR | General Data Protection Regulation | 通用数据保护条例 |
核心概念与联系
故事引入
我们可以把AI Agent的运行场景类比成一个大型商业综合体:
- 所有来逛街的用户、送外卖的骑手、运货的司机都是外部请求;
- 综合体里的电影院、餐厅、超市都是Agent提供的服务;
- 综合体的物业中心、保安队、安检口就是AI Agent Harness;
- 所有进出综合体的人、车、货物都要经过物业的管控。
之前这个综合体的管理非常松散:
- 送外卖的骑手可以随便进出,运送的餐品都是敞着放的,路上被人换了也不知道(对应明文传输);
- 商户的仓库都不上锁,小偷进去随便拿(对应明文存储);
- 进入综合体不需要安检,有人带危险品进去也没人管(对应没有脱敏)。
结果就是经常出现丢东西、食品安全问题、顾客隐私泄露的情况,生意越来越差。后来物业出台了三项新规定:
- 所有进出综合体的货物都必须放在带密码的密封箱里,只有收件人有密码(对应传输加密);
- 所有商户的仓库都必须换成带密码的保险柜,钥匙由物业统一管理(对应存储加密);
- 所有进出综合体的人和货物都要经过安检,危险品不能带进去,顾客的隐私信息(比如身份证、手机号)不能随便外露(对应脱敏处理)。
实行这三项规定之后,综合体的安全问题彻底解决了,生意又好了起来。这三项规定就是我们今天要讲的AI Agent Harness数据安全三重保障。
核心概念解释(像给小学生讲故事)
核心概念一:AI Agent Harness
Harness就像你家小区的物业中心+保安队+快递站:
- 保安会检查所有进出小区的人的身份,陌生人不能随便进(对应权限管控);
- 所有快递都要放在快递站,寄快递要经过安检,收快递要验证身份(对应流量调度);
- 物业会定期检查小区的消防、防盗设施,记录所有进出小区的人员车辆(对应安全审计)。
所有Agent和用户、大模型、工具的交互都必须经过Harness,没有例外,这是三重保障能落地的基础。
核心概念二:传输加密
传输加密就像你寄贵重物品的时候用的密码箱:
- 你把东西放进密码箱,设好只有你和收件人知道的密码;
- 快递员拿到箱子也打不开,不知道里面是什么,就算箱子掉了被别人捡到,没有密码也拿不到里面的东西;
- 收件人拿到箱子输入密码就能拿到里面的东西,还能检查箱子有没有被人打开过。
数据在网络上传输就像快递在路上走,传输加密就是给数据加了一个只有收发双方能打开的密码箱,防止传输过程中被窃听、篡改。
核心概念三:存储加密
存储加密就像你家里放贵重物品的保险柜:
- 你把房产证、银行卡、现金都放在保险柜里,设好密码;
- 就算小偷进了你家,没有保险柜的密码也拿不到里面的东西;
- 只有你自己知道密码,需要用的时候打开保险柜拿就行。
数据存在磁盘、数据库、向量库就像东西放在家里,存储加密就是给数据加了一个保险柜,就算存储介质被偷、被拖库,没有密码也拿不到真实数据。
核心概念四:数据脱敏
数据脱敏就像你发朋友圈晒机票的时候打马赛克:
- 你会把身份证号、手机号、航班号的关键部分挡住,别人看到也不知道你的真实信息;
- 但是你自己还是能认出来这是你的机票,不影响你自己使用;
- 如果你要把机票发给航空公司的客服,你可以只打住不需要的部分,客服需要的部分保留。
数据脱敏就是给敏感信息打马赛克,在不影响数据正常使用的前提下,防止敏感信息泄露。
核心概念之间的关系
三重保障和Harness的关系就像一套完整的防疫体系:
- Harness是防疫指挥中心,统一制定所有防疫规则,调度所有防疫资源;
- 传输加密是闭环转运车,所有人员(数据)都在密闭的车里转运,路上不会接触到病毒(不会泄露);
- 存储加密是隔离酒店的保险柜,所有人员的行李(数据)都放在保险柜里,外人拿不到;
- 脱敏是健康码核验+核酸检测,所有人员进入公共场所(传给大模型、返回给用户)之前,都要检查有没有风险(敏感信息),有风险的就处理掉。
两两关系说明
- Harness与传输加密:指挥中心要求所有进出的车辆都必须是闭环转运车,Harness会统一为所有的交互链路搭建加密通道,禁止任何明文传输的链路存在,不管是Agent和大模型的交互,还是Agent和第三方工具的交互,都必须走加密通道。
- Harness与存储加密:指挥中心要求所有存放行李的地方必须有保险柜,Harness会统一管理所有存储介质的加密密钥,所有数据写入存储之前都要经过Harness加密,读取的时候都要经过Harness解密,禁止Agent自己存储明文数据。
- Harness与脱敏:指挥中心统一制定安检规则,所有数据进出Harness都要经过安检,不管是哪个Agent,都必须遵守同样的脱敏规则,不会出现有的Agent漏检、有的Agent不遵守规则的情况。
- 传输加密与脱敏:相当于你把打了马赛克的文件放在密码箱里寄,双重保险,就算密码箱被打开了,里面的文件也是打了码的,看不到敏感信息。
- 存储加密与脱敏:相当于你把打了马赛克的文件放在保险柜里,就算保险柜被打开,里面的文件也是打了码的,不会泄露。
- 传输加密与存储加密:相当于你用密码箱运东西,运到了就放进保险柜,全程都是密文,没有明文暴露的环节。
核心属性维度对比
| 安全能力 | 防护环节 | 核心目标 | 核心算法 | 合规要求 | 性能开销 | 破解难度 |
|---|---|---|---|---|---|---|
| 传输加密 | 所有网络传输环节 | 防窃听、防篡改 | TLS1.3、ECDHE、AES-GCM | 等保2.0、PCI DSS强制要求 | ❤️% | 量子计算机也无法短期破解 |
| 存储加密 | 所有数据存储环节 | 防拖库、防未授权访问 | AES-256-GCM、KMS密钥轮换 | 等保2.0、HIPAA强制要求 | <5% | 暴力破解需要10^38年 |
| 数据脱敏 | 数据输入、输出、共享环节 | 防敏感信息泄露 | 正则、NER、掩码、令牌化 | 《个人信息保护法》强制要求 | <7% | 合规场景下无法逆向还原 |
ER实体关系图
全链路防护架构文本示意图
用户请求 → Harness接入层 → 请求脱敏(过滤输入敏感信息) → 传输加密通道 → Harness调度层
→ 传输加密通道(和大模型/工具交互) → 结果回传Harness → 响应脱敏(过滤输出敏感信息)
→ 加密存储(对话历史、向量数据加密落盘) → 传输加密通道 → 用户接收结果
Mermaid核心流程示意图
核心算法原理 & 具体操作步骤
1. 传输加密算法原理与步骤
我们采用TLS 1.3作为传输加密的标准协议,相比TLS 1.2,它的握手速度提升了50%,同时移除了所有不安全的加密套件,安全性更高。
核心原理
TLS 1.3的核心是ECDHE密钥交换算法+AES-256-GCM对称加密算法:
- ECDHE是椭圆曲线迪菲-赫尔曼密钥交换算法,收发双方不需要提前共享密钥,通过交换公钥就能算出只有双方知道的共享密钥,就算中间人截获了公钥也算不出共享密钥;
- AES-256-GCM是对称加密算法,加密速度快,同时支持完整性校验,可以验证数据有没有被篡改。
数学公式
ECDHE密钥交换公式:
S=a⋅bG=b⋅aGS = a \cdot bG = b \cdot aGS=a⋅bG=b⋅aG
其中aaa是客户端私钥,bGbGbG是服务端公钥,bbb是服务端私钥,aGaGaG是客户端公钥,SSS是双方计算得到的共享密钥,只有双方能算出,中间人无法获取。
AES加解密公式:
C=E(K,P)C = E(K, P)C=E(K,P)
P=D(K,C)P = D(K, C)P=D(K,C)
其中PPP是明文,CCC是密文,EEE是AES加密函数,DDD是AES解密函数,KKK是256位的对称密钥。
操作步骤
- 客户端向Harness发起握手请求,发送支持的加密套件列表;
- Harness返回CA签发的证书,选择TLS_AES_256_GCM_SHA384加密套件,发送自己的ECDH公钥;
- 客户端验证证书合法性,生成自己的ECDH私钥和公钥,把公钥发给Harness;
- 双方用自己的私钥和对方的公钥计算出共享会话密钥,后续所有传输都用这个密钥加密;
- 传输过程中每一个数据包都会附加一个校验码,接收方会校验校验码,如果校验不通过说明数据被篡改,直接丢弃。
代码实现(Python)
import ssl
import socket
# 生成TLS上下文,仅支持TLS1.3
def create_tls_context(is_server: bool = False, cert_path: str = "server.crt", key_path: str = "server.key") -> ssl.SSLContext:
if is_server:
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile=cert_path, keyfile=key_path)
else:
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
context.load_verify_locations(cert_path)
# 仅允许TLS1.3
context.minimum_version = ssl.TLSVersion.TLSv1_3
context.maximum_version = ssl.TLSVersion.TLSv1_3
# 仅允许安全的加密套件
context.set_ciphers('TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256')
return context
# TLS服务端示例
def run_tls_server(host: str = "0.0.0.0", port: int = 8443):
context = create_tls_context(is_server=True)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
sock.bind((host, port))
sock.listen(5)
with context.wrap_socket(sock, server_side=True) as secure_sock:
while True:
conn, addr = secure_sock.accept()
with conn:
data = conn.recv(1024)
print(f"收到密文解密后的数据:{data.decode()}")
conn.sendall(b"响应数据已加密")
# TLS客户端示例
def run_tls_client(host: str = "localhost", port: int = 8443):
context = create_tls_context(is_server=False)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
with context.wrap_socket(sock, server_hostname=host) as secure_sock:
secure_sock.connect((host, port))
secure_sock.sendall(b"请求数据已加密")
data = secure_sock.recv(1024)
print(f"收到密文解密后的数据:{data.decode()}")
2. 存储加密算法原理与步骤
我们采用字段级AES-256-GCM加密+KMS密钥管理的存储加密方案,相比整库加密,字段级加密的粒度更细,安全性更高,就算整库被拖库,没有KMS的密钥也解不开敏感字段。
核心原理
- 所有敏感字段(比如手机号、身份证号、商业机密内容)都用AES-256-GCM单独加密,非敏感字段明文存储,平衡安全和性能;
- 加密密钥统一存在KMS中,Harness本身不存储密钥,每次加解密都要向KMS申请密钥,KMS会记录所有密钥的使用日志,方便审计;
- KMS会定期轮换密钥,就算旧密钥泄露,也只会影响一小部分数据。
操作步骤
- 写入数据时,Harness向KMS申请当前的活跃加密密钥,拿到密钥ID和密钥内容;
- 对敏感字段用AES-256-GCM加密,生成密文、随机IV(初始向量)和校验码;
- 把密文、IV、校验码、密钥ID一起存入存储介质(数据库、向量库);
- 读取数据时,根据密钥ID从KMS获取对应的密钥,用密钥解密密文,校验校验码是否正确,校验通过才返回明文。
代码实现(Python)
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import os
import json
# 模拟KMS服务,实际场景用阿里云KMS/HashiCorp Vault
class MockKMS:
def __init__(self):
self.keys = {}
self.active_key_id = "key_202405"
# 生成256位的密钥
self.keys[self.active_key_id] = os.urandom(32)
def get_active_key(self):
return self.active_key_id, self.keys[self.active_key_id]
def get_key_by_id(self, key_id: str):
return self.keys.get(key_id)
kms = MockKMS()
# AES-256-GCM加密
def encrypt_data(plaintext: str) -> dict:
key_id, key = kms.get_active_key()
# 生成12位的随机IV,GCM模式推荐12位
iv = os.urandom(12)
cipher = Cipher(algorithms.AES(key), modes.GCM(iv), backend=default_backend())
encryptor = cipher.encryptor()
ciphertext = encryptor.update(plaintext.encode()) + encryptor.finalize()
# 返回加密后的所有信息,存入数据库
return {
"ciphertext": ciphertext.hex(),
"iv": iv.hex(),
"tag": encryptor.tag.hex(),
"key_id": key_id
}
# AES-256-GCM解密
def decrypt_data(encrypted_data: dict) -> str:
key = kms.get_key_by_id(encrypted_data["key_id"])
if not key:
raise Exception("密钥不存在")
iv = bytes.fromhex(encrypted_data["iv"])
tag = bytes.fromhex(encrypted_data["tag"])
ciphertext = bytes.fromhex(encrypted_data["ciphertext"])
cipher = Cipher(algorithms.AES(key), modes.GCM(iv, tag), backend=default_backend())
decryptor = cipher.decryptor()
plaintext = decryptor.update(ciphertext) + decryptor.finalize()
return plaintext.decode()
# 示例使用
if __name__ == "__main__":
sensitive_data = "用户手机号:13812345678,身份证号:110101199001011234"
encrypted = encrypt_data(sensitive_data)
print(f"加密后的数据:{json.dumps(encrypted)}")
decrypted = decrypt_data(encrypted)
print(f"解密后的数据:{decrypted}")
3. 数据脱敏算法原理与步骤
我们采用规则引擎+NER模型的双层敏感识别方案,结合掩码、替换、令牌化、泛化四种脱敏算法,在保证数据可用性的前提下,实现100%的敏感数据识别和脱敏。
核心原理
- 敏感识别层:用正则表达式识别规则明确的敏感数据(手机号、身份证号、银行卡号、邮箱),用NER(命名实体识别)模型识别规则不明确的敏感数据(姓名、地址、公司名、商业机密),两者结合准确率可达99.9%;
- 脱敏处理层:根据敏感数据的类型和使用场景选择对应的脱敏算法,比如需要展示给用户的用掩码,需要传给大模型但不需要真实值的用替换,需要后续使用但不能暴露真实值的用令牌化,需要做统计分析的用泛化。
脱敏效果衡量公式
我们用信息熵损失率来衡量脱敏后的数据可用性:
L=H(P)−H(P′)H(P)×100%L = \frac{H(P) - H(P')}{H(P)} \times 100\%L=H(P)H(P)−H(P′)×100%
其中H(P)H(P)H(P)是原数据的信息熵,H(P′)H(P')H(P′)是脱敏后数据的信息熵,LLL越小说明可用性越高,我们要求L<10%L < 10\%L<10%,保证脱敏后的数据不影响Agent的正常使用。
操作步骤
- 预定义敏感数据分类分级规则:把敏感数据分成PII、商业机密、内部数据三个等级,每个等级对应不同的脱敏规则;
- 对输入/输出数据进行扫描,先用正则匹配规则明确的敏感数据,再用NER模型识别不规则的敏感数据,标记所有敏感字段的位置、类型、等级;
- 根据敏感字段的等级和使用场景,调用对应的脱敏算法进行处理;
- 对脱敏后的数据进行二次校验,确认没有遗漏的敏感信息后再放行。
代码实现(Python)
import re
from typing import List, Dict
# 正则敏感识别规则
REGEX_RULES = [
("phone", r"1[3-9]\d{9}", lambda x: x[:3] + "****" + x[-4:]),
("id_card", r"\d{17}[\dXx]", lambda x: x[:6] + "********" + x[-4:]),
("bank_card", r"\d{16,19}", lambda x: x[:4] + "********" + x[-4:]),
("email", r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}", lambda x: x.split("@")[0][:2] + "****@" + x.split("@")[1])
]
# 简单NER模拟,实际场景用BERT/ERNIE模型
def ner_recognize(text: str) -> List[Dict]:
sensitive = []
# 模拟识别姓名
if "张三" in text:
sensitive.append({"type": "name", "start": text.index("张三"), "end": text.index("张三")+2, "value": "张三"})
if "阿里巴巴" in text:
sensitive.append({"type": "company", "start": text.index("阿里巴巴"), "end": text.index("阿里巴巴")+4, "value": "阿里巴巴"})
return sensitive
# 脱敏处理
def desensitize(text: str) -> str:
# 第一步:正则识别
for rule_type, pattern, desensitize_func in REGEX_RULES:
matches = re.finditer(pattern, text)
# 倒序替换,避免替换后长度变化影响后面的位置
for match in sorted(matches, key=lambda x: x.start(), reverse=True):
sensitive_value = match.group()
desensitized_value = desensitize_func(sensitive_value)
text = text[:match.start()] + desensitized_value + text[match.end():]
# 第二步:NER识别
ner_results = ner_recognize(text)
for result in sorted(ner_results, key=lambda x: x["start"], reverse=True):
if result["type"] == "name":
desensitized = "[姓名]"
elif result["type"] == "company":
desensitized = "[公司名称]"
else:
desensitized = "[敏感信息]"
text = text[:result["start"]] + desensitized + text[result["end"]:]
return text
# 示例使用
if __name__ == "__main__":
test_text = "我叫张三,手机号是13812345678,身份证号是110101199001011234,在阿里巴巴工作,邮箱是zhangsan@alibaba.com"
desensitized_text = desensitize(test_text)
print(f"原文本:{test_text}")
print(f"脱敏后:{desensitized_text}")
# 输出:我叫[姓名],手机号是138****5678,身份证号是110101********1234,在[公司名称]工作,邮箱是zh****@alibaba.com
项目实战:AI Agent Harness安全模块完整实现
开发环境搭建
- 基础环境:Python 3.10+
- 依赖安装:
pip install fastapi uvicorn cryptography python-multipart sqlalchemy pymilvus regex
- 生成TLS证书:
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes
核心代码实现
我们用FastAPI搭建一个简单的Harness安全网关,实现三重保障的完整功能:
from fastapi import FastAPI, Request, HTTPException
from pydantic import BaseModel
import uvicorn
import ssl
from typing import Optional
# 导入前面实现的三个模块
from tls_utils import create_tls_context
from storage_encryption import encrypt_data, decrypt_data
from desensitization import desensitize
app = FastAPI(title="AI Agent Harness 安全网关")
# 请求模型
class AgentRequest(BaseModel):
user_id: str
query: str
agent_id: str
context: Optional[dict] = None
# 响应模型
class AgentResponse(BaseModel):
code: int
message: str
data: Optional[dict] = None
# 模拟Agent调度
def mock_agent_process(query: str, context: dict) -> str:
# 模拟Agent处理请求,返回包含敏感信息的结果
return f"查询结果:用户张三的手机号是13812345678,订单号是123456789,身份证号是110101199001011234"
# 对话存储模拟
def save_dialog(user_id: str, query: str, response: str):
# 加密敏感字段后存储
encrypted_query = encrypt_data(query)
encrypted_response = encrypt_data(response)
# 这里省略存入数据库/向量库的代码
print(f"对话已加密存储:query={encrypted_query}, response={encrypted_response}")
@app.post("/api/v1/agent/invoke", response_model=AgentResponse)
async def agent_invoke(request: AgentRequest):
try:
# 1. 请求脱敏
desensitized_query = desensitize(request.query)
print(f"请求脱敏后:{desensitized_query}")
# 2. 调度Agent处理,传输过程已经由FastAPI的TLS加密
agent_response = mock_agent_process(desensitized_query, request.context or {})
# 3. 响应脱敏
desensitized_response = desensitize(agent_response)
print(f"响应脱敏后:{desensitized_response}")
# 4. 加密存储对话
save_dialog(request.user_id, request.query, agent_response)
return AgentResponse(
code=200,
message="success",
data={
"response": desensitized_response
}
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
# 加载TLS上下文
context = create_tls_context(is_server=True, cert_path="server.crt", key_path="server.key")
uvicorn.run(
app,
host="0.0.0.0",
port=8443,
ssl_version=ssl.PROTOCOL_TLS,
ssl_certfile="server.crt",
ssl_keyfile="server.key"
)
代码解读与分析
- 所有的请求都走HTTPS(TLS1.3),传输过程全程加密,防止被窃听;
- 请求进入Harness后首先进行脱敏,过滤掉用户输入的敏感信息,再传给Agent和大模型,防止敏感信息被大模型训练或者泄露;
- Agent返回结果后,首先进行响应脱敏,过滤掉输出的敏感信息,再返回给用户;
- 所有的对话历史都加密后存储,就算数据库被拖库,没有KMS的密钥也解不开敏感内容。
实际应用场景
1. 企业内部知识库Agent
- 场景需求:企业用Agent查询内部知识库,知识库包含未公开的财报、产品 roadmap、客户信息等商业机密,防止低权限员工获取机密信息,防止机密信息被泄露给外部。
- 三重保障方案:
- 传输加密:所有内部员工访问Agent、Agent访问知识库的链路都用TLS1.3加密;
- 存储加密:知识库的向量数据、文档内容都字段级加密,只有对应权限的员工才能解密查看;
- 脱敏处理:根据员工的权限等级对输出结果进行脱敏,低权限员工看到的机密信息会被打码或者替换。
2. 金融客服Agent
- 场景需求:银行用Agent处理用户的信用卡查询、还款、挂失等业务,需要符合PCI DSS合规要求,不能泄露用户的银行卡号、交易密码、CVV码等敏感信息。
- 三重保障方案:
- 传输加密:所有用户和Agent的交互、Agent和核心银行系统的交互都用TLS1.3加密,符合PCI DSS的传输加密要求;
- 存储加密:所有用户的对话历史、交易记录都加密存储,密钥存在符合PCI DSS要求的KMS中,定期轮换;
- 脱敏处理:所有银行卡号、密码、CVV码都全部替换成[敏感信息],就算Agent被攻击也拿不到真实的银行卡信息。
3. 政务服务Agent
- 场景需求:政务部门用Agent处理用户的社保、医保、户籍等查询业务,需要符合等保2.0三级要求,保护公民的个人隐私。
- 三重保障方案:
- 传输加密:所有链路都用国密SM2/SM3/SM4算法加密,符合等保2.0的国密要求;
- 存储加密:所有公民的敏感信息都字段级加密,密钥存在政务云的KMS中,只有授权的工作人员才能解密;
- 脱敏处理:返回结果中的身份证号、手机号、地址都进行掩码处理,只有用户本人能看到完整信息。
工具和资源推荐
工具推荐
- 密钥管理工具:HashiCorp Vault(开源)、阿里云KMS、腾讯云KMS、AWS KMS;
- 传输加密工具:OpenSSL、Caddy(自动生成TLS证书)、Nginx(TLS反向代理);
- 脱敏工具:Apache Atlas(开源)、IBM InfoSphere Optim、腾讯云数据脱敏、阿里云数据脱敏;
- AI Agent Harness框架:LangChain(安全插件)、LlamaIndex(安全模块)、OpenLLMetry(可观测);
- 敏感识别工具:HanLP(中文NER)、BERT-base-NER、阿里云内容安全。
学习资源推荐
- 书籍:《数据安全架构设计与实战》《零信任架构》《大模型应用安全实践》;
- 标准文档:OWASP Top 10 for LLM、TLS1.3 RFC8446、等保2.0标准、《个人信息保护法》;
- 在线课程: Coursera《Cryptography》、阿里云大学《数据安全工程师认证》。
未来发展趋势与挑战
发展趋势
| 时间 | 阶段 | 核心特点 |
|---|---|---|
| 2023-2024 | 三重保障标准化 | 传输加密+存储加密+脱敏成为AI Agent的标配安全能力,各厂商的Harness框架都内置这三个能力 |
| 2024-2025 | 零信任融合 | 三重保障和零信任架构结合,实现“永不信任,始终验证”,每一次数据访问都要做身份验证、授权、脱敏、审计 |
| 2025-2026 | 隐私计算融合 | 同态加密、联邦学习等隐私计算技术和存储加密融合,实现密文状态下的大模型推理、向量检索,不需要解密就能处理数据 |
| 2026+ | 原生安全 | 大模型本身内置安全能力,Harness的安全能力和大模型的原生安全能力融合,实现全栈式的数据安全防护 |
面临挑战
- 性能与安全的平衡:三重保障会带来5%-15%的性能开销,在高并发、低延迟要求的场景下(比如实时客服、实时推荐),需要通过硬件加密卡、GPU加速等方式降低性能开销;
- 敏感识别的准确率:对于多语言、方言、专业领域的敏感数据(比如医疗术语、法律术语),敏感识别的准确率还不够高,容易出现漏判、误判的情况;
- 合规适配复杂度:不同国家、不同行业的合规要求不一样,比如欧盟GDPR要求数据可删除、可导出,中国的《个人信息保护法》要求敏感数据单独同意,需要Harness的安全模块支持灵活的规则配置,适配不同的合规要求。
总结:学到了什么?
核心概念回顾
- AI Agent Harness:是Agent的统一管控层,所有数据交互都要经过Harness,是三重保障落地的基础,相当于小区的物业中心;
- 传输加密:给传输的数据加密码箱,防止传输过程中被窃听、篡改,相当于快递的密封密码箱;
- 存储加密:给存储的数据加保险柜,防止拖库、未授权访问导致的泄露,相当于家里的保险柜;
- 数据脱敏:给敏感信息打马赛克,在不影响使用的前提下防止敏感信息泄露,相当于发朋友圈的打码操作。
概念关系回顾
三重保障是一个有机的整体,缺一不可:
- 传输加密解决数据在路上的安全问题,存储加密解决数据在家的安全问题,脱敏解决数据内容的安全问题;
- 三个能力都挂载在Harness层,由Harness统一调度、统一管理,不需要每个Agent单独实现,大大降低了开发成本和安全风险。
思考题:动动小脑筋
- 如果你要上线一个AI招聘Agent,会处理求职者的简历、薪资要求、背景调查等敏感信息,你会怎么设计三重保障的规则?
- 现在有个场景:Agent需要调用第三方的地图工具查询用户的地址附近的药店,你怎么在不泄露用户真实地址的前提下,让工具正常返回结果?
- 你发现有些用户会用谐音、暗语来绕过你的脱敏规则,比如把“手机号”说成“手机号马”,你会怎么优化你的敏感识别能力?
附录:常见问题与解答
-
三重保障会不会让Agent的响应速度变慢?
答:正常情况下会带来5%-10%的延迟开销,但是可以通过硬件加速、缓存常用密钥、批量脱敏等方式优化到用户感知不到的程度,相比数据泄露的风险,这点性能开销是完全可以接受的。 -
密钥丢了怎么办?
答:密钥都存在专门的KMS中,KMS会做多重异地备份,就算单个节点故障也不会丢失密钥,而且KMS会定期轮换密钥,就算旧密钥泄露,也只会影响一小部分数据。 -
脱敏会不会影响Agent的回答质量?
答:只要规则设计合理,就不会影响回答质量。比如对于不需要传给大模型的敏感信息直接脱敏,对于需要用到的敏感信息用令牌化替换,Harness在调用内部工具的时候再映射回真实值,大模型拿到的是令牌,不会影响处理结果。 -
我已经用了加密的数据库,还需要做Harness层面的存储加密吗?
答:需要,数据库的加密是静态加密,是数据库层面的,只要有权限访问数据库就能拿到明文。Harness层面的字段级加密是应用层的,就算数据库被拖库、管理员账号泄露,没有Harness的密钥也解不开敏感字段,是双重保险。
扩展阅读 & 参考资料
- OWASP Top 10 for Large Language Model Applications: https://owasp.org/www-project-top-10-for-large-language-model-applications/
- TLS 1.3 RFC 8446: https://datatracker.ietf.org/doc/html/rfc8446
- AES 加密算法标准 FIPS 197: https://csrc.nist.gov/publications/detail/fips/197/final
- 《中华人民共和国个人信息保护法》: http://www.npc.gov.cn/npc/c30834/202108/27137e4b3e8b49b88ff11c03a8ad16ff.shtml
- LangChain Security 官方文档: https://python.langchain.com/docs/guides/security
- 等保2.0 第三级安全要求: https://www.miit.gov.cn/jgsj/kjs/gzdt/art/2019/art_019d7d3f7a9e4f3d9d3e7e8d9c7b6a5.html
更多推荐


所有评论(0)