암호화 칩을 사용하여 IoT 장치 설계에 보안 부트 추가
DigiKey 북미 편집자 제공
2018-06-06
개발자의 노력에도 불구하고, 사물 인터넷(IoT) 설계는 보안을 유지해야 하는 바로 그 코드의 공격에 노출될 수 있습니다. 해커는 펌웨어를 손상된 코드로 바꾸는 방식으로, 안전해 보이는 설계도 종종 공격합니다. 보안 부트 방법은 이러한 공격을 완화시킬 수 있지만 적절하게 구현하기가 어려울 수 있습니다.
개발자는 IoT 장치 보안을 보장하기 위한 종합적인 전략의 일부로 보안 부트를 구현하는 간단한 방법이 필요합니다.
이 기사에서는 IoT 장치 설계의 일반적인 공격 노출 영역과 보안 키 저장소, 암호화, 인증을 포함한 기본적인 보안 방법의 역할에 대해 간략히 살펴봅니다. 그런 다음 개발자가 IoT 장치 보안을 보장하기 위한 종합적인 전략에 필요한 다른 기능 중 보안 부트를 추가할 수 있는 보안 칩을 소개합니다.
IoT 장치의 취약성
IoT 장치는 장치 자체, 해당 네트워크, 그리고 궁극적으로 응용 제품까지 중단시킬 수 있는 여러 진입 지점을 해커에게 제공할 수 있습니다. 개발자가 여러 가지 기술을 사용하여 네트워크 및 응용 제품의 보안을 강화할 수는 있지만, IoT 장치의 보안은 장치 자체에서 사용할 수 있는 메모리와 처리 리소스의 제한으로 인해 과제로 남아 있습니다.
개발자가 암호화 방법을 사용하여 데이터를 보호하기는 하지만, 대부분의 장치는 해커가 서버, 게이트웨이 또는 기타 IoT 장치를 인증하는 것으로 위장하여 통신을 차단하지 못하도록 하는 데 필요한 보안 인증 기능 없이 설계되었습니다. 유효하지만 보안성이 낮은 방법을 사용하는 장치는 개인 통신 세션에 사용된 유효한 보안 키를 가로채서 재사용하는 복잡한 공격에 여전히 취약할 수 있습니다.
IoT 장치 업데이트
보다 근본적인 보안 약점은 급격하게 늘어나고 있는 IoT 장치에 내장된 OTA(무선) 업데이트 기능의 사용과 관련이 있습니다. OTA 업데이트는 빠르게 움직이는 IoT 시장에 중요한 기능을 제공합니다. 개발자는 배포된 장치의 펌웨어를 업그레이드하여 새로운 기능(또는 버그 수정)에 대한 고객의 변화하는 요구에 대응할 수 있습니다. 일반적인 OTA 업데이트 과정에서 IoT 장치는 정기적으로 업데이트를 찾고, 가능한 경우 새 코드를 다운로드하며, 업데이트 절차를 완료하도록 일련의 시스템 호출을 수행합니다.
예를 들어, Microchip Technology SAM D21 MCU 기반 IoT 장치의 경우 장치 펌웨어는 일부 사전 설정 종단점에서 이미지를 다운로드하는 OTA 업데이트 코드를 포함하고, 업데이트가 성공적으로 수행되었는지 확인한 다음, 새 펌웨어 설정으로 전환할 수 있습니다(목록 1). Microchip의 Advanced Software Framework 패키지에 있는 이 목록에서 OTA 펌웨어의 초기화(m2m_ota_init()) 이후 콜백 루틴 OtaUpdateCb()는 OTA 펌웨어가 새 코드 이미지를 다운로드하면 새 펌웨어 세트(m2m_ota_switch_firmware())로 전환되고 시스템 재설정으로 인해 MCU가 업데이트된 펌웨어로 재부팅됩니다.
복사
static void OtaUpdateCb(uint8 u8OtaUpdateStatusType ,uint8 u8OtaUpdateStatus)
{
if(u8OtaUpdateStatusType == DL_STATUS) {
if(u8OtaUpdateStatus == OTA_STATUS_SUCSESS) {
//switch to the upgraded firmware
m2m_ota_switch_firmware();
}
}
else if(u8OtaUpdateStatusType == SW_STATUS) {
if(u8OtaUpdateStatus == OTA_STATUS_SUCSESS) {
M2M_INFO("Now OTA successfully done");
//start the host SW upgrade then system reset is required (Reinitialize the driver)
}
}
}
void wifi_event_cb(uint8 u8WiFiEvent, void * pvMsg)
{
case M2M_WIFI_REQ_DHCP_CONF:
{
//after successfully connection, start the over air upgrade
m2m_ota_start_update(OTA_URL);
}
break;
default:
break;
}
int main (void)
{
tstrWifiInitParam param;
tstr1xAuthCredentials gstrCred1x = AUTH_CREDENTIALS;
nm_bsp_init();
m2m_memset((uint8*)¶m, 0, sizeof(param));
param.pfAppWifiCb = wifi_event_cb;
//Initialize the WINC Driver
ret = m2m_wifi_init(¶m);
if (M2M_SUCCESS != ret)
{
M2M_ERR("Driver Init Failed <%d>\n",ret);
while(1);
}
//Initialize the OTA module
m2m_ota_init(OtaUpdateCb,NULL);
//connect to AP that provide connection to the OTA server
m2m_wifi_default_connect();
while(1)
{
//Handle the app state machine plus the WINC event handler
while(m2m_wifi_handle_events(NULL) != M2M_SUCCESS) {
}
}
}
목록1: Microchip Advanced Software Framework 패키지의 이 OTA 코드 샘플에서 Wi-Fi 이벤트 핸들러 콜백 wifi_event_cb()는 지정된 URL을 사용하여 OTA 업데이트 m2m_ota_start_update(OTA_URL)를 시작하고, OtaUpdateCb()가 성공적으로 완료되면 새 펌웨어 m2m_ota_switch_firmware()로 전환합니다. (코드 출처: Microchip Technology)
다운로드한 코드가 유효한지 확인하기 위해, 개발자는 알려진 인증 기관에서 발급한 코드 서명 인증서를 오랜 기간 동안 사용해 왔습니다. 그렇지만 보안 데이터 저장소, 유효성 기술 구현, 인증서 보호의 취약성은 해커에게 IoT 장치를 장악할 수 있는 여러 가지 방법을 제공하게 됩니다.
기존의 보안 기술을 사용하더라도 유효한 코드를 손상된 코드로 바꾸도록 장치의 펌웨어 업데이트 프로세스를 속일 수 있습니다. 재부트 시, 이 장치는 해커가 IoT 네트워크, IoT 응용 제품 및 엔터프라이즈의 내부 리소스에 깊숙히 침투하는 데 사용할 수 있는 도구가 됩니다.
이 시나리오에서 IoT 장치를 안전하게 부트하는 기능은 중요한 방어선 역할을 합니다. 하지만 개발자의 경우 보안 부트를 구현하는 데 보안 저장소, 암호화, 인증 및 코드 유효성 검사 메커니즘에 대한 여러 가지 요구 사항이 필요합니다.
소프트웨어로 보안 부팅을 구현하면 장치 저장소에서 보안 키 검색, 암호화된 데이터 가로채기, 인증 메커니즘 스푸핑 및 코드 유효성 검사 알고리즘 손상에 중점을 둔 공격 방법에 업데이트 프로세스가 노출됩니다. 실제로 IoT 설계는 소프트웨어 솔루션에 필요한 추가 메모리와 처리 능력이 거의 항상 부족합니다. 그렇지만 하드웨어 구현이 항상 보안을 보장할 수는 없습니다.
하드웨어에 보안 부트를 구현하기 위해서는 최근까지 IoT 장치에 설계 복잡성과 비용을 크게 늘리는 전문 장치가 여러 개 필요했습니다. 개발자가 이러한 별도 장치를 통합하더라도 해커는 대상 IoT 장치의 샘플을 쉽게 구하여 버스와 신호 상호 연결을 통해 개별 보안 장치를 공격할 수 있었습니다. 그에 반해 Microchip Technology의 ATECC608A는 개발자가 기존 비밀이나 보안 메커니즘을 노출하지 않고 보안 부트를 추가할 수 있도록 하는 단일 칩 솔루션입니다.
보안 IC
ATECC608A는 간단한 직렬 인터페이스를 통해 정교한 보안 기능을 갖춘 호스트 MCU를 지원하도록 설계된 8핀 보안 장치입니다(그림 1).

