diff --git a/content/Etudiants/zz2-f5-privacy-crypto.md b/content/Etudiants/zz2-f5-privacy-crypto.md index a9442874bea37c8a7fc539c37f3255562bcd12f9..ed184ba2689bbcfb90dd16ece4a59639333f6236 100644 --- a/content/Etudiants/zz2-f5-privacy-crypto.md +++ b/content/Etudiants/zz2-f5-privacy-crypto.md @@ -13,11 +13,11 @@ Tags: cours * [tracking](slides/privacy/tracking.html) * [souveraineté](slides/privacy/sovereignty.html) * [tails](slides/privacy/tails.html) - * Crypto * [principes cryptographiques](slides/privacy/crypto.html) - * [pgp](slides/privacy/pgp.html) * [tls](slides/privacy/tls.html) + * [pgp](slides/privacy/pgp.html) + * [tls vs pgp](slides/privacy/TLSvsPGP.html) * [tor](slides/privacy/tor.html) * [bitcoin](slides/privacy/bitcoin.html) @@ -28,7 +28,10 @@ Tags: cours ## Mini projet en binôme -* donnez un manière de générer un QR-code permettant d'importer directement une clé publique PGP avec [OpenKeyChain](https://www.openkeychain.org/) +* Donnez un manière de générer un QR-code permettant d'importer directement une clé publique PGP avec [OpenKeyChain](https://www.openkeychain.org/) +* publiez votre clé PGP sur et envoyez moi l'url de votre clé +* Signez ma clé PGP isima https://fc.isima.fr/~mazenod/pages/pgp.html et envoyez là moi en pièce jointe de votre message +* Votre message devra être chiffré, signé et comporter votre clé publique en pièce jointe * Rendu le 26/03/2018 à 23h59 dernier délais diff --git a/content/slides/privacy/md/pgp.md b/content/slides/privacy/md/pgp.md index e0ff836753d02f4236a8568d4979fd53d0f373b7..c6305be87c88475c791890653052134887902498 100644 --- a/content/slides/privacy/md/pgp.md +++ b/content/slides/privacy/md/pgp.md @@ -142,6 +142,7 @@ $ gpg --list-private-keys Authentication + ### Exporter une clé GPG ```bash @@ -149,6 +150,7 @@ $ gpg --export --armor batman@batcave.com > batman.pub.asc $ gpg --export --armor 3E5AC6A0 > batman.pub.asc $ gpg --export --armor DD6A21D4 > batman.pub.asc ``` + * exportent le même certificat (celui de la clé maître) * ASCII-armor encrypted or signed output @@ -315,6 +317,16 @@ Partout * en pièce jointe ou dans le corps d'un message +## une clé PGP sur une carte de visite? + +* [asc2qr](https://github.com/4bitfocus/asc-key-to-qr-code) + * ne marche pas + +* [Putting my pgp idl ink on printed business cards](https://security.stackexchange.com/questions/70501/putting-my-pgp-id-link-on-printed-business-cards) + * [qrencode](ht1tps://doc.ubuntu-fr.org/qrcode) + * just do it! + + ### Serveurs de clé PGP * existent depuis que gpg existe @@ -367,16 +379,6 @@ Hardocre mode \o/ #### et une sous clé dédiée? -## une clé PGP sur une carte de visite? - -* [asc2qr](https://github.com/4bitfocus/asc-key-to-qr-code) - * ne marche pas - -* [Putting my pgp idl ink on printed business cards](https://security.stackexchange.com/questions/70501/putting-my-pgp-id-link-on-printed-business-cards) - * [qrencode](ht1tps://doc.ubuntu-fr.org/qrcode) - * just do it! - - ## Révocation * secret ou clé perdu @@ -384,7 +386,7 @@ Hardocre mode \o/ * l'attaquant peut * écrire en se faisant passer pour le propriétaire des clés * signer en général - * lire tout message (passé et avenir) chiffré avec la clé publique + * lire tout message (passé et à venir) chiffré avec la clé publique ## Révocation @@ -401,7 +403,7 @@ Hardocre mode \o/ <pre><code class="hljs DD6A21D4" style="font-size: 15px">$ gpg --output batman.revoke.asc --gen-revoke batman@batcave.com -sec 4096R/0DCD0D14 2017-09-04 Batman (clés à usage professionnel) <batman@batcave.com> +sec 4096R/0DCD0D14 2017-09-04 Batman (clés à usage professionnel) < batman@batcave.com > Faut-il créer un certificat de révocation pour cette clés ? (o/N) o choisissez la cause de la révocation : @@ -530,7 +532,7 @@ Automatisable via cron ``` -### Importer un clé à partir d'un serveur de clé public +### Importer une clé à partir d'un serveur de clé public ```bash gpg --keyserver pgp.mit.edu --recv-key 0EBE8000 @@ -553,7 +555,7 @@ gpg --keyserver pgp.mit.edu --recv-key 0EBE8000 Avant de signer une clé il faut vérifier qu'elle appartient bien à une personne physique * il faut * échanger la clé ou l'empreinte de la clé physiquement - * faut vérifier les papiers d'identité de la personne + * vérifier les papiers d'identité de la personne ## Fingerprint @@ -572,7 +574,7 @@ ou <pre><code class="hljs bash" style="font-size: 18px">$ gpg --edit-key robin@batcave.com gpg> fpr -pub 1024D/9E98BC16 1999-06-04 Blake (Executioner) <blake@cyb.org> +pub 1024D/9E98BC16 1999-06-04 Blake (Executioner) < blake@cyb.org > Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16 </code></pre> diff --git a/content/slides/privacy/md/tls.md b/content/slides/privacy/md/tls.md index 94ea8b248ba04d30ac6f65fcc18db00de1dca294..4baa0c33c71bf0231cbac8ac10884d3c2ed6ea69 100644 --- a/content/slides/privacy/md/tls.md +++ b/content/slides/privacy/md/tls.md @@ -417,54 +417,6 @@ Transport Layer Security * **1.2** released en Août 2008, [RFC 5246](http://www.frameip.com/rfc/rfc4366.php) -## Connexion SSL/TLS (1) - -Le serveur - - * Envoie son certificat au client - - -## Connexion SSL/TLS (2) - -Le client - - * Reçoit un certificat - * Vérifie sa validité (domaine, date, émetteur, révocation?) - * Génère une clé de chiffrement symétrique (**secret partagé**) - * Chiffre le **secret partagé** avec la clé publique du serveur - * Envoie le **secret partagé** chiffré au serveur (ClientKeyExchange) - - -## Connexion SSL/TLS (3) - -Le serveur - - * Reçoit le **secret partagé** chiffré généré par le client - * Déchiffre le **secret partagé** avec sa clé privée - -<br> - -#### La suite de la communication est chiffrée symétriquement - - -## Connexion SSL/TLS - -* Le client a authentifié le serveur - * mais le serveur n’a aucune information sur le client - * possibilité d'avoir un certificat côté client - -* Les paramètres de chiffrements - * sont négociés et « jetables » - - -## Certificats clients - -* Un client peut présenter un certificat au serveur -* Le serveur vérifie si le certificat est signé par une CA de confiance -* Le serveur peut utiliser ces informations pour authentifier l’utilisateur -* Le certificat peut être stocké dans un périphérique (e.g. [Yubikey](https://www.yubico.com/)), une carte à puce (e.g. [CPS](https://fr.wikipedia.org/wiki/Carte_de_Professionnel_de_Sant%C3%A9)), ... - - ## [Cypher suite](https://fr.wikipedia.org/wiki/Suite_cryptographique) Suite cryptographique @@ -479,7 +431,7 @@ Suite cryptographique <pre><code class="hljs bash" style="font-size: 35px">$ openssl ciphers -v</code></pre> -## ex: TLS_RSA_WITH_RC4_128_MD5 +## TLS_RSA_WITH_RC4_128_MD5 Se lit @@ -491,93 +443,112 @@ Suite cryptographique * protection de l'intégrité du canal de communication via [HMAC MD5](https://fr.wikipedia.org/wiki/Keyed-Hash_Message_Authentication_Code) -## Handshake + -[Comprendre le SSL/TLS: Partie 4 Handshake Protocol](https://blog.eleven-labs.com/fr/comprendre-le-ssltls-partie-4-handshake-protocol/) -<br> +## clienthello -(*[Déroulement des échanges ssl en détail](https://www.securiteinfo.com/cryptographie/ssl.shtml)*) +Le client +* envoie les suites cryptographiques qu'il est capable de mettre en oeuvre - +## Réponse serveur -#### Négociation de la cipher suite +Le serveur + * Si aucune suite n'est satisfaisante + * **Alert** fin de connexion + * Sinon + * **ServerHello** suite cryptographique choisie + * **ServerRandom** valeur aléatoire (publique) + * **Certificate** certificat du serveur + * **ServerHelloDone** indiquant qu'il est attente d'une réponse du client + + +#### Négociation de la suite cryptographique * Tous les serveurs web ne négocient pas les cypher suites de la même façon - * IIS prend la première suite cryptographique préférée du serveur et proposée par le client - * Apache prend la première suite proposée par le client et supportée par le serveur + * **IIS** prend la première suite cryptographique préférée du serveur et proposée par le client + * **Apache** prend la première suite proposée par le client et supportée par le serveur * permet une baisse du niveau de sécurité * *SSLHonorCipherOrder* pour sécuriser -[SSL / TLS Renegotiation Handshakes MiTM Plaintext Data Injection- medium or low -risk?](https://security.stackexchange.com/questions/63867/ssl-tls-renegotiation-handshakes-mitm-plaintext-data-injection-medium-or-low) +[SSL / TLS Renegotiation Handshakes MiTM Plaintext Data Injection- medium or low risk?](https://security.stackexchange.com/questions/63867/ssl-tls-renegotiation-handshakes-mitm-plaintext-data-injection-medium-or-low) -## Vulnérabilité TLS_RSA_WITH_RC4_128_MD5 +## Fin de négociation -* si la clé privée du serveur est récupérée - * le **secret partagé** est récupérable - * on peut obtenir les clés de session - * toutes les communications sont alors déchiffrables - * passées - * futures +Le client + * Vérifie la validité du certificat + * Génère une clé de chiffrement symétrique + * **secret partagé** ou **pre master secret** + * Chiffre le **secret partagé** avec la clé publique du serveur -## Perfect Forward Secrecy (PFS) -*Confidentialité Persistante* +## Fin de négociation -* La clé compromission d'un clé privée n'affecte pas la confidentialité des communications passées - * utilisée uniquement pour signer -* [Problème NP-complet](https://fr.wikipedia.org/wiki/Probl%C3%A8me_NP-complet) +Le client envoie au serveur + * **ClientKeyExchange** le **secret partagé** chiffré + * **ChangeCipherSpec** paramètres pour la suite cryptographique choisie + * **Finished** fin de négociation + * premier message chiffré symétriquement + * avec **secret partagé** et **ServerRandom** - +## Fin de négociation -<!-- !!!! --> -## Handshake - SSLv2 +Le serveur - + * Reçoit le **secret partagé** chiffré généré par le client + * Déchiffre le **secret partagé** avec sa clé privée + * **ChangeCipherSpec** paramètres pour la suite cryptographique choisie + * **Finished** fin de négociation -* Il n'y a pas de message **finished** - * **finished** protège l'échange en intégrité +<br /> +#### La suite de la communication est chiffrée symétriquement -## Handshake - SSLv2 - MIM - +## Connexion SSL/TLS -Note: -- attaque man in the middle permet de faire baisser la sécurité des méthodes supportés par le client ou le serveur - - pas de déchiffrement à la volée - - mais possible avec un peu de temps -- SSLv2 est aussi vulnérable parce que - - utilise MD5 dans toutes ses ciphersuites - - utilise la même clé pour protéger le flux en intégrité et en confidentialité - - pas de mécanisme de signalement de fin de connexion - - attaques par "troncature" du flux -- SSLv2 ne doit pas être utilisé -- +* Le client a authentifié le serveur + * mais le serveur n’a aucune information sur le client + * possibilité d'avoir un certificat côté client +* Les paramètres de chiffrements + * sont négociés et « jetables » -## Renégociation sécurisée -* en cas de - * rafraîchissement des clés - * à l'initiative du client ou du serveur - * en cas d'authentification du client - * authentification d'une partie protégée +## Certificats clients -le serveur initie une renégociation +* Un client peut présenter un certificat au serveur +* Le serveur vérifie si le certificat est signé par une CA de confiance +* Le serveur peut utiliser ces informations pour authentifier l’utilisateur +* Le certificat peut être stocké dans un périphérique (e.g. [Yubikey](https://www.yubico.com/)), une carte à puce (e.g. [CPS](https://fr.wikipedia.org/wiki/Carte_de_Professionnel_de_Sant%C3%A9)), ... -[<!-- .element style="width: 85%" -->](images/ssl/TLS-Renegociation.png) +## Vulnérabilité TLS_RSA_WITH_RC4_128_MD5 +* si la clé privée du serveur est récupérée + * le **secret partagé** est récupérable + * on peut obtenir les clés de session + * toutes les communications sont alors déchiffrables + * passées + * futures -<!-- .element style="width: 75%" --> -<!-- !!!! --> + +## Perfect Forward Secrecy (PFS) + +*Confidentialité Persistante* + +* La clé compromission d'un clé privée n'affecte pas la confidentialité des communications passées + * utilisée uniquement pour signer +* [Problème NP-complet](https://fr.wikipedia.org/wiki/Probl%C3%A8me_NP-complet) + + + ## Certification Authority Authorization (CAA) @@ -624,7 +595,8 @@ Note: ## Que "chiffre" https * On ne voit pas l'url dans le traffic - * mais on voit l'ip de l'hôte + * on voit l'ip de l'hôte + * on voit ventuellement les requêtes DNS * Proxy https ou VPN anonymisent complètement le traffic Note: @@ -711,7 +683,7 @@ Note: * [https://cipherli.st/](https://cipherli.st/) pour une conf sécurisée * [<i class="fa fa-warning"></i> Modifier tous les vhosts pour nginx!!](http://serverfault.com/questions/641150/nginx-cant-disable-sslv3) -* fixer le [weak Diffie-Hellmani (aka logjam Attack](https://weakdh.org/)) +* fixer le [weak Diffie-Hellman (aka logjam Attack](https://weakdh.org/)) <pre><code class="hljs bash" style="font-size: 28px"> openssl dhparam -out dhparams.pem 2048 </code></pre> * suivre les [<i class="fa fa-book"></i> recommandations de l'ANSSI](https://www.ssi.gouv.fr/agence/publication/ssltls-3-ans-plus-tard/) @@ -719,11 +691,8 @@ Note: #### A lire -* [Comprendre SSL/TLS - 1](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-1/) -* [Comprendre SSL/TLS - 2](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-2-chiffrement/) -* [Comprendre SSL/TLS - 3](https://blog.eleven-labs.com/fr/comprendre-le-ssltls-partie-3-certificats/) -* [Comprendre SSL/TLS - 4](https://blog.eleven-labs.com/fr/comprendre-le-ssltls-partie-4-handshake-protocol/) -* [Comprendre SSL/TLS - 5](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-5-record-protocol/) +* [Déroulement des échanges ssl en détail](https://www.securiteinfo.com/cryptographie/ssl.shtml) +* [Comprendre SSL/TLS - 1, 2, 3, 4, 5](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-1/) * [CaenCamp #33 : Infrastructures à clés publiques](https://www.youtube.com/watch?v=9zNAUFtw7Ac) par [Romain Tartiaire](https://romain.blogreen.org/) * [Chrome, Firefox et recherches Google : passage en force du HTTPS ](http://dareboost.developpez.com/tutoriels/securite-web/https-nouveaute-recherche-google-chrome-firefox/) -* http://www.cypherpunks.to/~peter/T2a_X509_Certs.pdf +* [http://cypherpunks.to/~peter/T2a_X509_Certs.pdf](http://www.cypherpunks.to/~peter/T2a_X509_Certs.pdf)