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

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

Обновлено сегодня

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

Заключение

Приложение 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 в приложении. Используя удаленную отладку JS 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 в приложении. Используя удаленную отладку JS 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 в приложении. Используя удаленную отладку JS 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 в приложении. Используя удаленную отладку JS React, API генерации энтропии мнемоники crypto.getRandomValues вызывается во время выполнения для выборки случайных чисел, общий объем которых составляет 20 МБ. Текстовый файл был преобразован в бинарный, и «Отчет об испытаниях» ниже показывает один сбойный тест в Long run из 1024 раундов, но в целом все пункты пройдены, что соответствует требованиям безопасности.

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

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


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