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

ยืนยันความสอดคล้องของไฟล์เฟิร์มแวร์กับโค้ดโอเพนซอร์สที่เผยแพร่โดย OneKey

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

ฮาร์ดแวร์วอลเล็ต OneKey มีเฟิร์มแวร์ที่เป็นโอเพนซอร์สทั้งหมด คุณสามารถดูโค้ดเฟิร์มแวร์โอเพนซอร์สสำหรับผลิตภัณฑ์ที่เกี่ยวข้องได้ใน GitHub repository ของ OneKey ก่อนที่ไฟล์เฟิร์มแวร์ที่ตั้งใจสำหรับการผลิตจำนวนมากจะได้รับการเผยแพร่อย่างเป็นทางการ ทีมงาน OneKey จะใช้เครื่องมือ Build Automation ของ GitHub (GitHub CI) เพื่อคอมไพล์และสร้างเฟิร์มแวร์ซอร์สโค้ดจากเฟิร์มแวร์ repository ที่เกี่ยวข้อง จากนั้นไฟล์จะถูกลงนามโดยทีมงาน OneKey ก่อนที่จะเผยแพร่อย่างเป็นทางการ

บทความนี้จะนำเสนอวิธีการตรวจสอบด้วยตนเอง โดยการเปรียบเทียบเช็คซัมของไฟล์ก่อนและหลังการลงนามหลายครั้ง (multi-sig) โดยทีมงานอย่างเป็นทางการ เพื่อยืนยันความสอดคล้องระหว่างไฟล์เฟิร์มแวร์และซอร์สโค้ด

สำหรับวิธีการตรวจสอบความสอดคล้องของข้อมูลต้นฉบับไฟล์ต่างๆ โดยใช้ฟังก์ชันแฮชแบบเข้ารหัส SHA-256 (การเปรียบเทียบ Checksums) โปรดดู บทความนี้

Open Source Firmware Repositories

OneKey Pro

OneKey Classic 1S

OneKey Classic

OneKey Touch

OneKey Mini

หากต้องการสร้างการเผยแพร่เฟิร์มแวร์ของ OneKey ซ้ำ โปรดทำตามวิดีโอสอนด้านล่าง

Firmware Release Process

เมื่อเฟิร์มแวร์มาตรฐานอย่างเป็นทางการหรือเฟิร์มแวร์ Bluetooth พร้อมสำหรับการเผยแพร่ ทีมงาน OneKey จะเรียกใช้ Action ของ repository ที่เกี่ยวข้องเพื่อคอมไพล์ซอร์สโค้ด หลังจากคอมไพล์สำเร็จ ไฟล์จะถูกอัปโหลดไปยังที่เก็บ GitHub Artifacts เพื่อรอให้ทีมงานดำเนินการลงนามหลายครั้ง (multi-sig) ภายในให้เสร็จสิ้น ก่อนที่จะนำไปไว้บน CDN ของ OneKey หลังจากอัปเดตไฟล์ config.json การแจ้งเตือนการอัปเดตจะถูกส่งผ่านแอป OneKey และ เว็บไซต์อัปเดตเฟิร์มแวร์ OneKey เพื่อแจ้งให้ผู้ใช้ทำการอัปเกรดเฟิร์มแวร์ โปรดดูแผนภาพด้านล่างสำหรับกระบวนการเฉพาะ

onekey github verifiy.png

เป้าหมาย

  1. ยืนยันว่า "OneKey Team Signed Firmware File" มาจากการสร้าง "GitHub CI Pre-Signed Firmware File" ใน OneKey open source repository.

  2. ยืนยันความสอดคล้องระหว่าง "OneKey Team Signed Firmware File" และ "OneKey Official CDN Stored Firmware File."

สิ่งที่ต้องมี

System Firmware Bluetooth Firmware

✔ ดาวน์โหลด GitHub CI Pre-Signed Firmware File (Unsigned)

  • ไปที่ Official OneKey hardware firmware GitHub Release: https://github.com/OneKeyHQ/firmware/releases

  • ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ แล้วคลิกที่ลิงก์ GitHub Action.

github action.png
  • คลิกที่ชื่อเฟิร์มแวร์ภายใต้ Artifacts เพื่อดาวน์โหลด (ต้องเข้าสู่ระบบ GitHub).

2.png

✔ ดาวน์โหลด OneKey Team Signed Firmware File (Signed)

  • ไปที่ Official OneKey hardware firmware GitHub Release: https://github.com/OneKeyHQ/firmware/releases

  • ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ.

  • คลิกเพื่อดาวน์โหลดไฟล์ bin ภายใต้ Assets.

github release bin.png

✔ ดาวน์โหลด OneKey Official CDN Stored Firmware File (Signed)

  • ไปที่ไฟล์ OneKey CDN: https://data.onekey.so/config.json

  • ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ.

  • คัดลอกลิงก์ภายใต้ฟิลด์ "url".

  • เปิดในหน้าต่างเบราว์เซอร์ใหม่เพื่อดาวน์โหลดไฟล์ bin โดยอัตโนมัติ.

3.png

✔ ดาวน์โหลด GitHub CI Pre-Signed Bluetooth Firmware File (Unsigned)

pro-bluetooth-firmware-github-ci.png
  • คลิกที่ชื่อเฟิร์มแวร์ภายใต้ Artifacts เพื่อดาวน์โหลด (ต้องเข้าสู่ระบบ GitHub).

pro-bluetooth-firmware-github-ci-bin.png

✔ ดาวน์โหลด OneKey Team Signed Bluetooth Firmware File (Signed)

pro-bluetooth-firmware-github-release-signed.png

