2009-07-26 7 views
1

J'écris une mesure de sécurité avec une application que j'écris où j'ai un securityDLL qui est inclus et signé avec un SNK. Si cet assembly est présent, je vérifie le tableau d'octets qui est retourné lors de l'obtention de sa clé publique, et en comparant cela à mon application.Utilisation de la clé publique de l'assemblage signé en tant que mesure de sécurité

Est-ce une sécurité adéquate pour garantir que quelqu'un n'a pas modifié mon assembly ou fourni sa propre DLL dans l'emplacement correct qui renverrait la clé publique? J'ai regardé ce que les obfuscators font et ils démissionnent de mon assemblée, mais utilisent-ils réellement le SNK ou lisent-ils les internes de l'assemblée et réutilisent-ils cela?

Répondre

3

Si vous conservez le fichier .snk utilisé pour signer l'assembly en toute sécurité, personne ne devrait être en mesure de créer une nouvelle DLL de sécurité avec la même clé publique.

La signature d'un assemblage avec un nom fort nécessite une paire de clés cryptographiques. La clé privée de cette paire est utilisée pour signer l'assemblage. Si quelqu'un devait modifier l'assembly de sécurité, il faudrait re-signer, ce qui nécessiterait le fichier snk d'origine. Si un fichier snk différent était utilisé, l'assembly aurait une clé publique différente.

Si vous deviez ajouter une référence à security.dll, l'exécution garantirait que l'assembly correct était utilisé lors du chargement. Si un assembly a été trouvé avec le même nom et la même version mais un nom fort différent, vous obtiendrez une erreur car le framework classera cela comme un assembly différent de celui référencé à l'origine.

Jetez un oeil à la MSDN docs pour plus d'informations.

2

Tous les assemblys signés avec le même SNK auront la même clé publique, donc non, ce n'est pas une mesure de sécurité à quelque titre que ce soit. Rappelez-vous que nommer fortement un assembly n'est pas pour la sécurité, c'est pour le versioning et pour assurer l'unicité.

+2

Tant qu'un attaquant a accès à vos binaires, ils peuvent les modifier et les résigner avec une nouvelle clé. Ils peuvent également modifier votre assembly appelant pour changer la clé publique qu'il cherche à l'un des leurs. –

Questions connexes