Termux — мощная среда в кармане: вы можете устанавливать стандартные криптографические инструменты и собирать рабочие сценарии защиты данных прямо на Android. В этой статье я, Денис Усачёв (ведущий эксперт РыбинскЛАБ), покажу, как использовать OpenSSL, GnuPG и libsodium для создания безопасных коммуникаций и надёжной защиты файлов и сообщений.
Фокус будет на прикладных задачах: генерация ключей, подпись, шифрование, проверка целостности, а также на практических рекомендациях по безопасной эксплуатации в Termux.
Подготовка Termux и базовая гигиена безопасности
Перед началом обновите пакеты и установите необходимые компоненты. Важно: храните ключи аккуратно, ограничивайте доступ к файлам и избегайте вывода секретов в лог.
pkg update
pkg upgrade -y
pkg install -y openssl gnupg libsodium
Проверьте, что инструменты доступны:
openssl version
gpg --version
# libsodium обычно доступен через соответствующие утилиты/сборки; базовую проверку можно сделать по файлам/ldconfig при наличии
Рекомендация: для ключевых материалов создавайте отдельные каталоги и выставляйте права доступа. Например:
mkdir -p ~/crypto/keys
chmod 700 ~/crypto/keys
OpenSSL: гибридное шифрование и контейнеры для коммуникаций
OpenSSL удобен для гибридного сценария: данные шифруются симметрическим ключом (быстро), а сам ключ шифруется асимметрично (безопасная доставка). Это типовой подход для защищённых каналов поверх обычной передачи (файлы/сообщения).
Генерация ключей (RSA) и обмен публичными ключами
Создайте RSA-ключи для шифрования и подписи. Публичный ключ можно безопасно передавать собеседнику, приватный — хранить только у вас.
cd ~/crypto/keys
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out rsa_private.pem
openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem
Установите строгие права на приватный ключ:
chmod 600 rsa_private.pem
chmod 644 rsa_public.pem
Шифрование файла для получателя (hybrid encryption)
Схема:
- генерируем случайный симметрический ключ;
- шифруем данные (например, AES-256-GCM);
- шифруем симметрический ключ публичным ключом получателя;
- передаём получателю набор артефактов.
Пример (условно-компактный сценарий):
# 1) Сгенерируем симметрический ключ (32 байта для AES-256)
openssl rand -out aes_key.bin 32
# 2) Шифруем файл AES-256-GCM
# Формат .enc: ciphertext, отдельно tag/iv лучше хранить явно.
openssl enc -aes-256-gcm -salt -pbkdf2 -iter 200000 \
-pass file:./aes_key.bin \
-in "message.txt" -out "message.enc"
# 3) Шифруем симметрический ключ публичным ключом получателя
# (use -pubin, если RSA_public.pem у вас)
openssl pkeyutl -encrypt -pubin -inkey ./rsa_public_peer.pem -in aes_key.bin -out aes_key.enc
Важно: на практике лучше использовать аккуратный контейнер (например, с явными полями IV/tag и форматом пакета) или специализированные инструменты/скрипты. OpenSSL предоставляет «строительные кирпичи», а не всегда готовый «протокол». Для надёжности используйте заранее согласованный формат пакета в вашей системе.
Дешифрование у получателя
# 1) Расшифровываем симметрический ключ приватным ключом
openssl pkeyutl -decrypt -inkey ./rsa_private.pem -in aes_key.enc -out aes_key.bin
# 2) Расшифровываем файл
openssl enc -d -aes-256-gcm \
-salt -pbkdf2 -iter 200000 \
-pass file:./aes_key.bin \
-in "message.enc" -out "message.txt"
# 3) Удаляем ключ
shred -u aes_key.bin 2>/dev/null || rm -f aes_key.bin
Подпись и проверка (под доверие к авторству)
Подпись полезна, чтобы получатель мог подтвердить, что сообщение действительно от владельца приватного ключа.
# Подпись (RSA + SHA-256)
openssl dgst -sha256 -sign ./rsa_private.pem -out message.sig message.txt
# Проверка
openssl dgst -sha256 -verify ./rsa_public.pem -signature message.sig message.txt
GnuPG: практичная PGP-стилистика для безопасного обмена
GnuPG — стандарт для PGP-подхода: удобен для подписи, шифрования и проверки. Он также хорошо подходит для «коммуникаций» в смысле: вы отправляете зашифрованные письма/файлы, а собеседник проверяет подпись.
Инициализация и создание ключа
Запустите мастер генерации ключей. Вам потребуется выбрать параметры и указать идентификатор (User ID).
gpg --full-generate-key
Чтобы в дальнейшем было проще, используйте тип ключа, который вам подходит (часто выбирают RSA или EdDSA в зависимости от возможностей). Следите, чтобы мастер-пароль/ключевая фраза была достаточно сильной.
Экспортируйте публичный ключ:
gpg --armor --export "your-name-or-email" > pubkey.asc
Импорт публичного ключа собеседника:
gpg --import pubkey_peer.asc
Шифрование и подпись сообщения
Предположим, вы хотите зашифровать для получателя и добавить вашу подпись. В одном шаге GnuPG позволяет выполнить оба действия.
# Шифруем (и подписываем) для получателя
gpg --output message.gpg --encrypt --sign --recipient "peer-id" message.txt
Отправляйте message.gpg и при необходимости исходник/метаданные отдельно.
Дешифрование и проверка подписи
# На стороне получателя
gpg --output message.txt --decrypt message.gpg
# При корректной настройке GPG покажет статус проверки подписи
Практика: при использовании GnuPG контролируйте «web of trust» или используйте настройки проверки доверия, чтобы сигнатуры не считались автоматически «валидными без контекста».
libsodium: современные примитивы и безопасные схемы (crypto_box/secret-key)
libsodium хорош тем, что предлагает «правильные по умолчанию» примитивы и высокоуровневые схемы. Для задач коммуникаций часто удобны:
- публично-ключевая схема (например, crypto_box) для обмена без передачи секретов;
- секретно-ключевая схема (например, secret-key AEAD) для шифрования уже согласованного ключа.
На практике libsodium чаще используется через API (в C, Rust, Python и т.д.), но вы можете собрать небольшой рабочий прототип на основе доступных примеров.
Пример: создание ключевой пары (высокоуровневое доверие через инструменты)
В Termux доступность конкретных утилит libsodium может зависеть от сборок. Универсальный подход — запускать небольшой код на C/Node/Python, но минимально практичное решение — использовать готовые примеры или библиотеки, доступные в вашей среде.
Если у вас есть инструментальная обвязка, общий процесс выглядит так:
- сгенерировать ключи;
- на стороне отправителя — получить shared secret и зашифровать;
- на стороне получателя — расшифровать и проверить подлинность (AEAD/TAG).
Поскольку в реальности вам важны воспроизводимость и контроль формата, рекомендую фиксировать протокол: формат сообщения (nonce + ciphertext + tag) и кодировку (base64/hex), а также порядок байтов.
Схемы безопасных коммуникаций: что выбрать и почему
Ниже — практический выбор инструментов:
- OpenSSL: когда вам нужен гибкий контроль над процессом, контейнерами и сценариями гибридного шифрования/подписей.
- GnuPG: когда вы хотите «PGP-совместимую» модель и удобный workflow подпись/шифрование/проверка.
- libsodium: когда важны современные примитивы, а также когда вы готовы собирать протокол на API-уровне (или использовать готовые шаблоны).
Обязательные рекомендации по безопасности (особенно в мобильной среде)
- Не печатайте секреты: избегайте вывода приватных ключей/seed-фраз в терминал и в историю команд.
- Ограничивайте права: приватные ключи должны иметь права доступа только для вашего пользователя (как минимум 600).
- Используйте шифрование на переносе: если ключи лежат на диске — держите их в защищённом окружении/контейнере.
- Контролируйте формат сообщений: nonce/IV и метки аутентичности должны передаваться корректно.
- Проверяйте подписи: целостность без проверки авторства часто недостаточна.
- Регулярная ротация: при компрометации — немедленная замена ключей и отзыв/маркировка старых.
Если вы используете VPN, применяйте его только для создания локальной сети и стабильного канала между устройствами в рамках вашей инфраструктуры, а не как замену криптографии.
Типовой рабочий процесс для «защищённой коммуникации»
Универсальный подход (для разных инструментов):
- Согласовать: формат пакета, кодировки и формат подписей.
- Обменяться публичными ключами.
- Отправитель: подписывает (для авторства) и шифрует (для конфиденциальности).
- Получатель: дешифрует и проверяет подпись (для доверия и целостности).
Так вы получаете защиту одновременно от подмены, подслушивания и атак на целостность.
Заключение
Продвинутая криптография в Termux — это не только установка OpenSSL, GnuPG и libsodium, но и правильная сборка сценариев: гибридное шифрование, цифровые подписи, контроль формата пакетов и строгая дисциплина хранения ключей. Выбирайте инструмент по задаче: OpenSSL — для гибкости и контейнеров, GnuPG — для удобного PGP-обмена, libsodium — для современных примитивов и протоколов на API.
Если вам нужна помощь с проектированием протокола, настройкой ключей, аудитом команд/скриптов или внедрением решения под ваши коммуникации, обращайтесь в РыбинскЛАБ — мы поможем сделать безопасную систему практично и надёжно.