Android(10+)上的指纹安全性(在软件级别)是否较低?

信息安全 加密 安卓 生物识别
2021-09-05 04:30:40

这个问题的启发(更具体地说,这个答案相同):

使用密码时,加密密钥不会直接存储在设备中。[...]

使用生物识别技术时,每个读数都不同,因此无法使用唯一值来得出 KEK。加密密钥必须存储在设备中的某个位置,并且无需从用户提供的某些数据派生的 KEK 即可访问。

我可以使用指纹或密码来解锁手机。假设指纹读取器本身不能被欺骗(我知道这是错误的,但关键是为了解决这个问题而忽略该攻击向量),这种配置是否像没有密码那样不安全,因为对上述内容的天真阅读会似乎暗示?

澄清一下:我怀疑上面是在谈论使用生物识别技术作为解锁令牌。实际上,如果我的设备已完全关闭(或超时后),则生物识别身份验证将被禁用,并且必须使用密码。这表明一个明智的实现是不将“原始”密钥存储在非易失性存储器中,而仅在使用密码解锁设备后存储在易失性存储器中,以促进生物特征认证。一旦该易失性存储器消失,该设备就如同未使用生物识别技术一样安全。

有谁知道Android安全是否真的以这种方式实现?

1个回答

是的。生物特征身份验证未加密绑定到基于文件的加密(FBE)。它仅在FBE 密钥已被解密的首次解锁后(AFU) 状态下工作。在 AFU 状态下,处理器的可信执行环境(TEE) 使用临时密钥(EK)重新加密 FBE 密钥。EK 保留在 TEE 中,并且在下次重新启动之前一直有效。然后将重新加密的 FBE 密钥缓存在voldLinux 内核密钥环中。

当 Linux 内核需要此密钥来读取或写入文件时,它会调用 TEE 来解密缓存的 FBE 密钥,派生一个 64 字节的 AES-256-XTS 密钥,并将其编程到内联加密引擎 (ICE) 中。锁定屏幕上的生物识别身份验证仅阻止访问需要解锁屏幕的设备功能和应用程序。但是,密码管理器(或一般的应用内生物特征认证)以密码方式将生物特征认证的成功结果与密钥解密绑定。

只有当生物特征认证成功时,应用程序才能要求 TEE 解密其密钥和令牌。生物特征验证由 TEE 内部的供应商库完成,生物特征传感器使用 SPI 通道与 TEE 连接。即使使用假传感器,身份验证结果仍由 TEE 决定。传感器只发送数据。但生物识别技术可能会被欺骗,因此它不是验证用户身份的主要方式。Android每 72 小时或每连续 3 次生物识别身份验证失败(以先发生者为准)后回退到锁屏知识因子(LSKF)。


Android 中 PIN/密码和加密密钥之间的连接

基于文件的加密

Qualcomm 基于文件的加密(pdf)