Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WS Crypto @ 42

WS Crypto @ 42

Workshop Crypto @ 42 School in Paris

~28 Crypto Katas, ~5h

A partnership between https://stelau.com and https://berty.tech

---

By:
* Benoit Leger / @le-du6
* Maxence Karsten / @max
* Nicolas Chalanset / @nicocha
* Manfred Touron / @moul / https://manfred.life

Manfred Touron

May 28, 2019
Tweet

Other Decks in Technology

Transcript

  1. Workshop Crypto @ 42 ~28 Crypto Katas, ~5h, en ~2

    temps Dispo sur slack en live <Crypto&Co/> Benoit Leger / @le-du6 Maxence Kersten / @max Nicolas Chalanset / @nicocha Manfred Touron / @moul
  2. Kata 1: Picasso or Any Tool @moul Vous avez 8

    minutes pour signer ces 4 trucs: • Votre vie • Votre ordinateur • Un objet quelconque • Une reconnaissance de dette pour Berty/Stelau ou votre voisin de WS-42 Indice: Démerdez-vous ! Signer électroniquement tel que vous l’imaginez ou le pouvez et balancez vos signatures dans le channel - Merci !
  3. Kata 3: Signature Numérique @nicocha Ce que j’aurais fait pour

    le Kata 1 1/ Votre vie Facebook / Instagram / Twitter / GitHub / Votre extrait de naissance ? 2/ Votre ordinateur ioreg -d2 -c IOPlatformExpertDevice | awk -F\" '/IOPlatformUUID/{print $(NF-1)}' > uuid.txt keybase sign -i uuid.txt -o uuid.txt.signed 3/ Un objet quelconque gpg -s Eames_670.jpeg 4/ une reconnaissance de dette pour @max echo “Je soussigné Nicolas Chalanset reconnaît devoir 1€ à Maxence Kersten” > rd.txt openssl rsautl -sign -in rd.txt -inkey myprivatekey.pem -out rd.txt.signed crpt.fyi/kata3
  4. Kata 4: Vérification de Signature Numérique @max Exo : vérifiez

    la signature que vous venez de créer - Comment “vérifier” une signature ? - Que vérifie-t on ? Par rapport à quoi ? - Quelle opération cryptographique est réalisée lors d’une vérification ? RSADecrypt(signature)pubKey sha256(data) Données Signature Hash des données Hash ? crpt.fyi/kata4
  5. Kata 5: Signature du Passeport @nicocha Normes Mécanismes de sécurité

    Objectifs de sécurité Fonctions Cryptographiques Obligatoire / Facultatif France OACI 9303 BAC contrôle d’accès confidentialité des échanges authentification (symétrique) échange de clés de session facultatif X Passive Auth. intégrité et authenticité signature électronique obligatoire X Active Auth. originalité du composant défi-réponse (asymétrique) facultatif ICAO TR SAC v 1.01 PACE (SAC) contrôle d’accès confidentialité des échanges secret partagé + échange de clé Diffie-Hellman obligatoire X (depuis décembre 2014) EAC TR-03110 V 2.1 Chip Auth. v1 originalité du composant confidentialité des échanges échange de clé Diffie-Hellman obligatoire X (depuis juin 2009) Term Auth. v1 contrôle d’accès (authentification du lecteur) vérification de certificats (signature électronique) défi-réponse (asymétrique) obligatoire X (depuis juin 2009)
  6. Kata 6: VeryShortCryptoStory @le-du6 Réagir après avoir cassé le code

    de son adversaire Feindre d’ignorer ce qu’on sait, de savoir tout ce qu’on ignore, [...] avoir souvent pour grand secret de cacher qu’il n’y en a point, [...] Beaumarchais - Le Mariage de Figaro (1778)
  7. Kata 6: VeryShortCryptoStory @le-du6 3000 ans de crypto symétrique Les

    recettes militaro-diplomatiques de confusion et de diffusion 100 ans de crypto moderne De Kerckhoffs ... jusqu'au crypto-système parfait / incassable ~ 50 ans de crypto asymétrique La petite révolution ~ 20 ans de crypto quantique Qui-sait-quoi ? Combien de qbits pour casser RSA and Co (NP-complet) ?
  8. Kata 6: VeryShortCryptoStory @le-du6 crypto symétrique => Confusion et Diffusion

    Confusion par substitution A<=>U C<=>H Y<=>M Z<=>P ... Diffusion par permutation / transposition JESUISPASLA => UEISJASSPAL Résultat <Crypto&Co/> => @HEMZOT+HT?@ => Z@H@?TM+TOEH
  9. Kata 6: VeryShortCryptoStory @le-du6 crypto symétrique moderne => Auguste Kerckhoffs

    - 1883 1. Le système doit être matériellement, sinon mathématiquement indéchiffrable. 2. Il faut qu’il n’exige pas le secret, et qu’il puisse sans inconvénient tomber entre les mains de l’ennemi. 3. La clef doit pouvoir en être communiquée et retenue sans le secours de notes écrites, et être changée ou modifiée au gré des correspondants. 4. Il faut qu’il soit applicable à la correspondance télégraphique. 5. Il faut qu’il soit portatif, et que son maniement ou son fonctionnement n’exige pas le concours de plusieurs personnes. 6.Enfin, il est nécessaire, vu les circonstances qui en commandent l’application, que le système soit d’un usage facile, ne demandant ni tension d’esprit, ni la connaissance d’une longue série de règles à observer. => ce qui est gardé secret doit être ce qui est le moins coûteux à changer si le secret s'avérait divulgué
  10. Kata 6: VeryShortCryptoStory crypto symétrique => Le Masque Jetable ou

    One Time Pad La clé doit être une suite de caractères au moins aussi longue que le message à chiffrer. Les caractères composant la clé doivent être choisis de façon totalement aléatoire. Chaque clé, ou « masque », ne doit être utilisée qu'une seule fois (d'où le nom de masque jetable).
  11. Kata 7: Masque jetable / One-Time Pad (@moul) • L’algorithme

    de chiffrement le plus simple et le plus sécurisé (dit “parfait”); garantit un secret parfait même contre une puissance de calcul illimitée ou un ordinateur quantique Chiffrement: C = P ⊕ K Déchiffrement: P = C ⊕ K C: text chiffré --- P: texte en clair --- K: clé aléatoire --- ⊕ ou XOR --- C, P, K ont la même longueur XOR: “OU exclusif”, la fonction “s’annule” si on l’applique 2 fois: A ⊕ K ⊕ K = A demo: crpt.fyi/kata7 (source: github.com/moul/otp) • Problèmes: ◦ K très long (pour chiffrer un disque dur d’1To, il faut un K d’1To aussi ◦ K doit être partagé avant entre les partis, en claire (pas internet-friendly) ◦ Ne jamais réutiliser K -- C1 ⊕ C2 = (P1 ⊕ K) ⊕ (P2 ⊕ K) ⊕ P1 ⊕ P2 ⊕ K ⊕ K = P1 ⊕ P2
  12. Kata 8: Echange sécurisé de secret @le-du6 Sources & Schémas

    : Jérôme Plût - ANSSI 1976 1977 GCHQ 1975
  13. Kata 8: Echange sécurisé de secret @le-du6 DH Diffie-Hellman Problème

    : établissement d’une clé secrète commune entre deux entités Alice et Bob, ne pouvant communiquer que par un canal public.
  14. Kata 9: RSA pour chiffrer @max Chiffré RSAEncrypt(data)pubKey Données Chiffrement

    (Encryption) Chiffré RSADecrypt(cipher)privKey Données Déchiffrement (Decryption) crpt.fyi/kata9
  15. Kata 9: RSA pour chiffrer @max Exo : utilisez RSA

    pour chiffrer un message > Génération d’une paire de clé RSA via openssl genrsa > Diffusez votre clé publique pour recevoir des messages chiffrés => Choisissez la clé d’un autre participant et chiffrez un message => Diffusez le ensuite sur le channel Slack (en mentionnant le destinataire) > Déposez sur Slack le / les messages que vont pouvez déchiffrer => Comment être certains d’être le seul à pouvoir lire un message ? pubKey privKey crpt.fyi/kata9
  16. Kata 9: Chiffrer avec openssl 1) créer un bi-clé RSA

    openssl genrsa -aes256 -out privkey.pem 2) Extraction de la clé publique (la clé publique est inclue dans le fichier privkey.pem) openssl rsa -in privkey.pem -outform PEM -pubout -out public.pem 3) Chiffrer un message avec la clé publique du destinataire openssl rsautl -encrypt -in message-secret.txt -inkey public.pem -pubin -out secret.enc 4) déchiffrer le message reçu openssl rsautl -decrypt -in secret.enc -inkey privkey.clear crpt.fyi/kata9
  17. Kata 10: RSA pour signer @nicocha Exo : utilisez RSA

    pour signer un message > diffusez votre clé publique, c’est déjà fait ? > envoyez un message signé à quelqu’un par le Slack > comment vérifier la signature d’un message ? Quelle est réellement la donnée signée ?
  18. Kata 12: C’est ma clé publique à moi @nicocha Comment

    faire confiance à une clé publique ? > échange en main propre > annuaires (GPG, keybase) > PKI et certificats x509 → Générez une CSR et transmettez la sur le channel
  19. Kata 13: Extraction Passeport 1/2 @max Protocole BAC (Basic Access

    Control) : >> dérivation de clés à partir d’informations présentes sur le passeport >> partagées entre le lecteur et le passeport pour dialoguer K seed : numéro de passeport + date de naissance + date d’expiration
  20. Obtention de la clé K enc à partir de K

    seed : K enc = 128msb (SHA−1(K seed || 1)) Kata 13: Extraction Passeport 1/2 @max
  21. Workshop Crypto @ 42 Pause déjeuner <Crypto&Co/> Benoit Leger /

    @le-du6 Maxence Kersten / @max Nicolas Chalanset / @nicocha Manfred Touron / @moul
  22. Kata 14: A-ki-ksé-ste-clé @moul Plusieurs biclés ont été générées, transformées,

    puis melangées. Vous avez 8 minutes pour en rassembler un maximum. Attention, il y a moins de clés que de fichiers, certaines clés sont présentes plusieurs fois en différent formats. Rendu: envoyer sur slack 1 ligne par groupe de fichiers, exemple: “file_1 file_5 file_15” -> crpt.fyi/memory
  23. Kata 15: Certificat Electronique @max Où trouve-t’on des certificats électroniques

    ? Trousseau système Token Site web Mail Passeport Contrats (documents) crpt.fyi/kata15
  24. Kata 17: Paradoxe du certificat de Signature @moul • Un

    certificat est lui-même signé : bizarre non ? • Il faut donc un tiers de confiance (bocal 42 :p) • C’est le modèle TLS (SSL) • Comment faire confiance au certificat de ce tiers de “confiance” ? • Chaine de certificats (Root, Issuer) • Roots en dur dans les OS et browsers Quelles alternatives ? • Certificate pining, blockchain, Web-of-trust, CT, DANE with DNSSEC Plus d’infos: http://www.certificate-transparency.org/comparison
  25. Kata 18: Extraction Passeport 2/2 @nicocha Terminez d’extraire les données

    de vos passeports Contenus d’un passeport : • EF_COM.bin • EF_CVCA.bin • EF_DG1.bin • EF_DG2.bin • EF_DG3.bin ? • EF_SOD.bin https://crpt.fyi/kata18
  26. Kata 18: Extraction Passeport 2/2 @nicocha EF_SOD Security Object Document

    • Données à signer • Identification du signataire • Signature électronique https://crpt.fyi/kata18
  27. Kata 19: Hash @moul • Exemples: MD5, SHA-1, SHA-256, SHA-3,

    BLAKE2 • Exo: fabrique ton hash en 8 minutes ◦ Au minimum: ▪ Taille d'entrée quelconque ▪ Calcul reproductible ▪ Impossible de remonter facilement ◦ Bonus ▪ Résistance aux collisions string ft_hash(input string) Envoyez votre code ou pseudo-code sur slack, pas grave si ca ne compile pas
  28. Kata 20: SHA1 & Co @le-du6 SHA-1 Source : Serious

    Cryptography Copyright © 2018 by Jean-Philippe Aumasson 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
  29. Kata 20: SHA1 & Co @le-du6 1. il est très

    difficile de trouver le contenu du message à partir de son condensat 2. à partir d'un message donné et de son condensat (et de la fonction de hachage), il est très difficile de générer un autre message qui donne le même condensat 3. il est très difficile de trouver deux messages aléatoires qui donnent un même condensat (résistance aux collisions)
  30. Instructions : A tour de rôle, dites haut et fort

    votre jour et mois de naissance. >> Écoutez bien chaque date ; si c’est le même jour et mois que vous, manifestez vous : c’est une collision ! Kata 21: Paradoxe des anniversaires @max
  31. Kata 22: Collisions SHA1 @le-du6 Si une fonction de hachage

    a une sortie de n bits (n grand) alors l'ensemble d'arrivée possède 2^n éléments et il faut environ 2^(n/2) hachés d'éléments distincts pour produire une collision avec 50 % de chance. n(0,5) = √(2 × 256 × ln(2)) crpt.fyi/kata22
  32. Authentifier le signataire et l’intégrité de mon passeport avec Openssl

    : - Quelles données sont signées ? - Où se trouve la signature ? - Vérification de la signature >> Qu’ai-je réellement vérifié ? - Intégrité des DG : re-calcul des hash des DataGroup Kata 23 : Votre passeport est-il un vrai ? Demo @max https://crpt.fyi/kata23
  33. SOD Data Certificate Signature sha256(DG1) sha256(DG2) sha256(DG3) sha256(DG11) sha256(DG12) sha256(DG13)

    sha256(DG14) sha256(concat(DGs)) Message Digest Signer Info Authority Key Identifier Public Key (RSA) Public exponent Modulus Message Digest signed by the document signer with RSA using the Private Key (detained by the French authorities) Kata 23 : Quelles données sont signées ?
  34. Signe Vérifie Vérifie Signe Clés Privées Clés Publiques CSCA DS

    SOD DS messageDigest DGx hash SignatureValue DGx hash CMS structure creation SOD Kata 23 : Par qui sont signées les données ? SHA256 DataGroups SHA256 SHA256 SHA256
  35. Signe Vérifie Vérifie Signe Clés Privées Clés Publiques CSCA DS

    SOD Kata 23 : Comment vérifier l’authenticité d’un passeport ? SOD DGx hash sha 256 SignatureValue DataGroups SHA256 SHA256 SHA256
  36. Kata 25: TOTP @moul • HOTP: hmac d’un compteur •

    TOTP: HTOP(timestamp/30) • Par défaut: hash de 6 chiffres toutes les 30 secondes • Souvent utilisé en 2FA, fonctionne “offline” (sans synchro avec le serveur), pas de coût SMS (client-serveur) • RFC6238: Google Authenticator, Authy, etc • Plus rare: utilisation de TOTP pour rendez-vous point (client-client / p2p) • Botnet: noms de domaines tournants
  37. Kata 26: Modifiez les données de votre passeport Prérequis: -

    Kata10 + Kata16 : Génération bi-clé RSA + Certificat - Kata13 + Kata18 : Extraction des données d’un passeport biométrique - Kata23 : Extraction de la structure des données à signer et vérification de la signature Création d’un nouveau SOD : - Modification des binaires (DG1 / DG2) et re-génération des sha256(DG) - Re-génération du EF_SOD à partir des nouveaux hash DG (modification de la structure sod.data et signature CMS) https://crpt.fyi/kata26
  38. Kata 26: Modification du DG1 Modification du nom, de la

    date de naissance ou de la date d’expiration : > Ressources : http://www.emvlab.org/mrz/ Récupérez le résultat et remplacez la valeur (attention à “a[_X”) dans le fichier DG1.BIN. Calcul du hash :
  39. > Ouvrir le fichier data.bin (extrait du SOD contenant les

    données à signer) avec un éditeur > Remplacer le premier hash par celui généré à l’étape précédente Kata 26: Modification des Données à signer
  40. Kata 26: Génération d’un nouveau SOD Commande de génération d’un

    SOD : openssl cms -nosmimecap -nodetach \ -sign -signer ds-cert.pem \ -inkey ds-priv.key \ -in data.bin -binary \ -out EF_SOD.bin -outform DER \ -econtent_type 2.23.136.1.1.1
  41. Kata 26: Vérifications Vérification de la signature du SOD via

    openssl : openssl smime -verify -in EF_SOD.DER -inform DER -CAfile csca-42.crt Ajout d’un object ASN1 au début du SOD :
  42. Kata 27: Empreintes biométriques du PSP @max Où sont vos

    empreintes biométriques ? Principe d’autorisation : > Utilisation des certificats électroniques gérer les autorisations
  43. > Obtenir un certificat lié au CVCA ? >> Sécurisation

    des clés privées du CVCA >> Sécurisation du processus de délivrance des certificats DV / IS > Tenter un accès avec une chaîne de confiance inconnue par le passeport >> Contrôle de la signature de la chaîne de confiance (CVCA / DV / IS) par le passeport à chaque tentative de lecture Kata 27: 401 Unauthorized
  44. Kata 28: Clonage d’un passeport @nicocha eClown / RFIDIOT /

    JMRTD P<FRANIEL<<XAVIER<<<<<<<<<<<<<<<<<<<<<<<<<<< 60RF368511FRA4501022M2707200<<<<<<<<<<<<<<00 crpt.fyi/ecl0wn
  45. Questions ? Benoit Leger / @le-du6 Maxence Kersten / @max

    Nicolas Chalanset / @nicocha Manfred Touron / @moul <Crypto&Co/>