Certificat pour authentifier ou chiffrer

La cryptographie asymétrique est en générale utilisée pour 3 types d’actions :

  • L’authentification
  • La signature
  • Le chiffrement

Chacune de ces actions répond à un besoin bien précis. Résumons rapidement :

Dans le cas de la signature, le hash d’une donnée est « chiffré » avec la clé privée : toute personne voulant vérifier la validité de la signature récupérera la donnée et la signature, calculera le hash de la donnée et le comparera à celui contenu dans la signature. Si les deux correspondent, on peut alors conclure que la donnée n’a pas été modifiée par un tiers.

Pour le chiffrement, à l’inverse, une personne distante utilisera la clé publique pour chiffrer une clé symétrique (ou plus généralement une donnée), afin que seul le détenteur de la clé privée correspondante puisse la déchiffrer.

Nous avons déjà évoqué ces deux cas plusieurs fois ici. Cependant le cas de l’authentification est assez intéressant car il mélange un peu les deux.

En effet, l’authentification permet d’authentifier une personne (ou un service) Alice auprès d’une entité distante Bob à travers un challenge suivant un schéma simple :

– Alice présente son certificat à l’entité distante.
– Bob vérifie la validité du certificat : date de validité, chaine de confiance, liste de révocation (ou pas) usage de la clé…
– Bob envoie une donnée chiffrée avec sa clé publique à Alice
– Alice déchiffre cette donnée et la renvoie en claire
– Bob constate qu’Alice possède bien la clé privée correspondant au certificat présenté : Alice est alors authentifiée

Le RGS nous demande de bien scinder ces usages avec des clés différentes : en effet, si Alice utilise le même bi-clé pour tous ces usages, nous pouvons assez simplement imaginer des attaques.

Imaginons, le cas où Eve veut déchiffrer un message intercepté d’Alice, il lui suffit de récupérer la clé chiffrée et de la transmettre comme un challenge à Alice, Alice déchiffrera cette clé et la remettra à Eve qui n’aura alors plus grand chose à faire.

Autrement dit, il faut bien choisir les usages de clé dans les certificats X.509. Ainsi quels sont les usages de clés (au sens X.509 KeyUsage) à mettre sur chacune de ces paires :
Assez simplement, nous pouvons classer les usages des certificats finaux :

  • Digital Signature :  Signature ou Authentification
  • Non Repudiation : Signature ou Authentification
  • Data Encipherment : Chiffrement

Mais quid du « Key Encipherment » ?
A priori, on pourrait dire que c’est de chiffrement. Ce serait oublier que c’est un keyUsage souvent utilisé dans la négociation SSL/TLS lorsqu’il n’y a pas de PFS.

Du coup pour un certificat SSL de serveur, on se retrouve  avec Digital Signature et Key Encipherment donc potentiellement authentification + chiffrement avec le même certificat.

En fait le RGS est plus précis que cela :

Dans le cadre du [RGS], l’utilisation de la clé privée d’authentification du serveur et du certificat mono-usage associé est strictement limitée au service d’authentification et d’établissement de session sécurisée.

Comme noté plus haut, le problème ne se pose que s’il n’y a pas de PFS : une bonne façon de contourner ce problème serait donc d’utiliser la notion de PFS (DHE ou ECDHE), ainsi la clé du certificat ne sert pas à chiffrer de données, simplement à authentifier le serveur. Il est bon de savoir que cela a été pensé par les auteurs du RGS.  Mais cela peut provoquer des usages qui a priori peuvent sembler illégitimes ou tout du moins très ambigües.

Prenons l’exemple des boitiers estampillés « Bouclier de Tempête ».

Lorsque vous gérez un de ces boitiers, l’administration se fait notamment via HTTPS. Et qui dit https, dit certificat et donc chaine de confiance. Par défaut, les boitiers sont livrés avec un certificat préinstallé pour sécuriser les flux d’administration. Mais lorsque vous avez une flotte de boitiers (NetASQ ou autre), c’est toujours ennuyeux d’avoir les certificats constructeurs sur ces machines :

