Dans .NET, vous pouvez générer des paires de clés RSA à l'aide de RSACryptoServiceProvide. Mais est-ce la meilleure option dans .NET pour générer des nombres vraiment aléatoires? Il y a des tonnes d'autres bibliothèques open source, telles que CryptoPlusPlus, qui peuvent être utilisées pour générer un nombre aléatoire. Je voudrais entendre les opinions d'autres experts. Merci d'avance pour vos deux cents.Quelle est la meilleure bibliothèque pour générer des nombres aléatoires pour les clés cryptographiques dans .NET?
Répondre
Les classes dérivées de RandomNumberGenerator
génèrent des nombres réellement aléatoires.
Je n'irais personnellement nulle part autre que RNGCryptoServiceProvider à moins que quelqu'un ne fournisse une preuve que ça craint. L'implémentation réelle utilisée par cette classe n'est pas disponible car elle est implémentée dans le cadre de l'exécution (System.Security.Cryptography.Utils._GetBytes
ou System.Security.Cryptography.Utils._GetNonZeroBytes
) ce qui, pour moi, est encourageant car j'espère que l'implémentation apportera au moins des informations ambiantes de la part de hôte pour générer les données.
je crois que ce sont acheminés jusqu'au niveau bas apis win32 qui, bien sûr, serait patchés si un trou de sécurité se trouve dans les (bien ... je l'espère!)
Comment cela se fait en Mono, Cependant, je ne le saurais pas.
Pour la très paranoïaque
Le vrai problème avec tout cela est que votre caractère aléatoire en .Net peut être brisé par un pirate malveillant en changeant le comportement de l'hôte (qui est - en écrivant une version modifiée runtime). C'est beaucoup plus facile dans une plate-forme de style VM comme .Net ou Java que dans le code natif (ce qui nécessiterait de pirater la plate-forme de niveau inférieur ou de modifier le matériel). Curieusement, l'utilisation de RNGCryptoServiceProvider simplifie grandement la tâche puisque ces appels internes sont implicitement approuvés par la partie gérée du framework .Net.
Cependant - en réalité - votre code va devoir être quelque chose de vraiment spécial pour quelqu'un qui veut aller à tous ces efforts. Donc, personnellement, j'utiliserais encore RNGCryptoServiceProvider.
Mais c'est pour ça que j'ai un vrai problème avec les tentatives de cryptage de bibliothèques et de fonctions écrites en javascript - un hack rapide de navigateur peut tout vider.
En fait, prédire des nombres aléatoires générés par le système hôte est assez facile. Cheat Coder l'a fait avec de nombreux outils anti-triche qui créent des captures d'écran à des moments aléatoires. Ils ont juste eu la graine dans la mémoire et ont prédit les prochains nombres aléatoires. Je n'ai jamais mis en place une telle méthode, mais je l'ai vu fonctionner. – atamanroman
@fielding: Je parie! Après avoir lu l'excellent chapitre de Practical Cryptography (http://www.schneier.com/book-practical.html) sur la génération de Randomness, il est si facile de tout abandonner! Si seulement j'avais un détecteur de rayons cosmiques ... –
Vous pouvez les obtenir auprès de random.org si votre projet le permet. Cela devrait être assez aléatoire.
- 1. Générer deux nombres aléatoires pour l'échantillonnage RANSAC
- 2. Quelle est la meilleure bibliothèque EXIF pour .Net?
- 3. Quelle est la meilleure bibliothèque pour manipuler les métadonnées JPEG?
- 4. Comment générer des nombres réellement aléatoires (NOT pseudo) dans Linux
- 5. Meilleure bibliothèque .NET pour arbres
- 6. Quelle est la meilleure bibliothèque de vérification orthographique pour C#?
- 7. stimuler la bibliothèque de nombres aléatoires, utiliser le même générateur de nombres aléatoires pour les différents générateurs de variate
- 8. Quelle est la meilleure bibliothèque graphique 2D pour Windows Mobile?
- 9. Quelle est la meilleure bibliothèque .Net XML-RPC?
- 10. Quelle est la meilleure bibliothèque pour gérer une wiimote?
- 11. Générer plusieurs nombres aléatoires pour égaler une valeur en python
- 12. quelle est la meilleure méthode pour générer un fichier xml
- 13. Est-ce une bonne ou une mauvaise façon de générer des nombres aléatoires pour chaque enregistrement?
- 14. Quelle est la meilleure bibliothèque d'API Twitter pour Actionscript?
- 15. Meilleure bibliothèque JSON pour .NET?
- 16. Générer des nombres aléatoires de -n à n dans C
- 17. Quelle est la meilleure bibliothèque alternative pour gettimeofday() en C++?
- 18. Quelle bibliothèque graphique est la meilleure pour Linux embarqué?
- 19. Quelle est la meilleure solution pour obtenir un ensemble d'enregistrements aléatoires de db?
- 20. MATLAB génère des nombres aléatoires
- 21. Quelle est la meilleure approche d'automatisation des tests pour WatiN
- 22. Quelle est la meilleure bibliothèque OAuth2 C#?
- 23. Générer des nombres aléatoires avec une distribution probabiliste
- 24. affichant des nombres aléatoires
- 25. Comment puis-je générer des nombres aléatoires en Python?
- 26. Quelle est la meilleure alternative à int.TryParse pour .net 1.1
- 27. Bibliothèque .NET pour générer du javascript?
- 28. Quelle est la meilleure approche pour la gestion des versions des données suivies dans les workflows?
- 29. Quelle est la meilleure bibliothèque .NET pour OpenID et ASP.NET MVC?
- 30. Quelle est la meilleure bibliothèque Java OXM?
* aussi aléatoire que nous pouvons obtenir avec des algorithmes déterministes. –
En outre: De la documentation: "Le code d'application n'utilise pas directement cette classe Cette classe abstraite est fournie comme classe de base pour tous les générateurs de nombres aléatoires cryptographiques." –
Existe-t-il une preuve que la classe dérivée de RandomNumberGenerator, telle que RNGCyrptowareServiceProvide, est meilleure que la bibliothèque, où vous pouvez alimenter des sources aléatoires à partir d'une source externe. – weilin8