From 6419ccac2e3420655794696824122fdbfd496c5b Mon Sep 17 00:00:00 2001
From: mazenovi <vmazenod@gmail.com>
Date: Wed, 28 Feb 2018 18:01:41 +0100
Subject: [PATCH] enhance tls & pgp

---
 content/Etudiants/zz2-f5-privacy-crypto.md |   9 +-
 content/slides/privacy/md/pgp.md           |  32 ++--
 content/slides/privacy/md/tls.md           | 183 +++++++++------------
 3 files changed, 99 insertions(+), 125 deletions(-)

diff --git a/content/Etudiants/zz2-f5-privacy-crypto.md b/content/Etudiants/zz2-f5-privacy-crypto.md
index a944287..ed184ba 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 e0ff836..c6305be 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 94ea8b2..4baa0c3 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
+![TLS Handshake](images/ssl/TLS-Handshake.png "SSLv2 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
 
-![TLS Handshake](images/ssl/TLS-Handshake.png "SSLv2 Handshake")
 
+## 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**
 
-![Diffie-Hellman exchange](images/ssl/diffie-hellman-exchange.png "Diffie-Hellman exchange")
 
+## Fin de négociation
 
-<!-- !!!! -->
-## Handshake - SSLv2
+Le serveur
 
-![SSLv2 Handshake](images/ssl/SSLv2-Handshake.png "SSLv2 Handshake")
+  * 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
 
-![SSLv2 Handshake](images/ssl/SSLv2-MIM-Handshake.png "SSLv2 Handshake")
+## 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)), ...
 
 
-[![TLS Renégociation](images/ssl/TLS-Renegociation.png "TLS Renégociation")<!-- .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
 
-![TLS Renégociation man in the middle](images/ssl/TLS-MIM-Renegociation.png "TLS Renégociation man in the middle")<!-- .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)
+
+
+![Diffie-Hellman exchange](images/ssl/diffie-hellman-exchange.png "Diffie-Hellman exchange")
 
 
 ## 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)
-- 
GitLab