Ir al contenido principal

Prueba de seguridad de generación de números aleatorios de la aplicación OneKey

Actualizado hoy

Este artículo proporciona un informe de prueba de seguridad sobre la aleatoriedad de la generación de frases mnemónicas en la aplicación OneKey (billetera de software), que abarca todos los sistemas operativos compatibles con la aplicación OneKey (macOS, Windows, Android, iOS) y sus respectivos clientes (Desktop y Extensión).

Conclusión

La aplicación OneKey utiliza API de números aleatorios criptográficamente seguras específicas de la plataforma, recomendadas por las directrices de desarrollo en los clientes de Windows, macOS, iOS y Android, así como en la extensión de Chrome. Las pruebas internas confirman el cumplimiento de los estándares de seguridad de números aleatorios NIST SP 800-22 y FIPS 140-2.

  • En plataformas basadas en Chrome (Windows, macOS), se utiliza la API de números pseudoaleatorios segura crypto.getRandomValues proporcionada por Chrome para generar números pseudoaleatorios criptográficamente seguros.

  • En plataformas Android e iOS basadas en React Native, se llaman respectivamente las interfaces de números aleatorios seguras proporcionadas por el sistema SecureRandom y SecRandomCopyBytes.

⚠️ Nota: Aunque la aplicación OneKey se adhiere estrictamente a las directrices de desarrollo de seguridad, la seguridad de la generación de números aleatorios también puede verse afectada por la implementación del sistema operativo/hardware del dispositivo del usuario.

Pruebas de Seguridad

NIST SP 800-22 FIPS 140-2

NIST SP 800-22 (Publicación Especial 800-22 del Instituto Nacional de Estándares y Tecnología) es un documento publicado por el Instituto Nacional de Estándares y Tecnología (NIST) de los Estados Unidos, que involucra principalmente un conjunto de pruebas estadísticas para probar Generadores de Números Pseudoaleatorios (PRNG). Proporciona un conjunto de pruebas estadísticas para evaluar la aleatoriedad y la calidad de las secuencias de bits generadas por los generadores de números aleatorios.

Proyecto

Parámetros

Longitud del segmento

1024000

Elementos de prueba

1 (Todas las 15 pruebas)

Prueba de Frecuencia de Bloques - longitud del bloque (M)

20480

Prueba de Plantillas No Superpuestas - longitud del bloque (m)

10

Prueba de Plantillas Superpuestas - longitud del bloque (m)

10

Prueba de Entropía Aproximada - longitud del bloque (m)

10

Prueba de Serie - longitud del bloque (m)

16

Prueba de Complejidad Lineal - longitud del bloque (M)

5000

Flujos de bits

20 (20 * 1024000 bits = 20480000 bits = 20MB)

Windows

Sistema: Win10 22H2; Hardware: i7-13700h

  • Cliente de escritorio

    • El cliente de escritorio de Windows para la aplicación OneKey es una aplicación Electron que se basa en el motor de Chrome. Utilizando herramientas de desarrollo, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de Prueba" (ver adjunto abajo), donde todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

    • Resultados: NIST SP 800-22-windows-desktop-wini713.txt (Disponible en el adjunto)

  • Extensión del navegador

    • La extensión de Chrome se basa en el motor de Chrome. Utilizando herramientas de desarrollo, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de Prueba" (ver adjunto abajo), donde todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

    • Resultados: NIST SP 800-22-windows-ext-wini713.txt ( Disponible en el adjunto)

macOS

Sistema: Sonoma 14.6; Hardware: MacBook Pro 2020 13 pulgadas M1

  • Cliente de escritorio

    • El cliente de escritorio de macOS para la aplicación OneKey es una aplicación Electron que se basa en el motor de Chrome. Utilizando herramientas de desarrollo, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de Prueba" (ver adjunto abajo), donde todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

    • Resultados: NIST SP 800-22-macOS-desktop-macm1p.txt ( Disponible en el adjunto)

  • Extensión del navegador

    • La extensión de Chrome se basa en el motor de Chrome. Utilizando herramientas de desarrollo, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de Prueba" (ver adjunto abajo), donde todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

    • Resultados: NIST SP 800-22-macOS-ext-macm1p.txt ( Disponible en el adjunto)

Android

Sistema hyperOS 1.0.4.0; Hardware Xiaomi 10s snapdragon870

  • Cliente de Android

    • El cliente de Android para la aplicación OneKey, al ser una aplicación React Native, se basa en API nativas. En Android, se invoca la API del sistema SecureRandom cuando se llama a crypto.getRandomValues en la aplicación. Utilizando el depurador remoto JS de React, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de Prueba" (ver adjunto abajo), donde todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

    • Resultados: NIST SP 800-22-android-app-andsm870.txt ( Disponible en el adjunto)

iOS

