ข้ามไปที่เนื้อหาหลัก

การทดสอบความปลอดภัยของตัวเลขสุ่มในแอป OneKey

อัปเดตเมื่อกว่า 2 สัปดาห์ที่แล้ว

บทความนี้ให้รายงานการทดสอบความปลอดภัยเกี่ยวกับความเป็นสุ่มของการสร้าง 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) โดยจะจัดเตรียมชุดการทดสอบทางสถิติเพื่อประเมินความเป็นสุ่มและคุณภาพของลำดับบิตที่สร้างขึ้นโดยตัวสร้างตัวเลขสุ่ม

โครงการ

พารามิเตอร์

ความยาวส่วน

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 entropycrypto.getRandomValuesในขณะทำงานเพื่อสุ่มตัวเลข รวม 20MB การทดสอบตามพารามิเตอร์ที่กำหนดได้ผลลัพธ์เป็น "รายงานการทดสอบ" (ดูสิ่งที่แนบมาด้านล่าง) โดยทุกรายการผ่านการทดสอบและเป็นไปตามข้อกำหนดด้านความปลอดภัย

    • ผลลัพธ์: NIST SP 800-22-windows-desktop-wini713.txt (มีอยู่ในสิ่งที่แนบมา)

  • ส่วนขยายเบราว์เซอร์

    • ส่วนขยาย Chrome ใช้เอนจิ้น Chrome ใช้เครื่องมือสำหรับนักพัฒนาเพื่อเรียกใช้ API การสร้าง Mnemonic entropycrypto.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 entropycrypto.getRandomValuesในขณะทำงานเพื่อสุ่มตัวเลข รวม 20MB การทดสอบตามพารามิเตอร์ที่กำหนดได้ผลลัพธ์เป็น "รายงานการทดสอบ" (ดูสิ่งที่แนบมาด้านล่าง) โดยทุกรายการผ่านการทดสอบและเป็นไปตามข้อกำหนดด้านความปลอดภัย

    • ผลลัพธ์: NIST SP 800-22-macOS-desktop-macm1p.txt (มีอยู่ในสิ่งที่แนบมา)

  • ส่วนขยายเบราว์เซอร์

    • ส่วนขยาย Chrome ใช้เอนจิ้น Chrome ใช้เครื่องมือสำหรับนักพัฒนาเพื่อเรียกใช้ API การสร้าง Mnemonic entropycrypto.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

  • กระบวนการคอมไพล์:

    1. ติดตั้ง gcc, automake อย่างถูกต้อง

    2. รัน ./autogen.sh

    3. รัน ./configure (หากเกิดข้อผิดพลาด ให้กำหนดค่า dependencies ตามข้อความแสดงข้อผิดพลาด)

    4. รัน make เพื่อคอมไพล์ไฟล์ rngd และ rngtest

    5. รัน ./rngtest < testfile.bin

⚠️ หมายเหตุ: ไฟล์ทดสอบต้องอยู่ในรูปแบบไบนารีเป็นอินพุต ไม่ใช่ ASCII

Windows

ระบบ: Win10 22H2; ฮาร์ดแวร์: i7-13700h

  • ไคลเอนต์เดสก์ท็อป

    • ไคลเอนต์เดสก์ท็อป Windows ของแอป OneKey เป็นแอปพลิเคชัน Electron ที่ใช้เอนจิ้น Chrome ใช้เครื่องมือสำหรับนักพัฒนาเพื่อเรียกใช้ API การสร้าง Mnemonic entropycrypto.getRandomValuesในขณะทำงานเพื่อสุ่มตัวเลข รวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่าทุกรายการผ่านการทดสอบและเป็นไปตามข้อกำหนดด้านความปลอดภัย

      app-v5-randomness-fips-140-2-windows-desktop.png
  • ส่วนขยายเบราว์เซอร์

    • ส่วนขยาย Chrome ใช้เอนจิ้น Chrome ใช้เครื่องมือสำหรับนักพัฒนาเพื่อเรียกใช้ API การสร้าง Mnemonic entropycrypto.getRandomValuesในขณะทำงานเพื่อสุ่มตัวเลข รวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่ามีการทดสอบ 1024 รอบ โดยมี 1 รอบที่ Runs ล้มเหลว แต่โดยรวมทุกรายการผ่านการทดสอบและเป็นไปตามข้อกำหนดด้านความปลอดภัย

      app-v5-randomness-fips-140-2-windows-ext.png

macOS

ระบบ: Sonoma 14.6; ฮาร์ดแวร์: MacBook Pro 2020 13 นิ้ว M1

  • ไคลเอนต์เดสก์ท็อป

    • ไคลเอนต์เดสก์ท็อป macOS ของแอป OneKey เป็นแอปพลิเคชัน Electron ที่ใช้เอนจิ้น Chrome ใช้เครื่องมือสำหรับนักพัฒนาเพื่อเรียกใช้ API การสร้าง Mnemonic entropycrypto.getRandomValuesในขณะทำงานเพื่อสุ่มตัวเลข รวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่าทุกรายการผ่านการทดสอบและเป็นไปตามข้อกำหนดด้านความปลอดภัย

      app-v5-randomness-fips-140-2-mac-desktop.png
  • ส่วนขยายเบราว์เซอร์

    • ส่วนขยาย Chrome ใช้เอนจิ้น Chrome ใช้เครื่องมือสำหรับนักพัฒนาเพื่อเรียกใช้ API การสร้าง Mnemonic entropycrypto.getRandomValuesในขณะทำงานเพื่อสุ่มตัวเลข รวม 20MB ไฟล์ข้อความถูกแปลงเป็นไฟล์ไบนารี และ "รายงานการทดสอบ" ด้านล่างแสดงว่าทุกรายการผ่านการทดสอบและเป็นไปตามข้อกำหนดด้านความปลอดภัย

      app-v5-randomness-fips-140-2-mac-ext.png

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 รอบ ที่ไม่ผ่านการทดสอบทั้งหมด แต่โดยรวมทุกรายการผ่านการทดสอบและเป็นไปตามข้อกำหนดด้านความปลอดภัย

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

    ⚠️ หมายเหตุ: ในไคลเอนต์ 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 รอบ แต่โดยรวมทุกรายการผ่านการทดสอบและเป็นไปตามข้อกำหนดด้านความปลอดภัย

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

ไฟล์แนบผลลัพธ์


นี่ไม่ใช่คำตอบที่ต้องการใช่ไหม