Все работы

Secure Messenger

Инженерный прототип ядра защищённого мессенджера без интерфейса. Он проверяет главное: сообщение нельзя прочитать чужому, нельзя незаметно изменить и нельзя подсунуть второй раз.

Клиент
Свой проект студии
Тип
Прототип, командная строка
Что делали
Криптография, хранение, тесты
Год
2026
Secure Messenger

Как устроено

У каждого профиля пароль и пара ключей. Контакты передаются файлами с отпечатком ключа для сверки. Сообщение подписывается Ed25519 и шифруется постквантовым ML-KEM-768 вместе с ChaCha20-Poly1305. История хранится в SQLite, текст на диске открытым не лежит.

Что он отклоняет

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

Честно о границах

Это прототип: в нём нет сетевого транспорта, прямой секретности и внешнего аудита. Он показывает, как мы строим криптографическое ядро и проверяем его тестами.

Пресс для писем с печатью

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

Восковая печать: подпись Ed25519 на запечатанном письмеЗамок ML-KEM-768 и запечатыватель: письмо зашифрованоЩуп и штифты принимающей стороны: бит и повтор отклоняютсяSecure Messenger CLI 0.1.0: консольный прототип на C++20. Профиль защищён паролем (scrypt), контакты обмениваются файлами с отпечатками. Письмо подписывается Ed25519 и шифруется ML-KEM-768 с HKDF и ChaCha20-Poly1305, на выходе файл .smmsg около 1,3 КБ; история лежит в SQLite. Принимающая сторона отклоняет повтор, один перевёрнутый бит, неверный пароль и самозванца с тем же именем; здесь показаны первые два случая. Это прототип: нет прямой секретности (forward secrecy), нет сетевого транспорта и нет аудита.

Технически

  • C++20, CMake, OpenSSL и SQLite, строгие флаги компилятора и сборка с санитайзерами.
  • Ed25519 для подписи, ML-KEM-768, HKDF и ChaCha20-Poly1305 для шифрования.
  • Пароль профиля усилен scrypt.
  • Около 1 500 строк кода, программа весит около 120 КБ.
  • Сборки для Linux, macOS и Windows.

C++20 · OpenSSL · SQLite · CMake

Обсудим ваш проект?

Обсудить проект