✔ ดาวน์โหลด OneKey Official CDN Stored Bluetooth Firmware File (Signed)

  • ไปที่ไฟล์ OneKey CDN: https://data.onekey.so/config.json

  • ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ.

  • คัดลอกลิงก์ภายใต้ฟิลด์ "ble" - "webUpdate".

  • เปิดในหน้าต่างเบราว์เซอร์ใหม่เพื่อดาวน์โหลดไฟล์ bin โดยอัตโนมัติ.

pro-ble-firmware-cdn.png

✔ ดาวน์โหลดและติดตั้ง Python

ขั้นตอน

ด้านล่างนี้คือขั้นตอนการตรวจสอบสำหรับเป้าหมายทั้งสองที่ตั้งไว้ก่อนหน้านี้:

System Firmware Bluetooth Firmware

กระบวนการตรวจสอบด้วยเฟิร์มแวร์ที่ลงนามล่วงหน้าโดย GitHub CI (System)

  • เปิด Terminal.

  • เรียกใช้คำสั่งด้านล่าง (OneKey Team Signed Firmware File):

    • tail -c +1024 /path/to/(file path) | shasum -a 256

  • เรียกใช้คำสั่งด้านล่าง (GitHub CI Pre-Signed Firmware File):

    • tail -c +1024 /path/to/(file path) | shasum -a 256

  • เปรียบเทียบ Checksums ที่สร้างจากทั้งสองคำสั่ง หากผลลัพธ์ตรงกัน จะสามารถยืนยันได้ว่า "OneKey Team Signed Firmware File" มาจาก "GitHub CI Pre-Signed Firmware File" ใน OneKey open-source repository.

7.png

สำหรับ system firmware จะมีการเพิ่มผลลัพธ์ลายเซ็นขนาด 1024 ไบต์ให้กับเวอร์ชัน CI ของเฟิร์มแวร์ ซึ่งจะถูกตรวจสอบโดย bootloader เมื่ออุปกรณ์เริ่มทำงาน

กระบวนการตรวจสอบด้วย OneKey Official CDN Stored Firmware File (System)

  • เปิด Terminal.

  • เรียกใช้คำสั่งด้านล่าง (OneKey Team Signed Firmware File):

    • shasum -a 256 (file path)

  • เรียกใช้คำสั่งด้านล่าง (OneKey Official CDN Stored Firmware File):

    • shasum -a 256 (file path)

  • เปรียบเทียบ Checksums ที่สร้างจากทั้งสองคำสั่ง หากผลลัพธ์ตรงกัน จะยืนยันความสอดคล้องของโค้ดของทั้งสองไฟล์เฟิร์มแวร์.

6.png

กระบวนการตรวจสอบด้วยเฟิร์มแวร์ที่ลงนามล่วงหน้าโดย GitHub CI (Bluetooth)

  • หาไฟล์ ota.bin ในโฟลเดอร์ GitHub CI Pre-Signed Bluetooth firmware ที่คุณดาวน์โหลด.

  • เปิดเทอร์มินัลในโฟลเดอร์เดียวกันกับ ota.bin.

  • เรียกใช้ Python ด้วยคำสั่ง: python3

  • เรียกใช้คำสั่งด้านล่างเพื่อรับ checksum ของ GitHub CI Pre-Signed Bluetooth firmware.

    • exec("""\nimport struct, hashlib\nwith open("ota.bin", mode="br") as f:\n f.seek(0x0C)\n codelen = struct.unpack("i", f.read(4))[0] - 512\n f.seek(0x600)\n print("".join(format(x, "02x") for x in hashlib.sha256(f.read(codelen)).digest()))\n""")

checksum-github-ci-ble.png
  • เรียกใช้คำสั่งเดียวกันกับ OneKey Team Signed Bluetooth Firmware File.

    • หมายเหตุ: โปรดเปลี่ยน ota.bin ในคำสั่งเป็นชื่อของ OneKey Team Signed Bluetooth Firmware File.

checksum-github-release.png
  • เปรียบเทียบ Checksums ที่สร้างจากทั้งสองคำสั่ง หากผลลัพธ์ตรงกัน จะสามารถยืนยันได้ว่า "OneKey Team Signed Firmware File" มาจาก "GitHub CI Pre-Signed Firmware File" ใน OneKey open-source repository.

กระบวนการตรวจสอบด้วย OneKey Official CDN Stored Firmware File (Bluetooth)

  • เปิดเทอร์มินัลในโฟลเดอร์เดียวกันกับ OneKey Team Signed Bluetooth Firmware File.

  • เรียกใช้ Python ด้วยคำสั่ง: python3

  • คัดลอกคำสั่งด้านล่าง:

    • exec("""\nimport struct, hashlib\nwith open("ota.bin", mode="br") as f:\n f.seek(0x0C)\n codelen = struct.unpack("i", f.read(4))[0] - 512\n f.seek(0x600)\n print("".join(format(x, "02x") for x in hashlib.sha256(f.read(codelen)).digest()))\n""")

  • เปลี่ยน ota.bin เป็นชื่อของ OneKey Team Signed Bluetooth Firmware File ที่คุณดาวน์โหลด.

  • เรียกใช้คำสั่งเพื่อรับ checksum.

  • ทำซ้ำขั้นตอนข้างต้นกับ OneKey Official CDN Stored Bluetooth Firmware File ที่คุณดาวน์โหลด.

  • เปรียบเทียบ Checksums ที่สร้างจากทั้งสองคำสั่ง หากผลลัพธ์ตรงกัน จะยืนยันความสอดคล้องของโค้ดของทั้งสองไฟล์เฟิร์มแวร์.

compare-ble-checksum.png
นี่ไม่ใช่คำตอบที่ต้องการใช่ไหม