BridgeMesh 1.3.1 — доказательство E2E: посредник не видит текст
🔐 Что нового — явное доказательство 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целиком,
включая зашифрованный blobpayload['text'].
Расшифрованный текст в хранилище не попадает.- Подробная документация в
lib/services/secure_chat.dart. - На странице «Ещё → Ретрансляция в mesh» появился блок
с пояснением: «Личные сообщения хранятся в зашифрованном
виде. Этот узел не может прочитать текст».
📱 Скачайте app-debug.apk ниже, установите на Android (>= 7.0).
🔗 rybinsklab.ru
📖 README