Examen Sécurité et cryptographie Classes: 2 ère année ingénieur GTR Session principale Enseignant : M. H. Hdhili Documents autorisés



Documents pareils
Outils d'analyse de la sécurité des réseaux. HADJALI Anis VESA Vlad

Communication par sockets

Applications client/serveur TCP/IP - Sockets Rappels. C.Crochepeyre Applications CS 1

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Exercice sur les Dockers

SSH, le shell sécurisé

1. Fonctionnement de l Internet 2. Protocoles applicatifs 3. Programmation réseau

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

DIGITAL NETWORK. Le Idle Host Scan

Travaux Pratiques Introduction aux réseaux IP

Plan. École Supérieure d Économie Électronique. Plan. Chap 9: Composants et systèmes de sécurité. Rhouma Rhouma. 21 Juillet 2014

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmation système de commandes en C

Communication sous UNIX les sockets

NOTICE INSTALLATION. ARCHANGE Simplex Office N&B/Couleur KONICA MINOLTA BUSINESS SOLUTIONS FRANCE

Le prototype de la fonction main()

Fonctionnement de Iptables. Exercices sécurité. Exercice 1

Nmap (Network Mapper) Outil d exploration réseau et scanneur de ports/sécurité

Devoir Surveillé de Sécurité des Réseaux

LA COUCHE TRANSPORT CONTRÔLE LE FLOT DE DONNEES TRANSMISES par la couche Réseau

Sécuriser son réseau. Sécuriser son réseau Philippe Weill (IPSL/LATMOS) Frédéric Bongat (SSI/GOUV/FR)

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN

Plan. Rappels sur Netflow v1 v8. Netflow v9. Collecteur UTC «IPFlow» Cisco IOS : Implémentation de Netflow IPv6

Sécurité des réseaux Les attaques

Sécurité de la ToIP Mercredi 16 Décembre CONIX Telecom

Réseaux. Moyens de sécurisation. Plan. Evolutions topologiques des réseaux locaux

Internet Group Management Protocol (IGMP) Multicast Listener Discovery ( MLD ) RFC 2710 (MLD version 1) RFC 3810 (MLD version 2)

Internet - Outils. Nicolas Delestre. À partir des cours Outils réseaux de Paul Tavernier et Nicolas Prunier

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Fonctionnement Kiwi Syslog + WhatsUP Gold

OS Réseaux et Programmation Système - C5

Cours Programmation Système

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

VOIP. QoS SIP TOPOLOGIE DU RÉSEAU

SECURIDAY 2012 Pro Edition

FILTRAGE de PAQUETS NetFilter

RESEAUX TCP/IP: NOTIONS AVANCEES. Preparé par Alberto EscuderoPascual

Couche Transport TCP et UDP

L3 informatique Réseaux : Configuration d une interface réseau

Année Universitaire session 1 d automne Parcours : CSB5 Licence 3 STS Informatique

SensOrLabs. a protocol validation platform for the IoT. Dominique Barthel, Quentin Lampin IMT/OLPS/BIZZ/MIS Apr 7th 2014, ST, CEA, LIG

Cours de sécurité. Pare-feux ( Firewalls ) Gérard Florin -CNAM - - Laboratoire CEDRIC -

INFO-F-404 : Techniques avancées de systèmes d exploitation

Programmation Réseau. Anthony Busson IUT Info Lyon 1

Le protocole TCP. Services de TCP

Intérêt du NAT (Network Address Translation) Administration Réseau Niveau routage. Exemple d Intranet. Principe NAT

Attaque contre les systèmes de suivi de connexions

Première approche d'un outil merveilleux hping

TP Wireshark. Première approche de Wireshark. 1 ) Lancer Wireshark (double clic sur l icône sur le bureau). La fenêtre

le minimum pour communiquer par réseau (sans toutefois y comprendre grand chose)

Rappels réseaux TCP/IP

Filtrage IP MacOS X, Windows NT/2000/XP et Unix

DIFF AVANCÉE. Samy.

Instructions Mozilla Thunderbird Page 1

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Systèmes et Réseaux (ASR 2) - Notes de cours Cours 14

Rapport final. Mise en place du réseau d'une entreprise de taille moyenne. Date de rendu : 18/07/2011 Promotion : 4PPA SRS

Introduction. Adresses

HAUTE DISPONIBILITÉ DE MACHINE VIRTUELLE AVEC HYPER-V 2012 R2 PARTIE CONFIGURATION OPENVPN SUR PFSENSE

