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

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

Đã cập nhật ngày hôm qua

Ví phần cứng OneKey có firmware hoàn toàn mã nguồn mở. Bạn có thể xem mã firmware mã 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 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 xây dựng 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. Các tệp sau đó được nhóm OneKey ký 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 checksum của các tệp trước và sau khi nhóm chính thức thực hiện ký đa chữ ký, để xác minh tính nhất quán giữa các tệp firmware và mã nguồn mở.

Để biết 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), hãy 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, hãy 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 bộ nhớ GitHub Artifacts, chờ nhóm hoàn thành quy trình ký đa chữ ký nội bộ trước khi được đặt trê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

Mục tiêu

  1. Xác minh rằng "Tệp firmware được ký bởi nhóm OneKey" có nguồn gốc từ "Tệp firmware được ký trước bởi GitHub CI" 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 được 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 được ký trước bởi GitHub CI (Chưa ký)

  • Truy cập vào bản phát hành Firmware phần cứng OneKey chính thức 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 bagian Artifacts để tải xuống (yêu cầu đăng nhập GitHub).

2.png

✔ Tải xuống Tệp Firmware được nhóm OneKey ký (Đã ký)

  • Truy cập vào bản phát hành Firmware phần cứng OneKey chính thức 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 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 được ký trước bởi GitHub CI (Chưa ký)

pro-bluetooth-firmware-github-ci.png
  • Nhấp vào tên firmware trong phần 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 được Nhóm OneKey ký (Đã 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 vào 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 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 được ký trước bởi GitHub CI (Hệ thống)

  • Mở Terminal.

  • Chạy lệnh bên dưới (Tệp firmware được nhóm OneKey ký):

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

  • Chạy lệnh bên dưới (Tệp firmware được ký trước bởi GitHub CI):

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

  • So sánh 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 được nhóm OneKey ký" có nguồn gốc từ "Tệp firmware được ký trước bởi GitHub CI" trong kho lưu trữ mã nguồn mở của OneKey.

7.png

Đối với firmware hệ thống, một chữ ký kết quả 1024 byte được thêm vào phiên bản CI của firmware, được xác minh bởi bootloader 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 được nhóm OneKey ký):

    • 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 Checksums được tạo bởi hai lệnh. Nếu kết quả khớp, tính nhất quán mã của hai tệp firmware được xác nhận.

6.png

Quy trình xác minh với firmware được ký trước bởi GitHub CI (Bluetooth)

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

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

  • Gọi Python bằng lệnh: python3

  • Chạy lệnh bên dưới để lấy checksum của Firmware Bluetooth được ký trước bởi 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
  • Chạy cùng lệnh với Tệp Firmware Bluetooth được Nhóm OneKey ký.

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

checksum-github-release.png
  • So sánh 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 được nhóm OneKey ký" có nguồn gốc từ "Tệp firmware được ký trước bởi GitHub CI" 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 được Nhóm OneKey ký.

  • Gọi Python bằng 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 Tệp Firmware Bluetooth được Nhóm OneKey ký đã tải xuống của bạn.

  • 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 đã tải xuống của bạn.

  • So sánh Checksums được tạo bởi hai lệnh. Nếu kết quả khớp, tính nhất quán 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?