diff --git a/Crypto/Images/asymetric_encrypt.png b/Crypto/Images/asymetric_encrypt.png new file mode 100644 index 0000000..1438c5a Binary files /dev/null and b/Crypto/Images/asymetric_encrypt.png differ diff --git a/Crypto/Images/bloccipher.png b/Crypto/Images/bloccipher.png new file mode 100644 index 0000000..4bffd92 Binary files /dev/null and b/Crypto/Images/bloccipher.png differ diff --git a/Crypto/Images/concept.png b/Crypto/Images/concept.png new file mode 100644 index 0000000..5d55369 Binary files /dev/null and b/Crypto/Images/concept.png differ diff --git a/Crypto/Images/flowcipher.png b/Crypto/Images/flowcipher.png new file mode 100644 index 0000000..1b025ef Binary files /dev/null and b/Crypto/Images/flowcipher.png differ diff --git a/Crypto/Images/spnet.png b/Crypto/Images/spnet.png new file mode 100644 index 0000000..1548a97 Binary files /dev/null and b/Crypto/Images/spnet.png differ diff --git a/Crypto/Images/symetric_encrypt.png b/Crypto/Images/symetric_encrypt.png new file mode 100644 index 0000000..67e2f05 Binary files /dev/null and b/Crypto/Images/symetric_encrypt.png differ diff --git a/Crypto/intro.md b/Crypto/intro.md index 4f0143f..0032522 100644 --- a/Crypto/intro.md +++ b/Crypto/intro.md @@ -1,4 +1,177 @@ # Introduction à la Cryptographie + Responsable : vincent.migliore@insa-toulouse.fr # Definitions + +>La cryptographie est la science qui vise à écrire les secrets. + +Il faut distinguer la Cryptographie de la cryptologie ainsi que de la crpytanalyse. + +- La Cryptologie est la science du secret en général et ne concerne pas nécessairement un savoir +- La ccryptanalyse concerne elle la science qui vise à briser les secrets. + +## Principes de Kerkhoffs + +1- Théoriquement un secret parfaitement gardé repose sur un algorithme inviolable. En revanche, on peut se contenter en pratique d'utiliser des algorithmes qui nécessiteraient un temps et des ressources déraisonnés pour être cassés. + +2- La construction ainsi que la conception ne doivent pas nécessiter de secret. _Le secret de chiffrement est externe à la conception du système. Ainsi, en récupérant un système, on ne peut pas en connaitre le secret et accéder à la donnée._ + +

+ +

+ +# Cryptographie moderne + +- Sécurité basée sur des proobl_èmes mathématiques calculatoirement complexes. +- La domaine est hautement standardisée et les algorithmes de chiffrement sont majoritairement publics +- Il est fortement recommandé d'utiliser des librairies publiques et ne pas s'aventurer à reconstituer un algorithme de chiffrement fait maison, cela pourrait mettre en danger le secret associé. + +En revanche, certaines brèches restent encore ouvertes. + +- Il existe toujours des failles liées aux attaques physiques + - Injection de fautes + - Side channels | Cannaux de fuites +- Les ordinateurs quantiques sont aujourd'hui une source d'inquiétude puisqu'ils sont capables de résoudre les problèmes mathématiques bien plus rapidement que des ordinateurs quantiques. + - Se pose alors la question de la mise en oeuvre d'algorithmes de protection post-quantiques + +> Un Algorithme Post quantique est un algorithme capable de tourner dans un temps et avec des ressources raisonnables sur un ordinateur standard, mais qui pour autant n'a pas encore été cassé par un ordinateur quantique. + +# Les acteurs de la standardisation + +## Nation Institute of Standards Technology - NIST + +Prend en charge la régulation des algorithmes de cryptographie. Les enjeux actuels reposent sur la mise en place d'algorithmes post-quantiques stables. + +## Internet Engineering Task Force - IETF + +Prend en charge la régulation de la sécurité dans les protocoles de l'internet et notamment TCP/IP + +## ISO + +Prend en charge tous les autres domaines spécifiques. + +# Vocabulaire important + +| Anglais | Français | Explication | +| :--------------- |:--------------- |:---------------| +| Plain Text | Message clair | Message non protégé | +| Cipher text | Message chiffré | Message protégé | +| Keygen | Keygen | Générateur de clés de chiffrement | +| Encryption | Chiffrement | Mécanisme qui chiffre un message clair | +| Decryption | Déchiffrement | Mécanisme qui extrait un message à partir d'un chiffré | +| Symetric Key | Clé symétrique | Même clé utilisée pour chiffrer et déchiffrer un message | +| Asymetriic key | Clé asymétrique | Clé différente est utilisée pour chiffrer et déchiffrer | + +Dans le cas de mécanismes asymétriques, on considère en général que la clé de **chiffrement** est une **clé publique** et à contrario, qu'une **clé de déchiffrement** est une **clé privée**. + +

+ +

+ +

+ +

