Nachrichtenverschlüsselung in SecureDialogues

Verschlüsselung, digitale Signatur und Datenschutz sind unter IT-Fachleuten weit verbreitet.


Bereits viele interessante Publikationen, Artikel und Bücher zu diesen Themen geschrieben. Nachdem ich einen von ihnen gelesen hatte, beschloss ich, mich im Training zu versuchen. Und so wurde das Projekt geboren, auf das weiter unten eingegangen wird.


Bewerbungsunterlagen


Die SecureDialogues- Anwendung fügt Nachrichten, die über Dienste wie Google Mail übertragen werden, eine Verschlüsselungsstufe hinzu. Die Anwendung selbst führt die Autorisierung für die konfigurierten Dienste mithilfe des OAuth2- Protokolls durch, empfängt und sendet Nachrichten. Im Kern handelt es sich um einen regulären Messenger , der Nachrichten kryptografisch schützt, es sei denn, einer von mehreren Diensten von Drittanbietern kann für die Übertragung verwendet werden.


Daten auf der Festplatte werden mithilfe des AES- Algorithmus mit einem 256- Bit-Schlüssel verschlüsselt, der aus dem beim Start eingegebenen Kennwort extrahiert wird. RSA wird für die digitale Signatur verwendet. Benutzernachrichten werden mit einem 256- Bit- AES- Sitzungsschlüssel codiert.


Quellcodes finden Sie unter dem Link , Projekt- Wiki .


Das Starten der Anwendung im Docker- Container ist verfügbar, mehr unter dem Link .


Zweck der Schöpfung


Die Anwendung wurde für einen ganz bestimmten Zweck erstellt - es war für mich interessant, an einem praktischen Projekt mit Kryptographie zu arbeiten. Und nicht in einem einfachen Fall wie "Fügen Sie den Text hier ein, sondern nehmen Sie hier die verschlüsselte Nachricht", sondern in einer Form , in der es eine digitale Signatur , eine asymmetrische Verschlüsselung , Sitzungsschlüssel und andere interessante Dinge gibt. Daher wurde das Messenger-Projekt ausgewählt.


Da nicht alle zum Senden von Nachrichten erforderliche Infrastruktur vorhanden ist, wird diese Funktion an vorhandene Dienste wie Google Mail oder VKontakte delegiert.


Schnittstellenbeschreibung


Wenn Sie die Anwendung zum ersten Mal starten, werden Sie aufgefordert, ein Kennwort einzugeben:



Dieses Kennwort wird zum Verschlüsseln von auf der Festplatte gespeicherten Daten verwendet, z. B .: RSA- Schlüssel, Autorisierungstoken für OAuth2 , Daten zu Diensten und Kontakten.


Nachrichten und Informationen zu Dialogen werden nicht gespeichert , dh am Ende der Anwendung gehen Daten zu empfangenen Nachrichten und geöffneten Dialogen verloren.


Bei nachfolgenden Starts fordert die Anwendung außerdem ein Kennwort an, um zuvor gespeicherte Daten zu entschlüsseln und herunterzuladen.


Ansicht des Hauptanwendungsfensters:



Bevor Sie die erste Nachricht senden können, müssen Sie zwei Schritte ausführen:


  • Richten Sie eine Verbindung zum Dienst zum Senden von Nachrichten ein ( mehr im Wiki ).
  • Kontaktperson hinzufügen ( mehr im Wiki );

Das Wichtigste, aufgrund dessen der Kontakt vor Beginn des Austauschs hinzugefügt wird, ist der öffentliche Schlüssel . Jede Nachricht, die zwischen Benutzern gesendet wird, muss vom Absender signiert werden. Wenn der Empfänger die digitale Signatur nicht mit dem öffentlichen Schlüssel überprüfen konnte, wird eine solche Nachricht verworfen.


Der öffentliche Schlüssel wird auch zum Verschlüsseln des Sitzungsschlüssels verwendet.


Nachdem alle vorbereitenden Schritte abgeschlossen sind, können Sie den Dialog starten. Dazu gibt es im Hauptanwendungsfenster eine entsprechende Schaltfläche ( mehr im Wiki ). Beim Erstellen einer Konversation wird ein Sitzungsschlüssel generiert , der alle Nachrichten in dieser Konversation verschlüsselt .


