ESP32 개발 보드를 사용하여 나만의 Jade 서명자를 만드세요.

이 기사는 기계로 번역되었습니다
원문 표시

저자:익명

이 문서에서는 Jade-DIY 하드웨어 서명을 생성하기 위해 Windows 컴퓨터에서 ESP32 개발 보드용 펌웨어를 굽는 방법을 소개합니다.

Jade-DIY-T-디스플레이

소개: DIY 옥

Blockstream이 출시한 Jade 하드웨어 서명자와 관련하여 Mi Zeng이 자세한 리뷰를 제공했습니다. 이 리뷰에서는 Jade 하드웨어 서명자의 보안 모델과 일부 주요 보안 기능을 소개합니다.

Jade의 펌웨어는 완전한 오픈 소스이기 때문에 Jade 정식 버전(이하 "Jade 공식 버전", "Jade-DIY"라 칭함)과 동일한 하드웨어를 기반으로 동일한 기능을 가진 하드웨어 서명자를 생성할 수 있습니다. 각각).

테스트 후 우리는 일부 Jade-DIY가 기능적으로는 Jade의 공식 버전과 동일하지 않지만(이유 중 하나는 아래에서 설명합니다: 하드웨어 기반) 보안 기능 측면에서 Jade-DIY는 공식 버전과 동일하다는 것을 발견했습니다. 버전은 동일합니다. Jade-DIY는 Jade 공식 버전의 모든 보안 기능(예: "가상 보안 칩", 자동 삭제 PIN 코드)을 갖추고 있습니다. 상당히 저렴한 하드웨어를 사용해 서명자를 만들 수 있기 때문에 Jade-DIY는 큰 매력을 선사합니다.

더욱이 Jade-DIY는 기본 기능 측면에서 매우 견고하며 오늘날 시장에 나와 있는 주류 서명 기계보다 결코 열등하지 않습니다.

하드웨어 선택

Jade의 GitHub 저장소 에는 Jade-DIY 서명자로 만들 수 있는 하드웨어를 소개하는 전용 페이지가 있습니다. 독자가 주의해야 할 두 가지 측면이 있습니다. (1) 이 페이지 분류의 기초이기도 한 카메라가 장착되어 있는지 여부 (2) 하드웨어 자체의 USB VendorID 및 ProductID가 일치하는지 여부 Jade의 공식 버전.

후자는 Jade-DIY를 생성하기 위해 USB 연결을 사용할 때 소프트웨어 지갑이 이를 Jade로 인식할지 여부를 결정합니다. 그렇지 않으면 사용하기가 더 번거로울 것입니다. 그러나 이러한 하드웨어는 기본적으로 Bluetooth를 지원하므로 언제든지 Bluetooth를 사용하여 서명자와 연결할 수 있습니다(모바일 Green Bitcoin Wallet 과 같이 소프트웨어 서명자가 지원하는 경우). 또한 카메라가 장착된 하드웨어를 사용하기로 선택하면 항상 Air-gapped 상호 작용(주로 QR 코드 스캔)을 사용할 수 있으므로 더 이상 이 문제에 대해 걱정할 필요가 없습니다.

이 튜토리얼은 카메라가 없는 하드웨어에만 적용됩니다 . 이러한 하드웨어 중 USB VendorID 및 ProductID는 Jade의 공식 소매 버전과 일치합니다(브랜드 이름은 공백 앞에 있고 모델은 공백 뒤에 있음).

  • LILYGO T-디스플레이
  • M5Stack 기본 코어
  • M5스택 파이어

저자는 경제적인 이유로 T-Display를 선택했습니다. 작가 구입 당시 가격 자체가 65위안밖에 되지 않았다. 독자 여러분께서는 구매 시 T-Display S3와 혼동하지 않도록 주의하시기 바랍니다. 저자는 Q125라는 버전을 구입했는데, 사용상의 편의를 위해 별도의 케이스(12위안)를 구입할 수 있습니다. 자체 포탄을 갖춘 K164 버전도 성공적으로 생산될 수 있다고 한다 .

다음은 T-디스플레이를 예로 들어 설명합니다. 다른 두 하드웨어는 T-Display와 동일한 칩을 사용하므로 깜박이는 프로세스가 비슷합니다.

하드웨어 연결

T-Display의 USB 커넥터는 Type-C이며, 독자들은 Type-C USB 케이블을 별도로 준비해야 합니다. T-Display를 연결한 후 정상적으로 시작되는지 관찰해 보세요. 정상적인 상황에서는 먼저 "LILYGO" 아이콘이 표시되고 "SD 카드 마운트 실패"라는 경고 메시지가 나타납니다.

