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
⚙ Firmware Hệ Thống: github.com/OneKeyHQ/firmware-pro
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-pro
OneKey Classic 1S
⚙ Firmware Hệ Thống: github.com/OneKeyHQ/firmware-classic1s
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Classic
⚙ Firmware Hệ Thống: github.com/OneKeyHQ/firmware/tree/bixin_dev
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Touch
⚙ Firmware Hệ Thống: github.com/OneKeyHQ/firmware (nhánh: touch)
Firmware Bluetooth: github.com/OneKeyHQ/bluetooth-firmware-touch
OneKey Mini
⚙ Firmware Hệ Thống: github.com/OneKeyHQ/firmware/tree/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ể.
Các Mục Tiêu
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.
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.
Nhấp vào tên firmware trong Artifacts để tải xuống (yêu cầu đăng nhập GitHub).
✔ 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.
✔ 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.
✔ Tải xuống Tệp Firmware Bluetooth Đã Ký trước CI của GitHub (Chưa Ký)
Truy cập trang Phát hành firmware Bluetooth chính thức của OneKey trên GitHub
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/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.
Nhấp vào tên firmware trong Artifacts để tải xuống (yêu cầu đăng nhập GitHub).
✔ Tải xuống Tệp Firmware Bluetooth Đã Ký bởi Nhóm OneKey (Đã Ký)
Truy cập trang Phát hành firmware Bluetooth chính thức của OneKey trên GitHub
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/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.
✔ 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.
✔ Tải xuống và Cài đặt Python
Truy cập: https://www.python.org/downloads/
Tải xuống và cài đặt phiên bản Python mới nhất.
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.
Đố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.
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""")
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.
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.
