ฮาร์ดแวร์วอลเล็ต OneKey มีเฟิร์มแวร์ที่เป็นโอเพนซอร์สทั้งหมด คุณสามารถดูโค้ดเฟิร์มแวร์โอเพนซอร์สสำหรับผลิตภัณฑ์ที่เกี่ยวข้องได้ใน GitHub repository ของ OneKey ก่อนที่ไฟล์เฟิร์มแวร์ที่ตั้งใจสำหรับการผลิตจำนวนมากจะได้รับการเผยแพร่อย่างเป็นทางการ ทีมงาน OneKey จะใช้เครื่องมือ Build Automation ของ GitHub (GitHub CI) เพื่อคอมไพล์และสร้างเฟิร์มแวร์ซอร์สโค้ดจากเฟิร์มแวร์ repository ที่เกี่ยวข้อง จากนั้นไฟล์จะถูกลงนามโดยทีมงาน OneKey ก่อนที่จะเผยแพร่อย่างเป็นทางการ
บทความนี้จะนำเสนอวิธีการตรวจสอบด้วยตนเอง โดยการเปรียบเทียบเช็คซัมของไฟล์ก่อนและหลังการลงนามหลายครั้ง (multi-sig) โดยทีมงานอย่างเป็นทางการ เพื่อยืนยันความสอดคล้องระหว่างไฟล์เฟิร์มแวร์และซอร์สโค้ด
สำหรับวิธีการตรวจสอบความสอดคล้องของข้อมูลต้นฉบับไฟล์ต่างๆ โดยใช้ฟังก์ชันแฮชแบบเข้ารหัส SHA-256 (การเปรียบเทียบ Checksums) โปรดดู บทความนี้
Open Source Firmware Repositories
OneKey Pro
⚙ System Firmware: github.com/OneKeyHQ/firmware-pro
Bluetooth Firmware: github.com/OneKeyHQ/bluetooth-firmware-pro
OneKey Classic 1S
⚙ System Firmware: github.com/OneKeyHQ/firmware-classic1s
Bluetooth Firmware: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Classic
⚙ System Firmware: github.com/OneKeyHQ/firmware/tree/bixin_dev
Bluetooth Firmware: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Touch
⚙ System Firmware: github.com/OneKeyHQ/firmware (branch: touch)
Bluetooth Firmware: github.com/OneKeyHQ/bluetooth-firmware-touch
OneKey Mini
⚙ System Firmware: github.com/OneKeyHQ/firmware/tree/mini
หากต้องการสร้างการเผยแพร่เฟิร์มแวร์ของ OneKey ซ้ำ โปรดทำตามวิดีโอสอนด้านล่าง
Firmware Release Process
เมื่อเฟิร์มแวร์มาตรฐานอย่างเป็นทางการหรือเฟิร์มแวร์ Bluetooth พร้อมสำหรับการเผยแพร่ ทีมงาน OneKey จะเรียกใช้ Action ของ repository ที่เกี่ยวข้องเพื่อคอมไพล์ซอร์สโค้ด หลังจากคอมไพล์สำเร็จ ไฟล์จะถูกอัปโหลดไปยังที่เก็บ GitHub Artifacts เพื่อรอให้ทีมงานดำเนินการลงนามหลายครั้ง (multi-sig) ภายในให้เสร็จสิ้น ก่อนที่จะนำไปไว้บน CDN ของ OneKey หลังจากอัปเดตไฟล์ config.json การแจ้งเตือนการอัปเดตจะถูกส่งผ่านแอป OneKey และ เว็บไซต์อัปเดตเฟิร์มแวร์ OneKey เพื่อแจ้งให้ผู้ใช้ทำการอัปเกรดเฟิร์มแวร์ โปรดดูแผนภาพด้านล่างสำหรับกระบวนการเฉพาะ
เป้าหมาย
ยืนยันว่า "OneKey Team Signed Firmware File" มาจากการสร้าง "GitHub CI Pre-Signed Firmware File" ใน OneKey open source repository.
ยืนยันความสอดคล้องระหว่าง "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.
คลิกที่ชื่อเฟิร์มแวร์ภายใต้ Artifacts เพื่อดาวน์โหลด (ต้องเข้าสู่ระบบ GitHub).
✔ ดาวน์โหลด OneKey Team Signed Firmware File (Signed)
ไปที่ Official OneKey hardware firmware GitHub Release: https://github.com/OneKeyHQ/firmware/releases
ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ.
คลิกเพื่อดาวน์โหลดไฟล์ bin ภายใต้ Assets.
✔ ดาวน์โหลด OneKey Official CDN Stored Firmware File (Signed)
ไปที่ไฟล์ OneKey CDN: https://data.onekey.so/config.json
ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ.
คัดลอกลิงก์ภายใต้ฟิลด์ "url".
เปิดในหน้าต่างเบราว์เซอร์ใหม่เพื่อดาวน์โหลดไฟล์ bin โดยอัตโนมัติ.
✔ ดาวน์โหลด GitHub CI Pre-Signed Bluetooth Firmware File (Unsigned)
ไปที่ Official OneKey bluetooth firmware GitHub Release
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ แล้วคลิกที่ลิงก์ GitHub Action.
คลิกที่ชื่อเฟิร์มแวร์ภายใต้ Artifacts เพื่อดาวน์โหลด (ต้องเข้าสู่ระบบ GitHub).
✔ ดาวน์โหลด OneKey Team Signed Bluetooth Firmware File (Signed)
ไปที่ Official OneKey bluetooth firmware GitHub Release
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ.
คลิกเพื่อดาวน์โหลดไฟล์ bin ภายใต้ Assets.
✔ ดาวน์โหลด OneKey Official CDN Stored Bluetooth Firmware File (Signed)
ไปที่ไฟล์ OneKey CDN: https://data.onekey.so/config.json
ค้นหาเวอร์ชันเฟิร์มแวร์ที่คุณต้องการตรวจสอบ.
คัดลอกลิงก์ภายใต้ฟิลด์ "ble" - "webUpdate".
เปิดในหน้าต่างเบราว์เซอร์ใหม่เพื่อดาวน์โหลดไฟล์ bin โดยอัตโนมัติ.
✔ ดาวน์โหลดและติดตั้ง Python
ดาวน์โหลดและติดตั้ง 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.
สำหรับ 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 ที่สร้างจากทั้งสองคำสั่ง หากผลลัพธ์ตรงกัน จะยืนยันความสอดคล้องของโค้ดของทั้งสองไฟล์เฟิร์มแวร์.
กระบวนการตรวจสอบด้วยเฟิร์มแวร์ที่ลงนามล่วงหน้าโดย 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""")
เรียกใช้คำสั่งเดียวกันกับ OneKey Team Signed Bluetooth Firmware File.
หมายเหตุ: โปรดเปลี่ยน ota.bin ในคำสั่งเป็นชื่อของ OneKey Team Signed Bluetooth Firmware File.
เปรียบเทียบ 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 ที่สร้างจากทั้งสองคำสั่ง หากผลลัพธ์ตรงกัน จะยืนยันความสอดคล้องของโค้ดของทั้งสองไฟล์เฟิร์มแวร์.