그런 다음 Windows "장치 관리자"를 열고 "포트(COM 및 LPT)" 항목 아래에 "USB-Enhanced SERIAL CH9102(COM3)" 항목이 있는지 확인합니다. 그렇지 않다면 연결이 정상적이지 않다는 의미이므로 드라이버를 설치해야 합니다. 드라이버를 다운로드하여 설치한 후 다시 연결해 보세요.

드라이버를 설치한 후에도 여전히 연결이 되지 않는다면 USB 케이블을 바꿔보세요. (일부 케이블은 전원 공급 기능만 있고 데이터 전송 기능은 없습니다.)

옥-DIY-1

위에서 언급한 두 개의 M5Stack 하드웨어는 T-Display와 동일한 USBT 칩을 사용하므로 동일한 방식으로 연결을 확인할 수 있습니다.

개발 도구 설치

ESP-IDF 웹사이트 에서 개발 도구를 다운로드하려면 "ESP-IDF v5.2.2 - 오프라인 설치 프로그램"을 다운로드하세요. 설치 프로그램을 연 후 설치 콘텐츠를 선택하는 페이지에서 다음을 수행해야 합니다. (1) "Powershell Support"를 설치합니다. (2) "Chip Targets"에서 최소한 "ESP32" 및 "ESP32-S3"을 설치합니다. (첫 번째 항목 "Framework"와 두 번째 항목 "ESP-IDF 5.2"는 생략하면 안 됩니다.)

옥-DIY-2

설치 후 새 PowerShell 창의 메뉴 표시줄에서 "+" 기호를 클릭하고 "ESP-IDF 5.2"를 선택하여 ESP-IDF 환경을 열어보세요. PowerShell 창이 그림과 같지 않으면 다른 방법(예: 시작 메뉴)을 사용해 보십시오.

옥-DIY-3

Jade 소스 코드 다운로드

먼저 Git 소프트웨어가 설치되어 있는지 확인하세요. 오픈 소스 소프트웨어의 소스 코드를 다운로드하는 데 사용할 수 있는 버전 관리 도구입니다.

선택한 폴더에서 PowerShell 창을 열고 다음 명령을 입력하고 실행합니다.

 git clone --recursive https://github.com/Blockstream/Jade.git

이 명령줄은 새로운 "Jade" 폴더를 생성하고 Jade 소스 코드를 다운로드합니다.

다음은 이 튜토리얼의 가장 중요한 장입니다.

펌웨어 컴파일 및 굽기

펌웨어를 구울 때 "보안 부팅"을 활성화할지 여부를 선택할 수 있습니다. 보안 부팅의 기능은 공개 키를 장치에 삽입하고 구운 펌웨어에 공개 키의 서명이 있도록 요구하는 것입니다. 구운 펌웨어에 유효한 서명이 없으면 장치는 부팅을 거부합니다. 이는 누군가가 귀하의 장치에 악성 코드가 포함된 펌웨어를 주입하는 것을 방지하는 유용한 보안 조치입니다. Jade 소스 코드 저장소의 DIY 가이드에서도 보안 부팅 기능을 활성화할 것을 권장합니다. 따라서 이 튜토리얼에서는 보안 부팅 기능을 활성화할 것을 강력히 권장합니다.

아래의 "실험적 굽기" 섹션에서는 이름에서 알 수 있듯이 보안 부팅을 활성화하지 않고 굽는 과정을 소개합니다. 이는 주로 독자들이 플래싱 과정에 익숙해지도록 하기 위한 것입니다. "보안 굽기"는 보안 부팅을 활성화하는 굽기 프로세스를 소개합니다.

여기에 설명된 보안 부팅 활성화 작업은 되돌릴 수 없으며, 활성화되면 취소할 수 없습니다. 즉, 나중에 장치의 펌웨어를 업데이트하려면 새 펌웨어를 플래시하기 전에 동일한 개인 키를 사용하여 새 펌웨어에 서명해야 합니다. 서명된 펌웨어의 개인 키를 분실하면 더 이상 이 장치의 펌웨어를 업데이트할 수 없습니다.

미리 준비하세요

CMD의 Python3

굽기를 시작하기 전에 컴퓨터의 "명령 프롬프트(CMD)"를 열고 python3 입력한 후 Enter를 눌러 실행하세요. 올바르게 인식되고 실행되면 창에 다음과 같은 정보가 표시됩니다.

 Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>>

