Léαlinux 🐧 Profile picture
Association loi 1901 depuis 1998 sur les logiciels libres. ☁️: bluesky: @lealinux.org 🐘: lealinux@mastodon.cloud 📩: bureau@ (Pas de support technique en DM)

Oct 22, 2024, 85 tweets

Enfin arrivé dans la hotte de pre-Noël, le livre "La cryptographie déchiffrée" de Jean-Philippe @veorq Aumasson chez Dunod. 420 pages.
Notre roadmap sera de faire une review chapitre par chapitre, au fur et à mesure du temps (le temps de les lire :)
Merci à l'auteur et Dunod !

Dans le chapitre 5 "Streamcipher", nous avons le fonctionnement de ce type de chiffrement, les méthodes annexes (avec état, compteur), on présente les concepts de feedback shift register (FSR), linear feedbak shift register (LFSR), le filtrered LFSR (et les types d'attaques) et..

.. le non-linear FSR (NFSR).
Nous avons une présentation de l'algo Grain-128a utilisant un NFSR 128b et LFSR 128b; algo sûr utilisé dans l'embed (entre autres), l'algo A5/1, utilisé dans les telcoms 2G et bien entendu une partie des attaques possibles sur cet algo cassé depuis

on y découvre l'attaque "subtile" (avec guess-and-dertermine) et les attaques brutales.
Nous avons également une description du RC4, son fonctionnement et son utilisation dans le WEP (WiFi) et TLS... et évidemment aussi les attaques dessus.

Et on fini le chapitre par l'algo Salsa20, un streamcipher avec compteur (utilisant une clef, un nonce et un compteur), la fonction "quarter-round" et les transformations d'état. Et bien entendu, même si Salsa20 est sûr, il existe des attaques théoriques expliquées ici.

Et pour compléter, une brève sur l'algo proprio faible satellitaire GMR-1 et GMR-2. A noter que Chacha est un dérivé de Salsa20 et son implication dans l'algo de hash BLAKE (de l'auteur lui-même)

Intéressant, dans le chapitre 6, les fonctions de hashage, l'auteur nous donne un exemple d'implémentation SHA3 en C en une vingtaine de ligne : (alors, depuis le code source sur le git a augmenté :)github.com/mjosaarinen/ti…

Chap6 "Les fonctions de hachage", nous avons le descriptif global de ce genre de fonction, la notion de "préimage", les collisions avec des exemples d'attaques (naïve, rho, ...). On rentre dans le concret avec le hachage basé sur la compression "Merkle-Damgard", utilisé notamment

dans MD4, MD5, SHA1, SHA2, RIPEMD, Whirlpool, ... on nous explique également comment se construit le padding dans ce cas de figure (super utile, on était pas au courant), des méthodes pour trouver des collisions et même multicollisions: Un descriptif de la méthode Davies-Meyer

et des fonctions "sponge". Le tout agrément de schéma pour mieux comprendre. On a un long passage sur la famille des SHA avec bien évidemment SHA1, et du pseudocode sur comment-que-c'est-gaulé-à-l'intérieur

On va pas mentir, ça pique les neurones à ce moment-là :) et un petit passage sur l'attaque sur SHA1. Puis viens SHA2 (SHA256, SHA224, SHA512) et les différences entre chaque. L'auteur indique qu'à l'heure de l'écriture, il n'existe aucune attaque sur SHA2, même théorique.

Bien évidemment, on passage à SHA3 qui est le successeur de SHA3, dont l'auteur a participé en tant que finalistes avec BLAKE. C'est l'algo Keccak qui a été retenu pour "sa conception élégante, marge de sécurité et bonnes performances, efficacité implem hardware" selon le NIST

L'auteur nous donne donc une explication de SHA3 (aka Keccak) et de ses petits frères SHAKE(128/256) en donnant le code source d'origine de tiny_sha3 (voir au-dessus) qui fait vraiment une vingtaine de lignes, avec une descriptif bloc par bloc d'explications.

L'auteur ne pouvait pas passer outre son (co-)bébé: BLAKE2 et BLAKE3 qui, dixit l'auteur, est performant sur la rapidité (parallélisation, instructions, etc..) et pouvant bouffer et hacher jusqu'à 2Go par sec de données.
BLAKE a été intégré au sein du kernel Linux.

Pour en savoir plus sur BLAKE:
- blake2.net
- github.com/torvalds/linux…
- fr.linuxadictos.com/blake3-une-fon… (en français)

Et on finit ce chapitre sur quelques types d'attaques sur les hash.
Ce chapitre intègre pas mal de codes ou pseudocodes assez complexes, vous allez y perdre un oeil :)

On passe au chapitre 7 "Le hachage à clé". Cette méthode permet d'avoir un hash à l'aide d'un clé et permettant l'authentification et l'intégrité. On fait un petit passage sur MAC (Message Auth Codes) et ses possibles attaques, puis de son petit cousin PRF (pseudorandom function)

Et d'expliquer pourquoi une PRF est plus fort qu'un MAC (et qu'on peut avoir un MAC avec une PRF mais pas l'inverse). Et une explication des différentes possibilités de construction (comme préfixe/suffixe secret), le fameux HMAC, le nouveau CMAC (et son parent CBC-MAC) et..

et bien entendu pour chacun d'entre eux, les différentes méthodes d'attaques ou leurs faiblesses. Nous avons un long passage sur l'algo Poly1305 et son petit frère Poly1305-AES qui utilise... AES :-D
L'auteur évoque également son bébé SipHash pour les petites cryptos.

Et à la fin du chapitre, on évoquera une attaque "timing attack" où il faut bien implémenter ses algos (ou ses auths) sinon on peut déterminer certaines informations en étudiant le temps qu'une fonction crypto prend pour chiffrer/vérifier des données. Un exemple, vous avez une

fonction qui fait un check auth, le truc classique c'est à un moment de comparer le hash original et le hash calculé et donc de le faire caractère par caractère et donc de fail dès que a[x] != b[x], et bien avec cette erreur, un attaquant peut déterminer à quel moment ça foire

Pour le HMAC, je connaissais un peu pour l'avoir étudié, décortiqué et réimplémenté en C et Python pour un projet, avec petite doc explicative, cf img illustration de cette dernière :

Chapitre très intéressant car il permet de comprendre assez facilement le hash avec clef, méthode qui peut être utilisé dans un tas de projet. Comme d'habitude, quelques schémas et du pseudo-maths pour comprendre et quelques codes sources en C et Python

Ah oui, petit oubli, le SipHash est utilisé (entre autres) dans Rust, OpenBSD, Bitcoin, et également dans le kernel Linux ()docs.kernel.org/security/sipha…

eBACS: ECRYPT Benchmarking of Cryptographic Systems: bench.cr.yp.to

Le temple de la crypto, notamment sur des algos à permutation: keccak.team

On passe au chapitre 8 "Chiffrement authentifié" avec des exemples d'auth avec MAC avec les grands principes encrypted-and-mac, MAC-then-encrypted et encrypt-then-MAC.
Le 1er est le fait de produire encryption et MAC parallèlement, le second, le MAC est d'abord généré puis

intégré dans l'encryption. Et le 3eme, l'encryption est déjà effectué et le MAC généré sur le produit de l'encryption. Le 3eme est bien évidemment plus robuste car si le MAC est erroné, on peut écarter la procédure de decryption directement. Alors que pour le 2nd, il faut d'abord

déchiffrer pour avoir le MAC, vérifier que le MAC est bien valide et soit accepter le plaintext, soit le rejeter (long, couteux...)

Un cours passage sur l'AEAD, le chiffrement authentifié avec données associées, cela permet d'ajouter des données non-chiffrés dans tout le bordel, utile si on veut avoir un header non-chiffré (pour du traitement) mais que l'auth prenne en compte cette partie quand même.

