บทความนี้ให้รายงานการทดสอบความปลอดภัยเกี่ยวกับความเป็นสุ่มของการสร้าง Mnemonic ใน OneKey App (ซอฟต์แวร์วอลเล็ต) ซึ่งครอบคลุมระบบปฏิบัติการที่รองรับทั้งหมดโดย OneKey App (macOS, Windows, Android, iOS) และไคลเอ็นต์ที่เกี่ยวข้อง (Desktop & Extension)
สรุป
OneKey App ใช้ 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 App จะปฏิบัติตามแนวทางการพัฒนาความปลอดภัยอย่างเคร่งครัด แต่ความปลอดภัยของการสร้างตัวเลขสุ่มยังอาจได้รับผลกระทบจากการใช้งานระบบปฏิบัติการ/ฮาร์ดแวร์ของผู้ใช้อีกด้วย
การทดสอบความปลอดภัย
NIST SP 800-22 FIPS 140-2
NIST SP 800-22 (เอกสารเผยแพร่พิเศษ 800-22 ของสถาบันมาตรฐานและเทคโนโลยีแห่งชาติ) เป็นเอกสารที่เผยแพร่โดย NIST แห่งสหรัฐอเมริกา ซึ่งเกี่ยวข้องกับชุดทดสอบทางสถิติสำหรับการทดสอบตัวสร้างตัวเลขสุ่มเทียม (PRNG) โดยมีชุดทดสอบทางสถิติเพื่อประเมินความเป็นสุ่มและคุณภาพของลำดับบิตที่สร้างขึ้นโดยตัวสร้างตัวเลขสุ่ม
ซอฟต์แวร์ทดสอบ: ชุดทดสอบทางสถิติ NIST SP 800-22
สภาพแวดล้อมการทดสอบ: macOS 14.5
พารามิเตอร์การทดสอบ:
โครงการ
|
พารามิเตอร์
|
ความยาวเซ็กเมนต์
|
1024000
|
รายการทดสอบ
|
1 (ทุก 15 การทดสอบ)
|
การทดสอบความถี่บล็อก - ความยาวบล็อก (M)
|
20480
|
การทดสอบเทมเพลตแบบไม่เหลื่อมกัน - ความยาวบล็อก (m)
|
10
|
การทดสอบเทมเพลตแบบเหลื่อมกัน - ความยาวบล็อก (m)
|
10
|
การทดสอบเอนโทรปีโดยประมาณ - ความยาวบล็อก (m)
|
10
|
การทดสอบแบบอนุกรม - ความยาวบล็อก (m)
|
16
|
การทดสอบความซับซ้อนเชิงเส้น - ความยาวบล็อก (M)
|
5000
|
bitstreams
|
20 (20*1024000บิต = 20480000บิต = 20MB)
|
Windows
ระบบ: Win10 22H2; ฮาร์ดแวร์: i7-13700h
ไคลเอ็นต์เดสก์ท็อป
ไคลเอ็นต์เดสก์ท็อป OneKey App สำหรับ Windows เป็นแอปพลิเคชัน Electron ที่ใช้เอนจิ้น Chrome การใช้เครื่องมือสำหรับนักพัฒนา ซึมการสร้างที่มาของเอนโทรปี Mnemonic API
crypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB การทดสอบตามพารามิเตอร์ที่กำหนดได้ผลลัพธ์เป็น "รายงานการทดสอบ" (ดูเอกสารแนบด้านล่าง) ซึ่งทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัยผลลัพธ์: NIST SP 800-22-windows-desktop-wini713.txt (มีอยู่ในเอกสารแนบ)
ส่วนขยายเบราว์เซอร์
ส่วนขยาย Chrome ใช้เอนจิ้น Chrome การใช้เครื่องมือสำหรับนักพัฒนา ซึมการสร้างที่มาของเอนโทรปี Mnemonic API
crypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB การทดสอบตามพารามิเตอร์ที่กำหนดได้ผลลัพธ์เป็น "รายงานการทดสอบ" (ดูเอกสารแนบด้านล่าง) ซึ่งทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัยผลลัพธ์: NIST SP 800-22-windows-ext-wini713.txt (มีอยู่ในเอกสารแนบ)
macOS
ระบบ: Sonoma 14.6; ฮาร์ดแวร์: MacBook Pro 2020 13 นิ้ว M1
ไคลเอ็นต์เดสก์ท็อป
ไคลเอนต์เดสก์ท็อป OneKey App สำหรับ macOS เป็นแอปพลิเคชัน Electron ที่ใช้เอนจิ้น Chrome การใช้เครื่องมือสำหรับนักพัฒนา ซึมการสร้างที่มาของเอนโทรปี Mnemonic API
crypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB การทดสอบตามพารามิเตอร์ที่กำหนดได้ผลลัพธ์เป็น "รายงานการทดสอบ" (ดูเอกสารแนบด้านล่าง) ซึ่งทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัยผลลัพธ์: NIST SP 800-22-macOS-desktop-macm1p.txt (มีอยู่ในเอกสารแนบ)
ส่วนขยายเบราว์เซอร์
ส่วนขยาย Chrome ใช้เอนจิ้น Chrome การใช้เครื่องมือสำหรับนักพัฒนา ซึมการสร้างที่มาของเอนโทรปี Mnemonic API
crypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB การทดสอบตามพารามิเตอร์ที่กำหนดได้ผลลัพธ์เป็น "รายงานการทดสอบ" (ดูเอกสารแนบด้านล่าง) ซึ่งทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัยผลลัพธ์: 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ถูกเรียกในแอปพลิเคชัน การใช้ React remote JS debug ซึมการสร้างที่มาของเอนโทรปี Mnemonic APIcrypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB การทดสอบตามพารามิเตอร์ที่กำหนดได้ผลลัพธ์เป็น "รายงานการทดสอบ" (ดูเอกสารแนบด้านล่าง) ซึ่งทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัยผลลัพธ์: 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ถูกเรียกในแอปพลิเคชัน การใช้ React remote JS debug ซึมการสร้างที่มาของเอนโทรปี Mnemonic APIcrypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB การทดสอบตามพารามิเตอร์ที่กำหนดได้ผลลัพธ์เป็น "รายงานการทดสอบ" (ดูเอกสารแนบด้านล่าง) ซึ่งทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัยผลลัพธ์: NIST SP 800-22-iOS-app-x.txt (มีอยู่ในเอกสารแนบ)
FIPS 140-2 (เอกสารเผยแพร่มาตรฐานการประมวลผลข้อมูลของรัฐบาลกลาง 140-2) เป็นมาตรฐานความปลอดภัยคอมพิวเตอร์ที่ออกโดย NIST ซึ่งระบุข้อกำหนดด้านความปลอดภัยสำหรับโมดูลการเข้ารหัส โดยเฉพาะอย่างยิ่งมุ่งเน้นไปที่ประเภท RNG, ความแข็งแกร่งของความปลอดภัย, seed, entropy, periodicity, การทดสอบเป็นระยะ และการทดสอบต่อเนื่อง
ซอฟต์แวร์ทดสอบ: rng-tools
พารามิเตอร์การทดสอบ: ไม่มี
สภาพแวดล้อมการทดสอบ: ubuntu 24.04 arm64
กระบวนการคอมไพล์:
ติดตั้ง gcc, automake ให้ถูกต้อง
เรียกใช้
./autogen.shเรียกใช้
./configure(หากเกิดข้อผิดพลาด ให้กำหนดค่าการพึ่งพาตามข้อความแสดงข้อผิดพลาด)เรียกใช้
makeเพื่อคอมไพล์ไฟล์ rngd และ rngtestเรียกใช้
./rngtest < testfile.bin
⚠️ หมายเหตุ: ไฟล์ทดสอบต้องอยู่ในรูปแบบไบนารีเป็นอินพุต ไม่ใช่ ASCII
Windows
ระบบ: Win10 22H2; ฮาร์ดแวร์: i7-13700h
ไคลเอ็นต์เดสก์ท็อป
ไคลเอนต์เดสก์ท็อป OneKey App สำหรับ Windows เป็นแอปพลิเคชัน Electron ที่ใช้เอนจิ้น Chrome การใช้เครื่องมือสำหรับนักพัฒนา ซึมการสร้างที่มาของเอนโทรปี Mnemonic API
crypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่าทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัย
ส่วนขยายเบราว์เซอร์
ส่วนขยาย Chrome ใช้เอนจิ้น Chrome การใช้เครื่องมือสำหรับนักพัฒนา ซึมการสร้างที่มาของเอนโทรปี Mnemonic API
crypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่ามีการทดสอบ 1024 รอบ โดยมี 1 รอบของ Runs ล้มเหลว แต่โดยรวมแล้วทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัย
macOS
ระบบ: Sonoma 14.6; ฮาร์ดแวร์: MacBook Pro 2020 13 นิ้ว M1
ไคลเอ็นต์เดสก์ท็อป
ไคลเอนต์เดสก์ท็อป OneKey App สำหรับ macOS เป็นแอปพลิเคชัน Electron ที่ใช้เอนจิ้น Chrome การใช้เครื่องมือสำหรับนักพัฒนา ซึมการสร้างที่มาของเอนโทรปี Mnemonic API
crypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่าทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัย
ส่วนขยายเบราว์เซอร์
Android
ระบบ: hyperOS 1.0.4.0;ฮาร์ดแวร์: Xiaomi 10s snapdragon870
ไคลเอ็นต์ Android
ไคลเอนต์ Android ของ OneKey App ซึ่งเป็นแอปพลิเคชัน React Native นั้นใช้ API ดั้งเดิม ใน Android API ของระบบ SecureRandom จะถูกเรียกใช้เมื่อ
crypto.getRandomValuesถูกเรียกในแอปพลิเคชัน การใช้ React remote JS debug ซึมการสร้างที่มาของเอนโทรปี Mnemonic APIcrypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่า 3 รอบจาก 1024 รอบล้มเหลวทุกรายการทดสอบ แต่โดยรวมแล้วทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัย
⚠️ หมายเหตุ: ไคลเอนต์ Android มี 3 รอบการทดสอบจาก 1024 รอบที่ล้มเหลวทุกรายการทดสอบ ปัญหานี้อาจเป็นข้อผิดพลาดในเครื่องมือ rng-test และไม่ส่งผลกระทบต่อข้อสรุปโดยรวมของการทดสอบ
iOS
ระบบ iOS 17.5; ฮาร์ดแวร์: iPhoneX A11
ไคลเอ็นต์ iOS
ไคลเอนต์ iOS ของ OneKey App ซึ่งเป็นแอปพลิเคชัน React Native นั้นใช้ API ดั้งเดิม ใน iOS API ของระบบ
SecRandomCopyBytesจะถูกเรียกใช้เมื่อcrypto.getRandomValuesถูกเรียกในแอปพลิเคชัน การใช้ React remote JS debug ซึมการสร้างที่มาของเอนโทรปี Mnemonic APIcrypto.getRandomValuesจะถูกเรียกใช้ขณะทำงานเพื่อสุ่มตัวเลข โดยรวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่ามีการทดสอบ Long run ล้มเหลว 1 ครั้งจาก 1024 รอบ แต่โดยรวมแล้วทุกรายการผ่านและตรงตามข้อกำหนดด้านความปลอดภัย
เอกสารแนบผลการทดสอบ
