对于一个将数据签名到服务器的应用程序,我正在研究如何保护用于签名的私钥。理想情况下,这个私钥的材料不应该暴露在应用程序中,签名应该在Android的可信执行环境(TEE)中完成。
该应用程序需要通过生物识别或应用密码来保护对密钥的访问。应用密码,而不是设备PIN/模式/密码,因为我可以对强度施加限制,而设备PIN/模式/密码可能很弱。
当添加另一个生物识别指纹/人脸时,应用程序会提醒用户,并要求应用密码对数据进行签名,并允许重新启用生物特征。应用密码将作为后盾,并授权那些不想在自己的设备上使用生物识别技术的用户。
目标平台将是Android 8及以上版本。
我从这里了解到,使用生物识别技术保护关键材料是(相对地)直接的:
setUserAuthenticationRequired(true)使用生物识别提示保护私钥。setUserAuthenticationValidityDurationSeconds(-1),以避免使用(潜在的弱)设备模式/密码/引脚访问密钥。setInvalidatedByBiometricEnrollment(true)使密钥无效
另一个指纹/人脸被注册到生物识别装置中。onAuthenticationSucceded对数据进行签名。关键材料从来没有直接暴露在应用程序和坐在很好地保护在T恤上。
现在,对于使用应用程序密码保护私钥的部分,我被击中了:有没有办法保护密钥--保护密钥(因此我们有一个非生物特征备份)--和具有类似的保护特性,即私钥材料保留在安全的TEE KeyStore中,并且不暴露于应用程序中?
发布于 2020-05-22 16:14:39
你不能这么做,因为那个密匙店没有密码。您唯一的选择是添加两个密钥(它们可能需要相同的密钥材料);一个使用setUserAuthenticationRequired(true),另一个使用setUserAuthenticationRequired(false) ...else,您总是需要提供生物认证才能继续进行,因为一旦设置了这个标志就不是可选的。
https://stackoverflow.com/questions/61956110
复制相似问题