Les firewalls libres : netfilter, IP Filter et Packet Filter

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Infocus < >

Cours 6 : Tubes anonymes et nommés

Sécurité des réseaux sans fil

Introduction à l'analyse réseau Philippe Latu philippe.latu(at)linux-france.org

Installer un domaine DNS

Le Multicast. A Guyancourt le

Chapitre 7. Sécurité des réseaux. Services, attaques et mécanismes cryptographiques. Hdhili M.H. Cours Administration et sécurité des réseaux

CCNA Discovery Travailler dans une PME ou chez un fournisseur de services Internet

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Programmation client-serveur sockets - RPC

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

3IS - Système d'exploitation linux - Programmation système

RFC 791 (Jon Postel 1981)

Figure 1a. Réseau intranet avec pare feu et NAT.

Windows Vista, Windows Server 2008, IPv6 et les applications. Bernard Ourghanlian Chief Technology & Security Officer Microsoft France

Extended communication server 4.1 : VoIP SIP service- Administration

Réseaux et protocoles Damien Nouvel

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

Le système de gestion des fichiers, les entrées/sorties.

CONVERTISSEUR RS 232/485 NOTICE

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Sécurité des réseaux Firewalls

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

Routeur Chiffrant Navista Version Et le protocole de chiffrement du Réseau Privé Virtuel Navista Tunneling System - NTS Version 3.1.

IPFIX (Internet Protocol Information export)

Réseaux Locaux. Objectif du module. Plan du Cours #3. Réseaux Informatiques. Acquérir un... Réseaux Informatiques. Savoir.

Cryptologie. Algorithmes à clé publique. Jean-Marc Robert. Génie logiciel et des TI

(Third-Man Attack) PASCAL BONHEUR PASCAL 4/07/2001. Introduction. 1 Domain Name Server. 2 Commandes DNS. 3 Hacking des serveurs DNS

SERVEUR DÉDIÉ DOCUMENTATION

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

Stratégies anti-hackers

pare - feu généralités et iptables

Exercices sur SQL server 2000

Linux Firewalling - IPTABLES

Protection des protocoles

Administration du WG302 en SSH par Magicsam

Cours de C. Allocation dynamique. Sébastien Paumier

Transcription:

Université Tunis El Manar A.U. : 2011/2012 ISI Semestre 2 Examen Sécurité et cryptographie Classes: 2 ère année ingénieur GTR Session principale Enseignant : M. H. Hdhili Documents autorisés Exercice 1 [5pts]: 1) Soit le programme PROG1 (donné en annexe) implémentant une technique de scan de port. Répondre aux questions suivantes : a. De quel type de scan de port s agit-il? Expliquer? b. Donner le nombre de paquets échangés entre la machine qui lance le scan et la machine scanné pour un seul port considéré fermé. c. Ce programme permet-il de scanner tous les ports possibles (0 2 16-1)? Expliquer? 2) Soit la capture de trames CATURE1 (donnée en annexe) faite au cours de l exécution d un programme de scan de ports. Répondre aux questions suivantes : a. Donner un exemple d un ensemble de paquets correspondant à un port fermé b. Donner un exemple d un ensemble de paquets correspondant à un port ouvert c. De quel type de scan s agit-il? Expliquer? 3) Considérer le «TCP ACK scan» pour répondre aux questions suivantes : a. Dans le cas normal, quel est la valeur du bit ACK du premier paquet envoyé d un client vers un serveur? Expliquer? b. Dans le cas du «TCP ACK scan», Quel est la valeur du bit ACK envoyé dans le premier paquet vers la machine scanné? c. Expliquer alors comment la machine qui effectue le scan détermine que les ports qu elle est en train de scanner sont filtré ou non? Exercice 2 [7pts]: 1) Quel est la principale différence entre le sniffing actif et le sniffing passif? 2) Est ce que le sniffing actif est utile pour les réseaux Ethernet partagé? Expliquer? 3) Considérer le programme PROG2 implémentant un simple sniffer analyseur de trames pour répondre aux questions suivantes : a. S agit-il d un sniffer actif ou passif? Expliquer? b. A quoi sert la fonction «BindRawSocketToInterface»? c. Donner le nom de la fonction ou la ligne de code permettant de récupérer la trame sous son format brut d. Préciser les protocoles niveau liaison, réseau et transport que ce code permet d analyser Page 1 sur 11

