Что такое симметричное шифрование и как работают ключи
Что проверяют
Понимаете ли вы, что на мобильном устройстве главный вопрос не выбор шифра, а место хранения ключа и режим работы алгоритма. Приложение целиком лежит на устройстве пользователя, и любой встроенный в него секрет считается известным.
Как отвечать
Суть: один и тот же ключ используется и для шифрования, и для расшифровки, поэтому обе стороны должны получить его по защищённому каналу. Отсюда главная сложность, это не стойкость шифра, а доставка и хранение ключа.
Практический ответ: AES в режиме GCM. Режим важнее самого алгоритма. GCM даёт не только конфиденциальность, но и проверку целостности: подделанный шифротекст не расшифруется, а завершится ошибкой проверки тега. Каждому сообщению нужен свой уникальный вектор инициализации, и его кладут рядом с шифротекстом в открытом виде.
Ключ на платформе генерируется и живёт в системном хранилище ключей, приложение обращается к нему по алиасу, а на устройствах с аппаратной поддержкой материал ключа не покидает защищённую среду вовсе. Ключ можно привязать к подтверждению пользователя, то есть к биометрии или коду блокировки. Для настроек есть готовая обёртка из библиотек безопасности.
Если ключ выводится из пароля пользователя, это отдельная функция вывода ключа с солью и высокой стоимостью вычисления, а не хэш пароля напрямую.
Где спотыкаются
Зашивают ключ в код, ресурсы или файл сборки. Пакет приложения разбирается за минуты, строки достаются поиском, и такое шифрование защищает только от случайного взгляда.
Берут алгоритм строкой без указания режима и получают режим простой замены. Одинаковые блоки открытого текста дают одинаковые блоки шифротекста, и структура данных читается прямо по картинке из дампа.
Переиспользуют вектор инициализации ради воспроизводимости или потому, что он прописан константой. В режиме с аутентификацией повтор вектора при том же ключе разрушает защиту полностью и позволяет подделывать сообщения.