프로그램이 Windows 스토어를 열어 응답하는 경우 CMD가 "python3" 명령을 받을 때 해당 Python 버전을 올바르게 식별하고 실행할 수 없다는 의미이며, 이로 인해 후속 컴파일에서 오류가 발생합니다. 이 오류는 수정되어야 합니다. 이상하지만 효과적인 방법은 Python 폴더에 "python.exe"를 복사하여 동일한 폴더에 붙여넣은 다음 복사본 이름을 "python3.exe"로 바꾸는 것입니다.

이 알림은 작성자가 사용하는 두 대의 Windows 컴퓨터(시스템은 각각 Win10 및 Win11)에서 발생하여 이로 인한 컴파일 오류가 발생했기 때문에 제공됩니다.

ESP-IDF 실행 환경의 실행 폴더

임의의 폴더에서 "ESP-IDF 5.2" 실행 환경을 엽니다. 열면 ESP-IDF 기능을 사용할 수 있는지 확인하기 위해 일련의 환경 설정이 자동으로 실행됩니다. 성공적으로 실행되면 일련의 정보가 출력되며 그 끝은 다음과 같습니다.

 Go to the project directory and run: idf.py build

ESP-IDF의 초기 실행 환경은 설치 폴더입니다(예: ~\Espressif\frameworks\esp-idf-v5.2.2 . "Jade" 폴더로 전환하려면 cd 명령을 사용해야 합니다. "Jade" 폴더의 주소가 D:\esp\Jade 가정하고 ESP-IDF 실행 환경에 다음을 입력합니다.

 cd D:\esp\Jade

궁극적으로 런타임 환경의 시작 부분은 PS D:\esp\Jade> 와 같아야 합니다.

OpenSSL

펌웨어 서명을 위해 충분히 안전한 개인 키를 생성하려면 OpenSSL 소프트웨어를 설치하십시오.

실험적인 연소

"Jade" 폴더에 있는 ESP-IDF 런타임 환경에 다음 명령을 입력합니다.

 cp configs/sdkconfig_display_ttgo_tdisplay.defaults sdkconfig.defaults

이 명령줄의 기능은 "configs" 폴더에서 "Jade" 폴더로 구성 파일을 복사하는 것입니다. 복사해야 하는 구성 파일은 물론 장치에 따라 다릅니다. 여기서 제공되는 구성 파일은 T-Display의 구성 파일입니다.

사용 중인 하드웨어가 "M5Stack Basic Core"인 경우 명령을 다음으로 변경해야 합니다.

 cp configs/sdkconfig_display_m5blackgray.defaults sdkconfig.defaults

그런 다음 다음 명령을 실행하십시오.

 idf.py buildidf.py flash monitor

명령의 첫 번째 줄은 폴더의 소스 코드를 T-Display에 구울 수 있는 펌웨어로 컴파일하고, 두 번째 줄은 실제로 이를 작성하고 플래시가 성공한 후 T-Display를 다시 시작합니다.

위는 실험적인 플래싱 과정입니다. 가지고 놀면서 Jade-DIY의 기능을 보실 수 있습니다.

깜박이는 과정에서 오류가 발생하여 T-Display가 정상적으로 켜지지 않거나 컴퓨터에 연결되지 않는 경우, 이 페이지에 설명된 작업을 시도할 수 있습니다. 먼저 케이블을 분리한 다음 화면의 3개 버튼을 길게 누르세요. 동시에 동체를 다시 시작한 다음 컴퓨터에 연결을 다시 시작하십시오.

안전한 연소

구성 파일 생성

"Jade" 폴더에 있는 ESP-IDF 런타임 환경에 다음 명령을 입력합니다.

 ./tools/mkdefaults.py ./configs/sdkconfig_display_ttgo_tdisplay.defaults NDEBUG SECURE

실행 후 "Jade" 폴더에 sdkconfig , sdkconfig.defaults , sdkconfig.defaults.orig 3개의 파일이 있는지 확인하세요.

"메모장"을 사용하여 sdkconfig.defaults 파일을 열고 다음 줄을 찾으세요.

 CONFIG_SECURE_BOOT=yCONFIG_ESP32_REV_MIN_3=y

해당 라인이 존재하지 않거나, 위의 3개 파일이 존재하지 않는 경우, 위 명령어를 다시 실행해 주세요.

서명된 펌웨어에 대한 개인 키 생성

그런 다음 ESP-IDF 런타임 환경에서 다음 명령을 실행하고 OpenSSL 소프트웨어를 사용하여 펌웨어 서명을 위한 개인 키를 생성합니다.

 openssl genrsa -out ../jade-diy-v2.pem 3072

이 줄은 펌웨어 서명에 사용될 "Jade" 폴더의 상위 폴더에 jade-diy-v2.pem 이라는 개인 키를 생성합니다.

다른 파일 이름을 사용하거나 다른 폴더를 지정할 수 있습니다. 하지만 이를 위해서는 다시 돌아가 sdkconfig.defaults 파일의 CONFIG_SECURE_BOOT_SIGNING_KEY= 줄에서 상대 주소를 수정해야 합니다. 편의성과 보안의 관점에서 위 명령에 따라 개인 키를 생성할 수 있습니다. 굽기를 완료한 후 나중에 펌웨어를 업그레이드해야 할 경우 개인 키를 상대적으로 숨겨진 다른 장소로 옮기십시오. 원래 위치로 돌아가서 펌웨어에 서명하고 굽습니다.

부트로더 및 펌웨어 생성

ESP-IDF 런타임 환경에서 다음 명령을 실행합니다.

 idf.py bootloaderidf.py build

첫 번째 줄은 부트로더를 생성합니다. 이 프로그램은 Secure Boot 기능을 수행합니다. 두 번째 줄은 실제 기능을 수행하는 펌웨어를 생성합니다.

명령의 첫 번째 줄을 실행할 때 SDKCONFIG_DEFAULTS '~/Jade/sdkconfig.defaults.tmp' does not exist 때문에 프로그램이 성공적으로 실행되지 않을 수 있습니다. 이때 필요한 sdkconfig.defaults.tmp 파일을 생성하려면 위의 " 구성 파일 생성 " 섹션에 있는 명령만 다시 실행하면 되는 경우가 많습니다.

부트로더 작성 중

보안 부팅을 활성화한 후에는 ESP-IDF가 더 이상 부트로더를 자동으로 플래시하지 않으므로 수동으로 플래시해야 합니다.

ESP-IDF 런타임 환경에서 다음 명령을 실행하세요.

 esptool.py write_flash --erase-all 0x1000 ./build/bootloader/bootloader.bin

여기서 --erase-all 플래시 메모리의 모든 내용을 지우는 것을 의미합니다(이전에 실험적으로 굽기를 시도한 경우 이 태그가 필요할 수 있음). 다음 0x1000 플래시 메모리가 기록되는 위치를 나타냅니다. 작성할 부트로더의 파일 위치입니다.

적절한 쓰기 위치는 장치마다 다를 수 있습니다. T-Display를 사용하지 않는 경우 idf.py bootloader 명령을 실행하는 동안 화면에 나타나는 내용을 주의 깊게 읽으십시오. Secure boot enabled... (보안 부팅이 활성화되어 부팅 프로그램이 자동으로 구워지지 않습니다.) 다음은 python.exeesptool.py 단어를 포함하여 실행할 수 있는 명령 줄입니다. 이 명령줄을 복사하여 위 명령줄을 바꾸거나, 이 명령줄에서 플래시 메모리 주소를 나타내는 0x 로 시작하는 문자를 찾아 위 명령에서 0x1000 바꾸고 실행할 수 있습니다.

이 명령을 실행할 수 없으면 esptool 올바르게 설치하지 않았을 수 있습니다. pip install esptool 실행하여 문제를 해결할 수 있습니다.

펌웨어 쓰기

ESP-IDF 런타임 환경에서 다음 명령을 실행합니다.

 idf.py flashidf.py monitor

두 번째 줄 실행 시 장시간 실행해도 끝나지 않을 경우 키보드의 "Ctrl"과 "]" 키를 동시에 눌러 자동으로 종료할 수 있습니다. T-Display(현재는 "Jade-DIY"로 칭해야 함)가 정상적으로 시작되는지 확인해보세요. 기기 상단에 있는 재설정 버튼을 눌러보세요.

안전하게 굽기 완료!

펌웨어 업데이트

"Jade" 폴더 아래 ESP-IDF 실행 환경에서 Jade-DIY를 연결하고 python jade_ota.py --noagent 실행하여 펌웨어를 업데이트합니다. 이 프로세스에는 일부 Python 종속성 설치가 필요할 수 있습니다. pip install 사용하여 문제를 해결하세요.

현재 T-Display에 사용 가능한 최신 펌웨어 버전은 1.0.31 로, Jade의 공식 펌웨어 버전보다 뒤쳐져 있습니다.

운영안내

  • T-Display 본체에는 3개의 버튼이 있습니다. Jade-DIY를 작동할 때 동체 상단의 버튼은 "재설정" 버튼입니다. 선택을 확인할 때 화면에서 커서를 이동하려면 동체에 있는 두 개의 버튼을 동시에 누르세요. .
  • Jade-DIY("Setup Jade")를 초기화할 때 Jade-DIY에서 6자리 숫자 PIN 코드를 설정하라는 메시지가 표시됩니다. 이 PIN은 보안에 매우 중요합니다. 그러나 Jade-DIY를 잠금 해제하고 사용하려면 먼저 적합한 소프트웨어 지갑을 사용하여 Jade-DIY를 활성화해야 PIN 코드를 입력하고 잠금을 해제할 수 있습니다.
    • 이러한 소프트웨어 지갑에는 데스크톱: Sparrow Wallet , Electrum Wallet , 모바일: Green Wallet 이 포함됩니다. Jade-DIY는 USB를 통해 컴퓨터에 연결하고, 블루투스를 통해 휴대폰에 연결할 수 있습니다. Jade-DIY의 블루투스 기능은 기본적으로 꺼져 있으며 수동으로 켜야 합니다.
  • 소프트웨어 지갑에 연결한 후 사용자 경험은 주류 하드웨어 서명자의 경험과 크게 다르지 않습니다. 거래에 서명해야 할 경우 거래 세부정보가 화면에 표시됩니다.
  • Jade-DIY 잠금을 해제한 후 "Duerase PIN"에서 "Self-Erase PIN"을 설정할 수 있습니다. 일단 설정하고 잠금 해제 시 이 PIN을 입력하면 장치의 모든 콘텐츠(암호화된 시드 단어 포함)가 삭제됩니다.
  • Jade-DIY에는 단일 서명 및 다중 서명을 포함하여 대부분의 비트코인 ​​전용 서명자의 기능이 있습니다.

보안 분석

Jade-DIY의 보안 모델은 어떤 모습인가요?

이 튜토리얼에서 저자는 보안 부팅이 활성화된 플래싱 프로세스를 소개합니다. 보안 부팅은 Jade-DIY에 악성 펌웨어가 주입될 리스크 처리할 수 있는 매우 중요한 보안 조치입니다. 이러한 리스크 실제로 존재합니다. 현재 거의 모든 하드웨어 서명자는 이러한 보호 측면을 제공합니다(예: 펌웨어 업그레이드 시 펌웨어 서명 여부도 확인하는 Keystone).

Secure Boot를 적용하고 테스트한 결과 Jade-DIY의 보안은 Jade 정식 버전과 동일하다고 판단되었습니다. 그렇다면 Jade의 공식 버전은 얼마나 안전한가요?

이 기사의 시작 부분에 언급된 Mi Zeng의 리뷰에서 언급했듯이 Jade는 "가상 보안 칩"의 설계를 사용하여 " 보안 칩 대 오픈 소스 "의 균형을 처리합니다. 시드 단어인 Jade는 원격 서버의 키를 사용합니다(시드 단어를 암호화하기 위해 로컬 PIN과 함께). Jade를 잠금 해제하는 과정에서 설정된 PIN 코드를 제공해야만 적응된 소프트웨어 지갑이 원격 서버와 통신하고 키를 얻을 수 있습니다. (이것이 자체 저장된 시드 단어를 사용할 때 적합한 소프트웨어 지갑과 함께 작동해야 하는 이유입니다).

따라서 이 모드의 보안은 보안 칩을 전혀 사용하지 않고 추가 설계가 없는 하드웨어 서명자(예: 이전 버전의 Trezor 서명자)보다 보안이 뛰어납니다.

그러나 보안 칩을 사용하고 자기 파괴 메커니즘(분해 후 자기 파괴, 일정 횟수 잘못된 PIN 코드를 입력하면 자기 파괴)을 갖춘 서명자와 비교하면 Jade의 처리 능력은 약간 떨어집니다. 장치를 탈취한 후 물리적 공격을 가합니다.

전반적으로 Jade-DIY는 상대적으로 저렴한 비용으로 매우 우수한 보안을 제공할 뿐만 아니라 충분히 강력한 기능을 제공합니다.

오픈소스 운동 만세!

감사의 말

이 기사를 작성하는 동안 도움을 주고 토론해 준 Mi Zeng에게 감사의 말씀을 전하고 싶습니다. 물론 기사의 모든 오류에 대한 책임은 나에게 있습니다.

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트