Skip to content
Snippets Groups Projects
Commit a27f5597 authored by mazenovi's avatar mazenovi
Browse files

enhance X509

parent 92c87c06
No related branches found
No related tags found
No related merge requests found
...@@ -2,8 +2,9 @@ ...@@ -2,8 +2,9 @@
<li><a href="privacy/sovereignty.html">sovereignty</a> ok</li> <li><a href="privacy/sovereignty.html">sovereignty</a> ok</li>
<li><a href="privacy/passwords.html">passwords</a></li> <li><a href="privacy/passwords.html">passwords</a></li>
<li><a href="privacy/tracking.html">tracking</a></li> <li><a href="privacy/tracking.html">tracking</a></li>
<li><a href="privacy/crypto.html">crypto</a></li> <li><a href="privacy/tor.html">tor</a></li>
<li><a href="privacy/tails.html">tails</a></li>
<li><a href="privacy/crypto.html">crypto</a>ok</li>
<li><a href="privacy/ssl.html">ssl</a></li> <li><a href="privacy/ssl.html">ssl</a></li>
<li><a href="privacy/pgp.html">pgp</a></li> <li><a href="privacy/pgp.html">pgp</a></li>
<li><a href="privacy/tor.html">tor</a></li>
<li><a href="privacy/bitcoin.html">bitcoin</a></li> <li><a href="privacy/bitcoin.html">bitcoin</a></li>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>TLS VS GPG</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/TLSvsGPG.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
### X.509
* Certificat créé par la CA
* 1 seule signature : celle de la CA
* Chiffre le tuyau (TLS/SSL)
* Confiance centralisée
* Confiance distribuée
* Forêt d’arbres de confiance
### PGP
* Certificat créé par l’utilisateur
* Plusieurs signatures
* Chiffre les messages
* Graph orienté de confiance
X.509 centralise
PGP distribue
...@@ -134,8 +134,8 @@ ...@@ -134,8 +134,8 @@
## Chiffrement symétrique ## Chiffrement symétrique
* Dit **à clé secrète**, **à clé privée**, ou encore **à secret partagé** * Dit **à clé secrète**, **à clé privée**, ou encore **à secret partagé**
* la clé permet de chiffrer **et** de déchiffrer * le secret permet de chiffrer **et** de déchiffrer
* plus la clé est **grosse** plus il est difficile de la deviner * plus le secret est **long** plus il est difficile de le deviner
* <i class="fa fa-thumbs-o-up"></i> peu gourmand en calcul * <i class="fa fa-thumbs-o-up"></i> peu gourmand en calcul
* <i class="fa fa-thumbs-o-down"></i> la clé doit être partagée par l'émetteur et le(s) récepteur(s) * <i class="fa fa-thumbs-o-down"></i> la clé doit être partagée par l'émetteur et le(s) récepteur(s)
...@@ -147,57 +147,60 @@ ...@@ -147,57 +147,60 @@
* <i class="fa fa-thumbs-up"></i> robustes * <i class="fa fa-thumbs-up"></i> robustes
* Blowfish, AES, Twofish * Blowfish, AES, Twofish
![bâton de plutarque](images/crypto/scytale.png) ![Bâton de plutarque](images/crypto/scytale.png)
## problème du chiffrement pour plusieurs ## Chiffrement symétrique
### communications 2 à 2 pour n
* démultiplie le nombre de clé
* une clé par destinataire * une clé par destinataire
* pour n destiantaires
* n * (n-1) / 2 clés
* démultiplication des clés
## problème du partage de la clé secrète ## Vecteur d'intialisation
* risque d'interaction * avoir la garantie que les chiffrés sont uniques
* communiqué des messages chiffrés deux à deux * se stocke en clair
* n * (n-1) / 2 * n'est utilisable qu'avec le secret
* si on veut couvrir tous les cas * deux messages identiques chiffrés avec de **vi** différents auront des chiffrés différents
* chiffré pour un groupe de 3 4
* démultiplication des clés
* non adaptée
Note: ```
* https://www.youtube.com/watch?v=9zNAUFtw7Ac 14:30 $crypt = openssl_encrypt("all in clear", "aes128", "secret");
* https://romain.blogreen.org/files/2017-10-31-pki.pdf slide 15 ```
<pre><code class="hljs bash"" style="font-size: 16px">PHP Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in /data/htdocs/blog.limos.fr/tmp.php on line 4
Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in /data/htdocs/blog.limos.fr/tmp.php on line 4</code></pre>
## vecteur d'intialisation ## Vecteur d'intialisation
https://stackoverflow.com/questions/11821195/use-of-initialization-vector-in-openssl-encrypt
* avoir la garanti que les chiffrés sont uniques ### Right way
* se stocke en clair
* n'est utilisable qu'avec le secret
* mais deux messages identiques chiffrés avec de vi différent auront des chiffré différents
<?php <pre><code class="hljs bash"" style="font-size: 18px">$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes128"));
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes128")); $crypt = openssl_encrypt("all in clear", "aes128", "secret", true, $iv);
$crypt = openssl_encrypt("all in clear", "aes128", "secret", null, $iv); $clear = openssl_decrypt($crypt, "aes128", "secret", true , $iv);
$crypt = openssl_encrypt("all in clear", "aes128", "secret"); </code></pre>
echo $crypt."\n";
$clear = openssl_decrypt($crypt, "aes128", "secret", null , $iv); note:
$clear = openssl_decrypt($crypt, "aes128", "secret"); - https://stackoverflow.com/questions/11821195/use-of-initialization-vector-in-openssl-encrypt
echo $clear."\n";
## Chiffrement asymétrique ## Chiffrement asymétrique
* Dit aussi à "clé publique" * Dit aussi à **clé publique**
* une clé privée * une clé privée
* une clé public * une clé publique
* un message chiffré avec une clé publique sera déchiffrable avec la clé privée associée * un message chiffré avec une clé publique sera déchiffrable avec la clé privée associée
* un message chiffré avec une clé privé sera déchiffrable avec la clé publique associée * un message chiffré avec une clé privé sera déchiffrable avec la clé publique associée
* plus complexe d'un simple secret à transmettre
## Chiffrement asymétrique
* la clé publique doit être connue de l'expéditeur
* plus complexe d'un simple secret à transmettre
* demande plus de ressources * demande plus de ressources
* <i class="fa fa-thumbs-o-down"></i> gourmand en calcul * <i class="fa fa-thumbs-o-down"></i> gourmand en calcul
...@@ -209,135 +212,115 @@ echo $clear."\n"; ...@@ -209,135 +212,115 @@ echo $clear."\n";
## distribution des clés? ## distribution des clés?
* la clé publique est diffusable n'importe où * la **clé publique** est diffusable n'importe où
* sur une page web
* une carte de visite
* un pièce jointe d'un message en clair
* dans un chat
* sur un serveur de clés * sur un serveur de clés
* sur une page web
* via une carte de visite (QrCode)
* via une pièce jointe
* via un chat
* la clé privée est à protéger à tout prix * la **clé privée** est à protéger à tout prix
* quiconque la possède peut se l'utiliser en se faisant passer pour vous * quiconque la possède peut se l'utiliser en se faisant passer pour vous
## Dans la vraie vie #### En pratique
* Alice et Bob se sont chacun générées un couple de clé publique / clé privée * Alice et Bob se ont chacun généré un couple **clé publique** / **clé privée**
* ils se sont échangés lors clés publiques * ils se sont **échangés** leur **clé publique** respective
* Alice a en sa possession * Alice a en sa possession
* la clé publique d'Alice * sa **clé publique**, sa **clé privée** et la **clé publique** de Bob
* la clé privée d'Alice
* la clé publique de Bob
* Bob a en sa possession * Bob a en sa possession
* la clé publique de Bob * sa **clé publique**, sa **clé privée** et la **clé publique** d'Alice
* la clé privée de Bob
* la clé publique d'Alice
## Chiffrement asymétrique
## Signature ## Signature
* Alice chiffre un message avec sa clé privée et l'envoi à Bob * Alice chiffre un message avec sa clé privée et l'envoi à Bob
* Bob peut déchiffrer le message avec la clé publique d'Alice * Bob peut déchiffrer le message avec la clé publique d'Alice
* Bob est alors sûr que le message a été émis avec la clé privée d'Alice * Bob est alors sûr que le message a été émis avec la clé privée d'Alice
* **Autentification de l'origine** * **Autentification de l'origine**
<div style="text-align: center;">
<img src="images/TLS_Auth.gif" width="50%" />
</div>
* Deux solutions pour cette vérification
* Alice envoie le message en double
* une fois en claire
* une fois chiffré avec sa clé privée
* Bob peut comparer la similarité du clair et du message déchiffré
* Alice envoie
* le message chiffré
* un hashé chiffré du message
* Bob peut vérifier
* déchiffre le message avec la clé publique d'Alice
* calcul le hashé du message en clair
* déchiffré le hashé chiffré envoyé à Alice
* comparer la simmilarité du hashé déchiffré et du hashé calculé
* Bob à vérifier non seulement l'authenticité du message mais aussi son **intégrité** #### Signature en pratique
### Les clés de Bob n'ont jamais été utilisée * Alice envoie
* le message chiffré
* un hashé chiffré du message
* Bob peut vérifier en
* déchiffrant le message avec la clé publique d'Alice
* calculant le hashé du message en clair
* déchiffrant le hashé chiffré envoyé par Alice
* comparant le hashé calculé et le hashé déchiffré
## Chiffrement asymétrique
## Chiffrement
* Bob veut maintenant écrire à Alice ## Signature en pratique
* qu'il sait être la vraie Alice
* en tout cas celle qui possède la clé privée associée à la clé publique qu'Alice lui a donné
* Bob chiffre le message avec la clé publique d'Alice
* Bob envoie le texte chiffré
* Alice déchiffre le message grâce à sa clé privée.
* garanti la **confidentialité** * Bob a pu vérifier
* la clé à l'origine du message **autentification de l'origine**
* l'**intégrité** du message
**autentification de l'origine** + **intégrité**
=
**non répudiation**
#### Les clés de Bob n'ont jamais été utilisées
<div style="text-align: center;">
<img src="images/Asymmetric_cryptography_step_1.svg.png" width="60%" />
</div>
## Chiffrement ## Chiffrement
* Bob veut maintenant écrire à Alice * Bob veut maintenant écrire à Alice
* qu'il sait être la vraie Alice * qu'il sait être la vraie Alice
* en tout cas celle qui possède la cl privée associée à la clé publique qu'Alice lui a donné * en tout cas celle qui possède la clé privée associée à la clé publique qu'Alice lui a donné
<div style="text-align: center;">
<img src="images/Asymmetric_cryptography_step_2.svg.png" width="60%" />
</div>
* Bob chiffre le message avec la clé publique d'Alice * Bob chiffre le message avec la clé publique d'Alice
* Bob envoie le texte chiffré * Bob envoie le texte chiffré
* Alice déchiffre le message grâce à sa clé privée. * Alice déchiffre le message grâce à sa clé privée.
* garanti la **confidentialité** * garanti la **confidentialité**
<div style="text-align: center;">
<img src="images/Asymmetric_cryptography_step_1.svg.png" width="60%" />
</div>
## Eve ## Enjeu de la clé privée
* a récupéré la clé de Bob mal protégée * Eve a récupéré la **clé privée** de Bob (mal protégée)
* elle peut envoyer des messages chiffrés à Alice * elle peut envoyer des messages chiffrés à Alice, et à toutte sa toile de confiance
* en se faisant passer pour lui * en se faisant passer pour Bob
* elle peut lire tous les messages chiffrés avec la **clé publique** de Bob
## Bonne pratique ## Bonne pratique
* toujours signer et chiffrer ses messages * toujours signer et chiffrer ses messages
* il faut être certain de l'identité du possesseur de la clé * toujours être certain de l'identité du possesseur de la clé
* chiffrofête (cryptoparty) * échange de clé IRL
* bien protéger sa clié privée * bien protéger sa clé privée
* passphrase * stockée en sécurité
* protégée par un mot de passe fort
## Certificat ## Certificat
* clé publique * clé publique
* des informations * attributs
* une signature * nom
* mail
## Synthèse X.509 vs. PGP * date d'expiration
### X.509 * algorithmes
* Certificat créé par la CA * ...
* 1 seule signature : celle de la CA * au moins une signature
* Chiffre le tuyau (TLS/SSL)
* Confiance centralisée
* Confiance distribuée ## Trousseau
* Forêt d’arbres de confiance
### PGP * ensemble de clés
* Certificat créé par l’utilisateur * couples clé publique / clé privée
* Plusieurs signatures * fonctions
* Chiffre les messages * signature
* Graph orienté de confiance * chiffrement
* création de certificat
X.509 centralise * authentification
PGP distribue * clés publiques
* importés (contacts)
...@@ -49,3 +49,5 @@ On est en moyenne à 5.5 clés d’un autre utilisateur de PGP ...@@ -49,3 +49,5 @@ On est en moyenne à 5.5 clés d’un autre utilisateur de PGP
* peut aussi être fait manuellement * peut aussi être fait manuellement
## AndroidPG ## AndroidPG
## enigmail
# SSL / TLS # X.509 / TLS
# <i class="fa fa-user-secret" aria-hidden="true"></i> # <i class="fa fa-user-secret" aria-hidden="true"></i>
## X.509 / RSA
* utilisé par openssl de manière transaprent ## [X.509](https://fr.wikipedia.org/wiki/X.509)
* openssl genrsa -out KEY * 1988 par l'UIT (agence de l'ONU le développement spécialisé dans les TIC )
* contient la clé privée ET la clé publique * norme Pour
* les certificats à clé publique
* les listes de révocation de certificats
* les attributs de certificats
* un algorithme de validation du chemin de certification
--copier le contenu du fichier
* openssl rsa -in KEY -pubout ## [X.509](https://fr.wikipedia.org/wiki/X.509)
* permet d'extraire la partie publique uniquement
--copier le contenu de l'output * repose sur un système hiérarchique d'autorités de certification (AC)
* une AC attribue un certificat liant
* une clé publique
* un nom distinctif (Distinguished Name -DN)
* un nom alertnatif (Alternative Name - AN)
* mail
* enregistrement DNS
## X.509 information dans un certificat X.509 ## [X.509](https://fr.wikipedia.org/wiki/X.509) Anatomie
Certificats X.509
Attributs
* Version * Version
* Serial * Serial
* **Subject** qui est identifié par ce certificat * Algorithme de signature du certificat
* **Subject** DN identifié par le certificat
* **Issuer** le signataire * **Issuer** le signataire
* **Public Key** * **Public Key**
* **Not Before** date de début de validité * **Not Before** date de début de validité
...@@ -31,8 +37,11 @@ Attributs ...@@ -31,8 +37,11 @@ Attributs
* Extensions * Extensions
* Key Usage * Key Usage
* Subject Key Identifier * Subject Key Identifier
* Signature des informations ci-dessus par l'autorité de certification
* hashé de tous les attributs
* signé avec la clé privée de l'AC
* signé avec la clé privée d'une AC de plus haut niveau
Le tout signé part le signataire?
## X.509 Subject ## X.509 Subject
...@@ -60,6 +69,21 @@ BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow ...@@ -60,6 +69,21 @@ BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow
openssl x509 -text -noout -in CERTIFICATE openssl x509 -text -noout -in CERTIFICATE
## X.509 / RSA
* utilisé par openssl de manière transparente
* openssl genrsa -out KEY
* contient la clé privée ET la clé publique
--copier le contenu du fichier
* openssl rsa -in KEY -pubout
* permet d'extraire la partie publique uniquement
--copier le contenu de l'output
## X.509 vérification de la signature ## X.509 vérification de la signature
openssl verify -CAfile CERTIFICATE CERTIFICATE openssl verify -CAfile CERTIFICATE CERTIFICATE
...@@ -91,6 +115,12 @@ Certificat auto-signé ...@@ -91,6 +115,12 @@ Certificat auto-signé
CACERT n'est pas une autorité de certification intégré aux navigateurs CACERT n'est pas une autorité de certification intégré aux navigateurs
## Root CA
https://fr.wikipedia.org/wiki/Certificat_racine
es certificats racines sont des clés publiques non signées, ou auto-signées, dans lesquelles repose la confiance. Les logiciels, comme les navigateurs web ou les clients de messagerie détiennent des certificats racines de nombreuses autorités de certification commerciales ou gouvernementales. Quand un navigateur ouvre une connexion sécurisée (TLS/SSL) vers un site possédant un certificat émis par une autorité connue, il considère le site comme sûr dans la mesure où le chemin de certification est validé. Le passage en mode sécurisé est alors transparent.
## X.509 Demande de certificat Certificate Sign Request (CSR) ## X.509 Demande de certificat Certificate Sign Request (CSR)
openssl req -new -subj /CN=example.com -key KEY -out CSR openssl req -new -subj /CN=example.com -key KEY -out CSR
...@@ -288,4 +318,4 @@ On peut se passer des CA ...@@ -288,4 +318,4 @@ On peut se passer des CA
* exemple aussi avec github * exemple aussi avec github
## reconnaître les algos ## let's encrypt
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment