<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Mes ramblings du travail</title><link>http://blogs.msdn.com/jean-yves_poublan/default.aspx</link><description>Un blog de jeanypo sur le dev Windows, la sécurité, la crypto, etc...</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>SHA-2</title><link>http://blogs.msdn.com/jean-yves_poublan/archive/2009/02/01/sha-2.aspx</link><pubDate>Sun, 01 Feb 2009 09:38:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9387848</guid><dc:creator>jean-yves poublan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jean-yves_poublan/comments/9387848.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jean-yves_poublan/commentrss.aspx?PostID=9387848</wfw:commentRss><description>&lt;p&gt;En cryptographie, la fonction de hachage (ou calcul de condensé) est essentielle. Une de ses applications est la génération de signatures selon le schéma &lt;em&gt;hash and sign&lt;/em&gt;, et bien sûr leur vérification, ou encore le calcul de codes d'authentification de messages (MAC). La fonction de hachage est à sens unique, mais surtout, elle doit être résistante aux collisions. Vous trouverez des informations didacticielles et pas trop indigestes (&lt;em&gt;pun intended &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt;&lt;/em&gt;) sur le sujet chez &lt;a href="https://research.microsoft.com/en-us/people/mironov/hash_survey.pdf"&gt;Mironov&lt;/a&gt;. 
&lt;/p&gt;&lt;p&gt;On a assez longtemps utilisé MD5 (&lt;em&gt;Message Digest&lt;/em&gt; - 128 bits) qui aujourd'hui (et même depuis plusieurs années – 1996?) est à bannir définitivement (voir &lt;a href="http://blogs.technet.com/pascals/archive/2008/12/31/collisions-md5-et-vrais-faux-certificats.aspx"&gt;http://blogs.technet.com/pascals/archive/2008/12/31/collisions-md5-et-vrais-faux-certificats.aspx&lt;/a&gt;). Son successeur, SHA-1 (&lt;em&gt;Secure Hash Algorithm&lt;/em&gt; - 160 bits) est aussi suspecté d'être sujet à collisions et déjà considéré comme un peu short pour la signature électronique. Selon &lt;a href="http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html"&gt;NIST&lt;/a&gt; (National Institute of Standards and Technology) : "&lt;em&gt;Federal agencies should stop using SHA-1 for digital signatures, digital time stamping and other applications that require collision resistance as soon as practical&lt;/em&gt;" (voir aussi &lt;a href="http://www.rsa.com/rsalabs/node.asp?id=2834"&gt;http://www.rsa.com/rsalabs/node.asp?id=2834&lt;/a&gt; ou encore &lt;a href="http://www.ietf.org/rfc/rfc4270.txt"&gt;RFC 4270&lt;/a&gt;).
&lt;/p&gt;&lt;p&gt;Les collisions permettent en théorie de forger une signature, ou plutôt de créer un deuxième document (appelons-le « faux » document) pour lequel la signature générée sur un premier document (« vrai » document) est valide car les deux documents produisent le même condensé. L'attaque dite de « seconde pré-image » qui consiste à trouver un faux document, qui plus est « utile », pour un premier document imposé est bien plus difficile que l'attaque de collision de base (&lt;a href="http://fr.wikipedia.org/wiki/Paradoxe_des_anniversaires"&gt;paradoxe des anniversaires&lt;/a&gt;), pour laquelle l'attaquant peut choisir les deux documents, avant de faire signer le vrai document par la victime. Un certificat étant un document signé suite à une requête de certification, on conçoit comment il est possible de créer de faux certificats par une attaque de collision.
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.phreedom.org/research/rogue-ca/"&gt;L'attaque de collision MD5&lt;/a&gt; aujourd'hui praticable sur les seuls certificats MD5 s'apparente à une attaque pour laquelle l'attaquant choisit le vrai et le faux document. Cependant, pas mal de contraintes subsistent pour l'attaquant : la structure de la partie du certificat à faire signer par la CA est imposée, et seule une partie de son contenu est relativement libre. De plus, il est nécessaire pour l'attaquant de prédire les numéros de série et date de validité qui seront affectés au vrai certificat par l'autorité de certification (on peut raisonnablement penser qu'on retrouvera ce type de contraintes dans beaucoup d'attaques de collision car il faut que la victime accepte de son plein gré de signer le vrai document). A noter aussi que le faux certificat doit comporter les bits nécessaires à la collision, ce qui constitue une véritable « verrue » à dissimuler et qui pourrait éventuellement mettre la puce à l'oreille de l'utilisateur (très bien averti), et du moins être détectée lors d'une investigation.
&lt;/p&gt;&lt;p&gt;Il faut évidemment arrêter de générer des certificats MD5, et dans l'idéal, il faut arrêter de les utiliser et de leur accorder confiance. Plus facile à dire qu'à faire dans certains cas mais &lt;a href="http://blogs.technet.com/swi/archive/2008/12/30/information-regarding-md5-collisions-problem.aspx"&gt;guidelines et recommandations existent&lt;/a&gt;. 
&lt;/p&gt;&lt;p&gt;La publication &lt;a href="http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf"&gt;FIPS 180-2&lt;/a&gt; du NIST a standardisé dès 2002 les condensés dits SHA-2 de longueur 256, 384, et 512 bits (ces trois variantes sont dénommées SHA-256, SHA-384, et SHA-512). Seuls SHA-256 et SHA-512 sont réellement différents en ce sens que les calculs se font sur des entités 32 et 64 bits, ou encore des tailles de blocks 512 et 1024, respectivement, et SHA-384 n'est qu'une version de SHA-512 au résultat tronqué. SHA-2 fait maintenant partie de &lt;a href="http://www.nsa.gov/ia/programs/suiteb_cryptography/index.shtml"&gt;Suite-B&lt;/a&gt;, qui est le standard NSA spécifiant les suites d'algorithmes cryptographiques à utiliser pour la sécurité des systèmes d'information du gouvernement US.  Dans la course contre les cryptanalystes, NIST ne perd pas de temps et a déjà lancé le concours pour « &lt;a href="http://csrc.nist.gov/groups/ST/hash/sha-3/index.html"&gt;SHA-3&lt;/a&gt; ».
&lt;/p&gt;&lt;p&gt;Pour un développeur de fonctions de sécurité mettant en jeu la signature et les certificats, ou n'importe quel mécanisme de sécurité nécessitant la résistance aux collisions, l'adoption de SHA-2 est désormais un must, et il apporte en plus la conformité avec Suite-B. Mais comment choisir entre SHA-256 et SHA-512 ? En termes de sécurité, SHA-512 fournira en théorie plus de marge, si tant est qu'on en ait besoin. SHA-256 est censé fournir 128 bits de sécurité contre les attaques de collision, et SHA-512, 256 bits. Néanmoins, différentes applications ou protocoles présentent chacun leurs contraintes, et un niveau de sécurité de « seulement » 128 bits est pour l'instant réputé sûr pour beaucoup d'applications selon les &lt;a href="http://www.ssi.gouv.fr/site_documents/politiqueproduit/Mecanismes_cryptographiques_v1_10_standard.pdf"&gt;préconisations de la DCSSI&lt;/a&gt; (voir aussi &lt;a href="http://www.keylength.com"&gt;www.keylength.com&lt;/a&gt;).   
&lt;/p&gt;&lt;p&gt;La fonction de hachage est souvent utilisée conjointement avec du chiffrement. En termes de cohérence, on pourra utiliser SHA-256 avec AES 128 bits, et on préférera SHA-512 avec AES 256 bits. En termes de taille de messages pour le stockage ou la transmission, SHA-512 représente un coût fixe deux fois plus important que SHA-256, qui peut être impraticable pour un grand nombre de petits messages. Finalement, en termes de performance, SHA-512 est ciblé pour les systèmes 64 bits, et logiquement plus lent que SHA-256 sur les systèmes 32 bits (ce qui en principe n'est pas le cas sur un système 64 bits).
&lt;/p&gt;&lt;p&gt;SHA-2 a été disponible de la part de Microsoft sur la plateforme Windows dès le .Net Framework 1.0 avec les classes en code managé, puis plus tard en code natif sur Windows Server 2003 SP1 avec CryptoAPI, et sur Windows Vista et Windows Server 2008 avec CNG (Crypto Next Generation) et CryptoAPI, et finalement sur Windows XP SP3 avec CryptoAPI.
&lt;/p&gt;&lt;p&gt;Pour résumer :
&lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="width:128px"/&gt;&lt;col style="width:508px"/&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="background: #4f81bd"&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid white 1.0pt; border-left:  solid white 1.0pt; border-bottom:  solid white 3.0pt; border-right:  solid white 1.0pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;API&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid white 1.0pt; border-left:  none; border-bottom:  solid white 3.0pt; border-right:  solid white 1.0pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Disponibilité de SHA2 au niveau de l'API&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: #4f81bd; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid white 1.0pt; border-bottom:  solid white 0.75pt; border-right:  solid white 3.0pt"&gt;&lt;p&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Classes .Net&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;&lt;span style="color:black"&gt;&lt;span style="font-family:Verdana; font-size:8pt"&gt;&lt;em&gt;A partir du .Net Framework 1.0:&lt;/em&gt;&lt;/span&gt;&lt;br/&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256managed.aspx"&gt;&lt;span style="font-family:Verdana; font-size:8pt"&gt;SHA256Managed&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha384managed.aspx"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;SHA384Managed&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha512managed.aspx"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;SHA512Managed&lt;/span&gt;&lt;/a&gt;&lt;span style="color:black"&gt;
							&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="color:black"&gt;&lt;em&gt;&lt;span style="font-family:Verdana; font-size:8pt"&gt;A partir du .Net Framework 3.5 sur Windows Vista&lt;/span&gt;:&lt;/em&gt;&lt;br/&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256cng.aspx"&gt;&lt;span style="font-family:Verdana; font-size:8pt"&gt;SHA256Cng&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha384cng.aspx"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;SHA384Cng&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha512cng.aspx"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;SHA512Cng&lt;/span&gt;&lt;/a&gt;&lt;span style="color:black"&gt;
							&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="color:black"&gt;&lt;em&gt;A partir du .Net Framework 3.5 sur Windows Server 2003 SP1, Windows Vista et Windows XP SP3:&lt;/em&gt;
							&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256cryptoserviceprovider.aspx"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;SHA256CryptoServiceProvider&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha384cryptoserviceprovider.aspx"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;SHA384CryptoServiceProvider&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha512cryptoserviceprovider.aspx"&gt;&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;SHA512CryptoServiceProvider&lt;/span&gt;&lt;/a&gt;&lt;span style="color:black"&gt;
							&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Le support de HMAC-SHA2 existe sur le .Net Framework en code managé depuis sa version 2.0 (&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha256.aspx"&gt;&lt;span style="font-family:Verdana; font-size:8pt"&gt;HMACSHA256&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Verdana; font-size:8pt"&gt;&lt;span style="color:black"&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha384.aspx"/&gt;&lt;/span&gt;HMACSHA384&lt;span style="color:black"&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha512.aspx"/&gt;&lt;/span&gt;HMACSHA512&lt;/span&gt;).
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;A noter aussi le wrapper CNG du projet « &lt;a href="http://www.codeplex.com/clrsecurity/Wiki/View.aspx?title=Security.Cryptography.dll&amp;amp;referringTitle=Home"&gt;CLR Security&lt;/a&gt; » : 
&lt;/p&gt;&lt;p&gt;Security.Cryptography.HMACSHA256Cng, Security.Cryptography.HMACSHA384Cng, Security.Cryptography.HMACSHA512Cng.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Signature RSA avec SHA-2 disponible récemment (.Net Framework 3.5 SP1)  avec &lt;span style="color:#2b91af; font-family:Courier New; font-size:10pt"&gt;RSACryptoServiceProvider&lt;/span&gt;. Puisque la classe est un wrapper CryptoAPI, il faut en plus que la plateforme supporte SHA-2 au niveau CryptoAPI (et donc au minimum Windows Server 2003 SP1, Windows Vista, ou Windows XP SP3). On notera à ce sujet l'initiative &lt;a href="http://www.codeplex.com/CryptoExtension"&gt;http://www.codeplex.com/CryptoExtension&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Signature ECDSA avec SHA-2 via &lt;span style="color:#2b91af; font-family:Courier New; font-size:10pt"&gt;ECDSACng &lt;/span&gt;à  partir du .Net Framework 3.5 et Windows Vista. La signature DSA est limitée à SHA-1 (DSA 1024 - &lt;span style="color:#2b91af; font-family:Courier New; font-size:10pt"&gt;DSACryptoServiceProvider&lt;/span&gt;).
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;La fonctionnalité n'a pas encore été « remontée » à la signature XML.
&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: #4f81bd; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid white 1.0pt; border-bottom:  solid white 1.0pt; border-right:  solid white 3.0pt"&gt;&lt;p&gt;&lt;span style="color:white"&gt;&lt;strong&gt;CNG&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;&lt;span style="color:black"&gt;A partir de Windows Vista &lt;br/&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa375534(VS.85).aspx"&gt;BCRYPT_SHA256_ALGORITHM ("SHA256"), BCRYPT_SHA384_ALGORITHM ("SHA384"), BCRYPT_SHA512_ALGORITHM("SHA512")&lt;/a&gt;&lt;strong&gt;
								&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="color:black"&gt;Pour HMAC-SHA2, utiliser le flag &lt;/span&gt;BCRYPT_ALG_HANDLE_HMAC_FLAG lors de la connexion au provider d'algorithme.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Signature RSA et ECDSA avec SHA-2. La signature DSA est limitée à SHA-1 (DSA 1024).
&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: #4f81bd; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid white 1.0pt; border-bottom:  solid white 1.0pt; border-right:  solid white 3.0pt"&gt;&lt;p&gt;&lt;span style="color:white"&gt;&lt;strong&gt;CryptoAPI
&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;&lt;span style="color:black"&gt;A partir de Windows Server 2003 SP1, ensuite Windows Vista, puis Windows XP SP3&lt;br/&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa375549(VS.85).aspx"&gt;AlgIDs CALG_SHA_256, CALG_SHA_384, CALG_SHA_512&lt;/a&gt;
							&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black"&gt;Support via &lt;em&gt;Microsoft Enhanced RSA and AES Cryptographic Provider&lt;/em&gt;, et &lt;em&gt;Microsoft Base Smart Card Crypto Provider&lt;/em&gt;, si &lt;/span&gt;présent&lt;span style="color:black"&gt;. Binaire &lt;em&gt;rsaenh.dll&lt;/em&gt;.
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="color:black"&gt;Pour HMAC-SHA2, utiliser CALG_HMAC, puis CryptSetHashParam:
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;CryptCreateHash (CALG_HMAC)
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;CryptSetHashParam (HMAC_INFO. HashAlgid = CALG_SHA_256)
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Signature RSA avec SHA-2. La signature DSA est limitée à SHA-1 (DSA 1024).
&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;On ne répétera jamais assez aux développeurs d'éviter d'utiliser, lorsque possible, les primitives cryptographiques pour bâtir eux-mêmes les protocoles ou fonctions de plus haut niveau dont ils ont besoin. Les vulnérabilités se trouvent dans le protocole, ou l'application, rarement dans l'algorithme crypto en tant que primitive. &lt;a href="https://research.microsoft.com/en-us/people/mironov/hash_survey.pdf"&gt;Mironov&lt;/a&gt; cite pour exemple la construction naïve d'un MAC en tant que &lt;em&gt;SHA(secret||message)&lt;/em&gt; plutôt que l'utilisation du standard &lt;a href="http://www.ietf.org/rfc/rfc2104.txt"&gt;HMAC-SHA&lt;/a&gt; (&lt;a href="http://www.ietf.org/rfc/rfc4868.txt"&gt;RFC 4868&lt;/a&gt;).
&lt;/p&gt;&lt;p&gt;Que ce soit pour la génération d'une signature électronique, la dérivation d'une clé à partir d'un mot de passe, ou encore un code d'authentification, une utilisation naïve des primitives peut rapidement conduire au désastre, et on se reportera sur les APIs qui implémentent les méthodes standard,  éprouvées, et approuvées par les agences de sécurité tels que HMAC-SHA, RSA, DSA, ECDSA, PBKDF2, etc.
&lt;/p&gt;&lt;p&gt;A noter sur Windows 7 la nouvelle API CNG &lt;em&gt;BCryptDeriveKeyPBKDF2&lt;/em&gt; pour la dérivation de clé à partir d'un mot de passe selon &lt;a href="http://www.ietf.org/rfc/rfc2898.txt"&gt;RFC 2898&lt;/a&gt; (PKCS#5), qui peut être utilisée avec SHA-2 si on le souhaite. Néanmoins, il est couramment admis que SHA-1 est largement suffisant pour ce scenario.
&lt;/p&gt;&lt;p&gt;Windows 7 apporte aussi une nouvelle API native supportant la signature XML RSA et ECDSA avec SHA-2 (&lt;a href="http://msdn.microsoft.com/en-us/library/dd433832(VS.85).aspx"&gt;API CryptXML…&lt;/a&gt; - &lt;em&gt;cryptxml.dll&lt;/em&gt;).&lt;span style="color:black; font-family:Verdana; font-size:8pt"&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Qu'en est-il de PKIX ?
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;CAPI2 (&lt;em&gt;crypt32.dll&lt;/em&gt;) désigne l'API Windows qui met en œuvre le X.509 et le CMS/PKCS#7 (&lt;em&gt;Cryptographic Message Syntax&lt;/em&gt;). A partir de Windows Vista et Windows Server 2008, CAPI2 a été capable de prendre en charge les certificats SHA-2 (accessoirement, CAPI2 a aussi été porté sur CNG pour la prise en charge des courbes elliptiques). Une application est donc à même de vérifier une chaîne de certificats X.509 RSA et ECC à base de SHA-2 avec les API &lt;em&gt;CertGetCertificateChain&lt;/em&gt; et &lt;em&gt;CertVerifyRevocation&lt;/em&gt;. De même, les services de certificats ADCS (&lt;em&gt;Active Directory Certificate Services&lt;/em&gt;) de Windows Server 2008 supportent l'émission de certificats SHA-2 RSA et ECC. Finalement, SHA-2 est supporté pour CMS. A ce titre on notera le draft &lt;a href="http://www.ietf.org/internet-drafts/draft-ietf-smime-sha2-11.txt"&gt;http://www.ietf.org/internet-drafts/draft-ietf-smime-sha2-11.txt&lt;/a&gt; sur l'utilisation de SHA-2 avec CMS qui est censé mettre à jour &lt;a href="http://www.ietf.org/rfc/rfc3370.txt"&gt;RFC 3370&lt;/a&gt;. La mise en œuvre de S/MIME par Office Outlook 2007 (et le contrôle Outlook Web Access d'Exchange 2007) en tire parti, mais pas Windows Mail, ni Windows Live Mail. A noter que SHA-2 est supporté pour la signature, mais la dérivation de la KEK (&lt;em&gt;Key Encryption Key&lt;/em&gt;) pour le chiffrement suite à  l'accord ECDH utilise encore SHA-1 (&lt;em&gt;dhSinglePass-stdDH-sha1kdf-scheme&lt;/em&gt; – voir &lt;a href="http://www.ietf.org/rfc/rfc3278.txt"&gt;RFC 3278&lt;/a&gt;). Windows 7 apporte le support de &lt;em&gt;dhSinglePass-stdDH-sha256kdf-scheme&lt;/em&gt; et &lt;em&gt;dhSinglePass-stdDH-sha384kdf-scheme&lt;/em&gt; selon &lt;a href="http://www.ietf.org/rfc/rfc5008.txt"&gt;RFC 5008&lt;/a&gt; (comme évoqué plus haut, je ne pense pas que SHA-2 soit totalement indispensable pour la dérivation). 
&lt;/p&gt;&lt;p&gt;Sur Windows Server 2003 SP1 et SP2, le correctif 938397 &lt;em&gt;APPLICATIONS THAT USE THE CRYPTOGRAPHY API CANNOT VALIDATE AN X.509 CERTIFICATE IN WINDOWS SERVER 2003&lt;/em&gt; (&lt;a href="http://support.microsoft.com/kb/938397"&gt;http://support.microsoft.com/kb/938397&lt;/a&gt;)  amène le support de SHA-2 au niveau CAPI2 de façon à pouvoir vérifier une chaîne comprenant des certificats RSA à base de SHA-2. Cependant &lt;em&gt;Certificate Services&lt;/em&gt; de Windows Server 2003 ne peut pas générer de certificats SHA-2, et SHA-2 n'est pas disponible pour CMS.
&lt;/p&gt;&lt;p&gt;Sur Windows XP, c'est le SP3 qui amène le support de SHA-2 pour CAPI2, et donc la possibilité de d'utiliser des certificats RSA avec SHA-2, avec IE7 par exemple. Comme pour Windows Server 2003, SHA-2 n'est pas disponible pour CMS.
&lt;/p&gt;&lt;p&gt;Le tableau suivant synthétise le support de SHA-2 sur la plateforme:
&lt;table style="border-collapse:collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="width:128px"/&gt;&lt;col style="width:128px"/&gt;&lt;col style="width:128px"/&gt;&lt;col style="width:128px"/&gt;&lt;col style="width:128px"/&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="background: #4f81bd"&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid white 1.0pt; border-left:  solid white 1.0pt; border-bottom:  solid white 3.0pt; border-right:  solid white 1.0pt"&gt; &lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid white 1.0pt; border-left:  none; border-bottom:  solid white 3.0pt; border-right:  solid white 1.0pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Windows XP&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid white 1.0pt; border-left:  none; border-bottom:  solid white 3.0pt; border-right:  solid white 1.0pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Windows Server 2003&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid white 1.0pt; border-left:  none; border-bottom:  solid white 3.0pt; border-right:  solid white 1.0pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Windows Vista&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid white 1.0pt; border-left:  none; border-bottom:  solid white 3.0pt; border-right:  solid white 1.0pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Windows Server 2008&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: #4f81bd; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid white 1.0pt; border-bottom:  solid white 0.75pt; border-right:  solid white 3.0pt"&gt;&lt;p&gt;&lt;span style="color:white"&gt;&lt;strong&gt;CryptoAPI&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;SP3&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;SP1&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;RTM&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;RTM&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: #4f81bd; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid white 1.0pt; border-bottom:  solid white 1.0pt; border-right:  solid white 3.0pt"&gt;&lt;p&gt;&lt;span style="color:white"&gt;&lt;strong&gt;CNG&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 0.75pt"&gt;&lt;p&gt;--&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 0.75pt"&gt;&lt;p&gt;--&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 0.75pt"&gt;&lt;p&gt;RTM&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;RTM&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: #4f81bd; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid white 1.0pt; border-bottom:  solid white 0.75pt; border-right:  solid white 3.0pt"&gt;&lt;p&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Validation de certificats avec CAPI2&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;SP3&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;SP1 ou SP2 + KB938397&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;RTM&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;RTM&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: #4f81bd; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid white 1.0pt; border-bottom:  solid white 1.0pt; border-right:  solid white 3.0pt"&gt;&lt;p&gt;&lt;span style="color:white"&gt;&lt;strong&gt;CMS avec CAPI2&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 0.75pt"&gt;&lt;p&gt;Non&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 0.75pt"&gt;&lt;p&gt;Non&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 0.75pt"&gt;&lt;p&gt;RTM&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #d3dfee; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 0.75pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;RTM&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: #4f81bd; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid white 1.0pt; border-bottom:  solid white 1.0pt; border-right:  solid white 3.0pt"&gt;&lt;p&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Emission de certificats avec &lt;em&gt;Certificate Services&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;--&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;Non&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;--&lt;/p&gt;&lt;/td&gt;&lt;td style="background: #a7bfde; padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid white 1.0pt; border-right:  solid white 1.0pt"&gt;&lt;p&gt;Oui - ADCS&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Alors bon SHA-2, et merci à Philippe Beraud qui m'a transmis certaines de ces informations…&lt;/p&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9387848" width="1" height="1"&gt;</description></item><item><title>Windows Vista SP1 : de nouveaux PRNGs</title><link>http://blogs.msdn.com/jean-yves_poublan/archive/2008/01/06/windows-vista-sp1-de-nouveaux-prngs.aspx</link><pubDate>Mon, 07 Jan 2008 01:22:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7010257</guid><dc:creator>jean-yves poublan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jean-yves_poublan/comments/7010257.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jean-yves_poublan/commentrss.aspx?PostID=7010257</wfw:commentRss><description>&lt;p&gt;Le Service Pack 1 pour Windows Vista, ainsi que Windows Server 2008 sont bien là, au détour de virage de la nouvelle année. Une rapide recherche des nouveautés n'arrête pas de cracher « &lt;em&gt;Adds an Elliptical Curve Cryptography (ECC) pseudo-random number generator (PRNG) to the list of available PRNGs in Windows Vista &lt;/em&gt;». Cette information, quoiqu'exacte, mérite quelques précisions.
&lt;/p&gt;&lt;p&gt;Le PRNG en question correspond au mécanisme DUAL_EC_DRBG à base de courbes elliptiques de la publication &lt;a href="http://csrc.nist.gov/publications/nistpubs/800-90/SP800-90revised_March2007.pdf"&gt;NIST SP 800-90&lt;/a&gt; qui répond aux exigences de certaines entités gouvernementales. Cependant, DUAL_EC_DRBG est en quelque sorte sujet à &lt;a href="http://www.schneier.com/blog/archives/2007/12/dual_ec_drbg_ad.html"&gt;controverse&lt;/a&gt;. Il est accessible pour les applications via l'API CNG (&lt;em&gt;Crypt Next Generation&lt;/em&gt;) et le provider d'algorithme « DUALECRNG » (constante BCRYPT_RNG_DUAL_EC_ALGORITHM). DUAL_EC_DRBG n'est pas l'algorithme de génération de nombre aléatoire par défaut de la plateforme. Même s'il est possible de configurer CNG pour qu'il le soit, une telle configuration n'affecte que les applications CNG (note : cependant, de plus en plus d'applications et protocoles, aussi bien en mode noyau qu'en mode utilisateur, utilisent CNG).
&lt;/p&gt;&lt;p&gt;Plus intéressant, l'algorithme PRNG par défaut de la plateforme est nouveau. Il s'agit du  mécanisme CTR_DRBG (« Counter » &lt;em&gt;Deterministic Random Bit Generation&lt;/em&gt; toujours de la publication NIST SP 800-90) qui met en jeu l'algorithme de chiffrement par blocs AES-256. CTR_DRBG concerne aussi bien les applications CNG en mode noyau ou utilisateur, que les applications CryptoAPI (via les CSP Microsoft). Le &lt;a href="http://technet2.microsoft.com/WindowsVista/en/library/417467e7-7845-46d4-85f1-dd471fbc0de91033.mspx?mfr=true"&gt;livre blanc du SP1 de Windows Vista&lt;/a&gt; a été mis à jour pour refléter cet état de choses.
&lt;/p&gt;&lt;p&gt;Un troisième algorithme est disponible, il s'agit de l'algorithme  dit « FIPS 186-2 » conforme à l'annexe 3.1 du standard DSS (&lt;a href="http://csrc.nist.gov/publications/fips/fips186-2/fips186-2-change1.pdf"&gt;FIPS 186-2&lt;/a&gt;) et à base de SHA-1 pour le calcul de la fonction G. FIPS 186-2 est exposé par CNG via le provider d'algorithme  BCRYPT_RNG_FIPS186_DSA_ALGORITHM, et par CryptoAPI via les CSP de Microsoft de type DSS (&lt;em&gt;CryptGenRandom&lt;/em&gt; prend en paramètre le handle du CSP). Cet algorithme est utilisé pour la génération de nombres aléatoires nécessaires à la signature électronique DSA. Je ne suis pas sur qu'une application en ait directement besoin, mais le provider d'algorithme DSA pour CNG (BCRYPT_DSA_ALGORITHM), et les CSP de type DSS en dependent.
&lt;/p&gt;&lt;p&gt;Avec le SP1 de Windows Vista et sur Windows Server 2008, on a donc trois algorithmes PRNG :
&lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="width:131px"/&gt;&lt;col style="width:132px"/&gt;&lt;col style="width:375px"/&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="background: #4f81bd"&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Algorithme&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Standard&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p style="text-align: center"&gt;&lt;span style="color:white"&gt;&lt;strong&gt;Commentaire&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;CTR_DRBG
&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;NIST SP 800-90&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;PRNG par défaut de la plateforme. PRNG des CSP MS de type RSA et disponible via CNG (BCRYPT_RNG_ALGORITHM).&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;DUAL_EC_DRBG
&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;NIST SP 800-90&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;Disponible via CNG seulement (BCRYPT_RNG_DUAL_EC_ALGORITHM).&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;FIPS 186-2&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;FIPS 186-2&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"&gt;&lt;p&gt;PRNG des CSP MS de type DSS et du provider d'algorithme BCRYPT_DSA_ALGORITHM pour CNG et disponible via CNG (BCRYPT_RNG_FIPS186_DSA_ALGORITHM). &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;La source d'entropie des PRNG a aussi été enrichie par le Trusted Platform Module (fonction &lt;em&gt;TPM_GetRandom&lt;/em&gt;) lorsque disponible. 
&lt;/p&gt;&lt;p&gt;Sur Windows Vista RTM et Windows Server 2003 SP2, le PRNG par défaut (CSP MS de type RSA, FIPS.SYS sur Windows Server 2003, ou pour Windows Vista CNG, le provider d'algorithme BCRYPT_RNG_ALGORITHM) suit les recommandations de la section « &lt;em&gt;General Purpose Random Number Generation&lt;/em&gt; » toujours de la publication &lt;a href="http://csrc.nist.gov/publications/fips/fips186-2/fips186-2-change1.pdf"&gt;FIPS 186-2&lt;/a&gt; et aussi à base de SHA-1 pour la fonction G. Alors que le PRNG FIPS 186-2 assure que le nombre aléatoire généré est inférieur au nombre premier q de la clé publique DSA, cette variante générique, elle ne procède pas à  cette réduction. La motivation pour son remplacement par CTR_DRBG de NIST 800-90 est de bénéficier des avancées les plus récentes en matière de standards cryptographiques.
&lt;/p&gt;&lt;p&gt;Récemment, la presse s'est fait écho de &lt;a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9048438"&gt;défauts du PRNG de Windows 2000&lt;/a&gt; et Windows XP mis en exergue par les informaticiens &lt;a href="http://eprint.iacr.org/2007/419.pdf"&gt;&lt;em&gt;Dorrendorf/Gutterman/Pinkas&lt;/em&gt;&lt;/a&gt; de l'Université Hébraïque de Jérusalem et l'Université d'Haïfa. En principe, la conformité du PRNG de Windows Vista RTM et Windows Server 2003 SP2 à FIPS 186-2 fait que ces défauts n'affectent pas ces plateformes. De même, ils seront corrigés dans le Service Pack 3 de Windows XP par une conformité plus stricte au standard FIPS 186-2.
&lt;/p&gt;&lt;p&gt;Finalement, il est bien connu qu'on peut utiliser l'API &lt;a href="http://msdn2.microsoft.com/en-us/library/aa387694.aspx"&gt;&lt;em&gt;RtlGenRandom&lt;/em&gt;&lt;/a&gt; pour faire l'économie du « chargement » de CryptoAPI et un CSP (&lt;em&gt;CryptAcquireContext&lt;/em&gt;). De même, les librairies c-runtime récentes de Microsoft utilisent &lt;em&gt;RtlGenRandom&lt;/em&gt; pour la fonction rand_s. Il faut noter cependant que &lt;em&gt;RtlGenRandom&lt;/em&gt;, même s'il utilise la même source d'entropie, n'implémente pas FIPS 186-2. D'ailleurs le commentaire de la documentation n'en recommande pas l'usage : «&lt;em&gt;It (RtlGenRandom) may be altered or unavailable in subsequent versions. Instead, use the CryptGenRandom function.&lt;/em&gt; ». Pour avoir du FIPS 186-2 il faut utiliser CryptoAPI ou CNG, et on peut s'attendre à ce que sur Windows Vista SP1 et Windows Server 2008 ce soit la même chose pour CTR_DRBG.
&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7010257" width="1" height="1"&gt;</description></item><item><title>S4U2Self et WCF</title><link>http://blogs.msdn.com/jean-yves_poublan/archive/2007/04/21/s4u2self-et-wcf.aspx</link><pubDate>Sat, 21 Apr 2007 09:27:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2217537</guid><dc:creator>jean-yves poublan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jean-yves_poublan/comments/2217537.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jean-yves_poublan/commentrss.aspx?PostID=2217537</wfw:commentRss><description>&lt;p&gt;Lors de mon précédent poste sur S4U2Self, j'ai un peu utilisé les termes &lt;em&gt;impersonation&lt;/em&gt; et &lt;em&gt;délégation&lt;/em&gt; sans y attacher plus de précision. J'ai aussi indiqué que ce sont les applications qui doivent mettre en œuvre la transition de protocole. En fait WCF (Windows Communication Foundation – précédemment Indigo), qui fait partie du .Net Framework 3.0 et qui est disponible aussi bien sur Windows Vista/Longhorn Server que sur Windows XP/Windows Server 2003, offre la transition de protocole d'une authentification client par certificat vers Kerberos.
&lt;/p&gt;&lt;p&gt;Mais commençons par l'impersonation et la délégation. Sur la plateforme Windows, il est courant de faire la distinction entre une &lt;em&gt;impersonation&lt;/em&gt; qui permet l'accès à des ressources locales, et une &lt;em&gt;délégation&lt;/em&gt; qui permet l'accès à  des ressources distantes. L'API Windows reflète cette distinction par le biais du niveau d'impersonation du jeton: &lt;em&gt;SecurityAnonymous&lt;/em&gt;,  &lt;em&gt;SecurityIdentification&lt;/em&gt;,  &lt;em&gt;SecurityImpersonation&lt;/em&gt;, et  &lt;em&gt;SecurityDelegation&lt;/em&gt; (voir SECURITY_IMPERSONATION_LEVEL sur &lt;a href="http://msdn2.microsoft.com/en-us/library/aa489535.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa489535.aspx&lt;/a&gt;).  Je vous encourage à relire le classique &lt;a href="http://www.develop.com/books/pws/" title="Windows Programming Security - Keith Brown"&gt;Windows Programming Security&lt;/a&gt; (Chapitre 4 – Logon Sessions) ainsi que le &lt;a href="http://www.pluralsight.com/wiki/default.aspx/Keith.GuideBook/HomePage.html" title="The .NET Developer's Guide to Windows Security"&gt;Livre Wiki de Keith Brown&lt;/a&gt; (ainsi bien sur que le &lt;a href="http://msdn2.microsoft.com/en-us/library/default.aspx" title="SDK Windows sur MSDN"&gt;SDK Windows&lt;/a&gt;), mais pour moi ces distinctions sont des facilités techniques liées à NTLM/Kerberos. Très schématiquement: si le client s'est authentifié via NTLM, le niveau du jeton est &lt;em&gt;SecurityImpersonation&lt;/em&gt;, et le serveur ne peut accéder pour le compte du client qu'aux ressources locales.  Si le client s'est authentifié via Kerberos (et moyennant le fait que la délégation Kerberos soit mise en œuvre), le niveau du jeton est &lt;em&gt;SecurityDelegation&lt;/em&gt;, et le serveur peut accéder pour le compte du client à des services distants.
&lt;/p&gt;&lt;p&gt;Cette distinction entre impersonation et délégation ne peut être généralisée. Je m'explique: pour pouvoir accéder à des ressources ou des services distants en tant que son client, un serveur doit avoir des "&lt;em&gt;network credentials&lt;/em&gt;" pour ce client. Cela peut être le mot de passe du client ou un ticket TGT Kerberos "forwardable". Imaginons que le serveur possède le mot de passe du client, il peut ouvrir une session de logon pour le client (&lt;em&gt;LogonUser&lt;/em&gt;), puis impersonner ce client (&lt;em&gt;ImpersonateLoggedUser&lt;/em&gt;) et accéder à  des ressources distantes pour le compte du client. Le niveau d'impersonation du jeton n'est pourtant "que" &lt;em&gt;SecurityImpersonation.&lt;/em&gt; C'est aussi le cas d'une session de logon obtenue via S4U2Self. La session de logon possède un ticket Kerberos "forwardable", donc des "&lt;em&gt;network credentials&lt;/em&gt;", malgré le fait que le niveau du jeton ne soit que &lt;em&gt;SecurityImpersonation&lt;/em&gt;, l'accès aux ressources distantes pour le compte du client est possible. Je dirais aussi que le niveau du jeton &lt;em&gt;SecurityDelegation&lt;/em&gt; indique que l'utilisateur s'est authentifié via Kerberos, et qu'il n'y a pas eu de transition de protocole.
&lt;/p&gt;&lt;p&gt;L'utilisation de l'impersonation et de la delegation par WCF fait l'objet d'une fiche technique &lt;a href="http://msdn2.microsoft.com/en-us/library/ms730088.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms730088.aspx&lt;/a&gt;. Deux méthodes sont possibles:
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;S4U-Based Impersonation&lt;/em&gt;&lt;/strong&gt; – cette méthode couvre la transition de protocole d'une authentification client par certificat vers l'ouverture d'une session de logon Windows via S4USelf. WCF prend en charge cette transition pour l'application.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Cached Token Impersonation&lt;/em&gt;&lt;/strong&gt; – cette méthode couvre les autres mécanismes. Typiquement authentification basic, authentification client SSL/TLS avec mapping du certificat sur compte AD, Kerberos avec ou sans délégation, etc… 
&lt;/p&gt;&lt;p&gt;La documentation détaille les niveaux d'impersonation du jeton Windows obtenu pour chacun des cas. Des collègues m'ont demandé si cette documentation était réellement correcte car elle indiquait un niveau "Impersonation" pour des cas où l'accès distant (scenario d'une délégation) est possible. En regard de ce que je mentionne ci-dessus, la doc est correcte. On peut admettre cependant qu'il aurait été pertinent d'indiquer, en plus du niveau d'impersonation, les cas pour lesquels l'accès distant est possible, plutôt que de laisser le développeur/architecte le déduire.
&lt;/p&gt;&lt;p&gt;Extraits de la documentation:
&lt;/p&gt;&lt;h1&gt;&lt;span style="font-family:Verdana; font-size:9pt"&gt;Impersonation Level Obtained from UserName Credentials and Cached Token Impersonation
&lt;/span&gt;&lt;/h1&gt;&lt;div&gt;&lt;table style="border-collapse:collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="width:156px"/&gt;&lt;col style="width:184px"/&gt;&lt;col style="width:138px"/&gt;&lt;col style="width:156px"/&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="background: #cccccc"&gt;&lt;td vAlign="bottom" style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  solid #dddddd 0.75pt; border-left:  solid #dddddd 0.75pt; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;strong&gt;Allowed Impersonation Level &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td vAlign="bottom" style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  solid #dddddd 0.75pt; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;strong&gt;Service has SeImpersonatePrivilege &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td vAlign="bottom" style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  solid #dddddd 0.75pt; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;strong&gt;Service and client are capable of delegation &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td vAlign="bottom" style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  solid #dddddd 0.75pt; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;strong&gt;Cached token ImpersonationLevel &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: white"&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  solid #dddddd 0.75pt; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;n/a&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;Yes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;Yes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="color:red; font-size:8pt"&gt;&lt;strong&gt;Delegation&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: white"&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  solid #dddddd 0.75pt; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;n/a&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;Yes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;No&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="color:red; font-size:8pt"&gt;&lt;strong&gt;Impersonation&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: white"&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  solid #dddddd 0.75pt; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;n/a &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;No&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;n/a&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 0.75pt; border-right:  solid #dddddd 0.75pt"&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;Identification&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Verdana; font-size:9pt"&gt;&lt;strong&gt;Impersonation Level Obtained from S4U-based Impersonation
&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse" border="0"&gt;&lt;colgroup&gt;&lt;col style="width:158px"/&gt;&lt;col style="width:158px"/&gt;&lt;col style="width:159px"/&gt;&lt;col style="width:159px"/&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr style="background: #cccccc"&gt;&lt;td vAlign="bottom" style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  solid #dddddd 1.0pt; border-left:  solid #dddddd 1.0pt; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;strong&gt;Service has SeTcbPrivilege &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td vAlign="bottom" style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  solid #dddddd 1.0pt; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;strong&gt;Service has SeImpersonatePrivilege &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td vAlign="bottom" style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  solid #dddddd 1.0pt; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;strong&gt;Service and client are capable of delegation &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td vAlign="bottom" style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  solid #dddddd 1.0pt; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;&lt;strong&gt;Cached token ImpersonationLevel &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: white"&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  solid #dddddd 1.0pt; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;Yes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;Yes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;n/a&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="color:red; font-size:8pt"&gt;&lt;strong&gt;Impersonation&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: white"&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  solid #dddddd 1.0pt; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;Yes&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;No&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;n/a&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;Identification&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: white"&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  solid #dddddd 1.0pt; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;No&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;n/a&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="font-size:8pt"&gt;n/a&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="padding-top: 5px; padding-left: 5px; padding-bottom: 5px; padding-right: 5px; border-top:  none; border-left:  none; border-bottom:  solid #dddddd 1.0pt; border-right:  solid #dddddd 1.0pt"&gt;&lt;p&gt;&lt;span style="color:black; font-size:8pt"&gt;Identification&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Jusqu'à présent, il fallait coder soi-même la transition de protocole dans une application de type passerelle.  WCF l'offre de base. Le revers de la médaille est que la passerelle doit s'exécuter en TCB comme l'indique le tableau ci-dessus.
&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2217537" width="1" height="1"&gt;</description></item><item><title>RMS et gestion des droits numériques en entreprise avec IT-EXPERT</title><link>http://blogs.msdn.com/jean-yves_poublan/archive/2007/04/14/rms-et-gestion-des-droits-num-riques-en-entreprise-avec-it-expert.aspx</link><pubDate>Sat, 14 Apr 2007 08:58:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2127039</guid><dc:creator>jean-yves poublan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jean-yves_poublan/comments/2127039.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jean-yves_poublan/commentrss.aspx?PostID=2127039</wfw:commentRss><description>&lt;p&gt;La protection de vos documents et gestion des droits numériques en entreprise? C'est possible, avec Rights Management Services qui existe depuis 2003, qui a fait ses preuves et qui est maintenant bien ancré dans la plateforme. Le serveur RMS est un ensemble de services Web qui prend en charge la gestion des licences, et l'API cliente RMS (en style Win32 ou en classes .Net avec le .Net Framework 3.0) permet d'incorporer les fonctions de protection dans les applications. Vous trouverez une overview RMS dans mon article paru ce mois-ci dans it-expert: &lt;a href="http://www.it-expertise.com/Rubriques/Default.aspx?cat=3"&gt;http://www.it-expertise.com/Rubriques/Default.aspx?cat=3&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;En plus du téléchargement du &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=48529F43-3BD8-46B4-9091-A0161E022856&amp;amp;displaylang=en"&gt;SDK RMS&lt;/a&gt;, vous trouverez des informations utiles dans nos présentations récentes des &lt;a href="http://www.microsoft.com/france/Vision/WebcastMsdn.aspx?EID=a7433a9f-29e5-4244-8ad5-21930aceac66"&gt;JMS 2006&lt;/a&gt; et &lt;a href="http://www.microsoft.com/france/vision/WebcastTechNetTechDays.aspx?EID=c60c31ba-2aee-4b78-b745-c4b933f39af6"&gt;Techdays 2007&lt;/a&gt;. Cette année, mes collègues Philippe Béraud et Stéphane Saunier ont présenté les possibilités d'intégration de RMS avec les identités ADFS sur Windows Longhorn Server.
&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2127039" width="1" height="1"&gt;</description></item><item><title>S4U2Self et renforcement des services</title><link>http://blogs.msdn.com/jean-yves_poublan/archive/2007/04/08/s4u2self-et-renforcement-des-services.aspx</link><pubDate>Sun, 08 Apr 2007 11:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2050843</guid><dc:creator>jean-yves poublan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jean-yves_poublan/comments/2050843.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jean-yves_poublan/commentrss.aspx?PostID=2050843</wfw:commentRss><description>&lt;P&gt;Il existe une fonction de la plateforme Windows Server 2003 qui permet d'ouvrir une session de logon pour un compte du domaine sans mot de passe. Pas mal! De mes tests, ca marche aussi sur Windows Vista. &lt;/P&gt;
&lt;P&gt;Cette fonction s'appuie sur S4U2Self (&lt;EM&gt;S4U-to-Self&lt;/EM&gt;) de la famille d'extensions Kerberos Windows (S4U ou &lt;EM&gt;Service-for-User&lt;/EM&gt;), et on la désigne couramment du terme "transition de protocole". En quoi l'ouverture d'une session de logon sans mot de passe est-elle une transition de protocole? En rien. C'est plutôt qu'elle va permettre la fameuse transition de protocole, qui doit être faite par une application. Une telle application, disons une passerelle, va authentifier l'utilisateur via un protocole (par exemple authentification client SSL/TLS) puis va ouvrir une session de logon pour cet utilisateur, ce qui va lui permettre d'accéder aux ressources distantes via Kerberos (plus précisément une autre extension Windows dite S4U2Proxy) pour le compte de l'utilisateur. La "transition" du premier protocole vers Kerberos, c'est l'application qui l'effectue, pas le système. &lt;/P&gt;
&lt;P&gt;Cette transition pourrait être faite sans S4U2Self, mais dans ce cas elle nécessiterait que l'application connaisse les mots de passe des utilisateurs. Pour ce faire elle pourrait les obtenir via une authentification "basic", ou tout simplement en avoir une liste. La transition de protocole facilite donc la mise en œuvre de passerelles frontales qui permettent l'accès à des services ou ressources "&lt;EM&gt;backend&lt;/EM&gt;" en Kerberos, sans que ces passerelles n'aient connaissance des mots de passe des utilisateurs. &lt;STRONG&gt;&lt;EM&gt;Le scenario cible est celui d'une organisation ayant déployé un domaine Active Directory avec Kerberos, et souhaitant permettre l'accès à des ressources en extranet avec une authentification client SSL/TLS par certificat.&lt;/EM&gt;&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;Ouvrir une session de logon sans connaitre le mot de passe du compte? Heureusement (ou bien évidemment) certaines conditions d'appliquent: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Le compte du domaine (autrement dit l'identité) qui effectue l'opération doit être &lt;STRONG&gt;approuvé pour la transition de protocole&lt;/STRONG&gt;. Plus précisément, il s'agit de la configuration suivante au niveau du compte: "&lt;EM&gt;Trust this user for delegation to specified services only&lt;/EM&gt;" et "&lt;EM&gt;Use any authentication protocol&lt;/EM&gt;". Si la passerelle s'exécute avec un compte utilisateur dédié du domaine, c'est ce compte auquel il faudra faire confiance pour la transition de protocole. Si la passerelle s'exécute avec un compte built-in (Network Service, ou Local System), l'approbation pour la transition de protocole sera attribuée au compte machine du domaine. &lt;/LI&gt;
&lt;LI&gt;Le TGT Kerberos "&lt;EM&gt;forwardable&lt;/EM&gt;" ainsi obtenu ne permet d'obtenir ensuite un ticket de service Kerberos (via S4U2Proxy cette fois) que pour les services qui figurent dans la liste A2D2 (&lt;EM&gt;Allowed-to-delegate-to&lt;/EM&gt;). Chaque identité &lt;EM&gt;approuvée pour transition&lt;/EM&gt; a sa propre liste de contraintes A2D2. &lt;/LI&gt;
&lt;LI&gt;Le compte de l'utilisateur pour lequel l'ouverture de session de logon sans mot de passe s'effectue ne doit pas être un compte "&lt;EM&gt;sensitive and cannot be delegated&lt;/EM&gt;". Les comptes Active Directory peuvent ainsi être configurés pour interdire leur impersonation. &lt;/LI&gt;
&lt;LI&gt;Le code de la passerelle effectuant l'opération doit faire partie de la &lt;EM&gt;Trusted Computing Base&lt;/EM&gt;, autrement dit avoir le privilège &lt;EM&gt;SeTcbPrivilege&lt;/EM&gt;. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Dans ses articles sur la transition de protocole (&lt;A href="http://msdn.microsoft.com/msdnmag/issues/03/04/SecurityBriefs/" mce_href="http://msdn.microsoft.com/msdnmag/issues/03/04/SecurityBriefs/"&gt;http://msdn.microsoft.com/msdnmag/issues/03/04/SecurityBriefs/&lt;/A&gt; et plus récemment &lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/01/SecurityBriefs/default.aspx?loc=fr" mce_href="http://msdn.microsoft.com/msdnmag/issues/07/01/SecurityBriefs/default.aspx?loc=fr"&gt;http://msdn.microsoft.com/msdnmag/issues/07/01/SecurityBriefs/default.aspx?loc=fr&lt;/A&gt; – maintenant disponible en Français &lt;SPAN style="FONT-FAMILY: Wingdings"&gt;J&lt;/SPAN&gt;) Keith Brown analyse le &lt;EM&gt;trade-off&lt;/EM&gt; entre une passerelle qui connait les mots de passe de l'utilisateur et une passerelle s'appuyant sur la transition de protocole. Il semble que la transition de protocole l'emporte de par la contrainte de délégation (les services cible doivent figurer sur la liste A2D2) qui limiterait les dégâts en cas de compromission du service. Pour ma part, je pense qu'une analyse au cas par cas est nécessaire. Dans son article d'avril 2004, Keith Brown mentionne qu'en théorie, la transition de protocole peut permette l'accès aux ressources distantes alors que l'accès aux ressources locales n'est pas possible. Cela m'a pris un moment pour percuter sur cette remarque anodine qui mérite explication. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Que ce passe-t-il lors d'une transition de protocole? &lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;L'application invoque &lt;EM&gt;LsaLogonUser&lt;/EM&gt; pour ouvrir une session de logon sans connaitre le mot de passe de l'utilisateur. Le système contacte le contrôleur de domaine via S4U2Self pour obtenir un TGT Kerberos pour l'utilisateur. Le système crée une session de logon Windows à laquelle est rattaché le TGT Kerberos. L'application peut maintenant impersoner la session de logon Windows pour accéder à des ressources locales, ou tenter d'accéder à des ressources ou services distants. Lors de l'accès à une ressource distante, le système obtient un ticket de service Kerberos auprès du contrôleur de domaine via S4U2Proxy. Le ticket de service permet d'authentifier l'utilisateur sur la machine distante et d'accéder à la ressource. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Que se passe-il si l'identité de l'application (compte de machine ou d'utilisateur du domaine) n'est pas approuvée pour la transition de protocole? &lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Dans ce cas, le contrôleur de domaine, via S4U2Self, renvoi bien un TGT Kerberos, mais celui-ci n'est pas "&lt;EM&gt;forwardable&lt;/EM&gt;". Le système (dans le cas où l'application fait partie du TCB) crée une session de logon de niveau impersonation à laquelle est rattaché le TGT Kerberos. Apres impersonation, l'accès aux ressources locales est possible. Cependant un accès aux ressources distantes n'est pas possible parce que le TGT n'étant pas &lt;EM&gt;forwardable&lt;/EM&gt; l'obtention d'un ticket de service via S4U2Proxy échouerait (le système ne le tente même pas). &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Que se passe-t-il si l'application ne fait pas partie du TCB? &lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Dans ce cas, le TGT Kerberos obtenu via S4U2Self est bien &lt;EM&gt;forwardable&lt;/EM&gt; (l'identité est &lt;EM&gt;approuvée pour transition de protocole&lt;/EM&gt;), mais la session de logon Windows est de niveau &lt;EM&gt;identity&lt;/EM&gt;. L'accès aux ressources locales n'est pas possible (un jeton de niveau &lt;EM&gt;identity&lt;/EM&gt; est utile pour déterminer les groupes de l'utilisateur, mais ne permet pas l'accès aux ressources auxquelles l'utilisateur aurait droit). Puisque le TGT Kerberos sous jacent est de niveau &lt;EM&gt;forwardable&lt;/EM&gt;, rien n'empêche l'obtention d'un ticket de service via S4U2Proxy tout à fait valide pour un accès distant. Cependant, le système n'est pas censé supporter ce scenario, et la situation est intenable, et c'est la raison pour laquelle elle a été mentionnée "&lt;EM&gt;en théorie&lt;/EM&gt;". &lt;/P&gt;
&lt;P&gt;Le tableau suivant illustre la situation: &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE class="" style="BORDER-COLLAPSE: collapse" border=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="WIDTH: 68px"&gt;
&lt;COL style="WIDTH: 93px"&gt;
&lt;COL style="WIDTH: 115px"&gt;
&lt;COL style="WIDTH: 126px"&gt;
&lt;COL style="WIDTH: 151px"&gt;&lt;/COLGROUP&gt;
&lt;TBODY vAlign=top&gt;
&lt;TR style="BACKGROUND: #5263db; HEIGHT: 37px"&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: white 1pt solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: white 1pt solid; PADDING-TOP: 5px; BORDER-BOTTOM: white 3pt solid" vAlign=center colSpan=2&gt;
&lt;P style="TEXT-ALIGN: center"&gt;&lt;SPAN style="COLOR: white"&gt;&lt;STRONG&gt;Compte de service&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: white 1pt solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 3pt solid" vAlign=center&gt;
&lt;P style="TEXT-ALIGN: center"&gt;&lt;SPAN style="COLOR: white"&gt;&lt;STRONG&gt;Jeton&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: white 1pt solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 3pt solid" vAlign=center&gt;
&lt;P style="TEXT-ALIGN: center"&gt;&lt;SPAN style="COLOR: white"&gt;&lt;STRONG&gt;Ticket Kerberos&lt;BR&gt;S4U2Self&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: white 1pt solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 3pt solid" vAlign=center&gt;
&lt;P style="TEXT-ALIGN: center"&gt;&lt;SPAN style="COLOR: white"&gt;&lt;STRONG&gt;Fonctionnel&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="BACKGROUND: #bfbfbf; HEIGHT: 58px"&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: white 1pt solid; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid" vAlign=center&gt;
&lt;P&gt;&lt;STRONG&gt;TCB &lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid" vAlign=center&gt;
&lt;P&gt;&lt;STRONG&gt;Approuvé pour transition &lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Impersonation &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Forwardable &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Délégation*&lt;BR&gt;Accès distant &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="BACKGROUND: #dddee7; HEIGHT: 39px"&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: white 1pt solid; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid" vAlign=center&gt;
&lt;P&gt;&lt;STRONG&gt;TCB &lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid" vAlign=center&gt;
&lt;P&gt;&lt;STRONG&gt;- &lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Impersonation &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Non forwardable &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Impersonation&lt;BR&gt;Accès local&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="BACKGROUND: #bfbfbf; HEIGHT: 39px"&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: white 1pt solid; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid" vAlign=center&gt;
&lt;P&gt;&lt;STRONG&gt;- &lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid" vAlign=center&gt;
&lt;P&gt;&lt;STRONG&gt;Approuvé pour transition&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Identity &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Forwardable &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Identity &lt;/P&gt;
&lt;P&gt;Découverte des groupes (autorisation) &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="BACKGROUND: #dddee7; HEIGHT: 39px"&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: white 1pt solid; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid" vAlign=center&gt;
&lt;P&gt;&lt;STRONG&gt;- &lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid" vAlign=center&gt;
&lt;P&gt;&lt;STRONG&gt;- &lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Identity &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Non forwardable &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: white 1pt solid; PADDING-RIGHT: 10px; BORDER-TOP: medium none; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; BORDER-LEFT: medium none; PADDING-TOP: 5px; BORDER-BOTTOM: white 1pt solid"&gt;
&lt;P&gt;Identity &lt;/P&gt;
&lt;P&gt;Découverte des groupes (autorisation) &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P style="TEXT-ALIGN: center"&gt;*Via S4U2Proxy – sujet aux contraintes A2D2 et le fait que le compte de l'utilisateur ne soit pas "&lt;EM&gt;sensitive and cannot be delegated&lt;/EM&gt;" &lt;/P&gt;
&lt;P&gt;On fera remarquer que la notion de TCB est une notion tout à fait locale. Si vous êtes TCB, vous êtes tout puissant sur la machine en local. Le contrôleur de domaine, cela lui fait une belle jambe que vous soyez TCB ou non. D'ailleurs il ne le sait même pas. La notion d'approbation pour transition est quant à elle une notion du domaine. En local, que votre identité soit ainsi privilégiée pour la transition au niveau du domaine n'a que peu d'importance. Tant que vous n'êtes pas TCB, vous ne pourrez impersoner l'utilisateur (entendu sans connaitre son mot passe) ni accéder pour son compte à ses ressources. Ses ressources locales cela s'entend. &lt;/P&gt;
&lt;P&gt;Pour les ressources distantes le fait que le système local (de la passerelle) ne le permet pas non plus ne doit pas être considéré comme une mesure de sécurité quelconque. Ce qui nous amène à la remarque (que vous trouverez évidente) suivante: le trust pour délégation est une fonction extrêmement sensible puisque l'identité du domaine ainsi trustée va pouvoir accéder aux ressources des autres et pour le compte des autres sans connaitre leur mot de passe. Granted, cet accès est contraint aux seules ressources figurant sur la liste A2D2, mais quand même... Il est fortement recommandé dès lors qu'on utilise la transition de protocole de configurer les comptes administrateur (ainsi que ceux qui n'ont pas lieu d'accéder aux services de la passerelle) en "&lt;EM&gt;sensitive and cannot be delegated&lt;/EM&gt;. Malheureusement, Windows Server 2003 ne le fait pas automatiquement. &lt;/P&gt;
&lt;P&gt;Je veux pour exemple de la sensibilité de la transition de protocole le scenario suivant: vous avez une machine du domaine dont le compte machine a été trusté pour délégation avec dans la liste A2D2 un serveur de fichiers. Un utilisateur "standard" qui n'a aucun droit sur le serveur de fichier en question ouvre une session de logon interactive sur cette machine et tente d'accéder aux fichiers du serveur de fichiers avec un net use. Non seulement l'accès réussi, mais l'accès se fait avec le compte d'administrateur du domaine. Le redirecteur SMB fait du zèle, et c'est commode! Si ce n'était pas le scenario souhaité, il aurait fallu restreindre et configurer le compte administrateur du domaine en "&lt;EM&gt;sensitive and cannot be delegated&lt;/EM&gt;". &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Et le renforcement des services, alors, après cette (longue) explication? &lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;La factorisation des parties sensibles d'une application ou d'un service nécessitant privilèges élevés fait partie des meilleures pratiques de sécurité. Keith Brown l'illustre en &lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/01/SecurityBriefs/default.aspx?loc=fr" mce_href="http://msdn.microsoft.com/msdnmag/issues/07/01/SecurityBriefs/default.aspx?loc=fr"&gt;factorisant la transition de protocole&lt;/A&gt; dans un composant COM+ out-process. La passerelle peut ainsi s'exécuter sans privilège TCB, et la partie du code nécessitant ce privilège (le composant COM+) ne fait pas face au réseau. &lt;/P&gt;
&lt;P&gt;Sur Windows Vista et Longhorn Server, on pourra tirer parti des mécanismes de renforcement des services pour une telle passerelle en tant que service Win32. Imaginons que le service s'exécute avec le compte built-in &lt;EM&gt;Network Service&lt;/EM&gt;. Ce compte ne possède pas moins d'une dizaine de privilèges. Hors, parmi ces privilèges, seul celui d'impersoner (impersonation de la session de logon obtenue via la transition de protocole elle-même effectuée par le composant COM+). La première chose qu'on pourra effectuer est la configuration du service pour n'avoir que ce privilège. &lt;/P&gt;
&lt;P&gt;Pour permettre l'accès au composant COM+, on pourrait être tenté de rajouter le compte &lt;EM&gt;Network Service&lt;/EM&gt; dans les rôles COM+ définis. Cependant cela donnerait accès à la transition de protocole à l'ensemble du code qui s'exécute en tant que &lt;EM&gt;Network Service&lt;/EM&gt;. Plutôt, on configurera le service pour avoir un SID de service (SIDType=unrestricted, voir &lt;A href="https://blogs.technet.com/voy/archive/2007/03/22/per-service-sid.aspx" mce_href="https://blogs.technet.com/voy/archive/2007/03/22/per-service-sid.aspx"&gt;https://blogs.technet.com/voy/archive/2007/03/22/per-service-sid.aspx&lt;/A&gt;) qu'on pourra utiliser pour contrôler finement l'accès aux ressources du service (le composant COM+ peut être vu comme une ressource sensible du service). On ne peut pas directement rajouter un SID de service dans les rôles COM+ avec le snapin mmc "&lt;EM&gt;Component Services&lt;/EM&gt;" mais on peut utiliser l'indirection d'un groupe local (comme "&lt;EM&gt;ProtocolTransitionUsers&lt;/EM&gt;" par exemple). Dans ce cas, on rajoute le SID de service dans le groupe local qui est lui positionne dans le rôle COM+. La syntaxe à utiliser avec les outils d'administration est "NT SERVICE\&amp;lt;service_name&amp;gt;". &lt;/P&gt;
&lt;P&gt;Finalement ou pourra utiliser les règles de restriction réseau (&lt;A href="http://msdn2.microsoft.com/en-us/library/aa365489.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa365489.aspx"&gt;Windows Service Hardening rules&lt;/A&gt;) pour restreindre la passerelle aux seules communications réseau dont elle a besoin. Les règles WSH sont mises en place durant l'installation du service, et ne peuvent pas être modifiées par la configuration du pare-feu intégré Windows. Ces règles sont "statiques" et effectives quelque soit la configuration du pare-feu, y compris sa désactivation par un administrateur. Ces règles ne peuvent que restreindre l'accès au réseau par votre service, et en aucun cas elles ne peuvent l'élargir (par rapport à une configuration du pare-feu existante). &lt;/P&gt;
&lt;P&gt;Vous vous demandez peut-être pourquoi dans cet exemple je propose un SIDType="&lt;EM&gt;unrestricted&lt;/EM&gt;", plutôt que "&lt;EM&gt;restricted&lt;/EM&gt;", et quelles sont les différences. Un SIDType "&lt;EM&gt;unrestricted&lt;/EM&gt;" permet d'avoir un SID de service qu'on pourra utiliser pour un contrôle et une protection fine des ressources du service. Un SIDType "&lt;EM&gt;restricted&lt;/EM&gt;" fait que, en plus du SID de service, le service s'exécute avec jeton restreint en écriture (concept nouveau sur Windows Vista – voir &lt;A href="http://blogs.technet.com/voy/" mce_href="http://blogs.technet.com/voy/"&gt;http://blogs.technet.com/voy/&lt;/A&gt;). Un SIDType="&lt;EM&gt;restricted&lt;/EM&gt;" permet, en plus de la protection des ressources du service, une meilleure protection du système contre une compromission éventuelle du service. En ce sens, l'exécution restreinte de votre service en écriture est une mesure de bonne citoyenneté. Malheureusement, cette mesure peut être onéreuse pour le développeur d'un service Win32, car vous devez maitriser précisément l'ensemble des ressources pour lesquelles votre service a besoin d'un accès en écriture. Lorsqu'on utilise des APIs cela n'est pas toujours facile à faire. &lt;/P&gt;
&lt;P&gt;Alors, à vos transitions! Et bon renforcement… &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2050843" width="1" height="1"&gt;</description></item><item><title>Renforcement des services</title><link>http://blogs.msdn.com/jean-yves_poublan/archive/2007/04/01/renforcement-des-services.aspx</link><pubDate>Sun, 01 Apr 2007 17:10:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2005646</guid><dc:creator>jean-yves poublan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jean-yves_poublan/comments/2005646.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jean-yves_poublan/commentrss.aspx?PostID=2005646</wfw:commentRss><description>&lt;p&gt;Windows Vista et "&lt;em&gt;Longhorn Server&lt;/em&gt;" comportent un certain nombre de mécanismes permettant de renforcer la sécurité des services Win32, et par là celle de la plateforme. Tandis que le contrôle des comptes utilisateurs UAC applique le principe du moindre privilège aux applications et concerne les sessions de logon interactives, le renforcement des services ("&lt;em&gt;service hardening&lt;/em&gt;" en anglais) s'intéresse au moindre privilège pour les services et consiste en l'isolation de ceux-ci en session TS 0 ainsi que la mise en œuvre de mécanismes dont il appartient au développeur de tirer parti: la réduction des privilèges, l'utilisation d'un SID de service pour la protection des ressources du service de manière granulaire, la restriction en écriture pour la protection du système, et les restrictions réseau. Ces mécanismes visent aussi à faciliter l'usage des comptes built-in de service (Local Service et Network Service). 
&lt;/p&gt;&lt;p&gt;J'ai eu l'occasion d'animer une session sur le &lt;a href="http://www.microsoft.com/france/vision/WebcastMsdnTechDays.aspx?EID=7e69be10-7099-4569-80be-5f86ffc1cd5a"&gt;renforcement des services aux Techdays 07&lt;/a&gt; et  les transparents sont en ligne pour téléchargement. Cette session à  donné lieu a une &lt;a href="https://blogs.technet.com/voy/archive/2007/02/23/services-isolation-in-session-0-of-windows-vista-and-longhorn-server.aspx"&gt;série de postes&lt;/a&gt; en collaboration avec mon confrère &lt;a href="https://blogs.technet.com/voy/"&gt;Cyril Voisin (aka Voy)&lt;/a&gt;. Vous y trouverez, je l'espère, la marche à suivre, en tant que développeur pour renforcer la sécurité de vos services Win32.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2005646" width="1" height="1"&gt;</description></item><item><title>Et Dieu inventa UAC</title><link>http://blogs.msdn.com/jean-yves_poublan/archive/2007/03/26/et-dieu-inventa-uac.aspx</link><pubDate>Mon, 26 Mar 2007 22:44:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1954372</guid><dc:creator>jean-yves poublan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jean-yves_poublan/comments/1954372.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jean-yves_poublan/commentrss.aspx?PostID=1954372</wfw:commentRss><description>&lt;p&gt;Ca fait longtemps que je voulais faire un petit billet sur UAC. Mi-janvier, je pensais (naïf) que tout avait été dit. Depuis, User Account Control continue à déchainer les passions. Les uns s'indignent, critiquent et crient au scandale ou à la mauvaise plaisanterie (voyez plutôt, &lt;a href="http://theinvisiblethings.blogspot.com/2007/02/vista-security-model-big-joke.html"&gt;Vista Security Model – A Big Joke?&lt;/a&gt; Ou &lt;a href="http://www.silicon.fr/fr/silicon/news/2007/03/19/kaspersky-s-interroge-vista"&gt;Kaspersky s'interroge…&lt;/a&gt;). Microsoft explique, et rationalise. Ben non, UAC n'est pas une frontière de sécurité nous dit &lt;a href="http://blogs.technet.com/markrussinovich/archive/2007/02.aspx"&gt;Mark&lt;/a&gt;, "&lt;a href="http://windowsvistablog.com/blogs/windowsvista/archive/2007/01/23/security-features-vs-convenience.aspx" target="_blank"&gt;&lt;em&gt;Security Features vs Convenience&lt;/em&gt;&lt;/a&gt;" nous dit Jim. Et puis, on ne va quand même pas chipoter sur les &lt;a href="http://www.symantec.com/enterprise/security_response/weblog/2007/02/an_example_of_why_uac_prompts.html"&gt;couleurs du prompt&lt;/a&gt;… 
&lt;/p&gt;&lt;p&gt;UAC, pour moi (hey, c'est mon blog ici, j'ai le droit de parler pour moi, hein), c'est l'exécution des applications en moindre privilège par défaut. Trois cas se présentent: 1) vous n'êtes pas &lt;em&gt;admin&lt;/em&gt; et n'avez aucun privilège particulier. Très bien vous continuez comme cela. 2) vous n'êtes pas &lt;em&gt;admin&lt;/em&gt;, mais votre compte utilisateur a trop de privilèges. Et bien on vous enlève ceux qui sont en trop. Allez circulez, restez pas là bouche bée! 3) vous êtes &lt;em&gt;admin&lt;/em&gt;?  Tous nos respects. Mais ici, tout le monde est au même régime: utilisateur standard.
&lt;/p&gt;&lt;p&gt;Oh la, oh la! Pas de panique. On sait très bien que certaines actions nécessitent privilèges d'&lt;em&gt;admin&lt;/em&gt;. Deux cas se présentent: votre compte n'est pas &lt;em&gt;admin&lt;/em&gt; et n'a pas les privilèges nécessaires, et bien il va vous falloir trouver un &lt;em&gt;admin&lt;/em&gt; qui puisse venir saisir son mot de passe sur le prompt d'élévation. C'est le scénario "&lt;em&gt;Over The Shoulder&lt;/em&gt;" (OTS). Votre compte est &lt;em&gt;admin, &lt;/em&gt;vous devez alors accorder votre consentement pour l'exécution en mode élevé. C'est le scénario "&lt;em&gt;Admin Approval Mode&lt;/em&gt;" (AAM).
&lt;/p&gt;&lt;p&gt;Embêtant UAC? Ben oui, on est obligé de ralentir, avec tous ces prompts. C'est comme les chicanes aux entrées des agglomérations. Intéressant UAC? Absolument, ca fait des années qu'on parle de s'exécuter en non admin sur Windows. Aujourd'hui Windows Vista me l'offre et s'est supporté par PSS. Plus besoin de lire &lt;a href="http://blogs.msdn.com/aaron_margosis/" title="Le blog d'Aaron Margosis sur &amp;quot;non-admin&amp;quot; "&gt;Margosis&lt;/a&gt;, et de tenter les gymnastiques à la &lt;a href="http://www.microsoft.com/france/msdn/securite/IE-privileges.mspx"&gt;DropMyRights&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Une sécurité à toute épreuve? Ben non. Ce n'est pas parce que vous roulez à 90 que vous n'aurez pas d'accident. Sous XP, une meilleure pratique était d'utiliser deux comptes. Un compte utilisateur pour son travail "normal", et un compte administrateur pour les taches d'administration. Cette pratique est tout autant recommandée sous Windows Vista, et UAC ne vise nullement à la rendre inutile.
&lt;/p&gt;&lt;p&gt;Accro de la vitesse? Ne supporte pas les prompts? Y'a pas d'OS à protéger sur cette machine? Pas de problème, vous pouvez désactiver UAC, et rouler à donf. Vous prenez vos responsabilités. C'est la première chose qu'a fait Barbara, ma belle maman.
&lt;/p&gt;&lt;p&gt;Pour le développeur d'applications Windows Vista, y'a moins le choix. Si vous voulez obtenir le logo Vista (ou plutôt si vous voulez éviter d'indiquer dans les conditions requises "Vista sans UAC"), vous devez prendre en compte UAC et votre application, y compris son installation, doit se comporter décemment lorsqu'UAC est activé. UAC comporte aussi toute une série de paramètres de configuration. La virtualisation des ressources fichiers et base de registre peut être active ou non, la signature des applications nécessitant élévation obligatoire ou non, etc… Votre application se comportera-t-elle correctement dans tous ces cas de figure? 
&lt;/p&gt;&lt;p&gt;J'ai eu l'occasion de présenter une session UAC pour les développeurs aux Techdays 07 dans laquelle j'aborde ce que doit savoir un développeur pour franchir le cap UAC dans les meilleures conditions météo. Les slides sont en ligne sur  &lt;a href="http://www.microsoft.com/france/vision/WebcastMsdnTechDays.aspx?EID=91e693df-a4cd-461b-a104-9fb5cae6aa51"&gt;http://www.microsoft.com/france/vision/WebcastMsdnTechDays.aspx?EID=91e693df-a4cd-461b-a104-9fb5cae6aa51&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Pour le reste, je citerai l'article de mon collègue Jacques Massa sur MSDN &lt;a href="http://www.microsoft.com/france/msdn/windowsvista/Migrer-une-application-vers-Windows-Vista.mspx"&gt;http://www.microsoft.com/france/msdn/windowsvista/Migrer-une-application-vers-Windows-Vista.mspx&lt;/a&gt;, la référence UAC MSDN traduite &lt;a href="http://www.microsoft.com/france/msdn/windowsvista/Developpement-applications-Windows-Vista-utlisant-le-Controle-des-comptes-utilisateur.mspx"&gt;http://www.microsoft.com/france/msdn/windowsvista/Developpement-applications-Windows-Vista-utlisant-le-Controle-des-comptes-utilisateur.mspx&lt;/a&gt;, ainsi que l'excellent post de Kenny Kerr &lt;a href="http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-_1320_-Part-4-_1320_-User-Account-Control.aspx"&gt;http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-_1320_-Part-4-_1320_-User-Account-Control.aspx&lt;/a&gt;. Et bien sûr, le blog UAC &lt;a href="http://blogs.msdn.com/uac/"&gt;http://blogs.msdn.com/uac/&lt;/a&gt;. 
&lt;/p&gt;&lt;p&gt;Ouac, Ouac!
&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1954372" width="1" height="1"&gt;</description></item><item><title>To blog or not to blog</title><link>http://blogs.msdn.com/jean-yves_poublan/archive/2007/03/19/to-blog-or-not-to-blog.aspx</link><pubDate>Mon, 19 Mar 2007 10:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1911484</guid><dc:creator>jean-yves poublan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jean-yves_poublan/comments/1911484.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jean-yves_poublan/commentrss.aspx?PostID=1911484</wfw:commentRss><description>&lt;P&gt;J'ai rien à faire, je m'ennuie… Je ne vois pas d'autre solution que de blogger. Non sérieusement, c'est plutôt la pression des pairs, ou de ne pas être largué par mes mômes (c'est quoi un blog, et on poste où)&amp;nbsp;? Ou de porter renfort à mes collègues pour occuper l'espace (quel espace, y'a de l'espace sur MSDN&amp;nbsp;?)…&lt;/P&gt;
&lt;P&gt;Non, un blog ça peut peut-être servir d'antisèche, genre oui j'avais regardé, mais je ne me souviens déjà plus (encore et toujours victime Alzheimer)… «&amp;nbsp;Heureusement c'est dans mon blog&amp;nbsp;» (d'habitude c'est dans mes slides, mais s'il y avait un moyen de faire sans Powerpoint, ce serait pas mal). Peut-être ca permet aussi de partager le truc de base qu'on n'a jamais compris parce qu'on n'a jamais osé demander, et que personne ne l'explique de base parce que tout le monde (sauf les nulls) le sait bien évidemment.&lt;/P&gt;
&lt;P&gt;J'ai appris cela tôt dans ma carrière à Beaverton (qu'il vaut mieux se souvenir, pas le truc de base)… J'essayais de convaincre mon interviewer que je pourrais programmer pour lui et que justement j'avais récemment implémenté Bresenham. Malheureusement, il m'a demandé de détailler l'algorithme au tableau et j'en étais bien incapable. Puisque que c'est déjà codé, il n'avait qu'à me demander le code, non&amp;nbsp;? J'ai quand même eu le job, mais de justesse j'imagine… Peut-être a-t-il eu le pressentiment que je ne mémorisais pas les choses par cœur et que ca pouvait être une bonne chose. Il a du se dire qu'il prenait le risque que j'avais tout simplement plagiairisé ce bout de code, mais que c'était peu probable, on ne trouvait pas Bresenham sur Google. C'était en Forth sur la carte Hercules. Depuis je prends toujours mes notes Bresenham avec moi quand je me rends à un entretient. Mais ne me demandez pas comment ça marche, XAML et DirectX, ou même LineTo du GDI ça va bien, s'il faut vraiment tirer une ligne…&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG title="Mes notes Bresenham" style="WIDTH: 350px; HEIGHT: 465px" height=465 alt="Mes notes Bresenham" src="http://blogs.msdn.com/photos/jean-yves_poublan/images/2040035/320x425.aspx" width=350 mce_src="http://blogs.msdn.com/photos/jean-yves_poublan/images/2040035/320x425.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Bon, si vous ne voyez pas beaucoup de postes, c'est que mon boss a lu mon blog et qu'il a remédié efficacement à mon problème de temps libre...&lt;/P&gt;
&lt;P style="TEXT-ALIGN: center" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1911484" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jean-yves_poublan/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.msdn.com/jean-yves_poublan/archive/tags/S_26002300_233_3B00_curit_26002300_233_3B00_/default.aspx">S&amp;#233;curit&amp;#233;</category><category domain="http://blogs.msdn.com/jean-yves_poublan/archive/tags/Crypto/default.aspx">Crypto</category><category domain="http://blogs.msdn.com/jean-yves_poublan/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/jean-yves_poublan/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/jean-yves_poublan/archive/tags/.Net/default.aspx">.Net</category></item></channel></rss>