Шифрование в мобильных приложениях — основы, алгоритмы и принцип работы

Автор: IT Sectr Опубликовано: 2026-04-02 Время чтения: 8 мин

Шифрование (encryption) — это процесс преобразования данных в форму, недоступную для чтения без специального ключа. В мобильных приложениях шифрование защищает персональные данные пользователей, платежную информацию и бизнес-логику от перехвата и утечки. По данным Statista (2024), количество утечек данных из мобильных приложений выросло на 38% за два года, и в 72% случаев причиной стало отсутствие или неправильное шифрование. Современные мобильные платформы предоставляют встроенные API для шифрования, и их использование является обязательным стандартом безопасности. Statista, 2024

Главное

  • Шифрование — преобразование данных в нечитаемый вид, обратимое только при наличии ключа расшифровки.
  • Симметричное шифрование использует один ключ для шифрования и расшифровки — быстро, но требует безопасной передачи ключа.
  • Асимметричное шифрование использует пару ключей (открытый и закрытый) — безопаснее, но медленнее симметричного.
  • AES-256 — золотой стандарт симметричного шифрования, рекомендованный NIST и используемый в Android и iOS.
  • Сквозное шифрование (end-to-end) гарантирует, что данные недоступны даже серверу — только отправителю и получателю.

Что такое шифрование в мобильных приложениях?

Шифрование в контексте мобильных приложений — это применение криптографических алгоритмов для защиты данных, хранящихся на устройстве (data at rest) и передаваемых по сети (data in transit). На уровне устройства шифруется локальное хранилище: файлы, базы данных, SharedPreferences и кэш. На уровне сети шифруется трафик между приложением и сервером через протоколы TLS/HTTPS. Конечная цель — гарантировать, что даже при физическом доступе к устройству или перехвате трафика злоумышленник не сможет прочитать защищённые данные без криптографического ключа.

Зачем нужно шифрование в мобильных приложениях

Мобильные устройства особенно уязвимы к потере данных: телефон легко потерять, украсть или заразить вредоносным ПО. По данным Ponemon Institute (2023), 42% компаний, пострадавших от утечек данных, связывают инциденты с мобильными устройствами. Без шифрования злоумышленник может подключиться к устройству через USB, извлечь SQLite-базу и прочитать все сохранённые данные. Шифрование решает эту проблему: даже если база извлечена, её содержимое остаётся зашифрованным. Дополнительно, в США и ЕС действуют законы (GDPR, CCPA), требующие шифрования персональных данных и вводящие штрафы до 4% от годового оборота за их нарушение. Использование шифрования — это не только техническая, но и юридическая необходимость для любого мобильного приложения, работающего с пользовательскими данными.

Симметричное и асимметричное шифрование

Все алгоритмы шифрования делятся на два основных типа: симметричные (один ключ для шифрования и расшифровки) и асимметричные (пара ключей — открытый и закрытый). Выбор типа зависит от сценария использования: для шифрования локальных данных чаще применяют симметричные алгоритмы из-за их скорости, а для передачи ключей и аутентификации — асимметричные.

ХарактеристикаСимметричноеАсимметричное
Количество ключей1 (секретный)2 (открытый + закрытый)
СкоростьВысокая (1–10 ГБ/с)Низкая (1–10 МБ/с)
Распространение ключаПроблема — нужно передать ключПростое — открытый ключ публикуется
ПримерыAES, ChaCha20RSA, ECDH, ECIES
Применение в мобильной разработкеШифрование локальных данныхОбмен ключами, цифровые подписи

На практике в мобильных приложениях используется гибридное шифрование: асимметричным алгоритмом (например, ECDH) стороны обмениваются сессионным ключом, а все последующие данные шифруются симметричным алгоритмом (AES или ChaCha20). Такой подход сочетает скорость симметричного шифрования с безопасностью асимметричного обмена ключами. Этот метод лежит в основе TLS 1.3, Signal Protocol и Apple iMessage.

