我想通过使用HMAC来同时验证数据的完整性和数据的身份验证.
我该如何实现这一目标?
我目前正在生成加密/解密密钥,如下所示: –
mKeyStore = KeyStore.getInstance(keyStorename); mKeyStore.load(mKeyStoreLoadStoreParameter); if (mKeyStore.containsAlias(keyStoreAlias)) { mSecretKey = (SecretKey) mKeyStore.getKey(keyStoreAlias,KEY_STORE_PASSWORD); } else { final KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyPropertIEs.KEY_ALGORITHM_AES,keyStorename); final int keyPurpose = KeyPropertIEs.PURPOSE_ENCRYPT | KeyPropertIEs.PURPOSE_DECRYPT; keyGenerator.init( new KeyGenParameterSpec.Builder(keyStoreAlias,keyPurpose) .setKeySize(KEY_STORE_KEY_SIZE) .setBlockModes(KeyPropertIEs.BLOCK_MODE_GCM) .setRandomizedEncryptionrequired(true) .setEncryptionpaddings(KeyPropertIEs.ENCRYPTION_padding_NONE) .build()); mSecretKey = keyGenerator.generateKey();
我发现这个样本用于生成HMAC
SecretKey key = ...; // HMAC key of algorithm "HmacSHA512". KeyStore keyStore = KeyStore.getInstance("AndroIDKeyStore"); keyStore.load(null); keyStore.setEntry( "key1",new KeyStore.SecretKeyEntry(key),new KeyProtection.Builder(KeyPropertIEs.PURPOSE_SIGN).build()); // Key imported,obtain a reference to it. SecretKey keyStoreKey = (SecretKey) keyStore.getKey("key1",null); // The original key can Now be discarded. Mac mac = Mac.getInstance("HmacSHA512"); mac.init(keyStoreKey);
但是,在加密/解密数据时如何使用它?
说明
在任何AndroID应用程序中实现安全/加密时,我有许多选择/决定.
1).我是否实施任何类型的加密是或否?
2).如果是,那么…我应该尝试实现“最”安全的解决方案.
如果我要使用加密技术,那么我需要确保以下内容.
一个).我将密码/密钥存储在“安全的地方”,例如AndroID密钥库.
B).我使用“最强”的加密技术.
C).我想同时验证数据完整性和数据验证,例如我想检测一下我的加密数据是否被篡改过.
据我了解我所读到的关于HMAC的内容,他们提供了这项功能.我想知道如何将HMAC的使用编码到我的AndroID应用程序中,以确保数据完整性和数据身份验证.
解决方法 您可以在加密前将HMAC应用于纯文本HMAC(纯文本),并在解密后重新计算HMAC以检查原始消息是否相同.它可能是多余的,因为如果密文被更改,您将无法解密它.
首先在AndroIDKeyStore中生成HMAC密钥.我找到了一个例子here
KeyGenerator keyGenerator = KeyGenerator.getInstance( KeyPropertIEs.KEY_ALGORITHM_HMAC_SHA256,"AndroIDKeyStore");keyGenerator.initialize( new KeyGenParameterSpec.Builder(hmacKeyAlias,KeyPropertIEs.PURPOSE_SIGN).build());SecretKey key = keyGenerator.generateKey();
然后将HMAC应用于原始数据并将结果存储在某处
Mac mac = Mac.getInstance("HmacSHA256");mac.init(key);byte hmacOriginalData[] = mac.doFinal(dataToEncrypt);//Store hmacOriginalData
解密后,从AndroIDKeyStore获取HMAC密钥,重新计算HMAC并检查两个mac是否相等
Key key = keyStore.getKey(hmacKeyAlias,null);Mac mac = Mac.getInstance("HmacSHA256");mac.init(key);byte hmacDecryptedData[] = mac.doFinal(decryptedData);//Check equals(hmacDecryptedData,hmacOriginalData);总结
以上是内存溢出为你收集整理的如何在Android Keystore中使用密钥哈希消息认证码(HMAC)全部内容,希望文章能够帮你解决如何在Android Keystore中使用密钥哈希消息认证码(HMAC)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)