一些背景:我使用的其中一个应用程序使用HCE(主机卡仿真) - 当设备靠近自定义硬件时,HostApduService的实现由系统创建并启动.在启动时,它会从SharedPreferences中读取一些信息,并相应地处理与自定义硬件的通信.到现在为止还挺好.
在某些时候,我注意到Google Play Vitals中收集的奇怪崩溃 - 事实证明,因为Android 8.1 ContextImpl在尝试阅读共享首选项之前检查用户是否已经授权; 如果没有,则抛出异常.这就是我学习Direct Boot含义的方法.
直接引导模式的文档提到,凭据存储加密禁止任何人在用户提供某些授权之前访问数据.我无法指出文档atm中的确切位置,但我很确定一旦设备被[重新]启动并且用户输入了身份验证数据,存储在凭据存储区域中的任何内容(包括但不限于SharedPreferences) )应该可用于读/写.
但是,该应用程序的一些用户声称有时即使他们没有长时间重启设备,设备硬件通信也不起作用.而应对此问题的唯一方法是验证设备 - 输入密码,触摸指纹扫描仪等.
所以这让我想知道 - 这部分加密是如何工作的,并且有些供应商可能会改变这个功能的实现,以便有时它会在设备处于锁定状态后启动,比如一小时左右?我可以理解需要打开设备的屏幕以便NFC开始工作 - 出于安全原因,NFC上的文档提到NFC在屏幕关闭时进入睡眠状态.但为什么这需要解锁设备?或者它不是关于供应商本身,我的理解是完全错误的?
UPD.我有一个广播接收器,一旦设备重新启动就会唤醒应用程序 - 我需要在这里做一些工作,而这部分工作包括从中读取数据SharedPreferences.在我更改了该广播接收器的动作过滤器以便在用户实际授权自己之后启动它之后,绝大多数与SharedPreferences在加密状态下读取内容的尝试相关的崩溃都消失了,但是非常少量的(如此前碰撞数量的0.1%)仍在这里.
那时我非常确信它必须连接到设备跳回到加密状态,但是
有什么可能是根本原因以及如何处理这个问题的想法?
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |