이 기사는 OneKey 앱(소프트웨어 지갑)에서 니모닉 생성의 무작위성에 대한 보안 테스트 보고서를 제공하며, 지원되는 모든 운영 체제(macOS, Windows, Android, iOS)와 해당 클라이언트(데스크톱 & 확장 프로그램)를 포함합니다.
테스트 결론
OneKey 앱은 Windows, macOS, iOS 및 Android 클라이언트와 Chrome 확장에서 개발 지침이 권장하는 플랫폼별 암호학적으로 강력한 난수 API를 사용합니다. 내부 테스트를 통해 NIST SP 800-22 및 FIPS 140-2 난수 보안 기준에 부합함을 확인했습니다.
- Chrome 기반 플랫폼(Windows, macOS)에서는 암호학적으로 강력한 난수를 생성하기 위해 Chrome에서 제공하는 안전한 의사 난수 API인
crypto.getRandomValues
를 사용합니다. - React Native 기반 Android 및 iOS 플랫폼에서는 각각 시스템이 제공하는 안전한 난수 인터페이스
SecureRandom
및SecRandomCopyBytes
를 호출합니다.
⚠️ 참고: OneKey 앱은 보안 개발 지침을 엄격히 준수하고 있지만, 무작위 수 생성의 보안은 사용자 장치의 운영 체제/하드웨어 구현에 의해 영향을 받을 수 있습니다.
Security Testing
NIST SP 800-22 (미국 국가 표준 기술 연구소 특별 간행물 800-22)는 주로 의사 난수 생성기(PRNG)를 테스트하기 위한 통계적 테스트 스위트를 포함하는 미국 국가 표준 기술 연구소(NIST)가 발행한 문서입니다. 난수 생성기가 생성한 비트 시퀀스의 무작위성과 품질을 평가하기 위한 통계 테스트 세트를 제공합니다.
- 테스트 소프트웨어: NIST SP 800-22 Statistical Test Suite
- 테스트 환경: macOS 14.5
- 테스트 매개변수:
프로젝트 |
매개변수 |
---|---|
Segment Length |
1024000 |
Test Items |
1 (전체 15개 테스트) |
Block Frequency Test - block length(M) |
20480 |
NonOverlapping Template Test - block length(m) |
10 |
Overlapping Template Test - block length(m) |
10 |
Approximate Entropy Test - block length(m) |
10 |
Serial Test - block length(m) |
16 |
Linear Complexity Test - block length(M) |
5000 |
bitstreams |
20(20*1024000bits = 20480000bits = 20MB) |
Win10 22H2; 하드웨어: i7-13700h
-
데스크톱 클라이언트
- Windows 데스크톱 클라이언트는 Electron 애플리케이션으로, Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
crypto.getRandomValues
를 호출해 난수를 샘플링하며, 총 20MB를 생성합니다. 정의된 매개변수에 따라 테스트한 결과, "테스트 보고서"(아래 첨부 파일 참조)에서 모든 항목이 통과되어 보안 요구 사항을 충족했습니다. - 테스트 결과: NIST SP 800-22-windows-desktop-wini713.txt (기사 첨부 파일에서 확인 가능)
- Windows 데스크톱 클라이언트는 Electron 애플리케이션으로, Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
-
브라우저 확장 프로그램
- Chrome 확장은 Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API crypto.getRandomValues를 호출해 난수를 샘플링하며, 총 20MB를 생성합니다. 정의된 매개변수에 따라 테스트한 결과, "테스트 보고서"(아래 첨부 파일 참조)에서 모든 항목이 통과되어 보안 요구 사항을 충족했습니다.
- 테스트 결과: NIST SP 800-22-windows-ext-wini713.txt (기사 첨부 파일에서 확인 가능)
시스템: Sonoma 14.6; 하드웨어: MacBook Pro 2020 13-inch M1
-
데스크톱 클라이언트
- macOS 데스크톱 클라이언트는 Electron 애플리케이션으로, Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
crypto.getRandomValues
를 호출해 난수를 샘플링하며, 총 20MB를 생성합니다. 정의된 매개변수에 따라 테스트한 결과, "테스트 보고서"(아래 첨부 파일 참조)에서 모든 항목이 통과되어 보안 요구 사항을 충족했습니다. - 테스트 결과: NIST SP 800-22-macOS-desktop-macm1p.txt (기사 첨부 파일에서 확인 가능)
- macOS 데스크톱 클라이언트는 Electron 애플리케이션으로, Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
-
브라우저 확장 프로그램
- Chrome 확장은 Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
crypto.getRandomValues
를 호출해 난수를 샘플링하며, 총 20MB를 생성합니다. 정의된 매개변수에 따라 테스트한 결과, "테스트 보고서"(아래 첨부 파일 참조)에서 모든 항목이 통과되어 보안 요구 사항을 충족했습니다. - 테스트 결과: NIST SP 800-22-macOS-ext-macm1p.txt (기사 첨부 파일에서 확인 가능)
- Chrome 확장은 Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
시스템: hyperOS 1.0.4.0; 하드웨어: Xiaomi 10s Snapdragon 870
-
Android 클라이언트
- Android 클라이언트는 React Native 애플리케이션으로, 원시 API를 사용합니다. Android에서는 애플리케이션에서
crypto.getRandomValues
가 호출될 때 시스템 APISecureRandom
이 호출됩니다. React 원격 JS 디버그를 사용하여 실행 시 니모닉 엔트로피 생성 APIcrypto.getRandomValues
를 호출해 난수를 샘플링하며, 총 20MB를 생성합니다. 정의된 매개변수에 따라 테스트한 결과, "테스트 보고서"(아래 첨부 파일 참조)에서 모든 항목이 통과되어 보안 요구 사항을 충족했습니다. - 테스트 결과: NIST SP 800-22-android-app-andsm870.txt (기사 첨부 파일에서 확인 가능)
- Android 클라이언트는 React Native 애플리케이션으로, 원시 API를 사용합니다. Android에서는 애플리케이션에서
시스템: iOS 17.5; 하드웨어: iPhoneX A11
-
iOS 클라이언트
- iOS 클라이언트는 React Native 애플리케이션으로, 원시 API를 사용합니다. iOS에서는 애플리케이션에서
crypto.getRandomValues
가 호출될 때 시스템 APISecRandomCopyBytes
가 호출됩니다. React 원격 JS 디버그를 사용하여 실행 시 니모닉 엔트로피 생성 APIcrypto.getRandomValues
를 호출해 난수를 샘플링하며, 총 20MB를 생성합니다. 정의된 매개변수에 따라 테스트한 결과, "테스트 보고서"(아래 첨부 파일 참조)에서 모든 항목이 통과되어 보안 요구 사항을 충족했습니다. - 테스트 결과: NIST SP 800-22-iOS-app-x.txt (기사 첨부 파일에서 확인 가능)
- iOS 클라이언트는 React Native 애플리케이션으로, 원시 API를 사용합니다. iOS에서는 애플리케이션에서
FIPS 140-2 (연방 정보 처리 표준 간행물 140-2)는 NIST에서 발행한 컴퓨터 보안 표준입니다. 이는 암호화 모듈의 보안 요구 사항을 상세히 설명하며, 특히 RNG 유형, 보안 강도, 시드, 엔트로피, 주기성, 주기적 테스트 및 연속 테스트에 초점을 맞춥니다.
- 테스트 소프트웨어: rng-tools
- 테스트 매개변수: None
- 테스트 환경: ubuntu 24.04 arm64
-
컴파일 프로세스:
- gcc, automake 를 적절히 설치합니다.
-
./autogen.sh
실행 -
./configure
실행(오류가 발생하면 오류 메시지에 따라 종속성을 구성) -
make
를 실행하여 rngd 및 rngtest 파일을 컴파일합니다. -
./rngtest < testfile.bin
실행
⚠️ 참고: 테스트 파일은 ASCII가 아닌 바이너리 형식으로 입력되어야 합니다.
시스템: Win10 22H2; 하드웨어: i7-13700h
-
데스크톱 클라이언트
- Windows 데스크톱 클라이언트는 Electron 애플리케이션으로, Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
crypto.getRandomValues
를 호출해 난수를 샘플링하며, 총 20MB를 생성합니다. 텍스트 파일을 바이너리 파일로 변환한 후, 아래 "테스트 보고서"는 모든 항목이 통과되어 보안 요구 사항을 충족했음을 보여줍니다.
- Windows 데스크톱 클라이언트는 Electron 애플리케이션으로, Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
-
브라우저 확장 프로그램
- Chrome 확장은 Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
crypto.getRandomValues
를 호출해 난수를 샘플링하며, 총 20MB를 생성합니다. 텍스트 파일을 바이너리 파일로 변환한 후, 아래 "테스트 보고서"는 1024개 테스트 라운드 중 1라운드에서 Runs 실패가 있었지만, 모든 항목이 전체적으로 통과하여 보안 요구 사항을 충족했음을 보여줍니다.
- Chrome 확장은 Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API
시스템: Sonoma 14.6; 하드웨어: MacBook Pro 2020 13인치 M1
-
데스크톱 클라이언트
- OneKey App의 macOS 데스크톱 클라이언트는 Chrome 엔진을 사용하는 Electron 애플리케이션입니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API인
crypto.getRandomValues
를 호출하여 난수를 샘플링하며, 총 20MB를 생성합니다. 텍스트 파일을 이진 파일로 변환한 후, 아래의 "테스트 보고서"는 모든 항목이 통과되어 보안 요구 사항을 충족했음을 보여줍니다.
- OneKey App의 macOS 데스크톱 클라이언트는 Chrome 엔진을 사용하는 Electron 애플리케이션입니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API인
-
브라우저 확장 프로그램
- Chrome 확장은 Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API인
crypto.getRandomValues
를 호출하여 난수를 샘플링하며, 총 20MB를 생성합니다. 텍스트 파일을 이진 파일로 변환한 후, 아래의 "테스트 보고서"는 모든 항목이 통과되어 보안 요구 사항을 충족했음을 보여줍니다.
- Chrome 확장은 Chrome 엔진을 사용합니다. 개발자 도구를 사용하여 실행 시 니모닉 엔트로피 생성 API인
시스템: hyperOS 1.0.4.0; 하드웨어: Xiaomi 10s Snapdragon 870
-
Android 클라이언트
- OneKey App의 Android 클라이언트는 React Native 애플리케이션으로, 원시 API를 사용합니다. Android에서는 애플리케이션에서
crypto.getRandomValues
가 호출될 때 시스템 API인 SecureRandom이 호출됩니다. React 원격 JS 디버그를 사용하여 실행 시 니모닉 엔트로피 생성 API인crypto.getRandomValues
를 호출하여 난수를 샘플링하며, 총 20MB를 생성합니다. 텍스트 파일을 이진 파일로 변환한 후, 아래의 "테스트 보고서"는 1024개 테스트 중 3개의 라운드에서 모든 테스트 항목이 실패했지만, 전체적으로 모든 항목이 통과되어 보안 요구 사항을 충족했음을 보여줍니다.
⚠️ 참고: Android 클라이언트는 1024개 테스트 중 3번의 테스트 라운드에서 모든 테스트 항목이 실패했습니다. 이 문제는 rng-test 도구의 버그일 수 있으며, 전체 테스트 결론에 영향을 주지 않습니다.
- OneKey App의 Android 클라이언트는 React Native 애플리케이션으로, 원시 API를 사용합니다. Android에서는 애플리케이션에서
시스템: iOS 17.5; 하드웨어: iPhoneX A11
-
iOS 클라이언트
- OneKey App의 iOS 클라이언트는 React Native 애플리케이션으로, 원시 API를 사용합니다. iOS에서는 애플리케이션에서
crypto.getRandomValues
가 호출될 때 시스템 API인SecRandomCopyBytes
가 호출됩니다. React 원격 JS 디버그를 사용하여 실행 시 니모닉 엔트로피 생성 API인crypto.getRandomValues
를 호출하여 난수를 샘플링하며, 총 20MB를 생성합니다. 텍스트 파일을 이진 파일로 변환한 후, 아래의 "테스트 보고서"는 1024개 라운드 중 Long run 테스트에서 1번 실패했지만, 전체적으로 모든 항목이 통과되어 보안 요구 사항을 충족했음을 보여줍니다.
- OneKey App의 iOS 클라이언트는 React Native 애플리케이션으로, 원시 API를 사용합니다. iOS에서는 애플리케이션에서