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