当前位置:网站首页>基于 TLS 1.3的百度安全通信协议 bdtls 介绍
基于 TLS 1.3的百度安全通信协议 bdtls 介绍
2022-08-11 11:42:00 【InfoQ】

01 前言
- 静态攻击:APP被反编译分析源码后,被破解、篡改、二次打包、仿冒/钓鱼等攻击手段;
- 动态攻击:APP在运行期,用户操作行为不可控,通过模拟器、多开器、加速器、注入攻击、动态调试(抓包)、设备篡改、位置欺诈等攻击手段;
- 业务作弊:黑产用户通常在APP注册、登录、运营活动、页面爬虫等场景进行批量化、机器化的一些手段操作;
02 目标
- 安全性:支持双向认证,通信内容加密;支持前向安全,若发生密钥泄露,也不能破解出历史请求的数据;
- 低延迟:足够高的性能,对内容的加解密性能损耗要小于请求整体耗时10%;
- 可用性:支持分级(分业务、宿主)降级服务、快速恢复服务;
- 可扩展:支持业务分级通信、支持分App认证、协议升级(可替换安全等级更高的密码套件);
- 伪随机数函数PRF;
- RC4、DES 对称加密算法;
- ECB、CBC 等传统分组模式;
- MD5、SHA1、SHA-224 摘要算法;
- RSA、DH 密钥交换算法和许多命名曲线;
- 记录协议里使用压缩算法;
03 bdtls 协议设计


- Handshake协议:握手协议,用于Client 和 网关Server之间的握手阶段,协商 bdtls 版本号、随机数、密码套件等信息,然后交换证书和密钥参数,最终双方协商得到会话密钥,用于后续的混合加密系统;
- Application协议:应用协议,用于Client 和 业务Server之间的业务阶段,在加密数据传输阶段,构造加密传输数据、解析response的加密业务数据,是Record协议的上层协议;
- Alert协议:警报协议,用于握手阶段、业务阶段,Server以提醒、错误方式通知到Client端,进行关闭连接、降级、恢复等操作;
- Record协议:记录协议,规定了 TLS 收发数据的基本单位:记录(record)。用于握手阶段、业务阶段,负责数据的发送,数据分割、压缩、加密,然后发给底层的协议(TCP)进行处理;接收方对数据解密、校验、解压、聚合,再发给上层的协议(Handshake、Application、Alert);

3.2.1 Handshake协议
- 问题1:如何安全地进行密钥交换?
- 问题2:如何防止密钥信息被伪造?

- Alice和Bob两人共同约定底数G、模数P(G、P要求是质数,比如:G = 5、P = 17),这两个数是公开的;
- Alice随便选择一个整数A(比如:A = 10),鲍Bob也随便选择一个整数B(比如:B = 5),他们随机选择整数作为私钥,这两个数是严格保密的;
- 有了DH的私钥,Alice通过函数:G ^ A % P 计算幂α(α = 9),Bob通过函数:G ^ B % P 计算幂β(β = 14),各自计算出来的幂作为公钥,这两个数是可以公开的,因为根据离散对数的原理,从真数反向计算对数 a 和 b 是非常困难的;
- Alice和Bob互相交换各自的DH 公钥α、β;
- Alice通过函数:β ^ A % P,计算出共享密钥K(K = 8),Bob通过函数:α ^ B % P计算出共享密钥K(K = 8);
- 最后Alice和Bob分别计算完后,得到相同的数字,这个结果就可以当作他们之间的钥匙。整个通信过程没人传递过钥匙,但双方都拿到了同样的钥匙。对窃听者来说,只偷听到的DH 公钥,因为这种运算是不可逆的,所以窃听者也白听。这个钥匙叫会话密钥,双方的共享密钥,也就是TLS里面的Pre-Master。

- 首先由Server生成RSA的公私钥对(rsa_publickey、rsa_privatekey);
- Server将RSA公钥(rsa_publickey)发送给Client,私钥(rsa_privatekey)自己保留;
- Client通过DHE算法,生成协商前的DH私钥(client_dhe_privatekey)、公钥(client_dhe_publickey)、加密公钥(client_encrypt_dhe_publickey:RSA加密生成)。
- Server接收到Client的加密后DH公钥(client_encrypt_dhe_publickey),RSA解密出client_dhe_publickey;
- Server通过DHE算法,生成协商前的DH私钥(server_dhe_privatekey)、公钥(server_dhe_publickey)、加密公钥(server_encrypt_dhe_publickey:RSA加密生成);
- Server将client_dhe_publickey与server_dhe_privatekey协商后,得到共享密钥master_secret,是Server进行业务加解密所需要的对称密钥;
- Server再将master_secret通过AES算法,得到加密后的skr,Server在业务阶段解密出skr,得到master_secret;
- Server将server_encrypt_dhe_publickey进行hash后,通过RSA的私钥进行签名。
- Client解密出Server协商后的server_dhe_publickey;
- Client将server_dhe_publickey进行hash后,通过RSA的公钥进行签名;
- 验签通过后,将server_dhe_publickey与client_dhe_privatekey协商后,得到共享密钥master_secret,是Client进行业务加解密所需要的对称密钥;
- 验签不通过,握手请求中断,业务请求失败。
3.2.2 Alert协议
- 服务端对客户端当前会话周期不信任,此时客户端应重新发起握手,交换新的加密密钥。
- 服务端对客户端身份不信任,客户端应该直接报错,不再尝试重新握手。
3.2.3 Application协议

