Passer au contenu principal

Tests de sécurité sur la génération de nombres aléatoires de l'application OneKey

Mis à jour aujourd’hui

Cet article présente un rapport de test de sécurité sur la génération aléatoire de mnémoniques dans l'application OneKey (portefeuille logiciel), couvrant tous les systèmes d'exploitation pris en charge par l'application OneKey (macOS, Windows, Android, iOS) et leurs clients respectifs (Desktop & Extension).

Conclusion

L'application OneKey utilise des API de génération de nombres aléatoires cryptographiquement fortes spécifiques à la plateforme, recommandées par les directives de développement pour les clients Windows, macOS, iOS et Android, ainsi que pour l'extension Chrome. Les tests internes confirment la conformité aux normes de sécurité de génération de nombres aléatoires NIST SP 800-22 et FIPS 140-2.

  • Sur les plateformes basées sur Chrome (Windows, macOS), l'API de génération de nombres pseudo-aléatoires sécurisée crypto.getRandomValues fournie par Chrome est utilisée pour générer des nombres pseudo-aléatoires cryptographiquement forts.

  • Sur les plateformes Android et iOS basées sur React Native, les interfaces aléatoires sécurisées fournies par le système, respectivement SecureRandom et SecRandomCopyBytes, sont appelées.

⚠️ Remarque : Bien que l'application OneKey adhère strictement aux directives de développement sécurisé, la sécurité de la génération de nombres aléatoires peut également être affectée par l'implémentation du système d'exploitation/matériel de l'appareil de l'utilisateur.

Tests de sécurité

NIST SP 800-22 FIPS 140-2

NIST SP 800-22 (National Institute of Standards and Technology Special Publication 800-22) est un document publié par le National Institute of Standards and Technology (NIST) des États-Unis, qui comprend principalement une suite de tests statistiques pour tester les générateurs de nombres pseudo-aléatoires (PRNG). Il fournit un ensemble de tests statistiques pour évaluer le caractère aléatoire et la qualité des séquences de bits générées par les générateurs de nombres aléatoires.

Projet

Paramètres

Longueur du segment

1024000

Éléments de test

1 (les 15 tests)

Test de fréquence de blocs - longueur de bloc (M)

20480

Test de modèles non superposés - longueur de bloc (m)

10

Test de modèles superposés - longueur de bloc (m)

10

Test d'entropie approximative - longueur de bloc (m)

10

Test de série - longueur de bloc (m)

16

Test de complexité linéaire - longueur de bloc (M)

5000

Flux de bits

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

Windows

Système : Win10 22H2 ; Matériel : i7-13700h

  • Client de bureau

    • Le client de bureau Windows de l'application OneKey est une application Electron qui repose sur le moteur Chrome. En utilisant les outils de développement, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Les tests selon les paramètres définis ont produit un « Rapport de test » (voir pièce jointe ci-dessous), où tous les éléments ont passé, répondant aux exigences de sécurité.

    • Résultats : NIST SP 800-22-windows-desktop-wini713.txt (Disponible dans la pièce jointe)

  • Extension du navigateur

    • L'extension Chrome repose sur le moteur Chrome. En utilisant les outils de développement, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Les tests selon les paramètres définis ont produit un « Rapport de test » (voir pièce jointe ci-dessous), où tous les éléments ont passé, répondant aux exigences de sécurité.

    • Résultats : NIST SP 800-22-windows-ext-wini713.txt ( Disponible dans la pièce jointe)

macOS

Système : Sonoma 14.6 ; Matériel : MacBook Pro 2020 13 pouces M1

  • Client de bureau

    • Le client de bureau macOS de l'application OneKey est une application Electron qui repose sur le moteur Chrome. En utilisant les outils de développement, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Les tests selon les paramètres définis ont produit un « Rapport de test » (voir pièce jointe ci-dessous), où tous les éléments ont passé, répondant aux exigences de sécurité.

    • Résultats : NIST SP 800-22-macOS-desktop-macm1p.txt ( Disponible dans la pièce jointe)

  • Extension du navigateur

    • L'extension Chrome repose sur le moteur Chrome. En utilisant les outils de développement, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Les tests selon les paramètres définis ont produit un « Rapport de test » (voir pièce jointe ci-dessous), où tous les éléments ont passé, répondant aux exigences de sécurité.

    • Résultats : NIST SP 800-22-macOS-ext-macm1p.txt ( Disponible dans la pièce jointe)

Android

Système hyperOS 1.0.4.0 ; Matériel Xiaomi 10s snapdragon870

  • Client Android

    • Le client Android de l'application OneKey, étant une application React Native, s'appuie sur des API natives. Sur Android, l'API système SecureRandom est invoquée lorsque crypto.getRandomValues est appelée dans l'application. En utilisant le débogage JS distant de React, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Les tests selon les paramètres définis ont produit un « Rapport de test » (voir pièce jointe ci-dessous), où tous les éléments ont passé, répondant aux exigences de sécurité.

    • Résultats : NIST SP 800-22-android-app-andsm870.txt ( Disponible dans la pièce jointe)

iOS

Système : IOS 17.5 ; Matériel : iPhoneX A11

  • Client iOS

    • Le client iOS de l'application OneKey, étant une application React Native, s'appuie sur des API natives. Sur iOS, l'API système SecRandomCopyBytes est invoquée lorsque crypto.getRandomValues est appelée dans l'application. En utilisant le débogage JS distant de React, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Les tests selon les paramètres définis ont produit un « Rapport de test » (voir pièce jointe ci-dessous), où tous les éléments ont passé, répondant aux exigences de sécurité.

    • Résultats : NIST SP 800-22-iOS-app-x.txt ( Disponible dans la pièce jointe)

FIPS 140-2 (Federal Information Processing Standard Publication 140-2) est une norme de sécurité informatique publiée par le NIST. Elle détaille les exigences de sécurité pour les modules cryptographiques, se concentrant spécifiquement sur les types de RNG, la force de sécurité, les graines, l'entropie, la périodicité, les tests périodiques et les tests continus.

  • Logiciel de test : rng-tools

  • Paramètres de test : Aucun

  • Environnement de test : ubuntu 24.04 arm64

  • Processus de compilation :

    1. Installer correctement gcc, automake

    2. Exécuter ./autogen.sh

    3. Exécuter ./configure (en cas d'erreurs, configurer les dépendances selon les messages d'erreur)

    4. Exécuter make pour compiler les fichiers rngd et rngtest

    5. Exécuter ./rngtest < testfile.bin

⚠️ Remarque : Les fichiers de test doivent être au format binaire en entrée, et non en ASCII.

Windows

Système : Win10 22H2 ; Matériel : i7-13700h

  • Client de bureau

    • Le client de bureau Windows de l'application OneKey est une application Electron qui repose sur le moteur Chrome. En utilisant les outils de développement, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Le fichier texte a été converti en fichier binaire, et le « Rapport de test » ci-dessous montre que tous les éléments ont passé, répondant aux exigences de sécurité.

      app-v5-randomness-fips-140-2-windows-desktop.png
  • Extension du navigateur

    • L'extension Chrome repose sur le moteur Chrome. En utilisant les outils de développement, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Le fichier texte a été converti en fichier binaire, et le « Rapport de test » ci-dessous montre 1024 rounds testés avec un round de « Runs » échoué, mais tous les éléments ont passé dans l'ensemble, répondant aux exigences de sécurité.

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

macOS

Système : Sonoma 14.6 ; Matériel : MacBook Pro 2020 13 pouces M1

  • Client de bureau

    • Le client de bureau macOS de l'application OneKey est une application Electron qui repose sur le moteur Chrome. En utilisant les outils de développement, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Le fichier texte a été converti en fichier binaire, et le « Rapport de test » ci-dessous montre que tous les éléments ont passé, répondant aux exigences de sécurité.

      app-v5-randomness-fips-140-2-mac-desktop.png
  • Extension du navigateur

    • L'extension Chrome repose sur le moteur Chrome. En utilisant les outils de développement, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Le fichier texte a été converti en fichier binaire, et le « Rapport de test » ci-dessous montre que tous les éléments ont passé, répondant aux exigences de sécurité.

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

Android

Système : hyperOS 1.0.4.0 ; Matériel : Xiaomi 10s snapdragon870

  • Client Android

    • Le client Android de l'application OneKey, étant une application React Native, s'appuie sur des API natives. Sur Android, l'API système SecureRandom est invoquée lorsque crypto.getRandomValues est appelée dans l'application. En utilisant le débogage JS distant de React, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Le fichier texte a été converti en fichier binaire, et le « Rapport de test » ci-dessous montre trois rounds sur 1024 où tous les éléments de test ont échoué, mais tous les éléments ont passé dans l'ensemble, répondant aux exigences de sécurité.

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

    ⚠️ Remarque : Le client Android a eu trois rounds de test sur 1024 où tous les éléments de test ont échoué. Ce problème pourrait être un bug dans l'outil rng-test et n'affecte pas la conclusion globale du test.

iOS

Système iOS 17.5 ; Matériel : iPhoneX A11

  • Client iOS

    • Le client iOS de l'application OneKey, étant une application React Native, s'appuie sur des API natives. Sur iOS, l'API système SecRandomCopyBytes est invoquée lorsque crypto.getRandomValues est appelée dans l'application. En utilisant le débogage JS distant de React, l'API de génération d'entropie mnémonique crypto.getRandomValues est appelée à l'exécution pour échantillonner des nombres aléatoires, pour un total de 20 Mo. Le fichier texte a été converti en fichier binaire, et le « Rapport de test » ci-dessous montre un test échoué dans « Long run » sur 1024 rounds, mais tous les éléments ont passé dans l'ensemble, répondant aux exigences de sécurité.

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

Pièces jointes des résultats


Avez-vous trouvé la réponse à votre question ?