マシュマロ以上のAndroid KeyStoreの使用を調査しています。Androidキーストアでキー付きハッシュメッセージ認証コード(HMAC)を使用する方法
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);
を生成するために、このサンプルを発見しました私のデータ?
EXPLANATION
私は任意のAndroidアプリケーション内のセキュリティ/暗号化を実装するときに作るために選択/決定事項の数を持っています。
1)。はいまたはいいえ、どのような種類の暗号化を実装していますか? 2)。はいの場合は...可能な限り「安全な」ソリューションを実現するようにしなければなりません。
暗号を使用する場合は、次のことを確認する必要があります。
a)。私はパスワード/秘密鍵を安全な場所に保存します。 Androidキーストア。 b)。私は利用可能な "最強の"暗号を使用します。 (c))。 。私はデータの完全性とデータの認証を同時に検証したいと思います。暗号化されたデータが改ざんされているかどうかを検出したいと思います。
私はHMACについて何を読んだのか分かっているので、この機能を提供しています。データの整合性とデータの認証を保証するために、HMACの使用をAndroidアプリケーションにコードする方法を知りたいと思います。
暗号テキストにHMACを適用しますか?暗号テキストが変更された場合、それは復号化することができないため、冗長性があります。最終目的は何ですか? – pedrofb
@pedrofb、はい私の暗号テキストにHMACを適用したい。私がHMACの使用を理解しているのであれば、HMACを私のプレーンテキストに同時に暗号化して適用して、適用されたHMACによって「保護されている」暗号化されたテキストを入手しないでください。 – Hector
HMACを暗号文 'HMAC(暗号化(平文));に適用すると、復号化する前に検証する必要があります。 HMACをプレーンテキストの 'HMAC(プレーンテキスト);暗号化(プレーンテキスト)に適用すると、元のメッセージが本当に同じであることを確認するために、解読後にMACを確認する必要があります。 – pedrofb