e. Augmenter ce code en proposant une fonction permettant d analyser les datagrammes UDP définie avec la variable IPPROTO_UDP et dont la structure est décrite dans «udp.h» de la façon suivante : Struct udphdr u_int16_t source ; // port source u_int16_t dest ;/ /port destination u_int16_t len ; // longueur u_int16_t check ; // checksum Exercice 3 [8pts]: Soit M un message divisé en blocs x 1,x 2,x 3, x p chacun de taille n bits et soit K une clé de même taille que les blocs (n bits). Soit c 1,c 2,c 3, c p les cryptogrammes des blocs obtenus en appliquant la clé K aux blocs. Le chiffrement des blocs se fait selon le schéma suivant: C 0 = IV (valeur initiale) ; pour i de 1 à p, c j =E K (C j-1 x j ) 1) La fonction E K est inversible et son inverse est D K. Montrer que l opération de déchiffrement est x j =C j-1 D K (C j ) (rappel : A A=0 ; A 0=A, A B= B A) 2) Peut-on chiffrer un bloc quelconque du message M sans chiffrer les blocs qui le précèdent? Expliquer? 3) Peut-on déchiffrer un bloc quelconque c i sans déchiffrer les blocs qui le précèdent? Expliquer? 4) Peut-on déchiffrer un bloc c j en l absence des autres blocs chiffrés? Expliquer? 5) Prenons le cas où E K (x)=d K (x) =K x. Supposons qu un attaquant a pu récupérer deux blocs consécutifs (x j-1,x j ) ainsi que leurs cryptogrammes correspondants (c j-1,c j ). Montrer que cet attaquant peut en déduire la clé de chiffrement K. 6) Soient A et B deux entités utilisant le procédé de chiffrement décrit dans cet exercice. La clé K doit être échangée d une façon sécurisé et authentifié. Pour cela A et B font appel au chiffrement asymétrique. A calcule la clé K, la chiffre pour obtenir KC et l envoi à B. a. Avec quelle clé A doit chiffrer K? b. Avec quelle clé B déchiffre KC? c. Expliquer pourquoi cette méthode n est pas authentifiée et proposer une solution? Page 2 sur 11

Annexe : PROG1 : #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdlib.h> #include <errno.h> #include <string.h> /* Main programs starts*/ int main(int argc, char **argv) int sd; //socket descriptor int port; //port number int start; //start port int end; //end port int rval; //socket descriptor for connect char responce[1024]; //to receive data char *message="shell"; //data to send struct hostent *hostaddr; //To be used for IPaddress struct sockaddr_in servaddr; //socket structure if (argc < 4 ) printf("usage:./tscan <IPaddress> <Start Port> <End Port>\n"); return (EINVAL); start = atoi(argv[2]); //portno is ascii to int second argument end = atoi(argv[3]); for (port=start; port<=end; port++) sd = socket(pf_inet, SOCK_STREAM, IPPROTO_TCP); //created the tcp socket if (sd == -1) perror("socket()\n"); return (errno); memset( &servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); //set the portno hostaddr = gethostbyname( argv[1] ); //get the ip 1st argument memcpy(&servaddr.sin_addr, hostaddr->h_addr, hostaddr->h_length); //below connects to the specified ip in hostaddr rval = connect(sd, (struct sockaddr *) &servaddr, sizeof(servaddr)); if (rval!= -1) printf("port %d is open\n",port); close(sd); //socket descriptor Page 3 sur 11

CATURE1 : PROG2 : #include <stdio.h> #include <sys/types.h> #include<stdio.h> #include<stdlib.h> #include<sys/socket.h> #include<features.h> #include<linux/if_packet.h> #include<linux/if_ether.h> #include<errno.h> #include<sys/ioctl.h> #include<net/if.h> #include <netinet/ip.h> #include <netinet/tcp.h> #include <string.h> #include<netinet/in.h> int CreateRawSocket(int protocol_to_sniff) int rawsock; if((rawsock = socket(pf_packet, SOCK_RAW, htons(protocol_to_sniff)))== -1) perror("error creating raw socket: "); exit(-1); return rawsock; int BindRawSocketToInterface(char *device, int rawsock, int protocol) struct sockaddr_ll sll; struct ifreq ifr; bzero(&sll, sizeof(sll)); bzero(&ifr, sizeof(ifr)); /* First Get the Interface Index */ strncpy((char *)ifr.ifr_name, device, IFNAMSIZ); if((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -1) printf("error getting Interface index!\n"); exit(-1); /* Bind our raw socket to this interface */ sll.sll_family = AF_PACKET; Page 4 sur 11

sll.sll_ifindex = ifr.ifr_ifindex; sll.sll_protocol = htons(protocol); if((bind(rawsock, (struct sockaddr *)&sll, sizeof(sll)))== -1) perror("error binding raw socket to interface\n"); exit(-1); return 1; void PrintPacketInHex(unsigned char *packet, int len) unsigned char *p = packet; printf("\n\n---------packet---starts----\n\n"); while(len--) printf("%.2x ", *p); p++; printf("\n\n--------packet---ends-----\n\n"); PrintInHex(char *mesg, unsigned char *p, int len) printf(mesg); while(len--) printf("%.2x ", *p); // printf("%c",*p); p++; ParseEthernetHeader(unsigned char *packet, int len) if(len > sizeof(struct ethhdr)) ethernet_header = (struct ethhdr *)packet; /* First set of 6 bytes are Destination MAC */ PrintInHex("Destination MAC: ", ethernet_header->h_dest, 6); printf("\n"); /* Second set of 6 bytes are Source MAC */ PrintInHex("Source MAC: ", ethernet_header->h_source, 6); printf("\n"); /* Last 2 bytes in the Ethernet header are the protocol it carries */ PrintInHex("Protocol: ",(void *)&ethernet_header->h_proto, 2); printf("\n"); printf("packet size too small!\n"); ParseIpHeader(unsigned char *packet, int len) struct iphdr *ip_header; Page 5 sur 11

/* First Check if the packet contains an IP header using the Ethernet header */ ethernet_header = (struct ethhdr *)packet; if(ntohs(ethernet_header->h_proto) == ETH_P_IP) /* The IP header is after the Ethernet header */ if(len >= (sizeof(struct ethhdr) + sizeof(struct iphdr))) ip_header = (struct iphdr*)(packet + sizeof(struct ethhdr)); /* print the Source and Destination IP address */ printf("dest IP address: %s\n", inet_ntoa(ip_header->daddr)); printf("source IP address: %s\n", inet_ntoa(ip_header->saddr)); printf("ip packet does not have full header\n"); /* Not an IP packet */ ParseTcpHeader(unsigned char *packet, int len) struct iphdr *ip_header; struct tcphdr *tcp_header; /* Check if enough bytes are there for TCP Header */ if(len >= (sizeof(struct ethhdr) + sizeof(struct iphdr) + sizeof(struct tcphdr))) /* Do all the checks: 1. Is it an IP pkt? 2. is it TCP? */ ethernet_header = (struct ethhdr *)packet; if(ntohs(ethernet_header->h_proto) == ETH_P_IP) ip_header = (struct iphdr *)(packet + sizeof(struct ethhdr)); if(ip_header->protocol == IPPROTO_TCP) tcp_header = (struct tcphdr*)(packet + sizeof(struct ethhdr) + ip_header->ihl*4 ); /* Print the Dest and Src ports */ printf("source Port: %d\n", ntohs(tcp_header->source)); printf("dest Port: %d\n", ntohs(tcp_header->dest)); printf("not a TCP packet\n"); printf("not an IP packet\n"); Page 6 sur 11

printf("tcp Header not present \n"); int ParseData(unsigned char *packet, int len) struct iphdr *ip_header; struct tcphdr *tcp_header; unsigned char *data; int data_len; /* Check if any data is there */ if(len > (sizeof(struct ethhdr) + sizeof(struct iphdr) + sizeof(struct tcphdr))) ip_header = (struct iphdr*)(packet + sizeof(struct ethhdr)); data = (packet + sizeof(struct ethhdr) + ip_header->ihl*4 +sizeof(struct tcphdr)); data_len = ntohs(ip_header->tot_len) - ip_header->ihl*4 - sizeof(struct tcphdr); if(data_len) printf("data Len : %d\n", data_len); printf("------------------\n"); printf("%s\n",(char*)data); printf("********************\n"); PrintInHex("Data : ", data, data_len); printf("\n\n"); return 1; printf("no Data in packet\n"); return 0; printf("no Data in packet\n"); return 0; int IsIpAndTcpPacket(unsigned char *packet, int len) struct iphdr *ip_header; ethernet_header = (struct ethhdr *)packet; if(ntohs(ethernet_header->h_proto) == ETH_P_IP) ip_header = (struct iphdr *)(packet + sizeof(struct ethhdr)); if(ip_header->protocol == IPPROTO_TCP) return 1; return -1; Page 7 sur 11