Une description de l'algo AES-GCM, utilisé notamment dans IPsec, TLS1.3. AES-GCM est perfectible si on a des répétitions de nonce (utilisé à la base de l'algo). Un passage sur l'algo quasi inconnu du plus grand nombre OCB, plus performant que pas mal d'algo mais a été...

.. proprio (sous licence) à sa naissance (2001), et donc "out". Il n'a été libéré que récemment (en 2021 !). Il est plus performant sur certains aspects, que ce soit en sécu ou en perf brute.

Un petit passage sur "Synthetic IV" (SIV), son plus gros défaut : ne pas être streamable (tout comme sa petite évolution GCM-SIV)

Et enfin, nous concluons la partie algo de ce chapitre par le "chiffrement basé sur une permutation", dont vous trouverez une masse d'infos à l'addresse .keccak.team

Bien entendu, la fin de ce chapitre se termine toujours par quelques faiblesses sur certains algos, dont notamment AES-CGM avec des clefs de hachage faibles ou des tags trop courts.

C'est sur ce chapitre qui se termine la cryptographie symétrique:
- blockciphers,
- streamciphers,
- fonctions hashs,
- fonctions pseudo-aléatoires,
- MAC,
- chiffrement authentifié.
On passe dans les prochains chapitres sur la cryptographie asymétrique !

Le chapitre 9 "Les problèmes difficiles" est un chapitre... avec des problèmes difficiles à comprendre et aussi difficile à résumer :-D
On va dire qu'on est entre les bases mathématiques, la philosophie de la mathématique et les définitions des casses têtes mathématiques.