그림 1: ATECC608A는 보안 하드웨어 기반 키 저장소를 가진 8핀 암호화 보조 프로세서입니다. (이미지 출처: Microchip Technology)
이 장치는 통합된 암호화 가속기와 온칩 보안 저장소를 결합하여 SHA-256, AES-128을 포함한 여러 암호화 알고리즘과 타원 곡선 디지털 서명 알고리즘(ECDSA), 타원 곡선 디피 헬만(ECDH), NIST Curve P-256을 포함한 견고한 타원 곡선 알고리즘을 지원하는 완전한 하드웨어 기반 보안 솔루션입니다. 이러한 암호화 메커니즘 외에도, 이 장치는 TLS 1.3을 포함하여 높은 수준의 전송 계층 보안(TLS) 프로토콜을 지원합니다. ATECC608A는 이전 장치와 달리 TLS 인증 사용에서 발견된 일반적인 위협 소스를 완화하는 데 도움이 되는 세션 키를 생성하고 안전하게 저장할 수 있습니다.
이러한 기능은 IoT 장치의 정상적인 작동을 보호하는 기본적인 역할을 하지만, ATECC608A의 보안 부트 지원은 기본적인 펌웨어 업데이트 프로세스에 대한 보안 보증으로 확대됩니다. 여기서 ATECC608A는 새 코드의 유효성을 검사하고 성공 또는 실패를 알리는 메시지를 MCU에 반환합니다. 이 시점에서 기본 보안 정책에 따라 MCU가 업데이트를 재시도하거나, 보안 모니터 종단점에 경고 메시지를 보내거나, 업데이트를 중지하거나 무시하고 원래 코드로 재부팅할 수 있습니다.
하드웨어 통합
개발자를 위해 ATECC608A는 MCU 기반 설계에 보안 부트 및 기타 보안 기능을 추가하기 위한 비교적 적은 수의 요구 사항을 추가합니다. 하드웨어 측면에서, 설계자는 VCC, GND, 직렬 클록 입력(SCL), 직렬 데이터(SDA)의 네 개 연결을 처리해야 합니다. 나머지 4개 핀은 연결되어 있지 않습니다. VCC를 2.0V ~ 5.5V 공급원에 연결하는 것 이외에, 유일하게 남은 결정은 MCU에 직렬로 연결하는 것입니다.
설계자는 기존의 I2C 연결을 위해 장치의 SCL과 SDA 핀을 MCU에 연결할 수 있습니다. 또는 설계자가 Microchip의 1선 인터페이스에 대한 장치의 지원을 이용할 수 있습니다. 여기서 개발자가 장치의 SDA 포트를 MCU GPIO 핀에 연결하고, Microchip의 1선 타이밍 프로토콜을 사용하여 논리 0 및 1 값을 전송합니다(그림 2).

