2009-12-23 7 views
0

Je travaille avec un ensemble de retard signé des assemblées que je suis en mesure d'installer et la charge de GAC après avoir sauté la vérification (sn -Vr * ...fichier Snk et retard Signer

Depuis Delaysigning comme un processus nécessite seulement le fichier clé publique

  1. sn -k keys.snk (les deux & publiques clés privées)
  2. sn -p keys.snk pkey.snk (seule clé publique)
  3. Ajouter pkey.snk de projeter des propriétés et cochez 'Signe de retard seulement'
  4. sn -v (ensemble affiche un retard signé)
  5. sn -e (extrait pkey)
  6. fc (pas trouvé diff)

I a constaté que la première 160 bytes of the SNK file is the PKey ... et de repos 436 octets représenter une clé privée. Alors que pour le développement sn-Vr ou sn -R keys.snk (nouvelle paire de clés publique/privée pour remplacer celle avec un delay-signed) devrait suffire, je suis curieux de savoir si extraire la clé publique d'un l'assemblage et l'appairage avec votre propre clé privée fonctionnerait ...

Cela pourrait être un trou de boucle de sécurité potentiel (comme les assemblages sont recherchés avec des jetons de clé publique) ... Pas étonnant qu'il n'y ait pas d'outil intégré dans Framework .Net/SDK qui permet cela.

Existe-t-il un endroit où la structure complète du fichier SNK (format de fichier) est documentée? Cette approche peut-elle fonctionner en général? Qu'est-ce que tu penses?

+1

Quel est exactement le trou de sécurité? Votre description n'est pas claire. – SLaks

+0

J'ai dit "potentiel" ... Pas un expert là-bas ... Haut de ma tête: Vous pourriez prétendre que la clé publique de quelqu'un d'autre est la vôtre ... Et vos jetons de clés publiques correspondraient .. Si j'avais des droits de sécurité assignés/la vérification a sauté en fonction du jeton de clé publique, vous pourriez potentiellement en profiter ... –

Répondre

1

Vous semblez craindre que quelqu'un génère une paire de clés aléatoire, remplacez la clé publique dans la paire de clés par la clé publique d'un autre assembly, puis signez ses propres assemblys pour avoir cette clé publique.

Cela ne fonctionnera pas.
La clé publique dans une paire de clés est dérivée cryptographiquement de la clé privée et l'assembly est signé avec une valeur qui peut uniquement être calculée à l'aide de la clé privée correcte.
Chaque clé privée génère une signature différente et n'est pas interchangeable.

Pour plus d'informations, voir here.

+0

@SLaks: Merci pour votre réponse ... Eh bien, ce n'était pas une question de sécurité :) Ou du moins ce n'était pas prévu ... Vous avez besoin seulement 'clé publique' pour retarder le signe ... Je n'ai pas accès à la clé privée "production" ... Pour que je puisse même charger l'assemblage signé du délai, j'ai besoin de passer la vérification et tout le reste ... Je me demande simplement si je peux re-signer l'assembly en utilisant un fichier SNK qui a une clé publique "release" et ma propre clé privée ... En d'autres termes, je cherche des façons de remplacer une clé publique un fichier SNK qui a les deux clés ... –

+0

@SLaks: C'est vrai quand vous signez directement ... Parce que compil er calcule les hachages avec votre clé privée ... Pas quand vous retardez le signe ... Vous n'avez pas besoin de clé privée ... En outre, sn a l'option de recalculer les hachages sn -Ra ...Je comprends cela car vous pouvez remplacer les hachages dans l'assemblage par de nouveaux. –

+0

Comme je pensais l'avoir expliqué, non. Vous ne pouvez pas mélanger et assortir des parties clés comme ça. – SLaks