A la fin, vous saurez pourquoi NP, P et NP-complet, les problèmes de factorisation, un peu de logarithme discret.
Ce chapitre sert surtout de préambule pour les chapitres suivants, dont le chapitre 10... RSA !
(ps: donnez-nous de l'aspirine svp)

Le chapitre 10, "RSA", le chapitre le plus important jusqu'à maintenant, il décrit les mécanismes derrière avec un peu d'explication pseudo-mathématique (dans le sens où il a été simplifié pour la compréhension) et le principe de la permutation à trappe !

On a le droit à une explication très claire et simple sur comment générer des clefs RSA avec - en quelques lignes SageMath - une description de toutes les étapes de façon limpide de "comment qu'on fait de la magie". On y apprend notamment le pourquoi de RSA-OAEP et RSA-PSS

J'ai beau avoir étudié aussi RSA-OAEP pour un projet/doc, j'ai appris des tas de choses.

Et du pourquoi on utilise RSA-OAEP pour du chiffrement et RSA-PSS ou RSA-FDH pour la signature; Une explication du fonctionnement interne des 3 modes; Et "qu'est-ce que "textbook RSA" (que j'aurais surnommé "raw RSA" car c'est la forme brute du RSA, à ne pas utiliser comme cela:)

Une description de l'algorithme "square-and-multiply" pour l'exponentiation; sur l'implémentation RSA et pourquoi il ne faut pas faire soit même (variante de "don't roll your own crypto" mais en implem: basez-vous sur des implems déjà effectuées ET validées par la commu crypto)

On a une explication claire et limpide de pourquoi e = 65.537 qu'on trouve dans nos certificats RSA et pourquoi on a tous le même "e" :)
Et enfin, nous avons deux types d'attaques sur deux implems RSA et un paragraphe pour aller plus loin sur les attaques.

Ce chapitre est génial, il apporte pleins d'informations sur des questions qu'on peut se poser sur RSA (ou des trucs qu'on a vu mais pas compris) en très peu de page (une 20ène). J'ai appris pas mal de chose alors que j'avais un peu tâté du RSA interne.

Il y a quelques passages tendaxes car on fait un peu de math plus tendus et quelques notions de maths plus élevés (il faudra avoir un petit moteur de recherche pour certains mots-clefs :)

Passons maintenant au chapitre suivant qui se porte sur "Diffie-Hellman !

Grâce à ce livre, en deux-trois lignes et un schéma simplifié, j'ai capté indirectement comment marchait les eSIM (et comment si un opérateur (ou le sim maker) se faisait hack en profondeur, ça serait la merde totale)

ah bah confirmation deux paragraphes plus loin... "(...) si K est compromis, par exemple à partir de la base de données d'un opérateur (...)"

Chapitre 11 "Diffie-Hellman", c'est un protocole crypto asymétrique proposé/inventé un an avant RSA. (à noter que les services anglais avaient aussi conçu une métho algo asymétrique à la même période mais classée secret pendant des décennies)

Dans ce chapitre, on verra les calculs nécessaires pour du DH anonyme (sans auth) et avec authentification (avec sign(pkey) etc...); On a même le droit à un exemple de key-exchange sans DH avec seulement des clefs privés (utilisé dans les telcoms 4G et 5G).

Un listing des différents modèles d'attaques, comme le MITM, dataleak, corruption data; et de l'autres les grands principes (auth, keyctrl, forward secrecy, KCI); Comme vu auparavant, nous aurons une explication entre Diffie-Hellman anonyme et authentifié (le plus courant ?)

On a même le droit à l'explication d'un algo inconnu : "MQV"
Et pourquoi inconnu ? comme tous les autres cas qu'on a vu dans ce thread, c'est soit il a été cassé dès sa publication (donc mort né) soit... l'algo a été protégé (secret defense & co) soit breveté. Pour MQV: brevet...

(notons tout de même que MQV a eu droit au deux : secret + brevets... pas de bol, petit gars...)

Passons maintenant à un nouveau type de cryptographie : Les courbes elliptiques !

SafeCurves : choosing safe curves for elliptic-curve cryptography: safecurves.cr.yp.to

Dans le chapitre 12 "Courbes Elliptiques", vous allez avoir des crises d'epilepsies *krkrkrk déso*

Les ECC sont vraiment à part, on ne saurait même pas résumer comme cela, c'est un principe "relativement" jeune (quand même 1985, et première implem openssl en 2005 et openssh en 2011). On peut utiliser Diffie-Hellman même sur des courbes elliptiques (ECDH), on peut

signer (ECDSA pour Elliptic Curve Digital Signature Algorithm), on a aussi EdDSA (pour Edwards-curve DSA) qui a l'avantage de ne pas s'appuyer sur un PRNG, et son petit frère Ed25519 (qui utilise une Twisted Edwards curve)

Contrairement à RSA où on peut insérer 4000 bits de plaintext pour chiffrement, les courbes elliptiques ne peuvent le faire que sur 100 bits, mais y'a un solution de contournement : ECIES (integrated encryption scheme); Enfin, ils existent plusieurs courbes (NIST, Curve25519,...)

A noter que l'ANSSI a développée sa propre courbe mais avec des constances d'origine inconnue (on ne sait pas pourquoi ils ont choisis ces constances, ce qui les rends donc suspectes).
Et bien entendu, fin de chapitre avec quelques types d'attaques sur les ECC.

Ce chapitre permet de défricher la galaxie des courbes elliptiques, qui est assez vaste. On peut dire que les ECC ont des avantages certains dont celui d'avoir des clef plus petits que le RSA avec un niveau de sécurité supérieur.

On passe au chapitre 13, le TLS : Transport Layer Security.

Le chapitre 13 TLS démarre par un historique; en gros SSL : c'est vieux et tout pourri, on est passé à TLS 1.1, puis 1.2; Et puis à force de corriger les merdes, les auteurs ont préféré tout reprendre, virer le legacy pourri et les algos pétés pour faire le TLS v1.3 !

Dans ce chapitre, on décortique le principe du TLS avec son handshake et son record, la structure d'un paquet TLS (qui est une sorte de TLV/KLV), les mesures de sécurité apportés à TLSv1.3; des explications détaillées sur comment marche le handshake, ses paramètres et ses options

Les différents algos gardés dans cette version (et ceux éjectés), des protections (comme le downgrade), le handshake en une fois, des reprises de session, l'authentification, le forward secrecy. On passera également sur les problèmes éventuels de la v1.3;

Il y a même une partie sur les bugs d'implémentations TLS, avec un exemple parlant : Heartbleed avec une explication claire et limpide sur la faille.

A partir de là, on passe aux deux derniers chapitres qui sont en rupture avec le reste. Et pour cause, on va causer "Quantique et Post-Quantique" dans le chapitre 14 !
Préparez vos intrications !

Dans le chapitre "Quantique", l'auteur nous explique le principe de l'ordinateur et le principe des qbits (amplitudes, toussa) et quelques notations quantiques quand vous voulez lire des équations mathématiques sur quantique et de l'appliquer sur des concepts informatiques.

On y voit des concepts purs à ce domaines comme les portes quantiques dont celle de Hadamard. Et bien évidemment, on évoquera les accélérations quantiques. Non, ce n'est pas une méthode vue dans Fast & Furious, mais ce sont des méthodes ou algorithmes pour computer plus vite

On y expose la menace de l'algo de Shor qui peut détruire toute crypto asym. et l'algorithme Grover qui s'attaque sur la crypto sym. On vous laissera le soin de voir dans le livre qui gagne entre crypto asym et sym dans l'aventure du post-quantique :)

On y voit également des astuces pour protéger les algos actuels pour du post-quantique, et des concepts et d'algos pour du véritable post-quantique. Le plus drôle étant qu'un des algos pourrait s'appeler "c'est dans les vieux pots qu'on fait la meilleure soupe" ;-)

Le livre fait état de la différence entre chiffrement/signature dans un monde où l'ordinateur quantique arrive enfin (à l'heure actuelle, c'est pas le cas, les procédés étant très complexes).
Et enfin, on a le droit à la liste des algos post-quantiques sélectionnées par le NIST

Aux dernières nouvelles, les algos sélectionnées sont CRYSTALS-Kyber & Dilithium, Falcon, SPHINCS+, BIKE, McEliece et HQC et un nouveau tour est en cours avec une sélection d'une 50ène de nouveaux algos (en cours d'études). Tous se basent sur de "nouveaux" concepts cryptos.

