Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les composants qui consomment IDataProtectionProvider doivent passer un paramètre à usage unique à la CreateProtector méthode. Le paramètre d’objectif est inhérent à la sécurité du système de protection des données, car il fournit une isolation entre les consommateurs de chiffrement, même si les clés de chiffrement racine sont identiques.
Lorsqu’un consommateur spécifie un objectif, la chaîne d’objectif est utilisée avec les clés de chiffrement racine pour dériver des sous-clés de chiffrement uniques à ce consommateur. Cela isole le consommateur de tous les autres consommateurs de chiffrement dans l’application : aucun autre composant ne peut lire ses charges utiles et il ne peut pas lire les charges utiles d’un autre composant. Cette isolation rend également impossibles des catégories entières d'attaques contre le composant.
Dans le diagramme ci-dessus, IDataProtector les instances A et B ne peuvent pas lire les charges utiles des autres, seules leurs propres.
La chaîne d’objectif n’a pas besoin d’être secrète. Il doit simplement être unique dans le sens où aucun autre composant bien comporté ne fournira une chaîne de caractères d'objectif identique.
Conseil / Astuce
L’utilisation de l’espace de noms et du nom de type du composant qui consomme les API de protection des données est une bonne règle de pouce, car dans la pratique, ces informations ne sont jamais en conflit.
Un composant créé par Contoso qui est responsable de la frappe des jetons porteurs peut utiliser Contoso.Security.BearerToken comme chaîne de finalité. Ou, encore mieux, il peut utiliser Contoso.Security.BearerToken.v1 comme chaîne de finalité. L’ajout du numéro de version permet à une version ultérieure d’utiliser Contoso.Security.BearerToken.v2 comme finalité, et les différentes versions seraient totalement isolées les unes des autres en ce qui concerne les charges utiles.
Étant donné que le paramètre purposes à CreateProtector est un tableau de chaînes, ce qui précède aurait pu être spécifié en tant que [ "Contoso.Security.BearerToken", "v1" ]. Cela permet d’établir une hiérarchie d’objectifs et ouvre la possibilité de scénarios multilocataires avec le système de protection des données.
Avertissement
Les composants ne doivent pas autoriser l’entrée utilisateur non approuvée à être la seule source d’entrée à des fins de chaîne.
Par exemple, considérez un composant Contoso.Messaging.SecureMessage responsable du stockage des messages sécurisés. Si le composant de messagerie sécurisée devait appeler CreateProtector([ username ]), un utilisateur malveillant pourrait créer un compte avec le nom d'utilisateur « Contoso.Security.BearerToken » dans le but d'inciter le composant à appeler CreateProtector([ "Contoso.Security.BearerToken" ]), provoquant ainsi par inadvertance la génération de charges utiles par le système de messagerie sécurisée, qui pourraient être perçues comme des jetons d'authentification.
Une meilleure chaîne de buts pour le composant de messagerie serait CreateProtector([ "Contoso.Messaging.SecureMessage", $"User: {username}" ]), qui fournit une isolation appropriée.
L'isolation fournie par IDataProtectionProvider, IDataProtector, et les comportements ainsi que les objectifs sont les suivants :
Pour un objet donné
IDataProtectionProvider, laCreateProtectorméthode crée unIDataProtectorobjet lié de manière unique à l’objetIDataProtectionProviderqui l’a créé et au paramètre d’objectif qui a été passé à la méthode.Le paramètre d’objectif ne doit pas être null. (Si des objectifs sont spécifiés en tant que tableau, cela signifie que le tableau ne doit pas être de longueur nulle et que tous les éléments du tableau doivent être non null.) Un objectif de chaîne vide est techniquement autorisé, mais est déconseillé.
Deux arguments sont équivalents si et uniquement s’ils contiennent les mêmes chaînes (à l’aide d’un comparateur ordinal) dans le même ordre. Un argument à usage unique est équivalent au tableau d’objectifs à un seul élément correspondant.
Deux
IDataProtectorobjets sont équivalents si et uniquement s’ils sont créés à partir d’objets équivalentsIDataProtectionProvideravec des paramètres équivalents.Pour un objet donné
IDataProtector, un appel àUnprotect(protectedData)retournera l’originalunprotectedDatasi et uniquement s’il s’agitprotectedData := Protect(unprotectedData)d’un objet équivalentIDataProtector.
Note
Nous ne prenons pas en compte le cas où un composant choisit intentionnellement une chaîne d’objectif connue pour entrer en conflit avec un autre composant. Ce composant serait essentiellement considéré comme malveillant, et ce système n’est pas destiné à fournir des garanties de sécurité si le code malveillant est déjà en cours d’exécution dans le processus de travail.