1. 概述
针对智能设备上部署的移动应用(App,即应用客户端),当其与对应的应用服务器开展交互时,若能构建一套统一的身份认证和密钥分发机制,则有助于用户避免重复注册操作,进而优化用户体验;同时,还能有效降低开发与管理成本,促进开放API生态发展。
对于平台方而言,向第三方应用提供统一的认证方案具有至关重要的意义。从系统架构设计与安全管控层面而言,统一的认证方案不仅是保障平台与第三方应用之间实现安全交互的重要机制,更是构建开放API生态体系的核心基础。
然而,现有广泛使用的OAuth2.0框架以及密钥协商和分发方案,都存在一定程度的局限性。
2. 现有方案及局限性
2.1. OAuth2.0框架
OAuth 2.0是目前广泛使用的授权框架,用于解决第三方应用安全访问用户资源的问题(如社交登录、API调用等)。它通过定义标准化流程,实现了用户、资源所有者(如用户)、客户端(如第三方应用)和授权服务器之间的安全交互。
OAuth 2.0的典型应用场景包括第三方登录(身份认证),如用微信、支付宝、微博账号登录其他App;以及API安全访问,如调用Google API访问。
华为、小米等手机厂商同样支持OAuth 2.0,可应用于多种典型应用场景,同时结合移动端特性优化了授权流程。以华为OAuth 2.0服务为例,一方面支持华为官方应用(深度集成),从而在华为自有生态中广泛使用,如华为云服务、华为游戏中心、华为应用市场、华为视频、华为音乐等华为自家应用;另一方面支持第三方应用(非华为官方开发),允许第三方开发者集成华为账号登录和提供华为生态API访问,如美团、淘宝、京东、小红书等第三方应用。
但是,OAuth 2.0框架至少存在如下缺点和局限性:
1. 用户体验影响: 在最常见使用的授权码模式下,必须要拉起授权界面并让用户确认授权,而这会影响用户使用体验。
2. 使用设备受限: 不能适用没有人机交互的智能设备,如物联网(IoT)设备、智能电视等,不支持机器对机器(M2M)场景。
3. 传输数据泄露风险: Code、 Access Token在传输过程中的泄露风险,高度依赖SSL协议支持。
4. 本地存储风险:智能设备上的令牌存储面临安全风险。
5. 令牌换取复杂:第三方应用服务器需要用客户端发送来的code换取Access Token和Refresh Token,实现过程复杂。
6. 无内置加密:令牌传输需依赖HTTPS,框架本身不提供加密支持。
2.2. 密钥协商协议
密钥协商协议是密码学中允许通信双方通过公开信道(如互联网)安全建立共享密钥的协议,其核心在于无需预先共享私密信息,仅通过公开参数和交互计算即可生成会话密钥。与密钥分发(由一方生成密钥并传输)不同,密钥协商协议强调双方共同参与密钥生成,提升安全性。
常见密钥协商协议有Diffie-Hellman(DH)协议、ECDH(椭圆曲线 Diffie-Hellman)、PSK(预共享密钥)协议等。
典型应用场景包括:TLS/SS,结合DH/ECDH实现HTTPS安全连接;IPSec VPN,使用IKE协议协商加密密钥;物联网设备,轻量级PSK或ECC-based协议(如EDHOC)。
密钥协商协议至少存在如下缺点和局限性:
1. 易受中间人攻击: 攻击者可以伪装成通信双方,分别与双方建立密钥协商过程,从而截获、篡改或伪造通信内容。
2. 计算开销大:所有密钥协商协议均需执行密码学运算(如模幂、椭圆曲线点乘),计算量较大,尤其在资源受限的设备(如物联网设备、嵌入式系统)中,可能难以支持复杂的密钥协商算法(如Diffie-Hellman、ECDH等)。
3. 参数选择影响:以DH协议为例,若协议中使用的大素数p选择不当(如p的因子较小),可能导致离散对数问题被轻易破解,降低安全性。
4. 难以满足超低延迟要求: 密钥协商需要多轮消息交互(如DH协议至少2轮)和复杂计算,会引入额外的通信延迟和处理延迟,无法满足对实时性要求极高的场景。
2.3. 密钥分发方案
针对同一用户,给App(应用客户端)和应用服务器分别分发相同的用户密钥,以便App(应用客户端)与应用服务器之间能使用该相同的用户密钥进行认证和数据加解密等操作。
典型方案如微信维护了一个用户维度的密钥,用于小程序和开发者服务器通信时进行加密和签名,但是,该方案存在大量的问题,包括用户密钥泄漏风险、接口频繁调用问题、只能由小程序发起加密的问题、存储资源占用和性能消耗问题、密钥安全存储问题、密钥处理过程浪费问题、用户密钥不能及时更换问题、对过期密钥的不当处理等,具体可参见《小程序密钥接口存在的问题及改进方案》,在此不再赘述。
3. 改进方案
3.1. 术语和定义
在此,提出改进方案,旨在通过技术创新和架构优化,提出一套更安全、高效、灵活的统一认证和密钥分发解决方案。
为了理解上的方便和通用,下面使用更加通用的术语作介绍和说明,具体包括:
智能设备:具有数据计算处理功能的设备,包括智能手机、智能电视、平板电脑等用户智能设备,也包括智能手表、智能手环、智能家居等物联网智能设备。
App客户端:也称为应用客户端,安装在智能设备上的App,用户通过网络访问该App客户端对应的应用服务器,并且获取该对应的应用服务器提供的应用数据和服务。
AppID:也称为应用标识,用于唯一地识别应用服务器的标识,也用于唯一地识别App客户端。
3.2. 网络架构
如下图所示,网络架构中有平台服务端、智能设备、App客户端和第三方应用服务器。
在实际网络应用环境中,可以包括多个智能设备,每个智能设备上分别运行多个App客户端,各个App客户端分别与各自对应的第三方应用服务器进行网络通信,各个第三方应用服务器又分别与平台服务端进行网络通信。****
3.3. 本方案核心思路
平台服务端维护每个账户的主密钥,并且分发给对应的智能设备,智能设备根据主密钥和各App客户端的应用标识(AppID)以实现向各App客户端生成和提供用户加密密钥,平台服务端根据各账户的主密钥和各第三方应用服务器的应用标识(AppID)以实现向各应用服务器生成和提供用户加密密钥。
3.4. 本方案详细步骤
改进方案详细过程如下:
1、平台服务端维护用户主密钥列表,即维护每个用户的用户账号和对应的主密钥。
2、智能设备上的用户账号登录平台服务端,属于现有流程。
3、平台服务端将该用户账号的主密钥下发给智能设备,智能设备安全存储主密钥,各App客户端不可直接获取该主密钥。
4、App客户端启动对第三方应用服务器的登录时,向智能设备发送获取用户加密密钥的调用请求。
5、以Android为例,智能设备对App客户端进行可信验证(如数字签名验证、可信来源验证等),确保该App客户端可信。
6、智能设备通过调用相应的Binder接口方法,获取APP客户端的AppID(包名)。
7、智能设备根据主密钥和AppID生成用户加密密钥,因为AppID是独一无二的,可以确保生成的用户加密密钥是用于该APP客户端的密钥。
8、智能设备将用户账号和用户加密密钥返回给App客户端。
9、App客户端向第三方应用服务器发送用户账号以请求应用服务,注意,不发送用户加密密钥。
10、第三方应用服务器向平台服务端发送用户账号请求获取用户加密密钥。
11、平台服务端在接收到第三方应用服务器发送的用户账号之后,根据用户账号查找到用户对应的主密钥,并且根据主密钥和第三方应用服务器的AppID生成用户加密密钥,由此生成的用户加密密钥和APP客户端保存的用户加密密钥会一致。
12、平台服务端向第三方应用服务器返回用户加密密钥。
13、App客户端与第三方应用服务器根据相一致的用户加密密钥进行身份认证和数据加密。
对于用户账号,可针对每个App客户端生成对应的OpenID,以保障安全和用户隐私性。
在生成用户加密密钥时,生成要素除了主密钥、AppID,还可以增加时间戳、随机因子,以增加安全性,在此不赘述。
4. 本改进方案的优点
本改进方案完美地解决了现有方案存在的诸多不足和局限,具有显著优势,主要优点如下:
1. 极致简化用户交互: 在主流授权场景下,无需强制拉起授权确认界面,大幅减少用户操作干预,显著提升使用体验的流畅性。
2. 多 设备适配 和支持 : 除了支持需要人机交互的智能设备(如智能手机),同时支持无需人机交互的智能终端(如物联网设备、智能电视等),突破设备类型限制,例如,在智能电视上安装好的App即可关联用户登录使用,无需人机交互。
3. 可简化预安装流程 : 由于简化了用户交互,可以在提供了统一认证的设备上,直接预置或预安装APP即可实现用户注册使用的目的。
4. 无需依赖外部传输加密协议: 在App客户端与App服务端的数据传输过程中,无需依赖HTTPS等外部传输加密协议。
5. 抵御中间人攻击 : 能够防止攻击者伪装成通信双方进行密钥协商,从而避免通信内容被截获、篡改或伪造,为数据传输提供了可靠的安全防护。
6. 降低计算开销: 主要涉及对称加密算法、哈希加密算法等操作,避免复杂的模幂、椭圆曲线点乘等操作,显著降低计算开销,适配物联网设备、嵌入式系统等资源受限终端。避免了所有密钥协商协议均需执行的高计算量密码学运算(如模幂、椭圆曲线点乘),尤其在资源受限的设备(如物联网设备、嵌入式系统)中,能够轻松支持,不会因复杂的密钥协商算法(如Diffie-Hellman、ECDH等)导致设备性能下降。
7. 低延迟响应 : 克服了密钥协商需要多轮消息交互(如DH协议至少2轮)和复杂计算所引入的额外通信延迟和处理延迟问题,能够满足对实时性要求极高的场景,确保系统的快速响应和高效运行。