그림 2: Microchip 1선 직렬 프로토콜에서 지정한 기간 신호의 파형 전이 순서는 논리 0 또는 논리 1입니다. (이미지 출처: Microchip Technology)
이 프로토콜에서 ATECC608A와 MCU 사이의 논리 값 전송은 지정된 기간의 시작 펄스(tSTART)로 시작됩니다. 시작 펄스 이후 프로토콜은 논리 0을 제로 전송 High 펄스(tZHI) 사이클로 정의한 다음 지정된 기간의 제로 전송 Low 펄스(tZLO) 사이클로 정의합니다. 마찬가지로, 지속적인 High 수준은 논리 1 전송을 암시합니다.
어느 경우든지 프로토콜은 신호가 지정된 비트 시간(tBIT) 내에서 Low 상태를 유지해야 합니다. 일련의 비트 전송 후 지정된 IO 타임아웃 기간이 지난 이후에 직렬 회선이 비활성화되면 장치가 자동으로 절전 모드로 전환되도록 프로그래밍할 수 있습니다. 그러나 ATECC608A를 사용하기 위해 개발자가 이 프로토콜의 타이밍 세부 사항에 대해 염려하지 않아도 됩니다. Microchip은 230.4Kbaud로 작동되는 표준 UART와 호환되도록 주요 타이밍 변수를 정의했습니다.
장치 구성
장치 수준에서 ATECC608A는 최소한의 구성 설정이 필요합니다. I2C 또는 1선 직렬 인터페이스를 사용하여 개발자가 I2C 주소와 같은 설정을 로드하거나 절전 해제 또는 전원 켜기 자체 테스트와 같은 몇 가지 기능을 설정할 수 있습니다. 이 장치는 특히 초저전력 IoT 설계와 관련이 있을 수 있는 구성 설정을 제공합니다.
이러한 설계에서 ATECC608A는 기존의 IoT 설계에서 대부분의 일반적인 상태와 마찬가지로 유휴 또는 절전 모드에서 전반적인 전력 예산을 거의 추가하지 않습니다. 유휴 모드에서 장치는 약 800μA(마이크로암페어)를 사용합니다. 절전 모드에서의 전력 소비는 구성에 따라 150nA(나노암페어) 이하입니다. MCU가 일부 보안 프로세스를 실행하기 위해 장치를 깨워도 장치의 전력 소비는 활성 작업 동안 여전히 14mA(밀리암페어)에 불과합니다. 그럼에도 불구하고 매우 타이트한 전력 예산으로 설계하려면 훨씬 낮은 유효 전력 레벨이 요구될 수 있습니다.
이러한 설계를 지원하기 위해 장치는 개발자가 낮은 전력 소비를 위해 실행 속도를 낮추는 세 가지 작동 모드를 선택할 수 있는 구성 옵션을 제공합니다. 따라서 개발자는 14mA의 최대 실행 속도에서 6mA 또는 3mA의 상대적으로 낮은 실행 속도로 유효 전력 소비를 줄일 수 있습니다.
여러 가지 낮은 수준의 구성 항목 외에도 ATECC608A와 같은 보안 장치는 개발 전에 해당 보안 정보가 이미 있을 때 더 효과적입니다. 개발 중에 수행한 보안 키와 인증서의 실수나 악용은 최고의 보안 노력을 방해할 수 있습니다. 이러한 가능한 위협을 해결하기 위해 Microchip의 신뢰할 수 있는 지원 서비스는 키 및 인증서를 포함한 보안 데이터를 제조 과정의 일부로 로드합니다.
보안 정보가 공장에서 보안 환경으로 로드되면 장치가 공급망에서 일반 처리 과정을 통과하더라도 우발적이거나 의도적인 검색으로부터 보호됩니다. ATECC608A에는 최종 호스트 MCU에서 전송된 알려진 키를 사용하여 암호화된 방식으로 활성화될 때까지 장치의 사용을 비활성화하는 특수 전송 잠금 기능이 포함되어 있습니다.
호스트 MCU에 의해 활성화되면 ATECC608A는 MCU와 공유하는 IO 보호 키라는 비밀 키를 임의로 생성합니다. 이후의 ATECC608A와 MCU 간의 통신은 보안 부팅 및 기타 보안 프로세스 중에 추가 인증을 제공하는 메커니즘인 이 IO 보호 키로 암호화됩니다.
해커가 ATECC608A에 대한 연결을 끊고 MCU에 고유한 '성공' 신호를 공급하여 유효성 검사 프로세스를 스푸핑하려고 하면 이 IO 보호 키 메커니즘으로 인해 MCU가 잘못된 신호를 무시합니다. 해커가 ATECC608A 장치를 손상시키고 다른 시스템에서 사용하려고 시도하더라도 IO 보호 키 메커니즘은 이 사용을 효과적으로 차단할 수 있습니다.
소프트웨어 통합
ATECC608A는 기능과 보호 메커니즘이 매우 복잡하지만 MCU 기반 설계에 적용하는 방법은 간단합니다. 개발자는 앞에서 언급한 간단한 하드웨어 인터페이스 및 구성 설정 구현 외에, 보안 작업의 세부 사항을 추출한 응용 프로그래밍 인터페이스(API)를 사용합니다. Microchip의 CryptoAuthLib 암호화 인증 라이브러리는 ATECC608A 기능을 완벽하게 사용하는 데 필요한 정의, 구조 및 API 호출을 포함하는 포괄적인 소프트웨어 패키지를 제공합니다. 이 라이브러리는 하드웨어 추상화 계층(HAL) API와 특정 하드웨어 대상을 위한 구동기에서 작동하는 하드웨어 비종속 계층의 역할을 합니다(그림 3).

