Die OneKey-Hardware-Wallet verfügt über vollständig offene Firmware. Sie können den offenen Quellcode der Firmware für die entsprechenden Produkte im GitHub-Repository von OneKey einsehen. Bevor die für die Serienproduktion vorgesehenen Firmware-Dateien offiziell veröffentlicht werden, verwendet das OneKey-Team die Build-Automatisierungstools von GitHub (GitHub CI), um den Quellcode der Firmware aus den jeweiligen Firmware-Repositories zu kompilieren und zu erstellen. Die Dateien werden dann vom OneKey-Team signiert, bevor sie offiziell veröffentlicht werden.
Dieser Artikel bietet eine Selbstverifizierungsmethode, bei der die Checksumme der Dateien vor und nach der Multi-Signatur des offiziellen Teams verglichen wird, um die Konsistenz zwischen den Firmware-Dateien und dem offenen Quellcode zu überprüfen.
Für Methoden zur Überprüfung der Konsistenz der Quelldaten verschiedener Dateien mithilfe der SHA-256-Kryptographiefunktion (Vergleich der Checksummen) siehe diesen Artikel.
Open-Source-Firmware-Repositories
- ⚙ System-Firmware: github.com/OneKeyHQ/firmware-pro
-
Bluetooth-Firmware: github.com/OneKeyHQ/bluetooth-firmware-pro
- ⚙ System-Firmware: github.com/OneKeyHQ/firmware-classic1s
-
Bluetooth-Firmware: github.com/OneKeyHQ/bluetooth-firmware-classic
- ⚙ System-Firmware: github.com/OneKeyHQ/firmware/tree/bixin_dev
-
Bluetooth-Firmware: github.com/OneKeyHQ/bluetooth-firmware-classic
- ⚙ System-Firmware: github.com/OneKeyHQ/firmware (Branch: touch)
-
Bluetooth-Firmware: github.com/OneKeyHQ/bluetooth-firmware-touch
- ⚙ System-Firmware: github.com/OneKeyHQ/firmware/tree/mini
Firmware-Release-Prozess
Wenn die offizielle Standard-Firmware oder die Bluetooth-Firmware zur Veröffentlichung bereit ist, führt das OneKey-Team die entsprechende Aktion im Repository aus, um den Quellcode zu kompilieren. Nach erfolgreicher Kompilierung werden die Dateien im GitHub-Artefaktspeicher hochgeladen und warten auf den Abschluss der internen Multi-Signatur des Teams, bevor sie in das CDN von OneKey gestellt werden. Nach der Aktualisierung der config.json Datei werden Aktualisierungsbenachrichtigungen über die OneKey App und die OneKey Firmware-Update-Website gesendet, um die Benutzer aufzufordern, ihre Firmware zu aktualisieren. Siehe das Diagramm unten für den spezifischen Prozess.
Ziele
- Überprüfen, dass die "Von OneKey Team signierte Firmware-Datei" aus der "Von GitHub CI vor-signierten Firmware-Datei" im OneKey-Open-Source-Repository abgeleitet ist.
- Überprüfen der Konsistenz zwischen der "Von OneKey Team signierten Firmware-Datei" und der "Von OneKey offiziell im CDN gespeicherten Firmware-Datei."
Voraussetzungen
- Navigieren Sie zur offiziellen OneKey-Hardware-Firmware-GitHub Veröffentlichung: https://github.com/OneKeyHQ/firmware/releases
- Finden Sie die Firmware-Version, die Sie überprüfen möchten, und klicken Sie auf den GitHub-Aktionslink.
- Klicken Sie auf den Firmware-Namen unter Artefakte, um herunterzuladen (ein Login bei GitHub ist erforderlich).
- Navigieren Sie zur offiziellen OneKey-Hardware-Firmware-GitHub Veröffentlichung: https://github.com/OneKeyHQ/firmware/releases
- Finden Sie die Firmware-Version, die Sie überprüfen möchten.
- Klicken Sie, um die Binärdatei unter Assets herunterzuladen.
- Navigieren Sie zur OneKey CDN-Datei: https://data.onekey.so/config.json
- Finden Sie die Firmware-Version, die Sie überprüfen möchten.
- Kopieren Sie den Link im Feld "url".
- Öffnen Sie ihn in einem neuen Browserfenster, um die Binärdatei automatisch herunterzuladen.
- Navigieren Sie zur offiziellen OneKey-Bluetooth-Firmware-GitHub Veröffentlichung
- OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
- OneKey Pro: https://github.com/OneKeyHQ/bluetooth-firmware-pro/releases
- OneKey Touch: https://github.com/OneKeyHQ/bluetooth-firmware-touch/releases
- Finden Sie die Firmware-Version, die Sie überprüfen möchten, und klicken Sie auf den GitHub-Aktionslink.
- Klicken Sie auf den Firmware-Namen unter Artefakte, um herunterzuladen (ein Login bei GitHub ist erforderlich).
- Navigieren Sie zur offiziellen OneKey-Bluetooth-Firmware-GitHub Veröffentlichung
- OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
- OneKey Pro: https://github.com/OneKeyHQ/bluetooth-firmware-pro/releases
- OneKey Touch: https://github.com/OneKeyHQ/bluetooth-firmware-touch/releases
- Finden Sie die Firmware-Version, die Sie überprüfen möchten.
- Klicken Sie, um die Binärdatei unter Assets herunterzuladen.
- Navigieren Sie zur OneKey CDN-Datei: https://data.onekey.so/config.json
- Finden Sie die Firmware-Version, die Sie überprüfen möchten.
- Kopieren Sie den Link im Feld "ble" - "webUpdate".
- Öffnen Sie ihn in einem neuen Browserfenster, um die Binärdatei automatisch herunterzuladen.
- Navigieren Sie zu: https://www.python.org/downloads/
- Laden Sie die neueste Version von Python herunter und installieren Sie sie.
Schritte
Unten sind die Prüfungs Schritte für die beiden zuvor festgelegten Ziele:
- Öffnen Sie das Terminal.
- Führen Sie den folgenden Befehl aus (OneKey Team signierte Firmware-Datei):
tail -c +1024 /path/to/(dateipfad) | shasum -a 256
- Führen Sie den folgenden Befehl aus (GitHub CI vor-signierte Firmware Datei):
tail -c +1024 /path/to/(dateipfad) | shasum -a 256
- Vergleichen Sie die Checksummen, die von den beiden Befehlen generiert wurden. Wenn die Ergebnisse übereinstimmen, kann bestätigt werden, dass die "Von OneKey Team signierte Firmware-Datei" aus der "Von GitHub CI vor-signierten Firmware- Datei" im OneKey-Open-Source-Repository stammt.
Für die Systemfirmware wird ein 1024-Byte-Signaturergebnis zur CI-Version der Firmware hinzugefügt, das beim Start des Geräts vom Bootloader verifiziert wird.
- Öffnen Sie das Terminal.
- Führen Sie den folgenden Befehl aus (OneKey Team signierte Firmware-Datei):
shasum -a 256 (dateipfad)
- Führen Sie den folgenden Befehl aus (Von OneKey offiziell im CDN gespeicherte Firmware- Datei):
shasum -a 256 (dateipfad)
- Vergleichen Sie die Checksummen, die von den beiden Befehlen generiert wurden. Wenn die Ergebnisse übereinstimmen, wird die Konsistenz des Codes der beiden Firmware-Dateien bestätigt.
- Finden Sie die ota.bin Datei in Ihrem heruntergeladenen GitHub CI vor-signierten Bluetooth-Firmware-Ordner.
- Öffnen Sie ein Terminal im selben Ordner mit ota.bin.
- Rufen Sie Python mit dem Befehl: python3 auf.
- Führen Sie den folgenden Befehl aus, um die Checksumme der GitHub CI vor-signierten Bluetooth-Firmware zu erhalten.
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""")
- Führen Sie denselben Befehl mit der OneKey Team signierten Bluetooth-Firmware-Datei aus.
- Hinweis: Bitte ändern Sie ota.bin im Befehl in den Namen der OneKey Team signierten Bluetooth-Firmware-Datei.
- Vergleichen Sie die Checksummen, die von den beiden Befehlen generiert wurden. Wenn die Ergebnisse übereinstimmen, kann bestätigt werden, dass die "Von OneKey Team signierte Firmware-Datei" aus der "Von GitHub CI vor-signierten Firmware- Datei" im OneKey-Open-Source-Repository stammt.
- Öffnen Sie ein Terminal im selben Ordner mit der OneKey Team signierten Bluetooth-Firmware-Datei.
- Rufen Sie Python mit dem Befehl: python3 auf.
- Kopieren Sie den folgenden Befehl:
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""")
- Ändern Sie ota.bin in den Namen Ihrer heruntergeladenen OneKey Team signierten Bluetooth-Firmware-Datei.
- Führen Sie den Befehl aus, um die Checksumme zu erhalten.
- Wiederholen Sie die obigen Schritte mit Ihrer heruntergeladenen OneKey offiziell im CDN gespeicherten Bluetooth-Firmware-Datei.
- Vergleichen Sie die Checksummen, die von den beiden Befehlen generiert wurden. Wenn die Ergebnisse übereinstimmen, wird die Konsistenz des Codes der beiden Firmware-Dateien bestätigt.