Docs

Report for faculty (french)

Secure Talk

STRASSER Michel, DIALLO Amadou 2


Table des matières

Introduction

Avant-propos

Les sources du programme, les sources de ce document ainsi que les différents diagrammes sont disponibles sur le CDROM joint au dossier.

Intérêts - Objectifs

La norme internet IPV41.1 n'assure pas de cryptage. Le service de cryptage n'est pas non plus assuré par TCP. Les données transitées sur internet sont susceptibles d'être "sniffées".

Attaque de type scan de port et sniffage

Un scan de port 1.2 est l'action d'essayer de se connecter incrémentalement sur tous les ports d'une machine pour voir ceux qui sont utilisés. Les numéros de port sont en générale associés de façon statique à un certain type de serveur 1.3 ce qui permet de faire des hypothèses sur les services proposés par le serveur situé en amont et susceptible d'offrir des brêches de sécurité.

Sur les réseaux ethernet, l'utilisation habituelle des cartes réseaux est de ne prendre en compte que les messages qui leur sont destinés. Pourtant il est possible de les positionner de tel sorte qu'ils écoutent tous les messages. Comme les paquets IPV4 ne sont pas cryptés, un tiers peut, si l'on ne dispose pas de mécanisme particulier, écouter des conversations une fois qu'il aura détecté la présence d'un serveur talk grâce à un scan de port précédemment effectué.

Les problèmes de sécurités prennent une grande échelle lorsque le réseau ne connait plus de contraintes physiques comme c'est le cas des réseaux sans fils1.4.

Cryptage asymétrique, - symétrique

Les cryptages ne sont pas basés simplement sur la connaissance d'un algorithme mais sont généralement paramétrables grâce à une clé.

On appelle cryptage symétrique, les cryptages pour lesquelles la clé utilisée pour crypter est la même que pour décrypter. Exemple de tel cryptage XOR (le ou exclusif)1.5.

Ce type de cryptage pose le problème de comment communiquer la clé unique. C'est un problème du type oeuf et la poule. En fait pour assurer le cryptage on aurait besoin d'un canal crypté pour communiquer la clé.

Le cryptage asymétrique se distingue par le fait que la clé utilisée pour crypter est différente de la clé utilisée pour décrypter. La clé de cryptage est publique, tout le monde à le droit de crypter, et il n'est pas considérer comme une faille de sécurité qu'un acteur non désiré s'empare de la clé publique, celle-ci ne sert qu'à crypter tout comme un téléviseur ne sert qu'à recevoir des émissions télévisées et non pas à en diffuser. La clé privée, pour le décryptage, doit rester secrète.

Les cryptages asymétriques sont en règle général plus lent et demandent des clés plus longues que leurs cousins symétriques. C'est pourquoi un bon compromis est de prendre un cryptage asymétrique simplement pour communiquer une clé de cryptage symétrique et crypter symétriquement par la suite.

Objectif du projet de téléinformatique

Il est demandé d'implémenter un talk sécurisé grâce au cryptage asymétrique RSA.

RSA

2.1

Découpage logique

Le fonctionnement de la partie RSA a été découpé en deux couches :

La couche haute

Le découpage pour le cryptage est assez facile. Par contre pour le décryptage, il fallait encore décomposer en deux couches. En effet, on obtient un flux qui peut ne pas être complet ni au niveau de mots de 16 caractères, ni au niveau de message. Ceci provient du fait que TCP bufferise2.2. Il faut donc mettre en place un mécanisme compliqué de découpage et de bufferisation.

Pour le découpage en message, on a posé la convention que les messages étaient séparés par un saut à la ligne. On a, pour éviter tout risque que la fin d'un message se retrouve dans le même mot de 16 caractères d'un début d'un nouveau message, bourré les fins de messages avec le souligné '_'.

La première couche s'occupe du découpage en mot de 16 caractères, la deuxième du découpage en message. Le couplage des deux couches fournit un service de haut niveau puisque la méthode decrypt de l'objet de classe RsaDecrypter ne renvoie une chaîne décrypté que lorsqu'un message entier a pu être lu2.3.

La couche basse

Comme le veut l'algorithme RSA qui est un algorithme de cryptage à clés publique et privée, on doit trouver une manière de générer des clées. Vue la difficulté de factoriser les grand nombres, on cherche deux entiers $p$ et $q$ premiers entre eux. Dans notre cas ces deux entiers qui restent privés sont pris aléatoirement entre $2^{60}$ et $2^{64}$ et sont différents.

Ce qui permet de calculer les grand entiers :

Ayant calculer $n$ on cherche: Les entiers $e$ et $d$ correspondent respectivememt aux clées publique et privée.

Les messages à envoyer étant sous forme de chaînes de caractères on définit deux fonctions rsa_str2gdnb() et rsa_gdnb2str() qui, respectivement, transforment une chaîne de caractères de taille donnée en un grand entier et réciproquement.

Ce qui permet de transformer une chaîne $m$ en un gdnb $m'$ et de coder $m'$ pour obtenir $c$ par la relation: $c = m'^e mod~ n$$e$ et $n$ correspondent à leurs équivalents précédemment calculés. De même pour décoder un code $c$ et obtenir un gdnb $m$ on définit une fonction qui effectue l'opération: $m = c^d mod~ n$ avec $d$ et $n$ précédemment calculés.

Or puisqu'on ne manipule, dans la couche supérieure, que des chaînes de caractères et pas de gdnb, il a fallu définir des fonctions d'interface telle que cryptage et décryptage qui prennent en paramètres, chacune, trois chaînes de caractères et en retourne une correspondant respectivement à une chaîne cryptée et une chaîne decryptée.

Fonctions définies pour le cryptage et le décryptage des messages

Voici les différentes fonctions implantées pour le cryptage RSA et leurs rôles respectifs:

Structures de données utilisées

Hormis la structure gdnb définie dans gdnb.h, on utilise les structures suivantes :

Résumé de l'algorithme RSA

Talk

Les grands axes

Deux canaux : commandes / données

Analogie avec FTP3.1 dans lequel on utilise une prise3.2 pour les commandes, et une autre pour les données.

Cette solution est intéressantes à plus d'un titre, d'un part, les commandes peuvent être dans un format très réduit, par exemple s3.3 pour un message, q pour quitter.

Quand au canal des données, la question est-ce qu'il est crypté ou non, ne se pose pas : il est crypté.

Bref un canal crypté pour les données, un canal non crypté pour les commandes.

Solution retenue : états et reconnaissances de motifs

On conserve des états comme par exemple déconnecté, en attente de clef ou encore en discussion. Les caractères lus au clavier ou sur le réseau rentre dans un pipeline : nature du message, mise en forme des paramètres, appel de méthode, basculement d'état. Les annexes [*], [*], [*] et [*] décrivent le fonctionnement de l'étape nature du message.

Les états

Figure: Cycle de vie de la structure client du serveur
\includegraphics{ServerClientSpeakerLifeCycle.eps}
Voir figure [*]
Figure: Cycle de vie du client
\includegraphics{ClientServerSpeakerLifeCycle.eps}
et figure [*].

Les problèmes liées à l'implémentation

Chaînage

Définition du problème

Si l'on considère le serveur comme une base de données, on peut énoncer le problème ainsi : il n'existe pas de clef primaire évidente.

En effet, lorsque surgit des évènements réseau sur le serveur, comme par exemple le client Binta qui diffuse un message. Dans ce cas le plus pratique serait d'accédé à la structure associée au client à l'aide d'une table de hash dont la clé serait l'identificateur de socket de Binta pour récupérer son surnom .

Ensuite il faut envoyer le message à tous les clients connectés. Le mieux serait d'avoir une liste.

Mais lorsque sur le serveur, l'évènement kill Binta surgit, on a besoin d'accéder à la structure de donnée associée à Binta à partir de son surnom : On a besoin d'une table de hash dont la clé est le surnom .

Résolution

La solution retenue est de les retenir toutes, i.e. on utilise toutes ces structures de données décrites plus haut. Les dangers d'incohérences dues à la duplication des données nous ont conduit à la plus grande vigilence et à l'établissement de spécifications très poussées 3.4.

Conflit de surnoms

Définition du problème

Le surnom affecté à un client est en principe proposé par le client lui-même lorsque celui-ci fait un connect. Un problème se pose lorsqu'un client veut se connecter sous le pseudo Binta alors que ce pseudo est déjà utilisé par un autre client.

Résolution

Plusieurs solutions étaient envisageables:

Mort précoce

Définition du problème

Les structures de données sont cohérentes tant que tous les parties jouent le jeu. La mort précoce provoque des situations d'incohérence. En effet, lorsqu'un client est tué parce que l'utilisateur a appuyé sur la combinaison CONTROL+C, ou plus simplement une coupure d'alimentation sur le client font en sorte que le client meurt sans avoir envoyé de quit au serveur.

Si le serveur ne reçoit pas de quit, il continera à référencer le client éternellement, en particulier un who affichera la présence de ce client alors que celui-ci peut-être mort depuis une semaine.

Résolution

Plusieurs solutions étaient envisageables:

À propos de ce document...

Secure Talk

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2htm -dir outHtml2/ -split 0 SecureTalkWeb.tex

The translation was initiated by mist on 2004-01-07


Notes

... IPV41.1
Au contraire d'IPV6, mais cette norme n'est pas encore la norme de travail
... port1.2
Voir man nmap et man tcpdump
... serveur1.3
Voir sous UNIX le fichier /etc/services
... fils1.4
en Ang. wireless
... exclusif)1.5
Le XOR est à éviter car sujet au reverse-ingeniring
... 2.1
du nom des trois auteurs Rivest, Shamir et Adleman
... bufferise2.2
la bufferisation est accentué par le fait que l'on utilise des messages très courts
... lu2.3
Elle renvoie NULL sinon
...FTP3.1
File Transfert Protocol
... prise3.2
socket
...s3.3
de l'anglais say
... poussées3.4
cf. annexes