Android Security - криптография для хранения конфиденциальной информации с помощью пин-кода

В моем приложении я сохраняю некоторые данные в общих настройках, которые должны быть зашифрованы перед сохранением и должны быть расшифрованы при получении.

Я использую шифрование AES-256. Для этого я генерирую секретный ключ, используя фразу-пароль / пин-код. Ниже мой фрагмент кода.

    public static SecretKey generateKey(char[] passphraseOrPin, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
    // Number of PBKDF2 hardening rounds to use. Larger values increase
    // computation time. You should select a value that causes computation
    // to take >100ms.
    final int iterations = 1000; 

    // Generate a 256-bit key
    final int outputKeyLength = 256;

    SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    KeySpec keySpec = new PBEKeySpec(passphraseOrPin, salt, iterations, outputKeyLength);
    SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
    return secretKey;
}

Что касается моего приложения, я могу попросить пользователя предоставить уникальный пин-код. Но я не могу сохранить пин-код в хранилище ключей, потому что приложение должно поддерживать с 4.0. Как я могу сохранить пин-код?

2 ответа

Вместо этого используйте KeyChain. Он совместим вплоть до API 14 (ICS). Основное отличие заключается в том, что KeyChain доступен для всей системы.

Тем не менее, мне интересно, почему вы храните булавку? Ключи, защищенные паролями, существуют для предотвращения несанкционированного использования, поэтому использование должно быть разрешено пользователем путем ввода его / ее пароля.

Для этого я бы порекомендовал вам изучить использование библиотеки Facebook Conceal. Он совместим с Android до API 9 в соответствии с их build.gradle: https://github.com/facebook/conceal/blob/master/build.gradle

Вы можете следовать их указаниям на сайте здесь о том, как интегрировать:

https://github.com/facebook/conceal

Другие вопросы по тегам