К основному содержимому

Тестирование безопасности случайных чисел в приложении OneKey

Обновлено более 2 нед. назад

Настоящая статья представляет собой отчет о тестировании безопасности случайности генерации мнемонических фраз в приложении OneKey (программный кошелек), охватывающий все поддерживаемые операционные системы OneKey App (macOS, Windows, Android, iOS) и соответствующие им клиенты (Desktop & Extension).

Заключение

Приложение OneKey использует специфичные для платформы криптографически стойкие API случайных чисел, рекомендованные руководствами по разработке для клиентов Windows, macOS, iOS и Android, а также расширения Chrome. Внутреннее тестирование подтверждает соответствие стандартам безопасности случайных чисел NIST SP 800-22 и FIPS 140-2.

  • На платформах на базе Chrome (Windows, macOS) для генерации криптографически стойких псевдослучайных чисел используется безопасный API псевдослучайных чисел crypto.getRandomValues, предоставляемый Chrome.

  • На платформах Android и iOS на базе React Native соответственно вызываются предоставляемые системой интерфейсы безопасных случайных чисел SecureRandom и SecRandomCopyBytes.

⚠️ Примечание: Хотя приложение OneKey строго соблюдает рекомендации по разработке безопасных приложений, безопасность генерации случайных чисел также может зависеть от реализации операционной системы/оборудования устройства пользователя.

Тестирование безопасности

NIST SP 800-22 FIPS 140-2

NIST SP 800-22 (Специальная публикация Национального института стандартов и технологий 800-22) — это документ, опубликованный Национальным институтом стандартов и технологий (NIST) США, который в основном содержит набор статистических тестов для проверки генераторов псевдослучайных чисел (ГПСЧ). Он предоставляет набор статистических тестов для оценки случайности и качества последовательностей битов, генерируемых генераторами случайных чисел.

Проект

Параметры

Длина Сегмента

1024000

Тестовые Элементы

1 (Все 15 тестов)

Тест Блочной Частоты - длина блока (M)

20480

Тест Непересекающихся Шаблонов - длина блока (m)

10

Тест Пересекающихся Шаблонов - длина блока (m)

10

Тест Приблизительной Энтропии - длина блока (m)

10

Серийный Тест - длина блока (m)

16

Тест Линейной Сложности - длина блока (M)

5000

битовые потоки

20 (20*1024000 бит = 20480000 бит = 20 МБ)

Windows

Система: Win10 22H2; Оборудование: i7-13700h

  • Настольный Клиент

    • Настольный клиент OneKey для Windows — это приложение Electron, которое использует движок Chrome. Используя инструменты разработчика, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Тестирование в соответствии с заданными параметрами привело к получению «Отчета о тестировании» (см. вложение ниже), где все пункты пройдены, что соответствует требованиям безопасности.

    • Результаты: NIST SP 800-22-windows-desktop-wini713.txt (Доступно во вложении)

  • Расширение Браузера

    • Расширение Chrome использует движок Chrome. Используя инструменты разработчика, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Тестирование в соответствии с заданными параметрами привело к получению «Отчета о тестировании» (см. вложение ниже), где все пункты пройдены, что соответствует требованиям безопасности.

    • Результаты: NIST SP 800-22-windows-ext-wini713.txt (Доступно во вложении)

macOS

Система: Sonoma 14.6; Оборудование: MacBook Pro 2020 13-дюймовый M1

  • Настольный Клиент

    • Настольный клиент OneKey для macOS — это приложение Electron, которое использует движок Chrome. Используя инструменты разработчика, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Тестирование в соответствии с заданными параметрами привело к получению «Отчета о тестировании» (см. вложение ниже), где все пункты пройдены, что соответствует требованиям безопасности.

    • Результаты: NIST SP 800-22-macOS-desktop-macm1p.txt (Доступно во вложении)

  • Расширение Браузера

    • Расширение Chrome использует движок Chrome. Используя инструменты разработчика, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Тестирование в соответствии с заданными параметрами привело к получению «Отчета о тестировании» (см. вложение ниже), где все пункты пройдены, что соответствует требованиям безопасности.

    • Результаты: NIST SP 800-22-macOS-ext-macm1p.txt (Доступно во вложении)

Android

Система hyperOS 1.0.4.0; Оборудование Xiaomi 10s snapdragon870

  • Android Клиент

    • Android-клиент OneKey App, являясь приложением React Native, использует нативные API. В Android вызывается системный API SecureRandom при вызове crypto.getRandomValues в приложении. Используя удаленную отладку JavaScript React, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Тестирование в соответствии с заданными параметрами привело к получению «Отчета о тестировании» (см. вложение ниже), где все пункты пройдены, что соответствует требованиям безопасности.

    • Результаты: NIST SP 800-22-android-app-andsm870.txt (Доступно во вложении)

iOS

Система: IOS 17.5; Оборудование: iPhoneX A11

  • iOS Клиент

    • iOS-клиент OneKey App, являясь приложением React Native, использует нативные API. В iOS вызывается системный API SecRandomCopyBytes при вызове crypto.getRandomValues в приложении. Используя удаленную отладку JavaScript React, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Тестирование в соответствии с заданными параметрами привело к получению «Отчета о тестировании» (см. вложение ниже), где все пункты пройдены, что соответствует требованиям безопасности.

    • Результаты: NIST SP 800-22-iOS-app-x.txt (Доступно во вложении)

FIPS 140-2 (Стандарт федеральной обработки информации 140-2) — это стандарт компьютерной безопасности, выпущенный NIST. Он детализирует требования безопасности для криптографических модулей, уделяя особое внимание типам ГСЧ, силе безопасности, начальным значениям, энтропии, периодичности, периодическим тестам и непрерывным тестам.

  • Тестовое Программное Обеспечение: rng-tools

  • Тестовые Параметры: Нет

  • Тестовая Среда: ubuntu 24.04 arm64

  • Процесс Компиляции:

    1. Установите gcc, automake должным образом

    2. Выполните ./autogen.sh

    3. Выполните ./configure (если возникнут ошибки, настройте зависимости в соответствии с сообщениями об ошибках)

    4. Выполните make для компиляции файлов rngd и rngtest

    5. Выполните ./rngtest < testfile.bin

⚠️ Примечание: Входные тестовые файлы должны быть в двоичном формате, а не в ASCII.

Windows

Система: Win10 22H2; Оборудование: i7-13700h

  • Настольный Клиент

    • Настольный клиент OneKey для Windows — это приложение Electron, которое использует движок Chrome. Используя инструменты разработчика, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Текстовый файл был преобразован в двоичный файл, и «Отчет о тестировании» ниже показывает, что все пункты пройдены, что соответствует требованиям безопасности.

      app-v5-randomness-fips-140-2-windows-desktop.png
  • Расширение Браузера

    • Расширение Chrome использует движок Chrome. Используя инструменты разработчика, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Текстовый файл был преобразован в двоичный файл, и «Отчет о тестировании» ниже показывает, что при тестировании 1024 раундов один раунд Runs не прошел, но в целом все пункты выполнены, что соответствует требованиям безопасности.

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

macOS

Система: Sonoma 14.6; Оборудование: MacBook Pro 2020 13-дюймовый M1

  • Настольный Клиент

    • Настольный клиент OneKey для macOS — это приложение Electron, которое использует движок Chrome. Используя инструменты разработчика, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Текстовый файл был преобразован в двоичный файл, и «Отчет о тестировании» ниже показывает, что все пункты пройдены, что соответствует требованиям безопасности.

      app-v5-randomness-fips-140-2-mac-desktop.png
  • Расширение Браузера

    • Расширение Chrome использует движок Chrome. Используя инструменты разработчика, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Текстовый файл был преобразован в двоичный файл, и «Отчет о тестировании» ниже показывает, что все пункты пройдены, что соответствует требованиям безопасности.

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

Android

Система: hyperOS 1.0.4.0; Оборудование: Xiaomi 10s snapdragon870

  • Android Клиент

    • Android-клиент OneKey App, являясь приложением React Native, использует нативные API. В Android вызывается системный API SecureRandom при вызове crypto.getRandomValues в приложении. Используя удаленную отладку JavaScript React, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Текстовый файл был преобразован в двоичный файл, и «Отчет о тестировании» ниже показывает, что три раунда из 1024 не прошли все тестовые элементы, но в целом все пункты выполнены, что соответствует требованиям безопасности.

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

    ⚠️ Примечание: В Android-клиенте три раунда тестирования из 1024, в которых все тестовые элементы не прошли. Эта проблема может быть ошибкой в инструменте rng-test и не влияет на общий вывод теста.

iOS

Система: iOS 17.5; Оборудование: iPhoneX A11

  • iOS Клиент

    • iOS-клиент OneKey App, являясь приложением React Native, использует нативные API. В iOS вызывается системный API SecRandomCopyBytes при вызове crypto.getRandomValues в приложении. Используя удаленную отладку JavaScript React, API генерации энтропии мнемонических фраз crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общим объемом 20 МБ. Текстовый файл был преобразован в двоичный файл, и «Отчет о тестировании» ниже показывает один не пройденный тест в Long run из 1024 раундов, но в целом все пункты выполнены, что соответствует требованиям безопасности.

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

Приложения с Результатами


Нашли ответ на свой вопрос?