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
OneKey Pro
⚙ System-Firmware: github.com/OneKeyHQ/firmware-pro
Bluetooth-Firmware: github.com/OneKeyHQ/bluetooth-firmware-pro
OneKey Classic 1S
⚙ System-Firmware: github.com/OneKeyHQ/firmware-classic1s
Bluetooth-Firmware: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Classic
⚙ System-Firmware: github.com/OneKeyHQ/firmware/tree/bixin_dev
Bluetooth-Firmware: github.com/OneKeyHQ/bluetooth-firmware-classic
OneKey Touch
⚙ System-Firmware: github.com/OneKeyHQ/firmware (Branch: touch)
Bluetooth-Firmware: github.com/OneKeyHQ/bluetooth-firmware-touch
OneKey Mini
⚙ 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
System-Firmware Bluetooth-Firmware
✔ GitHub CI vor-signierte Firmware-Datei herunterladen (nicht signiert)
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).
✔ OneKey Team signierte Firmware-Datei herunterladen (signiert)
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.
✔ OneKey offiziell im CDN gespeicherte Firmware-Datei herunterladen (signiert)
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.
✔ GitHub CI vor-signierte Bluetooth-Firmware-Datei herunterladen (nicht signiert)
Navigieren Sie zur offiziellen OneKey-Bluetooth-Firmware-GitHub Veröffentlichung
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/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).
✔ OneKey Team signierte Bluetooth-Firmware-Datei herunterladen (signiert)
Navigieren Sie zur offiziellen OneKey-Bluetooth-Firmware-GitHub Veröffentlichung
OneKey Classic & Classic 1S: https://github.com/OneKeyHQ/bluetooth-firmware-classic/releases
Finden Sie die Firmware-Version, die Sie überprüfen möchten.
Klicken Sie, um die Binärdatei unter Assets herunterzuladen.
✔ OneKey offiziell im CDN gespeicherte Bluetooth-Firmware-Datei herunterladen (signiert)
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.
✔ Python herunterladen und installieren
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:
System-Firmware Bluetooth-Firmware
Überprüfungsprozess Von GitHub CI vor-signierten Firmware- Datei (System)
Ö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.
Überprüfungsprozess Von OneKey Team signierte Firmware-Datei (System)
Ö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.
Überprüfungsprozess Von GitHub CI vor-signierten Bluetooth-Firmware-Ordner (Bluetooth)
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.
Überprüfungsprozess Von OneKey Team signierte Firmware-Datei (Bluetooth)
Ö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.