Bỏ qua đến nội dung chính

Xác thực tính nhất quán của các tệp firmware với mã nguồn mở được phát hành bởi OneKey

Đã cập nhật hôm nay

Ví phần cứng OneKey có firmware hoàn toàn mã nguồn mở. Bạn có thể xem mã firmware nguồn mở cho các sản phẩm liên quan trên kho lưu trữ GitHub của OneKey. Trước khi các tệp firmware dành cho sản xuất hàng loạt được phát hành chính thức, nhóm OneKey sử dụng các công cụ Tự động hóa Biên dịch của GitHub (GitHub CI) để biên dịch và xây dựng mã nguồn firmware từ các kho lưu trữ firmware tương ứng. Sau đó, các tệp này được ký bởi nhóm OneKey trước khi được phát hành chính thức.

Bài viết này cung cấp một phương pháp tự xác minh, bằng cách so sánh các tệp checksum trước và sau khi nhóm chính thức thực hiện đa chữ ký (multi-sig), để xác minh tính nhất quán giữa các tệp firmware và mã nguồn mở.

Đối với các phương pháp về cách xác minh tính nhất quán của dữ liệu nguồn các tệp khác nhau bằng cách sử dụng hàm băm mật mã SHA-256 (so sánh Checksums), vui lòng tham khảo bài viết này.

Kho Lưu Trữ Firmware Mã Nguồn Mở

OneKey Pro

OneKey Classic 1S

OneKey Classic

OneKey Touch

OneKey Mini

Để tái tạo bản phát hành firmware của OneKey, vui lòng làm theo hướng dẫn video bên dưới

Quy Trình Phát Hành Firmware

Khi firmware tiêu chuẩn chính thức hoặc firmware Bluetooth sẵn sàng để phát hành, nhóm OneKey sẽ thực thi Action của kho lưu trữ tương ứng để biên dịch mã nguồn. Sau khi biên dịch thành công, các tệp sẽ được tải lên kho lưu trữ GitHub Artifacts, chờ nhóm hoàn tất quy trình đa chữ ký nội bộ trước khi đưa lên CDN của OneKey. Sau khi cập nhật tệp config.json, thông báo cập nhật sẽ được đẩy qua Ứng dụng OneKey và trang web cập nhật firmware OneKey, nhắc người dùng nâng cấp firmware của họ. Tham khảo sơ đồ bên dưới để biết quy trình cụ thể.

onekey github verifiy.png

Các Mục Tiêu

  1. Xác minh rằng "Tệp Firmware Đã Ký bởi Nhóm OneKey" có nguồn gốc từ "Tệp Firmware Đã Ký trước CI của GitHub" trong kho lưu trữ mã nguồn mở của OneKey.

  2. Xác minh tính nhất quán giữa "Tệp Firmware Đã Ký bởi Nhóm OneKey" và "Tệp Firmware Được Lưu trữ trên CDN Chính thức của OneKey."

Điều Kiện Tiên Quyết

Firmware Hệ Thống Firmware Bluetooth

✔ Tải xuống Tệp Firmware Đã Ký trước CI của GitHub (Chưa Ký)

  • Truy cập trang Phát hành firmware phần cứng chính thức của OneKey trên GitHub: https://github.com/OneKeyHQ/firmware/releases

  • Tìm phiên bản firmware bạn muốn xác minh và nhấp vào liên kết GitHub Action.

github action.png
  • Nhấp vào tên firmware trong Artifacts để tải xuống (yêu cầu đăng nhập GitHub).

2.png

✔ Tải xuống Tệp Firmware Đã Ký bởi Nhóm OneKey (Đã Ký)

  • Truy cập trang Phát hành firmware phần cứng chính thức của OneKey trên GitHub: https://github.com/OneKeyHQ/firmware/releases

  • Tìm phiên bản firmware bạn muốn xác minh.

  • Nhấp để tải xuống tệp bin trong phần Assets.

github release bin.png

✔ Tải xuống Tệp Firmware Được Lưu trữ trên CDN Chính thức của OneKey (Đã Ký)

  • Truy cập tệp CDN của OneKey: https://data.onekey.so/config.json

  • Tìm phiên bản firmware bạn muốn xác minh.

  • Sao chép liên kết trong trường "url".

  • Mở trong một cửa sổ trình duyệt mới để tự động tải xuống tệp bin.

3.png

✔ Tải xuống Tệp Firmware Bluetooth Đã Ký trước CI của GitHub (Chưa Ký)

pro-bluetooth-firmware-github-ci.png
  • Nhấp vào tên firmware trong Artifacts để tải xuống (yêu cầu đăng nhập GitHub).

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