+ +> **On considèrera toujours que c'est Alice qui souhaite communiquer avec Bob** + +En général, dans un chiffrement symétrique, on parle de many to one encryption - serveur à plusieurs PC. + +# Propriétés essentielles d'un algorithme de chiffrement + +- Confidentialité : Une écoute ne permet pas de comprendre le message +- Intégrité : Le récepteur peut détecter si le message reçu est différent du message émis | i.e. checksum etc +- Authentification : Capacité à reconnaître ses destinataires et éviter les usurpations +- Non répudiation : Avec des clés différentes on peut distinguer qui a émis quelle donnée et ainsi il n'y a pas de doute sur qui a émis telle ou telle donnée + +# Les différents types de canaux + +- Non-Sécurisé : Ecoute possible et modification possible des paquets +- Sécurisé : Ni écoute ni modification possible +- Confidentiel : Pas d'écoute possible +- Authentique : Pas de modification par un tiers grâce par exemple à un contrôle d'intégrité + +# Notation fonctionnelle + +$f(message,key) = chiffré$ + +# Algorithmes déterministes + + Deux entrées identiques mèneront à une clé identique. Dans le cas de la cryptographie, il y a absolue nécessité que Encrypt et Decrypt soient des algorithmes déterministes. Ainsi on peut attester la non déformation des messages lors de leur transport. + +Une autre propriété d'Encrypt et Decrypt est appelée la consistance : $\forall m \in M, \forall S_k \in K, Decrypt(Encrypt(m,S_k),S_k)=m$ + +# Algorithmes aléatoires + +Keygen est un algorithme non déterministe, Il peut attribuer une clé avec certaines probabilités en fonction des entrées. On utilise en général deux types de lois : Uniforme pour des algorithmes classiques, et plutôt Gaussienne pour des algorithmes post-quantiques. + +# Sécurité d'un algorithme de chiffrement/déchiffrement + +Il est essentiel que le chiffré ne donne aucune information sur la clé de chiffrement, ainsi personne ne peut, en interceptant le message, avoir des pistes qui pourraient orienter les recherche pour briser le secret. + +# Est il possible d'avoir un secret parfait ? + +## Cas du XOR | Ou Exclusif | Addition modulo 2 + +Cette équation est toujours vraie : $x \oplus y \oplus x = y$ et XOR est commutatif. Cela permettrait donc de chiffrer de façon symétrique un message très facilement : $message \oplus clé = chiffré$ et à partir du chiffré, on pourrait facilement faire $ chiffré \oplus clé = message \oplus clé \oplus clé = message$. + +Ce type de chiffrement instaure deux sécurités immédiates : + +- Sans connaissance de la clé, un chiffré peut donner n'importe quel autre message en fonction de la pseudo clé qui serait utilisée pour déchiffrer +- La sortie d'un tel chiffrement est totalement uniforme (car la création de la clé serait issue d'un keygen uniforme : message indépendant de la clé $\oplus$ clé uniforme = une sortie totalement uniforme). + - Cela permet d'empêcher les tentatives d'attaques fréquentielles + +## Problèmes + +On a besoin d'une clé au moins aussi longue que la longueur du message. D'autant que d'après Shanon, on a beosin que la taille de la clé soit à minima supérieure ou égale à celle du message, autrement, il existe un algorithme capable de casser le secret. + +En revanche, on peut se servir de ce type de protection dans le cas d'algorithmes one to many, qui correspondent en général à des algorithmes de signatures. + +# Chiffrements symétrique + +Pour optimiser le chiffrement on souhaiterait + +- de petites clés + - on accepte de réduire la sécurité sur le secret parfait pour parvenir à avoir de petites clés ET que les ressources nécessaires pour briser le secret sont démesurées +- un temps de chiffrement/déchiffrement raisonnable sur des machines standards. + +## Chiffrement à flots | basé sur le chiffrement XOR + +

+ +

+ +## Chiffrement à blocs + +- Messages découpés en blocs de taille fixe n +- La clé est choisie comme une chaine aléatoire de caractères de taille k +- Chaque bloc est chiffré par le même mécanisme de chiffrement avec la clé et produit ainsi des blocs chiffrés de taille n +- Déchiffrement basé sur la même clé et la même taille de blocs + +

+ +

+ +On considère un chiffrement à bloc réussi si + +- Les blocs sont assimilables à des permutations +- Un n-bit block chiffré est indistinguable d'un random n-bit block + +En pratique, pour valider ce type de chiffrement, on se base sur les propriétés de Shannon : +- **Diffusion** : Si 1 bit change dans le bloc d'origine, il faut que statistiquement, plus de la moitié du bloc chiffré soit impactée +- **Confusion** : 1 bit du bloc chiffré doit être lié à plusieurs bits de la clé + +## Réseau de Substitutions/Permutations + +Une autre techinque de chiffrement consiste à faier passer le message dans une chaine de bloc de substitutions permutations : + +

+ +

+ +- Chacune des fonctions de S/P est réversible +- Chaque itération de S/P est appelée un Round +- Plus il y a de round, plus le chiffré en sortie sera uniforme +- Ici, on considère que le niveau de sécurité est proche de celui d'une attaque par force brute qui est une recherche à tatons de la clé de chiffrement + +on a donc ici $nb_{itération de recherches} = 2^{security level} = 2^{taille de la clé}$ \ No newline at end of file diff --git a/Réseau/cours.md b/Réseau/cours.md index 2149522..ea76e22 100644 --- a/Réseau/cours.md +++ b/Réseau/cours.md @@ -141,3 +141,4 @@ L'objectif de la couche de transport est de procéder à un multiplexage applica La partie concernant la data applicative d'un paquet TCP est appelée segment. La numérotation des segments se fait sur 4Bits. Cette numérotation permet le réordonnement de la data a la réception. Il y a des numéros dans les flags d'ACK pour indiquer les prochains octets attendus en réception et orienter la fin de l'envoi. + diff --git a/tmp.drawio b/tmp.drawio index 48ecd0e..fe9eb65 100644 --- a/tmp.drawio +++ b/tmp.drawio @@ -1,35 +1,69 @@ - + - + + + + + + + + + - - + + - + - - + + - + - - + + - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +