¿Deberían ejecutarse otros procesos mientras un iPhone o Android está generando un número aleatorio criptográfico?

5

Necesito generar un número aleatorio seguro criptográficamente en iOS y Android. Podría usar un enfoque de software o aprovechar la API del sistema operativo integrada para esto.

En cada caso, ¿es mejor generar un número aleatorio seguro cuando no se están ejecutando otros procesos?

Lo pregunto porque estoy pensando en mostrar una animación durante la generación y quiero saber si la animación afectará positiva o negativamente al RNG ... especialmente porque no estoy seguro de cómo es el modelo de subprocesamiento interno.

En caso de que importe (con el modelo de subprocesamiento) en iOS, estoy usando Objective C, y con Android, estoy usando una alternativa al kernel Dalvik producido por Xamarin, que tiene sus propias opciones de subprocesos. En cualquier caso, estoy interesado en cualquier información de Dalvik que pueda tener, ya que puedo interoperar con eso.

    
pregunta random65537 18.04.2015 - 00:26
fuente

2 respuestas

2

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.

    
respondido por el Tom Leek 23.04.2015 - 15:09
fuente
0

Los generadores de números aleatorios criptográficamente seguros son procesos matemáticos deterministas para argumentos dados, y no se preocupan por los factores que afectan los programas en ejecución, es decir, el estado del kernel y los datos almacenados en la RAM. No hay ninguna razón para que otros programas afecten el funcionamiento de estos generadores.

    
respondido por el user1535427 23.04.2015 - 14:11
fuente

Lea otras preguntas en las etiquetas