class: center, middle, normal name: title .title[Sécurisation du courrier électronique] .author[.nolink[[Maxime Werlen](https://plus.google.com/+MaximeWerlen?rel=author")]] --- class: center, middle name: license
.small[.nolink[La présentation "
Sécurisation du courrier électronique" de
Maxime Werlen
est mis à disposition selon les termes de la
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International
.]] .small[Source :
http://maxime.werlen.fr/presentations/securite-mails.html
] ??? Prérequis : * Machine linux avec telnet, dig, openssl, gpg * Machine windows : ssh pour aller sur v_console * Thunderbird avec Enigmail ou Mutt connecté à un compte mail * GPG ou WinGpG (installation vanilla suffisante) * Une pièce d'identité avec photo A apporter : * Quelques impressions de ma clé (pour l'exo sur l'envoi d'un mail chiffré) * Ma pièce d'identité * Mon PC pour vérifier les mails et lancer la démo open_ssl --- title: why class: center, middle, inverse # :'( ??? # Pourquoi tant de haine ?!? * Découvrir les méthodes de sécurisation des protocols historisques d'internet comme HTTP, SMTP... * Exemple sur les mails (mise en place récente) * Découvrir quelques technos du web comme les DNS... * Parler un peu de crypto * Découvrir SSL/TLS/x509 * Découvrir GPG * Elargir le web-of-trust --- title: c'est quoi un mail class: center, middle, inverse # C'est quoi un mail ? ??? On en utilise tous les jours, mais sait-on vraiment ce que c'est ? --- layout: true class: left, top, normal --- # C'est quoi un mail ``` Received: from 31.121.118.45 (EHLO serveur.fr) by mta1007.mail.ukl.yahoo.com with SMTP; Fri, 21 Sep 2012 21:31:16 +0000 Received: by serveur.fr (Postfix, from userid 106) id 3DF2F15A0CD; Fri, 21 Sep 2012 23:31:16 +0200 (CEST) * From: "Thomas"
* To: david@yahoo.fr * Subject: Bonjour ! Date: Fri, 21 Sep 2012 23:31:16 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=iso-8859-1 X-Mailer: Mozilla Thunderbird Message-Id: <20120921212116.3DF2F16A0CD@serveur.fr> * Bonjour David, * Tiens-moi au courant pour la réunion. * Thomas ``` Source : [Wikipedia](http://fr.wikipedia.org/wiki/Courrier_%C3%A9lectronique) ??? Un message **textuel** en ASCII (7bits) envoyé par un **émetteur** à un **destinataire** --- # C'est quoi un mail ``` Received: from 31.121.118.45 (EHLO serveur.fr) by mta1007.mail.ukl.yahoo.com with SMTP; Fri, 21 Sep 2012 21:31:16 +0000 Received: by serveur.fr (Postfix, from userid 106) id 3DF2F15A0CD; Fri, 21 Sep 2012 23:31:16 +0200 (CEST) From: "Thomas"
To: david@yahoo.fr Subject: Bonjour ! * Date: Fri, 21 Sep 2012 23:31:16 +0200 * MIME-Version: 1.0 * Content-Transfer-Encoding: 8bit * Content-Type: text/plain; charset=iso-8859-1 X-Mailer: Mozilla Thunderbird * Message-Id: <20120921212116.3DF2F16A0CD@serveur.fr> Bonjour David, Tiens-moi au courant pour la réunion. Thomas ``` Source : [Wikipedia](http://fr.wikipedia.org/wiki/Courrier_%C3%A9lectronique) ??? Aussi des informations techniques * Type Mime du message * Identifiants * Dates * ... --- # C'est quoi un mail ``` Received: from 31.121.118.45 (EHLO serveur.fr) by mta1007.mail.ukl.yahoo.com with SMTP; Fri, 21 Sep 2012 21:31:16 +0000 Received: by serveur.fr (Postfix, from userid 106) id 3DF2F15A0CD; Fri, 21 Sep 2012 23:31:16 +0200 (CEST) From: "Thomas"
To: david@yahoo.fr Subject: Bonjour ! Date: Fri, 21 Sep 2012 23:31:16 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=iso-8859-1 * X-Mailer: Mozilla Thunderbird Message-Id: <20120921212116.3DF2F16A0CD@serveur.fr> Bonjour David, Tiens-moi au courant pour la réunion. Thomas ``` Source : [Wikipedia](http://fr.wikipedia.org/wiki/Courrier_%C3%A9lectronique) ??? C'est aussi tout une multitude de clients mails, des logiciels avec leur spécificités et leurs limitations * Outlook/Exchange qui ne fait rien comme les autres * mutt qui est en ligne de commande --- # C'est quoi un mail ``` * Received: from 31.121.118.45 (EHLO serveur.fr) * by mta1007.mail.ukl.yahoo.com with SMTP; Fri, 21 Sep 2012 21:31:16 +0000 * Received: by serveur.fr (Postfix, from userid 106) * id 3DF2F15A0CD; Fri, 21 Sep 2012 23:31:16 +0200 (CEST) From: "Thomas"
To: david@yahoo.fr Subject: Bonjour ! Date: Fri, 21 Sep 2012 23:31:16 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=iso-8859-1 X-Mailer: Mozilla Thunderbird Message-Id: <20120921212116.3DF2F16A0CD@serveur.fr> Bonjour David, Tiens-moi au courant pour la réunion. Thomas ``` Source : [Wikipedia](http://fr.wikipedia.org/wiki/Courrier_%C3%A9lectronique) ??? C'est aussi toute une architecture de distribution pour faire transiter le mail de l'émetteur au destinataire --- title: acheminement class: center, middle, inverse # L'acheminement ??? On ne contacte pas directement le destinataire, nos mails passent par des relais. On va voir comment toute ce système est sécurisé. --- layout: true class: left, top, normal --- # L'acheminement ![Schéma de l'acheminement d'un mail par Wikipedia](http://upload.wikimedia.org/wikipedia/commons/8/8c/Etapes_envoi_email.png) Source : [Wikipedia](http://commons.wikimedia.org/wiki/File:Etapes_envoi_email.png) ??? * Le contenu est en clair presque tout le temps (sur serveur et en transfert) * Pas d'authentification entre les serveurs ## Acteurs * **MUA** : **M**ail **U**ser **A**gent * **MTA** : **M**ail **T**ransport **A**gent * **MDA** : **M**ail **D**elivery **A**gent ## Protocoles * **SMTP** : **S**imple **M**ail **T**ransfert **P**rotocol * **POP** : **P**ost **O**ffice **P**rotocol * **IMAP** : **I**nternet **M**essage **A**ccess **P**rotocol --- # L'acheminement ## Exercice #1 : envoyer un mail avec SMTP ``` $> telnet server.werlen.fr 25 EHLO toto.example.net MAIL FROM:
RCPT TO:
DATA From: Alice
To: Maxime Werlen
Subject: [Alice] Démo pour le BBL J'ai validé le premier exercice ! . ``` ??? * Utiliser Telnet pour se connecter au serveur SMTP * Donner l'adresse de mon serveur (server.werlen.fr) * M'envoyer un mail depuis une adresse bison (superman@...) --- title: routage class: center, middle, inverse # Routage ??? Adresse du Telnet fournie ici, mais pas toujours le cas, comment trouver un serveur si on a pas d'entrée dans notre /etc/hosts ? --- layout: true class: left, top, normal --- # Routage ## DNS * Association d'un nom de domaine avec une adresse IP * Base de donnée distribuée et hierarchique .prezTable[
Name
Type
Class
TTL
Data
sogelink.fr.
A
IN
180
86.66.19.110
sogelink.fr.
SOA
IN
3600
a.ns.certilience.fr. nsadmin.sogelink.fr. 1421330078 28800 7200 604800 3600
sogelink.fr.
NS
IN
259200
a.ns.certilience.fr.
sogelink.fr.
MX
IN
180
11 mx11.dict.fr.
www
CNAME
IN
75263
vip110.dc.certilience.com.
sogelink.fr.
TXT
IN
3600
"v=spf1 +mx ip4:78.40.74.32/28 ip4:176.31.234.24 ip4:178.33.9.63 -all"
] ??? * A : Adresse IPv4 * AAAA: Adresse IPv6 * CNAME: Alias * MX: Mail Server * NS: Name Server * SOA: autorité locale * TXT: Texte Hiérarchie des DNS : NS de . puis NS de .fr. puis NS de .sogelink.fr. ... * Sécurisation possible grâce à DNSSec (utilisation de la crypto asymétrique pour signer les enregistrement DNS) Outil : dig --- title: securisation class: center, middle, inverse # Sécurisation des mails ??? * Autenticité : qui a envoyé * Confidentialité : qui peut le lire --- title: authenticite class: center, middle, inverse # Assurer l'authenticité --- layout: true class: left, top, normal --- # Assurer l'authenticité ##SPF ``` server 300 IN A 89.156.99.86 server 10800 IN MX 50 server.werlen.fr. * server 10800 IN SPF "v=spf1 mx a ip4:82.216.111.2/24 -all" * server 10800 IN TXT "v=spf1 mx a ip4:82.216.111.2/24 -all" mail._domainkey.server 10800 IN TXT "v=DKIM1; p=MIGfMA0GCSqGSIb3DQE BAQUAA4GNADCBiQKBgQCtROvK7xVd+t55/R54bOVXZb+eSlDPD2DEuH5qz9Oou+jdsV kQpZD8hrl/2QBfUlUkKpfHpvKrUq71vjFHPkdq3DzAszr/IYVRIlEmpHFSF/RatqGrf i2fGAjbRU0NpvSmbjm8Eqa0YsbJJqAiwEdb9Yuu+H1oRjsQewU5a/w3TwIDAQAB" _dmarc.server 10800 IN TXT "v=DMARC1; p=none; sp=reject; adkim=s; aspf=s; rua=mailto:dmarc@server.werlen.fr!10m; ruf=mailto:forensic@server.werlen.fr!10m; rf=afrf; pct=100; ri=86400" ``` ??? SPF : sender Policy Framework Enregsitrement DNS en TXT ou SPF --- # Assurer l'authenticité ## SPF ``` ; <<>> DiG 9.9.5-3ubuntu0.1-Ubuntu <<>> sogelink.fr txt ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51450 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;sogelink.fr. IN TXT ;; ANSWER SECTION: * sogelink.fr. 3600 IN TXT "v=spf1 +mx ip4:78.40.74.32/28 * ip4:176.31.234.24 * ip4:178.33.9.63 -all" ``` ??? Démo avec le MX de la boite depuis mon server perso * Fonctionne uniquement pour les serveur qui vérifient * Mais possibilité de * passer par le bon chemin en étant pas pour autant identifié. * Spoofer l'adresse IP (blind spoof) --- # Assurer l'authenticité ## DKIM ``` server 300 IN A 89.156.99.86 server 10800 IN MX 50 server.werlen.fr. server 10800 IN SPF "v=spf1 mx a ip4:82.216.111.2/24 -all" server 10800 IN TXT "v=spf1 mx a ip4:82.216.111.2/24 -all" * mail._domainkey.server 10800 IN TXT "v=DKIM1; p=MIGfMA0GCSqGSIb3DQE * BAQUAA4GNADCBiQKBgQCtROvK7xVd+t55/R54bOVXZb+eSlDPD2DEuH5qz9Oou+jdsV * kQpZD8hrl/2QBfUlUkKpfHpvKrUq71vjFHPkdq3DzAszr/IYVRIlEmpHFSF/RatqGrf * i2fGAjbRU0NpvSmbjm8Eqa0YsbJJqAiwEdb9Yuu+H1oRjsQewU5a/w3TwIDAQAB" _dmarc.server 10800 IN TXT "v=DMARC1; p=none; sp=reject; adkim=s; aspf=s; rua=mailto:dmarc@server.werlen.fr!10m; ruf=mailto:forensic@server.werlen.fr!10m; rf=afrf; pct=100; ri=86400" ``` ??? DKIM : Domain Key Identified Mail * Le serveur signe un message avant de l'envoyer avec sa clé privée * Clé publique exposée dans le DNS --- # Assurer l'authenticité ## DKIM ``` Received: from server.werlen.fr (89-156-99-86.rev.numericable.fr. [89.156.99.86]) by mx.google.com with ESMTPS [...] for
[...] Authentication-Results: mx.google.com; spf=pass (google.com: domain of mwerlen@server.werlen.fr designates 89.156.99.86 as permitted sender) smtp.mail=mwerlen@server.werlen.fr; dkim=temperror (no key for signature) header.i=@ Received: by server.werlen.fr (Postfix, from userid 1000) id CE3221F77C; Thu, 8 Jan 2015 21:17:16 +0100 (CET) * DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=server.werlen.fr; * s=mail; t=1420748236; * bh=GZszWhFR6tgBIY1LNkqdFuZxHBkgdbMgOyew/FURnRc=; * h=Date:From:To:Subject:From; * b=JueY2Nbp6zL6Y9skwFt1SLpJY1gHEalArVdd8fzGq8LXzB80k4flJTml10pgfINZM * Fkyhmuh8ui9sMX8KjrBxfo2TFMDdfyb2SgiJ3h0TJGSdB84+pcYzx2MnCZ4kT65h2Q * mbzqWlm8cm2Wxx4gj1GOqIEZ9vRcMCGJn++amMaw= From: Maxime Werlen
To: maxime.werlen@gmail.com Subject: Test avec DKIM ... ``` ??? * v=1 is the version, * a=rsa-sha256 is the signing algorithm, * c is the canonicalization algorithm(s) for header and body, * t is the signature timestamp, * h is the list of signed header fields * On peut néanmoins toujours outrepasser la signature en envoyant depuis le réseau interne puisque c'est le serveur qui signe. --- # Assurer l'authenticité ## DMARC ``` server 300 IN A 89.156.99.86 server 10800 IN MX 50 server.werlen.fr. server 10800 IN SPF "v=spf1 mx a ip4:82.216.111.2/24 -all" server 10800 IN TXT "v=spf1 mx a ip4:82.216.111.2/24 -all" mail._domainkey.server 10800 IN TXT "v=DKIM1; p=MIGfMA0GCSqGSIb3DQE BAQUAA4GNADCBiQKBgQCtROvK7xVd+t55/R54bOVXZb+eSlDPD2DEuH5qz9Oou+jdsV kQpZD8hrl/2QBfUlUkKpfHpvKrUq71vjFHPkdq3DzAszr/IYVRIlEmpHFSF/RatqGrf i2fGAjbRU0NpvSmbjm8Eqa0YsbJJqAiwEdb9Yuu+H1oRjsQewU5a/w3TwIDAQAB" * _dmarc.server 10800 IN TXT "v=DMARC1; p=none; sp=reject; adkim=s; * aspf=s; rua=mailto:dmarc@server.werlen.fr!10m; * ruf=mailto:forensic@server.werlen.fr!10m; * rf=afrf; pct=100; ri=86400" ``` ??? DMARC : Domain-based Message Authentication, Reporting and Conformance Publication d'une politique de traitement des messages * v : Protocol version * p : traitement des erreurs * sp : Policy for subdomains of the OD * adkim : Alignment mode for DKIM * aspf : Alignment mode for SPF * pct : Percentage of messages subjected to filtering * ruf : Reporting URI for forensic reports * rua : Reporting URI of aggregate reports Mais toujours à la bonne volonté des serveurs mails destinataires --- # L'acheminement ![Schéma de l'acheminement d'un mail par Wikipedia](http://upload.wikimedia.org/wikipedia/commons/8/8c/Etapes_envoi_email.png) Source : [Wikipedia](http://commons.wikimedia.org/wiki/File:Etapes_envoi_email.png) ??? Toute la chaine n'est pas sécurisée ! * A la bonne volonté des MTA/MDA * Possibilité d'attaque (DNS cache poisoning, IP spoofing...) * Authentification du premier MTA uniquement, pas de l'utilisateur réel --- # Assurer l'authenticité ## Signature GPG ``` From: Maxime Werlen
To: mwerlen@server.werlen.fr Subject: Demo GPG Content-Type: text/plain; charset=utf-8; x-action=pgp-signed * -----BEGIN PGP SIGNED MESSAGE----- * Hash: SHA1 * * Ceci est un message signé avec GPG. * -----BEGIN PGP SIGNATURE----- * Version: GnuPG v1 * * iQEcBAEBAgAGBQJUwPGlAAoJEEnlc/oNcN2m+tEH/05MY1NyMddon4Hm1fPHD4Ox * HltkTW5bFL4fHx1O4fh8frh/P8UG+ZK4MSTzj/fUcUe2DZEgtqlFjlJFD3CisNbV * qZujEyHL6/p/MIP8dNtkUbgJA4nZHA1BOsSILbRV2vXsgA6l3Rt2i25aRmZcVWvG * YIsbQ5PxgbRu1fkf+aPcLBa/L6WUG1TvKpG8hQrywqc6HKwAtg5GoGQ1ZSIUiX2i * iGjjw56eD8x4tMd3bODkVcBubn7G4hx/7ppb6vujGq+ydz7G99dTDeTDpvXgC9nf * SM39U7ObGQW3abpQ7sPbv4u0taMWKhiRUuwEYos6Wb6YhHAfWVHDsvYxHmKcXKA= * =Yzba * -----END PGP SIGNATURE----- ``` ??? * PGP : Pretty Good Privacy -> implémetation de OpenPGP * GPG : Gnu Privacy Guard -> autre implémentation * Signé par l'utilisateur - Pas d'usurpation coté server Signature du message avec sa clé publique. Le destinataire vérifie la validité avec la clé privée. --- title: confidentialite class: center, middle, inverse # Assurer la confidentialité ??? On sait qui a envoyé le message, mais tout le monde peut lire son contenu --- layout: true class: left, top, normal --- # L'acheminement ![Schéma de l'acheminement d'un mail par Wikipedia](http://upload.wikimedia.org/wikipedia/commons/8/8c/Etapes_envoi_email.png) Source : [Wikipedia](http://commons.wikimedia.org/wiki/File:Etapes_envoi_email.png) ??? * Toute la chaine n'est pas sécurisée ! * On sait qui a envoyé le message, mais tout le monde peut lire son contenu * Confidentialité pas prévue dans le protocole, mais dans la stack réseau --- # Assurer la confidentialité ## 7 couches du modèle OSI .prezTable[
level
Layer
Application
7
Application Layer
HTTP, FTP, DNS,
SMTP
6
Présentation Layer
SSL, TLS
5
Session Layer
NetBios, PPTP,
SSL, TLS
4
Transport Layer
TCP
, UDP
3
Network Layer
IP
, ARP, ICMP, IPSec
2
Data Link Layer
PPP, ATM,
Ethernet
1
Physical Layer
Ethernet
, USB, Bluetooth
] ??? ## L'architecture en 7 couche du modèle OSI * Protocols internet sur couche 7 * Sécurisation sur couche 5/6 --- # Assurer la confidentialité ## SSL et TLS > Transport Layer Security (TLS) and its predecessor, Secure Sockets Layer (SSL), are **cryptographic protocols** designed to provide communication security over the Internet. >
> They use **X.509 certificates** and hence **asymmetric cryptography** to authenticate the counterparty with whom they are communicating, and to **exchange a symmetric key**. >
> This session key is then used to **encrypt data flowing between the parties**. This allows for **data/message confidentiality** \[...\] and as a by-product, **message authentication**. Source : [Wikipedia](http://en.wikipedia.org/wiki/Transport_Layer_Security) ??? Protocoles cryptographique * Basé sur X.509 (hein ?) * et la crypto asymétrique (hein ?) * Pour échanger une clé symétrique (re-re-hein ?) * Pour finalement tout crypter entre les deux Objectif : * Confidentialité * Authentification --- # Assurer la confidentialité ## Cryptographie symétrique ![Symmetric-key algorithm](/images/Symmetric-key algorithm.svg) ??? Une seule clé sert à chiffrer et déchiffrer. * Algorithme de César (décalage de caaractères A->C, B->D...) * XOR (application d'un masque XOR bit à bit) * Twofish * AES * RC4 * 3DES RC4 encore très utilisé dans TLS, mais déconseillé à cause de biais possible. Probablement cassé par les agences crypto. --- # Assurer la confidentialité ## Cryptographie asymétrique ![Asymmetric-key algorithm](/images/Asymmetric-key algorithm.svg) ??? Deux clés liées mathématiquement (factorisation de nombres premiers, factorisation sur courbes éliptiques) permettent de : * Chiffrer et déchiffer * Signer et vérifier Les deux clés sont interchangeable (avant publication) ! Plein d'algorithms utilisent des clés asymétriques : * RSA (signature et chiffrement) --> SSH, GPG... * DSA (signature) -> * Diffie-Helmann (échange de clés sécurisé) -> TLS/SSL --- # Assurer la confidentialité ## SSL et TLS > Transport Layer Security (TLS) and its predecessor, Secure Sockets Layer (SSL), are **cryptographic protocols** designed to provide communication security over the Internet. >
> They use **X.509 certificates** and hence **asymmetric cryptography** to authenticate the counterparty with whom they are communicating, and to **exchange a symmetric key**. >
> This session key is then used to **encrypt data flowing between the parties**. This allows for **data/message confidentiality** \[...\] and as a by-product, **message authentication**. Source : [Wikipedia](http://en.wikipedia.org/wiki/Transport_Layer_Security) ??? Protocoles cryptographique * Basé sur X.509 (hein ?) * et la crypto asymétrique (hein ?) * Pour échanger une clé symétrique (re-re-hein ?) * Pour finalement tout crypter entre les deux Objectif : * Confidentialité * Authentification --- # Assurer la confidentialité ## X.509 > In cryptography, X.509 is **an ITU-T standard** for a **public key infrastructure (PKI)** and **Privilege Management Infrastructure (PMI)**. >
> X.509 specifies, amongst other things, **standard formats for public key certificates**, **certificate revocation lists**, **attribute certificates**, and **a certification path validation algorithm**. Source : [Wikipedia](http://en.wikipedia.org/wiki/X.509) ??? * Définition d'un système de gestion de clé uniquement. Ca ne définit pas d'algorithme ou de protocoles. C'est applicables partout. * Basé sur de la crypto asymétriques à clé publique/privée * Utilisé dans SSL/TLS mais pas uniquement, aussi pour la signature du code, des documents PDF... --- # X.509 ## Certificat Informations sur le certificat * Serial Number * Subject * Subject Public Key * Issuer * Validity * Usages * Signature Codé sous forme de clé-valeur avec des identifiants normalisés, des OID : * 2.5.29.15 - Key Usage * 1.2.840.113549.1.1.5 : Signature RSA-SHA * 2.5.29.14 : Subject Key Identifier * 1.3.6.1.4.1.36513 : Préfix Sogelink ??? * Certificat : Association d'une clée publique et d'une identité (personne). * Usages : utilisations possibles du certificat. * Classes de certificats * SSL : pas cher * SSL wildcard : + cher * Authentification personnelle : très cher * Signature de code : très cher * Extended Validation (cadena vert) : très très cher * OID : Object Identifier * Liste maintenue par l'ISO (International Organisation for Standardisation) et ITU-T (International telecomunication Union - Telecom Standardization Sector) --- # X.509 ## Certificat * Des formats de certificats * DER/CER/CRT : format binaire de certificat basé sur [ASN1](http://lapo.it/asn1js/#3082052D30820415A0030201020203159718300D06092A864886F70D0101050500303C310B300906035504061302555331173015060355040A130E47656F54727573742C20496E632E311430120603550403130B526170696453534C204341301E170D3134313030353038313932315A170D3137313030373136343334355A3081BC31293027060355040513204A50344A476F36523064416459533149784D6666686241547169396E65364E4C31133011060355040B130A475439383638333335353131302F060355040B1328536565207777772E726170696473736C2E636F6D2F7265736F75726365732F637073202863293134312F302D060355040B1326446F6D61696E20436F6E74726F6C2056616C696461746564202D20526170696453534C2852293116301406035504030C0D2A2E736F67656C696E6B2E667230820122300D06092A864886F70D01010105000382010F003082010A0282010100BA9AB3936606D1D4CECB669F3BEB9D3A978266B15E8FF1E2CCBCF0EEAD3680BEAE0AFA591953709CD2A639FDF527062456109E637586335EFD41B9F27676A7AB507D214B9BC27D8F09673957F1D36C556B289A0B09AA834D16B8A05F6ED661902EF80B0395E0DDF13A19682C5154DAE5BC70A80DAB27BB4A7C5C25CCA34E6C59F0B562165AB3B025D5BC9DBF5A3840D0A1EC45F2AFD0CAAE332A8D0417A10CEECB2B2DCF4F129240EB2081BAB4CA975402881AC1DEBEDACE5420E01341F60CDBD27368C68B02F7F684376DD362E07E86AD52E7F3E021F3C7DBBD70FC836B4D41ACE1A7AB67F700E175FD3FBEA4F71192D8E2A027365C3A17E9A22FDE116F69A30203010001A38201B5308201B1301F0603551D230418301680146B693D6A18424ADD8F026539FD35248678911630300E0603551D0F0101FF0404030205A0301D0603551D250416301406082B0601050507030106082B0601050507030230250603551D11041E301C820D2A2E736F67656C696E6B2E6672820B736F67656C696E6B2E667230430603551D1F043C303A3038A036A0348632687474703A2F2F726170696473736C2D63726C2E67656F74727573742E636F6D2F63726C732F726170696473736C2E63726C301D0603551D0E04160414BDA8932EC2EB251205403C24AD16E4983F67977A300C0603551D130101FF04023000307806082B06010505070101046C306A302D06082B060105050730018621687474703A2F2F726170696473736C2D6F6373702E67656F74727573742E636F6D303906082B06010505073002862D687474703A2F2F726170696473736C2D6169612E67656F74727573742E636F6D2F726170696473736C2E637274304C0603551D20044530433041060A6086480186F8450107363033303106082B060105050702011625687474703A2F2F7777772E67656F74727573742E636F6D2F7265736F75726365732F637073300D06092A864886F70D0101050500038201010053FAAF73BCD7E02864A7C32ED30E66D7935B44D78DECC93C7F303DA997609C847EAE9A13455E96EC9D7403D6B1C8B7DC48E4E6B20035F0FCC4F83153D02BB0A0C7DCAE49B1E9B09925B8A4CE94BD73AF7C67B864A77BBDA21E3DBBF4F45FD4A39D046B9F5B87F51EE827BAFB2C244EDC2F887900D59DA9205F6C9A9F3DE4BCFF785BC32F3F6636BEFF695280411584F73FFB738D10520E1B239305D280F0EAF269BB9FF03A6BD30099FB8C7ACCF61E2E192B4044D1A667E16DC12B24667EA9B6FEF1C62C288B58510F0B29A6ED1CF8661315630E957B489FF47F033BF082336276DADDE404260B44231A00A57E84302735E92D6EA2342DC5D1C027A887F4173E) * PEM : DER encodé en base64 (utilisé pour la communication d'un fichier DER) * PKCS7 : Format de signature pouvant contenir le certificat public * PKCS12 : Format de conteneur de clés publiques et privées protégé par mot de passe --- # X.509 ## Modèle de confiance des autorités de certification ![Certification Authority Trust Model](/images/Certification Authority Trust Model.svg) ??? * Environ 500 certificats installé dans Ubuntu (root et intermédiaires) * Une 50 de Root CA sur les OS/navigateurs * 5 gros acteurs pour les certificats SSL mais des centaines d'AC intermédiaires * Des revendeurs sur les AC des gros * Tous les logiciels n'ont pas la même liste (Adobe != OS, CaCert sur certains linux...) --- # X.509 ## Hierarchie des certificats ### Exercice : Trouver le root CA du certificat Sogelink -- * Equifax Secure Certificate Authority * GeoTrust Global CA * RapidSSL CA * *.sogelink.fr ??? * Geotrust a racheté la branche sécurité d'un organisme bancaire (Equifax). Il a depuis été acquis par Verisign. * RapidSSL est un revendeur sur la PKI de verisign... * Verisign appartient à Symantec qui a 35% du marché (5 acteur pour 95 des cert) --- # X.509 ## Révocation ``` Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: /C=US/O=Google Inc/CN=Google Internet Authority G2 Last Update: Jan 25 01:00:03 2015 GMT Next Update: Feb 4 01:00:03 2015 GMT CRL extensions: X509v3 Authority Key Identifier: keyid:4A:DD:06:16:1B:BC:F6:68:B5:76:F5:81:B6:BB:62:1A:BA:5A:81:2F X509v3 CRL Number: 617 Revoked Certificates: * Serial Number: 0D2AF612383ADA5C * Revocation Date: Jul 9 07:58:39 2014 GMT * CRL entry extensions: * X509v3 CRL Reason Code: * Key Compromise [...] Signature Algorithm: sha1WithRSAEncryption 17:4c:0d:fc:47:61:fd:02:ef:d7:11:f7:23:e3:45:db:72:15: [...] ``` ??? Exemple de CRL visualisée avec openssl crl Publication par les autorités de certification (CA), d'une liste de révocation contenant tous les numéro de série des certificats révoqués avec la raison et la date. La vérification est normalement obligatoire, mais elle est rarement obligatoire. --- # Assurer la confidentialité ## SSL et TLS 1. Etablissement du tunnel TCP 2. → **Client Hello** (version SSL, algo supportés et random du client) 3. ← **Server Hello** (version SSL, algo supportés et random du serveur) 3. ← **Server Certificate** (chaine de certificat serveur) 3. ← **Server Hello Done** 4. _Verification du certificat du serveur_ 5. _Creation d'un secret premaster chiffré avec la clé publique du serveur_ 6. → **Client Certificate** + secret premaster chiffré 7. _Calcul de la clé symétrique (premaster+randoms)_ 8. → **Client Finished** (message "client" chiffré avec la clé symétrique) 9. ← **Server Finished** (message "server" chiffré avec la clé symétrique) 11. _Echange de données chiffrées symétriquement_ ??? * Version courte du bouzin complet * Possibilité d'avoir de l'identification du client plus forte * Possibilité d'un mode anonyme (on ne s'envois que les clés publiques, pas les certificats complets * Possibilités de renégociation * Différents algorithmes de calcul du master (clé symétrique) * Perfect Forward Secrecy ! --- # Assurer la confidentialité ## SSL et TLS ### Démo : SMTP sur TLS ``` openssl s_client -starttls smtp -connect server.werlen.fr:465 ``` ??? * Se connecter sur server.werlen.fr * Montrer la hierarchie des certificats * Montrer la session résultante --- # L'acheminement ![Schéma de l'acheminement d'un mail par Wikipedia](http://upload.wikimedia.org/wikipedia/commons/8/8c/Etapes_envoi_email.png) Source : [Wikipedia](http://commons.wikimedia.org/wiki/File:Etapes_envoi_email.png) ??? * Toute la chaine n'est pas sécurisée ! * On sait qui a envoyé le message, mais tout le monde peut lire son contenu * Confidentialité entre les SMTP (si pris en charge) et vers le client * Pas de confidentialité sur les serveurs ! Le serveur a le message en clair et peut le renvoyer en clair --- # Assurer la confidentialité ## Chiffrement GPG ``` From: Maxime Werlen
To: maxime@werlen.fr Subject: Message chiffre avec GPG Content-Type: text/plain; charset=us-ascii; x-action=pgp-encrypted * -----BEGIN PGP MESSAGE----- * Version: GnuPG v1 * * hQEMAz9clsGeCsjzAQgApIDt2mLrj93E4e2j3F7i9BhmBdhYPtS+pGDNziwN8Gcg * pqeFT29/E5P5UH/Jn0HYMy6mI1zEGsWZ59Mucly0nsptHlnZHmq7cWDtTn50h1L8 * D8oHbaNLI1DW0ghZvTF1Pb0ybVf+3+79XJRZn5507jVqesG3jmMHP98eAIOn9EvM * 2JGztj3gvcuSI30QpwwU1LANpphqnqF0JM4x3yU62jjbwG7WKPagtETPGcU8e7GF * CYWG0KAzM4layHw/q/aObq1p3VY18WsgmzHawAtnR9CUEBYWg4MN2O0ERORqQ5Gs * qzsjFD362c46JIgN9sdQm7mOQGXdxei8rJW+jgKfytKMAaN0bTSnBrspiSJkYf7y * k4yN1botJTz5hIhy1PfRdiMlo5YKuE3DrD6lHosRrwi9Zd2rF92Ialw/5FM15L13 * TCd9LWSufLM8Blpe0Qb90p3mZu011WWjPdB33aKtMfbt1TblCBojIr0XekmXeNCs * rSoUj+pyKWj2McUo8TFa/R7rqKqeb+MeaSxNIo4= * =o6js * -----END PGP MESSAGE----- ``` ??? * Message chiffré par l'utilisateur avec la clé publique du destinataire. * Seul le destinataire pourra le déchiffrer * Cumulable avec la signature * Plusieurs formats possible (inline ou PGP/MIME) --- # GPG ## Fonctionnement > Pretty Good Privacy (PGP) is a data encryption and decryption **computer program** that provides cryptographic **privacy** and **authentication** for data communication. >
> PGP is often used for **signing**, **encrypting**, and **decrypting** texts, e-mails, files, directories, and whole disk partitions and to increase the security of e-mail communications Source : [Wikipedia](http://en.wikipedia.org/wiki/Pretty_Good_Privacy) ??? * Pas un protocol, ni algorithme. C'est un logiciel de chiffrement et signature à clé asymétrique. * Gestion de la confidentialité et de l'authentification * Gestion de la clé privée et de son utilisation * pas de x.509 pour gérer la confiance et les formats... --- # GPG ## Web of Trust > In cryptography, a web of trust is a concept used in PGP, GnuPG, and other OpenPGP-compatible systems to **establish the authenticity of the binding between a public key and its owner**. >
> Its **decentralized trust model** is an alternative to the centralized trust model of a public key infrastructure (PKI), which relies exclusively on a certificate authority (or a hierarchy of such). Source : [Wikipedia](http://en.wikipedia.org/wiki/Web_of_trust) ??? * Objectif : associer de manière sûre une clée et une identité. * S'appuie sur des serveur de clés qui permettent de publier des clés publiques * Complètement décentralisé. Personne ne nous dit à qui faire confiance. --- # GPG ## Web of Trust ### Valider une clé Signer la clé de quelqu'un (comment dans x.509) ### Partager l'information Publier la signature sur un [serveur de clé](https://pgp.mit.edu/pks/lookup?op=vindex&search=0xE0CD3CDC59B2D9A0) ### Strong set 60 000 clés liées entre elles, distance moyenne 6 clés, en moyenne 10 signatures par clé ??? * Clé PGP == certificat x.509 * Valider une clé == valider l'association humain-clé * Faire confiance == déléguer la validation des clés à une autre personne/clé * Ne pas confondre validité et confiance Montrer l'exemple sur le serveur MIT --- class: center # Web of Trust ![Web of Trust](/images/Web of Trust.png) .prezTable[
trust
validity
marginal
full
marginal
full
Dharma
Blake, Chloe, Dharma, Francis
Blake, Dharma
Francis
Blake, Chloe, Dharma
Chloe, Dharma
Chloe, Francis
Blake, Dharma
Blake, Chloe, Dharma
Elena
Blake, Chloe, Dharma, Francis
] ??? Confiance = 1 confiance totale ou 2 confiance marginale --- # GPG ## Exercice GPG 1. Se créer une clé ``` gpg --gen-key ``` 2. Publier sa clé ``` gpg --keyserver pgp.mit.edu --send-key 1A2B3C4D ``` 3. Récupérer ma clé publique ``` gpg --keyserver pgp.mit.edu --recv-keys 0D70DDA6 ``` 4. M'envoyer un mail chiffré avec Thunderbird/Enimgail sur mwerlen@server.werlen.fr ??? Possibilité de faire tout ça avec Enigmail --- # GPG ## Exercice GPG ### Exercice : constituer un Web of Trust 1. Se créer une clé 2. Publier sa clé 3. Imprimer/écrire son empreinte de clé sur papier 4. Echange des empreintes et vérification de l'identité (avec CNI) 5. Signer les clés des autres ``` gpg --keyserver pgp.mit.edu --recv-keys 00AA11BB gpg --fingerprint 00AA11BB gpg --sign-key 00AA11BB gpg --armor --output 00AA11BB-signedBy-1A2B3C4D.asc --export 00AA11BB ``` 6. Publier la signature ``` gpg --import 1A2B3C4D-signedBy-00AA11BB.asc gpg --keyserver pgp.mit.edu --send-key 1A2B3C4D ``` --- title: end class: center, middle, inverse # The end --- layout: true class: left, top, normal --- # Sources ## Préparation du BBL * Wikipedia * Debian wiki : https://wiki.debian.org/Keysigning * Analyse du strong-set WoT : http://pgp.cs.uu.nl/plot/ ## Test de la configuration des mails * http://www.mail-tester.com/ * https://unlocktheinbox.com/resources/emailauthentication/#_ ## Super lecture * http://blog.bienaime.info/2015/01/le-challenge-du-logo-anssi.html?m=1