Partager via


Descripteurs de protection

Une chaîne de règle de descripteur de protection contient une liste séquentielle d’un ou de plusieurs protecteurs. Il doit y avoir au moins un protecteur. S’il y en a plusieurs, les protecteurs doivent être séparés dans la chaîne par AND ou OR. Ces valeurs doivent être en majuscules. La syntaxe suivante montre le format de chaîne d’un descripteur de protection.

Descriptor = [ Protector-or
              *( OR-separator Protector-or ) ]

    Protector-or = Protector-and
              *( AND-separator Protector-and )

    OR-separator = "OR"
    AND-separator = "AND"

    Protector-and = providerName EQUALS providerAttributes

    providerName = descr

    providerAttribute = string | hexstring

      ; The following characters are to be escaped when they appear
      ; in the value to be encoded: ESC, one of <escaped>, leading
      ; SHARP or SPACE, trailing SPACE, and NULL.
      string =   [ ( leadchar / pair ) [ *( stringchar / pair )
         ( trailchar / pair ) ] ]

      leadchar = LUTF1 / UTFMB
      LUTF1 = %x01-1F / %x21 / %x24-2A / %x2D-3A / %x3D / %x3F-5B / %x5D-7F

      trailchar  = TUTF1 / UTFMB
      TUTF1 = %x01-1F / %x21 / %x23-2A / %x2D-3A / %x3D / %x3F-5B / %x5D-7F

      stringchar = SUTF1 / UTFMB
      SUTF1 = %x01-21 / %x23-2A / %x2D-3A / %x3D / %x3F-5B / %x5D-7F

      pair = ESC ( ESC / special / hexpair )
      special = escaped / SPACE / SHARP / EQUALS
      escaped = DQUOTE / PLUS / COMMA / SEMI / LANGLE / RANGLE
      hexstring = SHARP 1*hexpair
      hexpair = HEX HEX

      descr   = leadkeychar *keychar
      leadkeychar = ALPHA
      keychar = ALPHA / DIGIT / HYPHEN
      number  = DIGIT / ( LDIGIT 1*DIGIT )

      ALPHA   = %x41-5A / %x61-7A   ; "A"-"Z" / "a"-"z"
      DIGIT   = %x30 / LDIGIT       ; "0"-"9"
      LDIGIT  = %x31-39             ; "1"-"9"
      HEX     = DIGIT / %x41-46 / %x61-66 ; "0"-"9" / "A"-"F" / "a"-"f"

      NULL    = %x00 ; null (0)
      SPACE   = %x20 ; space (" ")
      DQUOTE  = %x22 ; quote (""")
      SHARP   = %x23 ; octothorpe (or sharp sign) ("#")
      DOLLAR  = %x24 ; dollar sign ("$")
      SQUOTE  = %x27 ; single quote ("'")
      LPAREN  = %x28 ; left paren ("(")
      RPAREN  = %x29 ; right paren (")")
      PLUS    = %x2B ; plus sign ("+")
      COMMA   = %x2C ; comma (",")
      HYPHEN  = %x2D ; hyphen ("-")
      DOT     = %x2E ; period (".")
      SEMI    = %x3B ; semicolon (";")
      LANGLE  = %x3C ; left angle bracket ("<")
      EQUALS  = %x3D ; equals sign ("=")
      RANGLE  = %x3E ; right angle bracket (">")
      ESC     = %x5C ; backslash ("\")
      USCORE  = %x5F ; underscore ("_")
      LCURLY  = %x7B ; left curly brace "{"
      RCURLY  = %x7D ; right curly brace "}"

      ; Any UTF-8 [RFC3629] encoded Unicode [Unicode] character
      UTF8    = UTF1 / UTFMB
      UTFMB   = UTF2 / UTF3 / UTF4
      UTF0    = %x80-BF
      UTF1    = %x00-7F
      UTF2    = %xC2-DF UTF0
      UTF3    = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) /
                %xED %x80-9F UTF0 / %xEE-EF 2(UTF0)
      UTF4    = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) /
                %xF4 %x80-8F 2(UTF0)

      OCTET   = %x00-FF ; Any octet (8-bit data unit)

Les descripteurs de protection peuvent actuellement être définis pour les types d’autorisation suivants :

  • Groupe dans une forêt Active Directory.
  • Ensemble d’informations d’identification web.
  • Certificat dans le magasin de certificats de l’utilisateur.

Voici des exemples de chaînes de règles de descripteur de protection pour un groupe Active Directory :

  • « SID=S-1-5-21-4392301 AND SID=S-1-5-21-3101812 »
  • « SDDL=O:S-1-5-5-0-290724G:SYD:(A;; CCDC;;; S-1-5-5-0-290724)(A;;D C;;; WD) »
  • « LOCAL=user »
  • « LOCAL=machine »

Voici quelques exemples de chaînes de règles de descripteur de protection pour un ensemble d’informations d’identification web :

  • « WEBCREDENTIALS=MyPasswordName »
  • « WEBCREDENTIALS=MyPasswordName,myweb.com »

Voici des exemples de chaînes de règles de descripteur de protection pour un certificat :

  • « CERTIFICATE=HashID:sha1_hash_of_certificate »
  • « CERTIFICATE=CertBlob:base64String »

Le descripteur de protection que vous spécifiez détermine automatiquement le fournisseur de protection de clé utilisé. Pour plus d’informations, consultez Fournisseurs de protection.

Notez que le côté gauche du signe égal (=) doit être SID, SDDL, LOCAL, WEBCREDENTIALS ou CERTIFICATE. Ces valeurs ne respectent pas la casse.

Vous devez spécifier une chaîne de règle (ou un nom complet associé à une chaîne de règle) lorsque vous appelez la fonction NCryptCreateProtectionDescriptor . Sinon, étant donné que les chaînes de règles de descripteur de protection sont quelque peu fastidieuses à utiliser et à mémoriser, vous pouvez associer un nom d’affichage à la chaîne de règle et inscrire les deux à l’aide de la fonction NCryptRegisterProtectionDescriptorName . Vous pouvez ensuite utiliser le nom complet dans NCryptCreateProtectionDescriptor.

DPAPI CNG

Fournisseurs de protection