Современные мессенджеры обеспечивают сквозное шифрование (end-to-end encryption, E2E) канала связи, однако доступ к ключам шифрования, как правило, контролирует разработчик сервиса. Кроме того, мессенджер собирает метаданные: время отправки, адресаты, частота обращений. Для сценариев, где требуется верифицируемая конфиденциальность без доверия к третьей стороне, указанный подход является недостаточным.
Существующие офлайн-шифраторы, такие как S. S. E. или AxCrypt, не предоставляют встроенного механизма обмена ключами и не обеспечивают прямую секретность. Мессенджеры с открытым протоколом, например Signal, требуют наличия сервера и регистрации, что ограничивает применение в изолированных условиях.
Цель работы — разработать мобильное приложение, которое реализует полный цикл конфиденциальной переписки: обмен ключами, шифрование, передачу шифротекста через любой канал и расшифровку — без выхода в сеть и без зависимости от сторонних серверов.
Для обоснования необходимости разработки проведён сравнительный анализ шести решений: S. S. E., Cryptomator, AxCrypt, Signal, Telegram, WhatsApp. Результаты сведены в таблицу 1.
Таблица 1
Сравнительный анализ существующих решений
|
Параметры сравнения |
Программные решения | ||||||
|
S. S. E. |
Cryptomator |
AxCrypt |
Signal |
Telegram |
|
МП КПИ | |
|
Работа без разрешения INTERNET |
+ |
+ |
– |
– |
– |
– |
+ |
|
Встроенный обмен ключами (ECDH) |
– |
– |
– |
+ |
+ |
+ |
+ |
|
Прямая секретность (forward secrecy) |
– |
– |
– |
+ |
– |
+ |
+ |
|
Передача через произвольный канал |
+ |
– |
– |
– |
– |
– |
+ |
|
Открытый исходный код |
+ |
+ |
– |
+ |
– |
– |
+ |
|
Шифрование текста сообщений |
+ |
– |
– |
+ |
+ |
+ |
+ |
Из таблицы 1 следует, что ни одно из рассмотренных решений не удовлетворяет одновременно всем критериям: работа без INTERNET-разрешения, встроенный обмен ключами ECDH, прямая секретность, поддержка произвольного канала передачи и открытый исходный код. Совокупность этих требований определяет необходимость разработки МП КПИ.
МП КПИ реализует следующий пользовательский сценарий. Два абонента устанавливают приложение на устройства под управлением Android. Каждый генерирует пару ключей ECDH (алгоритм X25519, RFC 7748 [1]). Публичные ключи передаются через любой канал — мессенджер, электронную почту или QR-код. Приложение вычисляет общий секрет и формирует корневой ключ с помощью HKDF (RFC 5869 [2]). Далее абонент вводит текст сообщения, приложение шифрует его по алгоритму AES-256-GCM (NIST SP 800–38D) и передаёт шифротекст в системный диалог Intent.createChooser для отправки через любое установленное приложение.
Прямая секретность обеспечивается ротацией ключей. После каждого сообщения корневой ключ обновляется: новый ключ вычисляется как HKDF-Expand(текущий ключ, «ratchet»||N), где N — порядковый номер сообщения. Компрометация текущего ключа не раскрывает ключи предыдущих сообщений.
Ключевой материал хранится в Android Keystore — защищённом аппаратном хранилище, реализованном в доверенной среде исполнения (TEE или StrongBox). Извлечение ключей из Keystore средствами ОС невозможно. Данные пользователя (история переписки, публичные ключи контактов) сохраняются в Jetpack DataStore с шифрованием через Google Tink AEAD.
Манифест приложения не содержит разрешения android.permission.INTERNET. На уровне ядра ОС (netfilter/eBPF) это блокирует все сетевые сокеты процесса вне зависимости от логики приложения. Данное ограничение верифицируемо: любой пользователь может убедиться в его наличии, просмотрев манифест APK.
Приложение разработано для платформы Android. Выбор платформы обусловлен её долей на рынке мобильных ОС (более 70 % устройств по данным за 2024 год [4]), открытостью экосистемы и наличием Android Keystore API, обязательного для безопасного хранения криптографических ключей.
В качестве языка программирования выбран Kotlin. Сравнительный анализ языков представлен в таблице 2.
Таблица 2
Сравнение языков программирования для Android-разработки
|
Критерий сравнения |
Язык программирования | ||||
|
Java |
Kotlin [3] |
C++ |
Dart |
Python | |
|
Нативная поддержка Android SDK |
+ |
+ |
+/– |
– |
– |
|
Встроенная защита от нулевых ссылок |
– |
+ |
– |
+ |
+ |
|
Поддержка корутин |
– |
+ |
– |
+/– |
– |
|
Прямой доступ к Android Keystore API |
+ |
+ |
+ |
– |
– |
|
Официальный язык Android (с 2019) |
– |
+ |
– |
– |
– |
Kotlin является официальным языком разработки для Android с 2019 года [5]. Встроенная система типов с поддержкой null-safety устраняет целый класс ошибок на этапе компиляции. Корутины (Kotlin Coroutines) обеспечивают неблокирующее выполнение криптографических операций без создания явных потоков.
Пользовательский интерфейс реализован на Jetpack Compose — декларативном UI-фреймворке, являющемся официальной рекомендацией Google для новых Android-проектов. Все экраны приложения защищены флагом FLAG_SECURE, запрещающим создание скриншотов и отображение содержимого в системном переключателе задач. Буфер обмена автоматически очищается через 30 секунд после расшифровки сообщения.
Криптографический стек состоит из трёх компонентов: Android Keystore (хранение ключей в TEE), Google Tink 1.20.0 (AEAD-шифрование локального хранилища) и Bouncy Castle 1.83 (поддержка X25519 и HKDF, доступная начиная с версии 1.57).
Для проверки корректности работы МП КПИ применялось функциональное тестирование методом чёрного ящика. Тест-кейсы охватывали полный жизненный цикл сообщения: генерацию ключевой пары, обмен публичными ключами, шифрование, передачу шифротекста, расшифровку и сверку с исходным текстом.
Корректность криптографических примитивов проверялась на тестовых векторах из RFC 7748 (X25519) и NIST SP 800–38D (AES-GCM). Все вычисленные значения совпали с эталонными, что подтверждает корректность реализации алгоритмов.
Дополнительно проверялась невозможность сетевого взаимодействия: при попытке установить TCP-соединение из кода приложения операционная система возвращала исключение SecurityException, что соответствует ожидаемому поведению при отсутствии разрешения INTERNET.
Разработано мобильное приложение для конфиденциальной передачи информации (МП КПИ), реализующее криптографический стек ECDH (X25519) + AES-256-GCM + HKDF с хранением ключевого материала в Android Keystore. Приложение работает без разрешения INTERNET, что на уровне ядра ОС исключает несанкционированную сетевую активность. В отличие от рассмотренных аналогов, МП КПИ обеспечивает одновременно: встроенный обмен ключами, прямую секретность, поддержку произвольного канала передачи и верифицируемое отсутствие сетевого доступа.
Литература:
- RFC 7748: Elliptic Curves for Diffie-Hellman Key Agreement. — Текст: электронный // IETF: [сайт]. — URL: https://datatracker.ietf.org/doc/html/rfc7748 (дата обращения: 07.04.2026).
- HMAC-based Extract-and-Expand Key Derivation Function (HKDF). — Текст: электронный // IETF: [сайт]. — URL: https://datatracker.ietf.org/doc/html/rfc5869 (дата обращения: 07.04.2026).
- Kotlin Documentation. — Текст: электронный // kotlinlang.org: [сайт]. — URL: https://kotlinlang.org/docs/home.html (дата обращения: 07.04.2026).
- StatCounter, G. S. Mobile OS Market Share / G. S. StatCounter. — Текст: электронный // StatCounter: [сайт]. — URL: https://gs.statcounter.com/os-market-share/mobile/ (дата обращения: 07.04.2026).
- First-party Android development: Kotlin. — Текст: электронный // developer.android.com: [сайт]. — URL: https://developer.android.com/kotlin/first (дата обращения: 07.04.2026).

