Skip to content

Repository files navigation

SimpKrypt

Тёмная Android-клавиатура со сквозным шифрованием сообщений (E2EE) на основе Signal Protocol. Личный форк-слияние двух open source проектов: Simple Keyboard (лёгкая, быстрая клавиатура без телеметрии) и KryptEY (клавиатура со встроенным E2EE-шифрованием на базе Signal Protocol).

Проект собран лично для себя — минимум разрешений, только тёмная тема, без лишнего функционала. Публикуется как есть, на случай если кому-то пригодится такая же связка.

Зачем это нужно

Обычно сквозное шифрование — это отдельный мессенджер (Signal, WhatsApp и т.д.), который шифрует сообщение внутри своего приложения. SimpKrypt устроен иначе: это системная клавиатура, которая шифрует текст ещё до того, как он попадёт в поле ввода любого приложения — почты, SMS, любого мессенджера, заметок и т.п. Печатаете сообщение → клавиатура шифрует его через Signal Protocol → в текстовое поле вставляется уже зашифрованный блок (raw-режим — компактная base64-строка, или fairytale-режим — то же самое, но замаскированное под связный бессмысленный текст, чтобы не привлекать внимание внешним видом). Получатель с той же клавиатурой и тем же контактом расшифровывает сообщение обратно.

То есть шифрование становится независимым от того, каким мессенджером вы пользуетесь — весь E2EE живёт на уровне клавиатуры, а не приложения.

Что переработано и изменено относительно оригиналов

Ключевая деталь слияния: KryptEY уже является форком Simple Keyboard (пакет rkr.simplekeyboard.inputmethod был переименован в com.amnesica.kryptey.inputmethod, поверх добавлены модули signalprotocol и e2ee). Поэтому SimpKrypt — это не сборка двух разъехавшихся кодовых баз в одну, а перенос уже готовой связки «клавиатура + Signal Protocol» под новое имя, с прицельными доработками:

  • Ребрендинг и смена пакета. com.amnesica.kryptey.inputmethodcom.simpkrypt.inputmethod, приложение переименовано в SimpKrypt, включая все ~80 локализаций интерфейса (изменено только имя бренда, сам перевод строк не тронут).
  • Минимальные разрешения. Приложению не нужно ничего, кроме android.permission.VIBRATE (для тактильного отклика по нажатиям клавиш) — ни доступа к контактам, ни к сети напрямую, ни к хранилищу сверх необходимого для локальных ключей.
  • Только тёмная тема. Убран выбор светлой темы клавиатуры на уровне кода (а не просто скрыт в UI) — светлую тему невозможно выбрать даже через старый сохранённый параметр. Экран настроек тоже принудительно тёмный, независимо от системной темы устройства.
  • Настраиваемый лимит длины сообщения. В оригинальном KryptEY лимит в 500 символов для raw- и fairytale-кодирования был жёстко зашит в код. В SimpKrypt это отдельная настройка (100–5000 символов) в разделе Preferences.
  • Обновлены зависимости. Библиотека libsignal-android обновлена до актуальной на момент сборки версии, обновлены Jackson и Protobuf, починена сборка (в оригинальном build.gradle использовался jcenter(), закрытый ещё в 2022 году).

Всё остальное — базовый функционал клавиатуры (раскладки, высота, свайпы пробела/удаления, автокапитализация, долгое нажатие) и вся криптографическая часть (генерация ключей, X3DH/Double Ratchet через Signal Protocol, обмен prekey-бандлами, raw/fairytale кодирование) — это код KryptEY и Simple Keyboard без концептуальных изменений, только перенесённый под новое имя.

Как это работает вкратце

  1. Клавиатура регистрируется как системный Input Method (IME) — как любая обычная клавиатура.
  2. Поверх обычной раскладки есть E2EE-панель для управления контактами и переключения режима (обычный ввод / raw-шифрование / fairytale-шифрование).
  3. Для каждого контакта локально генерируется и хранится набор ключей Signal Protocol (identity key, signed prekey, one-time prekeys). Обмен публичными ключами (prekey bundle) происходит вручную — как текст, который тоже печатается через клавиатуру и передаётся любым каналом (тем самым мессенджером, для которого клавиатура и используется).
  4. После обмена ключами сообщения в выбранном режиме шифруются на устройстве отправителя и расшифровываются на устройстве получателя; само шифрованное сообщение проходит через любой мессенджер как обычный текст — сервер мессенджера видит только шифротекст (или замаскированный под связный текст фрагмент в fairytale-режиме).

Установка

APK можно собрать самостоятельно в Android Studio (см. MERGE_NOTES.md в репозитории — там порядок первой сборки и на что обратить внимание). После установки: Настройки → Система → Языки и ввод → Виртуальная клавиатура → включить SimpKrypt, затем выбрать её как активную клавиатуру при вводе текста.

Статус и ограничения

  • Личный проект, не проходил внешний аудит безопасности.
  • Обмен ключами контактов — ручной, без верификации через доверенный канал (safety numbers как в Signal) в базовом UI KryptEY не реализован — доверяйте только тем каналам обмена ключами, которым доверяете так же, как и переписке.
  • Актуальную версию libsignal-android стоит проверять и обновлять самостоятельно — крипто-библиотеки требуют регулярных апдейтов.

Благодарности и лицензии

  • Simple Keyboard — Apache License 2.0.
  • KryptEY — за оригинальную реализацию E2EE-клавиатуры на Signal Protocol.
  • libsignal — криптографическое ядро (Signal Protocol), GPLv3.

SimpKrypt наследует лицензионные условия исходных проектов; при публикации репозитория убедитесь, что итоговый LICENSE-файл корректно отражает условия всех унаследованных компонентов (Apache 2.0 для Simple Keyboard/KryptEY-кода клавиатуры, GPLv3 для части, завязанной на libsignal).

About

SimpKrypt Тёмная Android-клавиатура со сквозным шифрованием сообщений (E2EE) на основе Signal Protocol. Личный форк-слияние двух open source проектов: [Simple Keyboard] (лёгкая, быстрая клавиатура без телеметрии) и [KryptEY] (клавиатура со встроенным E2EE-шифрованием на базе Signal Protocol).

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages