Cryptographie
1. Introduction
À travers cette synthèse, je vais vous présenter les fondamentaux de la cryptographie. Elle n'a pas pour but d'être exhaustive mais simplement de présenter les concepts et de les décrire suffisamment pour qu'ils soient compréhensibles. Vous pourriez ainsi vous servir de cette synthèse comme d'une référence en cas de recherche d'un terme particulier.2. Vocabulaire
- Chiffrer : convertir à l’aide d’une clé des données en clair en données chiffrées, illisibes sans connaissance de la clé de chiffrement
- Déchiffrer : convertir à l’aide d’une clef des données chiffrées en données en clair
- Décrypter : Convertir des données illisibles en un texte clair sans posséder la clef de déchiffrement
- Crypter : n’existe pas
- Chiffrement et déchiffrement basés sur des méthodes/algorithmes
- Cryptographie : Science de la conception des méthodes de chiffrement
- Cryptanalyse : art de craquer les méthodes de chiffrement
- Cryptologie : Cryptographie + cryptanalyse
Dans le cadre des dessins, images et explication, on utilisera la nomenclature suivante :
- p = message en clair (plaintext)
- c = message chiffré (ciphertext)
- k = clé
- E = algorithme de chiffrement (encryption cipher)
- D = algorithme de déchiffrement (decryption cipher)
On utilisera aussi les personnalités suivantes :
- Les gentils : Alice, Bob, Carol, Dave
- Les méchants : Eve, Mallory
- Trent comme arbitre
3. Principe de base
c = E(k,p) C’est la formule du chiffrement, on utilise E et k pour transformer p, le plain, en c, le cipher.
m = D(k,c) m, le message à nouveau en clair est l’application à D de la clef et du cipher.
Les paramètres sont donc :
- L’algorithme, E ou D
- La clef k
- Le message, cipher ou plain dépendant du cas.
3.1 Pourquoi utiliser une clef et pas juste un algo ?
Il n’est pas possible de garder un algorithme secret.
Même si on le pouvait, peut-on vraiment faire confiance en son auteur ?
Il est également compliqué de vendre quelque chose qui est secret.
Si l’algo est ouvert on a des avantages :
- La validation publique
- La clef est plus facile à protéger
- On peut utiliser des clefs différentes dans des buts différents. Si seul l’algo était la clef, on ne pourrait pas faire ça.
C’est le principe de Kerckhoff : l’algo doit pouvoir tomber dans les mains de l’ennemi
4. Le chiffrement de César
C’est un chiffrement par substitution, on substitue une lettre par une et une seule autre.
Dans le cas de césar, le décallage était de 3. On peut généraliser et dans ce cas, on appelle ça une substitution mono-alphabétique.
Problème, c’est très facile à casser :
- Il n’y a que 26 clefs
- On peut faire de l’analyse fréquentielle dessus.
5. Qu’est ce que l’analyse fréquentielle ?
Si le texte chiffré est assez long, on peut peut regarder le pourcentage d’occurence de chaque lettre et le comparer avec la langue supposée du texte.
Ainsi si on veut qu’il y a 16% de D et qu’en français la lettre présente à 16% est le E, on peut supposer que les E ont été remplacés par des D.
Dans le cas de César, cela signifie que le décallage serait de 1.
6. Le chiffrement de Vigenère
C’est un chiffrement poly-alphabétique. C’est donc un décallage mais qui ne sera pas le même à chaque occurence d’une lettre.
Ici, on a : ième lettre du cipher = (ième lettre du plain + ième lettre de la clef répétée) % 26
On peut créer une table de clef comme suit :
Pour ce faire :
- On écrit l’alphabet horizontalement
- On écrit la clef verticalement dans la première colonne
- Pour chaque lettre de la clef, on continue et boucle sur l’alphabet
Ensuite, pour le fonctionnement :
- On prend la bonne ligne de la clef (première pour la première ligne, … et on boucle)
- On prend dans cette ligne la colonne qui correspond à la lettre du plain dans l’alphabet du dessus
7. Enigma
Machine utilisée lors de la seconde guerre mondiale.
Elle utilise :
- Un panneau de connexion qui donne une cef à 6 lettres
- Des rotors qui donne une substitution variable et qui tourne après chaque lettre
- Des réflecteurs
La clef dépend ainsi :
- De la position des connexions (de la clef)
- De l’ordre des rotors
- De la position initiale des rotors
Ça donne plus de 10 exposant 16 possibilités.
Son chiffrement a été cassé car des morceaux de messages étaient identiques tous les jours.
8. Les classes d’attaques
- Attaque passive : On ne fait qu’écouter, on interagit pas sur la connexion. On est donc dur à détecter
- Attaque active : On peut faire de l’usurpation d’identité, de l’introduction, suppression, modification ou rejeu de messages, de l’interuption de communication, des MITM, …
- Attaque par rejeu : On ré-émet un ancien message
- Side-channel : Pour attaquer, on collecte des informations sur l’implémentation physique de la crypto. La consommation électrique, le rayonnement électro-magnétique, …
- Timing attack : on obtient de l’information sur la crypto à partir du temps quelle prend à se faire.
8.1 Attaquer la clé
Quand on parle de taille de clef, c’est en bits. Donc une clef de 40 bits = 2^40 possibilités. Maintenant les clefs varient entre 256 et 4096.
8.1.1 Attaque brute-force
On essaie toutes les clefs possibles : réellement en moyenne on essaye que la moitié des clefs.
Plus l’espace de clef est grand plus cela prendra de temps. Si on ajoute un bit, on double le temps nécessaie.
8.1.2 Attaque par dictionnaire
On a une liste de valeurs probables. Si on a un fichier avec les mots de passe chiffrés, on prend notre dico, on chiffre les mots un par un et on compare avec le contenu du fichier.
8.2 Attaquer l’algorithme
On veut trouver la clef en moins d’étape que le brute-force
8.2.1 Attaque à texte chiffré connu
On connait un certain nombre de ci tels que ci = E(k,pi). On veut trouver k ou un moyen d’inférer pi+1 à partir de ci+1.
8.2.2 Attaque à texte clair connu
On connait un certain nombre de pi et de ci tels que ci = E(k,pi). On veut trouver k ou un moyen d’inférer pi+1 à partir de ci+1.
8.2.3 Attaque à texte clair choisi
On choisit p et on peut obtenir E(k,p). Connaissant les pi et les ci. On veut trouver k ou un moyen d’inférer pi+1 à partir de ci+1.
8.2.4 Attaque à chiffré choisi
Si on choisit c on peut obtenir D(K,c). On a les pi et les ci. On veut trouver k ou un moyen d’inférer pi+1 à partir de ci+1.
9. Un bon algorithme de chiffrement
- Ne doit pas permettre à l’attaquant de récupérer la clef.
- Ne doit pas permettre à un adversaire de retrouver ne serait ce qu’une partie du message en clair à partir du chiffré.
- Ne doit pas permettre à l’attaquant de retrouver une information de longueur sur le message.
L’algorithme ne doit révéler AUCUNE information au sujet du texte clair.
10. Les nombres aléatoires
Ils sont à la base de nombreux algorithmes cryptographiques (nonces, challenges, …).
Il faut donc des génératers qui soient réellement aléatoires et sans biais.
Pour ça il existe différentes solutions :
- Hardware spécifique : basé sur des phénomènes physiques
- Software : Horloge, délai de frappe clavier, déplacement de souris, …
10.1 Générateur de nombres pseudo-aléatoires
C’est un algorithme déterministe. Les nombres ont l’air aléatoires mais ils ne le sont pas.
Génération à partir d’une graine x0. Exemple non sur : xn = (a * xPrecedent + b) mod m Avec a, b et m des paramètres.
10.2 Qualité d’un PRNG
On vérifie via des tests statistiques :
- Test sur la fréquence
- Test sur la corrélation
11. La cryptographie symétrique
C’est la cryptographie à clef secrète.
Ici, k est un nombre, une séquence binaire de longueur fixée. La sécurité dépend donc :
- de l’algorithme utilisé
- de la clef (qui doit rester secrète)
On doit utiliser une clef par correspondant mais il faut faire attention à la création et à l’échange de clefs.
11.1 Chiffrement par blocs
On découpe le messages en blocs de 64, 128 ou 256 bits. La taille du bloc d’entrée est égale à la taille du bloc de sortie.
On fait plusieurs itérations (rounds). Le but est d’atteindre un optimum dans la qualité du secret obtenu. À chaque round, on utilise une clef différente dérivée de la clef principale.
11.1.1 Fonctionnement
Si on a des données pour plus de 1 bloc, on lie le chiffrement des différents blocs.
Il y a différentes méthodes qu’on va voir dans les points suivants.
11.1.1.1 ECB : Electronic CodeBook Mode
On passe les blocs un par un dans l’algorithme sans les combiner entre eux.
La manipulation est facilement découverte. En effet, dans l’image suivante, on passe tux dans un algo ECB, on s’attendrait au premier résultat mais on a le second dans lequel on voit encore la forme de tux.
11.1.1.2 CBC - Cipher Block Chaining
On prend un IV (vecteur d’initialisation) aléatoire. On fait un xor avec le premier bloc, on passe le tout dans l’algo de chiffrement, et on obtient le premier bloc chiffré.
Ensuite, on utilise ce premier bloc chiffré comme vecteur d’initialisation pour la suite.
Pour le déchiffrement, on doit avoir le IV pour, après avoir déchiffré le premier bloc, pouvoir faire le xor dessus et retrouver le plain.
Ensuite, l’IV des blocs suivant ne sera que le cipher du bloc précédant. Cela signifie donc que l’on peut faire le déchiffrement en parallèle.
11.1.1.3 CFB - Cipher FeedBack Mode
On ne peut pas déchiffrer en parallèle car on a besoin du résultat de l’étape précédente.
On a pas besoin d’algo de déchiffrement, le chiffrement fait le déchiffrement aussi.
11.1.1.4 CTR - Counter Mode
On prend un nonce au départ et à chaque bloc on lui ajoute 1 avant de le chiffrer.
On peut faire le chiffrement et le déchiffrement de chaque bloc en parallèle.
Comme pour le IV, on doit avoir le nonce pour décrypter.
11.1.2Le padding
Si la taille à chiffrer n’est pas un multiple de la taille du bloc, il faut bien remplir le dernier bloc.
On regarde donc le nombre de byte que l’on doit remplir et on remplit ces bytes par cette valeur numérique (raison pour laquelle les blocs ne peuvent faire que maximum 256 bytes).
Ainsi le destinataire le dernier byte et sait le nombre de bytes à retirer (si ils sont tous identiques).
11.2 Chiffrement de Vernam
On génère une clé aléatoire de la taille du texte à chiffrer et on fait un simple xor.
On utilisera cette clé une seule fois.
Protection parfaite si : il y a autant de clef possibles que de textes clairs et que chaque clé est équiprobable.
Problème, la gestion des clefs, il faut bien les échanger. On ne fait donc que reporter le problème.
11.3 Chiffrement par flot
Inspiré du chiffrement de Vernam (one time pad). PRNG pour générer une chaine aléatoire de bits (keystream).
On ne fait que des xors après. Donc E = D.
Le générateur de keystream est donc d’importance critique.
11.4 DES : Digital Encryption Standard
Clé de 56 bits (8 bytes dont 7 bits servent à la clef, le 8ème étant un bit de parité).
Chiffrement par bloc de 64bits
Objectif : Rendre chaque bit du texte chiffré dépendant de chaque bit du texte clair et de chaque bit de la clef le plus rapidement possible
On fait 16 itérations pour que le chiffrement soit optimal.
C’est le même algo pour le même algo pour le chiffrement et le déchiffrement mais avec les clés dans l’ordre inverse.
Même si son but est la rapidité, il est lent et craqué. La clef est de trop petite taille.
11.4.1 Fonctionnement
On divise les blocs en deux parties gauche et droite.
Pour faire le chiffrement, la partie de gauche passe à droite et celle de droite passe à gauche.
Ensuite, sur l’ancienne partie de gauche on fait un xor avec une fonction f(R,K).
Dans f, R est le numéro du round (1–>16) et K et la clef de chiffrement. Ainsi, f prend 32 bits, les gonflent sur 48 bits et fait un xor avec 48 bits de la clef de round. Ensuite, elle dégonfle à 32 bits via des substitutions.
La dernière partie du chiffrement est une permutation avec un algorithme connu.
11.4.2 3DES
On fait trois chiffrements en DES. On utilise donc 3 clefs de 56 bits soient 168 bits. On a ** c = E(k3,D(k2,E(k1,p))) **.
Si DES était lent, celui-ci est donc trois fois plus lent.
11.4.3 AES
On utilise des blocs de 128 bits. Les clés font 128, 192 ou 256 bits.
Algorithme belge et utilisé comme standart dans le gouvernement américain (bonne nouvelle ou pas je ne sais pas).
11.4.4 RC4
Il était propriétaire et a été divulgué sur le web (loi de kerckhoff).
- C’est un chiffrement par flot.
- Il était utilisé pour le WEP.
- La clé est de longueur variable
- Utilise des suites aléatoires à partir de la clef et combine avec des xor.
Fonctionne en deux étapes :
- Initialiser la S-Box : on rempli un vecteur k avec la clef en répétant avec la clef si nécessaire puis on utilise k pour permuter de manière aléatoire la S-Box
- Utiliser la S-Box pour chiffrer byte par byte avec un xor.
Le déchiffrement se fait de façon identique
12. Gestion des clefs
Il y a de multitudes d’opérations dans la gestion des clefs :
- La création
- La révocation
- L’expiration
- La transmission
- Le vol
- La compromission, …
Le problème en symétrique, c’est le nombre de clefs à gérer. Si on fait les clefs 2 à 2 entre n personnes ça donne n(n-1)/2 clefs. Il en fait encore plus si on veut faire des conversations de groupe.
De plus, plus longtemps la clef est utilisée :
- Plus la chance qu’elle soit compromise augmente
- Plus l’impact de la compromission est grand
- Plus la cryptanalyse est aisée
Il faut prendre un compromis entre la durée d’utilisation de la clef et son cout de gestion. La durée de vie doit être fixée dès la génération.
12.1 Génération
- Mécanisme doit être sûr (espace de clef suffisant)
- La clé doit être aléatoire et de taille suffisante
- La clé doit être changée périodiquement
12.2 Mise à jour
On peut calculer la nouvelle clef à partir de la précédent. En utilisation une fonction à sens unique. Ça ne fonctionne que si la clef k n’as pas été compromise
12.3 Destruction
Pas de destruction –> Accès toujours possible au contenu chiffrés. La destruction doit être sécurisée (zéroisé sur disque, dans la mémoire, …)
12.4 Stocker les clefs
On veut que les clés restent hors d’atteinte d’un adversaire potentiel.
On peut stocker les clefs sur du stockage matériel comme des smartcards, des tokens usb, ou du matériel réel (comme la bague de je ne sais plus quelle conf).
Distribution et transfert des clés
On utilise des clefs de transfert (key exchange key ou kek) pour les clefs de données (data key, dk).
Elles sont distribuées manuellement et peu fréquemment (les keks). Les dk sont distribuées à la demande.
Pour la distribution, on peut diviser les clefs et faire parvenir chaque morceau par une voie de transport différente. On ne peut rien faire si on a un seul morceau. Par contre, tous les morceaux permettent de reconstituer la clef complète.
12.5 Récupération des clefs
On peut utiliser différents mécanismes :
- Les key escrow : revient à laisser les clefs de la maison au voisin pendant les vacances –> problème de confiance
- Partager la clef : On la découpe en n morceau que l’on distribue à n personnes. Il faut rassembler au moins m morceau pour reconstituer la clef complète.
- On utilise un support matériel : On donne le support en cas d’absence. Mais ça ne fonctionne pas pour les absences imprévues
12.6 Propriété et compromission des clés
Comment Bob peut il savoir que c’est bien Alice qui lui a envoyé une clef de communication ?
On a besoin pour ça d’une gestion de la confiance, via des échanges en personne ou des canaux sécurisés, ou des centres de distribution de clef (qui du coup possèdent eux toutes les clefs).
12.7 Chiffrement basé sur des passwords
Dans les procédures, on va utiliser un sel aléatoire pour augmenter l’entropie du système et pour éviter les attaques par pré-calcul.
12.7.1 Chiffrement
Chaque personne possédant la data key suivra les opération suivantes (pour protéger la dk) :
- On génère la data key
- On crée la kek à partir d’un mot de passe que l’on entre (doit être bon) et d’un sel aléatoire qui ont été combinés
- On utilise la kek pour chiffrer dk.
- On stocke le sel et E’(kek,dk).
À aucun moment on ne stocke kek.
12.7.2 Déchiffrement
- On construit la kek à partir du mot de passe et du sel combinés
- On utilise la kek pour déchiffrer E’(kek,dk) et obtenir la data key
12.7.3 Pourquoi ne pas directement utiliser kek ?
- On évite le partage de mot de passe : chacun stocke sa copie de dk avec son password
- Un mot de passe est plus facile à casser qu’une clef. Chiffrer avec le mot de passe demanderait en plus de distribuer le mot de passe.
- Si quelqu’un accède aux données chiffrées, il doit encore accéder à dk chiffré puis casser le mot de passe de chiffrement de dk.
12.8 Distribution des clefs et tiers de confiance
12.8.1 Needham Schroeder
- Alice demande à Trent une clef de conversation entre elle et Bob
- Trent répond à Alice un message chiffré (avec la clef partagée entre Alice et Trent) contenant la clef k ainsi qu’une “enveloppe chiffrée” destinée à Bob
- Alice envoie l’enveloppe à Bob. L’enveloppe chiffrée (avec la clef partagée entre Bob et Trent) contient la clef de communication ainsi que l’identité d’Alice.
- Bob envoie un message chiffré à Alice avec leur clef de communication et un nonce.
- Alice répond a Bob un message chiffré contenant le nonce diminué de 1 (pour que bob puisse vérifier que c’est bien Alice qui a répondu).
Les nonces ra et rb sont utlisés pour éviter le rejeux.
12.8.1.1 Attaques possibles
- Si la clef k est compromise et que le message 3 a été sniffé, on pourrait faire croire à Bob qu’il y a un changement de clef et donc discuter avec lui au nom d’Alice.
- Il peut y avoir un problème si la clef A-T est compromise. Quelqu’un d’autre qu’Alice reprend le message 1 pour relancer le processus
12.8.2 Otway-Rees
- Alice envoie un message à Bob contenant : son identité, celle de Bob et un message chiffré destiné à Trent et utilisant la clef partagée entre Alice et Trent. Ce dernier contient l’identité d’Alice, celle de Bob et un nonce.
- Bob envoie un message à Trent. Celui-ci contient les identités des deux protagonistes, le message chiffré de alice et un seconc message chiffré (de la même forme) mais de la part de bob.
- Trent répond à Bob un message contenant un message chiffré pour Alice et contenant la clef ainsi que son nonce et un message chiffré our bob ayant la même structure.
- Bob renvoie finalement le message chiffré destiné à Alice vers Alice.
13. Cryptographie asymétrique
Aussi appellée cryptographie à clef publique.
On se base sur :
- c = E(k1,p)
- p = D(k2,p)
- k1 est différent de k2 mais ils sont mathématiquement liés.
- Ce qui est chiffré avec k1 ne peut être déchiffré qu’avec k2 et vice et versa.
- Clef privée k- (à garder secrète) et clef publique k+ (à rendre publique).
- Fonctionne sur de grands nombres
13.1 Principe de base.
Alice connait sa clef publique et sa clef privée ainsi que la clef publique de bob.
Il en va de même pour Bob qui connait sa clef publique et sa clef privée ainsi que la clef publique de Alice.
Fonctionnement :
- Fonctions à sens uniques avec de trappes. On sait facilement calculer la fonction mais pas la fonction inverse. Elle est difficile et couteuse à inverser.
- La “trappe” est matérialisée par la clef privée et elle permet de calculer la fonction inverse de façon simple.
- Il est difficile de calculer la clé privée à l’aide de la clé publique.
- Basé sur des problèmes de la théorie des nombres (factorisation de nombres, ogrithmes discrets, …)
En comparaison avec la cryptographie symétrique, la gestion des clefs est plus simple et est à la charge de l’utilisateur. Mais les performances sont bien moindres.
13.2 Diffie Hellman
Alice et Bob utilisent un canal non sécurisé pour convenir d’une clef sans jamais la divulguer.
- Les protagonistes décident de deux nombres p, un premier de grande taille et g un nombre. Ces deux nombres sont publics.
- A choisit un nombre aléatoire a et calcule g^(a) mod p
- B fait de même et calcule g^b mod p
- les résultats de ces calculs sont échangés.
- k = g^(ab) mod p qui peut être calculée par bob en calculant : ((g^(a) mod p)^b) mod p et par alice en calculant : ((g^(b) mod p)^a) mod p
- À partir des informations qui circulent sur le réseau on ne peut pas calculer la clef sans devoir résoudre un problème complexe de logarithmes.
Attaque : Sensible à un MITM ou l’attaque se placerait entre les deux et ferait croire à chaque protagoniste qu’il est l’autre. On peut s’en défendre en publiquant sa clef publique (g^a mod p) dans un annuaire.
13.3 RSA
Fonctionne avec la factorisation de nombres premiers. Il supporte également la signature numérique.
13.3.1 Le petit théorème de Fermat
p un nombre premier a un entier non premier et non divisible par p On a : a^(p-1) mod p = 1
La fonction indicatrice d’Euler (phi de n) est : Le nombre d’entier positifs < n et premiers avec n
13.3.2 Théorème d’Euler
C’est une généralisation du petit théorème de Fermat.
Si on a a et n deux entiers naturels : a^(phi de n) mod n = 1
13.3.3 Base de l’algorithme
Soient p et q deux nombres premiers et a premier avec n = p*q.
On a que : a^(p-1)(q-1) mod n = 1
13.3.4 Génération des clefs
- On choisit p et q premiers, de grande taille et de taille identique. On calcule n = p * q
- On calcule : phi de n = (p - 1) * (q - 1)
- On choisit un exposant e tel que :
- e < n
- e et phi de n sont premiers entre eux
- On calcule d tel que d*e mod (phi de n) = 1
- La clef publique est (n,e)
- La clef privée est (n,d)
p et q devraient avoir une taille supérieure à 1000 bits. La taille de n est donc double.
13.3.5 Fonctionnement
Alice envoie un message à Bob avec sa clef publique KB+ c = E(KB+,p) = p^(e) mod n
Bob déchiffre avec p = D(KB-,c) = c^(d) mod n
Si Eve intercepte c = p^(e) mod n, e et n étant publics. Eve a besoin de d or, il sait que de mod ((p-1)(q-1)) = 1. Comme e est publique, il reste à trouver p et q ce qui est un problème complexe de factorisation denombres premiers.
13.4 El Gamal
Celui-ci est basé sur les logarithmes discrets.
Il est facile de calculer : y = a^x mod n mais il est difficile de trouver x tel que ax mod n = b.
Il supporte le chiffrement et la signature numérique.
13.4.1 Fonctionnement
- On choisit p premier et g
- x est la clef secrète et est 1 <= x <= p-2
- On calcule y = g^x mod p
- La clef publique est (p,g,y)
- On chiffre m : c = (g^k mod p , my^k mod p)
- On déchiffre : m = ((my^k mod p)/(g^k mod p)^x) mod p
14. Signature numérique
C’est un mécanisme utilisant la cryptographie asymétrique.
Les objectifs sont de :
- Authentifier les identités et les données
- La non-répudiation
Le principe de base est de d’utiliser la clef privée pour signer.
Le principal problème est la lenteur de la cryptographie asymétrique.
14.1 Les empreintes numériques
Ce sont des fonctions à sens unique et SANS trappe.
On leur donne un input de longueur variable et elles donnent un ouput de taille fixe et d’apparence aléatoire.
Si on connait :
- le hash, on ne sait pas facilement calculer p tel que : h = H(P)
- la fichier, on ne sait pas facilement calculer un autre fichier tel que : H(P) = H(P’).
On ne sait pas non plus facilement trouver de collisions avec P et P’ telles que : H(P) = H(P’).
14.1.1 Les collisions
Elles sont inévitables dans la mesure où on a un nombre infini d’entrées et un nombre fini de sorties.
Le principal est qu’on ne puisse pas trouver de collisions sur demande.
14.1.2 Les types d’algorithmes
- MD2 : 128 bits donc 2^128 empreintes possibles. Il y a des collisions (pas sur demande) et de failles. Il est déconseillé
- MD5 : Plus rapide et résistant que MD2. Il y a des faiblesses mais pas encore de collisions. Il est déconseillé.
- SHA-1 : Le message est limité à 2^64 bits. Les empreintes sont de 160 bits. Il fonctionne par blocs de 512 bits. Il contient des failles mais pas de collisions.
- SHA-2 : Résiste encore et toujours à l’envahisseur
14.1.3 Vérifier l’intégrité d’un message
Alice envoie le message p ainsi que le hash de p. Bob recalcule le hash de p et vérifie que les deux hash correspondent.
Problème : un MITM pourrait modifier p et/ou hash dans la communication.
On va développer plusieurs solutions pour ce problème :
- HMAC : Avant de faire le hash, Alice applique une fonction sur la clef et le plain. Pour vérifier, Bob utilise la même fonction. Exemple (mauvais) : on concatène.
- Signature numérique : Alice calcule le hash du plain et en calcule la signature (utilisation de sa clef publique donc). Alice envoie le plain ainsi que la signature du hash. Bob de son côté chiffre le plain et decrypte la signature. Si les deux correspondent, p est intègre et authentique.
14.2 Non répudiation
La signature numérique garantit également la non-répudiation.
Ainsi deux messages différents signés avec la même clef auront des signatures différentes. Un message signé avec deux clefs différentes aura deux signatures différentes.
L’envoyeur ne peut donc pas dire qu’il n’a pas envoyé ce message.
14.3 Algorithmes
On a le DSA : Digital signature Algorithm qui utilise les logarithmes discrets et le SHA1
Mais RSA propose aussi de la signature. DSA et RSA peuvent fonctionner ensemble.
14.4 Horodatage numérique
On veut prouver qu’un document a été créé à une certaine date et à une certaine heure.
Pour ce faire :
- On calcule le hash sur les données
- On envoie le hash à un timestamping authority
- Ce dernier concatène le timstamp avec le hash de données et rehash le tout.
- Il concatène ce dernier hash avec le timestamp et applique sa clef privée dessus.
- Il renvoie cette signature au client qui peut alors stocker cette signature avec les données initiales.
Pour vérifier on peut ainsi :
- Déchiffrer la signature pour récupérer le hash avec le timestamp.
- Hasher les données concaténées au timestamp
- Vérifier que les deux hash correspondent.
15. Les infrastructures à clef publique
On veut garantir la propriété et l’intégrité des clés publiques. Cela permet d’éviter les attaques les attaques en MITM du genre :
- Alice demande à Bob quelle est sa clef publique
- Mallory envoie la demande à Bob et récupère la clef pour lui et pour communiquer avec Bob
- Mallory renvoie sa clef publique à Alice.
- Alice communique alors en chiffré avec Mallory sans se douter qu’elle ne parle pas à Bob.
- Mallory transmet les requêtes de Alice à Bob et les requêtes de Bob à Alice mais il peut aussi influer sur la connexion si il le souahite.
On voudrait donc savoir donner une nom à une clef. Savoir à qui elle appartient.
Solution : La solution est le certificat numérique. Il lie une clé publique à un utilisateur.
La solution nécessite toutefois un tiers de confiance qui se porte garant de ce lien.
15.1 Structure d’un certificat
- L’identité du sujet
- La clé publique du sujet
- L’identité de l’émeteur
- La signature de l’émeteur : On hash les éléments de 1 à 3 et on signe le tout avec la clef privée de l’émeteur.
15.2 Vérifier le certificat
Pour vérifier le certificat, on a besoin de la clef publique du tiers de confiance (l’émeteur).
Pour vérifier :
- On hash les infos de 1 à 3
- On dechiffre la signature et on vérifie les hashs.
Cela signifie que l’on doit avoir confiance en la clef publique de l’émeteur et donc qu’elle devrait faire l’objet d’un certificat. Ce qui nécessite de renvoyer la balle plus haut.
Un autorité tout en haut doit donc auto-signer son certificat.
15.3 Les certificats x509
Il existe actuellement trois versions. Les versions 2 et 3 n’apportant pas grand chose de plus que la première.
Ils peuvent avoir un problème de nommage dans la mesure ou le nom du sujet et de l’émeteur devraient être uniques. On utilise donc différents champs :
- Le champs C pour le pays
- Le champs CN (common name) pour le nom de la personne ayant fait la demande
- Différents autres encore.
Il y a encore la possibilité de donner des identifiants uniques mais ce n’est pas conseillé.
La version 3 propose des extensions qui ne sont pas vraiment intéressantes.
15.3.1 Les classes de certificats
- Classe 1 : On ne demande que l’adresse mail du demandeur
- Classe 2 : On contrôle à distance l’identité du demandeur
- Classe 3 : On contrôle l’identité du demandeur dans le cadre d’une présentation physique
- Certificats qualifiés : Classification européenne.
15.4 Les composants d’une PKI
15.4.1 Le Certification Authority (CA)
- Il émet et révoque les certificats.
- Distribue sa clef publique aux utilisateurs et services : via un certificat qu’il a signé lui même
15.4.2 Registration Authority (RA)
Il aide le CA.
Il reçoit et vérifie les informaitons d’enregistrement des nouveaux utilisateurs.
Il peut aussi recevoir et autoriser les requêtes de sauvegarde ou de récupération de clé ainsi que les révocations.
Il peut finalement distribuer des supports matériel de stockage de clefs.
15.4.3 Le certificate directory
Stock les certificats
15.4.4 Key recovery server
Il gère la charge des clefs perdues.
- Révocation
- Génération de nouvelles paires de clefs.
15.5 Le cycle de vie d’une clef
15.5.1 Enregistrement
C’est l’une des étapes les plus importantes.
Le CA ne devrait certifier que ce qu’il a pu vérifier.
Dépendant de la destination du certificat et de sa classe, le processus peut être très long.
15.5.2 Obtention du certificat
Il y a deux possibilités :
- L’utilisateur génère les clefs, fournit un CSR et une preuve de la possession de la clef privée
- Les clefs sont produites par l’authorité de certification.
Le preuve de possession de la clef publique peut se faire en plaçant un fichier à la racine du répertoire web, …
15.5.3 Révocation du certificat
Il peut y avoir de nombreuses raisons menant à la révocation : la clé a été compromise ou oubliée, le sujet est invalide ou il y a une erreur du CA.
On utilise un Certification Revocation List, un simple fichier texte contenant la liste des certificats révoqués. La liste étant signée par le CA.
Elle doit être mise à jour fréquemment pour être certain quelle est toujours à jour et ce même si il n’y a pas eu de nouvelle révocation.
Cela signifie que les partenaires doivent faire une vérification active de cette liste.
Pour de grands CA, on utilise des points de distribution qui donne soit des deltas soit des CRL pour plusieurs CA.
15.6 Vérification d’une chaine de certificats
On vérifie les certificats un par un de la feuille à la racine (pas expiré ou révoqué). Chaque certificat de la chaine soit être signé avec la PK de suivant.
On peut le faire en pull ou en push. Respectivement, on les prend un par un nous même ou on nous les donnent tous en une fois.
15.7 Protocol de gestion
Il existe des protocols qui formalisent la communication entre l’utilisateur et le CA.
Ils proposent différentes fonctions telles que l’enregistrement, l’initialisation, la certification, la récupération, …
Il existe aussi des protocols pour la vérification du statut d’un certificat en temps réel.
16. Applications
16.1 Partage de secret
16.2 SSL
C’est la base du HTTPS.
Il utilise 4 types de messages :
- Le handshake : On négotie les paramètres de session
- Le alert : on indique une erreur
- Le change cipher spec : on modifie les paramètres de sécurité
- Application data : On transfère des informations
Les paramètres de sécurité sont stockés dans la dession et une session peut gérer plusieurs connexions.
16.3 OpenSSH
Versions cryptées de ftp, telnet, …
16.4 Sécurité des documents XML
On signe les documents XML et on transmet la signature d’une façon ou d’une autre (enveloppé, ou détachée) On peut faire la signature en RSA ou en DSA.
On peut aussi chiffrer le xml par bloc, par flux, en symétrique, …
16.5 Authentification
Le IFF = identification friend or foe
On veut distinguer les amis des ennemis et éviter un fratricide. On utilise un protocol de challenge-response
16.5.1 Exemple : Mig In The Middle
Deux pays frontaliers s’affrontent.
- Quand un avion du pays A est en attente à la frontière.
- Quand les avions du pays B rentre dans le pays A, l’avion du pays A qui est à la frontière rentre dans la pays B.
- Le pays B envoie alors le paquet IFF a l’anvion de A. Celui-ci ne peut pas répondre. Mais il peut renvoyer la réponse à sa base qui la transfert aux avions du pays B qui sont en phase d’attaque.
- Comme ces derniers répondent à la demande, la base peut transmettre la réponse à l’avion frontalier qui peut répondre et se faire passer pour un avion de B.
16.6 GPG
C’est une implémentation OpenSource du standard OpenPGP.
Il permet la chiffrement de données et de communications ainsi que la gestion des clefs et l’accès à des dépôts publics de clefs.
Il utilise de la cryptographie à clef publiques. L’utilisateur a une clef primaires et des clefs secondaires.
Le modèle de confiance fonctionne sur la réciprocité :
- Si quelqu’un en qui j’ai confiance à confiance en cette clef alors j’ai confiance en cette clef.
- D’autres schémas plus complexes sont possibles : nombres de personnes qui ont confiance en cette clef, taille de la chaine de confiance, …
Il y a plusieurs niveaux de confiance de 1 à 5. 1, on a pas confiance du tout. 5 confiance absolue.
Commentaire