背景
Android 平台上,GateKeeper+KeyMint 是一种常见的密码解锁方案,基于仅用户知道的密码保护用户的数据。Weaver 是一种基于 Secure Element 等防篡改硬件,旨在增强密码保护用户数据的解决方案,提供了 device-off security threat model 和 brute force password guessing 两个关键特性。
device-off security threat model:当设备关闭电源时,用户身份验证和磁盘加密依赖的 secret 存储在安全芯片中,必须使用用户 LSKF (pin/pattern/password)才能获取到该值。
brute force password guessing:通过安全芯片内部的安全计时器防止攻击者通过暴力破解的手段推演出用户密码。
Weaver 整体架构
录入密码
校验密码
密码解锁关键接口
doVerifyCredential in LockSettingsService.java
GateKeeper+KeyMint 传统方案
unlockLskfBasedProtector in SyntheticPasswordManager.java
Weaver+GateKeeper+KeyMint 增强方案
unlockLskfBasedProtector in SyntheticPasswordManager.java
Weaver 密码解锁方案的优势
传统方案的暴破思路
关机暴力破解思路
1. 攻击者截获 splob 第一次解密后的中间密文 Intermediate;
2. 第二次解密使用 AES-GCM 模式,错误的密钥无法解密成功;
3. 攻击者在外部高性能环境中不停的通过临时生成的密码;
4. 并使用运算出的 SecretKey 对之前截获的中间密文进行解密;
5. 解密成功则证明当次生成的密码是正确的。
在 VM/PC 运行以下伪代码:
while(1) {
pwd = generateRandomPassword();
token = scrypt(pwd, R, N, P, Salt);
secretKey = getSecretKey(token);
if (SUCCESS == aesDecrypt(Intermediate, secretKey))
return pwd;
}
}
Weaver 方案防暴破思路
防暴力破解思路
1. 传统方案可以脱离设备在外部环境计算 secretKey,绕过设备自身的节流机制;
2. Weaver 方案计算 SecretKey 必须向 SE 传入正确的 key 值,并从中获取到正确的 secret 值;
3. SE 内部的硬件定时器具备节流机制,即多次传入错误的 key,等待重试的时间会指数级上升。
Weaver 密码解锁方案的局限
Weaver HAL 必须通过 OMAPI 与安全芯片通信。OMAPI 服务 openLogicalChannel 被调用时,会先检查调用者的 Access Control Rules 是否存在后,才会创建和安全芯片通信的 channel,这个操作会消耗大量时间。
优化思路
针对 Weaver 特性进行 Channel 绑定,即启动过程中访问 Weaver Applet 时,打开一个固定的逻辑通道不关闭,从而规避每次打开逻辑通道的时间开销,但需要安全芯片供应商做好功耗控制。
总结
传统密码解锁方案的节流机制在 Gatekeeper TA 中实现,这为暴力破解锁屏密码提供了可能。Weaver 方案的节流在安全硬件中实现,攻击者很难从安全芯片中读取中间秘密值或是绕过其节流机制。
END
作者:Vulcan
文章来源:OPPO内核工匠
推荐阅读
- 智能驾驶车辆行车安全的两难困境和不可能三角场景
- 一文让你搞懂 UEFI
- 安全芯片的守护神:BIST 机制的深度解析
- 02 | 芯片: GPU 怎么就成了科技界的“新宠”?
- 汽车功能安全系列: 软件开发 - 软件详细设计及安全测试
更多物联网安全,PSA 等技术干货请关注平台安全架构(PSA)专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入PSA 技术交流群,请备注研究方向。