我希望使用 Android 硬件支持的 KeyStore,但我担心安全性和可用性。从我在这里读到的内容,当用户更改设备锁定时,KeyStore 会被擦除,除非省略 setEncryptionRequired()。出于可用性考虑,这似乎需要完成,否则一旦修改了设备锁,所有硬件支持的密钥都会被擦除。
但是,我也在这里读到,硬件支持的密钥实际上并未存储在 TEE 中,而是作为密钥文件存储在 /data/misc/keystore/user_0/ 中,由存储在球座。由于设备锁的更改会擦除 KeyStore,因此设备特定的密钥似乎是从设备锁派生的。
出于安全原因,对密钥文件进行加密是有意义的,否则任何 root 用户都可以读取密钥文件并提取私钥,因为它们可能已经被清除了。
所以我有点进退两难。为了可用性,我应该省略 setEncryptionRequired(),但为了安全起见,我应该设置 setEncryptionRequired()。
最后,是否可以使用 setKeyEntry() 将私钥导入硬件支持的 KeyStore?我可以毫无错误地这样做,但我不确定它是否有硬件支持。
我的理解正确吗?