그림 3: Microchip의 CryptoAuthLib 라이브러리는 하드웨어 특정 드라이버 위의 하드웨어 추상화 계층을 통해 액세스한 응용 프로그램과 기존 하드웨어 사이에 암호화 서비스 계층을 제공하여, 다른 하드웨어 세트에 걸쳐 이동성을 제공합니다. (이미지 출처: Microchip Technology)
개발자는io_protection_set_key()와 같은 CryptoAuthLib API 루틴을 사용하여 IO 보호 키를 만들고, atcab_secureboot()를 사용하여 호출 파라미터에 포함된 코드 다이제스트 또는 서명에 대해 ATECC608A의 보안 부트 유효성 검사 메커니즘을 실행합니다.
API 명령은 간단하지만, 보안을 구현하는 데 필요한 특정 설정, 관리 및 운영 단계가 까다로울 수 있습니다. 주요 단계가 누락되거나 뒤바뀐 순서로 수행되는 경우 개발자가 지정하려는 보안 메커니즘으로 인해 지연이 발생할 수 있습니다.
개발자는 Microchip의 SAM D21 MCU 기반 ATSAMD21-XPRO 개발 키트 및 ATCRYPTOAUTH-XPRO-B 애드온 보드가 장착된 ATECC608A를 사용하여 이러한 일반 메커니즘과 ATECC608A의 특정 기능을 빠르게 경험할 수 있습니다 Microchip은 샘플 응용 분야에 기본 디스플레이 인터페이스를 제공하기 위해 Microchip ATOLED1-XPRO를 사용하여 ATSAMD21-XPRO 및 ATCRYPTOAUTH-XPRO-B에서 실행되도록 설계된 광범위한 보안 부트 소프트웨어 패키지를 제공합니다(그림 4).