return -1; main(int argc, char **argv) int raw; unsigned char packet_buffer[2048]; int len; int packets_to_sniff; struct sockaddr_ll packet_info; int packet_info_size = sizeof(packet_info); if (argc < 3 ) printf("--------------------------------------------------\n"); printf("usage:./sniffer <Interface> <Nbre of packets to sniff>\n"); printf("--------------------------------------------------\n"); return (EINVAL); /* create the raw socket */ raw = CreateRawSocket(ETH_P_IP); /* Bind socket to interface */ BindRawSocketToInterface(argv[1], raw, ETH_P_IP); /* Get number of packets to sniff from user */ packets_to_sniff = atoi(argv[2]); /* Start Sniffing and print Hex of every packet */ while(packets_to_sniff--) if((len = recvfrom(raw, packet_buffer, 2048, 0, (struct sockaddr*)&packet_info, (socklen_t*)&packet_info_size)) == -1) perror("recv from returned -1: "); exit(-1); /* Packet has been received successfully!! */ PrintPacketInHex(packet_buffer, len); ParseEthernetHeader(packet_buffer, len); ParseIpHeader(packet_buffer, len); ParseTcpHeader(packet_buffer, len); if(isipandtcppacket(packet_buffer, len)) if(!parsedata(packet_buffer, len)) packets_to_sniff++; return 0; Page 8 sur 11

Université Tunis El Manar A.U. : 2011/2012 ISI Semestre 2 Correction :Examen Sécurité et cryptographie Classes: 2 ère année ingénieur GTR Session principale Enseignant : M. H. Hdhili Documents autorisés Exercice 1 [5pts]: 4) Soit le programme PROG1 (donné en annexe) implémentant une technique de scan de port. Répondre aux questions suivantes : a. De quel type de scan de port s agit-il? Expliquer? TCP connect scan puisqu il utilise l appel de la fonction connect b. Donner le nombre de paquets échangés entre la machine qui lance le scan et la machine scanné pour un seul port considéré fermé. 2 paquets ( 1 paquet SYN et 1 paquet (RST, ACK)) c. Ce programme permet-il de scanner tous les ports possibles (0 2 16-1)? Expliquer? Oui à l exécution, nous écrivons. /tscan 0 2 16-1 5) Soit la capture de trames CATURE1 (donnée en annexe) faite au cours de l exécution d un programme de scan de ports. Répondre aux questions suivantes : a. Donner un exemple d un ensemble de paquets correspondant à un port fermé Paquet 1 et 2 ou 6 et 7 b. Donner un exemple d un ensemble de paquets correspondant à un port ouvert Paquet 3,4 et 5 c. De quel type de scan s agit-il? Expliquer? TCP SYN scan (half open scan) car le scanneur envoi un RST en cas de succès 6) Considérer le «TCP ACK scan» pour répondre aux questions suivantes : a. Dans le cas normal, quel est la valeur du bit ACK du premier paquet envoyé d un client vers un serveur? Expliquer? ACK=0 puisque le client n a encore rien reçu à partir du serveur. Donc, il ne va rien acquitter b. Dans le cas du «TCP ACK scan», Quel est la valeur du bit ACK envoyé dans le premier paquet vers la machine scanné? ACK=1 c. Expliquer alors comment la machine qui effectue le scan détermine que les ports qu elle est en train de scanner sont filtré ou non? ACK=1 dans le premier paquet va engendrer le rejet du paquet correspondant s il sera traité par un firewall statefull Page 9 sur 11

