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

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

อัปเดตแล้ววันนี้

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

โครงการ

พารามิเตอร์

ความยาวเซ็กเมนต์

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

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

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

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

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

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

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

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

    1. ติดตั้ง gcc, automake ให้ถูกต้อง

    2. เรียกใช้ ./autogen.sh

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

    4. เรียกใช้ make เพื่อคอมไพล์ไฟล์ rngd และ rngtest

    5. เรียกใช้ ./rngtest < testfile.bin

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

Windows

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

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

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

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

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

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

macOS

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

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

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

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

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

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

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

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

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

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

เอกสารแนบผลการทดสอบ


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