그림 4: 개발자는 ATECC608A 장착 ATCRYPTOAUTH-XPRO-B 애드온 및 ATOLED1-XPRO 디스플레이 애드온과 결합된 SAM D21 MCU 기반 ATSAMD21-XPRO 개발 키트와 Microchip 소프트웨어를 사용하여 보안 부트 프로세스를 신속하게 평가할 수 있습니다. (이미지 출처: Microchip Technology)
SAM D21 데모 패키지에 포함된 전체 보안 부트 루틴은 보안 부트 작업 상태를 설정, 실행, 확인하는 데 사용된 주요 소프트웨어 설계 패턴을 보여줍니다(목록 2). 개발자는 이 하드웨어 플랫폼과 데모 소프트웨어 패키지를 사용하여 원격 부트에 대한 ATECC608A 사용을 빠르게 평가하고, 고유한 요구 사항을 충족하는 데 필요한 샘플 소프트웨어를 수정할 수 있습니다.
복사
/** \brief Handles secure boot functionality through initialization, execution,
* and de-initialization.
* \return ATCA_SUCCESS on success, otherwise an error code.
*/
ATCA_STATUS secure_boot_process(void)
{
ATCA_STATUS status;
secure_boot_parameters secure_boot_params;
uint8_t secure_boot_mode;
bool secure_boot_app_valid = false;
/*Initialize secure boot */
if ((status = secure_boot_init(&secure_boot_params)) != ATCA_SUCCESS)
{
return status;
}
do
{
.
.
.
#if SECURE_BOOT_DIGEST_ENCRYPT_ENABLED
.
.
.
/*Get IO Protection Key*/
if ((status = io_protection_get_key(secure_boot_params.io_protection_key)) != ATCA_SUCCESS)
{
return status;
}
if ((status = atcab_secureboot_mac(secure_boot_mode,
(const uint8_t*)&secure_boot_params.app_digest,
(const uint8_t*)&secure_boot_params.memory_params.signature,
(const uint8_t*)secure_boot_params.randomnum,
(const uint8_t*)secure_boot_params.io_protection_key,
&secure_boot_app_valid)) != ATCA_SUCCESS)
{
break;
}
#else
if ((status = atcab_secureboot(secure_boot_mode,
0,
(const uint8_t*)&secure_boot_params.app_digest,
(const uint8_t*)&secure_boot_params.memory_params.signature,
NULL)) != ATCA_SUCCESS)
{
break;
}
secure_boot_app_valid = true;
#endif
/*Check whether the secure boot command executed successfully with the correct return mac */
if (!secure_boot_app_valid)
{
break;
}
.
.
.
}
while (0);
/* De-initialize memory interface and release its resources*/
secure_boot_deinit_memory(&secure_boot_params.memory_params);
return status;
}
목록 2: Microchip의 SAM D21 데모 패키지의 이 코드 조각은 IO 보호 키 검사(io_protection_get_key()) 및 다이제스트, 서명 및 기타 파라미터를 사용하여 펌웨어 유효성 검사(선택한 구성에 따라 atcab_secureboot_mac() 또는 atcab_secureboot())를 포함하여 보안 부트에 대한 주요 설계 패턴을 보여줍니다. (코드 출처: Microchip Technology)
결론
IoT 장치는 손상된 장치를 IoT 네트워크, 응용 프로그램, 엔터프라이즈 리소스에 대한 진입점으로 사용하려는 해커에게 여러 표면적 위협을 제공합니다. 완화 기술 중 보안 부트는 광범위한 보안 전략의 중요 요소로 제기됩니다. 그러나 보안 부트를 구현하려면 고유한 요구 사항이 필요하며, 제대로 처리되지 않을 경우 시스템이 위험에 노출될 수 있습니다.
Microchip Technology ATECC608A 보안 IC는 개발자가 MCU 기반 설계에 쉽게 추가할 수 있는 단일 패키지의 포괄적인 솔루션을 제공합니다. 개발자는 ATECC608A를 사용하여 보안을 크게 향상시키고 해당 IoT 설계에서 보안 부트를 보장할 수 있습니다.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


