MSCI 2013 
Application de chat client/serveur 
-Sockets sécurisés- 
REALISE PAR: 
SOUMIA OUALLA 
OMAYMA BELKADI 
AHMED ...
MSCI 
1 
Sommaire 
SOMMAIRE 1 
INTRODUCTION 2 
1. LA CRYPTOGRAPHIE 3 
1.1. HISTORIQUE 3 
1.2. GENERALITES 4 
2. LES ALGORI...
MSCI 
2 
INTRODUCTION 
L'homme a toujours ressenti le besoin de dissimuler des informations, bien avant même l'apparition ...
MSCI 
3 
1. La Cryptographie 
Le mot cryptographie est un terme générique désignant l'ensemble des techniques permettant d...
MSCI 
4 
articles de Claude Shannon, « A mathematical theory of communication » et surtout « The communication theory of s...
MSCI 
5 
On appelle décryptement (le terme de décryptage peut éventuellement être utilisé également) le fait d'essayer de ...
MSCI 
6 
L'algorithme DES est un algorithme de cryptographie en bloc. Il opère généralement sur des blocs de 64 bits et ut...
MSCI 
7 
Elle augmente le premier argument de 32 à 48 bits suivant une fonction d'expansion E. Le résultat est alors addit...
MSCI 
8 
clé avant d'être recrypté avec la clé L'utilisation de seulement 2 clés (au lieu de 3) ne diminue pas la sécurité...
MSCI 
9 
L'AES opère sur des blocs rectangulaires de 4 lignes et Nc colonnes, dont chaque terme (appelé octet ou byte) est...
MSCI 
10 
d'années) et aucune attaque ne lui est connue à ce jour. 
 Il est très efficace en terme de rapidité (nettement...
MSCI 
11 
 Création des clés (par B) : 
Choisir p et q 2 entiers premiers distincts suffisamment grands et suffisamment é...
MSCI 
12 
pas de coder des messages trop longs sans être obligé de les couper, car le calcul de déchiffrement risquerait d...
MSCI 
13 
percées théoriques. Très récemment, un groupe de chercheurs est parvenu à factoriser un nombre de 512 bits. En c...
MSCI 
14 
systématiquement. Un serveur peut répondre aux requêtes d'un grand nombre de clients. 
Il existe une grande vari...
MSCI 
15 
Contrairement au mode connecté, le mode non connecté (appelé aussi mode datagramme) ne comporte qu’une seule pha...
MSCI 
16 
schéma illustrant une communication entre un client et un serveur : 
Le client commence à se connecter au serveu...
MSCI 
17 
mécanisme d’échange de données en se basant sur le langage C# et sur le protocole TCP. 
Nous utiliserons la clas...
MSCI 
18 
On fais cette précision car il est possible de travailler en mode « déconnecté », c'est à dire qu'un client se c...
MSCI 
19 
Le code du serveur est « divisé » en quatre parties: 
 Le thread principal: c'est lui qui crée le socket d'écou...
MSCI 
20 
flux sortant ensuite, on envoie un message au client, et pour finir on ferme la connexion. Le socket, une fois c...
MSCI 
21 
Du côté du client, c'est encore plus simple. On doit créer un socket de la même façon que pour le serveur. Le so...
MSCI 
22 
Conclusion 
Après la présentation de ces différents algorithmes de codage, et les implémenter dans notre applica...
MSCI 
23 
Bibliographie 
 Rolland Balzon Philippe, Principaux algorithmes de cryptage, SEPRO Robotique, 11 juillet 2002. ...
Prochain SlideShare
Chargement dans…5
×

Application de chat client/serveur -Sockets sécurisés-

4 235 vues

Publié le

Dans ce travail nous discutons les divers algorithmes de cryptographie et leurs implémentation dans une application de chatt sécurisé en C# .net

Publié dans : Formation
0 commentaire
5 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
4 235
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
5
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Application de chat client/serveur -Sockets sécurisés-

  1. 1. MSCI 2013 Application de chat client/serveur -Sockets sécurisés- REALISE PAR: SOUMIA OUALLA OMAYMA BELKADI AHMED LAGRINI ENCADRE PAR: MR. SAID BOUCHKAREN
  2. 2. MSCI 1 Sommaire SOMMAIRE 1 INTRODUCTION 2 1. LA CRYPTOGRAPHIE 3 1.1. HISTORIQUE 3 1.2. GENERALITES 4 2. LES ALGORITHMES DE LA CRYPTOGRAPHIE 5 2.1. CRYPTOGRAPHIE SYMETRIQUE 5 2.1.1. DES (DATA ENCRYPTION STANDARD) 5 2.1.2. AES (ADVANCED ENCRYPTION STANDARD) 8 2.2. CRYPTOGRAPHIE ASYMETRIQUE 10 2.2.1. RSA (RIVEST SHAMIR ADLEMAN) 10 2.3. COMPARAISON ENTRE SYMETRIQUE ET ASYMETRIQUE 12 3. LES SOCKETS 13 3.1. QUELQUES DEFINITIONS 13 3.2. QU’EST-CE QU’UN SOCKET ? 15 4. APPLICATION DE CHAT EN UTILISANT C# 16 CONCLUSION 22 BIBLIOGRAPHIE 23
  3. 3. MSCI 2 INTRODUCTION L'homme a toujours ressenti le besoin de dissimuler des informations, bien avant même l'apparition des premiers ordinateurs et de machines à calculer. Depuis sa création, le réseau Internet a tellement évolué qu'il est devenu un outil essentiel de communication. Cependant, cette communication met de plus en plus en jeu des problèmes stratégique liés à l'activité des entreprises sur le Web. Les transactions faites à travers le réseau peuvent être interceptées, d'autant plus que les lois ont du mal à se mettre en place sur Internet, il faut donc garantir la sécurité de ces informations, c'est la cryptographie qui s'en charge. Et depuis « l'arrivée d'Internet dans tous les foyers », les échanges d'informations sont grandement facilités. Reste qu'avec ce flux d'informations permanent, on peine à trouver un espace de confidentialité. La cryptographie, vielle de plus de 3000 ans, apporte une solution à la sécurisation des informations confidentielles et personnelles. Nous allons voir d'où elle tire ses origines, comment cela fonctionne-t-il et surtout comment l'utiliser simplement au quotidien.
  4. 4. MSCI 3 1. La Cryptographie Le mot cryptographie est un terme générique désignant l'ensemble des techniques permettant de chiffrer des messages, c'est-à-dire permettant de les rendre inintelligibles sans une action spécifique. Le verbe crypter est parfois utilisé mais on lui préfèrera le verbe « chiffrer ». 1.1. Historique L’origine de la cryptographie remonte sans doute aux origines de l’homme, dès que ceux-ci apprirent à communiquer. Alors, ils durent trouver des moyens d’assurer la confidentialité d’une partie de leurs communications. Dans l’Égypte ancienne, l’écriture joua parfois ce rôle. Cependant la première attestation de l’utilisation délibérée de moyens techniques permettant de chiffrer les messages vint de la Grèce, vers le VIème siècle avant J.C, et se nomme « scytale ». Le scytale était un bâton. L’expéditeur enroulait une bandelette autour et écrivait longitudinalement sur le bâton. Puis il déroulait la bandelette et l’expédiait au destinataire. Sans la connaissance du diamètre du bâton qui jouait le rôle de clé, il était impossible de déchiffrer le message. Plus tard, les armées romaines utilisèrent pour communiquer le chiffrement de César consistant en un décalage de l’alphabet de trois lettres. Puis, pendant près de 19 siècles, on assista au développement plus ou moins ingénieux de techniques de chiffrement expérimentales dont la sécurité reposait essentiellement dans la confiance que leur accordaient les utilisateurs. Au 19ème siècle, Kerchoffs posa les principes de la cryptographie moderne. Figure 1: Le scytale Figure 2: Chiffrement de César L’un des principaux pose que la sécurité d’un système de chiffrement ne résidait que dans la clé et non dans le procédé de chiffrement. Désormais, concevoir des systèmes cryptographiques devait répondre à ces critères. Cependant, il manquait encore à ces systèmes une assise mathématique donnant des outils qui permette de mesurer, de quantifier leur résistance à d’éventuelles attaques, et pourquoi pas de trouver le « saint Graal » de la cryptographie: le système inconditionnellement sûr. En 1948 et 1949, deux
  5. 5. MSCI 4 articles de Claude Shannon, « A mathematical theory of communication » et surtout « The communication theory of secrecy systems » donnèrent des assises scientifiques à la cryptographie en balayant espoirs et préjugés. Shannon prouva que le chiffrement de Vernam introduit quelques dizaines d’années plus tôt - encore appelé one-time pad - était le seul système inconditionnellement sûr. Cependant ce système est impraticable. C’est pourquoi, de nos jours pour évaluer la sécurité d’un système on s’intéresse plutôt à la sécurité calculatoire. On dit qu’un système de chiffrement à clé secrète est sûr si aucune attaque connue ne fait beaucoup mieux en complexité que la recherche exhaustive sur l’espace des clés. 1.2. Généralités La cryptologie est essentiellement basée sur l'arithmétique; Il s'agit dans le cas d'un texte de transformer les lettres qui composent le message en une succession de chiffres (sous forme de bits dans le cas de l'informatique car le fonctionnement des ordinateurs est basé sur le binaire), puis ensuite de faire des calculs sur ces chiffres pour, d’une part les modifier de telle façon à les rendre incompréhensibles. Le résultat de cette modification (le message chiffré) est appelé cryptogramme (en anglais ciphertext) par opposition au message initial, appelé message en clair (en anglais plaintext) faire en sorte que le destinataire saura les déchiffrer. Le fait de coder un message de telle façon à le rendre secret s'appelle chiffrement. La méthode inverse, consistant à retrouver le message original, est appelée déchiffrement. Figure 3: Chiffrement et Déchiffrement Le chiffrement se fait généralement à l'aide d'une clef de chiffrement, le déchiffrement nécessite quant à lui une clef de déchiffrement. On distingue généralement deux types de clefs :  Les clés symétriques: utilisées pour le chiffrement ainsi que pour le déchiffrement. On parle alors de chiffrement symétrique ou de chiffrement à clé secrète.  Les clés asymétriques: utilisées dans le cas du chiffrement asymétrique. Dans ce cas, une clé différente est utilisée pour le chiffrement et pour le déchiffrement
  6. 6. MSCI 5 On appelle décryptement (le terme de décryptage peut éventuellement être utilisé également) le fait d'essayer de déchiffrer illégitimement le message (que la clé de déchiffrement soit connue ou non de l'attaquant). Lorsque la clef de déchiffrement n'est pas connue de l'attaquant on parle alors de cryptanalyse ou crypto-analyse (on entend souvent aussi le terme plus familier de cassage). La cryptologie est la science qui étudie les aspects scientifiques de ces techniques, c'est-à-dire qu'elle englobe la cryptographie et la cryptanalyse. 2. Les algorithmes de la cryptographie Les premiers algorithmes utilisés pour le chiffrement d'une information étaient assez rudimentaires dans leur ensemble. Ils consistaient notamment au remplacement de caractères par d'autres. La confidentialité de l'algorithme de chiffrement était donc le point sensible de ce système. Il fallait donc absolument le protéger pour éviter un décryptage rapide. Cependant les techniques ont évolués et le chiffrement et le déchiffrement se font maintenant à l’aide de clés. On distingue deux types de cryptographie : 2.1. Cryptographie Symétrique On parle de cryptographie symétrique lorsque plusieurs personnes utilisent une même clé pour crypter et décrypter des messages. Le principal inconvénient de ce système est le partage de cette clé unique entre les différentes personnes. Il y a différents algorithmes de cette cryptographie, citant les suivant : 2.1.1. DES (Data Encryption Standard) Créé dans les années 70 (public en 1981), l'algorithme DES a été l'algorithme de cryptographie le plus usité jusqu'à ces dernières années. Il a été réécrite depuis (environ tous les 5 ans) et est encore aujourd'hui utilisé (mais pas sous sa forme simple). Sa plus récente version date de 1994.
  7. 7. MSCI 6 L'algorithme DES est un algorithme de cryptographie en bloc. Il opère généralement sur des blocs de 64 bits et utilise une clé de 56 bits qui sera transformée en 16 sous-clés de 48 bits chacune. Le chiffrement se déroule en 16 tours (ou rounds). Avant de débuter les 16 tours on effectue la transformation suivante : Soit un bloc de texte clair x, une chaîne de bits est construite en changeant l'ordre des bits de x suivant une permutation initiale (In) fixée. On écrit ( ) , où contient les 32 premiers bits de la chaîne et contient les 32 restants. On effectue ensuite 16 itérations du type : et ( ) et F une fonction qui prend pour argument une chaine de 32bits et une chaine de 48 bits et renvoie une chaine de 32 bits
  8. 8. MSCI 7 Elle augmente le premier argument de 32 à 48 bits suivant une fonction d'expansion E. Le résultat est alors additionné modulo 2 avec le second argument. Le résultat appelé B sera découpé en 8 sous-chaînes de 6 bits chacune : . L'étape suivante utilise 8 boîtes S : . Chacune des peut être vue comme une fonction qui prend en entrée une chaîne de 6 bits et produit une chaîne de 4 bits. On calcule ainsi ( ). La chaîne de longueur 32 sera alors transformée par une permutation P fixée qui sera renvoyée comme étant le résultat de la fonction . Au cours des 25 dernières années, l'algorithme DES s'est révélé être un algorithme solide. La seule attaque connue à ce jour est purement académique, et n'a aucune conséquence sur la sécurité pratique de l'algorithme. Malheureusement, sa faiblesse réside dans la longueur de sa clé, qui n'est que de 56 bits. En effet, certains calculs ont montrés qu'il était possible d'effectuer une recherche exhaustive de clé, en essais. Ces calculs sont réalisables en un temps limité et avec un coût relativement raisonnable. Pour pallier à cela a été mis au point le 2-DES, c'est-à-dire crypter deux fois de suite le message clair avec l'algorithme DES. Malheureusement, cela n'apporte pas véritablement de sécurité supplémentaire, car il suffit d'une « attaque dans le milieu » pour obtenir un temps de cryptanalyse coûteux, mais faisable. La solution réside donc dans l'emploi d'un triple DES, contre lequel aucun type d'attaque efficace n'est connu. Le message est alors cryptée avec une clé puis décrypté avec une
  9. 9. MSCI 8 clé avant d'être recrypté avec la clé L'utilisation de seulement 2 clés (au lieu de 3) ne diminue pas la sécurité mais diminue le temps de calcul. La meilleure attaque connue contre ce système est de l'ordre de (donc irréalisable), si la même clé n'est pas utilisée plus de 256 fois. Malheureusement, même si cette façon de coder s'avère sûre, elle reste assez lente. En effet, le cryptage par DES se fait à une vitesse relativement moyenne, et le 3-DES est pratiquement 3 fois plus lent. De plus l'algorithme DES ne traite que des blocs de (seulement) 64 bits. En pratique DES peut être implémenté de manière efficace, en matériel ou en logiciel. En effet, les seules opérations arithmétiques à effectuer sont les ou-exclusifs de chaînes de bits. Les différents calculs de la fonction pouvant être effectués par des accès de tables (en logiciel) ou par un câblage de circuit adapté (en matériel). DES étant un algorithme de chiffrement par bloc, il peut être appliqué de plusieurs façons. En réalité, 4 modes d'utilisation de DES ont été proposés: ECB (Electronic CodeBook mode), CFB (Cipher FeedBack mode), CBC (Cipher Block Chaining mode) et OFB (Output FeedBack mode). Ces modes sont donc particulièrement adaptés aux problèmes d'authentification et sont utilisés dans les MAC (Message Authentification Code). Un MAC est une section de message, ajoutée au texte clair (ou au texte chiffré), afin de garantir l'intégrité du message envoyé. 2.1.2. AES (Advanced Encryption Standard) En 1997, le NIST (National Institute of Standards and Technology) américain lance un appel d'offre afin de trouver un remplaçant au DES. 15 algorithmes sont alors étudiés, et en fonction des différents critères, fin 2000, l'algorithme belge Rijndaël, proposé par Joan Daemen et Vincent Rijmen, est retenu. Il faut savoir que chacun des modèles a été testé sur plusieurs types de surface et Rijndaël n'a été le premier sur aucune d'elle, mais il a montré qu'il gardait à chaque fois des performances très intéressantes. Il a donc été choisi autant pour son adaptabilité que pour ses performances. Du fait de son origine, l'AES est un standard. Il est donc libre d'utilisation, sans restriction d'usage ni brevet.
  10. 10. MSCI 9 L'AES opère sur des blocs rectangulaires de 4 lignes et Nc colonnes, dont chaque terme (appelé octet ou byte) est composé de 8 bits ( ), et peut être représentés algébriquement sous forme de polynômes de degrés ( ), à coefficients dans (0 ou 1). La clé peut être d'une longueur de 128, 156, ou 256 bits, de même pour le message clair et le message chiffré. Tout d'abord la clé est transformée en une clé étendue rectangulaire de colonnes et ( ) lignes, où est le nombre de tours de l'algorithme (voir ci-dessous). Le chiffrement et le déchiffrement s'effectuent de la même manière et sont composés de tours comprenant chacun 4 opérations. Le nombre de tour ( ) dépend de la longueur de la clé ( ) et de la longueur du message clair ( ). Tableau du nombre de tours : =4 (128bits) =6 (192bits) =8 (256bits) =4 (128bits) 10 12 14 =6 (192bits) 12 12 14 =8 (258bits) 14 14 14 AES est le successeur direct de DES. C'est lui aussi un chiffrement par blocs, même s'il permet de chiffrer des blocs de taille nettement supérieure. Les 4 modes d'utilisation du DES (ECB, CFB, CBC et OFB) peuvent donc directement lui être appliqués. L'AES a été choisi pour être totalement sûr et opérationnel sur tout type d'environnement. Il répond effectivement à ces obligations, puisqu'une recherche exhaustive de la clé n'est absolument pas envisageable en un temps limité (on parle de près de 149 milliards
  11. 11. MSCI 10 d'années) et aucune attaque ne lui est connue à ce jour.  Il est très efficace en terme de rapidité (nettement plus que le DES).  Ses besoins en ressources mémoires sont également très faibles.  Il est très flexible d'implémentation. Cela induit une grande variété de plateformes et d'applications.  Il est possible de l'implémenter aussi bien sous forme logicielle que matérielle (câblé).  Enfin, nous pouvons ajouter que l'algorithme de l'AES est relativement simple. Ce sont, entre autre, ces critères qui ont poussé le monde de la troisième génération de mobiles à adopter cet algorithme pour son schéma d'authentification « Millenage ». Il existe d'autres algorithmes tout aussi récents que Rijndael qui ont été mis en place suite à l'appel d'offre du NIST. Parmi eux : Twofish, SERPENT, RC6 et MARS qui étaient les 4 autres « finalistes ». 2.2. Cryptographie Asymétrique Dans ce type de cryptographie, chaque utilisateur comporte deux clés :  Une clé privée qui doit être gardée secrète.  Une clé publique qui est disponible pour tous les autres utilisateurs. Ces deux clés sont mathématiquement liées. Dans la pratique, la clé publique sert à crypter les messages, et la clé privée sert à les décrypter. Une fois le message crypté, seul le destinataire est en mesure de le décrypter. Il y a différents algorithmes de cette cryptographie. 2.2.1. RSA (Rivest Shamir Adleman) R.S.A. signifie Rivest-Shamir-Adleman, en l'honneur de ses inventeurs: Ron Rivest, Adi Shamir et Leonard Adleman qui l'ont créé en 1977. Le brevet de cet algorithme appartenait jusqu'au 6 Septembre 2000 à la société américaine RSA Data Security, qui fait maintenant partie de Security Dynamics et aux Public Key Partners, (PKP à Sunnyvale, Californie, états- Unis). Tout le principe de RSA repose sur le fait qu'il est très difficile et donc très long de décomposer un très grand nombre en deux grands facteurs premiers, sauf cas particuliers. Le codage RSA repose sur la factorisation d'un entier. En effet, il est très compliqué de factoriser un entier suffisamment grand n'ayant pas de petits facteurs premiers. Soient p et q deux nombres premiers, il est facile de calculer leur produit n = p.q. Toutefois retrouver p et q, en ne connaissant que n (i.e. de factoriser n) est loin d'être simple. Soit A l'émetteur du message à chiffrer et B le récepteur.
  12. 12. MSCI 11  Création des clés (par B) : Choisir p et q 2 entiers premiers distincts suffisamment grands et suffisamment éloignés. Poser , on a alors ( ) ( )( ) où est la fonction indicatrice d'Euler (nombre d'entiers premiers avec n et inférieurs à n). Choisir ( ) tel que l'on ait ( ( )) ( ( ) ) Calculer d tel que [ ( )]( [ ( )]). Nous avons alors :  Clé publique de B : ( )  Clé privée de B :  Chiffrement (par A pour B) :  Récupérer la clé publique de B : ( )  Couper le message en entier tel que  Calculer [ ]  Envoyer c  Déchiffrement (par B) :  B calcule alors [ ] et obtient le message clair. Explications Mathématiques : Le texte chiffré (que reçoit B) est [ ]. B calcule alors : [ ] Or [ ( )] Ce qui nous donne bien (d'après la généralisation du petit théorème de Fermat): [ ] La cryptographie à clé publique possède un avantage majeur sur la cryptographie à clé secrète. En effet, si n utilisateurs souhaitent communiquer par le biais d'un crypto-système à clé secrète, chacun d'eux doit disposer d'une clé différente par personne du groupe. Il faut donc pouvoir gérer en tout ( ) clés. Sachant que n peut être de l'ordre de plusieurs milliers, il faut gérer des fichiers de plusieurs millions de clés. De plus, ajouter un utilisateur au groupe n'est pas une mince affaire, puisqu'il faut alors engendrer n clés pour que le nouvel utilisateur puisse communiquer avec les autres membres du groupe, puis distribuer les nouvelles clés à tout le groupe. En revanche, dans le cas d'un crypto-système asymétrique, on stocke les n clés publiques des utilisateurs dans un annuaire. Pour rajouter un utilisateur, il suffit qu'il mette sa clé publique dans l'annuaire. Le codage RSA est donc très intéressant de par le fait qu'il soit à clé publique. De plus, il donne parfaitement satisfaction en termes de sécurité. Malheureusement, il reste beaucoup plus lent qu'un code symétrique. De plus, il ne permet
  13. 13. MSCI 12 pas de coder des messages trop longs sans être obligé de les couper, car le calcul de déchiffrement risquerait d'être trop compliqué. Il est donc le plus souvent utilisé pour chiffrer un nombre aléatoire qui servira de clé dans un message à clé privée. Le temps de cryptage et de décryptage de la clé restent donc abordables, puisque la clé n'est pas trop longue. Le cryptage, ensuite, par un code symétrique permet de garder cette rapidité. Il est également à noter que pour le moment, la sécurité du cryptage RSA repose sur la puissance des ordinateurs et sur les connaissances actuelles en arithmétique. Tout progrès dans un domaine comme dans l'autre (qui sont en constante évolution) peut obliger à allonger la clé, ou à chercher une autre fonction qui soit facilement applicable dans un sens, et quasiment impraticable dans l'autre. 2.3. Comparaison entre Symétrique et Asymétrique Dans la section précédente, nous venons de voir que la cryptographie à clé publique apportait une solution à bien plus de problèmes que la cryptographie à clé secrète. Alors on peut se demander quelle est l'utilité de la cryptographie symétrique (et de l'AES en particulier). Il existe deux raisons fondamentales à ce choix. D'une part, une raison pratique. En effet, la plupart des systèmes de chiffrement à clé publique sont très lents. Le RSA est par exemple plusieurs centaines de fois plus lente que l'AES en programmation logicielle et est complètement hors du coup en implantation matérielle. A notre époque où la vitesse de transmission de l'information constitue un enjeu crucial, l'algorithme de chiffrement ne doit pas être un facteur limitant. D'autre part, du point de vue de la sécurité se posent des problèmes relatifs à la structure même des systèmes de chiffrement à clé publique. Il est en effet frappant de constater que la taille des clés nécessaire en cryptographie à clé publique pour assurer une sécurité satisfaisante est plus grande que la taille des clés en cryptographie à clé secrète. La notion de l'importance de la taille de clé pour assurer la sécurité n'est légitime que dans le cas de la clé secrète. En fait, ces systèmes reposent sur l'hypothèse que les seules attaques possible sont ce que l'on nomme les attaques exhaustives qui consistent à énumérer toutes les clés possibles. Par exemple, dans le cas d'une clé de 128 bits, la taille de l'espace à énumérer est En revanche, dans le cas de la clé publique, la taille de clé n'a de légitimité que lorsqu'on considère le même système. En effet, le système RSA de 512 bits par exemple est bien moins sûr qu'un AES de 128 bits. La seule mesure légitime pour évaluer un crypto-système à clé publique est la complexité de la meilleure attaque connue. Ce qui fait toute la différence on n'est jamais à l'abri de
  14. 14. MSCI 13 percées théoriques. Très récemment, un groupe de chercheurs est parvenu à factoriser un nombre de 512 bits. En conséquence, pour avoir une sécurité su-sante pour les années à venir, on conseille généralement d'utiliser des nombres n de 1024 bits. En chiffrement, il vaut donc mieux utiliser des algorithmes de cryptographie à clé secrète quand c'est possible. 3. Les Sockets Dans cette partie nous allons aborder les sockets. Les sockets sont des points de communication au sein d'un réseau ou d'une même machine permettant à des processus d'échanger des informations. Les chats sont généralement basés sur les sockets. C’est pour ça on a étudié le chat Sécurisé en les utilisant. 3.1. Quelques Définitions  Le modèle client serveur Les protocoles de communication comme TCP/IP permettent la communication point à point entre deux applications s’exécutant éventuellement sur deux machines différentes. Le détail du transfert effectif des données entre deux applications est spécifié par le protocole de communication de la couche transport, mais le moment et la façon dont les applications interagissent entre elles sont laissés à la charge du programmeur. L’architecture client/serveur est devenue la méthode incontournable pour la communication point à point au niveau applicatif, quand le protocole utilisé est de la famille TCP/IP. Ce modèle est motivé par le fait que TCP/IP ne fournit aucun mécanisme permettant l'exécution automatique d'un programme à l'arrivé d'un message si bien que dans une communication point à point, l'une des applications doit attendre l'initiative de la communication de la part de l'autre application. Les applications peuvent être classées en deux catégories:  Les clients: applications qui prennent l'initiative du lancement de la communication, c'est à dire demande l'ouverture de connexion, l'envoi d'une requête, l'attente de la réponse à la requête, reprise de l'exécution du programme.  Les serveurs: Applications qui attendent la communication, c'est à dire l'attente d'une demande d'ouverture de connexion, la réception d'une requête et l'envoi d'une réponse En général, les serveurs sont des ordinateurs dédiés au logiciel serveur qu'ils abritent, et dotés de capacités supérieures à celles des ordinateurs personnels en termes de puissance de calcul, d'entrées-sorties et de connexions réseau. Les clients sont souvent des ordinateurs personnels ou des appareils individuels (téléphone, tablette), mais pas
  15. 15. MSCI 14 systématiquement. Un serveur peut répondre aux requêtes d'un grand nombre de clients. Il existe une grande variété de logiciels serveurs et de logiciels clients en fonction des besoins à servir: un serveur web publie des pages web demandées par des navigateurs web, un serveur de messagerie électronique envoie des mails à des clients de messagerie, un serveur de fichiers permet de stocker et consulter des fichiers sur le réseau, un serveur de données à communiquer des données stockées dans une base de données, etc.  Les processus Un processus est une tâche qui est en train de s'exécuter. Par exemple, quand vous lancez un de vos programmes que vous avez développé, votre OS crée un nouveau processus et celui-ci exécutera une suite d'instructions sur votre ordinateur (le code de votre programme compilé). Un processus est défini par :  Un ensemble d'instructions à exécuter  Un espace mémoire pour les données de travail  Éventuellement, d'autres ressources, comme des descripteurs de fichiers, des ports réseaux, etc...  Les Threads Un même processus peut se décomposer en plusieurs parties, qui vont s'exécuter simultanément en partageant les mêmes données en mémoire. Ces parties se nomment threads. Du point de vue de l'utilisateur, les threads semblent se dérouler en parallèle. Lorsqu'une fonction bloque par exemple un programme, si celui-ci dispose d'une interface graphique, il sera inactif tant que la fonction le bloquera. Les threads nous permettront de régler ce problème.  Mode connecté et non connecté L’échange d’informations en mode connecté s’assimile à un flot bidirectionnel d'octets, transférés de façon fiable et ordonnée. Il n’y a ni perte, ni duplication de données. Pour une communication en mode connecté on utilisera le service TCP, trois phases sont alors nécessaires :  L’établissement de connexion  Le transfert de données  La libération de connexion Cependant, il faut d’abord avoir créé le socket et lui avoir associé une adresse.
  16. 16. MSCI 15 Contrairement au mode connecté, le mode non connecté (appelé aussi mode datagramme) ne comporte qu’une seule phase : le transfert de données. Le protocole utilisé est UDP, le transfert est donc non fiable. Le client initie l'interaction, envoi de message protocolaire. 3.2. Qu’est-ce qu’un socket ? Les sockets sont apparues sous UNIX en 1981, ils forment un composant de base de la communication entre processus (processus situés sur une même machine ou sur deux machines distinctes). C’est un point de terminaison d'une communication bidirectionnelle, c'est-à-dire entre un client et un serveur en cours d'exécution sur un réseau donné. Ils permettront de gérer des flux entrant et sortant afin d'assurer une communication entre les deux (le client et le serveur), soit de manière fiable à l’aide du protocole TCP/IP, soit non fiable mais plus rapide avec le protocole UDP. Les sockets peuvent être assimilées à :  Une interface : Un socket peut être représenté comme une interface entre les programmes d'application et les protocoles de communication.  Une abstraction : Un socket peut s’apparenter à un canal de communication logique, accessible par un processus.  Des primitives :  Pour attribuer aux processus un rôle de client ou de serveur,  Pour échanger des messages protocolaires en rendant transparents les services de communication réseau,  Pour manipuler des informations de communication,  Pour contrôler et paramétrer les sockets. Étant donné que les sockets sont en fait une interface de programmation d'applications (API), on peut donc s'en servir pour programmer des applications en réseaux, voici un
  17. 17. MSCI 16 schéma illustrant une communication entre un client et un serveur : Le client commence à se connecter au serveur grâce aux sockets. Une fois la connexion établie (étape 1), le client et le serveur peuvent communiquer (s'échanger des messages). C'est ce qui se passe dans les étapes 2 et 3. À la fin de la communication, le client envoie une demande de terminaison de session au serveur (étape 4) et le serveur met fin à la connexion. Vous pouvez remarquer que le serveur n'effectue pas les mêmes actions initiales que le client. Le serveur utilise les sockets pour lier un port d'application à son processus correspondant. Ensuite, il «écoute» ce port. «Écouter», ici, c'est «continuellement vérifier s'il y a un événement qui se passe sur ce port précis ». Ce faisant, il va découvrir qu'un client essaie de se connecter à lui par le numéro de port qu'il écoute. Il accepte donc la requête, établit la connexion (étape 1) et, finalement, les deux communiquent (étapes 2, 3 et 4). En fait, un socket est totalement indépendant du langage. Un programme qui joue le rôle de serveur peut communiquer avec un autre programme jouant le rôle de client si ceux-ci utilisent des sockets, peu importe les langages impliqués. 4. Application de chat en utilisant C# Nous avons développé une application sous C# .Net de chat en se basant sur les sockets sécurisés. Cette application est composée d'un serveur et d'un client. Grâce au .NET framework, il est très facile d’implémenter une communication socket client-serveur. L’établissement d’une communication nécessite de disposer d’un applicatif serveur et d’au moins un applicatif client. À titre d’exemple, nous allons voir comment créer simplement un
  18. 18. MSCI 17 mécanisme d’échange de données en se basant sur le langage C# et sur le protocole TCP. Nous utiliserons la classe System.Net.Sockets. Il eut été possible d'utiliser aussi les classes TcpClient et TcpServer. Nous travaillerons en mode synchrone multithreads et avec des connexions en mode « connecté ». Le mode connecté signifie que lorsque le client a établi une connexion avec le serveur, celle-ci reste ouverte jusqu'à ce que l'un des processus décide de la fermer ou qu'un problème réseau survient. La figure suivante montre explicitement le processus suivis dans notre projet :
  19. 19. MSCI 18 On fais cette précision car il est possible de travailler en mode « déconnecté », c'est à dire qu'un client se connecte sur un serveur, celui-ci traite l'info et renvoie un « ack » (acknowledgement) au client qui dès réception de cet ack ferme la connexion. Le chat comprend les fonctionnalités suivantes: 1. Deux machines A et B en communications 2. A se connecte à B. 3. A envoie le Message «HELLO » vers B. 4. B répond en utilisant le message « HELLO, OK ». 5. A génère une clé (RSA) {(e,n),(d,n)} puis envoie (e,n) vers B. 6. B Sélectionne aléatoirement un algorithme de chiffrement parmi (DES, AES-128, AES- 192, AES-256). 7. B envoie l’algorithme choisi vers A. 8. A envoie le message « GENERATE FIRST KEY » vers B. 9. B génère une clé de taille (64, 128, 192 ou 256-bits) selon l’algorithme choisi dans l’étape (5) puis le chiffre en utilisant (e,n) et l’envoie vers A. 10. A déchiffre la clé en utilisant la clé (d,n). Jusqu’ici les machines A et B ont la même clé, donc A et B peuvent communiquer entre eux en toute sécurité en cryptant les messages en utilisant la clé partagée.  Architecture du chat Comme vous pouvez le constater, la communication entre le serveur et le(s) client(s) est basée sur le protocole TCP/IP. Cette communication peut avoir lieu au sein d'un réseau ou d'une même machine. Les connexions établies restent donc en mode « connecté » jusqu'à ce que l'un des processus décide de les fermer.
  20. 20. MSCI 19 Le code du serveur est « divisé » en quatre parties:  Le thread principal: c'est lui qui crée le socket d'écoute sur le serveur, ensuite, dans une boucle infinie, il attend de nouvelles connexions entrantes (socket.accept). Il démarre préalablement le thread d'écoute et le thread vérifiant que les connexions clientes sont toujours actives. Le 2ème et 3ème thread sont démarrés avant même qu'une connexion cliente ait eu lieu. Etant donné qu'ils ne consomment quasiment aucun ne ressource, ce n'est pas préjudiciable. Il est en fait plus facile de les démarrer avant, car dans ce cas, on n’a pas à vérifier s'ils sont déjà démarrés ou pas lorsqu'on les démarre. On aurait pu ne les démarrer que lorsqu'au moins une connexion cliente soit effectuée mais j'ai opté pour la facilité, d'autant que l'impact sur les performances est nul  Le 2ème thread se charge de lire en permanence les données écrites par les clients. Il démarre le thread d'écriture lorsqu'il reçoit des données  Le 3ème thread se charge de vérifier que les connexions clientes sont toujours actives  Le 4ème thread est démarré lorsque le 2ème thread a lu des données sur un socket Le code du client est lui, un peu plus simple  Le thread principal se charge de créer et de connecter le socket cliente au serveur et gère les évènements liés aux contrôles winform  Le 2ème thread se charge de lire les données entrantes que le serveur envoie au client  Le 3ème thread est démarré sur demande et se charge de faire clignoter la fenêtre Pour rappel, un thread est un ensemble d'instructions s'exécutant au sein d'un même processus en parallèle aux autres threads démarrés dans ce processus. Ceci permet donc d'avoir plusieurs « entités » de code plus ou moins autonomes. Cela permet donc d'accroître les performances. Pour illustrer ceci, prenons simplement le serveur, s'il n'avait pas plusieurs threads, à chaque fois qu'il accepte une connexion, il devrait lire les données envoyées par celle-ci et renvoyer ces données aux autres clients. Pendant ce temps, il ne pourrait donc plus se remettre en attente de connexion. En mode multithreads, dès qu'il reçoit une connexion, il se remet immédiatement en attente.  Coté Serveur Après établissement de la connexion, le serveur obtient son socket qu'il utilise pour gérer le
  21. 21. MSCI 20 flux sortant ensuite, on envoie un message au client, et pour finir on ferme la connexion. Le socket, une fois créé, il doit être attaché à un point de communication. Un point de communication correspond à une adresse IP et un port TCP sur lequel écouter.  Coté Client
  22. 22. MSCI 21 Du côté du client, c'est encore plus simple. On doit créer un socket de la même façon que pour le serveur. Le socket tentera ensuite une connexion au point de communication correspondant au serveur. Après avoir obtenu notre socket, on récupère le flux sortant puis de lire la chaîne de caractères envoyés. Pour finir, on affiche le message reçu et on ferme notre socket. Ça a l'air très simple à première vue pour deux hôtes, mais si l'on veut que plus que deux puissent communiquer entre eux à la fois, comment faire ? D'où la nécessité d'utiliser les Threads. On peut voir un socket comme deux tuyaux entre les interlocuteurs. Chacun d'eux peut envoyer des messages dans le tuyau, messages qui s'accumulent là jusqu'à ce que l'autre les lise. De son côté, l'autre peut faire la même chose. Il n'est pas nécessaire qu'un des deux ait lu tout ce qu'il a reçu avant d'envoyer. Il faut donc évidemment avoir un protocole quelconque d'établi pour une communication harmonieuse.
  23. 23. MSCI 22 Conclusion Après la présentation de ces différents algorithmes de codage, et les implémenter dans notre application, nous pouvons dire qu'il est nécessaire de distinguer les deux cas symétriques et asymétriques. En effet, chacun d'eux a ses particularités et n'auront pas les mêmes applications. Dans les cas où les deux interlocuteurs sont sûrs, il est préférable d'utiliser un chiffrement symétrique. Parmi les chiffrements symétriques, le chiffrement AES, très récent, s'avère être le plus efficace. Il est d'ailleurs très employé depuis son officialisation. Dans le cas où il est préférable que les deux interlocuteurs ne possèdent pas la même clé, pour quelque raison que ce soit, un codage asymétrique comme le RSA s'avère plus approprié. Cependant, les codes asymétriques s'avèrent nettement plus lents que les codes symétriques. Il est donc conseillé de choisir un mot aléatoirement puis de le chiffrer avec la clé publique, avant de l'envoyer. Ce nombre pourra alors servir de clé privée pour un codage symétrique. Cela permet alors même de vérifier directement que les messages suivants proviennent du même expéditeur, sans avoir la nécessité absolue d'y ajouter une clé.
  24. 24. MSCI 23 Bibliographie  Rolland Balzon Philippe, Principaux algorithmes de cryptage, SEPRO Robotique, 11 juillet 2002.  Jazouli Abdelillah/Radi Nour-Eddine/Zghal Tarek, PROGRAMMATION RESEAU SUR TCP/IP: L'INTERFACE DES SOCKETS, E.N.S.I.M.A.G 1993/1994  www.siteduzero.com  www.developpez.com  www.wikipedia.org

×