Sistema: IOS 17.5; Hardware: iPhoneX A11

  • Cliente de iOS

    • El cliente de iOS para la aplicación OneKey, al ser una aplicación React Native, se basa en API nativas. En iOS, se invoca la API del sistema SecRandomCopyBytes cuando se llama a crypto.getRandomValues en la aplicación. Utilizando el depurador remoto JS de React, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de Prueba" (ver adjunto abajo), donde todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

    • Resultados: NIST SP 800-22-iOS-app-x.txt ( Disponible en el adjunto)

FIPS 140-2 (Publicación de Estándares de Procesamiento de Información Federal 140-2) es un estándar de seguridad informática emitido por el NIST. Detalla los requisitos de seguridad para los módulos criptográficos, centrándose específicamente en los tipos de RNG, la fortaleza de la seguridad, la semilla, la entropía, la periodicidad, las pruebas periódicas y las pruebas continuas.

  • Software de prueba: rng-tools

  • Parámetros de prueba: Ninguno

  • Entorno de prueba: ubuntu 24.04 arm64

  • Proceso de compilación:

    1. Instalar gcc, automake correctamente

    2. Ejecutar ./autogen.sh

    3. Ejecutar ./configure (si ocurren errores, configurar las dependencias según los mensajes de error)

    4. Ejecutar make para compilar los archivos rngd y rngtest

    5. Ejecutar ./rngtest < testfile.bin

⚠️ Nota: Los archivos de prueba deben estar en formato binario como entrada, no en ASCII.

Windows

Sistema: Win10 22H2; Hardware: i7-13700h

  • Cliente de escritorio

    • El cliente de escritorio de Windows para la aplicación OneKey es una aplicación Electron que se basa en el motor de Chrome. Utilizando herramientas de desarrollo, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. El archivo de texto se convirtió a un archivo binario y el "Informe de Prueba" a continuación muestra que todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

      app-v5-randomness-fips-140-2-windows-desktop.png
  • Extensión del navegador

    • La extensión de Chrome se basa en el motor de Chrome. Utilizando herramientas de desarrollo, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. El archivo de texto se convirtió a un archivo binario y el "Informe de Prueba" a continuación muestra 1024 rondas probadas con una ronda de Ejecuciones fallidas, pero todos los elementos pasaron en general, cumpliendo con los requisitos de seguridad.

      app-v5-randomness-fips-140-2-windows-ext.png

macOS

Sistema: Sonoma 14.6; Hardware: MacBook Pro 2020 13 pulgadas M1

  • Cliente de escritorio

    • El cliente de escritorio de macOS para la aplicación OneKey es una aplicación Electron que se basa en el motor de Chrome. Utilizando herramientas de desarrollo, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. El archivo de texto se convirtió a un archivo binario y el "Informe de Prueba" a continuación muestra que todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

      app-v5-randomness-fips-140-2-mac-desktop.png
  • Extensión del navegador

    • La extensión de Chrome se basa en el motor de Chrome. Utilizando herramientas de desarrollo, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. El archivo de texto se convirtió a un archivo binario y el "Informe de Prueba" a continuación muestra que todos los elementos pasaron, cumpliendo con los requisitos de seguridad.

      app-v5-randomness-fips-140-2-mac-ext.png

Android

Sistema: hyperOS 1.0.4.0;Hardware: Xiaomi 10s snapdragon870

  • Cliente de Android

    • El cliente de Android para la aplicación OneKey, al ser una aplicación React Native, se basa en API nativas. En Android, se invoca la API del sistema SecureRandom cuando se llama a crypto.getRandomValues en la aplicación. Utilizando el depurador remoto JS de React, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. El archivo de texto se convirtió a un archivo binario y el "Informe de Prueba" a continuación muestra que tres rondas de 1024 fallaron todos los elementos de prueba, pero todos los elementos pasaron en general, cumpliendo con los requisitos de seguridad.

      app-v5-randomness-fips-140-2-android.png

    ⚠️ Nota: El cliente de Android tuvo tres rondas de prueba de 1024 en las que todos los elementos de prueba fallaron. Este problema podría ser un error en la herramienta rng-test y no afecta la conclusión general de la prueba.

iOS

Sistema iOS 17.5;Hardware: iPhoneX A11

  • Cliente de iOS

    • El cliente de iOS para la aplicación OneKey, al ser una aplicación React Native, se basa en API nativas. En iOS, se invoca la API del sistema SecRandomCopyBytes cuando se llama acrypto.getRandomValues en la aplicación. Utilizando el depurador remoto JS de React, se llama a la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando un total de 20 MB. El archivo de texto se convirtió a un archivo binario y el "Informe de Prueba" a continuación muestra una prueba fallida en la ejecución larga de 1024 rondas, pero todos los elementos pasaron en general, cumpliendo con los requisitos de seguridad.

      app-v5-randomness-fips-140-2-ios.png

Archivos adjuntos de resultados


¿Ha quedado contestada tu pregunta?