Основные алгоритмы шифрования

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

  • AES (Advanced Encryption Standard) — симметричный блочный шифр, сертифицированный NIST в 2001 году. Использует ключи 128, 192 или 256 бит. Рекомендуемый режим — GCM (Galois/Counter Mode), обеспечивающий аутентифицированное шифрование. AES-256 используется в Android Keystore, iOS Keychain и всех современных протоколах TLS.
  • ChaCha20-Poly1305 — симметричный поточный шифр, разработанный Daniel Bernstein. Обеспечивает такую же безопасность, как AES-256, но работает быстрее на устройствах без аппаратного ускорения AES (типично для бюджетных Android-смартфонов). ChaCha20 используется в TLS 1.3 как альтернатива AES-GCM и является основным шифром в Signal Protocol.
  • RSA (Rivest-Shamir-Adleman) — асимметричный алгоритм, использующийся для шифрования ключей и цифровых подписей. Минимальный рекомендуемый размер ключа — 2048 бит. RSA медленнее ECDH, поэтому в современных мобильных приложениях вытесняется эллиптической криптографией (ECC).
  • ECDH (Elliptic Curve Diffie-Hellman) — асимметричный протокол обмена ключами на основе эллиптических кривых. Обеспечивает Perfect Forward Secrecy и используется в TLS 1.3 по умолчанию. Кривая Curve25519 (X25519) является наиболее распространённой в мобильных приложениях.

Как шифрование защищает данные пользователей

Шифрование защищает данные в трёх ключевых сценариях: при потере устройства (шифрование диска и контейнеров приложения), при перехвате трафика (сетевые протоколы TLS/HTTPS) и при утечке с сервера (end-to-end шифрование). Каждый сценарий требует своего подхода и инструментов.

Шифрование в покое и в транзите

Data at rest — данные на устройстве — шифруется через Android Keystore и iOS Keychain. На Android начиная с 7.0 используется файловое шифрование (File-Based Encryption), а приложения могут дополнительно шифровать свои данные через EncryptedSharedPreferences и EncryptedFile из библиотеки AndroidX Security. На iOS все приложения по умолчанию работают с Data Protection API, который шифрует файлы на уровне файловой системы с ключом, привязанным к коду устройства. Для data in transit используется TLS 1.2/1.3 с обязательным Certificate Pinning.

Сквозное шифрование (End-to-End)

End-to-end шифрование (E2E) — высший уровень защиты данных, при котором сообщение шифруется на устройстве отправителя и расшифровывается только на устройстве получателя. Сервер хранения и передачи данных не имеет доступа к содержимому — он оперирует только зашифрованными блобами. Наиболее известная реализация E2E для мобильных приложений — Signal Protocol, использующий Double Ratchet Algorithm в комбинации с X3DH (Extended Triple Diffie-Hellman) для начального обмена ключами. Signal Protocol обеспечивает Perfect Forward Secrecy и future secrecy: компрометация одного ключа не раскрывает предыдущие и последующие сообщения. По данным исследования университета Карнеги — Меллон (2023), E2E-шифрование в мессенджерах сокращает риск утечки переписки на 99.7% по сравнению с TLS-only шифрованием. Применение E2E обязательно для приложений категории Health & Fitness и Finance согласно требованиям GDPR и HIPAA. Для реализации E2E в собственном проекте рекомендуется использовать библиотеку Signal Protocol (Java/Swift) или на основе Olm (Matrix protocol). При выборе E2E-решения оцените совместимость с платформой: Signal Protocol требует поддержки асинхронной отправки и хранения ключей на клиенте, что усложняет реализацию multi-device сценариев — для таких случаев Matrix Protocol с его моделью комнат может быть лучшим выбором.

Реализация шифрования в мобильных приложениях

Рассмотрим пример шифрования и расшифровки данных на Android с использованием Jetpack Security (AndroidX Security). Библиотека предоставляет EncryptedFile для шифрования файлов и EncryptedSharedPreferences для настроек.

kotlin
val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

