AndroidKeystore密钥库系统,保证本地加密算法的密钥安全性

1、AndroidKeystore密钥库系统介绍

AndroidKeystore系统是一个密钥库管理系统,谷歌设计这个系统的初衷应该是为了对标苹果的钥匙串KeyChain,有意思的是谷歌在Android4.0(API14)时便引入了KeyChain,但是并未提供详尽的说明文档,仅仅提供了一个API文档,网上也没有什么对它的文章,着实让人费解。话不多说,有兴趣的同学可以自行搜索,下面我来给大家介绍一下今天的主角——AndroidKeystore

谷歌在Android4.3(API18)中引入了AndroidKeystore,在Android6.0(API23)中对AndroidKeystore进行了一波升级优化,目前来说应该是最安全的加解密方案。根据官方文档说明,原文对它的介绍如下:

利用 Android Keystore 系统,您可以在容器中存储加密密钥,从而提高从设备中提取密钥的难度。在密钥进入 Keystore 后,可以将它们用于加密操作,而密钥材料仍不可导出。此外,它提供了密钥使用的时间和方式限制措施,例如要求进行用户身份验证才能使用密钥,或者限制为只能在某些加密模式中使用。

乍一看,这似乎是一个密钥保险箱,安全性高,可以把加密密钥存入其中,需要的时候再通过它用我们的密钥。**可是!!这货的使用根本就不是个存储空间!!**我们先来看看这东西大致的使用流程是怎样的,让大家直观的明白它的作用:

// step 1  通过密钥别名判断是否已有密钥
keyStore.containsAlias(keyAlias);

// step 2  没有密钥,生成一个
spec = new KeyGenParameterSpec.Builder(keyAlias, ...)...;
keyPairGenerator.initialize(spec);
keyPairGenerator.generateKeyPair();

// step 3  取出公钥,进行加密
publicKey = ((KeyStore.PrivateKeyEntry)entry).getCertificate().getPublicKey();
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
cipher.doFinal(data);

// step 4  取出私钥,进行解密
privateKey = ((KeyStore.PrivateKeyEntry)entry).getPrivateKey();
cipher.init(Cipher.DECRYPT_MODE, privateKey);
cipher.doFinal(data);

如此看来,AndroidKeystore根本就不是个密钥存储库。这和EncryptUtil这样的工具类几乎是一样的,先init,再encrypt,然后decrypt,俨然一个加解密工具。说白了,它在内部生成一个密钥,我们可以用它来加解密数据,并不能把我们自己生成的密钥送进去。

根据文档的介绍,它的大部分功能都只在Android6.0(API23)及以上支持,最低支持的Android4.3(API18)只提供RSA/ECB算法的使用。

2、密钥的检测与生成

AndroidKeystore是通过密钥的别名来进行加解密的,那么我们在使用之前必然是需要判断一下密钥是否存在的,AndroidKeystore提供了containsAlias()方法来完成密钥的检测,具体使用如下:

public boolean hasKey(String keyAlias) {
   
	try {
   
		// 加载一个AndroidKeyStore类型的KeyStore,貌似是定死的类型。
		KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
		keyStore.load(null);
		return keyStore.containsAlias(keyAlias);
	} catch (KeyStoreException e) {
   
		e.printStackTrace();
	} catch (CertificateException e) {
   
		e.printStackTrace();
	} catch (NoSuchAlgorithmException e
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值