2009-08-25 3 views
16

J'utilise Windows DPAPI pour crypter certaines données sensibles pour moi. Le chiffrement est stocké dans le registre. Tout cela fonctionne bien, mais je me demandais si quelqu'un pouvait clarifier ma compréhension des octets 'entropy' qui sont (facultativement) fournis à ProtectedData.Protect() dans .NET. Le tableau d'octets «entropy» semble être analogue à un vecteur d'initialisation ou à un sel utilisé avec d'autres schémas de cryptographie, mais je ne pouvais pas voir une bonne description des octets d'entropie dans MSDN. Les exemples de code que j'ai vu juste du code dur dans les octets d'entropie!Windows DPAPI - quoi faire avec l'entropie?

Les octets d'entropie sont-ils fournis à ProtectedData.Protect() & ProtectedData.Unprotect est-il analogue à un IV ou un sel? Les octets d'entropie peuvent-ils être stockés en toute sécurité à côté du chiffre, ou cela compromettrait-il la sécurité?

Répondre

13

Entropy est une clé secondaire spécifique à l'application qui protège les données. L'idée générale, si je me souviens bien, était de permettre à plusieurs applications de crypter des données sous un seul compte d'utilisateur, tout en maintenant la sécurité entre elles. Par exemple, votre application peut chiffrer des données sous UserA. Si mon application souhaitait déchiffrer ces données sous UserA, il n'y a vraiment rien pour m'y opposer, car DPAPI utilise la clé users. Cependant, si vous prenez en compte une "entropie" spécifique à une application, alors je devrais connaître votre entropie pour déchiffrer toutes les données à protéger pour UserA.

L'entropie peut être considérée comme analogue au sel, en ce sens qu'il s'agit d'une clé ou d'un secret supplémentaire utilisé pour extraire davantage le contenu chiffré. Contrairement au sel, l'entropie de votre application doit rester la même pour chaque opération de cryptage sous un identifiant donné. Avec du sel, il est généralement préférable de le changer aussi souvent que vous le pouvez.

L'entropie est essentiellement une clé supplémentaire, et elle doit être traitée comme n'importe quelle autre clé cryptographique. Gardez-le privé et sécurisé. BTW, je pense que «entropie» était un mot atroce à utiliser à cette fin. Quelque chose comme «différenciateur», ou peut-être même inventant un mot comme «distinctif», aurait été mieux. : P Utilisation à très court terme.

+0

Merci, bonne réponse. Donc, je suppose que codage en dur l'entropie dans l'application n'est pas un désastre complet, mais mieux de le traiter comme une clé. Comme je crypte une clé de toute façon, avoir une autre «clé» pour protéger la clé devient un peu fou. – saille

+0

Aye, c'est un peu un concept compliqué. Mais le trou de sécurité que «l'entropie» vise à brancher est très réel. Le cryptage spécifique à Credential dans Windows est très pratique pour l'utilisateur, mais il ouvre de nouvelles opportunités pour les programmes malveillants de déchiffrer ces données alors qu'ils ne le devraient pas. De plus, ne supposez pas qu'un programme "autre" est bénin ... un logiciel malveillant dont l'utilisateur ne sait même pas qu'il se trouve sur son système peut essayer de rechercher des données cryptées qui ne sont pas entropiques. – jrista

1

Cela est utile si vous souhaitez protéger l'application par mot de passe. Le mot de passe (ou une autre clé générée et cryptée avec le mot de passe afin que les données d'application n'aient pas besoin d'être re-encodées lorsque le mot de passe est modifié) peut être utilisé comme entropie lors du stockage des données d'application.

Questions connexes