2009-07-27 8 views
2

Je suis à la recherche d'une bibliothèque de chiffrement de fichiers sous .NET. Il doit être en mesure de rechercher donc CryptoStream est hors de question. (Je sais qu'il hérite d'une méthode Seek mais il n'est pas implémenté.)Bibliothèque de chiffrement de fichiers pour .NET

Je dois chercher car mon application traite de gros fichiers dans un ordre non-séquentiel. J'ai également besoin de lire et d'écrire les fichiers en même temps.

Je sais que la plupart du temps CBC est utilisé pour le cryptage de fichier mais la recherche (et l'écriture) est impossible à utiliser. Mais en quelque sorte les logiciels de chiffrement de disque complet comme TrueCrypt et BitLocker parviennent à l'utiliser comme ça. (Edit: TrueCrypt ne pas utiliser CBC plus, ils ont déménagé à LRW puis à XTS Mon point est qu'il est possible..)

Ce projet passe-temps donc je suis intéressé par les bibliothèques libres. En outre, il n'a pas d'importance si elle ne supporte que .NET 4.

Modifier: Bouncy Castle est pas bon parce qu'il est CipherStream ne peut pas chercher comme CryptoStream de .NET.

Répondre

1

Une option peut être château gonflable qui est gratuit:

http://www.bouncycastle.org/csharp/

Je ne sais pas comment vous voulez rechercher dans votre projet. Mais il a atleast certaines fonctionnalités de contourner les problèmes avec Seek:

« X509CertificateParser/X509CrlParser gère maintenant plusieurs certificats/CRLs dans les flux qui ne supportent pas la recherche »

+0

Merci. Je vais le regarder. – KovBal

+0

Il est très étrange pour moi que juste après avoir lu aléatoirement sur cette bibliothèque que je ne savais pas avant, je suis arrivé à StackOverflow et la première question sur la page d'accueil pourrait être répondue par cette bibliothèque. – dlamblin

+0

@dlamblin: Tout est connecté! :) – KovBal

0

Cherchant est impossible en vertu de Radio-Canada - en fait Le mode CBC est facilement accessible. Pour décrypter le bloc i, il suffit de connaître la clé, le bloc chiffré C_i et le bloc crypté précédent C_i-1. Vous n'avez certainement pas besoin de déchiffrer tout le flux précédent.

+0

Merci! On dirait que je devrais vérifier. Quoi qu'il en soit, je pense que cela devrait faire un commentaire. Si vous vouliez dire que je pourrais facilement l'implémenter, je dirais que j'utilise plutôt une bibliothèque existante, car il est très facile de se tromper. – KovBal

+0

Oh, attends! Rechercher et ** écrire ** est impossible avec CBC parce que vous devrez alors changer tous les autres blocs! – KovBal

+2

Cela est vrai, et la façon dont TrueCrypt (quand il utilisait le mode CBC, ce qui n'est pas le cas depuis longtemps) a contourné ceci est de redémarrer la CBC avec une nouvelle IV au début de chaque secteur. Les disques ne lisent et n'écrivent un secteur qu'à la fois. Vous aurez probablement besoin de trouver une implémentation qui traite les fichiers d'une manière similaire, en les décomposant en morceaux indépendants lus et écrits ensemble. – caf

0

Si vous utilisez AES, le mode XTS est un choix décent. C'est ce que TrueCrypt utilise. Mais XTS n'est pas trivial à mettre en œuvre. Un moyen facile est d'utiliser Threefish: C'est un blockcipher modifiable, donc vous pouvez simplement utiliser l'index de bloc comme tweak, puis crypter les données de la même manière que l'ECB. Inconvénient est que Threefish n'est pas standard. Cela devrait être relativement facile à mettre en œuvre.

Questions connexes