PWA-мессенджер со сквозным шифрованием (E2EE) поверх ВКонтакте.
- Сквозное шифрование - X25519 (ECDH) + AES-256-GCM
- Seed-фраза - восстановление ключей на любом устройстве
- PWA - установка на домашний экран, офлайн-режим
- Локальное хранение - все данные в IndexedDB
npm installnpm run devnpm run buildnpm run deploy- Авторизуйтесь через ВКонтакте
- Создайте или восстановите ключи шифрования
- Запишите seed-фразу - без неё нельзя восстановить ключи!
- Откройте Профиль → QR-код вашего публичного ключа
- Покажите QR контакту при личной встрече
- Контакт сканирует QR через Профиль → Добавить ключ контакта
- Обычные сообщения - для контактов без ключа
- Зашифрованные - автоматически для контактов с ключом (🔒)
Получите Client ID в VK Developers:
- Создайте приложение типа "Standalone"
- Скопируйте ID приложения
- Замените
VK_CLIENT_IDвsrc/views/Auth.vue
SOVA/
├── public/
│ ├── icons/ # Иконки PWA
│ ├── manifest.json # Манифест PWA
│ └── sw.js # Service Worker
├── src/
│ ├── services/
│ │ ├── crypto.js # Seed, ключи X25519
│ │ ├── encryption.js # Шифрование сообщений
│ │ ├── storage.js # IndexedDB
│ │ ├── vk.js # VK API
│ │ └── qr.js # QR-коды
│ ├── stores/
│ │ └── index.js # Pinia stores
│ ├── views/
│ │ ├── Auth.vue # Авторизация
│ │ ├── Conversations.vue
│ │ ├── Chat.vue
│ │ ├── Profile.vue
│ │ ├── Settings.vue
│ │ └── SeedSetup.vue
│ ├── App.vue
│ ├── main.js
│ ├── router.js
│ └── style.css
├── index.html
├── package.json
├── vite.config.js
└── README.md
- Ключевая пара: X25519 (32 байта)
- Шифрование сообщений:
- Генерация эфемерного ключа
- ECDH → общий секрет
- HKDF-SHA256 → ключ AES
- AES-256-GCM шифрование
- Приватный ключ: IndexedDB (локально)
- Seed-фраза: только у пользователя
- История сообщений: IndexedDB
При потере seed-фразы и очистке данных ключи невозможно восстановить!
При смене устройства история остаётся на старом устройстве
- Vue 3 (Composition API)
- Vite
- Pinia
- Vue Router
- @noble/curves (X25519)
- bip39 (seed-фразы)
- idb (IndexedDB)
- qrcode-generator
- html5-qrcode
MIT
Олег Прудков (@JeBance)
- Репозиторий: https://github.com/JeBance/SOVA
- Приложение: https://jebance.github.io/SOVA