Я разрабатываю приложение, которое может загружать контент с внутреннего сервера.Содержимое хранится на устройстве и, следовательно, должно быть зашифровано.В настоящее время я использую AES128 и получаю ключ, используя PBDKF2.Часть парольной фразы для PBDKF2 получена с внешнего устройства, к которому приложение может подключиться, и отправлено на сервер, когда приложение хочет загрузить контент.
Процесс выглядит следующим образом:
- Приложение подключается к внешнему устройству и получает некоторую информацию
x
- Приложение отправляет запрос бэкэнду с запросом определенного файла и включает
x
в запрос - backend использует
x
для создания ключевой фразы и PBDKF2WithHmacSHA1
для генерации ключа для AES
- Backend шифрует запрошенный файл, используя сгенерированный ключ, и
AES/CBC/PKCS5Padding
- Backend создаетсообщение в следующем формате:
<iteration>.<salt>.<encrypted-data>
, где <iterations>
- количество итераций, переданных PBDKF2
, <salt>
- случайно сгенерированная соль для PBDKF2
и <encrypted-data>
- данные зашифрованного файла. - Бэкэнд отправляет сообщение обратно клиенту
- Клиент выполняет деконструкцию сообщения и дешифрует зашифрованные данные, используя предоставленные параметры.
Мой вопрос: безопасно ли создавать сообщение в соответствии с этой схемой (объединение входных параметров и зашифрованных данных)?Клиент знает, как создать ключевую фразу, используя x
- обфускация кода должна усложнить процесс его определения:
(я знаю, что простой файл будет в куче / памятиустройство после расшифровки, но только на очень короткий промежуток времени)