为了保证推理会话数据的传输安全,在默认的网络层加密方案基础上,方舟安全团队为在线推理的会话数据提供了端到端应用层加密方案,支持用户通过 SDK 在本地对推理会话的内容进行加密。
为什么需要网络层和应用层的双层加密?请看这个形象的比喻:网络层的加密就像给文件加了一层保险盒,而应用层加密就如同再给保险盒上了一把锁,双重保险确保即便有人拦截了这个文件,也无从打开它。
方案介绍#
会话数据应用层加密的具体流程,如下面的视频所示:
用户可以依靠 SDK 在本地私域对推理会话内容进行加密,会话密文安全传输至沙箱后,仅在安全沙箱内存中解密成明文,用于模型推理。安全沙箱内的模型推理结束后,生成的推理结果会由安全沙箱加密,以密文的形式从安全沙箱传输至用户私域,最终由用户通过 SDK 在本地解密,获取明文推理结果。
使用说明#
推理会话数据应用层加密功能集成在火山 SDK 中,仅需增加几行代码,即可免费使用该功能,示例代码请参见加密数据。
| SDK 语言 | 功能说明 | 上线时间 |
|---|---|---|
| Python | 1.0.104 正式支持应用层端到端加密能力 | 2024-10-10 |
| Python | 1.0.111 更新 Cryptography 依赖版本至最新 | 2024-11-29 |
| Python | 1.0.117 更新支持 Doubao-vision 系列模型请求 | 2024-12-23 |
| Python | 1.0.119 支持 API-Key 请求证书,本地缓存证书 | 2025-01-02 |
| Python | 1.0.121-125 暂不支持 AK/SK 获取证书 | 2025-01-16 |
| Python | 1.0.126 优先使用 API-Key 获取证书 | 2025-02-27 |
| Python | 3.0.3 支持 batch_chat API | 2025-05-22 |
| Python | 3.0.15 Cryptography 最低支持版本为 42.0.0,对于chat api风控情况输出导致的解密 exception 的修复 | 2025-06-19 |
| Python | 4.0.5 修复并发情况下本地证书目录冲突异常;修复会话加密情况下对 Chat 数据的内存修改 | 2025-07-10 |
| Python | 4.0.13 由于 CVE-2024-12797,火山SDK没有使用受 CVE 影响的 feature,更新 Cryptography 依赖版本最低为 44.0.1 | 2025-08-22 |
| Python | 4.0.16 缓存目录更新为当前用户的目录 | 2025-09-04 |
| Python | 4.0.22 解决部分非流式请求结果解密失败问题 | 2025-09-25 |
| Python | 4.0.25 解决部分非流式请求结果解密失败问题,TKS 加解密支持; batch chat加密功能暂时存在问题 | 2025-10-16 |
| Python | 4.0.29 解决非流式请求结果解密失败问题 / batch chat 加密请求失败问题 | 2025-10-27 |
| Python | 4.0.30 校验本地的数据是否是base64 / http / https URL | 2025-10-30 |
| Java | 0.2.45 支持 API-Key 请求 Chat 接口进行加解密请求 | 2025-11-13 |
| Java | 0.2.50 修复普通聊天请求对于 bouncycastle 软件包的依赖问题 | 2025-12-04 |
原理说明#
用 Alice 和 Bob 分别代表客户 SDK 和推理模型所在的安全沙箱容器,基本原理是利用 ECIES 实现一个 0-RTT 协议(即让客户端在第一条消息中就发送加密的 Payload 的协议),协议如下:
- Alice 通过公开渠道获得 Bob 的公钥
PK[Bob],该公钥须是椭圆曲线公钥。 - Alice 生成随机数
r,通过和椭圆曲线基点相乘获得R = r × G,R为会话密钥的密文。会话密钥S = r × PK[Bob],使用会话密钥S衍生密钥加密明文得到会话密文Payload。将(R, Payload)发送给 Bob。 - Bob 收到
R后利用自己的私钥解密会话密钥SK[Bob] × R = SK[Bob] × r × G = S,使用S衍生密钥解密密文Payload得到会话明文。
验证说明#
验证消息加密#
动作:SDK 调用时,会对其中的 content 字段进行加密并使用 base64 编码。
验证:通过抓包工具的 HTTPS 抓包,查看请求体 body 中的会话数据是否是密文。
验证证书获取#
动作:使用 AK/SK 初始化客户端 SDK ,每个推理接入点第一次请求会话数据应用层加密时,会调用 GetEndpointCertificate 接口,用于获取该接入点对应的证书。
验证:可以在 云审计 查看 GetEndpointCertificate 接口的调用日志。
证书说明#
该证书仅适用于火山方舟平台发布的文生文对话模型和 Doubao-vision 系列图片理解模型(模型发布公告)。
客户从公开渠道获得的椭圆曲线公钥统一来自于豆包模型的自签名证书,豆包模型均使用同一份公钥,对应的私钥托管在 火山私有 CA 服务,使用的是 P-256 椭圆曲线。
豆包模型的证书可以通过方舟 OpenAPI 获取,接口是 GetEndpointCertificate。
证书详情:
| 证书的密钥算法 | ECDSA 256 | |
|---|---|---|
| 证书的签名算法 | ECDSA-SHA256 | |
| 证书的序列号 | 1BC6311337412676230446127358F676227CFEE3 | |
| 证书的主体信息 | 国家(C) | CN |
| 企业名称(O) | Volcano Engine Ark | |
| 部门(OU) | Security | |
| 城市(L) | Beijing | |
| 省份(ST) | Beijing | |
| 公用名(CN) | MaaS Crypto SDK Online | |
| 证书信息 | 叶子证书 |
|
| 中间根证书 |
|
|
| 根证书 |
|
|
| 证书的创建时间 | 1704264758 | |
| 证书的过期时间 | 1862117558 | |
| 证书的生效时间 | 1704264758 | |
| 证书的有效时长 | 5 年 | |
叶子证书信息:
中间根证书和根证书信息:
性能说明#
在 Intel(R) Xeon(R) Platinum 8260 CPU @ 2.40GHz 单核情况下,按照消息长度 256 字节计算,一次对话请求的加解密额外耗时平均为 0.5786 ms。