Обновить

VKEncrypt: сквозное шифрование для переписки ВКонтакте

Я сделал VKEncrypt — браузерное расширение, который добавляет end-to-end шифрование в веб-версию ВКонтакте. Работает везде: iPhone /Windows / Mac / Linux / Android

Что умеет:шифрует сообщения, картинки и видео.В планах еще голосовухи.

Репозиторий: https://github.com/megamen32/vkencrypt

Работает через Tampermonkey / Userscripts: Chrome на пк, Safari на iPhone, Firefox на Android. Открываете vk.com, vk.ru или web.vk.me, заходите в чат — в поле ввода появляются кнопки шифрования и управления ключами.

Зачем

У ВК есть огромный плюс: он уже установлен у миллионов людей. У него же есть очевидный минус: обычная переписка не является end-to-end encrypted.

VKEncrypt закрывает именно этот слой. Не пытается заменить мессенджер, не делает VPN, не обещает анонимность. Он делает одну вещь:

содержимое сообщения уходит в ВК уже зашифрованным.

ВК, браузерный интерфейс, логи, бэкапы, случайный доступ к аккаунту или серверной стороне видят не текст, а строку вида:

ENC[key<id>:base64(iv ciphertext tag)]

Без ключа это не сообщение, а мусор.

Как устроено?

Криптография не самописная. Используется AES-256-GCM через нативный Web Crypto API браузера. Для каждого сообщения генерируется новый 12-байтный IV/nonce. GCM-tag проверяет целостность: если шифротекст повредили или подменили, расшифровка падает.

Ключи можно получить двумя способами:

  1. Seed-фраза Пользователь вводит фразу, из неё через PBKDF2-SHA256 генерируются k1…k4.

  2. Готовый 64-hex ключ Можно добавить свой ключ вручную или сгенерировать временный.

Seed-фраза не сохраняется.

Сейчас VKEncrypt умеет:

  • шифровать исходящие сообщения кнопкой;

  • автоматически шифровать сообщение при Enter;

  • расшифровывать входящие(текст/картинки/видео) прямо в чате;

  • переключать [шифр] / [текст];

  • работать в личках, беседах и групповых чатах;

  • использовать несколько слотов ключей;

  • генерировать временный ключ;

  • кодировать шифротекст не только Base64, но и emoji-алфавитом.

Последнее не про криптографию, а про UX. Иногда приятнее видеть стену из эмодзи, чем технический Base64. А вероятность такого текста в мессенджерах выше.

Почему не Telegram / Мой_Любимый_Мессенджер?

Потому что это другой сценарий. В Telegram сквозное шифрование есть только в секретных чатах, а обычные чаты — не зашифрованы(Многие этого не знают).VKEncrypt нужен не для того, чтобы спорить, какой мессенджер «правильный». Он нужен для ситуации, где люди уже сидят во ВК и не хотят/не могут переезжать.

Приватность должна быть не религиозным выбором мессенджера, а функцией, которую можно включить там, где уже идёт общение.

Threat model

VKEncrypt защищает содержимое сообщений.Он не скрывает:

  • факт переписки;

  • участников переписки;

  • время отправки;

  • размер сообщения;

  • IP-адрес;

  • сам факт использования ВК;

  • текст, если устройство уже скомпрометировано;

  • ключ, если пользователь сам отправил его в тот же чат.

То есть это не Tor, не VPN и не «режим невидимости». Это именно E2EE-слой поверх существующего транспорта.

Почему открытый код важен

Криптографический инструмент без открытого кода — это «поверьте нам». Мне такой подход не нравится. Поэтому код открыт. Можно проверить реализацию, посмотреть формат сообщений, параметры KDF, работу с ключами, UI-логику, поведение при ошибке расшифровки и автообновление userscript. Плюс можно добавить Макс/Телеграм/Мой_Любимый_Мессенджер

Если найдёте проблему — issue/PR приветствуются.

Итог

VKEncrypt — это маленький слой приватности поверх ВК. Не новый мессенджер. Не самодельный шифр. Не магия. Не анонимность.

Просто нормальный AES-256-GCM в привычном чате, с открытым кодом и установкой за несколько секунд.

Репозиторий: https://github.com/megamen32/vkencrypt

Теги:
+11
Комментарии15

Публикации