Utilisation du chiffrement sur la plate-forme Windows

La journée du 4 Mai était consacrée aux développeurs.

Ce fut l’occasion pour nous d’assister à la session “Utilisation du chiffrement sur la plate-forme Windows” présentée par Jean-Yves POUBLAN, consultant principal Microsoft.

Présentation du chiffrement moderne

Pour rappel, la méthode de chiffrement est modélisable par schéma suivant :

Le chiffrement se présente sous deux formes :

  • Symétrique
    • Chiffrement et déchiffrement avec la même clé
    • Moteur général aussi symétrique
  • Asymétrique
    • Chiffrement et déchiffrement avec des clés différentes (modèle clé publique et clé privée)

La session présentait ainsi principalement le chiffrement symétrique et les avantages/inconvénients de ses deux types de procédés :

  • Caractéristiques du Stream :
    • RC4
    • Notion de keystream
    • Algorythme performant
    • Nécessite un code MAC (Message of Authentification Code)
    • Support via CryptoAPI et CAPICOM et non par les classes .Net
  • Caractéristiques du Bloc :
    • Procédé de substitutions et permutations
    • Mise en oeuvre et utilisation plus robuste
    • Moins performant
    • Longueur de clé : RC2 / 3DES / AES – Rijndael

Le chiffrement symétrique dans les classes .Net peut être représenté par le schéma suivant (application de ) :

Dérivation d’une clé

La dérivation d’une clé peut nécessité des procédés de hash pour condenser la clé. Les différentes classes ont pour caractéristique :

  • CryptoAPI
    • MD5 – RSA Data Security – 128 bits / 16 octets
    • SHA1 – NIST – 160 bits / 20 octets
  • Classes .Net
    • SHA-256, SHA-384, SHA-512 – NIST
  • CAPICOMB
    • Par defaut SHA1 (propriété HashedData.Algoritm)

