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

    Benoit Leger / @le-du6 Maxence Kersten / @max Nicolas Chalanset / @nicocha Manfred Touron / @moul

    View Slide

  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 !

    View Slide

  3. Kata 2:
    ElectroSign
    @le-du6

    View Slide

  4. Kata 2:
    ElectroSign @le-du6

    View Slide

  5. Kata 2:
    ElectroSign
    @le-du6
    Sources & Schémas :
    Jérôme Plût - ANSSI

    View Slide

  6. Kata 2:
    ElectroSign
    @le-du6

    View Slide

  7. 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

    View Slide

  8. 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

    View Slide

  9. Kata 5: Signature du Passeport @nicocha

    View Slide

  10. 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)

    View Slide

  11. 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)

    View Slide

  12. 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) ?

    View Slide

  13. Kata 6:
    ElectroSign
    @le-du6
    Sources & Schémas :
    Jérôme Plût - ANSSI
    1976
    1977
    3000 ans
    GCHQ
    1975

    View Slide

  14. 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
    => @[email protected] => [email protected]@?TM+TOEH

    View Slide

  15. 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é

    View Slide

  16. View Slide

  17. 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).

    View Slide

  18. 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

    View Slide

  19. Kata 8:
    Echange
    sécurisé de
    secret
    @le-du6
    Sources & Schémas :
    Jérôme Plût - ANSSI
    1976
    1977
    GCHQ
    1975

    View Slide

  20. 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.

    View Slide

  21. Kata 8:
    Echange
    sécurisé de
    secret
    @le-du6
    RSA

    View Slide

  22. Kata 8: Echange sécurisé de secret @le-du6
    RSA
    DH

    View Slide

  23. Kata 8:
    Echange
    sécurisé de
    secret
    @le-du6 RSA
    DH
    RSA

    View Slide

  24. 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

    View Slide

  25. 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

    View Slide

  26. 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

    View Slide

  27. 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 ?

    View Slide

  28. Kata 10: RSA pour signer @nicocha

    View Slide

  29. Kata 11:
    Attaques-moi
    si tu peux ?
    @le-du6

    View Slide

  30. Kata 11: Attaques-moi si tu peux ? @le-du6

    View Slide

  31. 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

    View Slide

  32. Kata 12: C’est ma clé publique à moi @nicocha

    View Slide

  33. Kata 12: C’est ma clé publique à moi @nicocha

    View Slide

  34. Kata 12: C’est ma clé publique à moi @nicocha

    View Slide

  35. Kata 12: C’est ma clé publique à moi @nicocha

    View Slide

  36. Kata 12: C’est ma clé publique à moi @nicocha

    View Slide

  37. 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

    View Slide

  38. 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

    View Slide

  39. Workshop Crypto @ 42
    Pause déjeuner

    Benoit Leger / @le-du6 Maxence Kersten / @max Nicolas Chalanset / @nicocha Manfred Touron / @moul

    View Slide

  40. 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

    View Slide

  41. 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

    View Slide

  42. Kata 16: Dissection du Certificat @nicocha
    crpt.fyi/kata16
    lapo.it

    View Slide

  43. Kata 16: Dissection du Certificat @nicocha
    crpt.fyi/kata16

    View Slide

  44. 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

    View Slide

  45. 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

    View Slide

  46. Kata 18: Extraction Passeport 2/2 @nicocha
    EF_SOD Security Object Document
    ● Données à signer
    ● Identification du signataire
    ● Signature électronique
    https://crpt.fyi/kata18

    View Slide

  47. Kata 18: Extraction Passeport 2/2 @nicocha
    https://crpt.fyi/kata18

    View Slide

  48. 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

    View Slide

  49. Kata 20: SHA1 & Co @le-du6

    View Slide

  50. Kata 20: SHA1 & Co @le-du6 SHA-1
    Source : Serious Cryptography
    Copyright © 2018 by Jean-Philippe Aumasson
    5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

    View Slide

  51. 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)

    View Slide

  52. Kata 20: SHA1 & Co @le-du6
    2^264
    2^(80*3,3)
    10^80
    nb. atomes univers
    SHA-256

    View Slide

  53. Kata 20: SHA1 & Co @le-du6

    View Slide

  54. Kata 21: Paradoxe des anniversaires @max

    View Slide

  55. 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

    View Slide

  56. 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

    View Slide

  57. 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

    View Slide

  58. 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 ?

    View Slide

  59. 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

    View Slide

  60. Kata 23 : SOD 1/3 - données à signer

    View Slide

  61. Kata 23 : SOD 2/3 - Certificat Document Signer

    View Slide

  62. Kata 23 : SOD 3/3 - Signature et signature attributes

    View Slide

  63. 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

    View Slide

  64. Kata 24: HMAC
    @le-du6
    vérifier simultanément
    l'intégrité de données et
    l'authenticité d'un message

    View Slide

  65. Kata 24:
    HMAC
    @le-du6

    View Slide

  66. 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

    View Slide

  67. 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

    View Slide

  68. 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 :

    View Slide

  69. > 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

    View Slide

  70. 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

    View Slide

  71. 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 :

    View Slide

  72. 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

    View Slide

  73. Kata 27: L’accès aux données biométrique dans l’UE

    View Slide

  74. > 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

    View Slide

  75. Kata 28: Clonage d’un passeport @nicocha
    eClown / RFIDIOT / JMRTD
    P60RF368511FRA4501022M2707200<<<<<<<<<<<<<<00
    crpt.fyi/ecl0wn

    View Slide

  76. Questions ?
    Benoit Leger / @le-du6 Maxence Kersten / @max Nicolas Chalanset / @nicocha Manfred Touron / @moul

    View Slide