OneKey 하드웨어 지갑은 완전히 오픈 소스 펌웨어를 특징으로 합니다. OneKey의 GitHub 저장소에서 관련 제품의 오픈 소스 펌웨어 코드를 확인할 수 있습니다. 대량 생산을 위한 펌웨어 파일이 공식적으로 출시되기 전에, OneKey 팀은 GitHub의 빌드 자동화 도구(GitHub CI)를 사용하여 각 펌웨어 저장소에서 펌웨어 소스 코드를 컴파일하고 빌드합니다. 그런 다음 OneKey 팀은 파일에 서명한 후 공식적으로 출시합니다.
이 기사에서는 체크섬(Checksums)을 비교하여 공식 팀의 다중 서명 전후의 파일을 비교하는 방법을 통해 펌웨어 파일과 오픈 소스 코드 간의 일관성을 검증하는 방법을 제공합니다.
SHA-256 암호화 해시 함수(체크섬 비교)를 사용하여 다양한 파일의 소스 데이터를 검증하는 방법에 대한 자세한 내용은 이 기사를 참조하십시오.
오픈 소스 펌웨어 저장소
- ⚙ 시스템 펌웨어: github.com/OneKeyHQ/firmware (branch: touch)
- 블루투스 펌웨어: github.com/OneKeyHQ/bluetooth-firmware-touch
- ⚙ 시스템 펌웨어: github.com/OneKeyHQ/firmware/tree/mini
펌웨어 출시 프로세스
공식 표준 펌웨어 또는 블루투스 펌웨어가 출시 준비가 되었을 때, OneKey 팀은 해당 저장소의 액션을 실행하여 오픈 소스 코드를 컴파일합니다. 컴파일이 성공하면 파일은 GitHub 아티팩트 저장소에 업로드되어, 팀의 내부 다중 서명이 완료될 때까지 대기합니다. 그런 다음 OneKey CDN에 파일이 게시되며, config.json 파일 업데이트 후 OneKey 앱과 OneKey 펌웨어 업데이트 웹사이트를 통해 업데이트 알림이 사용자에게 전송됩니다. 아래 다이어그램에서 특정 프로세스를 참조하십시오.
목표
- "OneKey 팀 서명된 펌웨어 파일"이 OneKey 오픈 소스 저장소의 "GitHub CI 사전 서명된 펌웨어 파일"에서 파생된 것임을 확인합니다.
- "OneKey 팀 서명된 펌웨어 파일"과 "OneKey 공식 CDN 저장 펌웨어 파일" 간의 일관성을 확인합니다.
전제 조건
전제 조건
- 공식 OneKey 하드웨어 펌웨어 GitHub 릴리스: https://github.com/OneKeyHQ/firmware/releases 로 이동합니다.
- 검증하려는 펌웨어 버전을 찾고 GitHub 액션 링크를 클릭합니다.
- 아티팩트 아래에 있는 펌웨어 이름을 클릭하여 다운로드합니다(로그인 필요).
- 공식 OneKey 하드웨어 펌웨어 GitHub 릴리스: https://github.com/OneKeyHQ/firmware/releases 로 이동합니다.
- 검증하려는 펌웨어 버전을 찾습니다.
- Assets 아래의 bin 파일을 클릭하여 다운로드합니다.
- OneKey CDN 파일: https://data.onekey.so/config.json 로 이동합니다.
- 검증하려는 펌웨어 버전을 찾습니다.
- "url" 필드 아래의 링크를 복사합니다.
- 새 브라우저 창에서 열어 bin 파일을 자동으로 다운로드합니다.
- 공식 OneKey 블루투스 펌웨어 GitHub 릴리스로 이동합니다.
- 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
- 검증하려는 펌웨어 버전을 찾고 GitHub 액션 링크를 클릭합니다.
- 아티팩트 아래에 있는 펌웨어 이름을 클릭하여 다운로드합니다(로그인 필요).
- 공식 OneKey 블루투스 펌웨어 GitHub 릴리스로 이동합니다.
- 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
- 검증하려는 펌웨어 버전을 찾습니다.
- Assets 아래의 bin 파일을 클릭하여 다운로드합니다.
- OneKey CDN 파일: https://data.onekey.so/config.json 로 이동합니다.
- 검증하려는 펌웨어 버전을 찾습니다.
- "ble" - "webUpdate" 필드 아래의 링크를 복사합니다.
- 새 브라우저 창에서 열어 bin 파일을 자동으로 다운로드합니다.
- 다음 링크로 이동합니다: https://www.python.org/downloads/
- 최신 버전의 Python을 다운로드하여 설치합니다.
단계
아래는 이전에 설정한 두 목표를 검증하는 단계입니다:
- 터미널을 엽니다.
- 아래 명령어를 실행합니다 (OneKey 팀 서명된 펌웨어 파일):
tail -c +1024 /path/to/(file path) | shasum -a 256
- 아래 명령어를 실행합니다 (GitHub CI 사전 서명된 펌웨어 파일):
tail -c +1024 /path/to/(file path) | shasum -a 256
- 두 명령어로 생성된 체크섬을 비교합니다. 결과가 일치하면 "OneKey 팀 서명된 펌웨어 파일"이 OneKey 오픈 소스 저장소의 "GitHub CI 사전 서명된 펌웨어 파일"에서 파생된 것임을 확인할 수 있습니다.
시스템 펌웨어의 경우 CI 버전의 펌웨어에 1024 바이트 서명 결과가 추가되며, 이는 장치 시작 시 부트로더에 의해 검증됩니다.
- 터미널을 엽니다.
- 아래 명령어를 실행합니다 (OneKey 팀 서명된 펌웨어 파일):
shasum -a 256 (file path)
- 아래 명령어를 실행합니다 (OneKey 공식 CDN 저장 펌웨어 파일):
shasum -a 256 (file path)
- 두 명령어로 생성된 체크섬을 비교합니다. 결과가 일치하면 두 펌웨어 파일의 코드 일관성이 확인됩니다.
- 다운로드한 GitHub CI 사전 서명된 블루투스 펌웨어 폴더에서 ota.bin 파일을 찾습니다.
- ota.bin 과 같은 폴더에서 터미널을 엽니다.
- Python으로 명령어를 호출합니다:
python3
- 아래 명령어를 실행하여 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""")
- OneKey 팀 서명된 블루투스 펌웨어 파일로 동일한 명령어를 실행합니다.
- 참고: 명령어의 ota.bin을 OneKey 팀 서명된 블루투스 펌웨어 파일 이름으로 변경하세요.
- 두 명령어로 생성된 체크섬을 비교합니다. 결과가 일치하면 "OneKey 팀 서명된 펌웨어 파일"이 OneKey 오픈 소스 저장소의 "GitHub CI 사전 서명된 펌웨어 파일"에서 파생된 것임을 확인할 수 있습니다.
- OneKey 팀 서명된 블루투스 펌웨어 파일과 같은 폴더에서 터미널을 엽니다.
- Python으로 명령어를 호출합니다:
python3
- 아래 명령어를 복사합니다:
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""")
- ota.bin 을 다운로드한 OneKey 팀 서명된 블루투스 펌웨어 파일 이름으로 변경합니다.
- 명령을 실행하여 체크섬을 얻습니다.
- 다운로드한 OneKey 공식 CDN 저장 블루투스 펌웨어 파일에서도 위와 동일한 단계를 반복합니다.
- 두 명령어로 생성된 체크섬을 비교합니다. 결과가 일치하면 두 펌웨어 파일의 코드 일관성이 확인됩니다.