Skip to content
Snippets Groups Projects
Forked from Vincent MAZENOD / blog.limos.fr
210 commits behind the upstream repository.

cryptologie

Pourquoi chiffre-t-on ?

  1. Confidentialité
  2. Authentification
  3. Intégrité
  4. 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)

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

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

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

Bâton de plutarque

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

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

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é
  • 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)

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

Certificat

  • Clé publique
  • Attributs
    • nom
    • mail
    • 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
    • clés publiques
      • importés (contacts)