840 likes | 1.03k Views
Utilisation du chiffrement sur la plateforme Windows. Jean-Yves Poublan Microsoft France. Agenda. Crypto 101 Chiffrement/Condensé/MAC Cryptographie à clé publique PKIX APIs Crypto Classes .Net CAPICOM CryptoAPI Nouveautés Windows Vista CNG Meilleures pratiques. Chiffrement.
E N D
Utilisation du chiffrement sur la plateforme Windows Jean-Yves PoublanMicrosoft France
Agenda • Crypto 101 • Chiffrement/Condensé/MAC • Cryptographie à clé publique • PKIX • APIs Crypto • Classes .Net • CAPICOM • CryptoAPI • Nouveautés Windows Vista • CNG • Meilleures pratiques
Chiffrement • Symétrique • On chiffre et déchiffre avec la même clé • En principe le moteur est aussi symétrique • Asymétrique • On chiffre et déchiffre avec des clés différentes • Typiquement une clé publique et une clé privée Texte en clair Texte chiffré Texte original Chiffrement Déchiffrement Clef de chiffrement Clef de déchiffrement Source d’entropie
Chiffrement symétriqueClasses .Net • L’application du chiffrement est fait par ICryptoTransform (ICT), une transformation bloc par bloc • La classe CryptoStream gère les transformations au niveau des blocs pour offrir une programmation de type stream Input Block ICryptoTransform Output Block CryptoStream (mode write) Buffer Buffer N’importe quel stream ICryptoTransform
Chiffrement symétriqueCAPICOM • Dans ce cas (AES), la longueur de clé par défaut est 256 • EncryptedData.Algorithm.KeyLength
Génération de clé aléatoire • Caractéristiques cryptographiques • Utiliser le moteur de crypto • Classes .Net: SymmetricAlgorithm.GenerateKey • CryptoAPI: CryptGenRandom, CryptGenKey • CAPICOM: Utilities.GetRandom • Source d’entropie: timing des touches clavier et clics souris, timestamp démarrage du système, nombre de page swap, etc… • Norme NIST FIPS186-2 issue de la norme X9.17 • Ne jamais utiliser RAND (c-runtime) • Avantage • Bonne source d’entropie, en provenance d’un espace étendu • Difficulté • Échange et stockage de la clé
Condensé • Fonction de hachage à sens unique (one-way hash) • Non-invertability: Il est difficile de retrouver le texte original à partir du condensé • Collision-intractability: Il est difficile de trouver deux textes qui donnent le même condensé • Le condensé peut identifier un texte en clair à la manière d’une empreinte • Permet d’identifier un texte, sans en connaître le contenu… • Caractéristiques d’une bonne fonction de hash • Absence de collisions connues • Divergence - Deux textes en clair peu différents produisent des condensés très différents Texte (longueur arbitraire) FonctionSens Unique Empreinte ou condensé (longueur n octets, typiquement 16 ou 20)
CondenséCAPICOM • Algorithme par défaut SHA1 • Propriété HashedData.Algorithm
CondenséCryptoAPI • SHA1 – NIST – 160 bits/20 octets
Dérivation d’une cléA partir d’un mot de passe ou d’un secret utilisateur • Password Based Key Derivation • Standard pour dériver une clé à partir d’un mot de passe • PKCS#5 – RFC 2898 • Itérations, Salt, Algorithme de hash • PBKDF1 • Classe .Net PasswordDeriveBytes • PBKDF2 • Classe .Net Rfc2898DeriveBytes (.Net Framework 2.0) • Avantage • On ne stocke pas le secret (il est dans l’esprit de l’utilisateur) • Inconvénient • Source d’entropie en provenance d’un espace restreint • Celui des mots de passe en général
Salt • Valeur aléatoire, non secrète, qu’on inclut en entrée de l’algorithme de dérivation de mot de passe • Rend l’attaque de dictionnaire difficile • On ne peut facilement pré-calculer tous les dérivés possibles pour un dictionnaire • Dérivation de clé de chiffrement à partir d’un mot de passe • Vérificateurs de mots de passe • Le salt est unique/aléatoire pour chaque mot de passe. Le salt et PBKDF(password, salt, iter) sont stockés dans la base • On ne peut reconnaître le fait que deux utilisateurs ont le même mot de passe en observant la base des comptes
Dérivation de clé • La valeur résultant de la dérivation n’est pas forcement d’une longueur égale à la clé de l’algorithme • CryptDeriveKey(HCRYPTPROV, ALG_ID, HCRYPTHASH …) • Si condensé plus long, on extrait les bits dont on a besoin • Hash SHA1 – 160 bits, pour AES 128 • Si condensé moins long, on l’étire selon un algorithme connu • Hash SHA1 – 160 bits, pour AES 256 • Rfc2898DeriveBytes.GetBytes(keysize)
Authenticité des messages Hash du texte original et d’un secret partagé • Permet de d’assurer de l’authenticité et de l’intégrité du message • HMAC – keyed hash • RFC 2104 • MD5 ou SHA1 • Soit M le message, K la clé de session, H la fonction de hash: • opad (outer padding) constitué des octets 0x5C • ipad (inner padding) constitué des octets 0x36 • HMAC = H(K xor opad, H(K xor ipad, M)) • Indispensable avec RC4 • Meilleure pratique: utiliser deux secrets indépendants • Un pour le chiffrement, et un pour le code d’authenticité
Chainage transformations cryptoClasses .Net • On peut enchaîner les transformations cryptos en spécifiant un CryptoStream en sortie d’un CryptoStream • Exemple: • Le premier CryptoStream effectue le chiffrement • Les données en sorties sont dirigées vers le deuxième CryptoStream qui effectue le calcul du code MAC CryptoStream CryptoStream CS Buffer Buffer AES Stream HMAC-SHA
Chiffrement clé publiqueClasses .Net • Obtention de la clé publique • ExportParameters, ImportParameters
Chiffrement RSA • RSA résout le problème de l’échange des secrets mais en introduit un autre • Authenticité de la clé publique
Certificats PKI X509 Name: “Jane Doe” Public Key: Certificate Serial #: 29483756 public Valid From: 6/18/99 Valid To 6/18/01 Signed: CA • 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 • Contient le nom de l’entité détentrice • Le certificat atteste que la clé publique appartient bien à l’entité • L’utilisateur de la clé publique (qui n’est pas son détenteur) fait confiance à l’autorité de certification • L’autorité de certification a bien authentifié le détenteur et s’est bien assuré qu’il/elle possédait la clé privée avant de délivrer le certificat
Chiffrement PKIX • Standard PKCS#7 – RFC 2315 /CMS – RFC 2630 • Signature des messages • Signature attachée • Signature détachée • Multiples signatures et imbrications • Confidentialité des messages • Envelopped data • Classes .Net • System.Security.Cryptography.X509Certificates • X509Certificate, X509Store, X509Chain, etc… • System.Security.Cryptography.Pkcs • Support de PKIX largement enrichi avec 2.0 • A défaut, WSE 3.0 • CAPICOM - privilégie PKI X509 • CryptoAPIv2 • CertOpenStore, CertFindCertificateInStore, etc… • CryptEncryptMessage/CryptSignMessage, etc… • Support de PKIX très étendu
System.Security.Cryptography.Pkcs • EnvelopedCMS • Message chiffré, ou chiffré/signé • SignedCMS • Message signé • ContentInfo • Contenu sur lequel s’applique le chiffrement/signature • RecipientInfo • Pour qui le message est chiffré • CMSSigner • Par qui le message est signé
Signature PKIXCAPICOM • L’objet Signer n’a pas de certificat • CAPICOM affiche la boîte de dialogue de choix d’un certificat à partir du magasin personnel
Signature PKIXCAPICOM • Pour vérifier • SignedData.Verify • Vérifie la validité de la signature et du certificat • Validation de la chaîne et révocation
Choix de l’API • Classes .Net • Environnement .Net Framework (managed) • .Net Framework v2.0 enrichi et maintenant très complet • Signature XML • Utiliser WSE si nécessaire • CAPICOM • PKIX – signature/chiffrement • Administration, déploiement, scripts PKIX • Applications Web • CryptoAPIv2 • PKIX, certificats, messages PKCS#7/CMS • CryptoAPIv1/CNG • Contrôle très fin • Mise en œuvre de protocoles/performance • Programmation « bas niveau » • CSPs/algorithmes spécifiques
Classes .Net • Algorithmes “dans la boite” • Hashes: SHA-1, SHA-256/384/512, RIPEMD160 (en C#), MD5 • Asymétrique: RSA, DSA • Symétrique: AES (en C#), TripleDES, DES, RC2 • Keyed MACs: HMAC-SHA1, HMAC-SHA256… • RNGs: RNG basé sur CryptoAPI • Plusieurs classes d’implémentation encapsulent CryptoAPI • Permet de bénéficier de la certification FIPS-140 des CSP du système • Modèle objet extensible – permet l’ajout d’algorithmes • Configuration système crypto définit les implémentations par défaut pour chaque abstraction • Par défaut, les instanciations utilisent des options fortes • Rijndael aes = Rijndael.Create() • Clé 256, mode CBC, IV aléatoire
Classes .NetModèle objet Classe de baseabstraite Symmetric Algorithm Classes d’algorithme abstraites TripleDES AES NouvelAlgorithme Classes de mise en œuvre TripleDESCrypto ServiceProvider (CryptoAPI) AESManaged (C#) Implémentation AES Hardware
CAPICOM • Librairie COM redistribuable – CAPICOM.DLL • http://www.microsoft.com/downloads • Rechercher « CAPICOM » • Version 2.0.0.3 • Windows 2000, Windows 98, Windows ME, Windows NT, Windows XP/Windows 2003 • Nombreux exemples • Documentation dans MSDN • Encapsulation de CryptoAPI • Orientée PKI X509 • Orientée environnements applicatif VB, VBS (scripts), ASP, DHTML • Le moyen le plus facile d’incorporer de la signature et chiffrement PKIX dans une application
Utilisations CAPICOM • Applications • Signature PKIX • Format PKCS#7 • Avec certificat logiciel, smartcard, token • Vérification signature avec vérification révocation • Chiffrement données • A base de mot de passe ou secret partagé • A base de PKIX (enveloping) • Gestion certificats et magasins de certificats • Scripts administration et déploiement PKI • Possibilité d’utiliser des combinaisons • CAPICOM/CryptoAPI/Classes .Net
CryptoAPIUne architecture en providers CSP BaseClés Applications Application Application Classes .Net CAPICOM Crypto API Gestion certificats etproviders de stockage Opérations cryptographiques CAPI 1 CAPI 2 StockageCertificats
CryptoAPIv1 • Algorithmes • AES128, AES192, AES256, 3DES, DES, RC2, RC4 • RSA, DH, DSA • SHA1, HMAC-SHA1, MD5, HMAC-MD5, MD4, MD2 There are 15 providers: Type 01 - Gemplus GemSAFE Card CSP v1.0 Type 01 - Infineon SICRYPT Base Smart Card CSP Type 01 - Microsoft Base Cryptographic Provider v1.0 Type 13 - Microsoft Base DSS and Diffie-Hellman Cryptographic Provider Type 03 - Microsoft Base DSS Cryptographic Provider Type 01 - Microsoft Base Smart Card Crypto Provider Type 18 - Microsoft DH SChannel Cryptographic Provider Type 01 - Microsoft Enhanced Cryptographic Provider v1.0 Type 13 - Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider Type 24 - Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype) Type 05 - Microsoft Exchange Cryptographic Provider v1.0 Type 12 - Microsoft RSA SChannel Cryptographic Provider Type 01 - Microsoft Strong Cryptographic Provider Type 01 - Schlumberger Cryptographic Service Provider Type 01 - Windows for Smart Cards Cryptographic Service Provider Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype): RC2, Key sizes = 128 (def), 40, 128, Protocols supported 0x00000000 RC4, Key sizes = 128 (def), 40, 128, Protocols supported 0x00000000 DES, Key sizes = 56 (def), 56, 56, Protocols supported 0x00000000 3DES TWO KEY, Key sizes = 112 (def), 112, 112, Protocols supported 0x00000000 3DES, Key sizes = 168 (def), 168, 168, Protocols supported 0x00000000 SHA-1, Key sizes = 160 (def), 160, 160, Protocols supported 0x00000020 MD2, Key sizes = 128 (def), 128, 128, Protocols supported 0x00000020 MD4, Key sizes = 128 (def), 128, 128, Protocols supported 0x00000020 MD5, Key sizes = 128 (def), 128, 128, Protocols supported 0x00000020 SSL3 SHAMD5, Key sizes = 288 (def), 288, 288, Protocols supported 0x00000000 MAC, Key sizes = 0 (def), 0, 0, Protocols supported 0x00000000 RSA_SIGN, Key sizes = 1024 (def), 384, 16384, Protocols supported 0x00000030 RSA_KEYX, Key sizes = 1024 (def), 384, 16384, Protocols supported 0x00000030 HMAC, Key sizes = 0 (def), 0, 0, Protocols supported 0x00000000 AES 128, Key sizes = 128 (def), 128, 128, Protocols supported 0x00000000 AES 192, Key sizes = 192 (def), 192, 192, Protocols supported 0x00000000 AES 256, Key sizes = 256 (def), 256, 256, Protocols supported 0x00000000
CryptoAPILien entre certificat du titulaire et clé privée Basecertificats CSP BaseClés • Stockée avec le certificat se trouve une référence vers la clé privée • Extended Properties CERT_KEY_PROV_INFO_PROP_ID • Structure CRYPT_KEY_PROV_INFO: Contient toutes les informations nécessaires pour acquérir un contexte sur le CSP hébergeant la clé privée - typiquement les paramètres de CryptAcquireContext • CryptAcquireCertificatePrivateKey Contexte de certificat Certificat (signé par CA) CERT_KEY_PROV_INFO_PROP_ID CRYPT_KEY_PROV_INFO ContainerName ProvName ProvType ProvParam … Propriétés
Protection de la clé privée • DPAPI • CryptProtectData, CryptUnprotectData • ProtectedData (.Net Framework 2.0) • Chiffrement 3DES • Clé dérivée d’une clé maitre 512 bits • Clé maitre chiffrée avec clé dérivée du mot de passe • PBKDF2(SHA1(password)) • Entropie supplémentaire possible • Seul l’utilisateur qui a protégé peut accéder • Comptes du domaine • Récupération contrôleur de domaine • Compte local • Password Recovery Disk Compte du domaine La protection est effective quelque soit le mode de syskey Compte local La protection n’est effective qu’avec SYSKEY mode 2 ou 3, a cause de la présence des LMHash (configuration par défaut Windows XP). Même en l’absence des LMHash la protection est moins sure que pour un compte du domaine de par la présence des NTHash.
CryptoAPIBases, ou magasins de certificats • Par utilisateur, machine, ou service • Plugin MMC Certificates • Certutil.exe
Crypto Next Generation • Refonte du moteur de chiffrement • Remplacement à long terme et progressif de CAPI 1 • Permettre la mise en œuvre et l’utilisation de la crypto d’une manière plus « agile » • Facilité d’introduire de nouveaux algorithmes • Facilité de remplacer des implémentations d’algorithmes par de nouvelles implémentations Les algorithmes et implémentations dépendent de l’environnementSecteur public, Secteur privé, Défense, Politique, Géographie La sureté des algorithmes et implémentations s’altère avec tempsMD5 -> SHA1 -> SHA2RSA -> ECC
Crypto Next Generation • Architecture extensible et adaptable par pluggins • Enrichissement, ou remplacement • Granularité au niveau de l’algorithme ou du stockage • Algorithm Provider • Key Storage Provider (KSP) • Pas de signature MS comme pour les CSP • Chiffrement mode utilisateur et mode noyau • Permet une configuration de la cryptographie au niveau de l’entreprise et de la machine • Crypto Operator • Principe d’isolation des clés et audit • Conformité Critères Communs et FIPS • Disponible Windows Vista/LH, mais aussi down-level platforms Windows XP et Windows Server 2003
Crypto Next Generation • Supporte de base un sur-ensemble des algorithmes déjà offerts par les CSP MS de CAPI 1 • Chiffrement symétrique et asymétrique, hachage, RNG, échange de clé, signature • Support PKCS#1 v2.1 pour le wrapping des clés privées • Exposant public RSA > 32 bits • Chiffrement à courbe elliptique et hachage renforcé • ECDH (échange de clé), ECDSA (signature) • Courbes NIST P-256, P-384, P-521 • Implémentation MS Research • SHA-2 (256, 384, 512) • Conformité Suite-B et recommandations gouvernements pays OTAN • http://www.nsa.gov/ia/industry/crypto_suite_b.cfm
Suite-B“AES, ECC and stronger hashes” Suite-B est un standard de la NSA qui spécifie les suites d'algorithmes cryptographiques à utiliser pour la sécurité des communications du gouvernement US. Suite-B exige l'utilisation de AES, avec ECC pour l'échange de clés et les signatures digitales, ainsi que les hash forts de type SHA-256 et SHA-384. D'autres exigences sont spécifiées par les standards FIPS tels que l'isolation des clés, etc... Plusieurs gouvernements des pays de l’OTAN mandatent aussi l’utilisation des algorithmes à base de courbes elliptiques pour le chiffrement ainsi que la possibilité de contrôler les algorithmes et leurs implémentation au sein de la plateforme…
Crypto Next GenerationTrois sortes de providers ou « pluggins » Protocol Providers Applications Symmetric Crypto Router Hash Router Asymmetric Crypto Router Signature Router Key Exchange Router RNG Router Key Storage Router Key Storage Providers Primitive Providers BCrypt* NCrypt*
Crypto Next GenerationProviders de « primitives » Protocol Providers Applications Key Storage Providers Primitive Providers • Mise en œuvre de algorithmes • Chiffrement symétrique • Hachage • Chiffrement asymétrique • Echange de clé • Signature • Génération de nombre aléatoire • Pas de clés persistantes, ni d’isolation de clé • S’exécute in-process • BCrypt* • bcrypt.h • Mode user – bcrypt.dll • Mode noyau – ksecdd.sys
Primitives BCrypt* • BCryptEnumAlgorithms • BCryptEnumProviders • BCryptFreeBuffer • BCryptCloseAlgorithmProvider • BCryptCreateHash • BCryptDecrypt • BCryptDestroyHash • BCryptDestroyKey • BCryptEncrypt • BCryptExportKey • BCryptFinishHash • BCryptGenerateSymmetricKey • BCryptFinalizeKeyPair • BCryptGenerateKeyPair • BCryptSecretAgreement • BCryptImportKeyPair • BCryptGenRandom • BCryptGetProperty • BCryptHashData • BCryptImportKey • BCryptOpenAlgorithmProvider • BCryptSetProperty • BCryptSign • BCryptVerifySignature • Modèle de programmation: • La mémoire est fournie par l’appelant
Crypto Next GenerationProviders de stockage de clé Protocol Providers Applications Key Storage Providers Primitive Providers • Stockage permanent des clés publiques/privées • Isolation de la clé privée au sein d’un processus sécurise (plutôt que le processus de l’application) • E.g. LSASS • Typiquement, s’exécute hors processus appelant • Interface vers le stockage matériel • HSM, Smartcard • NCrypt* • ncrypt.h • Mode user seulement • ncrypt.dll • Exemples de stockage • Profile utilisateur DPAPI • Active Directory • HSM, Smartcard