Upload
ozanne-gomes
View
143
Download
18
Embed Size (px)
Citation preview
Utilisation du Utilisation du chiffrement sur la chiffrement sur la
plateforme plateforme WindowsWindows
Jean-Yves PoublanJean-Yves PoublanMicrosoft FranceMicrosoft France
AgendaAgenda Crypto 101Crypto 101
Chiffrement/Condensé/MACChiffrement/Condensé/MAC Cryptographie à clé publiqueCryptographie à clé publique PKIXPKIX
APIs CryptoAPIs Crypto Classes .NetClasses .Net CAPICOMCAPICOM CryptoAPICryptoAPI
Nouveautés Windows VistaNouveautés Windows Vista CNGCNG
Meilleures pratiquesMeilleures pratiques
3
ChiffrementChiffrement
SymétriqueSymétrique On chiffre et déchiffre avec la même cléOn chiffre et déchiffre avec la même clé En principe le moteur est aussi symétriqueEn principe le moteur est aussi symétrique
AsymétriqueAsymétrique On chiffre et déchiffre avec des clés différentesOn chiffre et déchiffre avec des clés différentes
Typiquement une clé publique et une clé privéeTypiquement une clé publique et une clé privée
Chiffrement DéchiffrementTexte en clair
Clef de chiffrement
Texte chiffré
Texte original
Clef de déchiffrement
Source d’entropie
4
ICryptoTransform
Input Block
Output Block
CryptoStream (mode write)IC
ryp
toT
ran
sfo
rm
Buffer BufferN’importe quel
stream
Chiffrement symétriqueChiffrement symétriqueClasses .NetClasses .Net
L’application du chiffrement est L’application du chiffrement est fait par ICryptoTransform (ICT), fait par ICryptoTransform (ICT), une transformation bloc par blocune transformation bloc par bloc
La classe La classe CryptoStreamCryptoStream gère les gère les transformations au niveau des transformations au niveau des blocs pour offrir une blocs pour offrir une programmation de type streamprogrammation de type stream
5
Chiffrement symétriqueChiffrement symétriqueClasses .NetClasses .Net
6
Chiffrement symétriqueChiffrement symétriqueCAPICOMCAPICOM
Dans ce cas (AES), la longueur de clé par défaut Dans ce cas (AES), la longueur de clé par défaut est 256est 256 EncryptedData.Algorithm.KeyLengthEncryptedData.Algorithm.KeyLength
7
Chiffrement symétriqueChiffrement symétriqueCryptoAPICryptoAPI
8
Génération de clé aléatoireGénération de clé aléatoire Caractéristiques cryptographiquesCaractéristiques cryptographiques
Utiliser le moteur de cryptoUtiliser le moteur de crypto Classes .Net: Classes .Net: SymmetricAlgorithm.GenerateKeySymmetricAlgorithm.GenerateKey CryptoAPI: CryptoAPI: CryptGenRandom, CryptGenKeyCryptGenRandom, CryptGenKey CAPICOM: CAPICOM: Utilities.GetRandomUtilities.GetRandom Source d’entropie: timing des touches clavier et clics Source d’entropie: timing des touches clavier et clics
souris, timestamp démarrage du système, nombre de souris, timestamp démarrage du système, nombre de page swap, etc…page swap, etc…
Norme NIST FIPS186-2 issue de la norme Norme NIST FIPS186-2 issue de la norme X9.17X9.17 Ne jamais utiliser RAND (c-runtime)Ne jamais utiliser RAND (c-runtime)
AvantageAvantage Bonne source d’entropie, en provenance d’un espace Bonne source d’entropie, en provenance d’un espace
étenduétendu
DifficultéDifficulté Échange et stockage de la cléÉchange et stockage de la clé
9
CondenséCondensé
Fonction de hachage à sens unique (one-way hash)Fonction de hachage à sens unique (one-way hash) Non-invertabilityNon-invertability: Il est difficile de retrouver le texte original : Il est difficile de retrouver le texte original
à partir du condenséà partir du condensé Collision-intractabilityCollision-intractability: Il est difficile de trouver deux textes : Il est difficile de trouver deux textes
qui donnent le même condensé qui donnent le même condensé Le condensé peut identifier un texte en clair à la manière Le condensé peut identifier un texte en clair à la manière
d’une empreinted’une empreinte Permet d’identifier un texte, sans en connaître le contenu…Permet d’identifier un texte, sans en connaître le contenu…
Caractéristiques d’une bonne fonction de hashCaractéristiques d’une bonne fonction de hash Absence de collisions connuesAbsence de collisions connues Divergence - Deux textes en clair peu différents produisent Divergence - Deux textes en clair peu différents produisent
des condensés très différentsdes condensés très différents
FonctionSens Unique
Texte (longueur arbitraire)
Empreinte ou condensé (longueur n octets,
typiquement 16 ou 20)
10
CondenséCondenséClasses .NetClasses .Net
11
CondenséCondenséClasses .NetClasses .Net
12
CondenséCondenséCAPICOMCAPICOM
Algorithme par défaut SHA1Algorithme par défaut SHA1 Propriété HashedData.AlgorithmPropriété HashedData.Algorithm
13
CondenséCondenséCryptoAPICryptoAPI
SHA1 – NIST – 160 bits/20 octetsSHA1 – NIST – 160 bits/20 octets
14
Dérivation d’une cléDérivation d’une cléA partir d’un mot de passe ou d’un secret utilisateurA partir d’un mot de passe ou d’un secret utilisateur
Password Based Key DerivationPassword Based Key Derivation Standard pour dériver une clé à partir d’un mot de passeStandard pour dériver une clé à partir d’un mot de passe PKCS#5 – RFC 2898PKCS#5 – RFC 2898
Itérations, Salt, Algorithme de hashItérations, Salt, Algorithme de hash PBKDF1PBKDF1
Classe .Net Classe .Net PasswordDeriveBytesPasswordDeriveBytes PBKDF2PBKDF2
Classe .Net Classe .Net Rfc2898DeriveBytesRfc2898DeriveBytes (.Net Framework 2.0) (.Net Framework 2.0)
AvantageAvantage On ne stocke pas le secret (il est dans l’esprit de On ne stocke pas le secret (il est dans l’esprit de
l’utilisateur)l’utilisateur)
InconvénientInconvénient Source d’entropie en provenance d’un espace restreintSource d’entropie en provenance d’un espace restreint Celui des mots de passe en généralCelui des mots de passe en général
15
SaltSalt
Valeur aléatoire, non secrète, qu’on inclut en entrée Valeur aléatoire, non secrète, qu’on inclut en entrée de l’algorithme de dérivation de mot de passede l’algorithme de dérivation de mot de passe Rend l’attaque de dictionnaire difficileRend l’attaque de dictionnaire difficile On ne peut facilement pré-calculer tous les dérivés On ne peut facilement pré-calculer tous les dérivés
possibles pour un dictionnairepossibles pour un dictionnaire
Dérivation de clé de chiffrement à partir d’un mot de Dérivation de clé de chiffrement à partir d’un mot de passepasse
Vérificateurs de mots de passeVérificateurs de mots de passe Le Le saltsalt est unique/aléatoire pour chaque mot de passe. Le est unique/aléatoire pour chaque mot de passe. Le
saltsalt et PBKDF(password, salt, iter) sont stockés dans la et PBKDF(password, salt, iter) sont stockés dans la basebase
On ne peut reconnaître le fait que deux utilisateurs ont le On ne peut reconnaître le fait que deux utilisateurs ont le même mot de passe en observant la base des comptesmême mot de passe en observant la base des comptes
16
Dérivation de cléDérivation de clé
La valeur résultant de la dérivation n’est pas La valeur résultant de la dérivation n’est pas forcement d’une longueur égale à la clé de forcement d’une longueur égale à la clé de l’algorithmel’algorithme
CryptDeriveKey(CryptDeriveKey(HCRYPTPROVHCRYPTPROV, , ALG_IDALG_ID, , HCRYPTHASHHCRYPTHASH …) …) Si condensé plus long, on extrait les bits dont on a besoinSi condensé plus long, on extrait les bits dont on a besoin
Hash SHA1 – 160 bits, pour AES 128Hash SHA1 – 160 bits, pour AES 128
Si condensé moins long, on l’étire selon un algorithme Si condensé moins long, on l’étire selon un algorithme connuconnu Hash SHA1 – 160 bits, pour AES 256Hash SHA1 – 160 bits, pour AES 256
Rfc2898DeriveBytes.GetBytes(keysize)Rfc2898DeriveBytes.GetBytes(keysize)
17
Dérivation d’une cléDérivation d’une cléClasses .NetClasses .Net
18
Authenticité des messagesAuthenticité des messagesHash du texte original et d’un secret partagéHash du texte original et d’un secret partagé
Permet de d’assurer de l’authenticité et de l’intégrité Permet de d’assurer de l’authenticité et de l’intégrité du messagedu message
HMAC – keyed hashHMAC – keyed hash RFC 2104RFC 2104 MD5 ou SHA1MD5 ou SHA1 Soit M le message, K la clé de session, H la fonction de hash:Soit M le message, K la clé de session, H la fonction de hash:
opad (outer padding) constitué des octets 0x5Copad (outer padding) constitué des octets 0x5C ipad (inner padding) constitué des octets 0x36ipad (inner padding) constitué des octets 0x36 HMAC = H(K xor opad, H(K xor ipad, M))HMAC = H(K xor opad, H(K xor ipad, M))
Indispensable avec RC4Indispensable avec RC4 Meilleure pratique: utiliser deux secrets Meilleure pratique: utiliser deux secrets
indépendantsindépendants Un pour le chiffrement, et un pour le code d’authenticitéUn pour le chiffrement, et un pour le code d’authenticité
19
CryptoStreamA
ES
Buffer Buffer
CS
HM
AC
-SH
A
Stream
Chainage transformations cryptoChainage transformations cryptoClasses .NetClasses .Net
On peut enchaîner les transformations cryptos en spécifiant un On peut enchaîner les transformations cryptos en spécifiant un CryptoStream en sortie d’un CryptoStreamCryptoStream en sortie d’un CryptoStream
Exemple:Exemple: Le premier CryptoStream effectue le chiffrementLe premier CryptoStream effectue le chiffrement Les données en sorties sont dirigées vers le deuxième Les données en sorties sont dirigées vers le deuxième
CryptoStream qui effectue le calcul du code MACCryptoStream qui effectue le calcul du code MAC
CryptoStream
20
Authenticité des messagesAuthenticité des messagesClasses .NetClasses .Net
21
Chiffrement clé publiqueChiffrement clé publiqueClasses .NetClasses .Net
Obtention de la clé publiqueObtention de la clé publique ExportParametersExportParameters, , ImportParametersImportParameters
22
Signature RSASignature RSAClasses .NetClasses .Net
23
Vérification de signature RSAVérification de signature RSAClasses .NetClasses .Net
24
Chiffrement RSAChiffrement RSA
RSA résout le problème de l’échange des secrets RSA résout le problème de l’échange des secrets mais en introduit un autremais en introduit un autre Authenticité de la clé publiqueAuthenticité de la clé publique
25
Certificats PKI X509Certificats PKI X509
La clé publique est liée à une La clé publique est liée à une entité (détenteur) par un certificatentité (détenteur) par un certificat
Le certificat est signé par une Le certificat est signé par une autorité de certification (CA)autorité de certification (CA) Contient la clé publiqueContient la clé publique Contient le nom de l’entité Contient le nom de l’entité
détentricedétentrice
Le certificat atteste que la clé Le certificat atteste que la clé publique appartient bien à l’entitépublique appartient bien à l’entité
L’utilisateur de la clé publique (qui L’utilisateur de la clé publique (qui n’est pas son détenteur) fait n’est pas son détenteur) fait confiance à l’autorité de confiance à l’autorité de certificationcertification L’autorité de certification a bien L’autorité de certification a bien
authentifié le détenteur et s’est authentifié le détenteur et s’est bien assuré qu’il/elle possédait la bien assuré qu’il/elle possédait la clé privée avant de délivrer le clé privée avant de délivrer le certificatcertificat
public
Name: “Jane Doe”
Valid From: 6/18/99
Valid To 6/18/01
Signed: CA
Certificate Serial #: 29483756
Public Key:
26
Chiffrement PKIXChiffrement PKIX Standard PKCS#7 – RFC 2315 /CMS – RFC 2630Standard PKCS#7 – RFC 2315 /CMS – RFC 2630
Signature des messagesSignature des messages Signature attachéeSignature attachée Signature détachéeSignature détachée Multiples signatures et imbricationsMultiples signatures et imbrications
Confidentialité des messagesConfidentialité des messages Envelopped dataEnvelopped data
Classes .NetClasses .Net System.Security.Cryptography.X509CertificatesSystem.Security.Cryptography.X509Certificates
X509Certificate, X509Store, X509Chain, etc…X509Certificate, X509Store, X509Chain, etc… System.Security.Cryptography.PkcsSystem.Security.Cryptography.Pkcs Support de PKIX largement enrichi avec 2.0Support de PKIX largement enrichi avec 2.0 A défaut, WSE 3.0A défaut, WSE 3.0
CAPICOM - privilégie PKI X509CAPICOM - privilégie PKI X509 CryptoAPIv2CryptoAPIv2
CertOpenStore, CertFindCertificateInStore, etc…CertOpenStore, CertFindCertificateInStore, etc… CryptEncryptMessage/CryptSignMessage, etc…CryptEncryptMessage/CryptSignMessage, etc… Support de PKIX très étenduSupport de PKIX très étendu
27
Chiffrement PKIXChiffrement PKIXClasses .NetClasses .Net
28
Signature PKIXSignature PKIXClasses .NetClasses .Net
29
System.Security.Cryptography.Pkcs System.Security.Cryptography.Pkcs
EnvelopedCMSEnvelopedCMS Message chiffré, ou chiffré/signé Message chiffré, ou chiffré/signé
SignedCMSSignedCMS Message signéMessage signé
ContentInfoContentInfo Contenu sur lequel s’applique le chiffrement/signatureContenu sur lequel s’applique le chiffrement/signature
RecipientInfoRecipientInfo Pour qui le message est chiffréPour qui le message est chiffré
CMSSignerCMSSigner Par qui le message est signéPar qui le message est signé
30
Signature PKIXSignature PKIXCAPICOMCAPICOM
L’objet Signer n’a pas de certificatL’objet Signer n’a pas de certificat CAPICOM affiche la boîte de dialogue de choix d’un CAPICOM affiche la boîte de dialogue de choix d’un
certificat à partir du magasin personnelcertificat à partir du magasin personnel
31
Signature PKIXSignature PKIXCAPICOMCAPICOM
Pour vérifierPour vérifier SignedData.VerifySignedData.Verify
Vérifie la validité de la signature et du certificatVérifie la validité de la signature et du certificat Validation de la chaîne et révocationValidation de la chaîne et révocation
32
Choix de l’APIChoix de l’API Classes .NetClasses .Net
Environnement .Net Framework (Environnement .Net Framework (managedmanaged)) .Net Framework v2.0 enrichi et maintenant très complet.Net Framework v2.0 enrichi et maintenant très complet Signature XMLSignature XML Utiliser WSE si nécessaireUtiliser WSE si nécessaire
CAPICOMCAPICOM PKIX – signature/chiffrementPKIX – signature/chiffrement Administration, déploiement, scripts PKIXAdministration, déploiement, scripts PKIX Applications WebApplications Web
CryptoAPIv2CryptoAPIv2 PKIX, certificats, messages PKCS#7/CMSPKIX, certificats, messages PKCS#7/CMS
CryptoAPIv1/CNGCryptoAPIv1/CNG Contrôle très finContrôle très fin Mise en œuvre de protocoles/performanceMise en œuvre de protocoles/performance Programmation « bas niveau »Programmation « bas niveau » CSPs/algorithmes spécifiquesCSPs/algorithmes spécifiques
33
Classes .NetClasses .Net
Algorithmes “dans la boite”Algorithmes “dans la boite” Hashes: Hashes: SHA-1, SHA-256/384/512, RIPEMD160SHA-1, SHA-256/384/512, RIPEMD160 (en C#), MD5 (en C#), MD5 Asymétrique: Asymétrique: RSARSA, DSA , DSA Symétrique: Symétrique: AESAES (en C#), TripleDES, DES, RC2 (en C#), TripleDES, DES, RC2 Keyed MACs: Keyed MACs: HMAC-SHA1, HMAC-SHA256HMAC-SHA1, HMAC-SHA256… … RNGs: RNG basé sur CryptoAPIRNGs: RNG basé sur CryptoAPI
Plusieurs classes d’implémentation encapsulent CryptoAPIPlusieurs classes d’implémentation encapsulent CryptoAPI Permet de bénéficier de la certification FIPS-140 des CSP du Permet de bénéficier de la certification FIPS-140 des CSP du
systèmesystème Modèle objet extensible – permet l’ajout d’algorithmesModèle objet extensible – permet l’ajout d’algorithmes Configuration système crypto définit les implémentations par Configuration système crypto définit les implémentations par
défaut pour chaque abstractiondéfaut pour chaque abstraction Par défaut, les instanciations utilisent des options fortesPar défaut, les instanciations utilisent des options fortes
Rijndael aes = Rijndael.Create()Rijndael aes = Rijndael.Create() Clé 256, mode CBC, IV aléatoireClé 256, mode CBC, IV aléatoire
34
Classes .NetClasses .NetModèle objetModèle objet
SymmetricSymmetricAlgorithmAlgorithm
TripleDESTripleDES AESAES
TripleDESCryptoTripleDESCryptoServiceProviderServiceProvider
(CryptoAPI)(CryptoAPI)
AESManagedAESManaged(C#)(C#)
NouvelNouvelAlgorithmeAlgorithme
ImplémentationImplémentation
Classe de baseClasse de baseabstraiteabstraite
Classes Classes d’algorithme d’algorithme abstraitesabstraites
Classes de mise en œuvre Classes de mise en œuvre
AESAESHardwareHardware
35
CAPICOMCAPICOM
Librairie COM redistribuable – CAPICOM.DLLLibrairie COM redistribuable – CAPICOM.DLL http://www.microsoft.com/downloadshttp://www.microsoft.com/downloads
Rechercher « CAPICOM »Rechercher « CAPICOM » Version 2.0.0.3Version 2.0.0.3 Windows 2000, Windows 98, Windows ME, Windows NT, Windows 2000, Windows 98, Windows ME, Windows NT,
Windows XP/Windows 2003Windows XP/Windows 2003 Nombreux exemplesNombreux exemples Documentation dans MSDNDocumentation dans MSDN
Encapsulation de CryptoAPIEncapsulation de CryptoAPI Orientée PKI X509Orientée PKI X509 Orientée environnements applicatif VB, VBS (scripts), ASP, Orientée environnements applicatif VB, VBS (scripts), ASP,
DHTMLDHTML
Le moyen le plus facile d’incorporer de la signature Le moyen le plus facile d’incorporer de la signature et chiffrement PKIX dans une applicationet chiffrement PKIX dans une application
36
Utilisations CAPICOMUtilisations CAPICOM
ApplicationsApplications Signature PKIXSignature PKIX
Format PKCS#7Format PKCS#7 Avec certificat logiciel, smartcard, tokenAvec certificat logiciel, smartcard, token Vérification signature avec vérification révocationVérification signature avec vérification révocation
Chiffrement donnéesChiffrement données A base de mot de passe ou secret partagéA base de mot de passe ou secret partagé A base de PKIX (A base de PKIX (envelopingenveloping))
Gestion certificats et magasins de certificatsGestion certificats et magasins de certificats
Scripts administration et déploiement PKIScripts administration et déploiement PKI
Possibilité d’utiliser des combinaisonsPossibilité d’utiliser des combinaisons CAPICOM/CryptoAPI/Classes .NetCAPICOM/CryptoAPI/Classes .Net
37
Classes .NetClasses .Net
CryptoAPICryptoAPIUne architecture en providersUne architecture en providers
CSP
BaseClés
Crypto APICrypto API
Gestion certificats etproviders de stockage
Gestion certificats etproviders de stockage
Opérations cryptographiquesOpérations cryptographiques
StockageCertificats
ApplicationApplication
ApplicationApplicationApplicationsApplications
CAPICOMCAPICOM
38
CryptoAPIv1CryptoAPIv1 AlgorithmesAlgorithmes
AES128, AES192, AES256AES128, AES192, AES256, 3DES, DES, RC2, RC4, 3DES, DES, RC2, RC4 RSARSA, DH, DSA, DH, DSA SHA1, HMAC-SHA1SHA1, HMAC-SHA1, MD5, HMAC-MD5, MD4, MD2, MD5, HMAC-MD5, MD4, MD2
There are 15 providers:Type 01 - Gemplus GemSAFE Card CSP v1.0Type 01 - Infineon SICRYPT Base Smart Card CSPType 01 - Microsoft Base Cryptographic Provider v1.0Type 13 - Microsoft Base DSS and Diffie-Hellman Cryptographic ProviderType 03 - Microsoft Base DSS Cryptographic ProviderType 01 - Microsoft Base Smart Card Crypto ProviderType 18 - Microsoft DH SChannel Cryptographic ProviderType 01 - Microsoft Enhanced Cryptographic Provider v1.0Type 13 - Microsoft Enhanced DSS and Diffie-Hellman Cryptographic ProviderType 24 - Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)Type 05 - Microsoft Exchange Cryptographic Provider v1.0Type 12 - Microsoft RSA SChannel Cryptographic ProviderType 01 - Microsoft Strong Cryptographic ProviderType 01 - Schlumberger Cryptographic Service ProviderType 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
39
CryptoAPICryptoAPILien entre certificat du titulaire et clé privéeLien entre certificat du titulaire et clé privée
Stockée avec le certificat se trouve une référence Stockée avec le certificat se trouve une référence vers la clé privéevers la clé privée Extended Properties CERT_KEY_PROV_INFO_PROP_IDExtended Properties CERT_KEY_PROV_INFO_PROP_ID
Structure CRYPT_KEY_PROV_INFO: Contient toutes les Structure CRYPT_KEY_PROV_INFO: Contient toutes les informations nécessaires pour acquérir un contexte sur le informations nécessaires pour acquérir un contexte sur le CSP hébergeant la clé privée - typiquement les paramètres CSP hébergeant la clé privée - typiquement les paramètres de de CryptAcquireContextCryptAcquireContext
CryptAcquireCertificatePrivateKeyCryptAcquireCertificatePrivateKey
Basecertificats
Certificat(signé par CA)
Propriétés
Contexte de certificat
CRYPT_KEY_PROV_INFO ContainerName ProvName ProvType ProvParam …
CERT_KEY_PROV_INFO_PROP_IDCSP
BaseClés
40
Protection de la clé privéeProtection de la clé privée
DPAPIDPAPI CryptProtectDataCryptProtectData, , CryptUnprotectDataCryptUnprotectData ProtectedDataProtectedData (.Net Framework 2.0) (.Net Framework 2.0)
Chiffrement 3DESChiffrement 3DES Clé dérivée d’une clé maitre 512 bitsClé dérivée d’une clé maitre 512 bits Clé maitre chiffrée avec clé dérivée du mot de passeClé maitre chiffrée avec clé dérivée du mot de passe
PBKDF2(SHA1(PBKDF2(SHA1(passwordpassword)))) Entropie supplémentaire possibleEntropie supplémentaire possible
Seul l’utilisateur qui a protégé peut accéderSeul l’utilisateur qui a protégé peut accéder Comptes du domaineComptes du domaine
Récupération contrôleur de domaineRécupération contrôleur de domaine
Compte localCompte local Password Recovery DiskPassword 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
CryptoAPICryptoAPIBases, ou magasins de certificatsBases, ou magasins de certificats
Par utilisateur, machine, ou servicePar utilisateur, machine, ou service PluginPlugin MMC MMC CertificatesCertificates Certutil.exeCertutil.exe
Nom CryptoAPI Nom d’affichage Description
My Personal Les certificats du titulaireLes 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…
NouveautésNouveautésWindows VistaWindows Vista
43
Crypto Next GenerationCrypto Next Generation
Refonte du moteur de chiffrementRefonte du moteur de chiffrement Remplacement à long terme et progressif de CAPI 1Remplacement à long terme et progressif de CAPI 1
Permettre la mise en œuvre et l’utilisation de la Permettre la mise en œuvre et l’utilisation de la crypto d’une manière plus « agile »crypto d’une manière plus « agile » Facilité d’introduire de nouveaux algorithmesFacilité d’introduire de nouveaux algorithmes Facilité de remplacer des implémentations d’algorithmes Facilité de remplacer des implémentations d’algorithmes
par de nouvelles implémentationspar 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 -> SHA2
RSA -> ECC
44
Crypto Next GenerationCrypto Next Generation
Architecture extensible et adaptable par Architecture extensible et adaptable par plugginspluggins Enrichissement, ou remplacementEnrichissement, ou remplacement Granularité au niveau de l’algorithme ou du stockageGranularité au niveau de l’algorithme ou du stockage Algorithm ProviderAlgorithm Provider Key Storage Provider (KSP)Key Storage Provider (KSP) Pas de signature MS comme pour les CSPPas de signature MS comme pour les CSP
Chiffrement mode utilisateur et mode noyauChiffrement mode utilisateur et mode noyau Permet une configuration de la cryptographie au Permet une configuration de la cryptographie au
niveau de l’entreprise et de la machineniveau de l’entreprise et de la machine Crypto OperatorCrypto Operator
Principe d’isolation des clés et auditPrincipe d’isolation des clés et audit Conformité Critères Communs et FIPSConformité Critères Communs et FIPS
Disponible Windows Vista/LH, mais aussi Disponible Windows Vista/LH, mais aussi down-down-level platformslevel platforms Windows XP et Windows Server Windows XP et Windows Server 20032003
45
Crypto Next GenerationCrypto Next Generation
Supporte de base un sur-ensemble des Supporte de base un sur-ensemble des algorithmes déjà offerts par les CSP MS de CAPI 1algorithmes déjà offerts par les CSP MS de CAPI 1 Chiffrement symétrique et asymétrique, hachage, RNG, Chiffrement symétrique et asymétrique, hachage, RNG,
échange de clé, signatureéchange de clé, signature Support PKCS#1 v2.1 pour le Support PKCS#1 v2.1 pour le wrappingwrapping des clés privées des clés privées Exposant public RSA > 32 bitsExposant public RSA > 32 bits
Chiffrement à courbe elliptique et hachage Chiffrement à courbe elliptique et hachage renforcérenforcé ECDHECDH (échange de clé), (échange de clé), ECDSAECDSA (signature) (signature)
Courbes NIST P-256, P-384, P-521Courbes NIST P-256, P-384, P-521 Implémentation MS ResearchImplémentation MS Research
SHA-2SHA-2 (256, 384, 512) (256, 384, 512) Conformité Suite-B et recommandations Conformité Suite-B et recommandations
gouvernements pays OTANgouvernements pays OTAN http://www.nsa.gov/ia/industry/crypto_suite_b.cfmhttp://www.nsa.gov/ia/industry/crypto_suite_b.cfm
46
Suite-BSuite-B“AES, ECC and stronger hashes”“AES, ECC and stronger hashes”
Customer Target Assurance Level
General Classified Basic Assurance
Homeland SecurityCritical National Infrastructure
Privacy
Symmetric Symmetric EncryptionEncryption
AES-256AES-256 AES-128 or 256AES-128 or 256 AES-128AES-128
Key EstablishmentKey Establishment ECDH ECDH oror MQV-384 MQV-384 ECDH ECDH oror MQV-256 MQV-256 or 384or 384
ECDH ECDH oror MQV-256 MQV-256
Key Wrap (Internal Key Wrap (Internal & OTAR)& OTAR)
Product Product DependentDependent
AES Key WrapAES Key Wrap AES Key WrapAES Key Wrap
HashHash SHA-384SHA-384 SHA-256SHA-256 SHA-256SHA-256
Message SignatureMessage Signature ECDSA-384ECDSA-384 ECDSA-256ECDSA-256 ECDSA-256ECDSA-256
Certificate Certificate SignatureSignature
ECDSA-384ECDSA-384 ECDSA-256ECDSA-256 ECDSA-256ECDSA-256
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 GenerationCrypto Next GenerationTrois sortes de providers ou « pluggins »Trois sortes de providers ou « pluggins »
Protocol Protocol ProvidersProviders
ApplicationsApplications
Key Storage Key Storage ProvidersProviders
Primitive Primitive ProvidersProviders
SymmetriSymmetric Crypto c Crypto RouterRouter
Hash Hash RouterRouter
AsAsymmetrymmetric Crypto ic Crypto RouterRouter
Signature Signature
RouterRouter
Key Key Exchange Exchange
RouterRouter
RNG RNG RouterRouter
Key Key Storage Storage RouterRouter
BCrypt* NCrypt*
48
Crypto Next GenerationCrypto Next GenerationProviders de « primitives »Providers de « primitives »
Mise en œuvre de algorithmesMise en œuvre de algorithmes Chiffrement symétriqueChiffrement symétrique HachageHachage Chiffrement asymétriqueChiffrement asymétrique Echange de cléEchange de clé SignatureSignature Génération de nombre aléatoireGénération de nombre aléatoire
Pas de clés persistantes, ni d’isolation de cléPas de clés persistantes, ni d’isolation de clé S’exécute S’exécute in-processin-process BCrypt*BCrypt*
bcrypt.hbcrypt.h Mode user – Mode user – bcrypt.dllbcrypt.dll Mode noyau – Mode noyau – ksecdd.sysksecdd.sys
Protocol Protocol ProviderProvider
ssApplicatioApplicatio
nsns
Key Key Storage Storage ProviderProvider
ss
PrimitivPrimitive e
ProviderProviderss
49
Primitives BCrypt*Primitives BCrypt*
BCryptEnumAlgorithmsBCryptEnumAlgorithms BCryptEnumProvidersBCryptEnumProviders BCryptFreeBufferBCryptFreeBuffer BCryptCloseAlgorithmProviderBCryptCloseAlgorithmProvider BCryptCreateHashBCryptCreateHash BCryptDecryptBCryptDecrypt BCryptDestroyHashBCryptDestroyHash BCryptDestroyKeyBCryptDestroyKey BCryptEncryptBCryptEncrypt BCryptExportKeyBCryptExportKey BCryptFinishHashBCryptFinishHash BCryptGenerateSymmetricKeyBCryptGenerateSymmetricKey
BCryptFinalizeKeyPairBCryptFinalizeKeyPair BCryptGenerateKeyPairBCryptGenerateKeyPair BCryptSecretAgreementBCryptSecretAgreement BCryptImportKeyPairBCryptImportKeyPair BCryptGenRandomBCryptGenRandom BCryptGetPropertyBCryptGetProperty BCryptHashDataBCryptHashData BCryptImportKeyBCryptImportKey BCryptOpenAlgorithmProviderBCryptOpenAlgorithmProvider BCryptSetPropertyBCryptSetProperty BCryptSignBCryptSign BCryptVerifySignatureBCryptVerifySignature
Modèle de programmation:Modèle de programmation:La mémoire est fournie par l’appelantLa mémoire est fournie par l’appelant
50
Crypto Next GenerationCrypto Next GenerationProviders de stockage de cléProviders de stockage de clé
Stockage permanent des clés publiques/privéesStockage permanent des clés publiques/privées Isolation de la clé privée au sein d’un processus Isolation de la clé privée au sein d’un processus
sécurise (plutôt que le processus de l’application)sécurise (plutôt que le processus de l’application) E.g. LSASSE.g. LSASS Typiquement, s’exécute hors processus appelantTypiquement, s’exécute hors processus appelant
Interface vers le stockage matérielInterface vers le stockage matériel HSM, SmartcardHSM, Smartcard
NCrypt*NCrypt* ncrypt.hncrypt.h Mode user seulementMode user seulement
ncrypt.dllncrypt.dll Exemples de stockageExemples de stockage
Profile utilisateur DPAPIProfile utilisateur DPAPI Active DirectoryActive Directory HSM, SmartcardHSM, Smartcard
Protocol Protocol ProviderProvider
ssApplicatioApplicatio
nsns
Key Key Storage Storage ProviderProvider
ss
PrimitivPrimitive e
ProviderProviderss
51
Crypto Next GenerationCrypto Next GenerationProviders de protocoleProviders de protocole
Fournit les services crypto spécifiques à un Fournit les services crypto spécifiques à un protocoleprotocole SSL – permet de rajouter de nouvelles suites crypto, ou de SSL – permet de rajouter de nouvelles suites crypto, ou de
remplacer la mise en œuvre de suites existantesremplacer la mise en œuvre de suites existantes S/MIMES/MIME
Protocol Protocol ProviderProvider
ssApplicatioApplicatio
nsns
Key Key Storage Storage ProviderProvider
ss
PrimitivPrimitive e
ProviderProviderss
52
Calcul de condenséCalcul de condenséCNGCNG
Meilleures Meilleures pratiques et pratiques et
recommandationsrecommandationsSens pratique?Sens pratique?
54
SécuritéSécurité
Gestion des secretsGestion des secrets Partage/échange/distribution/stockage des secretsPartage/échange/distribution/stockage des secrets
Nécessite des protocoles complexesNécessite des protocoles complexes Les failles de sécurité sont souvent dans la mise en Les failles de sécurité sont souvent dans la mise en
œuvre des protocolesœuvre des protocoles
N’élimine pas la nécessité des relations de N’élimine pas la nécessité des relations de confianceconfiance
Comporte des risques de perte des donnéesComporte des risques de perte des données Sujet à de multiples stratégies d’attaquesSujet à de multiples stratégies d’attaques
Texte chiffré, texte clair connu, texte clair choisi, texte Texte chiffré, texte clair connu, texte clair choisi, texte chiffré choisischiffré choisis
La cryptologie n’est pas la panacée…
… mais néanmoins indispensable
55
Best practicesBest practices Analyse des menaces avant de faire appel aux Analyse des menaces avant de faire appel aux
procédés de chiffrementprocédés de chiffrement Erreur fréquenteErreur fréquente
Chiffrement pour des menaces qui n’existent pasChiffrement pour des menaces qui n’existent pas Absence de chiffrement pour des menaces qui existentAbsence de chiffrement pour des menaces qui existent
Erreur fréquenteErreur fréquente On chiffre les informations, mais on oublie de mettre en On chiffre les informations, mais on oublie de mettre en
œuvre la sécurité de base (contrôle d’accès, etc…)œuvre la sécurité de base (contrôle d’accès, etc…) L’attaquant passe par la porte d’entréeL’attaquant passe par la porte d’entrée Il invoque les services qui procèdent au déchiffrementIl invoque les services qui procèdent au déchiffrement
Erreur fréquenteErreur fréquente « Tout est systématiquement encrypté avec AES »« Tout est systématiquement encrypté avec AES » « Ah bon! Et la clé ? »« Ah bon! Et la clé ? » « Non, y’a pas de clé je t’assure, c’est tout l’avantage… »« Non, y’a pas de clé je t’assure, c’est tout l’avantage… »
56
Best practicesBest practices Utiliser les algorithmes, protocoles, formats, et Utiliser les algorithmes, protocoles, formats, et
procédés standardprocédés standard Ne pas implémenter son propre algorithmeNe pas implémenter son propre algorithme
Utiliser algorithmes répandus et éprouvésUtiliser algorithmes répandus et éprouvés
Utiliser les Classes .Net et CAPICOMUtiliser les Classes .Net et CAPICOM Fixe un cadre sûr pour l’utilisation de la cryptoFixe un cadre sûr pour l’utilisation de la crypto
Gestion des clésGestion des clés La partie chiffrement est facileLa partie chiffrement est facile La gestion des clés est difficileLa gestion des clés est difficile
Evaluer la pertinence de mettre en œuvre une Evaluer la pertinence de mettre en œuvre une stratégie de récupérationstratégie de récupération
57
Attention aux valeurs par défautAttention aux valeurs par défaut
AlgorithmesAlgorithmes Longueurs des clésLongueurs des clés Mode de chainageMode 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 secretsProtection des secrets Utiliser la classe .Net Utiliser la classe .Net SecureStringSecureString (.Net Framework 2.0) pour (.Net Framework 2.0) pour
tout ce qui est données sensiblestout ce qui est données sensibles Ne pas utiliser Ne pas utiliser StringString pour les mots de passe pour les mots de passe
Privilégier DPAPI pour les secrets persistantsPrivilégier DPAPI pour les secrets persistants CryptProtectData, CryptUnprotectDataCryptProtectData, CryptUnprotectData ProtectedDataProtectedData (.Net Framework 2.0) (.Net Framework 2.0)
Secrets éphémèresSecrets éphémères CryptProtectMemory, CryptUnprotectMemoryCryptProtectMemory, CryptUnprotectMemory ProtectedMemoryProtectedMemory (.Net Framework 2.0) (.Net Framework 2.0)
Mieux -> ne pas avoir à manipuler/stocker de secrets!Mieux -> ne pas avoir à manipuler/stocker de secrets! Utiliser la sécurité des plateformesUtiliser la sécurité des plateformes
E.g. Integrated WindowsE.g. Integrated Windows Carte à puceCarte à puce
59
Best practice - conclusionBest practice - conclusion
Revue de conception, revue de codeRevue de conception, revue de code Toujours avoir un second avis sur la conception d’un Toujours avoir un second avis sur la conception d’un
système mettant en œuvre de la cryptosystème mettant en œuvre de la crypto Se faire assister d’experts en cryptologieSe faire assister d’experts en cryptologie
… … ne pas faire de chiffrement directementne pas faire de chiffrement directement Contextes de sécurité SSPIContextes de sécurité SSPI
SslStream, NegotiateStreamSslStream, NegotiateStream (.Net Framework 2.0) (.Net Framework 2.0) Autorisations, droits d’accès, rôlesAutorisations, droits d’accès, rôles Technologie RMSTechnologie RMS
Cryptography secures data, not applicationsCryptography secures data, not applications (@Stake) (@Stake)
Questions?Questions?
Transparents Transparents supplémentairessupplémentaires
63
Enrôlement X509Enrôlement X509 Situation actuelle – téléchargement ActiveX dans Situation actuelle – téléchargement ActiveX dans
la page HTMLla page HTML Fourniture Certificate ServicesFourniture Certificate Services ActiveX XEnrollActiveX XEnroll
Interfaces ICEnroll4 et IEnroll4Interfaces ICEnroll4 et IEnroll4 Activex SCrdEnrollActivex SCrdEnroll
Pratiquement la même chosePratiquement la même chose Gestion de la carte a puce et de l’enrôlement par un Gestion de la carte a puce et de l’enrôlement par un
operateuroperateur
Windows Vista/LonghornWindows Vista/Longhorn Interfaces COM natives Interfaces COM natives CertEnrollCertEnroll Pas de téléchargementPas de téléchargement Requêtes de certificats (PKCS#10, PKCS#7, et CMC)Requêtes de certificats (PKCS#10, PKCS#7, et CMC) Clés publiques/privéesClés publiques/privées Extensions de certificats / Attributs / PropriétésExtensions de certificats / Attributs / Propriétés
64
Enrôlement X509Enrôlement X509
IDispatchIDispatch
IX509CertificateRequest
IX509CertificateRequestPkcs10
IX509CertificateRequestCertificate
IX509CertificateRequestPkcs7
IX509CertificateRequestCmc
Classes de RequetesClasses de Requetes
Enrollment ClassesEnrollment Classes
IDispatchIDispatch
IX509Enrollment
IX509Enrollments
IX509EnrollmentStatus
IDispatchIDispatch
ICspAlgorithm
ICspAlgorithms
ICspInformation
ICspInformations
IcspStatus
ICspStatuses
IX509PublicKey
IX509PrivateKey
Classes CryptoClasses Crypto
IDispatchIDispatch
IX509Attribute
IX509Attributes
IX509AttributeExtensions
ICryptAttribute
ICryptAttributes
Classes gestion attributsClasses gestion attributs
IX509Extension
IX509ExtensionKeyUsage
IX509ExtensionEnhancedKeyUsage
IX509ExtensionTemplateName
IX509ExtensionTemplate
65
DIMS (DIMS (Digital ID Management Digital ID Management ServiceService))
Permet de mettre à disposition de l’utilisateur d’un domaine Permet de mettre à disposition de l’utilisateur d’un domaine AD ses credentiels d’une station à une autreAD ses credentiels d’une station à une autre Certificats dans le magasin « MY » et « Request »Certificats dans le magasin « MY » et « Request »
%USERPROFILE%\AppData\Microsoft\SystemCertificates\My%USERPROFILE%\AppData\Microsoft\SystemCertificates\My %USERPROFILE%\AppData\Microsoft\SystemCertificates\Request%USERPROFILE%\AppData\Microsoft\SystemCertificates\Request
Clés privées des CSP MS et des KSP CNGClés privées des CSP MS et des KSP CNG %USERPROFILE%\AppData\Microsoft\Crypto\RSA%USERPROFILE%\AppData\Microsoft\Crypto\RSA %USERPROFILE%\AppData\Microsoft\Crypto\DSS%USERPROFILE%\AppData\Microsoft\Crypto\DSS %USERPROFILE%\AppData\Microsoft\Crypto\Keys%USERPROFILE%\AppData\Microsoft\Crypto\Keys
Clés maitres DPAPIClés maitres DPAPI %USERPROFILE%\AppData\Microsoft\Protect%USERPROFILE%\AppData\Microsoft\Protect
Base des credentiels CredmanBase des credentiels Credman %USERPROFILE%\AppData\Microsoft\Credentials %USERPROFILE%\AppData\Microsoft\Credentials
Les credentiels sont stockés par le service DIMS dans l’objet Les credentiels sont stockés par le service DIMS dans l’objet User dans Active DirectoryUser dans Active Directory ms-PKI-AccountCredentialsms-PKI-AccountCredentials ms-PKI-DPAPIMasterKeyms-PKI-DPAPIMasterKey (clés maitre DPAPI) (clés maitre DPAPI)
Configurable par Group PolicyConfigurable par Group Policy Par exemple pour ne pas répliquer les clés de signaturePar exemple pour ne pas répliquer les clés de signature
66
Chiffrement RSAChiffrement RSA
On ne chiffre pas le message directementOn ne chiffre pas le message directement Le message est chiffré avec une clé de session Le message est chiffré avec une clé de session
(symétrique)(symétrique) La clé de session est générée aléatoirementLa clé de session est générée aléatoirement On chiffre la clé de session avec la clé publique RSAOn chiffre la clé de session avec la clé publique RSA
On déchiffre la clé de session avec la clé privée On déchiffre la clé de session avec la clé privée RSARSA On peut ensuite déchiffrer le message (symétrique)On peut ensuite déchiffrer le message (symétrique)
Néanmoins, CryptoAPI permet de chiffrer des Néanmoins, CryptoAPI permet de chiffrer des données arbitraires avec RSAdonnées arbitraires avec RSA On peut donc, si on le souhaite, appliquer RSA On peut donc, si on le souhaite, appliquer RSA
directement sur des donnéesdirectement sur des données
67
Signature RSASignature RSA
On calcule un condensé du message (SHA-1)On calcule un condensé du message (SHA-1) On chiffre le condensé avec la clé privée RSAOn chiffre le condensé avec la clé privée RSA Le résultat est la signatureLe résultat est la signature
Standard PKCS#1 – RSA Data SecurityStandard PKCS#1 – RSA Data Security
Pour vérifier la signaturePour vérifier la signature On déchiffre la signature avec la clé publique RSAOn déchiffre la signature avec la clé publique RSA On calcule le condensé du messageOn calcule le condensé du message On compare avec la valeur déchiffréeOn compare avec la valeur déchiffrée
68
Signature RSASignature RSA
Classes .NetClasses .Net
69
Signature RSASignature RSA
Classes .Net - VérificationClasses .Net - Vérification
70
Crypto Next GenerationCrypto Next GenerationSChannel (SSL)
CNG SSL Router
MS SSL Provider
Protocol APIProtocol API
Win32 Application
Key Storage APIKey Storage API
RNG Router
Symmetric Crypto Router
Hash Router
Asymmetric Crypto Router
Signature Router
Key Exchange Router
Key Storage Router
Smart Card
Hardware Security Module
Legacy Application
Legacy CryptoAPI(rsaenh.dll)
CAPI 1.0CAPI 1.0
RNG RSARC4DES
3DESAES
SHAMD5
DSSECDSA
DHECDH
Key Isolation Service
Software Storage
Provider(s)
Asymmetric Crypto Router
Signature Router
Key Exchange Router
RSA DSSECDSA
DHECDH
Key Isolation Process
71
Crypto Next GenerationCrypto Next Generation
CryptoConfigCryptoConfig BCryptResolveProvidersBCryptResolveProviders
InterfaceID <Provider Information>AlgID ContextID
InterfaceID <Provider Information>AlgID ContextID
InterfaceID <Provider Information>AlgID ContextID
InterfaceID <Provider Information>AlgID NULL
InterfaceID <Provider Information>AlgID NULL
InterfaceID <Provider Information>AlgID NULL
0x0001 <Provider Information>“AES” “TLS 1.0”
0x0001 <Provider Information>“AES” “CMS”
0x0001 <Provider Information>“AES” “EFS”
0x0001 <Provider Information>“AES” “IPSEC-ESP”
0x0001 <Provider Information>“AES” NULL
InterfaceID
0x00000001 (symmetric encryption)0x00000002 (hashing)0x00000003 (asymmetric encryption)0x00000004 (secret agreement)0x00000005 (signing)0x00000006 (RNG)0x00010001 (Microsoft KSP)
72
Crypto Next GenerationCrypto Next Generation
Configuration niveau machine ou niveau entrepriseConfiguration niveau machine ou niveau entreprise
Configuration de la base avec ACLs pour le Configuration de la base avec ACLs pour le Crypto Crypto OperatorOperator
Tables dans la base de registreTables dans la base de registre HKLM/SOFTWARE/Microsoft/Cryptography/CNG/Config/HKLM/SOFTWARE/Microsoft/Cryptography/CNG/Config/
DomainDomain HKLM/SOFTWARE/Microsoft/Cryptography/CNG/Config/HKLM/SOFTWARE/Microsoft/Cryptography/CNG/Config/
LocalLocal HKLM/SOFTWARE/Microsoft/Cryptography/CNG/ProvidersHKLM/SOFTWARE/Microsoft/Cryptography/CNG/Providers
EnterpriseDefaults
Table
MachineDefaults
Table
Lookup/Query 1
2
73
Développer un provider CNGDévelopper un provider CNG
Coder et tester l’algorithmeCoder 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 CNGDévelopper un provider CNG
Wrapper l’algorithme dans Wrapper l’algorithme dans BCryptEncryptFnBCryptEncryptFn
NTSTATUSWINAPISymmEncrypt( __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 CNGDévelopper un provider CNG
Ecrire les autres fonctions éventuelles, dont la Ecrire les autres fonctions éventuelles, dont la fonction d’ouverture du provider et nommage de fonction d’ouverture du provider et nommage de l’algorithmel’algorithme#define SYMM_CIPHER_ALGID L"XOR"
struct SYMM_CIPHER_ALGORITHM{ SYMM_HEADER Header; DWORD cbKey;};
NTSTATUSWINAPISymmOpenCipherProvider( __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; goto Cleanup; } 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 CNGDévelopper un provider CNG
Définir la table de fonctions du providerDé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 CNGDévelopper un provider CNG
Enregistrer le providerEnregistrer 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 algidhResult = BCryptRegisterProvider(SYMM_CIPHER_PROVIDER_NAME, 0, &Provider);
78
Développer un provider CNGDévelopper un provider CNG
Utiliser et invoquer le provider d’algorithmeUtiliser et invoquer le provider d’algorithme
Status = BCryptOpenAlgorithmProvider(&hAlg, L”XOR”, NULL, 0);
Status = BCryptGenerateSymmetricKey(hAlg, &hKey, pbKeyObj, cbKeyObj, rgbHash, SYMM_CIPHER_KEY_SIZE, 0);
Status = BCryptEncrypt( hKey, rgbBufIn, cbSize, NULL, NULL, 0, rgbBufOut, cbSize, &cbResult, 0);
79
Best practicesBest practices
La longueur des clefs n’a qu’une importance La longueur des clefs n’a qu’une importance toute relative -> marketing (« on fait du 256 »)toute relative -> marketing (« on fait du 256 ») Mais, néanmoins source de vulnérabilitéMais, néanmoins source de vulnérabilité On veillera à utiliser des clés symétriques On veillera à utiliser des clés symétriques
suffisamment longues et des clés RSA au modulo suffisamment longues et des clés RSA au modulo suffisamment élevésuffisamment élevé AES 256/RSA 1024AES 256/RSA 1024
Ralentir l’attaquant (itérations sur les Ralentir l’attaquant (itérations sur les condensés)condensés)
80
Best practicesBest practices Utiliser des longueurs de clés cohérentes avec le reste du Utiliser des longueurs de clés cohérentes avec le reste du
système cryptographiquesystème cryptographique Erreur fréquenteErreur fréquente
On dérive une clé de longueur conséquente à partir d’un mot de On dérive une clé de longueur conséquente à partir d’un mot de passe faible, pensant être en sécuritépasse faible, pensant être en sécurité
Selon le calcul de l’entropie des mots de passe (Shannon 1948), Selon le calcul de l’entropie des mots de passe (Shannon 1948), longueurs minimum d’un mot de passe pour l’équivalent d’une longueurs minimum d’un mot de passe pour l’équivalent d’une clé:clé:
ScénarioScénario CaractèresCaractères Clé 128 Clé 128 bitsbits
Code PINCode PIN 10 (0-9)10 (0-9) 4040
Alpha sans caseAlpha sans case 26 (A-Z)26 (A-Z) 2828
Alpha avec caseAlpha avec case 52 (A-Z, a-z)52 (A-Z, a-z) 2323
Alpha et Alpha et numériquenumérique
62 (A-Z, a-z, 0-9)62 (A-Z, a-z, 0-9) 2222
Alpha-numériquet Alpha-numériquet et ponctuationset ponctuations
93 (A-Z, a-z, 0-9, et 93 (A-Z, a-z, 0-9, et ponctuations)ponctuations)
2020
81
Best practicesBest practices
Utiliser des mots de passe fortsUtiliser des mots de passe forts Mettre en œuvre une politique de mot de passeMettre en œuvre une politique de mot de passe
Longueur minimumLongueur minimum ComplexitéComplexité Changement fréquentChangement fréquent
…… Ne pas utiliser de mots de passeNe pas utiliser de mots de passe
Cartes à puceCartes à puce Something you know and something you haveSomething you know and something you have……
82
Best practicesBest practices
Utiliser des longueurs de clé et modulus cohérents entre Utiliser des longueurs de clé et modulus cohérents entre euxeux
Erreur fréquenteErreur fréquente Utilisation de AES 128 bits avec RSA modulo 512Utilisation de AES 128 bits avec RSA modulo 512
Équivalences entre tailles de cléÉquivalences entre tailles de clé
Clé symétriqueClé symétrique Modulo RSAModulo RSA
7070 947947
8080 12281228
100100 19261926
150150 45754575
250250 1459614596
83
Best practicesBest practices
Choisir l’algorithme et la longueur des clés en Choisir l’algorithme et la longueur des clés en cohérence avec valeur temporelle de l’informationcohérence avec valeur temporelle de l’information Pour une information qui doit rester secrète quelques Pour une information qui doit rester secrète quelques
minutesminutes Peut-être que 3DES (168 bit) est adéquatPeut-être que 3DES (168 bit) est adéquat
Pour une information qu’il faut protéger pendant des mois Pour une information qu’il faut protéger pendant des mois et des annéeset des années On préférera AES 256 et RSA 1024, ou même 2048On préférera AES 256 et RSA 1024, ou même 2048
Ne pas réutiliser le Ne pas réutiliser le keystreamkeystream Attention clé RC4Attention clé RC4
Authentifier (HMAC) les textes chiffrés avec un Authentifier (HMAC) les textes chiffrés avec un algorithme de type algorithme de type streamstream Sensible au bit togglingSensible au bit toggling