Cryptage des messages dans SecureDialogues

Cryptage, signature numérique, protection des données sont des termes assez courants chez les informaticiens.


J'ai déjà écrit de nombreuses publications, articles et livres intéressants sur ces sujets. Après avoir lu l'un d'eux, j'ai décidé de m'essayer à la pratique. Et c'est ainsi que le projet est né, qui sera discuté ci-dessous.


Dossier d'application


L'application SecureDialogues ajoute un niveau de cryptage aux messages transmis via des services tels que Gmail . L'application elle-même effectue l'autorisation pour les services configurés à l'aide du protocole OAuth2 , reçoit et envoie des messages. À la base, il s'agit d'un messager régulier qui fournit une protection cryptographique aux messages, à moins que l'un des services tiers ne puisse être utilisé pour le transfert.


Les données sur le disque dur sont cryptées à l'aide de l'algorithme AES avec une clé de 256 bits, qui est extraite du mot de passe entré au démarrage, RSA est utilisé pour la signature numérique. Les messages utilisateur sont codés avec une clé de session AES 256 bits.


Les codes sources sont disponibles sur le lien , wiki du projet .


Le lancement de l'application dans le conteneur Docker est disponible, plus sur le lien .


But de la création


L'application a été créée dans un but très spécifique - c'était intéressant pour moi de travailler avec la cryptographie sur un projet pratique. Et pas dans un texte simple, comme «insérer le texte ici, mais ici, prenez le message codé», mais de telle sorte qu'il existe une signature numérique , un cryptage asymétrique , des clés de session et d'autres choses intéressantes. Par conséquent, le projet messenger a été choisi.


En l'absence de toute l'infrastructure nécessaire pour l'envoi de messages, cette fonction est déléguée à des services existants comme Gmail ou VKontakte .


Description de l'interface


Au premier démarrage, l'application vous demandera de saisir un mot de passe:



Ce mot de passe est utilisé pour crypter les données stockées sur le disque dur, telles que: clés RSA , jetons d'autorisation pour OAuth2 , données sur les services et contacts.


Les messages et informations sur les boîtes de dialogue ne sont pas enregistrés , c'est-à-dire qu'à la fin de l'application, les données sur les messages reçus et les boîtes de dialogue ouvertes sont perdues.


Lors des lancements ultérieurs, l'application demande également un mot de passe pour décrypter et télécharger les données précédemment enregistrées.


Vue de la fenêtre principale de l'application:



Avant de pouvoir envoyer le premier message, vous devez effectuer deux étapes:



La chose la plus importante, à cause de laquelle le contact est ajouté avant le début de l'échange, est la clé publique . Chaque message envoyé entre utilisateurs doit être signé par l'expéditeur. Si le destinataire n'a pas pu vérifier la signature numérique à l'aide de la clé publique, un tel message est rejeté.


De plus, la clé publique est utilisée pour crypter la clé de session.


Une fois toutes les étapes préliminaires terminées, vous pouvez démarrer le dialogue. Pour ce faire, il y a un bouton correspondant dans la fenêtre principale de l'application ( plus sur le wiki ). Lors de la création d'une conversation, une clé de session est générée qui crypte tous les messages de cette conversation.


Toutes les boîtes de dialogue sont affichées dans la fenêtre principale à gauche. Une fois que votre interlocuteur a confirmé la création d'un dialogue, vous pouvez y envoyer et recevoir des messages:



Pour envoyer ou lire des messages dans la boîte de dialogue souhaitée, vous devez la sélectionner en cliquant sur le bouton gauche de la souris.


Les messages de l'utilisateur distant s'affichent à gauche et les vôtres à droite. Si le message n'a pas encore été remis, il s'affiche en gris:



L'application trie la liste des boîtes de dialogue dans l'ordre suivant - tout en haut, il y aura des boîtes de dialogue actives pour lesquelles l'envoi de messages est autorisé, et tout en bas, il y en aura de fermées. En outre, l'ordre est affecté par le moment où la boîte de dialogue change. Le dialogue actif que le dernier message reçu sera avant tout, et le premier fermé sera en bas. Pour chaque dialogue, un indicateur du nombre de messages non lus s'affiche, le cas échéant:



Le statut du dialogue est surligné en couleur:


  • les boîtes de dialogue fermées sont rouges
  • les dialogues actifs sont affichés en vert , il leur est possible d'envoyer des messages
  • des dialogues gris sont en préparation.

Voici un exemple de ce à quoi ressemble un simple message avec un texte du monde! :



Échange de signaux


L'échange de messages entre les interlocuteurs A et B comprend les étapes suivantes:


  • la partie A génère une commande pour créer une boîte de dialogue ( CREATE_DIALOG ) et la signe avec sa clé privée;
  • la partie B demande à l'utilisateur le consentement pour créer un dialogue, et si l'utilisateur est d'accord, une clé de session T et une chaîne aléatoire R sont générées, qui sont individuellement chiffrées avec la clé publique A et placées dans le corps du message ( VERIFY_KEY ). L'ensemble du message est signé avec la clé privée B.
  • le côté A déchiffre la clé de session et la chaîne aléatoire, chiffre la chaîne aléatoire avec la clé de session, ajoute le résultat au KEY_VERIFICATION message KEY_VERIFICATION . Signe l'intégralité du message avec sa clé privée.
  • le côté B déchiffre la chaîne aléatoire, vérifie si le résultat correspond à la chaîne R , si tout est correct, le message signé ACCEPT_DIALOG , ce qui signifie que le dialogue est établi et que l'échange de messages est possible.

L'établissement d'un dialogue réussi et l'échange de signaux sont illustrés dans la figure:



Poursuite du développement du projet


À l'heure actuelle, l'application fournit déjà des capacités de base pour le cryptage et l'authentification des messages via la signature numérique. Mais la liste des services pris en charge est extrêmement petite.


À l'avenir, il est prévu de l'augmenter. Des travaux sont déjà en cours pour y inclure VKontakte .


Le projet contient également une augmentation du contenu informatif de l'interface utilisateur, comme l'ajout d'un état de connexion à un service (actif, erreur de connexion, etc.).


L'algorithme de vérification des messages en double ne fonctionne pas de la meilleure façon, il est prévu de le finaliser.

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


All Articles