Badam wykorzystanie KeyStore Android dla Marshmallow i wyżej.Jak używać klucza uwierzytelniania z hasłem klucza (HMAC) za pomocą Android Keystore
Chciałbym jednocześnie zweryfikować zarówno integralność danych, jak i uwierzytelnianie moich danych przez zastosowanie HMAC.
Jak mogę to osiągnąć?
Jestem obecny generowania klucza szyfrowania/odszyfrowywania w następujący sposób: -
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();
Znalazłem tę próbkę do generowania HMAC na
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);
Jednak, jak mogę to wykorzystać podczas szyfrowania/deszyfrowania moje dane?
WYJAŚNIENIE
Mam liczbę wyborów/decyzji, aby przy wdrażaniu zabezpieczeń/kryptografii w dowolnej aplikacji Android.
1). Czy wdrażam jakąkolwiek kryptografię Tak lub Nie? 2). Jeśli tak, to powinienem spróbować osiągnąć "najbardziej" bezpieczne rozwiązanie.
Jeśli będę używać kryptografii, muszę się upewnić, że:
a). Przechowuję hasła/tajne klucze w "bezpiecznym miejscu", np. Android Key Store. b). Używam "najsilniejszej" dostępnej kryptografii. c). Chciałbym jednocześnie zweryfikować zarówno integralność danych, jak i uwierzytelnianie moich danych, np. Chciałbym wykryć, czy moje zaszyfrowane dane zostały zmodyfikowane.
Jak rozumiem, co przeczytałem na temat HMAC, zapewniają tę funkcję. Chciałbym wiedzieć, w jaki sposób zakodowuję wykorzystanie HMAC w mojej aplikacji Android, aby zapewnić integralność danych i uwierzytelnianie moich danych.
Czy chcesz zastosować HMAC do tekstu zaszyfrowanego? Może być zbędny, ponieważ jeśli tekst szyfrowania zostanie zmieniony, nie będzie można go odszyfrować. Jaki jest ostateczny cel? – pedrofb
@pedrofb, Tak Chcę zastosować HMAC do mojego tekstu szyfrowania.Chociaż jeśli rozumiem użycie HMAC, czy jednocześnie nie szyfruje i nie stosuje HMAC do mojego zwykłego tekstu w celu uzyskania zaszyfrowanego tekstu, który jest również "chroniony" przez mój zastosowany HMAC? – Hector
Jeśli zastosujesz HMAC do zaszyfrowanego 'HMAC (encrypt (plain text));' musisz go zweryfikować przed odszyfrowaniem. Jeśli zastosujesz HMAC do zwykłego tekstu 'HMAC (zwykły tekst), encrypt (zwykły tekst)', musisz zweryfikować MAC po odszyfrowaniu, aby sprawdzić, czy oryginalna wiadomość jest naprawdę taka sama. – pedrofb