La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Utilisation du chiffrement sur la plateforme Windows

Présentations similaires


Présentation au sujet: "Utilisation du chiffrement sur la plateforme Windows"— Transcription de la présentation:

1 Utilisation du chiffrement sur la plateforme Windows
Jean-Yves Poublan Microsoft France

2 Agenda Crypto 101 APIs Crypto Nouveautés Windows Vista
Chiffrement/Condensé/MAC Cryptographie à clé publique PKIX APIs Crypto Classes .Net CAPICOM CryptoAPI Nouveautés Windows Vista CNG Meilleures pratiques

3 Chiffrement Chiffrement Déchiffrement Symétrique Asymétrique
Texte en clair Texte chiffré Texte original Chiffrement Déchiffrement Clef de chiffrement Clef de déchiffrement Source d’entropie 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

4 Chiffrement symétrique Classes .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

5 Chiffrement symétrique Classes .Net

6 Chiffrement symétrique CAPICOM
Dans ce cas (AES), la longueur de clé par défaut est 256 EncryptedData.Algorithm.KeyLength

7 Chiffrement symétrique CryptoAPI

8 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é

9 Condensé Fonction Sens Unique
Texte (longueur arbitraire) Fonction Sens Unique Empreinte ou condensé (longueur n octets, typiquement 16 ou 20) 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

10 Condensé Classes .Net

11 Condensé Classes .Net

12 Condensé CAPICOM Algorithme par défaut SHA1
Propriété HashedData.Algorithm

13 Condensé CryptoAPI SHA1 – NIST – 160 bits/20 octets

14 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

15 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

16 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)

17 Dérivation d’une clé Classes .Net

18 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é

19 Chainage transformations crypto Classes .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

20 Authenticité des messages Classes .Net

21 Chiffrement clé publique Classes .Net
Obtention de la clé publique ExportParameters, ImportParameters

22 Signature RSA Classes .Net

23 Vérification de signature RSA Classes .Net

24 Chiffrement RSA RSA résout le problème de l’échange des secrets mais en introduit un autre Authenticité de la clé publique

25 Certificats PKI X509 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 public Name: “Jane Doe” Valid From: 6/18/99 Valid To 6/18/01 Signed: CA Certificate Serial #: Public Key:

26 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

27 Chiffrement PKIX Classes .Net

28 Signature PKIX Classes .Net

29 System.Security.Cryptography.Pkcs EnvelopedCMS SignedCMS ContentInfo
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é

30 Signature PKIX CAPICOM
L’objet Signer n’a pas de certificat CAPICOM affiche la boîte de dialogue de choix d’un certificat à partir du magasin personnel

31 Signature PKIX CAPICOM
Pour vérifier SignedData.Verify Vérifie la validité de la signature et du certificat Validation de la chaîne et révocation

32 Choix de l’API Classes .Net CAPICOM CryptoAPIv2 CryptoAPIv1/CNG
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

33 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

