首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从android密钥库中提取密钥

从android密钥库中提取密钥
EN

Stack Overflow用户
提问于 2017-05-30 07:19:17
回答 2查看 2.7K关注 0票数 2

来自Android Keystore文档

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

我不能完全理解它。

防止应用过程中关键材料的提取

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

回答 2

Stack Overflow用户

发布于 2017-06-10 10:05:18

什么意思?设备中的任何应用程序都不能从存储中提取密钥?

在你所链接的文件中,“防止提取”的意思是“防止对手提取关键材料”。这并不意味着您自己的应用程序不能使用密钥库中的密钥来加密/解密数据。这意味着您将永远无法从Android KeyStore中获取类似密钥文件的内容,将其复制到其他地方,并重用它。

此外,假设您需要在应用程序上的客户端和服务器之间发送加密消息。您天真地生成一个密钥,并将文件(“关键材料”)存储在应用程序的内部存储空间中。对手获得对该设备的根访问权限。他们现在可以访问您的密钥文件并使用您的密钥。即使您使用密码作为密钥,如果您的应用程序进程被破坏,那是因为对手可以访问密钥材料(即密钥文件)仍然存在危险。

文档中提到的优点与这些错误正好相反。Android Keystore密码转换发生在应用程序进程之外(作为系统进程),并且可能绑定到安全硬件。没有关键材料(关键文件等)公开给对手以某种方式重用(例如解密消息或签名电子邮件)。

注意,如果希望将密钥用于多个应用程序,则可能需要KeyChain API而不是密钥存储库。

票数 4
EN

Stack Overflow用户

发布于 2022-02-11 11:26:56

我还要指出,如果从privateKey.getEncoded()检索privateKey,那么AndroidKeyStore方法将返回null。

因此,考虑到下面的代码:

代码语言:javascript
复制
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);

KeyStore.Entry keyStoreEntry = keyStore.getEntry(alias, null);
PrivateKey privateKey = ((KeyStore.PrivateKeyEntry) 
keyStoreEntry).getPrivateKey();
byte[] privateKeyData = privateKey.getEncoded();

privateKeyData将是null。这就是它的意思

Android Keystore系统保护关键材料不被未经授权使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44255922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档