ESP32 - ENABLE_SECURITY_DOWNLOAD eFuse의 역할
ENABLE_SECURITY_DOWNLOAD eFuse의 역할
- Secure boot V2에서 sign된 펌웨어만 다운로드 가능하도록 조치하기 위함
- ENABLE_SECURITY_DOWNLOAD를 efuse에 Burn하면 ROM 다운로드 모드가 보안 모드로 전환됩니다.
- 보안 모드에서는:
- Secure Boot, Flash Encryption 등 보안 정책을 우회할 수 있는 기능이 차단됨
- 인증된(서명된) 이미지나 허용된 명령만 실행 가능
- 사실상 출하 후 물리적 공격을 통한 펌웨어 변조 가능성을 크게 줄이는 효과가 있습니다.
중요한 주의사항
- 이 eFuse를 burn하면 espefuse.py를 통한 이후 추가 모든 eFuse 설정이 불가능해집니다.
- 즉, eFuse 변경은 ROM 다운로드 모드를 통해서만 가능한데, 이 모드가 보안 모드로 잠기면 더 이상 eFuse를 쓸 수 없음
- 따라서 반드시 모든 eFuse 설정(키 등록, 키 폐기, JTAG 차단, Flash Encryption 설정 등)을 완료한 뒤 마지막 단계에서만 실행해야 합니다.
명령 예시
espefuse.py --port <PORT> burn_efuse ENABLE_SECURITY_DOWNLOAD
- <PORT> : ESP32가 연결된 시리얼 포트 (예: /dev/ttyUSB0 또는 COM3)
- ENABLE_SECURITY_DOWNLOAD : 해당 eFuse 비트를 1로 설정하여 보안 다운로드 모드 활성화
적용 순서 예시 (출하 전)
- Secure Boot v2 설정 및 키 Digest eFuse 굽기
- Flash Encryption 설정 및 키 보호
- JTAG/USB-JTAG/Direct Boot 차단 eFuse 굽기
- 미사용 키 Digest 슬롯 폐기
- 마지막 단계에서 ENABLE_SECURITY_DOWNLOAD eFuse 굽
시큐어 부트 적용후 코드 변경시, Sign이 안된 펌웨어는 펌웨어 라이팅 자체가 안되도록 만고, Sign된 펌웨어만 펌웨어 라이팅이 가능하다.
[1] 코드 변경
↓
[2] 새 펌웨어 빌드
- 앱 바이너리(.bin) 생성 (서명 전 상태)
↓
[3] 동일한 개인키(Private Key)로 서명
- espsecure.py sign_data ...
- 서명 블록(Signature Block) 생성
├─ 공개키(Public Key)
├─ 이미지 해시(SHA-256)
├─ 서명값(RSA-PSS 또는 ECDSA)
└─ CRC32
↓
[4] 플래싱 시도 (UART0/USB)
↓
[5] ROM 부트로더 진입
- ENABLE_SECURITY_DOWNLOAD=1이면 "보안 다운로드 모드"로 동작
↓
[6] 서명 블록 존재 여부 확인
- 없으면 → 거부
↓
[7] 공개키 해시(Digest) 계산
- 서명 블록의 공개키 → SHA-256 해시
- eFuse에 저장된 SECURE_BOOT_DIGEST0/1/2와 비교
- 일치하지 않으면 → 거부
↓
[8] 서명 검증
- eFuse에 등록된 공개키로 이미지 서명값 검증
- 실패 시 → 거부
↓
[9] 검증 성공
- 플래시 메모리에 쓰기 허용
- 이후 부팅 시에도 동일 절차로 검증 후 실행
(주) 아이디케이 테크놀러지
ESPRESSIF 한국 공식 대리점
문의메일 : INFO@IDKTECH.CO.KR
'ESPRESSIF' 카테고리의 다른 글
| ESP32-C3-MINI-1-N4/N4X, H4/H4X 차이 (0) | 2026.01.05 |
|---|---|
| Espressif SoC에서 FPU(Floating Point Unit, 부동소수점 연산 장치)에 대하여 (0) | 2025.11.11 |
| ESP32 보안기능 - Secure boot V2 (0) | 2025.09.19 |
| [ESP32] 3종 제품 비교, ESP32-S3, ESP32-C3, ESP32-C5 (0) | 2025.09.05 |
| ESP32 IDF 기반 펌웨어 개발을 위한 주요 강좌 소개 (0) | 2025.09.05 |