On passe maintenant au dernier chapitre et le préféré des investisseurs pressés à têtes de singes : la cryptographie dans la cryptomonnaies.
Planquez vos NFT !

Le dernier chapitre, celui de la cryptographie dans la cryptomonnaie.
Sur le coup, j'y suis rentré un peu en mode "meh"
Et en fait, le chapitre est extrèmement intéressant; déjà parce que je pensais naïvement que les cryptomonnaies utilisaient de la cryptographie classique

Mais en fait, il y a des nouveaux algos (en tout cas que je ne connaissais pas), on y apprend des nouveaux principes algorithmiques comme pouvoir signer à plusieurs (avec des exemples sur plusieurs types d'algos); Le chapitre fait mal à la tête car y'a beaucoup de concepts

Autant pour les autres, tu peux toujours te raccrocher à ce que tu connais; là, va falloir t'accrocher sévère et tu peux ne pas tout comprendre du premier coup (même du deuxième coup, même du n coup...), le chapitre est plus long que les autres (x2).

-- Fin du livre !

Notre avis : ce livre est une excellente introduction à la cryptographie en général. Il est à la fois assez ouvert et claire pour des non-initiés et de par moment, il y a des carottages en profondeur avec des concepts mathématiques mais sans être trop "forceur" (comme on peut

voir dans d'autres bouquins ou des thèses où les auteurs blindent des pages d'équations imbitables que seuls les universitaires peuvent comprendre ... et encore..)
L'auteur renvoie vers des références si on souhaite approfondir des sujets précis.

Les chapitres sont assez courts pour souffler entre chaque (20-30 pages), on a l'impression de progresser petit à petit et ne pas se prendre un énorme pavé dans la gueule à chaque chapitre.

Quoiqu'il arrive, vous apprendrez toujours quelque chose, même si vous avez des connaissances dedans.

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling