9
votes

Comment stocker la clé utilisée pour chiffrer des fichiers

Je joue avec une application pour sauvegarder des fichiers sur "The Cloud" :) Et je veux crypter les fichiers avant de les stocker. Cette partie que j'ai couverte, mais comme cette application permettra de surveiller les dossiers de changement et de télécharger les fichiers modifiés, je dois stocker la clé que j'utilise pour chiffrer les fichiers avec. L'idée est que l'utilisateur fournit un mot de passe et une clé est générée.

Au moment où j'utilise la framework .NET pour faire le cryptage. J'utilise la classe Rijndaélanie pour chiffrer / déchiffrer et la classe de mots deutLetDeiveBytes pour obtenir la clé.

Mais comment dois-je garder la clé qui est utilisée pour crypter les fichiers? Je souhaite également que le programme commence avec Windows et que vous n'avez pas besoin d'avoir l'utilisateur entrer dans son mot de passe à nouveau.


1 commentaires

4 Réponses :


4
votes

Je vous suggère d'utiliser un cryptage asymétrique comme j'ai décrit ici . Cela vous permettra de disposer que d'avoir une seule clé privée pour protéger (et sauvegarder), même si chaque fichier sera crypté avec une clé différente symétrique .

Vous pouvez également laisser Windows (réellement cryptoapi) protéger la clé à l'aide d'un cspparamètres (et les drapeaux de droite) avec le rsacryptoserviceprovider . Selon vos indicateurs, la clé sera disponible pour la enregistrée sur l'utilisateur (donc qu'elle devient comme sécurisé comme mot de passe de connexion à l'utilisateur).


0 commentaires

1
votes

dpapi a été conçu pour résoudre ce problème défi.


0 commentaires

14
votes

Je recommanderais d'éviter d'utiliser un cryptage asymétrique pour le cryptage de vos fichiers. Le cryptage asymétrique est significativement plus coûteux (calculé) que des algorithmes de cryptage symétriques de la même résistance. Pour crypter de gros dossiers, je recommanderais AES sur RSA n'importe quel jour.

sur votre question - l'API de protection des données (DPAPI) Gaurav mentionne votre meilleur pari sur Windows. Comment: utiliser la protection des données < / p>

DPAPI offre protégezMemory et protégéData . Le premier vous permettant de protéger les secrets en mémoire, ce dernier offre la protection des secrets persistait au disque. L'API s'occupe du cryptage et du déchiffrement pour vous et (selon la portée spécifiée) protégera vos données de l'accès / du déchiffrement par d'autres utilisateurs ou sur d'autres machines.

Pour utiliser DPAPI dans votre scénario, je vous recommande de prendre le mot de passe des utilisateurs, générant une clé de cryptage symétrique (par exemple, PasswordDeiveBytes ), stockant celui-ci à l'aide de DPAPI et à restreindre l'accès à l'utilisateur actuel.

Votre application peut utiliser cette touche pour chiffrer tous les téléchargements. Votre application peut obtenir la clé sans repousser à nouveau l'utilisateur et que la clé pourrait être régénérée par l'utilisateur sur un nouveau système.

Un inconvénient serait qu'une application malveillante également exécutée par le même utilisateur pourrait potentiellement obtenir la clé secrète. Pour protéger contre ce scénario Entropie supplémentaire (efficacement un sel) doit être fourni dans Protégez et Non-récupération . Cependant, la mise en œuvre de cela sera probablement égaré à votre objectif - car vous aurez maintenant besoin d'inviter l'utilisateur à quelque chose qui semble énormément comme un mot de passe.

aussi: lecture intéressante:

Vous pouvez également trouver ce message de backblaze une lecture intéressante. Bien qu'ils n'expliquent pas comment ils appuient votre scénario (les téléchargements cryptés que le fournisseur de cloud ne peut déchiffrer - seulement qu'ils offrent un tel service): http: // blog. backblaze.com/2008/11/12/how-to-make-strong-cryption-asy-a-utilisation/

Disclaimer: Je suis un client satisfait, mais je ne suis pas dans aucune autre manière affiliée à leur service.

PS: Prenez le temps de marquer des réponses acceptables. La communauté vous récompensera.


2 commentaires

Merci Tails, réponse très élaborée. Après quelques tests, cela semble faire exactement ce dont j'ai besoin :)


Et une bonne astuce pour cette réponse est que les données protégées (ici la clé) ne seront pas utiles si l'utilisateur de l'application change ses fenêtres. Si les données sont très importantes et que les fenêtres peuvent être modifiées, il vaut mieux garder la clé (S ) Utiliser des méthodes de cryptage normales pour pouvoir le déchiffrer pour de telles situations (par exemple, vous pouvez fournir un mot de passe constant pour les touches ENC / DEC algorithmes).



0
votes

Je suis d'accord avec la suggestion DPAPI. Voici un certain code pour démontrer comment utiliser la classe ProtecteData. Ce n'est pas vraiment germane pour votre scénario exact, mais vous pouvez extrapoler. XXX


0 commentaires