KR20180007717A - 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법 - Google Patents

이중보안기능을 가지는 SoC 및 SoC의 이중보안방법 Download PDF

Info

Publication number
KR20180007717A
KR20180007717A KR1020160088510A KR20160088510A KR20180007717A KR 20180007717 A KR20180007717 A KR 20180007717A KR 1020160088510 A KR1020160088510 A KR 1020160088510A KR 20160088510 A KR20160088510 A KR 20160088510A KR 20180007717 A KR20180007717 A KR 20180007717A
Authority
KR
South Korea
Prior art keywords
soc
secure
boot
program code
flash memory
Prior art date
Application number
KR1020160088510A
Other languages
English (en)
Other versions
KR101954439B1 (ko
Inventor
정종식
Original Assignee
(주)이더블유비엠
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)이더블유비엠 filed Critical (주)이더블유비엠
Priority to KR1020160088510A priority Critical patent/KR101954439B1/ko
Publication of KR20180007717A publication Critical patent/KR20180007717A/ko
Application granted granted Critical
Publication of KR101954439B1 publication Critical patent/KR101954439B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • G06F21/445Program or device authentication by mutual authentication, e.g. between devices or programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules

Abstract

본 발명의 이중보안기능을 가지는 SoC는, 프로그램 코드를 실행하는 CPU와, 전원인가시 상기 CPU에 의한 부팅에 사용되는 부트코드를 저장하는 부트롬을 내부에 포함하는 SoC에 있어서, 해시 알고리즘에 의해 상기 프로그램 코드로부터 생성된 해시데이터가 암호화키에 의해 암호화되어 생성된 시그니쳐 가 상기 프로그램 코드와 함께 SoC 제조시에 저장되어 있는 플래시메모리와, 시큐어 부팅시에, 상기 프로그램 코드가 변조되지 않은 것으로 검증된 경우에만 상기 CPU에 의한 부팅을 허용하도록 제어되는 시큐어 엔진이 구비되고, 상기 시큐어 엔진은, 해시 알고리즘에 의해 상기 플래시메모리에 저장되어 있는 프로그램 코드로부터 커런트 해시데이터를 생성하는 해시알고리즘 처리블럭과, 복호화키에 의해 상기 플래시메모리에 저장되어 있는 시그니쳐 키를 복호화하여 복호화된 시그니쳐 를 생성한 후, 상기 커런트 해시데이터와 상기 복호화된 시그니쳐 키가 동일한 경우에 상기 프로그램 코드가 변조되지 않은 것으로 검증하는 시그니쳐검증 처리블럭을 포함하여 이루어짐을 특징으로 한다.

Description

