Commit 6419ccac authored by mazenovi's avatar mazenovi
Browse files

enhance tls & pgp

parent e85def9d
...@@ -13,11 +13,11 @@ Tags: cours ...@@ -13,11 +13,11 @@ Tags: cours
* [tracking](slides/privacy/tracking.html) * [tracking](slides/privacy/tracking.html)
* [souveraineté](slides/privacy/sovereignty.html) * [souveraineté](slides/privacy/sovereignty.html)
* [tails](slides/privacy/tails.html) * [tails](slides/privacy/tails.html)
* Crypto * Crypto
* [principes cryptographiques](slides/privacy/crypto.html) * [principes cryptographiques](slides/privacy/crypto.html)
* [pgp](slides/privacy/pgp.html)
* [tls](slides/privacy/tls.html) * [tls](slides/privacy/tls.html)
* [pgp](slides/privacy/pgp.html)
* [tls vs pgp](slides/privacy/TLSvsPGP.html)
* [tor](slides/privacy/tor.html) * [tor](slides/privacy/tor.html)
* [bitcoin](slides/privacy/bitcoin.html) * [bitcoin](slides/privacy/bitcoin.html)
...@@ -28,7 +28,10 @@ Tags: cours ...@@ -28,7 +28,10 @@ Tags: cours
## Mini projet en binôme ## 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 * Rendu le 26/03/2018 à 23h59 dernier délais
......
...@@ -142,6 +142,7 @@ $ gpg --list-private-keys ...@@ -142,6 +142,7 @@ $ gpg --list-private-keys
Authentication Authentication
### Exporter une clé GPG ### Exporter une clé GPG
```bash ```bash
...@@ -149,6 +150,7 @@ $ gpg --export --armor batman@batcave.com > batman.pub.asc ...@@ -149,6 +150,7 @@ $ gpg --export --armor batman@batcave.com > batman.pub.asc
$ gpg --export --armor 3E5AC6A0 > batman.pub.asc $ gpg --export --armor 3E5AC6A0 > batman.pub.asc
$ gpg --export --armor DD6A21D4 > batman.pub.asc $ gpg --export --armor DD6A21D4 > batman.pub.asc
``` ```
* exportent le même certificat (celui de la clé maître) * exportent le même certificat (celui de la clé maître)
* ASCII-armor encrypted or signed output * ASCII-armor encrypted or signed output
...@@ -315,6 +317,16 @@ Partout ...@@ -315,6 +317,16 @@ Partout
* en pièce jointe ou dans le corps d'un message * 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 ### Serveurs de clé PGP
* existent depuis que gpg existe * existent depuis que gpg existe
...@@ -367,16 +379,6 @@ Hardocre mode \o/ ...@@ -367,16 +379,6 @@ Hardocre mode \o/
#### et une sous clé dédiée? #### 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 ## Révocation
* secret ou clé perdu * secret ou clé perdu
...@@ -384,7 +386,7 @@ Hardocre mode \o/ ...@@ -384,7 +386,7 @@ Hardocre mode \o/
* l'attaquant peut * l'attaquant peut
* écrire en se faisant passer pour le propriétaire des clés * écrire en se faisant passer pour le propriétaire des clés
* signer en général * 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 ## Révocation
...@@ -401,7 +403,7 @@ Hardocre mode \o/ ...@@ -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 <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 Faut-il créer un certificat de révocation pour cette clés ? (o/N) o
choisissez la cause de la révocation : choisissez la cause de la révocation :
...@@ -530,7 +532,7 @@ Automatisable via cron ...@@ -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 ```bash
gpg --keyserver pgp.mit.edu --recv-key 0EBE8000 gpg --keyserver pgp.mit.edu --recv-key 0EBE8000
...@@ -553,7 +555,7 @@ 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 Avant de signer une clé il faut vérifier qu'elle appartient bien à une personne physique
* il faut * il faut
* échanger la clé ou l'empreinte de la clé physiquement * é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 ## Fingerprint
...@@ -572,7 +574,7 @@ ou ...@@ -572,7 +574,7 @@ ou
<pre><code class="hljs bash" style="font-size: 18px">$ gpg --edit-key robin@batcave.com <pre><code class="hljs bash" style="font-size: 18px">$ gpg --edit-key robin@batcave.com
gpg> fpr 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 Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16
</code></pre> </code></pre>
......
...@@ -417,54 +417,6 @@ Transport Layer Security ...@@ -417,54 +417,6 @@ Transport Layer Security
* **1.2** released en Août 2008, [RFC 5246](http://www.frameip.com/rfc/rfc4366.php) * **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) ## [Cypher suite](https://fr.wikipedia.org/wiki/Suite_cryptographique)
Suite cryptographique Suite cryptographique
...@@ -479,7 +431,7 @@ Suite cryptographique ...@@ -479,7 +431,7 @@ Suite cryptographique
<pre><code class="hljs bash" style="font-size: 35px">$ openssl ciphers -v</code></pre> <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 Se lit
...@@ -491,93 +443,112 @@ Suite cryptographique ...@@ -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) * 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 * 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 * **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 * **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é * permet une baisse du niveau de sécurité
* *SSLHonorCipherOrder* pour sécuriser * *SSLHonorCipherOrder* pour sécuriser
[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)
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 client
* 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
* 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 Le client envoie au serveur
* utilisée uniquement pour signer
* [Problème NP-complet](https://fr.wikipedia.org/wiki/Probl%C3%A8me_NP-complet)
* **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
<!-- !!!! --> Le serveur
## Handshake - SSLv2
![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** <br />
* **finished** protège l'échange en intégrité
#### 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: * Le client a authentifié le serveur
- attaque man in the middle permet de faire baisser la sécurité des méthodes supportés par le client ou le serveur * mais le serveur n’a aucune information sur le client
- pas de déchiffrement à la volée * possibilité d'avoir un certificat côté client
- 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é --
* Les paramètres de chiffrements
* sont négociés et « jetables »
## Renégociation sécurisée
* en cas de ## Certificats clients
* 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
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) ## Certification Authority Authorization (CAA)
...@@ -624,7 +595,8 @@ Note: ...@@ -624,7 +595,8 @@ Note:
## Que "chiffre" https ## Que "chiffre" https
* On ne voit pas l'url dans le traffic * 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 * Proxy https ou VPN anonymisent complètement le traffic
Note: Note:
...@@ -711,7 +683,7 @@ Note: ...@@ -711,7 +683,7 @@ Note:
* [https://cipherli.st/](https://cipherli.st/) pour une conf sécurisée * [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) * [<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> <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/) * 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: ...@@ -719,11 +691,8 @@ Note:
#### A lire #### A lire
* [Comprendre SSL/TLS - 1](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-1/) * [Déroulement des échanges ssl en détail](https://www.securiteinfo.com/cryptographie/ssl.shtml)
* [Comprendre SSL/TLS - 2](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-2-chiffrement/) * [Comprendre SSL/TLS - 1, 2, 3, 4, 5](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-1/)
* [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/)
* [CaenCamp #33 : Infrastructures à clés publiques](https://www.youtube.com/watch?v=9zNAUFtw7Ac) par [Romain Tartiaire](https://romain.blogreen.org/) * [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/) * [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)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment