암호화된 외부 EEPROM을 사용하여 내장형 시스템에서 데이터 보호
DigiKey 북미 편집자 제공
2019-01-17
일부 마이크로 컨트롤러에는 EEPROM 온칩이 있습니다. 이 칩은 기판 공간을 줄일 수 있는 비휘발성 데이터 메모리입니다. 하지만 데이터 보안이 더욱 중요해지면서 많은 최신 내장형 시스템에서 외부 해커에 대한 내성을 가진 비휘발성 메모리를 사용하여 데이터를 안전하게 저장할 수 있는 실질적인 방법이 필요해졌습니다.
이 기사에서는 암호화의 핵심 사안을 살펴보기 이전에 단일 칩 보안 EEPROM에서 비휘발성 데이터를 위한 보안 저장소를 제공하여 해커로부터 안전하게 보호하는 방법을 설명합니다. 또한 알려진 제조업체의 적합한 보안 EEPROM 사례를 소개하고 EEPROM을 작동하는 방법과 적용하는 방법을 설명합니다.
보안 EEPROM의 필요성
많은 내장형 시스템에서 비휘발성 데이터 메모리(일반적으로 EEPROM)가 유용하게 사용되고 있습니다. 펌웨어의 제어에 따라 EEPROM을 읽고 쓸 수 있으며 시스템에서 전원을 차단하더라도 상태가 유지됩니다. 이에 반해 RAM은 전력 차단 시 상태가 손실됩니다.
마이크로 컨트롤러에 있는 EEPROM은 전력 차단 상태에서도 유지되어야 하는 프로그램 데이터를 저장하는 데 유용하지만, 일반적으로 RAM과 동일한 보안 취약성을 갖고 있습니다. 일부 최신 8비트, 16비트, 32비트 마이크로 컨트롤러의 경우 펌웨어의 제어에 따라 데이터 메모리 영역을 읽지 못하도록 차단하거나 디버거와 같은 외부 인터페이스를 통해 데이터 읽기를 차단하는 보안 방법이 있습니다. 이전에는 이 보안 수준이 적절하다고 여겨졌지만 지금은 해커가 이 적절한 보안을 우회하여 중요 시스템에 액세스함으로써 메모리, 시간, 동기, 관련 자료 등을 처리하는 사례가 발생하고 있습니다.
최신 내장형 시스템은 현재 다양한 응용 분야에서 더 강력한 데이터 보호를 요구하는 수준까지 진화했습니다. 일부 IoT 노드, 보안 시스템, 차량 간 통신, 최신 의료 장치, 자율주행 자동차 등이 여기에 해당됩니다. 또한 데이터 보안은 시스템 복제를 간단히 차단할 수 있어야 합니다. 이러한 응용 분야에서는 악의적인 해커의 공격으로 EEPROM 데이터가 손상되면 재산 피해 또는 악화로 이어질 수 있습니다.
이 경우 중요 관련 자료를 보유한 해커에 대해 내성이 뛰어난 EEPROM이 필요합니다. 이런 상황에서는 암호, 클론 해시, 지문 데이터, 센서 보정 정보, 생체 데이터와 같은 민감한 데이터를 쉽게 암호화하는 강력한 보안 EEPROM을 사용할 수 있습니다.
Microchip Technology는 CryptoAuthentication™ 제품 라인 장치를 통해 이 설계 문제를 해결했습니다. 이 말이 친숙하게 들리는 이유는 Microchip이 Atmel 인수 과정에서 이 제품 라인을 넘겨받았기 때문입니다. 이 제품 라인에서 설계 문제를 해결할 장치는 ATAES132A 보안 32KB EEPROM(그림 1)입니다.