34 Classes .Net Modèle objet
Classe de base abstraite Symmetric Algorithm Classes d’algorithme abstraites TripleDES AES Nouvel Algorithme Classes de mise en œuvre TripleDESCrypto ServiceProvider (CryptoAPI) AESManaged (C#) AES Hardware Implémentation

35 CAPICOM Librairie COM redistribuable – CAPICOM.DLL
Rechercher « CAPICOM » Version 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

36 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

37 CryptoAPI Une architecture en providers
Applications Application Application Classes .Net CAPICOM Crypto API Gestion certificats et providers de stockage Opérations cryptographiques CAPI 2 CAPI 1 Stockage Certificats CSP Base Clés

38 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 0x RC4, Key sizes = 128 (def), 40, 128, Protocols supported 0x DES, Key sizes = 56 (def), 56, 56, Protocols supported 0x 3DES TWO KEY, Key sizes = 112 (def), 112, 112, Protocols supported 0x 3DES, Key sizes = 168 (def), 168, 168, Protocols supported 0x SHA-1, Key sizes = 160 (def), 160, 160, Protocols supported 0x MD2, Key sizes = 128 (def), 128, 128, Protocols supported 0x MD4, Key sizes = 128 (def), 128, 128, Protocols supported 0x MD5, Key sizes = 128 (def), 128, 128, Protocols supported 0x SSL3 SHAMD5, Key sizes = 288 (def), 288, 288, Protocols supported 0x MAC, Key sizes = 0 (def), 0, 0, Protocols supported 0x RSA_SIGN, Key sizes = 1024 (def), 384, 16384, Protocols supported 0x RSA_KEYX, Key sizes = 1024 (def), 384, 16384, Protocols supported 0x HMAC, Key sizes = 0 (def), 0, 0, Protocols supported 0x AES 128, Key sizes = 128 (def), 128, 128, Protocols supported 0x AES 192, Key sizes = 192 (def), 192, 192, Protocols supported 0x AES 256, Key sizes = 256 (def), 256, 256, Protocols supported 0x

39 CryptoAPI Lien entre certificat du titulaire et clé privée
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 Base certificats Contexte de certificat CSP Base Clés Certificat (signé par CA) CERT_KEY_PROV_INFO_PROP_ID CRYPT_KEY_PROV_INFO ContainerName ProvName ProvType ProvParam Propriétés

40 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.

41 CryptoAPI Bases, ou magasins de certificats
Par utilisateur, machine, ou service Plugin MMC Certificates Certutil.exe Nom CryptoAPI Nom d’affichage Description My Personal Les certificats du titulaire Root Trusted Root Certification Authorities Les racines de confiance CA Intermediate Certification Authorities Cache des CA intermédiaires et des listes de révocation UserDS Active Directory User Object Les certificats du titulaire dans Active Directory – attribut du compte, userCertificate Autres…

42 Nouveautés Windows Vista

43 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’environnement Secteur public, Secteur privé, Défense, Politique, Géographie La sureté des algorithmes et implémentations s’altère avec temps MD5 -> SHA1 -> SHA2 RSA -> ECC

44 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

45 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

46 Suite-B “AES, ECC and stronger hashes”
Customer Target Assurance Level General Classified Basic Assurance Homeland Security Critical National Infrastructure Privacy Symmetric Encryption AES-256 AES-128 or 256 AES-128 Key Establishment ECDH or MQV-384 ECDH or MQV-256 or 384 ECDH or MQV-256 Key Wrap (Internal & OTAR) Product Dependent AES Key Wrap Hash SHA-384 SHA-256 Message Signature ECDSA-384 ECDSA-256 Certificate Signature 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…

47 Crypto Next Generation Trois sortes de providers ou « pluggins »
Applications Protocol Providers Symmetric Crypto Router Hash Router Asymmetric Crypto Router Signature Router Key Exchange Router RNG Router Key Storage Router Primitive Providers Key Storage Providers BCrypt* NCrypt*

48 Crypto Next Generation Providers de « primitives »
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 Protocol Providers Applications Key Storage Providers Primitive Providers

49 Primitives BCrypt* Modèle de programmation:
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

50 Crypto Next Generation Providers de stockage de clé
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 Protocol Providers Applications Key Storage Providers Primitive Providers

51 Crypto Next Generation Providers de protocole
Fournit les services crypto spécifiques à un protocole SSL – permet de rajouter de nouvelles suites crypto, ou de remplacer la mise en œuvre de suites existantes S/MIME Protocol Providers Applications Key Storage Providers Primitive Providers

52 Calcul de condensé CNG

53 Meilleures pratiques et recommandations Sens pratique?

54 Sécurité Gestion des secrets Nécessite des protocoles complexes
La cryptologie n’est pas la panacée… Gestion des secrets Partage/échange/distribution/stockage des secrets Nécessite des protocoles complexes Les failles de sécurité sont souvent dans la mise en œuvre des protocoles N’élimine pas la nécessité des relations de confiance Comporte des risques de perte des données Sujet à de multiples stratégies d’attaques Texte chiffré, texte clair connu, texte clair choisi, texte chiffré choisis … mais néanmoins indispensable

55 Best practices Analyse des menaces avant de faire appel aux procédés de chiffrement Erreur fréquente Chiffrement pour des menaces qui n’existent pas Absence de chiffrement pour des menaces qui existent On chiffre les informations, mais on oublie de mettre en œuvre la sécurité de base (contrôle d’accès, etc…) L’attaquant passe par la porte d’entrée Il invoque les services qui procèdent au déchiffrement « Tout est systématiquement encrypté avec AES » « Ah bon! Et la clé ? » « Non, y’a pas de clé je t’assure, c’est tout l’avantage… »

56 Best practices Utiliser les algorithmes, protocoles, formats, et procédés standard Ne pas implémenter son propre algorithme Utiliser algorithmes répandus et éprouvés Utiliser les Classes .Net et CAPICOM Fixe un cadre sûr pour l’utilisation de la crypto Gestion des clés La partie chiffrement est facile La gestion des clés est difficile Evaluer la pertinence de mettre en œuvre une stratégie de récupération

57 Attention aux valeurs par défaut
Algorithmes Longueurs des clés Mode de chainage Valeurs réputées sures, jusqu’à nouvel ordre… 3DES, AES 128, AES 256 SHA1, SHA256… RSA 1024, 2048 Mode de chainage CBC

58 Protection des secrets
Utiliser la classe .Net SecureString (.Net Framework 2.0) pour tout ce qui est données sensibles Ne pas utiliser String pour les mots de passe Privilégier DPAPI pour les secrets persistants CryptProtectData, CryptUnprotectData ProtectedData (.Net Framework 2.0) Secrets éphémères CryptProtectMemory, CryptUnprotectMemory ProtectedMemory (.Net Framework 2.0) Mieux -> ne pas avoir à manipuler/stocker de secrets! Utiliser la sécurité des plateformes E.g. Integrated Windows Carte à puce

59 Best practice - conclusion
Revue de conception, revue de code Toujours avoir un second avis sur la conception d’un système mettant en œuvre de la crypto Se faire assister d’experts en cryptologie … ne pas faire de chiffrement directement Contextes de sécurité SSPI SslStream, NegotiateStream (.Net Framework 2.0) Autorisations, droits d’accès, rôles Technologie RMS Cryptography secures data, not applications

60 Questions?

61

62 Transparents supplémentaires

63 Enrôlement X509 Situation actuelle – téléchargement ActiveX dans la page HTML Fourniture Certificate Services ActiveX XEnroll Interfaces ICEnroll4 et IEnroll4 Activex SCrdEnroll Pratiquement la même chose Gestion de la carte a puce et de l’enrôlement par un operateur Windows Vista/Longhorn Interfaces COM natives CertEnroll Pas de téléchargement Requêtes de certificats (PKCS#10, PKCS#7, et CMC) Clés publiques/privées Extensions de certificats / Attributs / Propriétés

64 Enrôlement X509 Classes de Requetes Classes Crypto
Classes gestion attributs IDispatch IDispatch IDispatch ICspAlgorithm IX509Attribute IX509CertificateRequest ICspAlgorithms IX509Extension IX509CertificateRequestPkcs10 ICspInformation IX509ExtensionKeyUsage IX509CertificateRequestCertificate IX509ExtensionEnhancedKeyUsage IX509CertificateRequestPkcs7 ICspInformations IX509ExtensionTemplateName IX509CertificateRequestCmc IcspStatus IX509ExtensionTemplate Enrollment Classes ICspStatuses IX509Attributes IDispatch IX509PublicKey IX509AttributeExtensions IX509Enrollment IX509PrivateKey IX509Enrollments ICryptAttribute IX509EnrollmentStatus ICryptAttributes

65 DIMS (Digital ID Management Service)
Permet de mettre à disposition de l’utilisateur d’un domaine AD ses credentiels d’une station à une autre Certificats dans le magasin « MY » et « Request » %USERPROFILE%\AppData\Microsoft\SystemCertificates\My %USERPROFILE%\AppData\Microsoft\SystemCertificates\Request Clés privées des CSP MS et des KSP CNG %USERPROFILE%\AppData\Microsoft\Crypto\RSA %USERPROFILE%\AppData\Microsoft\Crypto\DSS %USERPROFILE%\AppData\Microsoft\Crypto\Keys Clés maitres DPAPI %USERPROFILE%\AppData\Microsoft\Protect Base des credentiels Credman %USERPROFILE%\AppData\Microsoft\Credentials Les credentiels sont stockés par le service DIMS dans l’objet User dans Active Directory ms-PKI-AccountCredentials ms-PKI-DPAPIMasterKey (clés maitre DPAPI) Configurable par Group Policy Par exemple pour ne pas répliquer les clés de signature

66 Chiffrement RSA On ne chiffre pas le message directement
Le message est chiffré avec une clé de session (symétrique) La clé de session est générée aléatoirement On chiffre la clé de session avec la clé publique RSA On déchiffre la clé de session avec la clé privée RSA On peut ensuite déchiffrer le message (symétrique) Néanmoins, CryptoAPI permet de chiffrer des données arbitraires avec RSA On peut donc, si on le souhaite, appliquer RSA directement sur des données

67 Signature RSA On calcule un condensé du message (SHA-1)
On chiffre le condensé avec la clé privée RSA Le résultat est la signature Standard PKCS#1 – RSA Data Security Pour vérifier la signature On déchiffre la signature avec la clé publique RSA On calcule le condensé du message On compare avec la valeur déchiffrée

68 Signature RSA Classes .Net

69 Signature RSA Classes .Net - Vérification

70 Crypto Next Generation
SChannel (SSL) Protocol API Win32 Application CNG SSL Router MS SSL Provider Key Storage API RNG Router Symmetric Crypto Router Hash Router Asymmetric Crypto Router Signature Router Key Exchange Router Key Storage Router RNG RC4 3DES SHA RSA DSS DH DES AES MD5 ECDSA ECDH Legacy Application Smart Card Hardware Security Module Key Isolation Process Key Isolation Service CAPI 1.0 Legacy CryptoAPI (rsaenh.dll) Software Storage Provider(s) Asymmetric Crypto Router Signature Router Key Exchange Router RSA DSS DH ECDSA ECDH

71 Crypto Next Generation
CryptoConfig BCryptResolveProviders InterfaceID 0x (symmetric encryption) 0x (hashing) 0x (asymmetric encryption) 0x (secret agreement) 0x (signing) 0x (RNG) 0x (Microsoft KSP)

72 Crypto Next Generation
Configuration niveau machine ou niveau entreprise Configuration de la base avec ACLs pour le Crypto Operator Tables dans la base de registre HKLM/SOFTWARE/Microsoft/Cryptography/CNG/Config/Domain HKLM/SOFTWARE/Microsoft/Cryptography/CNG/Config/Local HKLM/SOFTWARE/Microsoft/Cryptography/CNG/Providers

73 Développer un provider CNG
Coder et tester l’algorithme /* Implementation details of super secret encryption algorithm */ void XorBuffer(BYTE *pbIn, BYTE *pbOut, DWORD cbBufSize, BYTE *pbKey, DWORD cbKeySize) { UNREFERENCED_PARAMETER(cbKeySize); UNREFERENCED_PARAMETER(pbKey); memcpy(pbOut, pbIn, cbBufSize); for ( DWORD dwBufIndex = 0; dwBufIndex < cbBufSize; dwBufIndex++) for ( DWORD dwKeyIndex = 0; dwKeyIndex < cbKeySize; dwKeyIndex++) pbOut[dwBufIndex] ^= pbKey[dwKeyIndex]; }

74 Développer un provider CNG
Wrapper l’algorithme dans BCryptEncryptFn NTSTATUS WINAPI SymmEncrypt( __inout BCRYPT_KEY_HANDLE hKey, __in_bcount(cbInput) PUCHAR pbInput, __in ULONG cbInput, __in_opt VOID *pPaddingInfo, __inout_bcount_opt(cbIV) PUCHAR pbIV, __in ULONG cbIV, __out_bcount_part_opt(cbOutput, *pcbResult) PUCHAR pbOutput, __in ULONG cbOutput, __out ULONG *pcbResult, __in ULONG dwFlags) { NTSTATUS Status = STATUS_UNSUCCESSFUL; SYMM_CIPHER_KEY *pKey = ValidateKeyHandle(hKey); *pcbResult = cbInput; // do the encryption XorBuffer(pbInput, pbOutput, cbInput, pKey->rgbKey, SYMM_CIPHER_KEY_SIZE); return STATUS_SUCCESS; }

75 Développer un provider CNG
Ecrire les autres fonctions éventuelles, dont la fonction d’ouverture du provider et nommage de l’algorithme #define SYMM_CIPHER_ALGID L"XOR" struct SYMM_CIPHER_ALGORITHM { SYMM_HEADER Header; DWORD cbKey; }; NTSTATUS WINAPI SymmOpenCipherProvider( __out BCRYPT_ALG_HANDLE *phAlgorithm, __in LPCWSTR pszAlgId, __in DWORD dwFlags) if (wcscmp(pszAlgId, SYMM_CIPHER_ALGID)) Status = STATUS_NOT_SUPPORTED; goto Cleanup; } pAlgorithm = (SYMM_CIPHER_ALGORITHM*)MALLOC(sizeof(SYMM_CIPHER_ALGORITHM)); if(NULL == pAlgorithm) Status = STATUS_NO_MEMORY; pAlgorithm->Header.dwMagic = SYMM_CIPHER_ALG_MAGIC; pAlgorithm->Header.cbLength = sizeof(SYMM_CIPHER_ALGORITHM); pAlgorithm->cbKey = sizeof(SYMM_CIPHER_KEY); //return the handle *phAlgorithm = (BCRYPT_ALG_HANDLE)pAlgorithm; Status = STATUS_SUCCESS; Cleanup: return Status;

76 Développer un provider CNG
Définir la table de fonctions du provider // //function pointer table for Cipher provider BCRYPT_CIPHER_FUNCTION_TABLE SymmCipherFunctionTable = { BCRYPT_CIPHER_INTERFACE_VERSION_1, SymmOpenCipherProvider, SymmGetCipherProperty, SymmSetCipherProperty, SymmCloseCipherProvider, SymmGenerateKey, SymmEncrypt, SymmDecrypt, SymmImportKey, SymmExportKey, SymmDuplicateKey, SymmDestroyKey, };

77 Développer un provider CNG
Enregistrer le provider PWSTR rgpszAlgIDs[1] = {SYMM_CIPHER_ALGID}; CRYPT_INTERFACE_REG Interface1 = {BCRYPT_CIPHER_INTERFACE, CRYPT_LOCAL, 1, rgpszAlgIDs}; PCRYPT_INTERFACE_REG rgpInterfaces[1] = {&Interface1}; CRYPT_IMAGE_REG UM = {L"cngsymm.dll", 1, rgpInterfaces}; CRYPT_PROVIDER_REG Provider = { 0, NULL, &UM, NULL}; // register provider1 for new algid hResult = BCryptRegisterProvider(SYMM_CIPHER_PROVIDER_NAME, 0, &Provider);

78 Développer un provider CNG
Utiliser et invoquer le provider d’algorithme Status = BCryptOpenAlgorithmProvider(&hAlg, L”XOR”, NULL, 0); Status = BCryptGenerateSymmetricKey(hAlg, &hKey, pbKeyObj, cbKeyObj, rgbHash, SYMM_CIPHER_KEY_SIZE, Status = BCryptEncrypt( hKey, rgbBufIn, cbSize, 0, rgbBufOut, &cbResult,

79 Best practices La longueur des clefs n’a qu’une importance toute relative -> marketing (« on fait du 256 ») Mais, néanmoins source de vulnérabilité On veillera à utiliser des clés symétriques suffisamment longues et des clés RSA au modulo suffisamment élevé AES 256/RSA 1024 Ralentir l’attaquant (itérations sur les condensés)

80 Best practices Utiliser des longueurs de clés cohérentes avec le reste du système cryptographique Erreur fréquente On dérive une clé de longueur conséquente à partir d’un mot de passe faible, pensant être en sécurité Selon le calcul de l’entropie des mots de passe (Shannon 1948), longueurs minimum d’un mot de passe pour l’équivalent d’une clé: Scénario Caractères Clé 128 bits Code PIN 10 (0-9) 40 Alpha sans case 26 (A-Z) 28 Alpha avec case 52 (A-Z, a-z) 23 Alpha et numérique 62 (A-Z, a-z, 0-9) 22 Alpha-numériquet et ponctuations 93 (A-Z, a-z, 0-9, et ponctuations) 20

81 Best practices Utiliser des mots de passe forts
Mettre en œuvre une politique de mot de passe Longueur minimum Complexité Changement fréquent Ne pas utiliser de mots de passe Cartes à puce Something you know and something you have…

82 Best practices Utiliser des longueurs de clé et modulus cohérents entre eux Erreur fréquente Utilisation de AES 128 bits avec RSA modulo 512 Équivalences entre tailles de clé Clé symétrique Modulo RSA 70 947 80 1228 100 1926 150 4575 250 14596

83 Best practices Choisir l’algorithme et la longueur des clés en cohérence avec valeur temporelle de l’information Pour une information qui doit rester secrète quelques minutes Peut-être que 3DES (168 bit) est adéquat Pour une information qu’il faut protéger pendant des mois et des années On préférera AES 256 et RSA 1024, ou même 2048 Ne pas réutiliser le keystream Attention clé RC4 Authentifier (HMAC) les textes chiffrés avec un algorithme de type stream Sensible au bit toggling


Télécharger ppt "Utilisation du chiffrement sur la plateforme Windows"

Présentations similaires


Annonces Google