✔ Tải xuống Tệp Firmware Bluetooth Đã Ký bởi Nhóm OneKey (Đã Ký)

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

✔ Tải xuống Tệp Firmware Bluetooth Được Lưu trữ trên CDN Chính thức của OneKey (Đã Ký)

  • Truy cập tệp CDN của OneKey: https://data.onekey.so/config.json

  • Tìm phiên bản firmware bạn muốn xác minh.

  • Sao chép liên kết trong trường "ble" - "webUpdate".

  • Mở trong một cửa sổ trình duyệt mới để tự động tải xuống tệp bin.

pro-ble-firmware-cdn.png

✔ Tải xuống và Cài đặt Python

Các Bước Thực Hiện

Dưới đây là các bước xác minh cho hai mục tiêu đã đặt trước đó:

Firmware Hệ Thống Firmware Bluetooth

Quy Trình Xác Minh với Firmware đã ký trước CI của GitHub (Hệ Thống)

  • Mở Terminal.

  • Chạy lệnh bên dưới (Tệp Firmware Đã Ký bởi Nhóm OneKey):

    • tail -c +1024 /path/to/(đường dẫn tệp) | shasum -a 256

  • Chạy lệnh bên dưới (Tệp Firmware Đã Ký trước CI của GitHub):

    • tail -c +1024 /path/to/(đường dẫn tệp) | shasum -a 256

  • So sánh các Checksums được tạo bởi hai lệnh. Nếu kết quả khớp, có thể xác nhận rằng "Tệp Firmware Đã Ký bởi Nhóm OneKey" có nguồn gốc từ "Tệp Firmware Đã Ký trước CI của GitHub" trong kho lưu trữ mã nguồn mở của OneKey.

7.png

Đối với firmware hệ thống, một kết quả chữ ký 1024 byte được thêm vào phiên bản CI của firmware, được xác minh bởi bộ nạp khởi động khi thiết bị khởi động.

Quy Trình Xác Minh với Tệp Firmware Được Lưu trữ trên CDN Chính thức của OneKey (Hệ Thống)

  • Mở Terminal.

  • Chạy lệnh bên dưới (Tệp Firmware Đã Ký bởi Nhóm OneKey):

    • shasum -a 256 (đường dẫn tệp)

  • Chạy lệnh bên dưới (Tệp Firmware Được Lưu trữ trên CDN Chính thức của OneKey):

    • shasum -a 256 (đường dẫn tệp)

  • So sánh các Checksums được tạo bởi hai lệnh. Nếu kết quả khớp, tính nhất quán của mã của hai tệp firmware được xác nhận.

6.png

Quy Trình Xác Minh với Firmware đã ký trước CI của GitHub (Bluetooth)

  • Tìm tệp ota.bin trong thư mục Firmware Bluetooth đã ký trước CI của GitHub mà bạn đã tải xuống.

  • Mở một terminal trong cùng thư mục với ota.bin.

  • Gọi Python với lệnh: python3

  • Chạy lệnh bên dưới để lấy checksum của firmware Bluetooth đã ký trước CI của GitHub.

    • 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
  • Chạy lệnh tương tự với Tệp Firmware Bluetooth Đã Ký bởi Nhóm OneKey.

    • Lưu ý: vui lòng thay đổi ota.bin trong lệnh thành tên của Tệp Firmware Bluetooth Đã Ký bởi Nhóm OneKey.

checksum-github-release.png
  • So sánh các Checksums được tạo bởi hai lệnh. Nếu kết quả khớp, có thể xác nhận rằng "Tệp Firmware Đã Ký bởi Nhóm OneKey" có nguồn gốc từ "Tệp Firmware Đã Ký trước CI của GitHub" trong kho lưu trữ mã nguồn mở của OneKey.

Quy Trình Xác Minh với Tệp Firmware Được Lưu trữ trên CDN Chính thức của OneKey (Bluetooth)

  • Mở một terminal trong cùng thư mục với Tệp Firmware Bluetooth Đã Ký bởi Nhóm OneKey.

  • Gọi Python với lệnh: python3

  • Sao chép lệnh bên dưới:

    • 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""")

  • Thay đổi ota.bin thành tên của Tệp Firmware Bluetooth Đã Ký bởi Nhóm OneKey mà bạn đã tải xuống.

  • Chạy lệnh để lấy checksum.

  • Lặp lại các bước trên với Tệp Firmware Bluetooth Được Lưu trữ trên CDN Chính thức của OneKey mà bạn đã tải xuống.

  • So sánh các Checksums được tạo bởi hai lệnh. Nếu kết quả khớp, tính nhất quán của mã của hai tệp firmware được xác nhận.

compare-ble-checksum.png
Nội dung này có giải đáp được câu hỏi của bạn không?