103 lines
4.4 KiB
Markdown
103 lines
4.4 KiB
Markdown
CM Cryptographie et sécurité des communications - Notes de cours
|
|
================================================================
|
|
|
|
À la rencontre d'Alice, Bob et Ernest
|
|
=====================================
|
|
|
|
Comment permettre à Alice et Bob de communiquer de manière *sûre* sur un canal *non sûr* ? Notion centrale en sécurité/crypto : le **modèle d'attaque**.
|
|
|
|
* Alice et Bob veulent communiquer, Ernest écoute (attaque passive) ou altère (attaque active) les échanges
|
|
* Le medium non sûr :
|
|
* Un messager qui peut se faire capturer
|
|
* Un réseau de câbles téléphoniques
|
|
* Internet (routage multi-saut multi-acteurs, écoute possible sur la route + par des attaquants qui arriveraient à dévier)
|
|
* Exemples de positions *MitM - Man in the Middle* :
|
|
* La DSI de l'UBS sur eduroam
|
|
* Orange sur les livebox
|
|
* Lumen sur du transatlantique
|
|
* Autre transitaire fournissant le service au serveur visé
|
|
* Attaquant sur le réseau local
|
|
* ...
|
|
* L'objectif de la crypto : communiquer de manière *sûre* sur un medium *non sûr*
|
|
* Aujourd'hui, (très) peu de services réseau sans crypto
|
|
|
|
|
|
Communiquer de manière sûre ?
|
|
=============================
|
|
|
|
1. **Confidentialité** : chiffrement
|
|
2. **Intégrité** : signature/scellement
|
|
3. **Authentification** : preuve de possession de matériel crypto
|
|
4. **Non-répudiation** : signature
|
|
|
|
|
|
La cryptographie moderne
|
|
========================
|
|
|
|
La cryptographie asymétrique :
|
|
|
|
* Chaque acteur a une paire de clés publique/privée reliées mathématiquement
|
|
* Chiffrer = utiliser la clé publique de l'interlocuteur, déchiffrer = utiliser sa propre clé privée (tout le monde peut nous parler, nous seuls pouvons comprendre)
|
|
* Signer = utiliser sa propre clé privée, vérifier = utiliser la clé publique de l'interlocuteur (nous seuls pouvons signer, tout le monde peut vérifier)
|
|
* Exemples : RSA, ECDSA
|
|
|
|
La cryptographie symétrique :
|
|
|
|
* Chaque paire d'acteurs a une clé secrète
|
|
* Cette clé secrète est utiliser pour chiffrer/déchiffrer et sceller/vérifier
|
|
* Exemple : AES, HMAC
|
|
|
|
Le hachage :
|
|
|
|
* Empreinte de taille fixe à sens unique (non inversible)
|
|
* Hachage crypto doit être robuste aux attaques (collision, pré-images)
|
|
* Exemples SHA-256, SHA3-512
|
|
|
|
Quelle taille de clé ? [KeyLength](https://www.keylength.com/)
|
|
|
|
|
|
La mise en œuvre
|
|
================
|
|
|
|
L'obtention des clés : les PKI - Public Key Infrastructure
|
|
----------------------------------------------------------
|
|
|
|
* La difficulté majeure côté usage : obtenir la bonne clé. Comment l'obtenir de manière sûre quand le medium est non sûr ?
|
|
* Le risque : parler chiffré mais pas avec le bon interlocuteur (ie, avec Ernest)
|
|
* Les PKI sont des moyens d'associer des clés publiques (donc pour crypto asymétrique) à des identifiants (nom de personne, nom DNS, ...)
|
|
* Quelques modèles :
|
|
* Centralisé CA (autorités de certification) / PKIX
|
|
* Distribué PGP
|
|
* DANE/TLSA dans DNSSEC
|
|
* Diffus style keybase.io
|
|
* L'échange direct / uniquement en out-of-band (donc pas vraiment de PKI)
|
|
* La mise en contact
|
|
|
|
|
|
La négociation : les protocoles cryptographiques
|
|
------------------------------------------------
|
|
|
|
* Pour communiquer, il faut un standard : un protocole
|
|
* Quelques protocoles cryptographiques : TLS, SSH, S/MIME, PGP, ...
|
|
* Généralement pour la mise en place d'une communication en crypto hybride :
|
|
* Échange de clés symétriques en crypto asymétrique
|
|
* Puis communication *payload* en crypto symétrique
|
|
* Exemple des suites cryptographiques TLS ("ECDHE-RSA-AES128-GCM-SHA256")
|
|
|
|
|
|
Exemple : le modèle HTTPS
|
|
-------------------------
|
|
|
|
* Objectif : un tunnel chiffré entre le client (navigateur) et le serveur
|
|
* Pour cela il nous faut :
|
|
* Un protocole : TLS
|
|
* La (bonne) clé publique du serveur : Certificat
|
|
* Un certificat = (clé publique, nom) signé par un tiers. Ici :
|
|
* clé publique = celle du serveur, il a la clé privée qui va avec
|
|
* nom = nom d'hôte DNS (par exemple www.univ-ubs.fr)
|
|
* tiers = une autorité de certification (par exemple Let's Encrypt)
|
|
* => On a bien une association entre un nom et une clé, ici certifiée par un tiers
|
|
* Le client doit valider la signature de la CA, et ainsi vérifier l'association (clé publique, nom) :
|
|
* Il lui faut donc vérifier avec la clé publique de la CA
|
|
* Les clés publiques des CA reconnues par les clients sont pré-installées dans les navigateurs, pas de magie, il faut une *ancre de confiance* dans le logiciel
|