Эта статья представляет собой отчет о тестировании безопасности случайности генерации мнемонических фраз в приложении 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) США, который в основном содержит набор статистических тестов для проверки генераторов псевдослучайных чисел (ГПСЧ). Он предоставляет набор статистических тестов для оценки случайности и качества последовательностей битов, генерируемых генераторами случайных чисел.
Программное обеспечение для тестирования: Набор статистических тестов NIST SP 800-22
Тестовая среда: macOS 14.5
Параметры тестирования:
Проект
|
Параметры
|
Длина сегмента
|
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
Процесс компиляции:
Установите gcc, automake надлежащим образом
Выполните
./autogen.shВыполните
./configure(при возникновении ошибок настройте зависимости в соответствии с сообщениями об ошибках)Выполните
makeдля компиляции файлов rngd и rngtestВыполните
./rngtest < testfile.bin
⚠️ Примечание: Тестовые файлы должны быть во входных данных в бинарном формате, а не в ASCII.
Windows
Система: Win10 22H2; Оборудование: i7-13700h
Настольный клиент
Настольный клиент OneKey для Windows — это приложение Electron, работающее на движке Chrome. При помощи инструментов разработчика API генерации энтропии мнемоники
crypto.getRandomValuesвызывается во время выполнения для выборки случайных чисел, общий объем которых составляет 20 МБ. Текстовый файл был преобразован в бинарный, и «Отчет об испытаниях» ниже показывает, что все пункты пройдены, что соответствует требованиям безопасности.
Расширение браузера
Расширение Chrome работает на движке Chrome. При помощи инструментов разработчика API генерации энтропии мнемоники
crypto.getRandomValuesвызывается во время выполнения для выборки случайных чисел, общий объем которых составляет 20 МБ. Текстовый файл был преобразован в бинарный, и «Отчет об испытаниях» ниже показывает, что из 1024 протестированных раундов один раунд «Runs» не пройден, но в целом все пункты пройдены, что соответствует требованиям безопасности.
macOS
Система: Sonoma 14.6; Оборудование: MacBook Pro 2020 13-дюймовый M1
Настольный клиент
Настольный клиент OneKey для macOS — это приложение Electron, работающее на движке Chrome. При помощи инструментов разработчика API генерации энтропии мнемоники
crypto.getRandomValuesвызывается во время выполнения для выборки случайных чисел, общий объем которых составляет 20 МБ. Текстовый файл был преобразован в бинарный, и «Отчет об испытаниях» ниже показывает, что все пункты пройдены, что соответствует требованиям безопасности.
Расширение браузера
Расширение Chrome работает на движке Chrome. При помощи инструментов разработчика API генерации энтропии мнемоники
crypto.getRandomValuesвызывается во время выполнения для выборки случайных чисел, общий объем которых составляет 20 МБ. Текстовый файл был преобразован в бинарный, и «Отчет об испытаниях» ниже показывает, что все пункты пройдены, что соответствует требованиям безопасности.
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 не прошли все тестовые пункты, но в целом все пункты пройдены, что соответствует требованиям безопасности.
⚠️ Примечание: В 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 раундов, но в целом все пункты пройдены, что соответствует требованиям безопасности.
Приложения с результатами
