百度小程序已经在百度开源联盟的多家宿主APP上运行,为了保证小程序框架、小程序、宿主APP等业务方相互之间的通信服务不被恶意攻击,运营类活动不被薅羊毛,基于最新的TLS1.3的协议标准,百度小程序研发团队推出了一套安全防固多APP、多业务的百度安全通信协议方案。下面将从握手到加密业务传输各个阶段,介绍相关算法、技术选型、Server与Client的实现方案。
随着移动互联网的高速发展,智能手机的全面普及,各式各样的APP出现,方便了人们的生活,同时也带来了巨大的安全风险。APP主要面临的风险:
面对以上这些攻击手段,最终第三方会通过网络骗取到服务器的信任,窃取一些有效信息,最后威胁平台和用户的利益,因此,网络通信安全的意识也受到各方关注。国内外的网络服务提供商逐渐提供了全站的安全通信服务,如苹果公司在2017年1月1日要求所有提审的APP必须启用App Transport Security(ATS)安全功能,强制使用HTTPS,否则无法通过审核;国内主流大厂百度、阿里、腾讯等,已经全站部署HTTPS。虽然有了HTTPS的加持,但是并不意味着网络通信就安全,常见的加密通信协议都在业务层,包体加密、包头明文,这样通过抓包方式还是能获取到明文的请求头、返回数据。百度智能小程序的开源方案已经在多个开源宿主APP上落地(比如:爱奇艺、小红书、百度地图等),为了保证百度智能小程序在每个宿主APP上通信安全,需要一套小程序的请求从Client到Server端数据全程加密保护,于是诞生出 bdtls。
基于百度智能小程序自身业务特点,涉及到小程序开发者、宿主APP开发者、小程序框架开发者多方参与(后续非小程序业务场景),在安全性、性能和可用性等指标上存在相互影响,因此设计出来的安全协议必须满足以下几点:
通过分析业界公开的安全通信协议--TLS(在2018年前,正式最高版本为1.2),发现在安全、性能等方面已经跟不上如今的互联网时代,在建立握手连接过程中需要2-RTT,导致额外的网络延迟;同时,TLS1.2还存在许多不安全的加密算法:
对比即将发布的TLS1.3协议有三个主要的改进目标:兼容、安全、性能,正好满足我们的需求,于是我们基于TLS1.3的草案标准,设计了百度自己的安全通信协议-- bdtls。
3.1 总体架构
bdtls 协议的实现参考 TLS1.3 协议规范,不依赖某个特定的网络传输协议。不同的是,TLS 过程处于传输层和网络层之间,对传输层的数据进行加密,而 bdtls 处于应用层和传输层之间,对应用层数据进行加密,不影响原有的网络策略。bdtls 架构主要分两部分功能:握手(握手阶段)和加密数据传输(业务阶段),这两部都是基于以下协议完成双方通信。
3.2 协议介绍
借鉴TLS1.3的设计原理,精简了部分子协议及字段,保留了Record、Handshake、Application、Alert四个协议,下面是这些协议之间的关系如下图:
结合以上协议,下面是bdtls握手阶段和加密数据传输阶段的过程图: 对比TLS1.2握手协商阶段,密码套件大幅度简化,压缩了“Hello”协商过程,删除了“Key Exchange”消息,将握手时间减少“1-RTT”(消息往返),效率提升一倍。bdtls在Handshake协议加入扩展实现了TLS1.3里面标准的“1-RTT”握手,客户端在“Client Hello”消息里直接用“supported_groups”带上支持的曲线,比如 P-256、x25519,用“key_share”带上曲线对应的客户端公钥参数,用“signature_algorithms”带上签名算法。服务器收到后在这些扩展里选定一个曲线和参数,再用“key_share”扩展返回服务器这边的公钥参数,就实现了双方的密钥交换。
TLS1.3 还引入了“0-RTT”握手,利用“pre_shared_key”和“early_data”扩展,在 TCP 连接后立即就建立安全连接发送加密消息,不过“0-RTT”的实现依赖长期保存的密钥ticket_key,如果ticket_key泄露,那么加密的数据就不太安全了,所以“0-RTT”密钥协商过程中,需要提高前向安全性,本次不再详细赘述,bdtls结合自身业务的需要,仅提供“1-RTT”握手。
Handshake协议主要工作就是用于Client和Server握手协商,协商出一个对称加密密钥 Key 以及其他密码材料为后面的数据加密传输做准备。要实现安全的握手,这里需要注意两个问题:
第一个问题涉及密钥如何传输,需要用到密钥交换算法;第二个问题涉及密钥信息被伪造、篡改,信息是否完整,需要用到数字签名算法。这在TLS1.3里提供了多种密钥交换和数字签名算法,我们可以根据自己的业务诉求和实现成本选择合适的算法。
问题1解答:对于密钥交换的问题,只能选择非对称加密算法,TLS提供密钥协商算法有:DH、ECDH、RSA、ECC、PFS方式的(DHE、ECDHE)等,bdtls选择DHE算法,它的核心是取模运算,具有单向不可逆性,数据“前向安全”,关键在于“E”表示的临时性(ephemeral),每次交换密钥时双方的私钥都是随机选择、临时生成的,用完就扔掉,下次通信不会再使用,相当于“一次一密”。所以,即使攻击者破解了某一次的私钥,其他通信过程的私钥仍然是安全的,不会被解密,实现了“前向安全”。有没有比 DHE 速度更快,可逆难度更难的算法吗?ECDHE,基于ECC和DHE基础上进行组合,就是把 DHE 算法里整数域的离散对数,替换成了椭圆曲线上的离散对数,这种椭圆曲线离散对数的计算难度比普通的离散对数更大,所以 ECDHE 的安全性比 DHE 还要高,更能够抵御黑客的攻击。但是基于百度智能小程序当时的业务,选择了实现成本较低的DHE算法,后面密钥交换会逐步升级成ECDHE。下面简单介绍DH算法基础实现:
明白了以上模运算的交换流程,我们就能知道它是怎么用来传递钥匙的了,过程如下:
小结:bdtls密钥协商算法套件:DHE,协商出共享密钥。
问题2解答:通过DHE算法得到的共享密钥,并不能让Client和Server双方安全通信,攻击者可以在密钥交换前冒充对Client,与Server分别完成密钥交换,并进行正常的认证加密通信,这时通信双方可能是难以察觉的,这就带来了数据泄露、被篡改的风险,这种攻击称为中间人攻击(Man-In-The-Middle attack),是需要对密钥信息进行认证。当前对消息认证有两种方式:基于消息认证码(Message Authentication Code)的对称认证(简称MAC)和基于数字签名的非对称认证,消息认证码无法防止否认,存在密钥配送问题,而数字签名具有防止否认特性,不存在密钥配送问题,这样数字签名与密钥协商搭配更合适,常用的数字签名算法有:RSA、ELGamal、DSA、ECDSA等,在bdtls中采用数字签名算法为RSA,下面是RSA签名与验签的流程:
一般来说身份认证是需要相互验证,但在实际的通信过程中,只要保证通信一方签名的协商数据不被中间人攻击就可以了,bdtls只对Client做认证。上面将密钥协商(DHE)与数字签名(RSA)结合起来,实现了一套带认证的密钥协商方案:
握手前的工作:
握手中的工作:
握手后的工作:
小结:bdtls数字签名算法套件:RSA,私钥签名,公钥验签。
Alert用来通知对方本次数据交互中出现的问题,协议参照TLS协议,分为warning和fatal两个错误级别。服务端的Alert返回包含两类:
握手完成后,需要Client与业务Server通信,将业务数据输入到record层,进行分段、MAC、加密操作。通过抓包工具,数据格式如下: http(https)的body请求体里是密文,response里也是密文,通过协商共享密钥将整个传输内容全部加密,对于第三方的攻击完全黑盒。业务传输过程中,由于非对称加密算法效率比对称加密算法的要低,影响网络传输,所以业务传输使用的加密算法一般选择对称算法。TLS 里有非常多的对称加密算法可供选择,比如:RC4、DES、3DES、AES、ChaCha20 等,但前三种算法都被认为是不安全的,通常都禁止使用,当前TLS1.3提供的只有 AES 和 ChaCha20。AES 是“高级加密标准”(Advanced Encryption Standard),密钥长度可以是 128、192 或 256。它是 DES 算法的替代者,安全强度很高,性能也很好,而且有的硬件还会做特殊优化,所以非常流行,是应用最广泛的对称加密算法。ChaCha20 是 Google 设计的另一种加密算法,密钥长度固定为 256 位,优势没有AES明显。bdtls加密算法选择AES,分组密码选择GCM。
对于数据完整性校验,需要用到Hash散列算法,常见的Hash散列算法有:MD5、SHA-0、SHA-1、SHA-2、SHA-3,MD5、SHA-0、SHA-1这三个已经不安全了,比较常用的是SHA-2家族的SHA-256、SHA-512,还未被攻破,SHA-3发布比较晚,普及比较慢。bdtls数据完整性校验算法选择SHA-256。
小结:根据对称加密与完整性校验算法的性能对比,bdtls业务层使用加密与完整性算法套件:AES-128-GCM-SHA256。
Sever端实现方案
服务端的实现方案分为两个部分:握手服务和加解密服务。
握手阶段主要解决问题是安全的协商出一份密钥,协商部分的机制和流程可以参考 “3.2.1 Handshake协议” 。除此之外,握手服务在做了以下三件事情:
首先,宿主身份校验。bdtls 不仅支持手百宿主,还支持所有开源联盟中的宿主,如爱奇艺、小红书甚至 oppo、vivo 浏览器等。如何安全和多个宿主进行握手同时防止宿主私下里交换密钥信息,是这一步需要考虑的问题。我们的解决方案是对不同的宿主签发不同的密钥对,并在协议中增加宿主身份标识,通过身份标识解决密钥对的匹配问题,并在握完手之后生成的 skr 中写入宿主身份信息。在后续的业务请求阶段,会再次校验 skr 的宿主身份信息和请求数据中的宿主身份信息是否匹配。通过以上的一整套流程,就完成了对宿主身份的校验。
然后,包签名校验。在实际使用中,我们发现一个宿主可能会衍生出不同的包,如正常发行版、企业版等。由于密钥对签发的最小单位是宿主,一个宿主下不同APP使用的都是同一份配置,这会导致两个问题:
1)服务端无法区分流量来源;
2)宿主开发者滥用宿主信息,造成APP身份不可信。
我们的解决方案是针对每一个接入的APP强制进行包签名校验。包签名对于正式发版到应用商店的APP包是唯一的身份标识,通过对包签名的校验,就确保了每一个握手的客户端都是一个可信任的客户端。
最后,业务方校验。按照业务纬度,通过对业务方的校验,没有授信的业务方请求,就会在握手服务中被拦截;加上对业务方校验,建立安全业务隔离机制,增强安全防固功能。业务方可以根据自己的需求,选择统一网关(bdtls 握手服务)和业务方网关(bdtls SDK)其中的一种模式,进行握手服务。
此外需要说明的是,无论是手百,还是开源联盟宿主,无论是内部业务还是外部业务,使用的都是同一个握手服务,协商生成有具备一定有效期的密钥 master secret,并用业务相应的密钥将其加密(即 skr),返回给客户端。
业务请求阶段,根据握手的网关服务模式,提供了两种接入方式:
在对业务数据进行加解密的过程中,主要的流程如下:
4.2 客户端实现方案
图1和图2,代表两个不同业务方的bdtls请求,不同点在于多通道的握手方式,图1使用统一握手通道服务(小程序的握手服务),业务方不需要在自己的Server端部署握手服务,仅需要在客户端设置统一握手模式,就可以用统一握手的密钥对请求参数加密、返回数据解密。图2使用支付的握手通道服务(业务方自己的握手服务),业务方需要在自己的Server端部署握手服务(业务方网关),同时还要在客户端设置当前业务方的access key。除了多通道握手方式支持外,客户端还采用了以下策略,保证bdtls稳定、高效地运行。
问题:
相同的业务方同时发起多个bdtls业务请求时,首次没有密钥,必须先通过握手这个关卡获取到,这时在多线程下,会造成多次冗余的握手情况,对于bdtls网关server的QPS会增大,这样以来,我们的后端需要扩容更多的服务器。因此,客户端在密钥有效期内,仅需要保证一次有效的握手就可以降低握手频次,节省bdtls网关server的开销。
方案:
问题:
每次握手后,得到密钥数据(密钥secretKey、密钥标识skr、密钥有效时间、DH groupID),如果放在内存中进行管理,APP下次冷启动,这些密钥数据丢失,显然密钥的有效期时间作用域只在APP的生命周期内有效,客户端需重新发起一次握手请求,这样以来会造成多余无效请求。
方案:
bdtls作为百度智能小程序业务的基建能力,不仅在小程序的场景有应用,而且在百度内部其他业务也被逐步推广应用。
最近,通过国家网络安全攻防演练(HVV)项目,健康宝小程序百度客户端经受住外部严格的攻击,成功守住百度的安全高地,本次安全防固部分使用了bdtls安全通信协议,从而证明了bdtls技术在安全上是可靠的。
bdtls 是参考 TLS1.3 草案标准设计实现的,使用 DHE 来做密钥协商,RSA 进行数字签名,AES-GCM 作为对称加密算法来对业务数据包进行认证加密,使用 HKDF 进行密钥扩展,摘要算法为 SHA256。另外,结合具体的使用场景,bdtls 在 TLS1.3 的基础上主要做了以下几方面的工作:
在密钥协商过程中,TLS1.3 提供了当前性能最优的密钥协商套件算法-- ECDHE-ECDSA ,而bdtls提供的密钥协商算法-- DHE-RSA 还需升级。同时,bdtls已经完全脱离小程序业务,可作为百度内部中台化的安全服务组件,提供给更多的业务使用。
END
参考资料:
[1] TLS 协议分析与现代加密通信协议设计
[2]The Transport Layer Security (TLS) Protocol Version 1.3
[3] TLS 1.2/1.3 加密原理
[4] 基于 TLS 1.3的微信安全通信协议 mmtls
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/Jd5A4wWuusGdJGQiia9rRA
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。