2010-09-02 4 views
1

Quelle est la meilleure façon de signer numériquement un côté serveur de fichiers avec .Net avant de l'offrir en téléchargement via un site web basé sur asp.netQuelle est la meilleure façon de signer numériquement un fichier zip à télécharger en utilisant .Net

En plus Comment puis-je déclencher la vérification de la signature et prouver que le fichier n'a pas été tapissé lors du téléchargement dans un navigateur Web

+0

HTTPS serait la voie classique. –

+0

HTTPS ne fonctionnera pas si vous voulez que le fichier ZIP soit "autonome" et que sa signature soit vérifiée à tout moment dans le futur. –

Répondre

0

Sans plugin côté client ou gestionnaire de téléchargement, vous ne pouvez pas faire grand-chose. La meilleure façon de le sécuriser serait d'utiliser HTTPS, mais si ce n'est pas une option, la manière habituelle d'assurer l'intégrité est de fournir un hachage MD5 du fichier sur le site que l'utilisateur final peut valider. Si vous le faites en tant que téléchargement de fichier, vous ne pouvez pas vraiment automatiser cette validation côté client sans plugin, car Javascript et tel ne sera pas capable d'accéder au fichier pour le valider.

+0

HTTPS ne fonctionnera pas si vous voulez que le fichier ZIP soit "autonome" et que sa signature soit vérifiée à tout moment dans le futur. Ne pas utiliser MD5, il est maintenant connu pour être faible, utiliser au minimum SHA1, ou plus fort (SHA256 etc) –

0

Vous devez définir quels sont les risques dont vous souhaitez vous défendre et protéger l'utilisateur. Alors que le format AppNote for ZIP de PKWare définit la signature numérique comme faisant partie du format, je doute qu'il existe beaucoup de décompresseurs, qui supportent correctement la validation des signatures numériques dans les fichiers ZIP.

Si vous pensez que le contenu du fichier peut être modifié au milieu, vous avez les options suivantes: 1) HTTPS, comme mentionné ci-dessus 2) Package signé PGP. Vous pouvez créer une signature détachée pour les archives ZIP existantes que vous distribuez et placer la signature près du lien de téléchargement ou, si vous ciblez Windows, créer une archive PGP auto-extractible. Le format PGP inclut également la compression. Dans les deux cas, vous devrez mettre votre clé publique PGP sur votre site. Mais notez, que les personnes qui changent le fichier, seraient également en mesure de changer la clé publique, si vous la distribuez de cette façon.

3

Une signature n'a pas besoin d'être incluse avec le fichier ZIP, elle peut être une signature "détachée". Donc, vous pouvez avoir le zip et permettre à quelqu'un de vérifier le sig, qui est généralement juste une série de caractères hexadécimaux ou base64, hors bande avec une application que vous écrivez.

à un haut niveau, les étapes de signature sont:

AsymmetricAlgorithm privateKey = certificate.PrivateKey; 
byte[] buffer = Encoding.Default.GetBytes(<data from the zip>); 
byte[] signature = privateKey.SignData(buffer, new SHA1Managed()); 

et vérification:

RSACryptoServiceProvider publicKey = certificate.PublicKey.Key as RSACryptoServiceProvider; 
bool verify = publicKey.VerifyData(buffer, new SHA1Managed(), signature); 
Questions connexes