04 实现方案

4.1.1 握手服务
- 宿主身份校验
- 包签名校验
- 业务方校验
4.1.2 加解密服务
- 统一网关接入:内务服务可以选择挂载到小程序服务网关之下(服务网关已经集成 bdtls 插件),即可无侵入的拥有bdtls数据加解密功能;
- 业务方网关接入:bdtls提供了加解密的SDK,外部业务(比如:支付业务)通过集成SDK的方式实现对请求数据的解密和响应数据的解密。
- skr 解密:业务方利用预先分配的密钥将 skr 解密,获得协商密钥和过期时间等信息;
- skr 过期校验:如果发现该协商密钥密钥已经过期,则返回 skr 过期的 Alert 信息,此时客户端会重新发起握手;
- 加解密:利用解密出的 secretKey 对业务数据进行解密和加密。

4.2.1 策略1:多路握手合并
- 为每个业务分配一个task,task管理自己的握手通路;
- 为每个握手通路独立分配一个常驻线程,保证握手通路安全;
- 为每个握手通路增加“哨兵”机制,检测握手的状态;
- 握手中,所有的即将发起的业务请求任务都被加入到握手的block队列中;
- 等握手结束,握手的block队列将前面拦截的业务请求任务逐一分发。
4.2.2 策略2:密钥数据缓存
- 将密钥数据组合归档成一个可持久化的对象;
- 为每组密钥数据按业务方分配一个缓存密钥的key;
- 按照缓存密钥的key,将归档的密钥对象存储到缓存区;
- 下次APP冷启动,优选从缓存区获取密钥数据进行解档为密钥对象,业务方进行bdtls请求时,密钥有效,就不需要发起握手请求,直接对业务的请求body体加密。
05 最佳实践
- 小程序所有开源宿主APP;
- 小程序核心业务:PMS(小程序包管理)、授权、swan.request端能力等;
- 百度内部业务:支付(聚合收银台)、任务SDK(运营)、搜索影视第三方资源转码等。
06 小结
- 轻量级。砍掉了客户端认证相关的内容;直接内置签名公钥,避免证书交换环节,减少验证时网络交换次数。
- 安全性。选用的基础密码组件均是 TLS1.3 推荐、安全性高的密码组件。
- 高可用性。服务器的过载保护,确保服务器能够在容灾模式下提供安全级别稍低的有损服务。
- 可扩展性。支持多宿主、多业务进行加解密服务。
边栏推荐
猜你喜欢

EastWave Application: Live Demonstration of Negative Refraction Phenomenon

SM5200原厂SOT23-6 500mA 线性锂电子替代芯片

Hugging Face快速入门(重点讲解模型(Transformers)和数据集部分(Datasets))

编程手册管理软件-涉及各类编程语言

pip安装后仍有ImportError No module named XX问题解决

【黑马早报】抖音否认与头部主播签对赌协议;阿迪达斯CEO承认在中国犯了错;网易云社交App心遇被指涉黄;联通董事长称5G资费比点外卖还便宜

RTP协议浅析

兴盛优选:时序数据如何高效处理?

2022-08-10北京华为OD机试真题分享

五分钟教你内网穿透
随机推荐
基于数据库实现通用异步缓存系统
StratoVirt 中的虚拟网卡是如何实现的?
分布式时间槽elastic timeslot架构设计
PG--核心技术--HOT
关于数据权限的设计
自动售货机
观视界Grandvision EDI项目案例
低延时实时音视频在5G远程操控场景的应用实践
蚂蚁集团开源密码学基础库 BabaSSL 正式更名“铜锁”
全网最全的权限系统设计方案(图解)
老生常谈:面试必问“三次握手,四次挥手”这么讲,保证你忘不了
FS2956A 输入8-120V 用于液晶仪表5V-USB 充电口方案
困扰所有SAP顾问多年的问题终于解决了
【LeetCode 周赛】第84场双周赛
简单记录openguass_exporter对接prometheus通过grafanai来实现可视化监控
SQL Runtime SLX中的优化设计有哪些?
img图片加载错误时显示默认图片
Web3 创业者指南:如何为你的产品构建一个去中心化社区?
LeetCode69:牛顿迭代法和二分法求解x的平方根
或命名“狙击手” 长安全新皮卡申报图