¿Se pueden usar los datos del acelerómetro de un teléfono inteligente para implementar un TRNG?

3

Estoy intentando generar un verdadero número aleatorio desde el acelerómetro del teléfono inteligente, luego pasarlo como semilla a un CSPRNG para generar verdaderos números aleatorios.

Sé que mucha gente lo probó y que SecureRandom (sin semilla personalizada) sigue siendo una mejor opción, pero no entiendo por qué esto no es posible.

He leído sobre algunos temas sobre este enfoque: el acelerómetro puede generar una baja entropía, un atacante podría adivinar patrones de movimientos ...

También he leído la página Extractor de aleatoriedad en Wikipedia, y se proponen 2 métodos:

  • extractor Von Neumann
  • función hash criptográfica

  • Supongamos que quiero usar el enfoque de Neumann, un requisito es que:
      

    no hay correlación entre los bits sucesivos

    ¿Pero tienen los valores de entrada X, Y y Z que recojo del acelerómetro una correlación entre bits sucesivos? ¿Por qué? Un valor de X en el tiempo t1 podría ser diferente en el tiempo t2 , por lo que no están en correlación ... ¿o no?

    Si el requisito está satisfecho, supongamos que el algoritmo es algo así:

      

      

  • Obtenga una cantidad de valores flotantes consecutivos de X, Y, Z del aceleromenter para, digamos, 10 segundos.
  •   
  • Convierta cada valor en bits y almacénelos en diferentes matrices = > %código%
  •   
  • Para cada posición de las matrices, use el extractor Von Neumann y cree una matriz de bits de salida.
    (por ejemplo, comprobaré X[] Y[] Z[] con X[i] y el resultado con Y[i] )
  •   
  • Ahora cada 3 bits de entrada producirá 1 bit de salida
  •   
  • Al final, convierta la matriz de bits de salida a valor.
  • ¿Es la salida un valor aleatorio?
    ¿Puede ser este un método confiable?
    Si no, ¿cómo puede mejorarse esto?

    Pero si elijo el método 2 (la función de cifrado criptográfico), ¿puedo simplemente modificar el flujo de entrada obtenido del acelerómetro?

        
    pregunta Riccardo Leschiutta 02.10.2015 - 13:22
    fuente

    1 respuesta

    1

    La respuesta depende de varios factores ...

    1. ¿Cuál es la precisión, sensibilidad, frecuencia de muestreo y precisión del acelerómetro?

    2. ¿Con qué frecuencia se mueve el teléfono celular? ¿Cómo se está moviendo?

    3. ¿Cuántos bits "sin procesar" extraes por cada bit en la semilla? ¿Sólo 3?

    La fuente raíz de la entropía

    Supongamos que el acelerómetro es extremadamente preciso, es sensible a cambios muy pequeños, tiene una frecuencia de muestreo muy alta y tiene una precisión muy alta. Supongamos también que está moviendo el dispositivo manualmente. En este caso, la entropía proviene de las siguientes fuentes:

    1. Imprecisión y "ruido" en el acelerómetro. Más sensibilidad significa más ruido.

    2. Procesos estocásticos presentes en el funcionamiento de nuestras neuronas y células musculares.

    Si el sensor es lo suficientemente preciso, las variaciones microscópicas en los procesos biológicos que crean movimientos musculares darán como resultado una cantidad significativa de entropía disponible para la recolección. El tiempo que toma un potencial de acción para propagarse por sus neuronas, el tiempo que lleva finalmente despolarizar una neurona hasta su umbral de activación, el tiempo que tarda una célula muscular en responder a los neurotransmisores, unidades motoras que se reclutan primero en un músculo. Todos estos dependen de factores que no pueden ser predichos por un atacante. Si bien somos terribles en producir conscientemente una serie impredecible de números aleatorios, somos, a diferencia de los algoritmos informáticos deterministas, excelente en producir aleatoriedad a través de nuestros movimientos musculares naturalmente imprecisos.

    Sin embargo, tenga en cuenta que sería conveniente agregar el tiempo de cada evento de movimiento, no solo el valor de las coordenadas modificadas. Cuando opera con una precisión de nanosegundos, incluso un baterista profesional que está tratando de moverse con los patrones más rítmicos posibles introducirá la entropía significativa en un sistema cuando sus movimientos son precisos. Este momento, si es lo suficientemente detallado, es en realidad una fuente de entropía más valiosa que el valor de un evento en sí mismo.

    Su algoritmo propuesto

    Yo diría que su algoritmo no es seguro. La creación de 1 bit de salida por cada tres bits de entrada supone que cada entrada tiene un tercio de entropía, lo cual es muy optimista, por decir lo menos. El kernel de Linux, por ejemplo, es extremadamente conservador con su estimación de entropía. Se supone que solo un bit de aleatoriedad está presente después de 64 inyecciones consecutivas en un grupo de 128 bits. Un algoritmo superior sería ingresar los eventos sin procesar junto con la hora precisa del evento (en forma de la cantidad de ciclos de CPU desde el inicio, también conocido como TSC) en un hash criptográfico rápido como SHA-256. Sigue así hasta que hayas terminado de recolectar entropía y usa el resumen final como tu semilla aleatoria. Si está seguro de que desea implementar su propio RNG, esta sería la forma de hacerlo. No habría necesidad de un cambio de color o un blanqueo explícitos, ni de una estimación de entropía.

    Si realmente insiste en hacer esto, al menos debería tomar la semilla de salida y mezclarla con una cantidad equivalente de aleatoriedad del sistema CSPRNG. Esto se puede hacer usando una operación involuntaria como XOR o la suma / resta con desbordamiento. Eso asegura que la entropía de la salida sea al menos tan buena como la calidad de la entrada más entrópica. En notación matemática, para dos fuentes de entropía mutuamente independientes A y B de tamaño idéntico, H (A ⊕ B) ≥ max (H (A), H ( B)) .

    El acelerómetro como fuente de entropía por defecto

    ¡El acelerómetro ya puede usarse para generar entropía! Aunque sé poco sobre la arquitectura de dispositivos móviles, el hardware generalmente alerta a la CPU principal de que un evento se ha detectado al emitir una interrupción. Una interrupción es una señal asíncrona que hace que la CPU detenga lo que esté haciendo y ejecute un controlador en particular para esa interrupción. Este controlador puede, por ejemplo, consultar un búfer de teclado. De esa manera, el sistema no tiene que sondear continuamente el teclado y, en cambio, puede esperar a que el teclado envíe una interrupción, diciéndole al sistema que es hora de leer. Esto también puede suceder con el acelerómetro de un dispositivo móvil. Cada vez que se detecta un movimiento, puede enviar una señal a la CPU informándole que hay datos para leer. Cada vez que esto sucede, los datos de interrupción y la hora exacta en que ocurrió se utilizan como fuente de entropía. Solo después de 64 eventos se asume que se recopila un solo bit de entropía. Esta entropía se mezcla con el conjunto del sistema.

        
    respondido por el forest 19.03.2018 - 06:48
    fuente

    Lea otras preguntas en las etiquetas