이중보안기능을 가지는 SoC 및 SoC의 이중보안방법 {SOC HAVING DOUBLE SECURITY FEATURES, AND DOUBLE SECURITY METHOD FOR SOC}
본 발명은, 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법에 관한 것이다.
IoT(Internet of Things)분야의 급속성장에 따라, 인터넷을 통해 주고받는 데이터의 양이 기하급수적으로 늘어나고 있다. 그리고 이에 따른 데이터보안(security)이 주요 이슈가 되고 있다. 특히 개인정보나 대외비 등의 외부유출은 큰 문제가 되므로, 철저한 데이터보안에 대한 요구가 증가하고 있다.
일반적으로 데이터의 처리를 위한 하드웨어의 하나로서, 하나의 칩에 CPU와 메모리를 모두 갖춘 SoC(1; 시스템 온 칩: system on chip)가 알려져 있다. 도 4와 같이, 종래의 SoC(1)에 있어서는, 시스템버스에 CPU(10), 내부메모리(system memory: 11), SPI(Serial Peripheral Interface)컨트롤러(12), 부트롬(boot ROM: 13) 등이 연결되어 있고, SPI컨트롤러(12)에는 프로그램코드(15a)를 가지는 S-플래시메모리(15)가 SoC(1) 외부에서 연결되어 있다.
여기서 CPU(10)는, 어플리케이션 프로그램을 동작시키는 CPU이다. 내부메모리(11)는, CPU에 필요한 프로그램 및 데이터를 저장할 수 있는 시스템메모리이다. SPI컨트롤러(12)는, SoC(1) 외부에 있는 SPI롬(15)을 제어하여, 필요한 어플리케이션 프로그램 코드를 읽어서 내부메모리(11)에 저장하는 제어수단이다. 부트롬(13)은, CPU(10)의 부팅시 필요한 코드를 저장한 롬이다.
아무런 보안기능이 없는 경우에, 전원이 파워 온(power on) 되면, SoC(1) 내 CPU(10)가 부트롬(13)에서 롬 부트코드(ROM boot code)를 읽어와서, 초기 롬 부트(ROM boot)를 한다. 그리고 CPU(10)는, SPI컨트롤러(12)를 제어하여, SoC(1) 외부의 S-플래시 메모리(15)에서 어플리케이션 프로그램 코드를 읽어와서, SoC(1) 내부의 내부메모리(11)에 저장한다. 그리고 CPU(10)가 내부메모리(11)의 시작 어드레스(대개 주소 '0')부터 동작을 시작해서, 어플리케이션에 따라 CPU(10)가 동작을 하게 된다.
그런데, SoC(1) 외부의 S-플래시(15)에 저장된 프로그램코드(15a)는, 쉽게 변조 또는 교체될 수 있다. 따라서, 프로그램코드(15a)에 대한 검증이 없으면, 원하지 않는 엉뚱한 프로그램이 실행될 수 있고, 이에 따라 데이터가 유출되는 문제가 발생될 수 있다.
여기서, 데이터보안 요청에 응하기 위해 소프트웨어적인 방법도 생각될 수 있다. 하지만, 소프트웨어적 방법은 하드웨어가 이미 형성된 이후에 부가하는 것이므로, 이 부가시 또는 그 후에 변조될 가능성이 상존하였다. 이 검증용 소프트웨어 자체도 변조될 수 있고, 게다가 소프트웨어는 실행속도가 느리다는 단점이 있다.
그러므로, 해킹위험이나 속도문제를 고려할 때, 근본적인 해결을 위해서는 SoC의 설계시작부터 데이터 보안을 고려한 설계가 되어야 하고, 하드웨어적인 구성에 의한 해결책이 요구되고 있다.
이런 하드웨어적인 해결책의 일환으로서, 종래의 시큐어 부트(Secure boot)를 지원하는 방식은, 디바이스 ID(Device ID)를 이용하는 방법이다. 시큐어 부트는, SoC(1) 외부의 S-플래시(15)에 저장된 프로그램 코드의 유효성을 검증하는 방식이다. 이를 위해, SoC(1)의 생산단계에서 S-플래시(15)에 디바이스 ID를 저장하고, 이와 동시에 SoC(1) 내부에 시큐어 키 블록(21)에 디바이스 ID 내지 디바이스 유니크 키(device unique key)를 저장해 놓는다. 그리고 시큐어 부트 단계에서, 이 S-플래시(15)의 디바이스 ID 값을 읽어서, 이 값이 SoC 내부의 디바이스 유니크 키 값과 일치하면, 시큐리티 패스(pass)로 판단하고, 이후 단계를 진행하는 방식이다.
그런데 이 방식은, 디바이스 ID만을 사용하므로, 완벽한 시큐어 부트를 진행하는데 문제가 있다. 즉, 이 방식은, 외부에서 디바이스 ID 값을 알아낼 수 있으므로, 프로그램 코드(15a)를 변조하여 놓고, 디바이스 ID만 종전과 동일하게 해서 S-플래시(15)에 저장하면, SoC(1)는 이 변조된 프로그램 코드(15a)를 정상적인 것으로 오인식한 채 동작을 개시하게 되어, 원래와는 전혀 다른 동작을 하고, 데이터보안을 망가뜨릴 수 있는 위험에 노출되어 있다.
따라서, 데이터보안의 강화를 위해, 어플리케이션 프로그램이 변조가 되는 경우에 부팅을 못하도록 하는 보다 확실한 방법이 필요하다.
한편, SoC(1)에서는 기본적으로 JTAG(Joint Test Action Group) 디버거(14; JTAG 인터페이스)를 제공하고 있다. 이 JTAG 디버거(14)는, SoC(1)에서 실행될 프로그램(15a)을 개발할 때, 프로그램(15a)이 실행되는 동안 SoC(1)가 정상적으로 동작하는지를 확인하기 위한 수단이다. 이 JTAG 디버거(14)를 이용하면, SoC(1)의 내부메모리(11)를 포함한 전체 영역을 외부에서 억세스할 수 있도록 되어 있다.
실제로 SoC(1)의 전원투입 후 초기 롬 부팅시부터 JTAG 디버거(14)는 항상 동작을 하게 되어 있다. 따라서, SoC(1)의 내부메모리(11) 및 로드된 프로그램 코드(15a)를 전부 외부에서 억세스할 수 있었다. 이런 상태에서는, SoC(1) 내부 데이터를 보호할 수 있는 장치가 없으므로, JTAG 디버거(14)를 통해 중요한 데이터를 모두 억세스당할 수 있다는 단점이 있었다.
따라서, SoC(1)의 내부메모리(11)에 대한 무단 억세스를 방지하기 위한 방안도 필요하다.
또한, 종래에는 S-플래시(15)에 있던 프로그램 코드(15a)를 SoC(1) 내부메모리(11)로 복사한 후에, 비로소 시큐어 엔진(20)이 동작을 하였으므로, 시큐어 부팅 시간이 매우 길고, JTAG 디버거(14)를 통한 프로그램 코드(15a)의 유출에 취약했다는 단점이 있었다.
특허공개 10-2015-0026202
데이터보안 강화를 위해, 어플리케이션 프로그램이 변조된 경우에는 부팅을 못하도록 하는 하드웨어적인 시큐어 엔진을 제공하고자 하는 것이다.
그리고 프로그램 개발시 이외의 부팅모드에서는 JTAG 디버거를 통한 SoC 내부메모리에 대한 억세스를 방지할 수 있는 시큐어 부팅모드를 제공하고자 하는 것이다.
그리고 프로그램 코드를 내부메모리에 로드하지 않고 시큐어 엔진이 프로그램 코드를 직접 읽어서 신속히 보안 검증을 행하는 시큐어 부팅모드를 제공하고자 하는 것이다.
상기 과제를 달성하기 위한 본 발명의 이중보안기능을 가지는 SoC는, 프로그램 코드를 실행하는 CPU와, 전원인가시 상기 CPU에 의한 부팅에 사용되는 부트코드를 저장하는 부트롬을 내부에 포함하는 SoC에 있어서, 해시 알고리즘에 의해 상기 프로그램 코드로부터 생성된 해시데이터가 암호화키에 의해 암호화되어 생성된 시그니쳐 가 상기 프로그램 코드와 함께 SoC 제조시에 저장되어 있는 플래시메모리와, 시큐어 부팅시에, 상기 프로그램 코드가 변조되지 않은 것으로 검증된 경우에만 상기 CPU에 의한 부팅을 허용하도록 제어되는 시큐어 엔진이 구비되고, 상기 시큐어 엔진은, 해시 알고리즘에 의해 상기 플래시메모리에 저장되어 있는 프로그램 코드로부터 커런트 해시데이터를 생성하는 해시알고리즘 처리블럭과, 복호화키에 의해 상기 플래시메모리에 저장되어 있는 시그니쳐 키를 복호화하여 복호화된 시그니쳐 를 생성한 후, 상기 커런트 해시데이터와 상기 복호화된 시그니쳐 키가 동일한 경우에 상기 프로그램 코드가 변조되지 않은 것으로 검증하는 시그 니쳐검증 처리블럭을 포함하여 이루어짐을 특징으로 한다.
여기서, 시큐어 부트모드인지 일반 부트모드인지를 지정하는 값을 저장하는 OTP가 상기 SoC 내부에 더 구비되고, 상기 부트코드에 의해 읽혀진 상기 OTP의 값이 상기 시큐어 부트모드의 지정값으로 확인되면, 상기 시큐어 엔진이 동작되도록 구성됨이 바람직하다.
그리고 상기 시큐어 엔진에 의해 제어되어 상기 플래시메모리에 억세스하는 QSPI 컨트롤러와, 상기 시큐어 엔진 내부에 마련된 시큐어메모리가 더 구비되고, 상기 해시알고리즘 처리블럭은, 상기 QSPI 컨트롤러를 통해 상기 플래시메모리에 저장된 프로그램 코드 중 처리대상이 되는 부분만을 상기 시큐어메모리로 직접 로드하여 처리하도록 구성됨이 바람직하다.
그리고 SoC의 외부에 연결된 JTAG 디버거와, 시큐어 부팅시에 단절신호를 생성하는 시큐리티 이네이블 회로와, 상기 단절신호를 받아서 상기 JTAG 디버거와 SoC 사이의 연결을 끊는 디버그 인터페이스 회로가 더 포함됨이 바람직하다.
한편, 상기 과제를 달성하기 위한 본 발명의 SoC의 이중보안방법은, 프로그램 코드를 실행하는 CPU와, 전원인가시 상기 CPU에 의한 부팅에 사용되는 부트코드를 저장하는 부트롬을 내부에 포함하는 SoC의 이중보안방법에 있어서, 해시 알고리즘에 의해 상기 프로그램 코드로부터 생성된 해시데이터가 암호화키에 의해 암호화되어 생성된 시그니쳐 가 상기 프로그램 코드와 함께 SoC 제조시에 플래시메모리에 저장되는 준비단계와, 시큐어 부팅시에, 상기 프로그램 코드가 변조되지 않은 것으로 검증된 경우에만 상기 CPU에 의한 부팅을 허용하도록 제어되는 시큐어 엔진이 작동되는 시큐어 부팅단계로 이루어지고, 상기 시큐어 부팅단계는, 해시 알고리즘에 의해 상기 플래시메모리에 저장되어 있는 프로그램 코드로부터 커런트 해시데이터를 생성하는 해시알고리즘 처리단계와, 복호화키에 의해 상기 플래시메모리에 저장되어 있는 시그니쳐 키를 복호화하여 복호화된 시그니쳐 를 생성한 후, 상기 커런트 해시데이터와 상기 복호화된 시그니쳐 키가 동일한 경우에 상기 프로그램 코드가 변조되지 않은 것으로 검증하는 시그니쳐검증 처리단계를 포함하여 이루어짐을 특징으로 한다.
데이터보안 강화를 위해, 2 단계의 시큐리티 체크를 실시하여, 어플리케이션 프로그램 코드가 변조된 경우에는 부팅을 못하도록 하는 하드웨어적인 시큐어 엔진 블록이 제공된다.
그리고 JTAG 디버거를 통한 SoC 내부 및 내부메모리에 대한 억세스를 방지할 수 있어서, CPU의 어플리케이션 프로그램을 변조나 해킹으로부터 보호하고, 내부 데이터를 보호할 수 있고, 이로써 시큐어 동작을 보장할 수 있는 시큐어 부팅모드가 제공된다.
그리고 프로그램 코드를 내부메모리에 로드하지 않고 시큐어 엔진이 프로그램 코드를 직접 읽어서 신속히 보안 검증(시큐어 부팅시간을 단축)을 행하는 시큐어 부팅모드가 제공된다.
도 1은, 본 발명의 이중보안기능을 가지는 SoC의 실시예의 개략 블럭구성도이다.
도 2는, 본 발명의 SoC의 이중보안방법의 실시예의 부팅과정의 전체 흐름을 나타내는 플로챠트이다.
도 3은, 내부메모리 접근 제한을 위한 실시예의 블럭구성도이다.
도 4는, 종래의 SoC의 개략 블럭구성도이다.
도 5는, 종래의 SoC의 부팅과정의 전체 흐름을 나타내는 플로챠트이다.
이하, 본 발명의 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법에 대해, 첨부도면을 참조하면서 상세히 설명한다. 다만, 동일구성에 의해 동일기능을 수행하는 부분에 대해서는, 도면이 달라지더라도 동일부호를 유지함으로써, 그 상세한 설명을 생략하는 경우가 있다.
<기본구성>
본 발명의 이중보안기능을 가지는 SoC는, 프로그램 코드(15a)를 실행하는 CPU(10)와, SoC(2)에 전원인가시 맨 처음 상기 CPU(10)에 의한 부팅에 사용되는 부트코드를 저장하는 부트롬(13; Boot ROM)을 내부에 포함하는 SoC(2)이다.
CPU(10)는, SoC(2) 전체를 제어하고, 프로그램을 수행하는 중앙처리장치(central processing unit)이다.
부트롬(13) 내부의 부팅 프로그램 코드는, SoC(2) 제조과정에서 기록이 되며, 이후 수정이 불가능하다.
SoC(2)에는 내부메모리(11)가 구비된다. 이는 일반 SRAM으로서, 입력, 출력되는 데이터를 임시로 저장하거나, CPU(10)가 필요로 하는 데이터를 임시로 저장하는 메모리이다.
SoC(2)에는, 시큐어 엔진(30)에서 사용할 난수발생기인 TRNG(22; True Random Number Generator)가 구비된다.
그리고, SoC(2)에는, 플래시메모리(15)와, 시큐어 엔진(30)이 구비되어 있다.
상기 플래시메모리(15)는, 시그니쳐 키(15b)가 상기 프로그램 코드(15a)와 함께 SoC(2) 제조시에 저장되는 메모리이다. 플래시메모리(15) 내의 상기 시그니쳐 키(15b)가 저장되는 위치는, 상기 부트코드에만 기록되어 있다. 플래시메모리(15)는 SoC(2) 외부에서 SoC(2)와 연결되어 있다.
SoC의 제조시에, 해시 알고리즘에 의해 상기 프로그램 코드(15a)로부터 해시 데이터가 생성되고, 이 해시데이터가 암호화키(제조사만이 알고 있는 퍼블릭키)에 의해 암호화되어 시그니쳐 키(15b)가 생성된다. 이처럼 프로그램 코드(15a)와 이로부터 생성된 시그니쳐 키(15b)가 모두 플래시메모리(15)에 저장됨으로써, 프로그램 코드(15a)의 이중 보호장치가 준비된다.
참고로, 플래시메모리는 데이터폭에 제약이 있어서, CPU가 처리하는 32bit 단위보다 작다. 따라서 이 속도차를 보상하여 전체적인 CPU 처리속도를 높일 필요가 있다. 이를 위해 사용되는 것이 캐시 컨트롤러(Cache Controller)이다.
이로써, 플래시메모리(15)에 저장되어 있는 전체 프로그램 코드(15a) 중에서 CPU가 필요로 하는 부분의 프로그램 코드를 미리 읽어서 캐시 메모리에 저장해 놓고, CPU가 캐시 메모리에 있는 프로그램 코드를 읽을 수 있도록 하여, CPU의 동작속도가 늦어지지 않도록 보상한다.
상기 시큐어 엔진(30)은, 시큐어 부팅시에, 상기 프로그램 코드(15a)가 변조되지 않은 것으로 검증된 경우에만 상기 CPU(10)에 의한 부팅을 허용하도록 제어하는 하드웨어이다. 시큐어 엔진(30)은, 시큐어 알고리즘이 구동되는 블록으로서, SoC(2) 내부에 하드웨어로 구현되어 있다.
여기서, 상기 시큐어 엔진(30)은, 내부에 서브블럭으로서 해시알고리즘 처리 블럭(30a)과, 시그니쳐검증 처리블럭(30b)을 포함하여 이루어짐을 특징으로 한다. 즉, 시큐어 부트를 위해 프로그램 코드의 왜곡여부를 검사하는 단계는 이중으로 구성된다.
상기 해시알고리즘 처리블럭(30a)은, SoC 내부 시큐어 엔진에서 해시알고리즘에 의해 상기 플래시메모리(15)에 저장되어 있는 프로그램 코드(15a)로부터 커런 해시데이터를 생성하는 블럭이다. 해시데이터는, 프로그램 코드에 따라 1:1로 매칭되어 유일하게 정해지는 데이터이다.
상기 해시알고리즘 처리블럭(30a)은, SHA1, SHA-256, SHA-384 등 해시 알고리즘을 처리하는 시큐어 엔진 내부의 하드웨어 블록으로서, 원본 프로그램 코드(15a)로부터 특정하고 유일한 해시데이터를 변환생성하는 알고리즘을 가지고 있다. 이 해시알고리즘은, 제3자는 해시데이터로부터 원래의 프로그램 코드(15a)를 복구할 수 없어야 하며, 동일한 출력을 가지는 서로 다른 데이터를 찾을 수 없도록 고안된 알고리즘이다. SHA는 Secure Hash Algorithm이다. 프로그램 코드(15a)의 크기가 64KB ~ 512KB인데, 이 프로그램 코드(15a)를 SHA-256의 해시알고리즘에 통과시키면, 256bit의 유니크한 데이터가 출력이 된다.
상기 시그니쳐검증 처리블럭(30b)은, 복호화키에 의해 상기 플래시메모리(15a)에 저장되어 있는 시그니쳐 키(15b)를 복호화하여 복호화된 시그니쳐 를 생성한 후, 상기 커런트 해시데이터와 상기 복호화된 시그니쳐 키가 동일한 경우에 상기 프로그램 코드(15a)가 변조되지 않은 것으로 검증하는 블럭이다. 즉, 프로그램 코드와 함께 또는 프로그램 코드 내부에 포함되어 플래시메모리에 저장되어 있는 시그니쳐 키가 유효한 것인지를 검증하는 단계이다. 복호화의 장소는, 시그니쳐검증 처리블럭(30b) 내부이다.
시그니쳐검증 처리블럭(30b)은, RSA(Rivest Shamir Adleman), ECC(Elliptic Curve Cryptosystem) 등 주로 키 인증에 사용하는 알고리즘을 처리하는 블록으로, 퍼블릭키(publick key)로 암호화된 데이터를 받아서, 시그니쳐검증 처리블럭(30b)이 가지고 있는 프라이빗키(private key)를 이용하여, 암호화된 데이터를 풀어내는 기능을 한다. 복호화된 시그니쳐 키는 결국 해시데이터가 된다.
따라서 해시알고리즘 처리블럭(30a)에 의해 생성된 해시데이터와, 시그니쳐검증 처리블럭(30b)에 의해 생성된 복호화된 시그니쳐 키가 동일한지를 비교하여, 동일한 값이면 시큐어 부트 패스(pass)이므로, 다음 단계, 즉 CPU에 의한 부팅과정으로 진행을 하고, 값이 다르면 시큐어 부트 패일(fail)이므로, 그 상태에서 동작을 멈춘다. 즉, 어플리케이션 소프트웨어의 변조 여부를 확인하여, 정상적인 어플리케이션 소프트웨어(program code)로 판별이 된 경우에만, SoC(CPU)가 부팅되도록 한다.
<듀얼모드 부팅>
SoC에서 실행되는 어플리케이션 프로그램 중에는, 시큐어 부트가 필요한 것이 있는가 하면, 필요치 않은 것도 있다. 따라서 SoC 제조자로서는, 이들 두 가지 타입의 어플리케이션 프로그램에 모두 적용될 수 있는 SoC를 제공함으로써, 하나의 SoC를 가지고 모든 타입을 지원할 수 있다. 이를 위해 본 발명에서는, SoC가 부트모드(boot mode)로서 시큐어(secure) 부트모드와 일반(normal) 부트모드를 모두 지원할 수 있도록 설계하고, SoC 제조단계에서 그 중 하나를 선택하여 지정할 수 있도록 함이 바람직하다.
여기서, 시큐어 부트모드인지 일반 부트모드인지를 지정하는 값을 저장(프로그램)하는 OTP (21; One Time Programmable)가 SoC 내부에 더 구비되어도 좋다. OTP에 대한 프로그래밍은, SoC의 제조과정에서 진행되고, 특성상 단 한 번만 쓰기(write)가 가능한 구조를 가지고 있으므로, 추후 변경이 불가능하다. 따라서, 시큐어 부트모드로 최초 지정이 되면, 이후 부트모드를 변경하는 것은 불가능하다. 예를 들어, OTP에 쓰기 되는 값이 "1"이면 시큐어 부트모드, "0"이면 일반 부트모드를 지정하는 값으로 설정할 수 있다.
그리고 롬 부팅 과정에서 상기 부트코드에 의해 OTP(21)의 값을 읽는다. 이 과정이 부트모드 검출단계(s11, s12)이다. 즉, OTP의 값에 따라서 부트 시퀀스가 변경된다.
이 OTP(21)의 값이 상기 일반 부트모드의 값이면, 시큐어 부트 관련회로, 즉 상기 시큐어 엔진(30)은 동작되지 않는다. 따라서, 프로그램 code와 data가 왜곡되었는지 여부를 판별하지 않고, CUP(10)에 의한 부팅이 계속된다.
반대로, 이 OTP(21)의 값이 상기 시큐어 부트모드의 값이면, SoC 내부에서 시큐어 부트에 관련된 회로, 즉 상기 시큐어 엔진(30)이 동작된다. 이로써, 플래시메모리에 저장된 프로그램 코드와 데이터(시그니쳐 키)가 왜곡되었는지 여부를 판별하여, 왜곡(변형)이 있으면 부팅을 중단한다. 이 과정은, 기본구성에서 이미 설명된 바와 동일하다.
참고로 시큐어키(Secure key) 블럭은, 시큐어 엔진에서 사용할 키값을 저장하는 장소로서, 플랫폼키(Platform key), 디바이스 유니크키(Device Unique Key), 디바이스ID(Device ID) 등이 있다
<직접 로딩 및 시큐어 부팅시간 단축>
여기서 상기 시큐어 엔진(30)에 의해 제어되어 상기 플래시메모리(15)에 억세스하는 QSPI 컨트롤러(12a)와, 상기 시큐어 엔진(30) 내부에 마련된 시큐어메모 리(30c)가 더 구비되어도 좋다. 그리고 상기 해시알고리즘 처리블럭(30a)은, 상기 QSPI 컨트롤러(12a)를 통해 상기 플래시메모리(15)에 저장된 프로그램 코드(15a) 중 처리대상이 되는 부분만을 상기 시큐어메모리(30c)로 직접 로드하여 처리하도록 구성됨이 바람직하다.
QSPI 컨트롤러(12a)는, SoC 외부에 있는 플래시메모리(15)를 억세스하는 블록으로, 플래시메모리에 기록되어 있는 유저 어플리케이션 프로그램 코드(15a)를 읽어서 SoC(2) 내부로 전달하는 기능블록이다.
시큐어메모리(30c)는, 시큐어 SRAM으로서, 시큐어 엔진 내부에 있는 제어기를 통해서만 접근 가능한 메모리이고, 시큐어 부팅에 필요한 데이터를 저장하는 공간이다.
이처럼, 해시알고리즘의 처리를 SoC의 내부메모리가 아닌 시큐어메모리(30c)에서 하게 되어 보안에 유리하고, 그 처리대상이 되는 부분만을 로드하므로 필요 메모리의 크기를 줄이고, 처리속도도 향상시킬 수 있다.
DMA(Direct Memory Access)는, 보호되어야 할 데이터를 주고받을 수 있는 데이터 통로로서, 시큐어 엔진에서 직접 메모리를 억세스하여 처리한다.
시큐어 부팅시간의 단축은, 이처럼 상기 설명된 하드웨어 방식에 의한 프로그램 코드의 검증과 함께, 시큐어 엔진에 의해 프로그램 코드가 플래시메모리에서 시큐어메모리로 QSPI 컨트롤러를 통해 직접 읽히는 구성에 의해 달성될 수 있다. 이는, 프로그램 코드가 플래시메모리에서 SoC 내부의 내부메모리로 복사되는 종래기술의 동작을 없앤 것이다. 종래에는 이러한 복사 후에 시큐어 엔진이 동작되었으므로, 시큐어 부팅시간이 매우 길었다. 본 발명에서는, 플래시메모리에서 프로그램 코드를 바로 읽어서 시큐어 엔진이 동작하므로, 시큐어 부팅시간을 줄일 수 있다.
< JTAG 디버거 봉쇄>
여기서, SoC(2)에는, JTAG 디버거(14)와, 시큐리티 이네이블 회로(32)와, 디버그 인터페이스 회로(33)가 더 포함되어도 좋다.
상기 JTAG 디버거(14)는, SoC(2)의 외부에 연결된 프로그램 동작 검증용 블럭이다. JTAG 디버거 인터페이스는, CPU의 내부 동작상태를 확인할 수 있고, 내부메모리(시스템메모리)의 내용을 읽어볼 수 있는 통로로서, 소프트웨어 개발시 사용된다.
상기 시큐리티 이네이블 회로(32)는, 시큐어 부팅시에 단절신호를 생성하는 회로이다. 시큐어 부트 검출신호에 의해서 디버그 인터페이스가 디스에이블된다.
상기 디버그 인터페이스 회로(33)는, 상기 단절신호를 받아서 상기 JTAG 디버거(14)와 SoC(2) 사이의 연결을 영구적으로 끊는 회로이다.
<SoC의 보안방법>
상기와 같은 구성을 가지는 SoC(2)의 이중보안방법은, 준비단계와, 시큐어 부팅단계(s14~s32)로 이루어진다.
상기 준비단계는, 해시 알고리즘에 의해 상기 프로그램 코드(15a)로부터 생성된 해시데이터가 암호화키에 의해 암호화되어 생성된 시그니쳐 키(15b)가 상기 프로그램 코드(15a)와 함께 SoC(2) 제조시에 플래시메모리(15)에 저장되는 단계이다.
상기 시큐어 부팅단계(s14~s32)는, 시큐어 부팅시에, 상기 프로그램 코드(15a)가 변조되지 않은 것으로 검증된 경우(s30의 Yes)에만 상기 CPU(10)에 의한 부팅을 허용(s33)하도록 제어되는 시큐어 엔진(30)이 작동되는 단계이다.
먼저, 파워온 및 부트모드 검출(s11)단계인데, 이는 시큐어 모드로 부트할지를 확인하는 단계이다. 여기서, 롬부트 코드에 따라 OTP에 저장된 시큐어 이네이블값을 확인(s12)하여, 시큐어 모드이면 JTAG 디버그 인터페이스를 디스에이블(s13)시킴이 바람직하다. 그리고 시큐어 엔진이 동작하도록 CPU가 트리거를 한다.
그리고 상기 시큐어 부팅단계(s14~s32)는, 해시알고리즘 처리단계(s14~s21)와, 시그니쳐검증 처리단계(s22~s32)를 포함하여 이루어진다.
상기 해시알고리즘 처리단계(s14~s21)는, 해시 알고리즘에 의해 상기 플래시메모리(15)에 저장되어 있는 프로그램 코드(15a)(s14)로부터 커런트 해시데이터를 생성(s15~s21)하는 단계이다.
즉, 시큐어 엔진이 플래시메모리에서 프로그램 코드를 읽어서(s14) 해시알고리즘을 동작(s15)시켜서 이번 부팅에서의 해시데이터인 커런트 해시데이터를 생성한다. 프로그램 코드 전체에 대해서 암호화 알고리즘이 동작(해시방식)(s20)을 하여 만들어지는 해시데이터를 시큐어엔진 내부에 저장(s21)한다.
상기 시그니쳐검증 처리단계(s22~s32)는, 복호화키에 의해 상기 플래시메모리(15)에 저장되어 있는 시그니쳐 키(15b)를 복호화하여 복호화된 시그니쳐 를 생성(s24)한다. 즉, 플래시메모리의 미리 정해진 위치에 미리 저장되어 있는 시그니쳐 데이터를 읽어(s22, s23)온다. 시그니쳐 데이터를 복호화를 하는 동작을 시큐어 엔진에서 수행(s24)한다.
그 후, 상기 커런트 해시데이터와 상기 복호화된 시그니쳐 키가 동일(s25, s30)한 경우(s30의 Yes)에 상기 프로그램 코드(15a)가 변조되지 않은 것으로 검증하는 단계이다. 즉, 복호화된 결과가 위 4번에서 생성된 해시데이터와 동일하면, 프로그램 코드가 검증 패스(pass)된 것이고. 두 개의 값이 다르면, 프로그램 코드가 검증 패일(fail)된 것이다. (key verify 처리)
플래시메모리에 저장된 프로그램 코드가 검증 패스가 되면 CPU에 의한 부팅을 허용하고, 검증 패일이 되면, 그 상태에서 SoC의 부팅이 정지된다.(아무런 동작을 하지 못하도록 부트롬 코드는 무한루프에서 빠져나오지 못함)
이상, 본 발명에 대해 구체적 실시예를 들어서 상세히 설명하였으나, 본 발명은 이에 한정되지 않으며, 청구범위에 기재된 범위 내에서 이루어진 변형, 개량, 변경은 모두, 본 발명의 범위에 속하는 것으로 해석되어야 한다.
본 발명은, 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법의 산업에 이용될 수 있다.
2: SoC
10: CPU
11: 내부메모리(일반 SRAM)
12: QSPI 컨트롤러
13: 부트롬
14: JTAG 디버거
15: 플래시메모리
21: OTP(One Time Programmable)
22: TRNG(True Random Number Generator)
30: 시큐어엔진
30a: 해시 알고리즘 처리블럭
30b: (시그니쳐)키 검증 처리블럭
30c: 시큐어메모리
31: DMA
32: 시큐리티 이네이블 회로
33: 디버그 인터페이스

Claims (5)

  1. 프로그램 코드를 실행하는 CPU와, 전원인가시 상기 CPU에 의한 부팅에 사용되는 부트코드를 저장하는 부트롬을 내부에 포함하는 SoC에 있어서,
    해시 알고리즘에 의해 상기 프로그램 코드로부터 생성된 해시데이터가 암호화키에 의해 암호화되어 생성된 시그니쳐 가 상기 프로그램 코드와 함께 SoC 제조시에 저장되어 있는 플래시메모리와,
    시큐어 부팅시에, 상기 프로그램 코드가 변조되지 않은 것으로 검증된 경우에만 상기 CPU에 의한 부팅을 허용하도록 제어되는 시큐어 엔진
    이 구비되고,
    상기 시큐어 엔진은,
    해시 알고리즘에 의해 상기 플래시메모리에 저장되어 있는 프로그램 코드로부터 커런트 해시데이터를 생성하는 해시알고리즘 처리블럭과,
    복호화키에 의해 상기 플래시메모리에 저장되어 있는 시그니쳐 키를 복호화하여 복호화된 시그니쳐 를 생성한 후, 상기 커런트 해시데이터와 상기 복호화된 시그니쳐 키가 동일한 경우에 상기 프로그램 코드가 변조되지 않은 것으로 검증하는 시그니쳐검증 처리블럭
    을 포함하여 이루어짐을 특징으로 하는 이중보안기능을 가지는 SoC.
  2. 청구항 1에 있어서,
    시큐어 부트모드인지 일반 부트모드인지를 지정하는 값을 저장하는 OTP가 상기 SoC 내부에 더 구비되고,
    상기 부트코드에 의해 읽혀진 상기 OTP의 값이 상기 시큐어 부트모드의 지정값으로 확인되면, 상기 시큐어 엔진이 동작되도록 구성됨
    을 특징으로 하는 이중보안기능을 가지는 SoC.
  3. 청구항 1 또는 청구항 2에 있어서,
    상기 시큐어 엔진에 의해 제어되어 상기 플래시메모리에 억세스하는 QSPI 컨트롤러와,
    상기 시큐어 엔진 내부에 마련된 시큐어메모리
    가 더 구비되고,
    상기 해시알고리즘 처리블럭은, 상기 QSPI 컨트롤러를 통해 상기 플래시메모리에 저장된 프로그램 코드 중 처리대상이 되는 부분만을 상기 시큐어메모리로 직접 로드하여 처리하도록 구성됨
    을 특징으로 하는 이중보안기능을 가지는 SoC.
  4. 청구항 1 또는 청구항 2에 있어서,
    SoC의 외부에 연결된 JTAG 디버거와,
    시큐어 부팅시에 단절신호를 생성하는 시큐리티 이네이블 회로와,
    상기 단절신호를 받아서 상기 JTAG 디버거와 SoC 사이의 연결을 끊는 디버그 인터페이스 회로
    가 더 포함됨을 특징으로 하는 이중보안기능을 가지는 SoC.
  5. 프로그램 코드를 실행하는 CPU와, 전원인가시 상기 CPU에 의한 부팅에 사용되는 부트코드를 저장하는 부트롬을 내부에 포함하는 SoC의 이중보안방법에 있어서,
    해시 알고리즘에 의해 상기 프로그램 코드로부터 생성된 해시데이터가 암호화키에 의해 암호화되어 생성된 시그니쳐 가 상기 프로그램 코드와 함께 SoC 제조시에 플래시메모리에 저장되는 준비단계와,
    시큐어 부팅시에, 상기 프로그램 코드가 변조되지 않은 것으로 검증된 경우에만 상기 CPU에 의한 부팅을 허용하도록 제어되는 시큐어 엔진이 작동되는 시큐어 부팅단계
    로 이루어지고,
    상기 시큐어 부팅단계는,
    해시 알고리즘에 의해 상기 플래시메모리에 저장되어 있는 프로그램 코드로부터 커런트 해시데이터를 생성하는 해시알고리즘 처리단계와,
    복호화키에 의해 상기 플래시메모리에 저장되어 있는 시그니쳐 키를 복호화하여 복호화된 시그니쳐 를 생성한 후, 상기 커런트 해시데이터와 상기 복호화된 시그니쳐 키가 동일한 경우에 상기 프로그램 코드가 변조되지 않은 것으로 검증하는 시그니쳐검증 처리단계
    를 포함하여 이루어짐을 특징으로 하는 SoC의 이중보안방법.
KR1020160088510A 2016-07-13 2016-07-13 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법 KR101954439B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020160088510A KR101954439B1 (ko) 2016-07-13 2016-07-13 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160088510A KR101954439B1 (ko) 2016-07-13 2016-07-13 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020180060707A Division KR101988404B1 (ko) 2018-05-28 2018-05-28 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법

Publications (2)

Publication Number Publication Date
KR20180007717A true KR20180007717A (ko) 2018-01-24
KR101954439B1 KR101954439B1 (ko) 2019-03-06

Family

ID=61029347

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160088510A KR101954439B1 (ko) 2016-07-13 2016-07-13 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법

Country Status (1)

Country Link
KR (1) KR101954439B1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111095213A (zh) * 2018-08-23 2020-05-01 深圳市汇顶科技股份有限公司 嵌入式程序的安全引导方法、装置、设备及存储介质
CN111199058A (zh) * 2018-11-20 2020-05-26 硅实验室公司 用于确保数据的完整性和机密性的系统和方法
US20200313880A1 (en) * 2019-03-25 2020-10-01 Stmicroelectronics (Rousset) Sas Encryption and/or decryption key device, system and method
KR20230083925A (ko) 2021-12-03 2023-06-12 서울대학교산학협력단 정점의 특성을 예측하는 장치 및 방법

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040093741A (ko) * 2002-03-18 2004-11-08 모토로라 인코포레이티드 집적 회로 보안과 그 방법
KR20090007123A (ko) * 2007-07-13 2009-01-16 삼성전자주식회사 보안 부팅 방법 및 그 방법을 사용하는 반도체 메모리시스템
KR20090017746A (ko) * 2007-08-16 2009-02-19 삼성전자주식회사 부팅 시스템에서 부트 모드를 확인하기 위한 장치 및 방법
KR20090037712A (ko) * 2007-10-12 2009-04-16 삼성전자주식회사 보안 부트-업되는 전자 장치, 그것의 해쉬값 계산 방법 및부트-업 방법
JP2013223251A (ja) * 2008-11-24 2013-10-28 Certicom Corp ハードウェアベースセキュリティのためのシステムおよび方法
KR20140073384A (ko) * 2012-12-06 2014-06-16 삼성전자주식회사 보안 부팅을 수행하는 칩 시스템과 이를 이용하는 화상형성장치 및 그 보안 부팅 방법
KR20150026202A (ko) 2013-09-02 2015-03-11 삼성전자주식회사 스캔-체인으로 연결된 플립-플롭들의 값들을 jtag 인터페이스를 이용하여 재구성할 수 있는 집적 회로, 이의 동작 방법, 및 상기 집적 회로를 포함하는 장치들

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040093741A (ko) * 2002-03-18 2004-11-08 모토로라 인코포레이티드 집적 회로 보안과 그 방법
KR20090007123A (ko) * 2007-07-13 2009-01-16 삼성전자주식회사 보안 부팅 방법 및 그 방법을 사용하는 반도체 메모리시스템
KR20090017746A (ko) * 2007-08-16 2009-02-19 삼성전자주식회사 부팅 시스템에서 부트 모드를 확인하기 위한 장치 및 방법
KR20090037712A (ko) * 2007-10-12 2009-04-16 삼성전자주식회사 보안 부트-업되는 전자 장치, 그것의 해쉬값 계산 방법 및부트-업 방법
JP2013223251A (ja) * 2008-11-24 2013-10-28 Certicom Corp ハードウェアベースセキュリティのためのシステムおよび方法
KR20140073384A (ko) * 2012-12-06 2014-06-16 삼성전자주식회사 보안 부팅을 수행하는 칩 시스템과 이를 이용하는 화상형성장치 및 그 보안 부팅 방법
KR20150026202A (ko) 2013-09-02 2015-03-11 삼성전자주식회사 스캔-체인으로 연결된 플립-플롭들의 값들을 jtag 인터페이스를 이용하여 재구성할 수 있는 집적 회로, 이의 동작 방법, 및 상기 집적 회로를 포함하는 장치들

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111095213A (zh) * 2018-08-23 2020-05-01 深圳市汇顶科技股份有限公司 嵌入式程序的安全引导方法、装置、设备及存储介质
CN111199058A (zh) * 2018-11-20 2020-05-26 硅实验室公司 用于确保数据的完整性和机密性的系统和方法
CN111199058B (zh) * 2018-11-20 2023-04-07 硅实验室公司 用于确保数据的完整性和机密性的系统和方法
US20200313880A1 (en) * 2019-03-25 2020-10-01 Stmicroelectronics (Rousset) Sas Encryption and/or decryption key device, system and method
KR20230083925A (ko) 2021-12-03 2023-06-12 서울대학교산학협력단 정점의 특성을 예측하는 장치 및 방법

Also Published As

Publication number Publication date
KR101954439B1 (ko) 2019-03-06

Similar Documents

Publication Publication Date Title
US11455397B2 (en) Secure boot assist for devices, and related systems, methods and devices
KR100792287B1 (ko) 자체 생성한 암호화키를 이용한 보안방법 및 이를 적용한보안장치
JP5285075B2 (ja) セキュア・カーネル設計による安全基準の差別化
US7461268B2 (en) E-fuses for storing security version data
US8533492B2 (en) Electronic device, key generation program, recording medium, and key generation method
US8418259B2 (en) TPM-based license activation and validation
JP4912879B2 (ja) プロセッサの保護された資源へのアクセスに対するセキュリティ保護方法
US20150186679A1 (en) Secure processor system without need for manufacturer and user to know encryption information of each other
CN110990084B (zh) 芯片的安全启动方法、装置、存储介质和终端
JP6373888B2 (ja) 情報処理装置及び制御方法
US20090086974A1 (en) Support for Multiple Security Policies on a Unified Authentication Architecture
US20050021968A1 (en) Method for performing a trusted firmware/bios update
KR101954439B1 (ko) 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법
JP2003022218A (ja) マイクロコンピュータシステムのメモリ装置に格納されたデータの少なくとも一部分を活性化又は不活性化するための方法及びマイクロコンピュータシステム
TW202141321A (zh) 安全儲存及載入韌體的方法及電子裝置
CN109814934B (zh) 数据处理方法、装置、可读介质和系统
JP4791250B2 (ja) マイクロコンピュータおよびそのソフトウェア改竄防止方法
TWI760752B (zh) 應用加速驗證映像檔方法的系統
US11270003B2 (en) Semiconductor device including secure patchable ROM and patch method thereof
KR101988404B1 (ko) 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법
WO2019059148A1 (ja) Bios管理装置、bios管理システム、bios管理方法、及び、bios管理プログラムが格納された記録媒体
CN114995918A (zh) 基板管理控制器的启动方法、配置方法、装置及电子设备
KR101711926B1 (ko) 보안기능을 가지는 SoC 및 SoC의 보안방법
CN114816549B (zh) 一种保护bootloader及其环境变量的方法及系统
CN117708896A (zh) 用于保护嵌入式设备固件数据的方法以及嵌入式设备

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant