Commit a27f5597 authored by mazenovi's avatar mazenovi
Browse files

enhance X509

parent 92c87c06
......@@ -2,8 +2,9 @@
<li><a href="privacy/sovereignty.html">sovereignty</a> ok</li>
<li><a href="privacy/passwords.html">passwords</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/pgp.html">pgp</a></li>
<li><a href="privacy/tor.html">tor</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 @@
## Chiffrement symétrique
* Dit **à clé secrète**, **à clé privée**, ou encore **à secret partagé**
* la clé permet de chiffrer **et** de déchiffrer
* plus la clé est **grosse** plus il est difficile de la deviner
* le secret permet de chiffrer **et** de déchiffrer
* 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-down"></i> la clé doit être partagée par l'émetteur et le(s) récepteur(s)
......@@ -147,57 +147,60 @@
* <i class="fa fa-thumbs-up"></i> robustes
* 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
* 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
* communiqué des messages chiffrés deux à deux
* n * (n-1) / 2
* si on veut couvrir tous les cas
* chiffré pour un groupe de 3 4
* démultiplication des clés
* non adaptée
* avoir la garantie que les chiffrés sont uniques
* se stocke en clair
* n'est utilisable qu'avec le secret
* deux messages identiques chiffrés avec de **vi** différents auront des chiffrés différents
Note:
* https://www.youtube.com/watch?v=9zNAUFtw7Ac 14:30
* https://romain.blogreen.org/files/2017-10-31-pki.pdf slide 15
```
$crypt = openssl_encrypt("all in clear", "aes128", "secret");
```
<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
https://stackoverflow.com/questions/11821195/use-of-initialization-vector-in-openssl-encrypt
* avoir la garanti que les chiffrés sont uniques
* 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
## Vecteur d'intialisation
### Right way
<?php
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes128"));
$crypt = openssl_encrypt("all in clear", "aes128", "secret", null, $iv);
$crypt = openssl_encrypt("all in clear", "aes128", "secret");
echo $crypt."\n";
$clear = openssl_decrypt($crypt, "aes128", "secret", null , $iv);
$clear = openssl_decrypt($crypt, "aes128", "secret");
echo $clear."\n";
<pre><code class="hljs bash"" style="font-size: 18px">$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes128"));
$crypt = openssl_encrypt("all in clear", "aes128", "secret", true, $iv);
$clear = openssl_decrypt($crypt, "aes128", "secret", true , $iv);
</code></pre>
note:
- https://stackoverflow.com/questions/11821195/use-of-initialization-vector-in-openssl-encrypt
## Chiffrement asymétrique
* Dit aussi à "clé publique"
* Dit aussi à **clé publique**
* 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é 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
* <i class="fa fa-thumbs-o-down"></i> gourmand en calcul
......@@ -209,135 +212,115 @@ echo $clear."\n";
## distribution des clés?
* 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
* la **clé publique** est diffusable n'importe où
* 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
## Dans la vraie vie
#### En pratique
* Alice et Bob se sont chacun générées un couple de clé publique / clé privée
* ils se sont échangés lors clés publiques
* Alice et Bob se ont chacun généré un couple **clé publique** / **clé privée**
* ils se sont **échangés** leur **clé publique** respective
* Alice a en sa possession
* la clé publique d'Alice
* la clé privée d'Alice
* la clé publique de Bob
* sa **clé publique**, sa **clé privée** et la **clé publique** de Bob
* Bob a en sa possession
* la clé publique de Bob
* la clé privée de Bob
* la clé publique d'Alice
* sa **clé publique**, sa **clé privée** et la **clé publique** d'Alice
## Chiffrement asymétrique
## Signature
* 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 est alors sûr que le message a été émis avec la clé privée d'Alice
* **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
* 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.
## Signature en pratique
* 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
* Bob veut maintenant écrire à 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é
<div style="text-align: center;">
<img src="images/Asymmetric_cryptography_step_2.svg.png" width="60%" />
</div>
* 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é**
<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
* elle peut envoyer des messages chiffrés à Alice
* en se faisant passer pour lui
* Eve a récupéré la **clé privée** de Bob (mal protégée)
* elle peut envoyer des messages chiffrés à Alice, et à toutte sa toile de confiance
* en se faisant passer pour Bob
* elle peut lire tous les messages chiffrés avec la **clé publique** de Bob
## Bonne pratique
* toujours signer et chiffrer ses messages
* il faut être certain de l'identité du possesseur de la clé
* chiffrofête (cryptoparty)
* bien protéger sa clié privée
* passphrase
* toujours être certain de l'identité du possesseur de la clé
* échange de clé IRL
* bien protéger sa clé privée
* stockée en sécurité
* protégée par un mot de passe fort
## Certificat
* clé publique
* des informations
* une signature
## Synthèse X.509 vs. PGP
### 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
* attributs
* nom
* mail
* date d'expiration
* algorithmes
* ...
* au moins une signature
## Trousseau
* ensemble de clés
* couples clé publique / clé privée
* fonctions
* signature
* chiffrement
* création de certificat
* authentification
* clés publiques
* importés (contacts)
......@@ -49,3 +49,5 @@ On est en moyenne à 5.5 clés d’un autre utilisateur de PGP
* peut aussi être fait manuellement
## AndroidPG
## enigmail
# SSL / TLS
# X.509 / TLS
# <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
* contient la clé privée ET la clé publique
* 1988 par l'UIT (agence de l'ONU le développement spécialisé dans les TIC )
* 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
* permet d'extraire la partie publique uniquement
## [X.509](https://fr.wikipedia.org/wiki/X.509)
--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
* Serial
* **Subject** qui est identifié par ce certificat
* Algorithme de signature du certificat
* **Subject** DN identifié par le certificat
* **Issuer** le signataire
* **Public Key**
* **Not Before** date de début de validité
......@@ -31,8 +37,11 @@ Attributs
* Extensions
* Key Usage
* 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
......@@ -60,6 +69,21 @@ BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow
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
openssl verify -CAfile CERTIFICATE CERTIFICATE
......@@ -91,6 +115,12 @@ Certificat auto-signé
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)
openssl req -new -subj /CN=example.com -key KEY -out CSR
......@@ -288,4 +318,4 @@ On peut se passer des CA
* exemple aussi avec github
## reconnaître les algos
## let's encrypt
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