如何在Android上安全地存储模数,公共指数和私有指数?

时间:2016-04-27 07:58:38

标签: android security encryption public-key-encryption emv

我已经给出了模数,公共指数和私有指数,我需要在Android上安全地存储这些值。我怎样才能做到这一点?

大多数示例都是在不获取n,d,e参数的情况下创建公钥和私钥。我已经给出了这些n,e,d值,并希望安全地存储它们,然后使用这些值来创建我的ICC公钥证书,并签署我的动态数据。

我怎样才能实现这一目标?

2 个答案:

答案 0 :(得分:6)

使用Keystore System

setEntry()允许您存储实现KeyStore.Entry的任何对象。如果需要存储不符合默认值的数据,则可以简单地实现自己的子类型。 (但RSAPrivateCrtKey可以存储PrivateKeyEntry

答案 1 :(得分:2)

Android设备上唯一安全的存储可能是Android Keystore System。

  

关键材料永远不会进入申请流程。

  

密钥材料可能绑定到安全硬件。

(见http://developer.android.com/training/articles/keystore.html

问题在于,您可以在其中存储的内容受到限制。 KeyChain类允许您存储私钥和证书链。同时,密钥库提供程序支持以下类型的条目:PrivateKeyEntry,SecretKeyEntry,TrustedCertificateEntry根据文档。实际上,尝试放置SecretKeyEntry实例会导致异常。

我建议在密钥库中放入两个条目。

  1. KeyStore.PrivateKeyEntry,你可以实例化一个PrivateKey(使用RSAPrivateKeySpec和KeyFactory从模数和私有指数生成)
  2. 带有自签名证书的KeyStore.TrustedCertificateEntry,您必须使用java keytool预生成并在运行时从资产加载。根据定义,它不应该是秘密的。