从 Android 密钥库中提取密钥

Yas*_*svi 3 android android-keystore

来自Android 密钥库文档

Android 密钥库系统可保护密钥材料免遭未经授权的使用。首先,Android 密钥库通过防止从应用程序进程和整个 Android 设备中提取密钥材料,减少了在 Android 设备外部未经授权使用密钥材料的情况。其次,Android KeyStore 通过让应用程序指定其密钥的授权使用,然后在应用程序进程之外强制执行这些限制,从而减少 Android 设备上未经授权使用密钥材料的情况。

我无法完全理解它。

通过防止从应用程序流程中提取关键材料

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

Dav*_*son 5

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

您链接的文档上下文中的“防止提取”意味着“防止对手提取密钥材料”。这并不意味着您自己的应用程序不能使用密钥库中的密钥来加密/解密数据。这确实意味着您将永远无法从 Android KeyStore 获取密钥文件之类的东西,将其复制到其他地方并重新使用它。

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

文档中谈到的优点与这些缺点恰恰相反。Android 密钥库加密转换发生在应用程序进程之外(作为系统进程),并且可能绑定到安全硬件。任何密钥材料(密钥文件等)都不会暴露给对手以某种方式重用(例如解密消息或签署电子邮件)。

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