从android密钥库中提取密钥

时间:2017-05-30 07:19:17

标签: android android-keystore

来自Android Keystore Docs

  

Android Keystore系统可保护密钥材料免遭未经授权的使用。首先,Android Keystore通过阻止从应用程序进程和整个Android设备中提取密钥材料,减少了对Android设备外部密钥材料的未授权使用。其次,Android KeyStore通过让应用指定其密钥的授权使用,然后在应用程序的流程之外强制实施这些限制,减轻了Android设备上未授权使用密钥材料的风险。

我完全无法理解。

  

通过阻止从应用程序进程中提取密钥材料

  • 这是什么意思?设备中的任何应用程序进程都无法从商店中提取密钥?
  • 因此,一旦将密钥放入商店,就无法从商店获取密钥(如果我想在其他地方使用它)。 因此,如果我想这样做,我如何实现我自己的自定义密钥库,它允许仅为我的应用程序的进程提取密钥而不是其他人。

1 个答案:

答案 0 :(得分:4)

  

这是什么意思?设备中的任何应用程序进程都无法从商店中提取密钥?

"防止提取"在您链接的文档的上下文中意味着"阻止攻击者提取密钥材料。"这并不意味着您自己的应用程序无法使用来自密钥库的密钥来加密/解密数据。它确实意味着您永远无法从Android KeyStore获取类似密钥文件的内容,将其复制到其他地方并重复使用。

此外,假设您需要在应用上的客户端和服务器之间发送加密消息。您天真地生成密钥并将文件("密钥材料")存储在应用程序的内部存储中。攻击者获得对设备的root访问权限。他们现在可以访问您的密钥文件并使用您的密钥。即使您使用密钥作为密钥,如果您的应用程序进程受到损害,那么由于攻击者可以访问密钥材料(即密钥文件),仍然存在危险。

文档中讨论的优势恰恰与这些错误相反。 Android Keystore加密转换发生在应用程序进程之外(作为系统进程),可能绑定到安全硬件。没有任何关键材料(密钥文件等)暴露给对手以某种方式重用(例如,解密消息或签署电子邮件)。

注意,如果您希望密钥与多个应用程序一起使用,那么您可能需要KeyChain API而不是密钥库。