Para obtener aleatoriedad, debe obtener suficiente entropía inicial de algunos eventos "realmente aleatorios", que provienen de sistemas físicos. Una vez que tenga suficiente entropía inicial, puede extenderla indefinidamente con un PRNG criptográficamente seguro . Como el PRNG es un proceso determinista, su salida no se ve afectada por ningún otro proceso que pueda ejecutarse al mismo tiempo en la máquina.
El kernel del sistema operativo se encuentra en una posición ideal para recopilar esa semilla inicial, ya que tiene acceso directo al hardware. Un buen sistema operativo recopilará eventos de hardware para alimentar su grupo interno, ejecutará el PRNG y proporcionará una API para obtener el resultado de PRNG. En iOS, este es el % co_de Función% , que a su vez lee el archivo especial SecRandomCopyBytes()
(en iOS, como en OS X y FreeBSD, /dev/random
es idéntico a /dev/random
). Al usarlo ya lo estás haciendo bien; ya tiene toda la seguridad criptográfica que puedes esperar razonablemente; su seguridad no se verá afectada por la ejecución de animaciones, ya que la inicialización inicial se recopila bastante temprano en el proceso de arranque. En Android, use /dev/urandom
- la misma discusión (usa el java.security.SecureRandom
de Linux).
En días mucho más antiguos, algunas personas hablaban de applets de Java, que, por definición, estaban en un espacio aislado y no podían acceder al sistema operativo para obtener una buena aleatoriedad. Por lo tanto, estos applets necesitaban encontrar eventos aleatorios de otras fuentes, y casi el único que quedaba era medir la velocidad a la que el programador del sistema operativo podía cambiar entre dos subprocesos (por ejemplo, ver este código ). Ese método de hilado de hilos requería una máquina, en su mayoría, inactiva; de lo contrario, los números producidos fueron severamente no aleatorios. Otros métodos aprovecharon al usuario: le pidieron que moviera el mouse y el applet usaría las posiciones de puntero sucesivas como fuente de entropía.
Afortunadamente, estos trucos atroces son cosas del pasado (o eso esperamos ... porque a veces, algunos desarrolladores de sistemas bancarios se vuelven "creativos"). Para una aplicación en un teléfono inteligente, tienes acceso a las instalaciones del sistema operativo, así que úsalas y sé feliz.