Ir al contenido principal

Prueba de seguridad de número aleatorio de la aplicación OneKey

Actualizado esta semana

Este artículo proporciona un informe de prueba de seguridad sobre la aleatoriedad de la generación mnemónica 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 (Escritorio y Extensión).

Conclusión

La aplicación OneKey emplea APIs de números aleatorios criptográficamente fuertes específicas de la plataforma recomendadas por las guías 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 segura de números pseudoaleatorios crypto.getRandomValues proporcionada por Chrome para generar números pseudoaleatorios criptográficamente fuertes.

  • En plataformas Android e iOS basadas en React Native, se llaman respectivamente las interfaces seguras de números aleatorios 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

Artículos de prueba

1 (Las 15 pruebas)

Prueba de frecuencia de bloques - longitud del bloque (M)

20480

Prueba de plantilla no superpuesta - longitud del bloque (m)

10

Prueba de plantilla superpuesta - longitud del bloque (m)

10

Prueba de entropía aproximada - longitud del bloque (m)

10

Prueba serie - longitud del bloque (m)

16

Prueba de complejidad lineal - longitud del bloque (M)

5000

Secuencias de bits

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

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 invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de prueba" (ver adjunto a continuación), donde todos los elementos pasaron, cumpliendo 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 invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de prueba" (ver adjunto a continuación), donde todos los elementos pasaron, cumpliendo 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 de 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 invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de prueba" (ver adjunto a continuación), donde todos los elementos pasaron, cumpliendo 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 invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de prueba" (ver adjunto a continuación), donde todos los elementos pasaron, cumpliendo 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 APIs nativas. En Android, se invoca la API del sistema SecureRandom cuando se llama a crypto.getRandomValues en la aplicación. Utilizando la depuración remota de JS de React, se invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de prueba" (ver adjunto a continuación), donde todos los elementos pasaron, cumpliendo 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 APIs nativas. En iOS, se invoca la API del sistema SecRandomCopyBytes cuando se llama a crypto.getRandomValues en la aplicación. Utilizando la depuración remota de JS de React, se invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 20 MB. Las pruebas realizadas según los parámetros definidos arrojaron un "Informe de prueba" (ver adjunto a continuación), donde todos los elementos pasaron, cumpliendo 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 Federales de Procesamiento de Información 140-2) es un estándar de seguridad informática emitido por NIST. Detalla los requisitos de seguridad para los módulos criptográficos, centrándose específicamente en los tipos de RNG, la fortaleza de 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. Instale gcc, automake correctamente

    2. Ejecute ./autogen.sh

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

    4. Ejecute make para compilar los archivos rngd y rngtest

    5. Ejecute ./rngtest < testfile.bin

⚠️ Nota: Los archivos de prueba deben estar en formato binario como entradas, 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 invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 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 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 invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 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 Series fallida, pero todos los elementos pasaron en general, cumpliendo los requisitos de seguridad.

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

macOS

Sistema: Sonoma 14.6; Hardware: MacBook Pro 2020 de 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 invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 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 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 invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 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 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 APIs nativas. En Android, se invoca la API del sistema SecureRandom cuando se llama a crypto.getRandomValues en la aplicación. Utilizando la depuración remota de JS de React, se invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 20 MB. El archivo de texto se convirtió a un archivo binario, y el "Informe de prueba" a continuación muestra tres rondas de 1024 que fallaron todos los elementos de prueba, pero todos los elementos pasaron en general, cumpliendo 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 APIs nativas. En iOS, se invoca la API del sistema SecRandomCopyBytes cuando se llama a crypto.getRandomValues en la aplicación. Utilizando la depuración remota de JS de React, se invoca la API de generación de entropía mnemónica crypto.getRandomValues en tiempo de ejecución para muestrear números aleatorios, sumando 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 Carrera larga de 1024 rondas, pero todos los elementos pasaron en general, cumpliendo los requisitos de seguridad.

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

Archivos adjuntos de resultados


¿Ha quedado contestada tu pregunta?