Как и где мое устройство хранит результаты отпечатков пальцев и совпадает с моей следующей попыткой разблокировки? - PullRequest
0 голосов
/ 27 октября 2019

Я знаю, что многие задавались вопросом, как сохранить или экспортировать новый отпечаток и сохранить, и ответ был «нет». Мой вопрос заключается в том, где мои устройства Android хранят отсканированные данные отпечатков пальцев и в каком формате и как они совпадают с новыми отсканированными.

Я также знаю это: сканирование кончика пальца анализируется для определенных контрольных точек и генерирует токен, которыйкак хэш пароля.

Он генерирует хэш через это:

KeyStore mKeyStore;
String KEY_NAME = UUID.randomUUID().toString();
Cipher mCipher;
mKeyStore = KeyStore.getInstance("AndroidKeyStore");
keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");

keyGenerator.init(new
                KeyGenParameterSpec.Builder(KEY_NAME,
                KeyProperties.PURPOSE_ENCRYPT |
                        KeyProperties.PURPOSE_DECRYPT)
                .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                .setUserAuthenticationRequired(true)
                .setEncryptionPaddings(
                        KeyProperties.ENCRYPTION_PADDING_PKCS7)
                .build());
        keyGenerator.generateKey();

 mCipher = Cipher.getInstance(
                KeyProperties.KEY_ALGORITHM_AES + "/"
                        + KeyProperties.BLOCK_MODE_CBC + "/"
                        + KeyProperties.ENCRYPTION_PADDING_PKCS7);

 SecretKey key = (SecretKey) mKeyStore.getKey(KEY_NAME, null);
        mCipher.init(Cipher.ENCRYPT_MODE, key);

Я использовал это https://github.com/googlesamples/android-FingerprintDialog, но это обеспечивает соответствие только с ранее записанными данными.

Редактирует / извлекает или использует этот хэш и сохраняет его где-то еще и пытается сопоставить вновь сгенерированный хеш с этим, сохраняя этот ключ безопасности Android (при условии, что он одинаков для всех), возможно ли это или как-то иначе?

1 Ответ

1 голос
/ 27 октября 2019
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
KeyStore.Entry entry = ks.getEntry(alias, null);
if (!(entry instanceof PrivateKeyEntry)) {
Log.w(TAG, "Not an instance of a PrivateKeyEntry");
return null;
}

Signature s = Signature.getInstance("SHA256withECDSA");
s.initSign(((PrivateKeyEntry) entry).getPrivateKey());
s.update(data);
byte[] signature = s.sign();
boolean valid = s.verify(signature);

см .: https://developer.android.com/training/articles/keystore#java

см .: Android - Где и как надежно хранится информация об отпечатках пальцев на устройстве

Я видел это, но могуСказать полезно или нет

...