그림 1: ATAES132A 32KB 직렬 EEPROM은 데이터와 내부 레지스터를 보호하는 보안 기능을 적용하여 특별히 설계되었습니다. (이미지 출처: DigiKey)
ATAES132A는 표준 32KB 직렬 EEPROM처럼 사용될 수 있습니다. 이 장치는 표준 SPI 및 I2C 핀아웃을 사용하므로 기존 설계에서 하드웨어를 수정하지 않고도 표준 직렬 EEPROM을 대체할 수 있습니다. 따라서 기존 설계에서 응용 펌웨어만 수정하여 추가로 손쉽게 보안을 업그레이드할 수 있습니다.
그뿐만 아니라 활성화되면 모든 위협, 특히 해커로부터 EEPROM 데이터와 내부 레지스터를 보호할 수 있는 중요한 물리적 보호, 암호화 및 기타 설계 고유의 보안 기능이 있습니다. 최대 16개의 128비트 키로 군사 보안 등급 AES 암호화를 사용하여 데이터를 보호할 수 있습니다.
물리적 보호
먼저 ATAES132A에는 장치를 물리적 리버스 엔지니어링으로부터 보호하는 다양한 기계 보안 메커니즘이 있습니다. 이 장치는 메모리 내용을 유지하기 위해 장치의 “급속 냉동” 시도와 같은 특정 주위 온도 변화에 민감합니다. 이 장치는 다이 노출을 위한 덮개 개방 시도를 감지할 수 있습니다. 금속 차폐 안에 다이가 포함되어 있으며, 차폐를 제거할 경우 다이가 빛에 대한 노출을 감지하여 메모리 내용 삭제 메커니즘을 시작할 수 있습니다.
마지막으로 내부 메모리 내용은 암호화됩니다. 이 장치는 Microchip 엔지니어에게만 알려진 비공개 보안 메커니즘을 포함할 수도 있습니다. Microchip은 보안 메커니즘의 구체적인 내용을 기밀로 유지합니다. 따라서 보안 메모리에 포괄적인 물리적 보안을 제공하여 개발자가 EEPROM에 장벽을 제공하는 복잡한 인클로저를 구축하는 데 집중할 수 있습니다.
전원을 켜면 SPI 또는 I2C 인터페이스를 사용하여 대부분의 마이크로 컨트롤러에 연결하도록 ATAES132A를 구성할 수 있습니다. I2C 모드에서 사용할 경우 칩 선택 핀은 사용되지 않으므로 전원 또는 접지에 연결되어야 합니다. SPI 모드에 사용하도록 구성된 경우 평상시처럼 칩 선택 핀이 사용됩니다.
AES 데이터 암호화
ATAES132A에서는 128비트 키로 AES-CCM을 사용하여 암호화를 구현합니다. 간단히 말해서 암호화할 데이터를 일련의 복잡한 수학 함수를 통해 펌웨어 개발자가 프로그래밍하는 128비트 숫자와 결합합니다. AES 암호화 및 암호 해독 연산 중에 ATAES132A에서 모든 복합 연산을 수행합니다. 일부 변수 설정과 128비트 키 선택을 제외하고 이 공정을 펌웨어 개발자에게 투명하게 공개하여 제품 개발을 크게 간소화해줍니다.
ATAES132A 메모리 맵
이 장치는 암호화되지 않은 표준 직렬 EEPROM으로도 사용할 수 있습니다. 하지만 개발자가 고급 보안 기능을 사용할 경우 이 장치는 매우 다른 방식으로 구성되고 사용됩니다. ATAES132A를 이해하는 가장 빠른 방법은 메모리 맵을 검사하는 것입니다. 표 1에 표시된 것처럼 이 장치의 메모리 맵은 표준 EEPROM보다 더 세부적입니다.
|
표 1: ATAES132A 메모리 맵은 표준 직렬 EEPROM보다 더 세부적입니다. (데이터 출처: Microchip Technology)
메모리 맵의 위치에서는 대부분 표준 I2C 또는 SPI 명령을 사용하여 읽고 씁니다.
EEPROM 및 영역 보안 구성 레지스터
32KB 데이터 EEPROM 메모리는 2KB 영역 16개로 구분됩니다. 보안을 사용하거나 사용하지 않고 각 메모리 영역을 개별적으로 구성할 수 있습니다. 16개 메모리 영역 각각에 대한 보안 설정은 영역 보안 구성 레지스터 영역에서 설정합니다. 다음은 2KB 영역 16개에 대해 개별적으로 설정할 수 있는 기본 보안 설정입니다.
- 데이터 읽기에 대한 암호화 활성화/비활성화
- 데이터 쓰기에 대한 암호화 활성화/비활성화
- 데이터 읽기에 대한 인증 활성화/비활성화
- 데이터 쓰기에 대한 인증 활성화/비활성화
- 영구적으로 설정된 읽기 전용 영역
이러한 설정은 응용 제품에 대해 보안을 설정할 때 상당한 유연성을 제공합니다. 한 영역을 암호화 및 인증 없이 읽기/쓰기 권한으로 사용하도록 설정하여 표준 EEPROM처럼 읽고 쓰도록 허용할 수 있습니다. 다른 영역에서는 전체 암호화 및 권한 부여를 요구하여 민감한 데이터에 높은 보안을 제공할 수 있습니다.
장치 구성 레지스터
장치의 일반적인 동작은 장치 구성 레지스터 영역에서 설정합니다. 이 영역에는 장치에 대한 일부 읽기 전용 정보도 포함되어 있습니다. 여기에는 장치를 식별하는 데 사용되는 고유한 32비트 장치 일련번호가 포함됩니다. 다른 레지스터에서 메모리 영역이나 다른 레지스터를 읽기 전용으로 설정할 수 있습니다. 이를 메모리 잠금이라고 합니다. 레지스터나 메모리 영역을 잠근 경우 이는 영구적이며 잠금을 해제할 수 없습니다.
또한 이 영역에는 장치를 I2C 또는 SPI 모드로 사용할지를 구성하는 데 사용하는 I2CAddr 레지스터가 있습니다. 장치 전원을 켜면 1바이트 I2CAddr 레지스터가 기록됩니다. I2CAddr의 비트 0에 따라 직렬 인터페이스 모드가 결정됩니다. 펌웨어에 0이 기록되면 장치가 SPI 모드로 구성됩니다. 1이 기록되면 I2C 모드를 선택합니다. I2C 모드를 선택한 경우 7비트 장치 주소는 50h입니다.
명령 및 응답 메모리 버퍼
표준 SPI 또는 I2C 주소 지정을 사용하여 장치의 메모리 위치에 액세스할 수 있지만, 장치에서 마이크로 컨트롤러와 비슷한 명령을 사용할 수도 있습니다. 명령 블록이라고 하는 명령 및 피연산자는 1바이트 이상일 수 있으며 항상 명령 및 응답 메모리 버퍼의 FE00h 주소에 직접 기록됩니다. 명령 블록은 단일 바이트 명령어 1개, 1바이트 이상의 피연산자, 2바이트 체크섬으로 구성됩니다.
사용 가능한 명령에는 데이터 인증, EEPROM 영역에서 블록 읽기, 증분 카운터, 인증이 필요한 보호된 메모리 또는 레지스터 직접 읽기 등이 있습니다. 동일한 FE00h 위치에서 명령에 대한 응답을 다시 읽습니다. FE00h에 대한 모든 쓰기 명령은 명령 메모리 버퍼에 전송됩니다. FE00h에서의 모든 읽기는 응답 메모리 버퍼에서 수행됩니다.
FFE0h의 I/O 주소 초기화 레지스터는 명령 및 응답 메모리 버퍼를 초기화하는 데 사용되는 읽기 전용 레지스터입니다. FFE0h에 값을 쓸 때 두 가지 연산이 수행됩니다. 즉, 새로운 명령 블록을 수락하도록 명령 메모리 버퍼를 지우고, 내용을 처음부터 읽을 수 있도록 응답 메모리 버퍼를 0으로 초기화합니다.
응답 메모리 버퍼를 초기화하면 펌웨어에서 전체 응답을 다시 읽을 수 있습니다. 이는 호스트 컨트롤러가 응답 메모리 버퍼를 읽는 동안 중단이 발생할 수 있는 경우에 유용하며 중단 상태에서 돌아오면 데이터를 처음부터 다시 읽을 수 있습니다.
또한 EEPROM에 대한 읽기와 쓰기를 위해 AES 암호화 및 암호 해독을 실행하는 명령이 있습니다. 이러한 계산은 매우 복잡하므로 여기서는 다루지 않습니다. 하지만 Microchip에서 이러한 모든 기능을 쉽게 수행하는 마이크로 컨트롤러 드라이버 및 펌웨어를 제공하므로 프로그래밍 장치에 AES 암호화에 관한 최소한의 지식만 있으면 됩니다.
영역 카운터 레지스터
이 레지스터 영역에서는 읽기 전용 카운터 16개가 각 영역에 연결되어 있습니다. 각 메모리 영역은 128비트 영역 키를 사용하여 암호화하거나 암호를 해독합니다. 영역 키를 사용할 때마다 연결된 32비트 영역 카운터가 증가하거나 증가하지 않을 수 있습니다. 이는 연결된 영역 카운터 구성 레지스터의 설정에 따라 다릅니다. 보안상 카운터를 줄이거나 초기화할 수 없습니다.
펌웨어는 영역 카운터에 직접 써서 카운터를 초기값으로 늘릴 수 있지만, 기존 카운터 내용보다 낮은 값으로 늘릴 수는 없습니다. 제조 중에 영역 카운터를 쓴 다음 잠가서 카운트 수를 제한할 수 있습니다. 카운터가 최댓값인 2,097,151에 도달하면 연결된 키를 영구적으로 비활성화하여 더 이상 암호화 또는 암호 해독 작업에 사용하지 못하도록 차단할 수 있습니다. 이는 제한된 사용 키에 유용합니다. 예를 들어 제한된 횟수에 도달하면 마이크로 컨트롤러 펌웨어를 새로 고치도록 허용할 수 있습니다.
보안 강화를 위해 각 32비트 영역 카운터는 중복됩니다. 그러면 영역 카운터 증분 중에 정전이 발생할 경우 영역 카운터 손상을 감지합니다. 응용 제품의 전원을 켜면 펌웨어가 모든 영역 카운터의 카운터값을 읽습니다. 강력한 응용 제품에서 값이 다를 경우 이는 권한 없는 전력 차단 이벤트의 증거로서, 작동 중인 응용 제품의 보안을 무단으로 비활성화하려는 시도를 나타낼 수 있습니다.
상태 레지스터
ATAES132A 상태 레지스터는 잘못된 체크섬, 명령 오류를 비롯한 오류 코드를 나타내는 읽기 전용 레지스터입니다. 또한 ATAES132A가 I2C 또는 SPI 모드에 있는지와 명령 진행 상황 및 응답의 유효성을 나타냅니다. 항상 읽기, 쓰기, 명령 및 응답 전후에 이 레지스터를 읽어야 합니다. 오류는 호스트 마이크로 컨트롤러와 ATAES132A 간에 I2C 또는 SPI에 연결하려는 외부 시도를 나타낼 수 있습니다. 호스트 펌웨어에서 적절하게 조치해야 합니다(예: 운영자에게 경고, 경보 발생).
제조 중 ATAES132A 설정
ATAES132A 장치 보안은 최종 제품 제조 중에 설정됩니다. 구성 오류를 줄이기 위해 ATAES132A를 시스템 내부에서 구성해야 합니다. 처음에는 모든 초기 카운터값과 카운터 구성을 설정해야 합니다. 그런 다음 키 및 암호화 파라미터를 프로그래밍해야 합니다. 마지막으로 모든 초기 EEPROM값을 프로그래밍해야 합니다. ATAES132A에서 고유한 32비트 장치 일련번호를 읽어서 호스트 마이크로 컨트롤러 펌웨어에 통합할 수 있습니다.
프로그래밍한 모든 EEPROM값을 다시 읽어서 ATAES132A의 구성이 적절한지 확인하는 것이 좋습니다. 값을 제대로 다시 읽을 수 없거나 상태 레지스터에 체크섬 또는 명령 오류가 표시될 경우 최종 제품에 플래그 지정한 후 생산에서 제거해야 합니다. 선택적으로 EEPROM에 충분한 여유 공간이 있다면 테스트 암호화 및 암호 해독을 실행할 수 있습니다.
ATAES132A 개발
개발을 돕기 위해 Microchip은 DM320109 Xplained-Pro CryptoAuthentication 시험용 키트(그림 2)를 제공합니다. ATAES132A는 Microchip의 ATSAMD21J18A Arm® Cortex®-M0+ 마이크로 컨트롤러에 연결됩니다.

