PBKDF2 mise en œuvre en C# avec Rfc2898DeriveBytes
Les gars, je suis en train de mettre en œuvre une fonction PBKDF2 en C# qui crée une clé Partagée WPA. J'ai trouvé ici: http://msdn.microsoft.com/en-us/magazine/cc163913.aspx qui semble produire un résultat valide, mais c'est un octet trop court... et le mauvais PSK valeur.
Pour tester la sortie, je suis en la comparant à ce: http://www.xs4all.nl/~rjoris/wpapsk.html ou http://anandam.name/pbkdf2/
Je n'ai trouver un moyen de faire ce travail avec construit dans la bibliothèque C#, appelé Rfc2898DeriveBytes. En utilisant ceci, j'obtiens un résultat valide à l'aide de:
Rfc2898DeriveBytes k3 = new Rfc2898DeriveBytes(pwd1, salt1, 4096);
byte[] answers = k3.GetBytes(32);
Maintenant, la seule limitation que j'ai à l'aide de Rfc2898DeriveBytes est le "sel" doit être de 8 octets de long. Si elle est plus courte, la Rfc2898DeriveBytes déclenche une exception. Je pensais à tout ce que j'avais à faire était de pad le sel (si c'était plus court) à 8 octets, et je serais bien. Mais NON! J'ai essayé à peu près toutes les combinaisons de rembourrage avec une courte sel, mais je ne peut pas dupliquer les résultats que j'obtiens à partir de ces deux sites ci-dessus.
Donc la ligne en bas, est-ce à dire que le Rfc2898DeriveBytes tout simplement ne fonctionne pas avec une source de sel plus courte que 8 octets? Si oui, est-ce que quelqu'un sait de tout code C# je pourrais utiliser qui implémente PBKDF2 pour clé Prépartagée WPA?
- vous pouvez utiliser ceci: http://msdn.microsoft.com/en-us/library/system.web.helpers.crypto.hashpassword%28v=vs.99%29.aspx
Vous devez vous connecter pour publier un commentaire.
Voici une application qui ne nécessite pas les 8 octets de sel.
Vous pouvez calculer une clé WPA comme suit:
- Je obtenir les résultats correspondants lors de la comparaison clé-la dérivation à partir .NET Rfc2898DeriveBytes et Anandam de PBKDF2 Javascript mise en œuvre.
J'ai mis en place un exemple de l'emballage SlowAES et Anandam de PBKDF2 dans les Composants de Script Windows. En utilisant cette application montre une bonne interopérabilité avec les .NET RijndaelManaged classe et la Rfc2898DeriveBytes classe.
Voir aussi:
Tous ces aller plus loin que ce que vous demandez. Ils montrent tous l'interopérabilité de l'AES. Mais pour obtenir l'interopérabilité en matière de chiffrement, il est nécessaire d'avoir de l'interopérabilité (ou correspondant à des sorties) sur le mot de passe en fonction de dérivation de clé.
En regardant le lien Microsoft, j'ai fait quelques modifications afin de le rendre le PMK les mêmes que ceux découverts dans les liens que vous avez mis de l'avant.
Modifier l'algorithme SHA de SHA256Managed à SHA1Managed pour l'intérieur et l'extérieur de hachage.
Changement HASH_SIZE_IN_BYTES à l'égalité de 20 au lieu de 34.
Ce produit la bonne clé WPA.
Je sais que c'est un peu tardivement, mais j'ai seulement commencé à regarder pour ce genre de information et de la pensée que je pourrais aider les autres. Si quelqu'un lit ce post, toutes les idées sur la fonction PRF et comment le faire en C#?
Cela développe sur Dodgyrabbit la réponse de son code aidé à réparer le mien que j'ai développé. Cette classe générique pouvez utiliser n'importe quel algorithme HMAC-dérivée de la classe en C#. C'est .NET 4 en raison de l'paramètres avec des valeurs par défaut, mais si ceux qui ont changé de puis ce devrait travailler jusqu'à .NET 2, mais je n'ai pas testé. UTILISEZ À VOS PROPRES RISQUES.
J'ai aussi posté sur mon blog, Le Albequerque Virage À Gauche, aujourd'hui.