We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Продвинутая криптография в Termux: работа с OpenSSL, GnuPG и libsodium для создания безопасных коммуникаций

Практическое руководство по продвинутой криптографии в Termux: OpenSSL, GnuPG и libsodium для защиты данных, подписи сообщений и гибридного шифрования. Безопасные коммуникации и рабочие схемы.

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, применяйте его только для создания локальной сети и стабильного канала между устройствами в рамках вашей инфраструктуры, а не как замену криптографии.

Типовой рабочий процесс для «защищённой коммуникации»

Универсальный подход (для разных инструментов):

  1. Согласовать: формат пакета, кодировки и формат подписей.
  2. Обменяться публичными ключами.
  3. Отправитель: подписывает (для авторства) и шифрует (для конфиденциальности).
  4. Получатель: дешифрует и проверяет подпись (для доверия и целостности).

Так вы получаете защиту одновременно от подмены, подслушивания и атак на целостность.

Заключение

Продвинутая криптография в Termux — это не только установка OpenSSL, GnuPG и libsodium, но и правильная сборка сценариев: гибридное шифрование, цифровые подписи, контроль формата пакетов и строгая дисциплина хранения ключей. Выбирайте инструмент по задаче: OpenSSL — для гибкости и контейнеров, GnuPG — для удобного PGP-обмена, libsodium — для современных примитивов и протоколов на API.

Если вам нужна помощь с проектированием протокола, настройкой ключей, аудитом команд/скриптов или внедрением решения под ваши коммуникации, обращайтесь в РыбинскЛАБ — мы поможем сделать безопасную систему практично и надёжно.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект