Шифрование, цифровая подпись, защита данных — термины довольно распространенные среди IT-специалистов.  Уже написано очень много интересных публикаций, статей и книг на эти темы. После прочтения одной из них, я решил попробовать свои силы на практике. Так и родился проект, о котором речь пойдет ниже.  Приложение SecureDialogues добавляет уровень шифрования сообщений, которые передаются через такие сервисы, как Gmail. Приложение само выполняет авторизацию для настроенных сервисов по протоколу OAuth2, принимает и отправляет сообщения. По своей сути — это обычный мессенджер, который обеспечивает криптографическую защиту сообщениям, разве что для передачи может использоваться один из нескольких сторонних сервисов. Данные на жестком диске шифруются по алгоритму AES 256-битным ключом, который извлекается из пароля, введенного при запуске, для цифровой подписи используется RSA. Сообщения пользователей кодируются сеансовым 256-битным ключом AES. Исходные коды доступны по ссылке, wiki проекта. Доступен запуск приложения в контейнере docker, подробнее по ссылке. Приложение создавалось с вполне конкретной целью — мне было интересно поработать с криптографией на практическом проекте. Причем не в каком-то простом, вроде "сюда вставьте текст, а вот здесь возьмите закодированное сообщение", а в таком, чтобы была и цифровая подпись, и ассиметричное шифрование, и сеансовые ключи и прочие интересные вещи. Поэтому был выбран проект мессенджера. В отсутствии всей необходимой инфраструктуры для передачи сообщений, эта функция делегируется уже существующим сервисам вроде Gmail или ВКонтакте. При первом запуске приложение попросит Вас ввести пароль:  Данный пароль используется для шифрования данных, которые хранятся на жестком диске, таких как: ключи RSA, токены авторизации для OAuth2, данные о сервисах и контактах. Сообщения и информация о диалогах не сохраняется, то есть при завершении приложения данные о полученных сообщениях и открытых диалогах теряются.  При последующих запусках приложение так же запрашивает пароль, чтобы расшифровать и загрузить сохраненные ранее данные.  Вид главного окна приложения:  Перед тем, как Вы сможете отправить первое сообщение, необходимо выполнить два шага: Самое главное, из-за чего контакт добавляется до начала обмена — это публичный ключ. Каждое сообщение, которое пересылается между пользователями обязательно подписывается отправителем. Если получатель не смог проверить цифровую подпись с помощью публичного ключа, то такое сообщение отбрасывается. Также публичный ключ используется для шифрования сессионного ключа. После того, как все предварительные этапы пройдены, можно начать диалог. Для этого в главном окне приложения есть соответствующая кнопка (подробнее на wiki). Во время создания диалога генерируется сессионный ключ, которым будет шифроваться все сообщения в рамках этого диалога. Все диалоги отображаются в главном окне слева. После того, как Ваш собеседник подтвердил создание диалога, можно будет отправлять и принимать в нем сообщения:  Чтобы отправить или прочитать сообщения в нужном диалоге, его нужно выбрать щелчком левой кнопки мыши.  Сообщения удаленного пользователя отображаются слева, а Ваши — справа. Если сообщение еще не доставлено, то оно отображается серым:  Приложение сортирует список диалогов в следующем порядке — в самом верху будут активные диалоги, для которых разрешена отправка сообщений, а в самом низу — закрытые. Так же на порядок влияет время изменения диалога. Активный диалог, который последним получил сообщение будет выше всех, а первый закрытый — внизу. Для каждого диалога показывается индикатор количества непрочитанных сообщений, при их наличии:  Статус диалога выделяется цветом: Вот пример того, как выглядит простое сообщение с текстом hellow world!:  Обмен сообщениями между собеседниками A и B состоит из следующих этапов: Успешное установление диалога и сигнальный обмен показаны на рисунке:  На данный момент приложение уже предоставляет базовые возможности по шифрованию сообщений и проверке подлинности посредством цифровой подписи. Но список поддерживаемых сервисов крайне маленьким.  В дальнейшем планируется его увеличить. Уже ведется работа по включению в него ВКонтакте.  Так же в проекте увеличение информативности пользовательского интерфейса, вроде добавления статуса подключения к сервису (активно, ошибка подключения и пр).  Алгоритм проверки дублирующихся сообщений работает не самым лучшим образом, планируется его доработка. Программист