Alle Dialoge werden im Hauptfenster links angezeigt. Nachdem Ihr Gesprächspartner die Erstellung eines Dialogs bestätigt hat, können Sie darin Nachrichten senden und empfangen:



Um Nachrichten im gewünschten Dialogfeld zu senden oder zu lesen, müssen Sie diese durch Klicken mit der linken Maustaste auswählen.


Die Nachrichten des Remote-Benutzers werden links und Ihre rechts angezeigt. Wenn die Nachricht noch nicht zugestellt wurde, wird sie grau angezeigt:



Die Anwendung sortiert die Liste der Dialoge in der folgenden Reihenfolge: Ganz oben befinden sich aktive Dialoge, für die das Senden von Nachrichten zulässig ist, und ganz unten geschlossene. Die Reihenfolge wird auch von der Zeit beeinflusst, zu der sich der Dialog ändert. Der aktive Dialog, in dem die letzte Nachricht empfangen wurde, ist vor allem und der erste geschlossene unten. Für jeden Dialog wird ein Indikator für die Anzahl der ungelesenen Nachrichten angezeigt, falls vorhanden:



Der Dialogstatus wird in Farbe hervorgehoben:


  • Geschlossene Dialoge sind rot
  • Aktive Dialoge werden grün angezeigt, es ist ihnen möglich, Nachrichten zu senden
  • graue Dialoge sind in Vorbereitung.

Hier ist ein Beispiel dafür, wie eine einfache Nachricht mit gelbem Welttext aussieht ! ::



Signalaustausch


Der Nachrichtenaustausch zwischen den Gesprächspartnern A und B besteht aus folgenden Schritten:


  • Partei A generiert einen Befehl zum Erstellen eines Dialogfelds ( CREATE_DIALOG ) und signiert ihn mit seinem privaten Schlüssel.
  • Partei B bittet den Benutzer um Zustimmung zur Erstellung eines Dialogs. Wenn der Benutzer zustimmt, werden ein Sitzungsschlüssel T und eine zufällige Zeichenfolge R generiert, die einzeln mit dem öffentlichen Schlüssel A verschlüsselt und im Nachrichtentext ( VERIFY_KEY ) VERIFY_KEY . Die gesamte Nachricht wird mit dem privaten Schlüssel B signiert .
  • Seite A entschlüsselt den Sitzungsschlüssel und die Zufallszeichenfolge, verschlüsselt die Zufallszeichenfolge mit dem Sitzungsschlüssel und fügt das Ergebnis dem Nachrichtentext KEY_VERIFICATION hinzu. Signiert die gesamte Nachricht mit seinem privaten Schlüssel.
  • Seite B entschlüsselt die zufällige Zeichenfolge. Überprüfen Sie, ob das Ergebnis mit der Zeichenfolge R übereinstimmt. Wenn alles korrekt ist, wird die signierte Nachricht ACCEPT_DIALOG bedeutet, dass der Dialog hergestellt wird und ein weiterer Nachrichtenaustausch möglich ist.

Der erfolgreiche Dialogaufbau und der Signalaustausch sind in der Abbildung dargestellt:



Weiterentwicklung des Projekts


Derzeit bietet die Anwendung bereits grundlegende Funktionen für die Nachrichtenverschlüsselung und -authentifizierung durch digitale Signatur. Die Liste der unterstützten Dienste ist jedoch äußerst klein.


In Zukunft ist eine Erhöhung geplant. Es wird bereits daran gearbeitet, VKontakte einzubeziehen .


Ebenfalls im Projekt ist eine Erhöhung des Informationsgehalts der Benutzeroberfläche, z. B. das Hinzufügen eines Status für die Verbindung zu einem Dienst (aktiv, Verbindungsfehler usw.).


Der Algorithmus zum Überprüfen doppelter Nachrichten funktioniert nicht optimal, er soll finalisiert werden.

Source: https://habr.com/ru/post/de452736/


All Articles