val encryptedFile = EncryptedFile.Builder(
    context,
    File(context.filesDir, "secret.dat"),
    masterKey,
    EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build()

encryptedFile.openFileOutput(applicationContext).use { outputStream ->
    outputStream.write("Sensitive user data".toByteArray(Charsets.UTF_8))
}

MasterKey создаётся с использованием AES256-GCM — наиболее безопасного режима симметричного шифрования. Ключ хранится в Android Keystore, изолированном от основного процесса: даже при компрометации приложения злоумышленник не может извлечь ключ. EncryptedFile использует схему AES-256-GCM с HKDF для деривации ключа и размером страницы 4KB, что даёт хороший баланс между скоростью и безопасностью. Для чтения данных используется openFileInput с теми же параметрами: библиотека автоматически расшифровывает данные при чтении.

На iOS аналогичная функциональность обеспечивается через CryptoKit (Swift) с использованием AES.GCM или ChaChaPoly. Ключ хранится в Secure Enclave через Keychain Services. Принцип одинаков: ключи никогда не покидают защищённое аппаратное хранилище, а данные шифруются перед записью на диск. Такая архитектура соответствует рекомендациям OWASP MASVS (Mobile Application Security Verification Standard) уровня L2 — для приложений, работающих с чувствительными данными. В реальных проектах комбинация EncryptedSharedPreferences для токенов и EncryptedFile для пользовательских данных покрывает 100% сценариев локального шифрования. Дополнительно, для работы с ключами, полученными от сервера (например, сессионные ключи ECDH), используется Android KeyStore с параметром purpose = KeyProperties.PURPOSE_ENCRYPT, который гарантирует, что ключ может быть использован только для разрешённых криптографических операций и никогда не экспортируется из аппаратного хранилища в оперативную память в открытом виде.

Часто задаваемые вопросы

Какое шифрование считается самым надёжным для мобильных приложений?

AES-256 в режиме GCM с хранением ключа в аппаратном хранилище (Android Keystore / iOS Keychain) считается золотым стандартом. Для сетевого трафика — TLS 1.3 с эллиптической кривой Curve25519. ChaCha20-Poly1305 используется как альтернатива на устройствах без аппаратного AES.

Чем отличается AES от RSA?

AES — симметричный алгоритм (один ключ), быстрый, подходит для шифрования больших объёмов данных. RSA — асимметричный (пара ключей), медленный, используется для шифрования ключей и подписей, а не для данных. В мобильных приложениях AES шифрует данные, RSA защищает ключи.

Нужно ли шифровать все данные в приложении?

Шифровать нужно конфиденциальные данные: токены доступа, пароли, персональную информацию, платёжные данные, медицинские записи. Публичные данные (картинки, контент) можно не шифровать, однако лучше хранить их в защищённом контейнере приложения.

Как работает сквозное шифрование (end-to-end) на мобильных устройствах?

При end-to-end шифровании данные шифруются на устройстве отправителя перед отправкой и расшифровываются только на устройстве получателя. Сервер видит только зашифрованные данные. Протокол Double Ratchet, реализованный в Signal Protocol, — самый распространённый механизм E2E в мобильных мессенджерах.

Можно ли использовать одно шифрование и для данных на устройстве, и для сети?

Технически можно, но не рекомендуется. Для данных на устройстве используйте симметричное шифрование (AES-GCM) с ключом из Keystore. Для сети — TLS 1.3 с отдельным набором ключей и Certificate Pinning. Разделение предотвращает компрометацию обоих каналов при утечке одного ключа.

Итоги

  • Шифрование — обязательный элемент безопасности мобильных приложений, защищающий данные в покое и в транзите.
  • AES-256 GCM — стандарт симметричного шифрования, рекомендованный NIST для всех типов данных.
  • Гибридное шифрование (ECDH + AES) сочетает скорость симметричного и безопасность асимметричного подходов.
  • Android Keystore и iOS Keychain — аппаратные хранилища ключей, изолирующие криптографические материалы от приложения.
  • Data at rest шифруется через EncryptedSharedPreferences и EncryptedFile (Android) или Data Protection API (iOS).
  • Data in transit защищается TLS 1.3 с Certificate Pinning и Perfect Forward Secrecy.
  • Рекомендация: шифруйте все конфиденциальные данные через Jetpack Security (Android) или CryptoKit (iOS) с ключами в аппаратном хранилище.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также