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

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

อัปเดตแล้วเมื่อวานนี้

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

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

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

GitHub repositories ของเฟิร์มแวร์โอเพนซอร์ส (Open Source Firmware Repositories)

OneKey Pro

OneKey Classic 1S

OneKey Classic

OneKey Touch

OneKey Mini

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

กระบวนการเผยแพร่เฟิร์มแวร์ (Firmware Release Process)

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

onekey github verifiy.png

เป้าหมาย (Targets)

  1. ยืนยันว่า "ไฟล์เฟิร์มแวร์ที่ลงนามโดยทีม OneKey" (OneKey Team Signed Firmware File) ได้มาจาก "ไฟล์เฟิร์มแวร์ที่ลงนามล่วงหน้าโดย GitHub CI" (GitHub CI Pre-Signed Firmware File) ใน repository โอเพนซอร์สของ OneKey

  2. ตรวจสอบความสอดคล้องระหว่าง "ไฟล์เฟิร์มแวร์ที่ลงนามโดยทีม OneKey" (OneKey Team Signed Firmware File) และ "ไฟล์เฟิร์มแวร์ที่จัดเก็บใน OneKey Official CDN" (OneKey Official CDN Stored Firmware File)

สิ่งที่ต้องมี (Prerequisites)

เฟิร์มแวร์ระบบ (System Firmware) เฟิร์มแวร์บลูทูธ (Bluetooth Firmware)

✔ ดาวน์โหลดไฟล์เฟิร์มแวร์ที่ลงนามล่วงหน้าโดย GitHub CI (ยังไม่ได้ลงนาม) (Download GitHub CI Pre-Signed Firmware File (Unsigned))

  • ไปที่หน้า GitHub Release ของเฟิร์มแวร์ฮาร์ดแวร์ OneKey อย่างเป็นทางการ: https://github.com/OneKeyHQ/firmware/releases

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

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

2.png

✔ ดาวน์โหลดไฟล์เฟิร์มแวร์ที่ลงนามโดยทีม OneKey (ลงนามแล้ว) (Download OneKey Team Signed Firmware File (Signed))

  • ไปที่หน้า GitHub Release ของเฟิร์มแวร์ฮาร์ดแวร์ OneKey อย่างเป็นทางการ: https://github.com/OneKeyHQ/firmware/releases

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

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

github release bin.png

✔ ดาวน์โหลดไฟล์เฟิร์มแวร์ที่จัดเก็บใน OneKey Official CDN (ลงนามแล้ว) (Download OneKey Official CDN Stored Firmware File (Signed))

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

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

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

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

3.png

✔ ดาวน์โหลดไฟล์เฟิร์มแวร์บลูทูธที่ลงนามล่วงหน้าโดย GitHub CI (ยังไม่ได้ลงนาม) (Download GitHub CI Pre-Signed Bluetooth Firmware File (Unsigned))

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

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

✔ ดาวน์โหลดไฟล์เฟิร์มแวร์บลูทูธที่ลงนามโดยทีม OneKey (ลงนามแล้ว) (Download OneKey Team Signed Bluetooth Firmware File (Signed))

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

✔ ดาวน์โหลดไฟล์เฟิร์มแวร์บลูทูธที่จัดเก็บใน OneKey Official CDN (ลงนามแล้ว) (Download 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 (Download and Install Python)

ขั้นตอน (Steps)

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

เฟิร์มแวร์ระบบ (System Firmware) เฟิร์มแวร์บลูทูธ (Bluetooth Firmware)

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

  • เปิด Terminal

  • รันคำสั่งด้านล่าง (ไฟล์เฟิร์มแวร์ที่ลงนามโดยทีม OneKey):

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

  • รันคำสั่งด้านล่าง (ไฟล์เฟิร์มแวร์ที่ลงนามล่วงหน้าโดย GitHub CI):

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

  • เปรียบเทียบ Checksums ที่สร้างขึ้นจากสองคำสั่ง หากผลลัพธ์ตรงกัน สามารถยืนยันได้ว่า "ไฟล์เฟิร์มแวร์ที่ลงนามโดยทีม OneKey" ได้มาจาก "ไฟล์เฟิร์มแวร์ที่ลงนามล่วงหน้าโดย GitHub CI" ใน repository โอเพนซอร์สของ OneKey

7.png

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

กระบวนการตรวจสอบด้วยไฟล์เฟิร์มแวร์ที่จัดเก็บใน OneKey Official CDN (ระบบ) (Verification Process with OneKey Official CDN Stored Firmware File (System))

  • เปิด Terminal

  • รันคำสั่งด้านล่าง (ไฟล์เฟิร์มแวร์ที่ลงนามโดยทีม OneKey):

    • shasum -a 256 (file path)

  • รันคำสั่งด้านล่าง (ไฟล์เฟิร์มแวร์ที่จัดเก็บใน OneKey Official CDN):

    • shasum -a 256 (file path)

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

6.png

กระบวนการตรวจสอบด้วยเฟิร์มแวร์ที่ลงนามล่วงหน้าโดย GitHub CI (บลูทูธ) (Verification Process with GitHub CI pre-signed firmware (Bluetooth))

  • ค้นหาไฟล์ ota.bin ในโฟลเดอร์เฟิร์มแวร์บลูทูธที่ลงนามล่วงหน้าโดย GitHub CI ที่คุณดาวน์โหลด

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

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

  • รันคำสั่งด้านล่างเพื่อรับ checksum ของเฟิร์มแวร์บลูทูธที่ลงนามล่วงหน้าโดย GitHub CI:

    • 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

    • หมายเหตุ: โปรดเปลี่ยน ota.bin ในคำสั่งเป็นชื่อไฟล์เฟิร์มแวร์บลูทูธที่ลงนามโดยทีม OneKey

checksum-github-release.png
  • เปรียบเทียบ Checksums ที่สร้างขึ้นจากสองคำสั่ง หากผลลัพธ์ตรงกัน สามารถยืนยันได้ว่า "ไฟล์เฟิร์มแวร์ที่ลงนามโดยทีม OneKey" ได้มาจาก "ไฟล์เฟิร์มแวร์ที่ลงนามล่วงหน้าโดย GitHub CI" ใน repository โอเพนซอร์สของ OneKey

กระบวนการตรวจสอบด้วยไฟล์เฟิร์มแวร์ที่จัดเก็บใน OneKey Official CDN (บลูทูธ) (Verification Process with OneKey Official CDN Stored Firmware File (Bluetooth))

  • เปิด terminal ในโฟลเดอร์เดียวกันกับไฟล์เฟิร์มแวร์บลูทูธที่ลงนามโดยทีม OneKey

  • เรียกใช้ 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 ที่คุณดาวน์โหลด

  • รันคำสั่งเพื่อรับ checksum

  • ทำซ้ำขั้นตอนข้างต้นกับไฟล์เฟิร์มแวร์บลูทูธที่จัดเก็บใน OneKey Official CDN ที่คุณดาวน์โหลด

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

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