Flash 읽기 보호는 어떻게 구현하나요?

고객이 코드 플래시(code flash)에 대한 외부 읽기 보호 메커니즘을 요구하고 있습니다.

TRM 매뉴얼에는 플래시 쓰기 보호만 있는 것으로 보입니다.

읽기 보호는 어떻게 구현해야 하나요?

코드 저장 영역의 읽기 보호는 하드웨어 수준 메커니즘과 암호화 기술을 결합하여 구현할 수 있습니다. STM32 시리즈를 예로 들면, 옵션 바이트에 있는 읽기 보호(RDP) 수준을 설정하여 구현할 수 있습니다. 예를 들어:

  1. RDP 수준 1: 디버그 인터페이스(JTAG/SWD)를 비활성화하고, SRAM 또는 시스템 메모리에서 부팅할 때 Flash에 대한 접근을 금지하며, 칩 자체의 프로그램만 읽기를 허용합니다.

  2. RDP 수준 2: 디버그 인터페이스를 추가로 퓨즈 차단하여 외부 접근을 완전히 금지하며, 이는 되돌릴 수 없습니다.

또한, 퓨즈 비트(예: AVR의 SPIEN 비트)를 사용하여 프로그래밍 인터페이스를 비활성화하고 ISP를 통한 Flash 읽기를 방지할 수 있습니다. 더 높은 보안이 필요한 경우, 하드웨어 암호화 모듈(예: HSM)을 통합하여 AES/SM4 알고리즘으로 Flash 콘텐츠를 암호화하고, 키는 외부 보안 칩에 저장할 수 있습니다.

외부 읽기 보호 요구사항에 대응하기 위해 다음과 같은 방식을 적용할 수 있습니다:

  1. 물리적 수준 보호: 퓨즈 비트를 소각(예: Nordic nRF52의 영구 읽기 보호)하여 디버그 인터페이스를 영구적으로 비활성화하고, 칩을 지우려면 물리적 파괴가 필요합니다.
  2. 동적 암호화 검증: 부팅 시 난수 + DES 알고리즘으로 검증값을 생성하고, HASH 연산(예: SHA-256)으로 코드 무결성을 검증하며, 3회 실패 시 자폭 메커니즘이 작동하여 핵심 데이터를 지웁니다.
  3. 보안 부팅(Secure Boot): 하드웨어 보안 모듈(HSM)을 이용해 신뢰 체인을 구축하고 단계별로 펌웨어 서명을 검증합니다. 예를 들어, Infineon TC3xx 시리즈는 HSM 내장 키로 부팅 코드를 복호화한 뒤 검증에 성공하면 제어권을 메인 CPU에 넘깁니다.
  4. 하드웨어 암호화 엔진: Flash 콘텐츠를 하드웨어 수준에서 암호화하여 직접 읽기를 방지하는 내장 암호화 모듈이 탑재된 MCU(예: NXP S32K의 CSEc 또는 신필 IM94xx의 HSM)를 선택합니다.

위 방법들은 특정 MCU 모델과 보안 요구사항에 따라 조합해 사용해야 하며, 제조사 TRM의 보안 장(예: STM32 Option Bytes 설정 절차)을 참고하는 것을 권장합니다.