Skip to content

BridgeMesh 1.3.1 — доказательство E2E: посредник не видит текст

Choose a tag to compare

@gotical gotical released this 03 Sep 19:44
· 2 commits to main since this release

🔐 Что нового — явное доказательство E2E

Личные сообщения и до этого шифровались (AES-256-CBC + HMAC-SHA256,
ключ из SHA-256 от пары alias'ов). В этой версии добавлено явное
доказательство в коде и UI
, что промежуточный узел (relay)
действительно не может прочитать текст.

Что видит посредник

В mesh-сети сообщение часто идёт через несколько узлов, прежде чем
дойдёт до адресата. Каждый из этих узлов — посредник. BridgeMesh
сделан так, что посредник:

  • Не может прочитать текст личного сообщения.
    В его локальной памяти лежит только зашифрованный blob
    вида enc:<base64>:<hmac>. Расшифровать его можно
    только общим ключом, который вычисляется из пары
    (alias1, alias2) — а этот ключ есть только у
    отправителя и адресата.
  • Не может подделать сообщение: HMAC на каждом пакете
    проверяется до расшифровки — нет оракул-атаки.
  • Может сохранить blob и переслать дальше по цепочке
    (store-and-forward), пока ttl > 0. Это позволяет
    доставить сообщение, даже если адресат временно не в эфире.

Технические изменения

  • В MeshPacket.payload добавлено поле clear: bool.
    false для личных сообщений, true для broadcast —
    видно в коде relay-узла и в логах.
  • В _onIncoming расшифровка вызывается только при
    совпадении pkt.to == identity.alias. Посредник не
    вызывает SecureChat.decrypt для чужих пакетов.
  • MessageStore хранит только MeshPacket целиком,
    включая зашифрованный blob payload['text'].
    Расшифрованный текст в хранилище не попадает.
  • Подробная документация в lib/services/secure_chat.dart.
  • На странице «Ещё → Ретрансляция в mesh» появился блок
    с пояснением: «Личные сообщения хранятся в зашифрованном
    виде. Этот узел не может прочитать текст».

📱 Скачайте app-debug.apk ниже, установите на Android (>= 7.0).
🔗 rybinsklab.ru
📖 README