¿Hay alguna implementación rápida de cryptographically secure pseudorandom number generator (CSPRNG) para C# 3.0 (.NET Framework 3.5), para tokens de autenticación?¿Cómo puedo generar un número pseudoaleatorio criptográficamente seguro en C#?
Respuesta
using System.Security.Cryptography;
...
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider())
{
byte[] tokenData = new byte[32];
rng.GetBytes(tokenData);
string token = Convert.ToBase64String(tokenData);
}
El RNGCryptoServiceProvider clase
Eso depende de lo que entendemos por la vía rápida ...
No hay realmente rápido y seguro generador aleatorio. Si quieres rápido, debes usar la clase aleatoria regular. Si quiere seguridad, debe usar el generador aleatorio en el espacio de nombres Criptografía, pero eso es significativamente más lento. Simplemente no puedes tener ambas cosas.
Si está dispuesto a realizar interoperabilidad con una implementación criptográfica nativa, puede tener un excelente rendimiento (varias veces más rápido que 'System.Random') y seguridad. – CodesInChaos
@CodesInChaos: Entonces; rápido, seguro, simple: elija dos. :) – Guffa
- 1. En PHP, ¿cómo puedo generar un gran número pseudoaleatorio?
- 2. ¿Cómo generar un doble criptográficamente seguro entre 0 y 1?
- 3. ¿Math.random() es criptográficamente seguro?
- 4. Generar números aleatorios criptográficamente seguros en php
- 5. Algoritmo pseudoaleatorio simple
- 6. ¿Cómo generar un número aleatorio en Bash?
- 7. Generar y repetir el número en C#
- 8. ¿Cómo puedo almacenar el estado del generador pseudoaleatorio en Perl?
- 9. generar un número aleatorio corto en java?
- 10. ¿Cuál es el método adecuado para restringir un número pseudoaleatorio a un rango menor?
- 11. ¿Cómo puedo generar un evento mediante reflejo en .NET/C#?
- 12. ¿Cómo puedo generar un número aleatorio utilizando la biblioteca estándar de C++ 11?
- 13. Generar un número aleatorio con el preprocesador C
- 14. ¿Generar un número aleatorio dentro del rango?
- 15. ¿Cómo puedo redondear un número en Javascript?
- 16. ¿Cómo generar un número aleatorio "grande" en Python?
- 17. ¿Cómo puedo generar números aleatorios en Unqiue C#
- 18. ¿Cómo puedo generar un número aleatorio para cada fila en un TSQL Select?
- 19. generar un número aleatorio con 7 dígitos
- 20. Generar números aleatorios de forma segura en Objective-C
- 21. ¿Cómo puedo generar un GUID en Vim?
- 22. Generar un número aleatorio de N-dígitos
- 23. ¿Cómo puedo producir un patrón pseudoaleatorio desde las coordenadas X/Y de manera determinista?
- 24. ¿Cómo puedo generar un archivo .pfx?
- 25. ¿Cómo puedo crear un entorno seguro Lua?
- 26. ¿Cómo puedo implementar un servidor WebSocket seguro (wss: //) en Python?
- 27. ¿Un RNG más rápido que/dev/random pero criptográficamente útil?
- 28. ¿Cómo generar diferentes números aleatorios en un bucle en C++?
- 29. ¿Cómo puedo formatear un decimal en un número controlado por programa de decimales en C#?
- 30. ¿Cómo puedo usar un código no seguro en VB.Net?
El criptoanálisis del generador de GUID de WinAPI muestra que, dado que la secuencia de GUID de V4 es pseudoaleatoria, dado el estado inicial, se pueden predecir hasta los próximos 250 000 GUID devueltos por la función UuidCreate. Esta es la razón por la que los GUID no deben usarse en criptografía, por ejemplo, como claves aleatorias. (de http://en.wikipedia.org/wiki/Globally_Unique_Identifier) – configurator
Esto no es específicamente criptografía, aunque. Y, sería difícil predecir el estado inicial de la máquina. –
Un ataque común es DDoS un servidor hasta que se reinicie. Entonces, predecir el estado inicial (reloj del sistema) es mucho más fácil. – LaJmOn