QR Messenger — обмен сообщениями через QR-коды с шифрованием

Мобильное приложение (Android) для безопасной переписки, где сообщения передаются через QR-коды — экран в экран, без серверов, без регистрации.

Исходники: github.com/pavlovma007/SmsQrCodeMessenger


О приложении

Установка

1
2
3
4
git clone https://github.com/pavlovma007/SmsQrCodeMessenger
cd SmsQrCodeMessenger
npm install
npx react-native run-android

Для установки на устройство без сборки — в release-apks/ лежат готовые APK, или скачайте релиз.

QR Messenger

Зачем

Обычные мессенджеры требуют регистрации, сервера, номера телефона или хотя бы интернета. Этот подход другой:

  • Никакого сервера — сообщение существует только в QR-коде на экране
  • Никакой регистрации — нет логина, нет аккаунта, нет номера
  • Сквозное шифрование — кроме первого сообщения в цепочке
  • Работает офлайн — камера видит QR и без интернета
  • Канал передачи — любой — можно отправить QR любым способом, который вам доступен, по любым каналам, хоть на столбе! Общение будет приватным.

Как работает

Первое сообщение — открытое. Вы пишете текст, приложение генерирует QR-код, который содержит ваш публичный ключ (ECC P-256) и контакты (по желанию). Собеседник сканирует код и читает сообщение.

Ответ — уже зашифрованный. Кнопка «Зашифрованный ответ» берёт публичный ключ из первого QR-кода, шифрует им ваш текст, и вы показываете новый QR-код. Расшифровать его может только владелец соответствующего приватного ключа — то есть ваш собеседник.

Каждый последующий ответ — тоже зашифрован. Вся переписка после первого сообщения защищена сквозным шифрованием (end-to-end).

Ключи живут только на устройстве — генерируются при первом запуске, хранятся в AsyncStorage. Никуда не передаются, кроме публичного ключа (он в каждом QR-коде).

В каждом сообщении вы можете оставить много типов своих контактов для связи для целевого абонента, подсказать.

Особенности

Криптография через react-native-themis

Используется библиотека themis — асимметричное шифрование на эллиптических кривых (ECC P-256). Публичный ключ ECC занимает ~44 символа в base64, что критично, так как он встраивается в каждый QR-код.

Многослойный QR-код

Приложение умеет делать не только черно-белые, но и цветные QR-коды своего формата, чтобы вместить большие сообщения — до 24 Килобайт, данные могут быть сжаты.

Сканирование

  • Через камеру (ML Kit на Android, Vision на iOS) — автоматически распознаёт QR
  • Из галереи — можно загрузить фото с QR-кодом
  • Через share intent — из другой галереи нажать «Поделиться» → выбрать приложение
  • Поддерживаются монохромные и многоцветные QR-коды (детект автоматический)

Сохранение и ответ

  • История сообщений сохраняется локально
  • Из истории можно ответить на любое сообщение
  • При ответе создаётся зашифрованный QR-код для получателя

Стек

  • React Native 0.85 — основа приложения
  • react-native-themis — ECC P-256 шифрование
  • react-native-vision-camera + barcode-scanner — сканирование QR через камеру
  • qrcode + react-native-qrcode-svg — генерация QR
  • pngjs — работа с многослойным QR (на уровне пикселей)
  • pako — сжатие данных перед кодированием в QR

Юридическая информация

Статус программы

Данная программа является локальным инструментом для генерации и распознавания QR-кодов. Она не осуществляет передачу данных по сети, не является организатором распространения информации (ОРИ), не является оператором связи.

Ответственность за публикацию

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

Шифрование

Программа использует шифрование для защиты содержимого сообщений. Шифрование разрешено законодательством РФ (ст. 16 Федерального закона «Об информации»). Ключи шифрования генерируются на вашем устройстве и не передаются автору программы или третьим лицам.

Автор не может расшифровать сообщения

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

Ваши обязанности

Не используйте программу для распространения информации, запрещённой законодательством РФ (экстремизм, порнография, призывы к насилию и т.д.). Если вы получили законное требование от госорганов расшифровать сообщения или предоставить ключи, вы должны его исполнить или обжаловать в суде. Автор программы за это ответственности не несёт.

Претензии третьих лиц

Если вы считаете, что через QR-коды, созданные с помощью этой программы, распространяется незаконная информация, обращайтесь к лицу, опубликовавшему код, или к владельцу соцсети, где он опубликован. Автор программы не может удалить опубликованные коды.

Подробное руководство пользователя, включая юридическую информацию и пояснения, — в статье QR Messenger — Руководство пользователя.