그림 2: Microchip의 DM320109 Xplained CryptoAuthentication 시험용 개발 키트를 사용하면 ATAES132A용 코드를 쉽게 평가하여 개발할 수 있습니다. 이 키트는 광범위한 코드 예제와 Windows, Linux 또는 MacOS를 지원하는 대부분의 PC를 위한 인터페이스와 함께 제공됩니다. (이미지 출처: Microchip Technology)
Microchip ATSAMD21J18A 마이크로 컨트롤러에는 PC 개발 환경에 연결하기 위한 USB 인터페이스가 있습니다. 이 컨트롤러는 I2C 인터페이스와 SPI 인터페이스를 모두 지원하며, 이 인터페이스를 사용하여 ATAES132A에 연결할 수 있습니다. 제공된 USB 케이블을 사용하여 대상 PC에 연결한 후 키트를 사용하여 ATAES132A의 모든 특징을 구성하고 모니터링할 수 있습니다.
ATAES132A와 ATSAMD21J18A 사이의 데이터 패킷을 모니터링 및 기록하기 위해 두 번째 USB 케이블이 제공됩니다. 이 케이블은 Xplained 기판과 PC에 있는 사용 가능한 USB 포트 사이에 연결됩니다. 개발자는 마이크로 컨트롤러와 EEPROM 사이의 신호를 모니터링하여 두 장치 간에 이동 중인 암호화된 데이터를 관찰할 수 있습니다.
Xplained 키트는 ATAES132A를 위한 모든 펌웨어 라이브러리 및 예제 코드와 함께 제공됩니다. 여기서 설명한 ATAES132A 메모리 맵과 레지스터를 이해했다면 장치 암호화에 대한 최소한의 지식만 있어도 개발자가 예제 코드를 대상 응용 제품에 맞도록 쉽게 맞춤화할 수 있습니다.
결론
AES 128비트 암호화는 복잡한 주제입니다. 그럼에도 불구하고 개발자는 보안을 위해 특별히 설계된 EEPROM에서 중요한 데이터를 보호할 수 있습니다. 회사 및/또는 최종 사용자에게만 알려진 기계적 보호, 강력한 암호화, 특수 영역 지정 및 메모리 매핑, 맞춤 기능 또는 기밀 기능을 찾아보세요.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