1. Nous ne savons pas comment ils ont été générés et cela peut parfois être problématique;
2. Dès que vous vous connectez, vous avez une alerte dans les navigateurs.

Il nous parait alors légitime de vouloir mettre son propre bi-clé.

On notera également que, seul le certificat final nous est présenté lors de la négociation TLS avec le boitier alors que le certificat n’est pas auto-signé. Mais il est signé par une AC centrale (partagée par tous les boitiers). Et bien sur la signature est en PKCS #1 SHA-1 avec chiffrement RSA… Ca n’est pas très RGS tout cela.

En fait en creusant davantage, on peut avoir un début de réponse : ce certificat n’est pas utilisé uniquement pour la négociation SSL du canal d’administration mais aussi pour la validation de la licence. En effet les fichiers de licence disponible sur le site du support, sont en fait des fichiers pkcs7-signedAndEnvelopedData.

0:d=0  hl=4 l=3406 cons: SEQUENCE
4:d=1  hl=2 l=   9 prim: OBJECT            :pkcs7-signedAndEnvelopedData
15:d=1  hl=4 l=3391 cons: cont [ 0 ]
19:d=2  hl=4 l=3387 cons: SEQUENCE
23:d=3  hl=2 l=   1 prim: INTEGER           :01
26:d=3  hl=4 l= 447 cons: SET
30:d=4  hl=4 l= 443 cons: SEQUENCE
34:d=5  hl=2 l=   1 prim: INTEGER           :00
37:d=5  hl=3 l= 162 cons: SEQUENCE
40:d=6  hl=3 l= 154 cons: SEQUENCE
43:d=7  hl=2 l=  11 cons: SET
45:d=8  hl=2 l=   9 cons: SEQUENCE
47:d=9  hl=2 l=   3 prim: OBJECT            :countryName
52:d=9  hl=2 l=   2 prim: PRINTABLESTRING   :FR
56:d=7  hl=2 l=  13 cons: SET
58:d=8  hl=2 l=  11 cons: SEQUENCE
60:d=9  hl=2 l=   3 prim: OBJECT            :stateOrProvinceName
65:d=9  hl=2 l=   4 prim: PRINTABLESTRING   :Nord
71:d=7  hl=2 l=  26 cons: SET
73:d=8  hl=2 l=  24 cons: SEQUENCE
75:d=9  hl=2 l=   3 prim: OBJECT            :localityName
80:d=9  hl=2 l=  17 prim: PRINTABLESTRING   :Villeneuve d'Ascq
99:d=7  hl=2 l=  46 cons: SET
101:d=8  hl=2 l=  44 cons: SEQUENCE
103:d=9  hl=2 l=   3 prim: OBJECT            :organizationName
108:d=9  hl=2 l=  37 prim: PRINTABLESTRING   :NETASQ - Secure Internet Connectivity
147:d=7  hl=2 l=  48 cons: SET
149:d=8  hl=2 l=  46 cons: SEQUENCE
151:d=9  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
156:d=9  hl=2 l=  39 prim: PRINTABLESTRING   :NETASQ Firewall Certification Authority
197:d=6  hl=2 l=   3 prim: INTEGER           :022222 [MODIFIED :)]
202:d=5  hl=2 l=  13 cons: SEQUENCE
204:d=6  hl=2 l=   9 prim: OBJECT            :rsaEncryption
215:d=6  hl=2 l=   0 prim: NULL
217:d=5  hl=4 l= 256 prim: OCTET STRING      [HEX DUMP]: [CENSORED :)]
477:d=3  hl=2 l=  11 cons: SET
479:d=4  hl=2 l=   9 cons: SEQUENCE
481:d=5  hl=2 l=   5 prim: OBJECT            :sha1
488:d=5  hl=2 l=   0 prim: NULL
490:d=3  hl=4 l=1086 cons: SEQUENCE
494:d=4  hl=2 l=   9 prim: OBJECT            :pkcs7-data
505:d=4  hl=2 l=  21 cons: SEQUENCE
507:d=5  hl=2 l=   9 prim: OBJECT            :bf-cbc
518:d=5  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:525C4BD819A7241A [MODIFIED :)]
527:d=4  hl=4 l=1040 prim: cont [ 0 ]
1571:d=3  hl=4 l=1269 cons: cont [ 0 ]
1575:d=4  hl=4 l=1265 cons: SEQUENCE
1579:d=5  hl=4 l= 985 cons: SEQUENCE
1583:d=6  hl=2 l=   3 cons: cont [ 0 ]
1585:d=7  hl=2 l=   1 prim: INTEGER           :02
1588:d=6  hl=2 l=   3 prim: INTEGER           :033333 [MODIFIED :)]
1593:d=6  hl=2 l=  13 cons: SEQUENCE
1595:d=7  hl=2 l=   9 prim: OBJECT            :sha1WithRSAEncryption
1606:d=7  hl=2 l=   0 prim: NULL
1608:d=6  hl=3 l= 154 cons: SEQUENCE
1611:d=7  hl=2 l=  11 cons: SET
1613:d=8  hl=2 l=   9 cons: SEQUENCE
1615:d=9  hl=2 l=   3 prim: OBJECT            :countryName
1620:d=9  hl=2 l=   2 prim: PRINTABLESTRING   :FR
1624:d=7  hl=2 l=  13 cons: SET
1626:d=8  hl=2 l=  11 cons: SEQUENCE
1628:d=9  hl=2 l=   3 prim: OBJECT            :stateOrProvinceName
1633:d=9  hl=2 l=   4 prim: PRINTABLESTRING   :Nord
1639:d=7  hl=2 l=  26 cons: SET
1641:d=8  hl=2 l=  24 cons: SEQUENCE
1643:d=9  hl=2 l=   3 prim: OBJECT            :localityName
1648:d=9  hl=2 l=  17 prim: PRINTABLESTRING   :Villeneuve d'Ascq
1667:d=7  hl=2 l=  46 cons: SET
1669:d=8  hl=2 l=  44 cons: SEQUENCE
1671:d=9  hl=2 l=   3 prim: OBJECT            :organizationName
1676:d=9  hl=2 l=  37 prim: PRINTABLESTRING   :NETASQ - Secure Internet Connectivity
1715:d=7  hl=2 l=  48 cons: SET
1717:d=8  hl=2 l=  46 cons: SEQUENCE
1719:d=9  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
1724:d=9  hl=2 l=  39 prim: PRINTABLESTRING   :NETASQ Firewall Certification Authority
1765:d=6  hl=2 l=  30 cons: SEQUENCE
1767:d=7  hl=2 l=  13 prim: UTCTIME           :110222090907Z
1782:d=7  hl=2 l=  13 prim: UTCTIME           :220823090907Z
1797:d=6  hl=3 l= 190 cons: SEQUENCE
1800:d=7  hl=2 l=  11 cons: SET
1802:d=8  hl=2 l=   9 cons: SEQUENCE
1804:d=9  hl=2 l=   3 prim: OBJECT            :countryName
1809:d=9  hl=2 l=   2 prim: PRINTABLESTRING   :FR
1813:d=7  hl=2 l=  13 cons: SET
1815:d=8  hl=2 l=  11 cons: SEQUENCE
1817:d=9  hl=2 l=   3 prim: OBJECT            :stateOrProvinceName
1822:d=9  hl=2 l=   4 prim: PRINTABLESTRING   :Nord
1828:d=7  hl=2 l=  26 cons: SET
1830:d=8  hl=2 l=  24 cons: SEQUENCE
1832:d=9  hl=2 l=   3 prim: OBJECT            :localityName
1837:d=9  hl=2 l=  17 prim: PRINTABLESTRING   :Villeneuve d'Ascq
1856:d=7  hl=2 l=  46 cons: SET
1858:d=8  hl=2 l=  44 cons: SEQUENCE
1860:d=9  hl=2 l=   3 prim: OBJECT            :organizationName
1865:d=9  hl=2 l=  37 prim: PRINTABLESTRING   :NETASQ - Secure Internet Connectivity
1904:d=7  hl=2 l=  38 cons: SET
1906:d=8  hl=2 l=  36 cons: SEQUENCE
1908:d=9  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
1913:d=9  hl=2 l=  29 prim: PRINTABLESTRING   :NETASQ Information Protection
1944:d=7  hl=2 l=  44 cons: SET
1946:d=8  hl=2 l=  42 cons: SEQUENCE
1948:d=9  hl=2 l=   3 prim: OBJECT            :commonName
1953:d=9  hl=2 l=  35 prim: PRINTABLESTRING   :NETASQ Signer Information - Licence
1990:d=6  hl=4 l= 290 cons: SEQUENCE
1994:d=7  hl=2 l=  13 cons: SEQUENCE
1996:d=8  hl=2 l=   9 prim: OBJECT            :rsaEncryption
2007:d=8  hl=2 l=   0 prim: NULL
2009:d=7  hl=4 l= 271 prim: BIT STRING
2284:d=6  hl=4 l= 280 cons: cont [ 3 ]
2288:d=7  hl=4 l= 276 cons: SEQUENCE
2292:d=8  hl=2 l=  29 cons: SEQUENCE
2294:d=9  hl=2 l=   3 prim: OBJECT            :X509v3 Subject Key Identifier
2299:d=9  hl=2 l=  22 prim: OCTET STRING      [HEX DUMP]:[CENSORED :)]
2323:d=8  hl=3 l= 199 cons: SEQUENCE
2326:d=9  hl=2 l=   3 prim: OBJECT            :X509v3 Authority Key Identifier
2331:d=9  hl=3 l= 191 prim: OCTET STRING      [HEX DUMP]:[CENSORED :)]
2525:d=8  hl=2 l=   9 cons: SEQUENCE
2527:d=9  hl=2 l=   3 prim: OBJECT            :X509v3 Basic Constraints
2532:d=9  hl=2 l=   2 prim: OCTET STRING      [HEX DUMP]:3000
2536:d=8  hl=2 l=  17 cons: SEQUENCE
2538:d=9  hl=2 l=   9 prim: OBJECT            :Netscape Cert Type
2549:d=9  hl=2 l=   4 prim: OCTET STRING      [HEX DUMP]:030205A0
2555:d=8  hl=2 l=  11 cons: SEQUENCE
2557:d=9  hl=2 l=   3 prim: OBJECT            :X509v3 Key Usage
2562:d=9  hl=2 l=   4 prim: OCTET STRING      [HEX DUMP]:030205E0
2568:d=5  hl=2 l=  13 cons: SEQUENCE
2570:d=6  hl=2 l=   9 prim: OBJECT            :sha1WithRSAEncryption
2581:d=6  hl=2 l=   0 prim: NULL
2583:d=5  hl=4 l= 257 prim: BIT STRING
2844:d=3  hl=4 l= 553 cons: SET
2848:d=4  hl=4 l= 549 cons: SEQUENCE
2852:d=5  hl=2 l=   1 prim: INTEGER           :01
2855:d=5  hl=3 l= 162 cons: SEQUENCE
2858:d=6  hl=3 l= 154 cons: SEQUENCE
2861:d=7  hl=2 l=  11 cons: SET
2863:d=8  hl=2 l=   9 cons: SEQUENCE
2865:d=9  hl=2 l=   3 prim: OBJECT            :countryName
2870:d=9  hl=2 l=   2 prim: PRINTABLESTRING   :FR
2874:d=7  hl=2 l=  13 cons: SET
2876:d=8  hl=2 l=  11 cons: SEQUENCE
2878:d=9  hl=2 l=   3 prim: OBJECT            :stateOrProvinceName
2883:d=9  hl=2 l=   4 prim: PRINTABLESTRING   :Nord
2889:d=7  hl=2 l=  26 cons: SET
2891:d=8  hl=2 l=  24 cons: SEQUENCE
2893:d=9  hl=2 l=   3 prim: OBJECT            :localityName
2898:d=9  hl=2 l=  17 prim: PRINTABLESTRING   :Villeneuve d'Ascq
2917:d=7  hl=2 l=  46 cons: SET
2919:d=8  hl=2 l=  44 cons: SEQUENCE
2921:d=9  hl=2 l=   3 prim: OBJECT            :organizationName
2926:d=9  hl=2 l=  37 prim: PRINTABLESTRING   :NETASQ - Secure Internet Connectivity
2965:d=7  hl=2 l=  48 cons: SET
2967:d=8  hl=2 l=  46 cons: SEQUENCE
2969:d=9  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
2974:d=9  hl=2 l=  39 prim: PRINTABLESTRING   :NETASQ Firewall Certification Authority
3015:d=6  hl=2 l=   3 prim: INTEGER           :033333 [MODIFIED :)]
3020:d=5  hl=2 l=   9 cons: SEQUENCE
3022:d=6  hl=2 l=   5 prim: OBJECT            :sha1
3029:d=6  hl=2 l=   0 prim: NULL
3031:d=5  hl=2 l=  93 cons: cont [ 0 ]
3033:d=6  hl=2 l=  24 cons: SEQUENCE
3035:d=7  hl=2 l=   9 prim: OBJECT            :contentType
3046:d=7  hl=2 l=  11 cons: SET
3048:d=8  hl=2 l=   9 prim: OBJECT            :pkcs7-data
3059:d=6  hl=2 l=  28 cons: SEQUENCE
3061:d=7  hl=2 l=   9 prim: OBJECT            :signingTime
3072:d=7  hl=2 l=  15 cons: SET
3074:d=8  hl=2 l=  13 prim: UTCTIME           :141021000000Z [MODIFIED :)]
3089:d=6  hl=2 l=  35 cons: SEQUENCE
3091:d=7  hl=2 l=   9 prim: OBJECT            :messageDigest
3102:d=7  hl=2 l=  22 cons: SET
3104:d=8  hl=2 l=  20 prim: OCTET STRING      [HEX DUMP]:[CENSORED :)]
3126:d=5  hl=2 l=  13 cons: SEQUENCE
3128:d=6  hl=2 l=   9 prim: OBJECT            :rsaEncryption
3139:d=6  hl=2 l=   0 prim: NULL
3141:d=5  hl=4 l= 256 prim: OCTET STRING      [HEX DUMP]:[CENSORED :)]

Rappelez-vous S/MIME. Cependant, la partie chiffrée ici se résume à un petit 128 bits chiffrés en bf-cbc (BlowFish en mode CBC). Etant donné le mode CBC, il ne reste que 64 bits de données pertinentes ( les 64 premiers étant réservés au vecteur d’initialisation).

A quoi servent ces 64 bits ? Telle est notre question :

  • Soit c’est une façon de faire de l’authentification asynchrone : seul le possesseur de la clé privée peut déchiffrer ce message et en vérifier la légitimité.
  • Soit c’est une façon de transmettre de l’information chiffrée au boitier, auquel cas ce n’est pas conforme au RGS.
  • Soit… on a rien compris (c’est toujours une hypothèse viable).

Vous penchez pour quoi ?

Publicités

A propos JoMendes

Amateur de mathématiques et d'hexadécimal. Je m'intéresse de près ou de loin suivant mon niveau à tous les sujets de sécurité de l'information.
Cet article, publié dans Cryptographie Asymétrique, est tagué , , , , , . Ajoutez ce permalien à vos favoris.

Un commentaire pour Certificat pour authentifier ou chiffrer

  1. Ping : Le support ne répond plus | Cryptobourrin

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s