A quoi sert un .snk?

Qu’est-ce qu’un fichier .snk? Je sais que cela signifie Strongly Named Key , mais toutes les explications sur ce que c’est et comment ça marche me passent par la tête.

Existe-t-il une explication simple sur la manière dont une clé fortement nommée est utilisée et comment cela fonctionne?

Le fichier .snk est utilisé pour appliquer un nom fort à un assembly .NET . un tel nom consiste en

un nom de texte simple, un numéro de version et des informations sur la culture (le cas échéant) —plus une clé publique et une signature numérique.

Le SNK contient une paire de clés unique – une clé publique et privée qui peut être utilisée pour vous assurer que vous avez un nom fort unique pour l’assembly. Lorsque l’assembly est fortement nommé, un “hachage” est construit à partir du contenu de l’assembly et le hachage est chiffré avec la clé privée. Ensuite, ce hachage signé est placé dans l’assembly avec la clé publique du fichier .snk.

Plus tard, lorsque quelqu’un doit vérifier l’intégrité de l’assembly à nom fort, il génère un hachage du contenu de l’assembly et utilise la clé publique de l’assembly pour déchiffrer le hachage fourni avec l’assembly – si les deux hachages correspondent, la vérification de l’assemblage est réussie.

Il est important de pouvoir vérifier les assemblages de cette manière pour garantir que personne ne bascule un assemblage contre un assemblage malveillant qui subvertira l’ensemble de l’application. C’est la raison pour laquelle les assemblys non dotés de noms forts ne sont pas approuvés de la même manière que les assemblys fortement nommés. Ils ne peuvent donc pas être placés dans le GAC. En outre, il existe une chaîne de confiance: vous ne pouvez pas générer un assembly avec un nom fort qui référence des assemblys sans nom fort.

L’article ” Les secrets du nommage fort “. Fait un excellent travail pour expliquer ces concepts plus en détail. Avec des photos.

Dans un monde the.Net, le fichier SNK est utilisé pour signer vos fichiers binarys compilés. Cela permet à deux choses de se produire:

  1. Vous pouvez enregistrer l’assembly dans le GAC (Global Assembly Cache) . Fondamentalement, vous pouvez le référencer depuis de nombreux endroits sur la même machine sans avoir à conserver plusieurs copies.
  2. Vous pouvez utiliser vos fichiers binarys depuis d’autres fichiers binarys qui sont également signés (il s’agit d’un comportement de type viral étrange en ce qui concerne les assemblys signés).
  3. Votre assemblage ne peut pas être modifié (facilement) par des tiers n’ayant pas access au fichier SNK, offrant au moins une petite sécurité.

Je ne suis pas familier avec le fonctionnement du serveur BizTalk , donc je ne pense pas que je puisse faire la lumière sur l’objective spécifique qu’ils servent dans cet environnement.

J’espère que c’était un peu utile.

Le fichier .snk est utilisé pour signer les assemblys afin de pouvoir les append au Global Assembly Cache (GAC).

Le fichier .snk contient les jetons publics et privés de votre clé. Lorsque vous souhaitez signer certaines données (ou binarys) avec cette clé, une sum de contrôle est calculée sur les données, qui sont ensuite chiffrées avec le jeton privé. La sum de contrôle chiffrée est ensuite ajoutée aux données. Tout le monde peut utiliser le jeton public de votre clé pour déchiffrer la sum de contrôle et la comparer à la sum de contrôle calculée pour vérifier que les données signées n’ont pas été falsifiées.

Vous pouvez en savoir plus sur la cryptographie à clé publique à l’ adresse http://en.wikipedia.org/wiki/Public-key_cryptography .

Un fichier .snk est une version persistante de votre “clé” produite par l’utilitaire sn dans l’utilitaire framework. Vous utilisez ensuite ce fichier pour «signer numériquement» vos assemblys. C’est une clé en deux parties .. combinaison de clé privée-publique. La partie publique de la clé est publiée, c’est-à-dire connue de tous. La partie privée est connue uniquement de vous, le développeur du composant / de l’application et destinée à être conservée de cette manière.

Lorsque vous signez votre assembly, il utilise la clé privée et une valeur de hachage pour votre assembly pour créer une signature numérique incorporée dans votre assembly. Par la suite, toute personne qui charge votre assemblage passe par une étape de vérification. La clé publique est utilisée pour valider si l’assembly vient vraiment de vous. Vous avez juste besoin de la clé publique pour cela (qui est également incorporé dans un formulaire tokenisé dans le manifeste d’assembly). Si l’assemblage a été falsifié, la valeur de hachage serait différente et la charge de l’assemblage serait abandonnée. Ceci est un mécanisme de sécurité.

Un fichier .snk est utilisé pour s’assurer que quelqu’un d’autre ne peut pas glisser son propre assemblage à la place de votre choix. Il fournit une paire de clés de chiffrement / déchiffrement.

Lorsqu’un fichier .snk est utilisé pour signer un assembly, une valeur de code de hachage est calculée à partir du fichier d’assembly et chiffrée à l’aide de la clé privée. Ce “résumé” chiffré est ensuite ajouté à l’assembly avec la clé publique du fichier .snk.

Ensuite, lorsque quelqu’un reçoit votre assembly, il peut également calculer cette valeur de hachage. Ils utilisent la clé publique pour décrypter celle que vous avez calculée et comparez les valeurs calculées. Si l’assembly a été modifié, ces valeurs seront différentes et l’utilisateur de l’assembly saura que l’assembly que vous avez n’est pas celui que vous avez fourni.

Dans le contexte de BizTalk Server, quiconque crée des assemblys personnalisés utilisés par votre solution BizTalk devra utiliser un fichier .snk pour signer l’assembly afin que le serveur BizTalk puisse le charger dans le GAC et l’utiliser.