Как устранить уязвимость, связанную с небезопасным криптографическим шифрованием

Эта информация предназначена для разработчиков, чьи приложения содержат небезопасные паттерны криптографического шифрования, т. е. зашифрованный текст в приложении генерируется с использованием статически вычисленного секретного ключа, соли или вектора инициализации (IV). Сведения о небезопасном шифровании доступны в уведомлении Play Console

Как устранить предупреждение о небезопасных паттернах криптографического шифрования 

Проанализируйте свое приложение. Выясните, нет ли в нем статически вычисленных ключей, векторов инициализации и/или солей, которые используются в операциях криптографического шифрования. Убедитесь, что их значения конструируются безопасным способом. Например, в этом коде используется статически вычисленный секретный ключ и такой же вектор инициализации.

   // Оповещение консоли относится к следующему методу
  public byte[] encryptionUtil(String key, String iv, byte[] plainText) {
    Cipher cipher = Cipher.getInstance(“AES/GCM/NoPadding”);
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), “AES”);
    GCMParameterSpec paramSpec = new GCMParameterSpec(256, iv.getBytes());
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
    return cipher.doFinal(plainText);
  }

  // Здесь указан небезопасный ключ и вектор инициализации, которые необходимо изменить
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

Статически вычисленные значения
Статически вычисленным называется значение, которое остается одним и тем же при каждом запуске приложения. Такие значения можно извлечь из приложения и использовать для атаки на его зашифрованные данные. Даже если вы выполняете сложные манипуляции с ключами, векторами инициализации и солями перед запуском приложения, они остаются небезопасными, если эти манипуляции не меняются при каждом запуске.

Рекомендации для Android
Мы рекомендуем использовать Jetpack Security для симметричной криптографии. Если ваше приложение шифрует ключи API, информацию, позволяющую идентифицировать личность (PII) или другие конфиденциальные данные, используйте для хранения этих данных EncryptedSharedPreferences. В этом случае вам не придется реализовывать секретные ключи, векторы инициализации и соли. Также воспользуйтесь советами и примерами на этой странице. Для безопасной передачи данных в другие системы выбирайте протокол TLS/SSL

Jetpack Security использует проект Tink с открытым исходным кодом от Google для обработки симметричного аутентифицированного шифрования. Для более сложных случаев с использованием криптографических операций базового уровня рекомендуем использовать библиотеку Tink.

Если вам не подходят приведенные выше рекомендации и вы вынуждены напрямую манипулировать ключами, солями и векторами инициализации, старайтесь придерживаться следующих стандартов:

  1. Секретные ключи. Симметричные секретные ключи должны быть непредсказуемыми. Храните их в тайне. Для шифрования локальных данных используйте секретные ключи, созданные с помощью генератора случайных чисел (или, при использовании PBEKeySpecs, созданные из сгенерированных пользователем данных). Храните их с использованием AndroidKeystore
  2. Векторы инициализации. Векторы инициализации должны быть уникальными и непредсказуемыми при использовании для разных сообщений. Хранить их в секрете необязательно. Для их создания используйте генератор случайных чисел. Храните и передавайте векторы инициализации вместе с соответствующим зашифрованным текстом.
  3. Соли. Соли должны быть уникальными и непредсказуемыми при использовании для разных хешей. Хранить их в секрете необязательно. Для создания солей используйте генератор случайных чисел. Храните и передавайте их вместе с соответствующими хешами.

Что дальше

  1. Обновите приложение, следуя приведенным выше инструкциям.
  2. Войдите в Play Console и загрузите обновленную версию приложения.
Мы проведем повторную проверку. Если предупреждение не исчезнет, проблема не решена. Проверка может занять несколько часов.

Мы всегда рады помочь!

Если у вас есть вопросы, задайте их, используя тег android-security.
 

Эта информация оказалась полезной?

Как можно улучшить эту статью?
false
Главное меню
15311363884846171456
true
Поиск по Справочному центру
true
true
true
true
true
5016068
false
false