Exercice 2 [7pts]: 4) Quel est la principale différence entre le sniffing actif et le sniffing passif? passif : écoute du réseau sans injection de paquets actif : injection de paquets (exécution d attaques ) pour pouvoir écouter le trafic réseau 5) Est ce que le sniffing actif est utile pour les réseaux Ethernet partagé? Expliquer? Non puisque les paquets sont automatiquement diffusés dans le réseau et le sniffer va donc recevoir une copie de ces paquets 6) Considérer le programme PROG2 implémentant un simple sniffer analyseur de trames pour répondre aux questions suivantes : a. S agit-il d un sniffer actif ou passif? Expliquer? Sniffer passif : il n y a aucune fonction ( send, Write, ) permettant d injecter/envoyer des paquets b. A quoi sert la fonction «BindRawSocketToInterface»? Choix de l interface à écouter c. Donner le nom de la fonction ou la ligne de code permettant de récupérer la trame sous son format brut Function recvfrom d. Préciser les protocoles niveau liaison, réseau et transport que ce code permet d analyser Liaison : Ethernet. Réseau : IP. Transport : TCP e. Augmenter ce code en proposant une fonction permettant d analyser les datagrammes UDP définie avec la variable IPPROTO_UDP et dont la structure est décrite dans «udp.h» de la façon suivante : Struct udphdr u_int16_t source ; // port source u_int16_t dest ;/ /port destination u_int16_t len ; // longueur u_int16_t check ; // checksum Il faut copier le code de la fonction ParseTcpHeader(unsigned char *packet, int len) puis le modifier telle que c est indiqué en gras dans la réponse suivante ParseUdpHeader(unsigned char *packet, int len) struct iphdr *ip_header; struct udphdr *udp_header; /* Check if enough bytes are there for UDP Header */ if(len >= (sizeof(struct ethhdr) + sizeof(struct iphdr) + sizeof(struct udphdr))) /* Do all the checks: 1. Is it an IP pkt? 2. is it udp? */ ethernet_header = (struct ethhdr *)packet; if(ntohs(ethernet_header->h_proto) == ETH_P_IP) ip_header = (struct iphdr *)(packet + sizeof(struct ethhdr)); if(ip_header->protocol == IPPROTO_UDP) udp_header = (struct udphdr*)(packet + sizeof(struct ethhdr) + ip_header->ihl*4 ); /* Print the Dest and Src ports */ printf("source Port: %d\n", ntohs(udp_header->source)); Page 10 sur 11

printf("dest Port: %d\n", ntohs(udp_header->dest)); printf("not an UDP packet\n"); printf("not an IP packet\n"); printf("udp Header not present \n"); Exercice 3 [8pts]: Soit M un message divisé en blocs x 1,x 2,x 3, x p chacun de taille n bits et soit K une clé de même taille que les blocs (n bits). Soit c 1,c 2,c 3, c p les cryptogrammes des blocs obtenus en appliquant la clé K aux blocs. Le chiffrement des blocs se fait selon le schéma suivant: C 0 = IV (valeur initiale) ; pour i de 1 à p, c j =E K (C j-1 x j ) 1) La fonction E K est inversible et son inverse est D K. Montrer que l opération de déchiffrement est x j =C j-1 D K (C j ) (rappel : A A=0 ; A 0=A, A B= B A) c j =E K (C j-1 x j ) D K (c j )= D K (E K (C j-1 x j )) D K (c j )= C j-1 x j C j-1 D K (c j )= C j-1 C j-1 x j C j-1 D K (c j )= x j 2) Peut-on chiffrer un bloc quelconque du message M sans chiffrer les blocs qui le précèdent? Expliquer? Non, selon la formule x j =C j-1 D K (C j ), le chiffrement de x j nécessite C j-1 3) Peut-on déchiffrer un bloc quelconque c i sans déchiffrer les blocs qui le précèdent? Expliquer? Oui, x j ne dépend pas de x j-1 4) Peut-on déchiffrer un bloc c j en l absence des autres blocs chiffrés? Expliquer? Non, selon la formule x j =C j-1 D K (C j ), le déchiffrement de c j nécessite C j-1 5) Prenons le cas où E K (x)=d K (x) =K x. Supposons qu un attaquant a pu récupérer deux blocs consécutifs (x j-1,x j ) ainsi que leurs cryptogrammes correspondants (c j-1,c j ). Montrer que cet attaquant peut en déduire la clé de chiffrement K. Dans ce cas : c j =K C j-1 x j K= c j C j-1 x j 6) Soient A et B deux entités utilisant le procédé de chiffrement décrit dans cet exercice. La clé K doit être échangée d une façon sécurisé et authentifié. Pour cela A et B font appel au chiffrement asymétrique. A calcule la clé K, la chiffre pour obtenir KC et l envoi à B. a. Avec quelle clé A doit chiffrer K? avec la clé publique de B b. Avec quelle clé B déchiffre KC? avec sa clé privée c. Expliquer pourquoi cette méthode n est pas authentifiée et proposer une solution? Rien ne garantit l appartenance de la clé publique de B à B. Solution : certification de la clé publique de B. Page 11 sur 11