-
Vincent Mazenod authoredVincent Mazenod authored
- cryptologie
-
- Pourquoi chiffre-t-on ?
- Opérations cryptographiques
- Hacher (to hash)
- Hacher (to hash)
- Hash / attaques
- Saler (to salt)
- Saler (to salt)
- Coder (to encode)
- Chiffrer (to encrypt)
- Le reste ...
- en termes scientifiques ...
- Chiffrement symétrique
- Chiffrements symétriques connus
- Chiffrement symétrique
- communications 2 à 2 pour n
- Vecteur d'intialisation
- Vecteur d'intialisation
- Right way
- Chiffrement asymétrique
- Chiffrement asymétrique
- distribution des clés?
- En pratique
- Signature
- Signature en pratique
- Signature en pratique
- Les clés de Bob n'ont jamais été utilisées
- Chiffrement
- Enjeu de la clé privée
- Bonne pratique
- Certificat
- Trousseau
cryptologie
Pourquoi chiffre-t-on ?
- Confidentialité
- Authentification
- Intégrité
- Non répudiation
Opérations cryptographiques
-
Agit sur une donnée en claire
- une chaîne caractère
- un fichier texte
- un fichier multimédia
- une archive
-
Appelé aussi le clair
-
Le but de la protéger
Hacher (to hash)
- Hash / Empreinte / Condensat
- Taille fixe (quelques octets)
- Chaque clair a un hash unique
- collision = cassé
- Pas d’opération inverse
- On parle de hashage
Hacher (to hash)
sha256("password") = 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
Hash / attaques
-
Force brute
- testé toutes les possibilités (online / offline)
-
Par dictionnaire
- testé des combinaisons de possibilités probables (online / offline)
-
Tables arc-en-ciel
- hashés précalculés de possibilités (offline)
- https://crackstation.net/
- http://project-rainbowcrack.com/table.htm
Saler (to salt)
-
Hasher en concaténant la donnée en claire avec une chaîne de caractères pseudo-aléatoires
-
Stocker le sel au niveau de l'enregistrement de l'utilisateur
- évite les attaques par tables arc-en-ciel
- n'évite pas la force brute / ni les attaques par dictionnaire
-
On parle de salaison
Saler (to salt)
sha256("hello"."bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226ab
- Utilisé notamment pour le stockage des mots de passe en base de données
Coder (to encode)
-
Changer la manière de stocker la donnée en clair
- n'est pas réellement une opération cryptographique
- pas de secret
- la donnée n'est pas protégée
- on parle de codage
base64_encode("all in clear") = YWxsIGluIGNsZWFy
- opération inverse décoder (to decode)
base64_decode("YWxsIGluIGNsZWFy") = all in clear
Chiffrer (to encrypt)
-
Rendre la compréhension de la donnée en claire impossible à quiconque ne possède pas le secret (la clé pour la lire)
- on parle de chiffrement
openssl_encrypt("all in clear","aes128","secret") = d2xhqzZbLFzoCP6vNfdVOg==
- opération inverse déchiffrer (to decrypt)
openssl_decrypt("d2xhqzZbLFzoCP6vNfdVOg==","aes128","secret") = all in clear
-
Deux options : symétrique ou asymétrique
Le reste ...
-
Décrypter
- chercher à deviner la donnée en claire sans disposer du secret
-
Chiffrage
- pour les devis (en homme / jour)
-
Crypter, cryptage, encrypter n'existent pas
- reviendrait à tenter de chiffrer sans connaîre le secret
- non sens
- reviendrait à tenter de chiffrer sans connaîre le secret
en termes scientifiques ...
-
Cryptologie
- science du secret
-
Cryptographie
- comment protéger les messages
-
Cryptogranalyse
- comment décrypter les messages
Chiffrement symétrique
- Dit à clé secrète, à clé privée, ou encore à secret partagé
- le secret permet de chiffrer et de déchiffrer
- plus le secret est long plus il est difficile de le deviner
- peu gourmand en calcul
- la clé doit être partagée par l'émetteur et le(s) récepteur(s)
Chiffrements symétriques connus
-
faibles
- Scytale spartiate, ROT13, Chiffre de Jules César
-
robustes
- Blowfish, AES, Twofish
Chiffrement symétrique
communications 2 à 2 pour n
- Une clé par destinataire
- pour n destiantaires
- n * (n-1) / 2 clés
- démultiplication des clés
- pour n destiantaires
Vecteur d'intialisation
- Avoir la garantie que les chiffrés sont uniques
- Se stocke en clair
- n'est utilisable qu'avec le secret
- Deux messages identiques chiffrés avec de vi différents auront des chiffrés différents
$crypt = openssl_encrypt("all in clear", "aes128", "secret");
PHP Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in /data/htdocs/blog.limos.fr/tmp.php on line 4
Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in /data/htdocs/blog.limos.fr/tmp.php on line 4
Vecteur d'intialisation
Right way
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes128"));
$crypt = openssl_encrypt("all in clear", "aes128", "secret", true, $iv);
$clear = openssl_decrypt($crypt, "aes128", "secret", true , $iv);
note:
Chiffrement asymétrique
-
Dit aussi à clé publique
- une clé privée
- une clé publique
-
Un message chiffré avec une clé publique sera déchiffrable avec la clé privée associée
-
Un message chiffré avec une clé privé sera déchiffrable avec la clé publique associée
Chiffrement asymétrique
-
La clé publique doit être connue de l'expéditeur
- plus complexe d'un simple secret à transmettre
-
Demande plus de ressources
-
Gourmand en calcul
-
Le plus connu
- RSA since 1977
- Algo à courbes elliptiques
distribution des clés?
-
la clé publique est diffusable n'importe où
- sur un serveur de clés
- sur une page web
- via une carte de visite
- via une pièce jointe
- via un chat
-
la clé privée est à protéger à tout prix
- quiconque la possède peut l'utiliser en se faisant passer pour son propriétaire légitime
En pratique
-
Alice et Bob se sont chacun générés un couple clé publique / clé privée
-
Ils se sont échangés leur clé publique respective
-
Alice a en sa possession
- sa clé publique, sa clé privée et la clé publique de Bob
-
Bob a en sa possession
- sa clé publique, sa clé privée et la clé publique d'Alice
Signature
- Alice chiffre un message avec sa clé privée et l'envoi à Bob
- Bob peut déchiffrer le message avec la clé publique d'Alice
- Bob est alors sûr que le message a été émis avec la clé privée d'Alice
- Autentification de l'origine
- Bob est alors sûr que le message a été émis avec la clé privée d'Alice
- Bob peut déchiffrer le message avec la clé publique d'Alice
Signature en pratique
-
Alice envoie
- le message chiffré
- un hashé chiffré du message
-
Bob peut vérifier en
- déchiffrant le message avec la clé publique d'Alice
- calculant le hashé du message en clair
- déchiffrant le hashé chiffré envoyé par Alice
- comparant le hashé calculé et le hashé déchiffré
Signature en pratique
- Bob a pu vérifier
- la clé à l'origine du message: autentification de l'origine
- l'intégrité du message
autentification de l'origine + intégrité
=
non répudiation
Les clés de Bob n'ont jamais été utilisées
Chiffrement
-
Bob veut maintenant écrire à Alice
- qu'il sait être la vraie Alice
- en tout cas celle qui possède la clé privée associée à la clé publique qu'Alice lui a donné
- qu'il sait être la vraie Alice
-
Bob chiffre le message avec la clé publique d'Alice
-
Bob envoie le texte chiffré
-
Alice déchiffre le message grâce à sa clé privée.
-
Garantie de la confidentialité
Enjeu de la clé privée
- Eve a récupéré la clé privée de Bob (mal protégée)
- elle peut envoyer des messages chiffrés à Alice, et à tout ceux qui font confiance à la clé publique de Bob
- en se faisant passer pour Bob
- elle peut lire tous les messages chiffrés avec la clé publique de Bob (à destination de Bob)
- elle peut envoyer des messages chiffrés à Alice, et à tout ceux qui font confiance à la clé publique de Bob
Bonne pratique
- Toujours signer et chiffrer ses messages
- Toujours être certain de l'identité du possesseur de la clé
- échange de clé IRL
- Bien protéger sa clé privée
- stockée en sécurité
- dans un keepass?
- dans un coffre?
- sur papier?
- protégée par un mot de passe fort
- stockée en sécurité
Certificat
- Clé publique
- Attributs
- nom
- date d'expiration
- algorithmes
- ...
- Au moins une signature
Trousseau
- Ensemble de clés
- couples clé publique / clé privée
- différentes fonctions
- signature
- chiffrement
- création de certificat
- authentification
- différentes fonctions
- clés publiques
- importés (contacts)
- couples clé publique / clé privée