La dérivation d’une clé utilise typiquement le hash MD5 ou SHA1 du secret utilisateur, ou mieux, une série d’itérations successives (méthode CryptDeriveKey( HCRYPTPOV, ALG_ID, HCRYPTHASH). Avantage : on ne stocke pas le secret; Inconvénient : Entropie faible et vulnérabilité face aux attaques de dictionnaire.

Afin de combler cette faille, nous pouvons appliquer un qui rend l’attaque de dictionnaire plus difficile en ajoutant une valeur aléatoire, non secrète, au mot de passe avant le calcul du condensé.

Le standard pour la dérivation d’une clé en matière de passwordbased keyderivation est PKCS#5 et PBKDF

Authenticité des messages

Un hash du texte original et d’un secret partagé permet d’assurer l’authenticité et l’intégrité du message. Utilisation alors de HMAC – keyedhash : RFC 2104, MD5 ou SHA1 et indispensable avec RC4.

La meilleure pratique est alors d’utiliser deux secrets indépendants, un pour le chiffrement et un pour le code d’authenticité.

L’authenticité des messages applique donc le fonctionnement suivant :

Il est donc important de posséder un mot de passe fort puisque toute l’architecture repose sur le ‘Master Key’

Signature et chiffrement RSA

Il s’agit de calculer un condensé du message (SHA1 ou MD5) avec un chiffrement avec la clé privée RSA (standard PKCS#1 – RSA Data Security).

Avec le chiffrement RSA, on ne chiffre pas le message directement mais le message est chiffré avec une clé de session (symétrique) générée aléatoirement et elle-même est chiffrée avec la clé publique RSA.

RSA résout donc le problème de l’échange des secrets mais introduit le probléme de l’authenticité de la clé publique. Il faut alors faire appel aux certificats PKI X509 qui atteste l’authenticité de la clé. Cependant la validité du certificat se fait par la seule confiance de l’utilisateur envers l’autorité de certificats.

RSA

L’acronyme RSA vient du nom de ses pères, Rivest, Shamir, et Adelman, qui créèrent un algorithme en 1978, cet algorithme est encore très fortement utilisé dans les infrastructures nécessitant un maximum de sécurité pour le chiffrement des données, armées, centrales nucléaires, grands comptes industriels.

Ce procédé ne chiffre pas votre message en direct mais passe par l’intermédiaire d’une clé de session, qui est elle-même générée par la clé publique RSA de façon aléatoire.

Cette clé est ensuite déchiffrée avec la clé privé RSA. Détaillons le fonctionnement du fonctionnement de RSA.

La particularité de RSA est la factorisation des nombres entiers qui est relativement complexe avec ce procédé.

Le concept RSA :

Prenons deux nombres premiers a et b, et c un entier. Il faut que c réponde à la caractéristique suivant, être premier avec tel que c soit premier avec ((a-1)*(b-1)).Nous venons de constituer la clé privée (a ,b,c) reposant sur trois entités.

La clé publique est générée à partir de la clé privé et sera composée de 2 entités (x ,z), où :

x = a * b

z = 1/c mod((a-1)(b-1))

A ce stade, nous décidons d’envoyer un message, celui-ci doit-être premier avec la clé x, au quel cas le déchiffrement ne pourra pas avoir lieu, un des concept de cet algorithme est de se baser sur les modulos d’après le théorème d’Euler.

Soit M, le message à envoyer. Il faut que le message M soit premier avec la clé n. En effet, le déchiffrement repose sur le théorème d’Euler stipulant que si M et n sont premiers entre eux, alors :

Si M et x sont premiers entre eux alors :

M

phi(x)

mod (x)

Phi(x) étant l’indicateur d’Euler, et valant dans le cas présent (a-1)*(b-1).

Il est donc nécessaire que le message ne soit pas un multiple de a, de b, ou de x.

Supposons qu’un utilisateur nommé SAM veuille envoyer un message T à un utilisateur nommé GUILLAUME.

Etape 1 : SAM doit alors au préalable se procurer la clé publique (X ,Z)

Etape 2 : La clé publique de SAM calcule le chiffrement du message T (Chiffrement de T = TC = T

Z

mod (X)) , le message chiffré TC est ensuite envoyé à GUILLAUME

Etape 3 : A la réception du message GUILLAUME décrypte le message grâce à sa clé privé (A ,B,C)

T = T

Z*C

mod (X) = TC

C

mod (X)

CryptoAPI

Pour toute demande de certificat, l’ API Microsoft Cryptographic Application Program Interface, plus connue sous le nom de CryptoAPI, est sollicitée.

Il y a ensuite une transmission de votre demande vers un FSC (fournisseur de services cryptographiques) matériel (smart card) ou logiciel qui permettra la génération de votre paire de clé.

Dans le cas d’un FSC logiciel, la clé privée est alors crypté et ensuite stockée dans la base de registre, dans le cas d’une carte à puce la clé privée est stockée sur la puce. La clé publique est quant à elle copiée sur l’autorité de certification (serveur IAS par exemple), l’autorité de certification vérifie que la demande de certificat est valide et délivre le certificat au demandeur en ayant au préalable signé numériquement le certificat à l’aide de sa propre clé privée.

Certificats PKI X509

La Public Key Infrastructure ou infrastructure à clés publiques est l’outil indispensable pour mieux valider et protéger nos données.

La PKI est un ensemble de composants ayant pour but de gérer les clés de signature (ou clés de confidentialité) d’utilisateurs.

La PKI fournit un ensemble de services dont :

  • L’enregistrement d’un utilisateur ou d’un objet et la génération de certificats
  • La révocation de certificats
  • Le renouvellement de certificats
  • L’archivage et recouvrement de clés de chiffrement

La PKI délivre des certificats digitaux qui contiennent les informations nécessaires aux vérifications d’identité et de droits d’opération (authentification, signature, chiffrement, IPSec, etc…) et la délivrance de ces certificats sont définis selon la politique de certification (PC) de l’organisation. Notons que

la PKI s’appuie sur des standards qui permettent d’intégrer des solutions techniques homogènes et interopérables.

Point importants

– La clé publique est liée à une entité (détenteur) par un certificat

– Le certificat est signé par une autorité de certification (CA) contient la clé publique et le nom de l’entité détentrice

– Le certificat atteste que la clé publique appartient bien à l’entité

– L’utilisateur de la clé publique (pas son détenteur) fait confiance à l’autorité de certification

L’autorité de certification authentifie le demandeur et s’assure que celui-ci possède la clé privée avant de délivrer le certificat.

Signature XML

La signature XML est un mécanisme pour signer des documents ou portions de documetns XML.

XMLDSIG – standard joint IETF/W3C

Pour utiliser WSE pour la gestion des certificats et des magasins de certificats, consultez :https://msdn.microsoft.com/webservices/building/wse/default.aspx

Meilleures pratiques

La meilleure méthode de mise en place d’un chiffrement doit respecter certains points :

  • Bonne gestion de secrets
  • Mise en place de protocoles complexes
  • Facteur de risque humain – Relation de confiance
  • Analyser les menaces
  • Avoir une architecture fiable (contrôle cohérent des accès) avant de procéder à du chiffrement
  • Mettre en place des longueurs de clés cohérentes par rapport au contenu (durée de vie / taille)
  • Utiliser avant tout les standards existants
  • Se faire assister d’experts en cryptologie

Conclusion

Finalement, la cryptologie est donc un domaine très complexe qui limite mais ne supprime pas tous les risques, gardons à l’esprit que le chiffrement ne remplace pas une architecture correctement désignée, implémentée, installée et administrée ; néanmoins la stratégie de cryptographie, notamment via les PKI, permettra à votre infrastructure d’obtenir une couche de sécurité supplémentaire.

Cette présentation du contenu de la session ne peut pas remplacer le fait d’assister à cette conférence. Le but étant ici de faire ressortir l’essentiel des idées explicitées par le speaker Jean-Yves POUBLAN. Cependant cette description vous encouragera peut-être à vous inscrire au prochain événement Microsoft :o)

Pour les personnes désirant approfondir le sujet, vous trouverez des informations très intéressantes sur le site de Microsoft à cette adresse : https://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconcryptographyoverview.asp