KR102415005B1 - 실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법 - Google Patents

실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법 Download PDF

Info

Publication number
KR102415005B1
KR102415005B1 KR1020190102287A KR20190102287A KR102415005B1 KR 102415005 B1 KR102415005 B1 KR 102415005B1 KR 1020190102287 A KR1020190102287 A KR 1020190102287A KR 20190102287 A KR20190102287 A KR 20190102287A KR 102415005 B1 KR102415005 B1 KR 102415005B1
Authority
KR
South Korea
Prior art keywords
hash value
executable code
block
integrity
blocks
Prior art date
Application number
KR1020190102287A
Other languages
English (en)
Other versions
KR20210022915A (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 KR1020190102287A priority Critical patent/KR102415005B1/ko
Priority to US16/940,146 priority patent/US11336444B2/en
Publication of KR20210022915A publication Critical patent/KR20210022915A/ko
Application granted granted Critical
Publication of KR102415005B1 publication Critical patent/KR102415005B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0877Generation of secret information including derivation or calculation of cryptographic keys or passwords using additional device, e.g. trusted platform module [TPM], smartcard, USB or hardware security module [HSM]
    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
    • H04L9/0897Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage involving additional devices, e.g. trusted platform module [TPM], smartcard or USB
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0625Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation with splitting of the data block into left and right halves, e.g. Feistel based algorithms, DES, FEAL, IDEA or KASUMI
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0869Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Power Engineering (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명의 실시 예에 따른 디바이스에서 실행 코드의 무결성 검증 방법은, 마이크로 콘트롤 유닛(MCU)에서 실행 코드를 복수의 블록들로 분할하는 단계, 상기 MCU에서 상기 분할된 블록들에 대응하는 해시값들을 생성하는 단계, 하드웨어 보안 모듈(HSM)에서 상기 생성된 해시값들을 저장하는 단계, 상기 실행 코드를 부팅할 때, 상기 MCU에서 상기 복수의 블록들 중에서 적어도 하나의 해시값을 계산하는 단계, 및 상기 HSM에서 상기 계산된 해시값과 상기 HSM에 저장된 해시값들 중에서 상기 계산된 해시값에 대응하는 해시값을 비교하는 단계를 포함할 수 있다.

Description

실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법{HARDWARE SECURITY MODULE FOR VERIFYING EXECUTION CODE, DEVICE HAVING THE SAME, AND OPERATING METHOD THEREOF}
본 발명은 실행 코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법에 관한 것이다.
일반적으로, 디바이스의 동작과정에서 보안적 측면에서 가장 중요한 시점은 부팅할 때이다. 부팅과정에서 실행 코드의 무결성을 검증하는 것이 무엇보다 중요하다. 많은 공격자는 장치의 전원이 꺼진 상태에서 소프트웨어를 수정하려고 시도한다. 예를 들어, 플래시 메모리에 있는 소프트웨어 이미지를 훼손된 것으로 대체하려는 공격을 시도한다. 따라서 시스템이 플래시 메모리에서 이미지를 부팅하는 경우, 그것이 진본인지 여부를 먼저 확인하지 않으면 시스템이 취약하게 된다.
한국공개특허: 10-2015-0072061, 공개일: 2015년 6월 29일, 제목: 모바일 신뢰 모듈 기반 서비스 보안 장치 및 방법. 중국공개특허: CN 108399339, 공개일: 2018년 8월 14일, 제목: Security chip-based trusted startup method.
본 발명의 목적은 신뢰 체인을 형성하지 않고 실행 코드를 안전하게 검증하는 디바이스 및 방법을 제공하는 데 있다.
본 발명의 목적은 저사양 디바이스에서 실행 코드 검증 효율을 향상시키는 실행 코드를 검증하는 디바이스 및 그것의 방법을 제공하는데 있다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재들로부터 당업자에게 명확하게 이해될 수 있을 것이다
본 발명의 실시 예에 따른 디바이스에서 실행 코드의 무결성 검증 방법은, 마이크로 콘트롤 유닛(Micro Control Unit; MCU)에서 실행 코드를 복수의 블록들로 분할하는 단계; 상기 MCU에서 상기 분할된 블록들에 대응하는 해시값들을 생성하는 단계; 하드웨어 보안 모듈(Hardware Security Module; HSM)에서 상기 생성된 해시값들을 저장하는 단계; 상기 실행 코드를 부팅할 때, 상기 MCU에서 상기 복수의 블록들 중에서 적어도 하나의 해시값을 계산하는 단계; 및 상기 HSM에서 상기 계산된 해시값과 상기 HSM에 저장된 해시값들 중에서 상기 계산된 해시값에 대응하는 해시값을 비교하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 분할된 블록들의 크기는 블록 마다 서로 다른 것을 특징으로 한다.
실시 예에 있어서, 상기 해시값들을 생성하는 단계는, 상기 분할된 블록들에서 해시값을 계산하는 시작점 혹은 끝점을 다르게 설정하는 단계를 포함하는 것을 특징으로 한다.
실시 예에 있어서, 상기 해시값들을 생성하는 단계는, 상기 시작점에 대응하는 제 1 옵셋 값 혹은 상기 끝점에 대응하는 제 2 옵셋 값을 상기 분할된 블록들 중에서 대응하는 블록에 추가하는 단계를 더 포함하는 것을 특징으로 한다.
실시 예에 있어서, 상기 HSM에서 난수 발생기를 이용하여 상기 시작점에 대응하는 상기 제 1 옵셋 값과 상기 끝점에 대응하는 제 2 옵셋 값을 생성하는 단계; 및 상기 HSM에서 상기 제 1 및 제 2 옵셋 값들을 저장하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 해시값들을 생성하는 단계는, 상기 분할된 블록들 중에서 적어도 하나의 블록의 해시값을 생성하기 위하여, 상기 적어도 하나의 블록의 시작점에서 상기 제 1 옵셋 값을 뺀 값부터 상기 적어도 하나의 블록의 끝점에서 상기 제 2 옵셋 값을 더한 값까지를 블록 범위로 설정하는 단계를 더 포함하는 것을 특징으로 한다.
실시 예에 있어서, 상기 분할된 블록들 중에서 첫번째 블록의 블록 범위는 상기 첫번째 블록의 시작점에서 상기 첫번째 블록의 끝점에 상기 제 2 옵셋 값을 더한 값까지인 것을 특징으로 한다.
실시 예에 있어서, 상기 분할된 블록들 중에서 마지막 블록의 블록 범위는 상기 마지막 블록의 시작점에서 상기 제 1 옵셋 값을 뺀 값부터 상기 첫번째 블록의 끝점까지인 것을 특징으로 한다.
실시 예에 있어서, 상기 생성된 해시값들은 상기 디바이스를 제조할 때 상기 HSM에 저장되는 것을 특징으로 한다.
실시 예에 있어서, 상기 HSM에서 상기 분할된 블록들에 대한 전체 블록에 대한 무결성이 검증되는 것을 특징으로 한다.
실시 예에 있어서, 상기 HSM에서 상기 분할된 블록들 중에서 어느 하나의 블록에 대한 무결성이 검증되는 것을 특징으로 한다.
실시 예에 있어서, 상기 어느 하나의 블록에 대응하는 블록 번호를 랜덤하게 생성하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 어느 하나의 블록에 대한 무결성 검증 동작은 상기 MCU에서 상기 HSM에 제공하는 보안 기능을 호출할 때 수행되는 것을 특징으로 한다.
본 발명의 실시 예에 따른 실행 코드의 무결성을 검증하기 위한 하드웨어 보안모듈은: 적어도 하나의 프로세서; 및 상기 적어도 하나의 프로세서에서 실행되는 적어도 하나의 인스트럭션을 저장하는 메모리를 포함하고, 상기 적어도 하나의 인스트럭션은, 디바이스를 제조할 때, MCU(Micro Control Unit)로부터 상기 복수의 블록들로 분할된 실행 코드에 대응하는 해시값들을 수신하고; 상기 분할된 실행 코드에 대응하는 상기 해시값들을 저장하고; 상기 디바이스를 부팅할 때, 상기 MCU로부터 상기 복수의 블록들 중에서 적어도 하나의 해시값을 수신하고; 및 상기 적어도 하나의 해시값과 상기 저장된 해시값들 중에서 상기 적어도 하나의 해시값에 대응하는 해시값을 비교하도록 상기 적어도 하나의 프로세서에 실행되는 것을 특징으로 한다.
실시 예에 있어서, 상기 디바이스를 부팅할 때, 상기 복수의 블록들 전체에 대한 무결성이 검증되는 것을 특징으로 한다.
실시 예에 있어서, 상기 MCU로부터 보안 기능 호출을 수신할 때, 상기 복수의 블록들 중에서 어느 하나의 블록에 대한 무결성이 검증되는 것을 특징으로 한다.
실시 예에 있어서, 상기 어느 하나의 블록에 대응하는 블록 번호를 생성하는 난수 발생기를 더 포함할 수 있다.
실시 예에 있어서, 상기 복수의 블록들의 각각의 무결성을 검증하기 위한 블록 범위는 디바이스에 따라 서로 다르게 설정되는 것을 특징으로 한다.
본 발명의 실시 예에 따른 실행 코드의 무결성을 검증하는 디바이스는, 상기 디바이스를 제조할 때 상기 실행 코드를 복수의 블록들로 분할하고, 상기 분할된 블록들에 대응하는 해시값들을 생성하는 마이크로 콘트롤 유닛; 및 상기 디바이스를 제조할 때 상기 생성된 해시값들을 저장하고, 상기 실행 코드를 부팅할 때 상기 마이크로 콘트롤 유닛으로부터 상기 복수의 블록들 중에서 적어도 하나의 해시값을 수신하고, 상기 수신된 해시값과 상기 저장된 해시값들 중에서 상기 수신된 해시값에 대응하는 해시값을 비교하고, 상기 비교 결과에 따라 상기 실행 코드의 무결성을 검증하는 하드웨어 보안모듈을 포함할 수 있다.
실시 예에 있어서, 상기 복수의 블록들의 블록 범위는 상기 하드웨어 보안모듈의 난수 발생기에서 생성된 적어도 하나의 옵셋 값을 이용하여 디바이스 별로 다르게 설정되는 것을 특징으로 한다.
본 발명의 실시 예에 따른 실행 코드의 무결성을 검증하는 하드웨어 보안모듈, 그것을 갖는 디바이스 및 그것의 동작 방법은, 실행 코드를 분할하고, 분할된 실행 코드에 대응하는 해시값을 이용하여 부팅 혹은 필요에 따라 실행 코드에 대한 무결성을 검증함으로써 보다 안전한 디바이스 동작을 기대할 수 있다.
이하에 첨부되는 도면들은 본 실시 예에 관한 이해를 돕기 위한 것으로, 상세한 설명과 함께 실시 예들을 제공한다. 다만, 본 실시예의 기술적 특징이 특정 도면에 한정되는 것은 아니며, 각 도면에서 개시하는 특징들은 서로 조합되어 새로운 실시 예로 구성될 수 있다.
도 1은 일반적인 디바이스(100)의 실행 코드 무결성 검증 방법을 예시적으로 보여주는 도면이다.
도 2는 일반적으로 하드웨어 보안모듈(200)을 이용하여 실행 코드의 무결성을 검증하는 방법을 예시적으로 보여주는 도면이다.
도 3은 본 발명의 실시 예에 따른 디바이스(300)를 예시적으로 보여주는 도면이다.
도 4는 본 발명의 실시 예에 따른 실행 코드의 무결성 검증을 위한 실행 코드 블록 단위 분할 방법을 예시적으로 보여주는 도면이다.
도 5는 본 발명의 실시 예에 따른 디바이스에서 하드웨어 보안 모듈(320)에 무결성 값이 저장되는 과정을 예시적으로 보여주는 도면이다.
도 6은 본 발명의 실시 예에 따른 메인 MCU(310)와 하드웨어 보안 모듈(320)의 사이의 명령어 기본 형식을 예시적으로 보여주는 도면이다.
도 7은 본 발명의 실시 예에 따른 메인 MCU(310)의 실행 코드에 대한 전체 블록(전체 코드)에 대한 무결성 검증 동작을 예시적으로 보여주는 흐름도이다.
도 8은 본 발명의 실시 예에 따른 메인 MCU(310)의 실행 코드의 한 개 블록에 대한 무결성 검증 동작을 예시적으로 보여주는 흐름도이다.
도 9는 본 발명의 실시 예에 따른 실행 코드의 무결성을 검증하는 디바이스 의 동작 방법을 예시적으로 보여주는 흐름도이다.
도 10은 본 발명의 실시 예에 따른 전자 장치(1000)를 예시적으로 보여주는 도면이다.
아래에서는 도면들을 이용하여 본 발명의 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있을 정도로 본 발명의 내용을 명확하고 상세하게 기재할 것이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시 예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 제 1, 제 2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로 사용될 수 있다. 예를 들어, 본 발명의 권리 범위로부터 이탈되지 않은 채 제 1 구성요소는 제 2 구성요소로 명명될 수 있고, 유사하게 제 2 구성요소도 제 1 구성요소로 명명될 수 있다. 어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 혹은 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 혹은 "가지다" 등의 용어는 실시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 혹은 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 혹은 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 혹은 이들을 조합한 것들의 존재 혹은 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다. 다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미이다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미인 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
일반적으로 고사양의 디바이스(예를 들어, 스마트폰과 같은 스마트 단말)는 신뢰 체인(Chain of Trust)을 형성하여 부팅 과정을 수행하고 있다. 즉, 신뢰할 수 있는 구성 요소부터 부팅이 시작되고, 다음 소프트웨어를 실행되기 전에 이를 인증하는 과정이 수행된다.
도 1은 일반적인 디바이스(100)의 실행 코드 무결성 검증 방법을 예시적으로 보여주는 도면이다. 도 1을 참조하면, 디바이스(100)의 전원이 켜지면, 디바이스(100)의 메인 MCU(마이크로 콘트롤 유닛, Micro Control Unit; 110)는 신뢰할 수 있는 위치에서 신뢰의 근원(root-of-trust) 코드를 실행하기 시작한다. 이 신뢰의 근원(root-of-trust) 코드를 실행하는 메모리는 통상적으로 메인 MCU(110) 내부의 ROM(Read Only Memory; 111)을 사용한다. 메인 MCU(110) 내부의 ROM(111)은 재 프로그래밍 공격(reprogramming attacks)으로 간단히 수정하거나 대체 할 수 없는 시스템의 유일한 구성 요소이다.
먼저, 신뢰 체인(Chain of Trust)을 형성하기 위해 ROM(111)에서 실행되는 코드는 외부의 플래시 메모리(120)에 저장되어 있는 부트로드의 실행 코드 무결성을 검증한다.
무결성 검증 방법은 다음과 같다. 부트로드의 실행 코드를 플래시 메모리(120)에 저장할 때, 이미 부트코드의 실행 코드의 해시 값에 대한 전자 서명 값(인증서)도 함께 실행 코드에 붙여서 플래시 메모리(120)에 함께 저장된다. 이 서명 값을 메인 MCU(110) 내부의 OTP(One Time Programmable) 메모리(112)에 저장되어 있는 공개키를 이용하여 복호화하여 해시 값이 계산된다. 계산된 해시 값은 현재의 부트로드의 실행 코드의 해시 값과 비교한다. 비교한 결과가 동일하면, 현재의 부트로드의 실행 코드의 무결성이 훼손되지 않았으므로, 부트로드는 메인 MCU(110) 내부의 SRAM(Static Random Access Memory; 113)에 옮겨 실행된다.
마찬가지로 부트로드는 외부의 플래시 메모리(112)에 저장되어 있는 OS(Operating System)의 실행 코드 무결성을 동일한 방법으로 검증한다. 이 후, 무결성이 훼손되지 않았으면, OS는 DRAM(Dynamic Random Access Memory; 130)에 로딩한 후 실행된다.
동일한 방법으로 응용 프로그램의 무결성도 검증하여 실행하게 된다. 이와 같이, 실행 코드와 함께 저장되어 있는 전자서명값(인증서)을 이용하여, 다음에 실행할 실행 코드의 무결성을 순차적으로 증명하는 방법이 있다.
상술된 바와 같이, 다음에 실행할 실행 코드의 무결성을 검증하기 위하여 실행 코드와 함께 저장되어 있는 전자서명값(인증서)을 이용하는 방법이 있다.
또한, 상술된 방법 이외에도, 실행 코드의 무결성 검증을 위해 사용되는 실행 코드의 해시 값을 안전하게 보관하기 위하여 하드웨어 보안모듈(Hardware Security Module; HSM)을 이용하는 방법이 있다. 즉, 훼손되지 않은 무결한 실행 코드의 해시 값을 물리적 해킹방지가 가능한 하드웨어 보안모듈에 저장하는 것이다.
도 2는 일반적으로 하드웨어 보안모듈(200)을 이용하여 실행 코드의 무결성을 검증하는 방법을 예시적으로 보여주는 도면이다. 도 2를 참조하면, OS 로더의 해시값, OS의 해시 값, OS Components의 해시 값은 이미 하드웨어 보안모듈(200)에 안전하게 저장되어 있는 상태이다.
부팅 과정에서 실행 코드의 무결성이 순차적으로 검증하게 된다. 즉, 디바이스의 전원이 켜지게 되면, ROM의 실행 코드가 수행되고, ROM은 다음에 실행할 OS Loader의 실행 코드의 무결성을 검증하기 위하여 현재의 OS Loader의 실행 코드의 해시 값을 계산하여 하드웨어 보안모듈(200)에 보내게 된다.
하드웨어 보안모듈(200)은 받은 해시 값과 하드웨어 보안모듈(200)의 내부에 저장되어 있는 OS Loader의 실행 코드의 해시 값을 비교하여 결과를 보내준다. 결과 값이 동일하면, ROM은 OS Loader의 실행 코드를 RAM에 로딩하여 실행하게 된다.
마찬가지 방법으로 OS Loader는 하드웨어 보안모듈(100)을 이용하여 OS의 무결성을 검증한 후에, OS의 실행 코드를 RAM에 로딩하여 실행하게 된다. 또한 OS도 하드웨어 보안모듈(200)을 이용하여 OS Components의 무결성을 검증한 후에 OS Components의 실행 코드를 RAM에 로딩하여 실행하게 된다.
상술된 실행 코드 무결성 검증 방법들은 기본적으로 ROM에서 디바이스의 부팅이 시작되어 순차적으로 다음에 실행될 실행 코드의 무결성을 검증하고 있다. ROM은 변경이 불가능한 메모리이기 때문에 ROM에서 시작하여 다음 코드의 무결성을 검증하는 방법은 안전하다고 할 수 있다. 하지만, 상술 된 실행 코드의 무결성 검증 방법들은 고사양의 디바이스에서 주로 사용하고 있다.
본 발명의 실행 코드의 무결성 검증 방법의 대상이 되는 디바이스는 저사양의 디바이스이다. 저사양의 디바이스는 최초의 부팅을 ROM에서 시작하여 단계별로 실행 코드의 무결성을 검증하는 신뢰 체인(Chain of Trust)을 형성하지 않는다. ROM으로 부팅하는 경우, 단순히 플래시 메모리에 실행 코드를 프로그래밍하기 위한 용도로만 사용된다. 다시 말해, 저사양의 디바이스의 경우는 사용자의 실행 코드가 플래시 메모리에 프로그래밍된 이후에, 플래시 메모리에서 부팅 및 사용자의 실행 코드가 바로 수행된다. 따라서 상술된 신뢰 체인(Chain of Trust)을 형성하지도 않는다. 즉, 본 발명의 대상이 되는 디바이스는 플래시 메모리에 OS 및 응용 프로그램의 실행 코드가 저장되고, 이들 실행 코드가 RAM으로 옮겨져서 실행되는 것이 아니다. 플래시 메모리에서 실행 코드가 바로 수행된다. 일반적으로, 저사양의 디바이스의 경우는 실행 코드가 저장 및 수행되는 플래시 메모리는 디바이스의 메인 MCU 내부에 위치한다. 저사양의 IoT(Internet of Things) 디바이스들은 대부분 이와 같은 실행 코드의 수행 방식을 가지고 있다. 따라서 저 사양의 디바이스는 위에서 설명한 신뢰 체인(Chain of Trust) 형성을 통한 실행 코드의 무결성 검증 방법은 적용이 불가능하다.
플래시 메모리에서 수행되는 실행 코드의 무결성을 검증하기 위해서 무결성 검증을 위한 프로그램도 플래시 메모리에서 수행되는 실행 코드 내부에 존재해야만 한다. 즉, 플래시 메모리에서 수행되는 실행 코드가 자기 자신의 무결성을 스스로 증명해야 되는 것이다. 이와 같이 플래시 메모리에서 실행 코드가 수행되고, 이 실행 코드의 무결성을 실행 코드 자신이 검증하기 위해서 실행 코드의 무결성값(훼손되지 않은 실행 코드의 해시값)을 안전하게 보관하는 것이 무엇보다 중요하다.
기존의 방법들 중에서 실행 코드의 무결성값(훼손되지 않은 실행 코드의 해시값)을 원격에 있는 서버에 미리 저장해 두는 방법을 사용하는 경우도 있다. 이 경우에 디바이스가 부팅할 때, 실행 코드가 자신의 현재의 실행 코드의 해시값을 계산하고, 이 값을 네트워크를 통해 서버로 전송하게 된다. 이 값을 받은 서버는 이미 저장되어 있는 실행 코드의 무결성값과 비교하는 과정을 거치게 된다. 이와 같이 무결성을 검증하는 주체로 서버를 이용하는 경우에 네트워크를 통해 해시값을 전달하므로 네트워크 지연시간이 발생하며, 또한 네트워크 상에서의 보안을 위해 현재의 실행 코드의 해시값을 암호화해서 보내야하는 부담이 발생하게 된다. 이와 같은 문제로 인해, 저사양의 디바이스에서 서버를 이용한 무결성 검증은 효율성이 떨어지고 있다.
본 발명의 실시 예에 따른 실행 코드 검증 장치 및 방법은, 상술된 방법들의 문제점을 개선하기 위해 플래시 메모리에서 실행 코드를 저장 및 수행하고, 이 실행 코드의 무결성을 실행 코드 자신이 검증해야 되는 저사양의 디바이스에서 실행 코드의 무결성값(훼손되지 않은 실행 코드의 해시값)을 안전하게 보관하기 위해 물리적 해킹방지가 가능은 하드웨어 보안모듈(보안 칩)을 사용할 수 있다.
본 발명의 실시 예에 따른 실행 코드의 무결성 검증 장치 및 방법은, 하드웨어 보안모듈에 실행 코드의 무결성값을 미리 저장해두고, 실행 코드가 수행되는 과정에서 현재의 실행 코드의 해시 값을 계산하여 하드웨어 보안모듈에 전송하면 하드웨어 보안모듈이 미리 저장되어 있는 실행 코드의 무결성값과 현재의 실행 코드의 해시 값을 비교하는 과정을 수행할 수 있다.
일반적인 실행 코드의 무결성 검증 방법은 실행 코드 전체에 대한 해시 값을 계산하는 방법을 사용하고 있다. 하지만 이와 같은 방법은 실행 코드의 무결성 검증을 회피할 수 있는 공격에 취약하다. 즉, 동일한 기능을 수행하는 디바이스의 경우 실행 코드가 동일하므로, 하드웨어 보안모듈에 저장되어 있는 실행 코드의 무결성값(훼손되지 않은 실행 코드의 해시값)도 동일하게 된다. 따라서 실행 코드를 훼손하고 하드웨어 보안모듈에 원래의 해시 값을 전달하도록 실행 코드를 변경할 수 있다. 즉, 이와 같은 방법은 동일한 실행 코드를 사용하는 모든 디바이스에 동일하게 적용 가능하다.
하지만, 본 발명의 실시 예에 따른 실행 코드의 무결성 검증 장치 및 방법은, 실행 코드 전체에 대해 한꺼번에 해시 값을 계산하지 않고, 실행 코드를 일정한 부분으로 나누고, 나누어진 실행 코드의 부분들도 해시 값을 계산하는 시작점과 끝점을 다르게 설정함으로써 디바이스마다 실행 코드의 무결성 값이 모두 다르게 할 수 있다.
이와 같은 방법을 사용하면, 동일한 실행 코드를 사용하는 디바이스라고 하더라도, 하드웨어 보안모듈에 저장되는 실행 코드의 무결성값(훼손되지 않은 실행 코드의 해시값)이 디바이스마다 달라질 수 있다. 따라서, 디바이스의 실행 코드를 훼손하고 하드웨어 보안모듈에 원래의 해시 값을 전달하는 공격을 시도하기 위해서, 디바이스마다 하드웨어 보안모듈에 저장되어 있는 실행 코드의 무결성값을 분석하는 노력이 필요하다. 하지만, 동일한 실행 코드를 사용하는 모든 디바이스를 개별적으로 분석하는 것은 현실적으로 불가능하다. 따라서 본 발명의 실시 예에 따른 실행 코드 무결성 검증 방법을 이용하면, 디바이스의 실행 코드를 훼손하여 많은 수의 디바이스를 악의적으로 사용하는 것을 차단할 수 있다.
도 3은 본 발명의 실시 예에 따른 디바이스(300)를 예시적으로 보여주는 도면이다. 도 3을 참조하면, 디바이스(300)는 MCU(310), 및 하드웨어 보안모듈(320)을 포함할 수 있다. 디바이스(300)는 하드웨어 보안모듈(320)을 이용하여 실행 코드의 무결성을 검증할 수 있다.
실시 예에 있어서, 하드웨어 보안모듈(320)은, 적어도 하나의 프로세서, 및 적어도 하나의 프로세서에서 실행되는 적어도 하나의 인스트럭션을 저장하는 메모리를 포함할 수 있다. 여기서 적어도 하나의 인스트럭션은, 디바이스를 제조할 때, MCU(Micro Control Unit; 310)로부터 복수의 블록들로 분할된 실행 코드에 대응하는 해시값들을 수신하고, 분할된 실행 코드에 대응하는 해시값들을 저장하고, 디바이스(300)를 부팅할 때, MCU(310)로부터 복수의 블록들 중에서 적어도 하나의 해시값을 수신하고, 및 수신된 적어도 하나의 해시값과 저장된 해시값들 중에서 적어도 하나의 해시값에 대응하는 해시값을 비교하도록 적어도 하나의 프로세서에 실행될 수 있다.
실시 예에 있어서, 실행 코드는 복수 개의 블록 단위로 나누고, 각 블록에 대한 해시 값은 하드웨어 보안모듈(320)에 저장될 수 있다. 실시 예에 있어서, 실행 코드의 무결성 검증은 블록 단위로 수행될 수 있다.
또한, 디바이스(300)의 실행 코드를 나눌 때, 단순히 동일한 크기의 블록으로 나누지 않고, 블록 마다 다른 크기가 될 수 있다. 즉, 디바이스들끼리도 블록 크기가 다르도록 설정될 수 있다.
도 4는 본 발명의 실시 예에 따른 실행 코드의 무결성 검증을 위한 실행 코드 블록 단위 분할 방법을 예시적으로 보여주는 도면이다. 도 4를 참조하면, 블록 마다 블록의 시작점 혹은 끝점에 offset 값이 설정될 수 있다.
실시 예에 있어서, offset 값은 디바이스(300, 도 3 참조)가 제조된 이후 처음 부팅을 하게 되면, 하드웨어 보안모듈(320)에서 난수 발생기를 이용하여 블록마다의 offset값을 설정하고, 이를 하드웨어 보안모듈(320) 내부에 저장될 수 있다.
도 4에서는 설명의 편의를 위하여 실행 코드가 4개의 블록들로 구분된다고 가정하였다. 0번 블록(첫번째 블록)은 끝점 옵셋 값(제 2 옵셋 값)을 갖고, 1번 및 2번 블록들의 각각은 시작점 옵셋 값(제 1 옵셋 값)과 끝점 옵셋 값(제 2 옵셋 값)을 갖고, 3번 블록(마지막 블록)은 시작점 옵셋 값(제 1 옵셋 값)을 갖는다.
실시 예에 있어서, 무결성 값을 계산하는 블록 범위는, 이러한 offset값을 추가한 것일 수 있다. 즉, 무결성 값을 계산하는 하나의 블록 범위는 (블록의 시작점- OFFSET_START POINT)에서 (블록의 끝점 + OFFSET_END POINT)가 될 수 있다. 상술된 방법을 이용하면, 각각의 디바이스는 서로 다른 offset 값을 설정할 수 있다. 또한, 무결성 값을 계산하는 블록의 범위도 달라질 수 있다. 따라서 모든 디바이스 마다 실행 코드의 무결성 값이 다르게 설정될 수 있다.
예를 들어, 도 4에 도시된 바와 같이, 실행 코드는 4개의 블록으로 구분될 수 있다. 각 블록의 시작점 옵셋 값(OFFSET_START POINT)와 끝점 옵셋 값(OFFSET_END POINT)을 0에서 255 byte 사이로 설정(0번 블록은 끝점 옵셋 값만 존재, 3번 블록은 시작점 옵셋값만 존재함)될 수 있다.
이 때, 무결성 검증을 위한 해시 값은 256*256*256*256*256*256 = 281조 개의 경우의 수가 발생하게 된다. 이와 같이, 디바이스(300)의 실행 코드의 무결성 검증에 있어서 본 발명이 제시하는 하나의 예만 적용하게 되더라도, 동일한 실행 코드를 수행하는 디바이스(300)도 무결성 값은 실제적으로 모두 달라질 수 있다.
따라서, 이러한 실행 코드의 무결성 검증 방법을 이용하면, 실행 코드를 훼손하고도 하드웨어 보안모듈(320)에 원래의 해시 값을 알려주는 식으로 무결성 검증을 피해가는 공격이 방지될 수 있다.
한편, 실행 코드의 무결성 검증 과정은 다음과 같이 자세하게 진행될 수 있다. 먼저, 메인 MCU(310)에서 실행되는 실행 코드의 무결성값(훼손되지 않은 실행 코드의 해시값)을 하드웨어 보안모듈(320)에 저장하는 과정은, 디바이스(300)에서 최초로 메인 MCU(310)의 실행 코드가 부팅되는 순간에 이루어질 수 있다. 메인 MCU(310)의 실행 코드가 최초로 부팅되므로 디바이스(300)의 제조 과정이라고 할 수 있다. 실행 코드는 훼손되지 않은 무결한 상태라고 할 수 있다.
도 5는 본 발명의 실시 예에 따른 디바이스에서 하드웨어 보안 모듈(320)에 무결성 값이 저장되는 과정을 예시적으로 보여주는 도면이다. 도 5에서, 메인 MCU(310)의 실행 코드는 4개의 블록으로 나누어 해시 값을 저장하는 경우의 명령어 흐름이 도시된다.
우선적으로 하드웨어 보안모듈(320)과 메인 MCU(310)사이에 오고 가는 명령어의 기본 형식을 설명하면 다음과 같다. 첫번째 바이트는 하드웨어 보안 모듈(320)이 제공하는 기능에 해당하는 명령을 정의한다. 두번째 바이트는 데이터의 개수를 정의한다. 예를 들어, 두번째 바이트가 '2'이면, 세번째 바이트와 네번째 바이트에 데이터가 있음을 의미한다. 만일, 두번째 바이트가 '0'이면, 데이터가 없으며 두번째 바이트로 명령어가 끝임을 의미한다.
도 6은 본 발명의 실시 예에 따른 메인 MCU(310)와 하드웨어 보안 모듈(320)의 사이의 명령어 기본 형식을 예시적으로 보여주는 도면이다. 도 6을 참조하면, 명령어는 명령, 데이터 갯수, 데이터로 구성될 수 있다. 아래에서는 도 5에 도시된 명령어를 자세하게 설명하도록 하겠다.
'00 00'
하드웨어 보안모듈(320)은 내부 메모리에 메인 MCU(310)의 실행 코드에 대한 무결성 값이 저장되지 않았음을 알린다.
'C1 00'
메인 MCU(310)는 무결성 값 계산에 필요한 정보를 보내줄 것을 하드웨어 보안모듈(320)에게 요청한다.
'C0 03 00 00 20'
첫번째 byte 'C0': 해시 값을 계산해 줄 것을 요청
두번째 byte '03': 이어지는 데이터 갯수가 3개
세번째 byte '00': 해시 값 계산을 시작할 블록 번호가 '0'을 의미
네번째 byte '00': 해시 값 계산을 시작할 start point offset = 0 byte임을 의미. 0번 블록의 경우는 항상 start point offset = 0byte.
다섯번째 byte '20': 해시 값 계산을 끝낼 End point offset = 0x20 byte임을 의미.
종합하면, 해시 값 계산은 블록번호 '0' 번의 시작점, 즉, 실행 코드의 시작점에서 (블록번호 '0'번의 끝점 + 0x20) 까지에 대해 해시 값을 계산한다.
'C1 15 00 20bytes(hash값)'
첫번째 byte 'C1': 계산된 해시 값을 전송
세번째 byte '00': 해시 값을 계산한 블록 번호가 '0'을 의미
네번째 byte '23번째 byte': 해당 블록에 대해 계산한 해시 값
'C0 03 01 15 50'
첫번째 byte 'C0': 해시 값을 계산해 줄 것을 요청
세번째 byte '01': 해시 값 계산을 시작할 블록 번호가 '1'을 의미
네번째 byte '15': 해시 값 계산을 시작할 start point offset = 0x15 byte임을 의미.
다섯번째 byte '50': 해시 값 계산을 끝낼 End point offset = 0x50 byte임을 의미
종합하면, 해시 값 계산은 (블록번호 '1'번의 시작점 - 0x15 byte) 에서 (블록번호 '1'번의 끝점 + 0x50) 까지에 대해 해시 값을 계산한다.
'C1 15 01 20bytes(hash값)'
첫번째 byte 'C1': 계산된 해시 값을 전송
세번째 byte '01': 해시 값을 계산한 블록 번호가 '1'을 의미
네번째 byte '23번째 byte': 해당 블록에 대해 계산한 해시 값
'C0 03 02 A0 FF'
첫번째 byte 'C0': 해시 값을 계산해 줄 것을 요청
세번째 byte '02': 해시 값 계산을 시작할 블록 번호가 '2'를 의미
네번째 byte 'A0': 해시 값 계산을 시작할 start point offset = 0xA0 byte임을 의미
다섯번째 byte 'FF': 해시 값 계산을 끝낼 End point offset = 0xFF byte임을 의미
종합하면, 해시 값 계산은 (블록번호 '2'번의 시작점 - 0xA0 byte) 에서 (블록번호 '2'번의 끝점 + 0xFF) 까지에 대해 해시 값을 계산한다.
'C1 15 02 20bytes(hash값)'
첫번째 byte 'C1': 계산된 해시 값을 전송
세번째 byte '00': 해시 값을 계산한 블록 번호가 '0x02'를 의미
네번째 byte '23번째 byte': 해당 블록에 대해 계산한 해시 값
'C0 03 03 88 00'
첫번째 byte 'C0': 해시 값을 계산해 줄 것을 요청
세번째 byte '03': 해시 값 계산을 시작할 블록 번호가 '3'를 의미
네번째 byte '88': 해시 값 계산을 시작할 start point offset = 0x88 byte임을 의미
다섯번째 byte '00': 해시 값 계산을 끝낼 End point offset = 0x0 byte임을 의미. 마지막 블록의 경우는 항상 End point offset = 0byte가 되어야 함
종합하면, 해시 값 계산은 (블록번호 '3'번의 시작점 - 0x88 byte) 에서 블록번호 '3' 번의 끝점, 즉 코드의 마지막 점까지에 대해 해시 값을 계산한다.
'C1 15 03 20bytes(hash값)'
첫번째 byte 'C1': 계산된 해시 값을 전송
세번째 byte '03': 해시 값을 계산한 블록 번호가 '0x03'를 의미
네번째 byte '23번째 byte': 해당 블록에 대해 계산한 해시 값
'C0 00'
하드웨어 보안모듈이 해시 값 저장을 완료하였음을 메인 MCU에게 알림
다음으로, 메인 MCU의 실행 코드에 대한 전체 블록(전체 코드)에 대한 무결성 검증 과정이 수행될 수 있다.
도 7은 본 발명의 실시 예에 따른 메인 MCU(310)의 실행 코드에 대한 전체 블록(전체 코드)에 대한 무결성 검증 동작을 예시적으로 보여주는 흐름도이다. 도 7을 참조하면, 실행 코드에 대한 무결성 검증 동작은 다음과 같이 진행될 수 있다.
코드 전체에 대한 무결성 검증은 보통 메인 MCU(310)의 부팅과정에서 이루어 진다. 즉, 부팅이 시작되면, 하드웨어 보안모듈(320)은 하드웨어 보안모듈(320) 내부에 메인 MCU(310)의 실행 코드의 무결성 값이 저장되어 있음을 메인 MCU(310)에 알린다(S110). 이때 전송되는 명령어 'OF 00'은 하드웨어 보안모듈(320)이 내부 메모리에 메인 MCU(310)의 실행 코드에 대한 무결성 값이 저장되어 있음을 지시한다.
메인 MCU(310)는 실행 코드의 무결성 검증에 필요한 정보를 하드웨어 보안모듈(320)에 요청한다(S120). 이때 전송되는 명령어 'CA 00'는 메인 MCU(310)이 실행 코드 전체에 대한 무결성 검증에 필요한 정보를 보내줄 것을 하드웨어 보안모듈(320)에게 명령하는 것을 지시한다.
하드웨어 보안모듈(320)은 무결성 검증을 수행할 메인 MCU(310)의 실행 코드의 블록번호 및 offset값을 순차적으로 보낸다(S130, S140, S150, S160).
S130 단계에서 전송되는 명령어 'C0 03 00 00 20'에서, 첫번째 byte 'C0'는 해시 값을 계산해 줄 것을 요청을 지시하고, 두번째 byte '03'는 이어지는 데이터 갯수가 3개임을 지시하고, 세번째 byte ' 00'은 해시 값 계산을 시작할 블록 번호가 '0x00'을 의미하고, 네번째 byte '00'은 해시 값 계산을 시작할 start point offset = 0x00 byte임을 의미하고, 0번 블록의 경우는 항상 start point offset = 0byte가 되어야 하고, 다섯번째 byte '20'은 해시 값 계산을 끝낼 End point offset = 0x20 byte임을 의미한다. 종합하면, 해시 값 계산은 블록번호 '0' 번의 시작점, 즉 코드의 시작점에서 (블록번호 '0'번의 끝점 + 0x20) 까지에 대해 해시 값을 계산한다.
S140 단계에서 전송되는 명령어 'C0 03 01 15 50'에서, 첫번째 byte 'C0'는 해시 값을 계산해 줄 것을 요청을 지시하고, 세번째 byte '01'은 해시 값 계산을 시작할 블록 번호가 '0x01'을 의미하고, 네번째 byte '15'은 해시 값 계산을 시작할 start point offset = 0x15 byte임을 의미하고, 다섯번째 byte '50'는 해시 값 계산을 끝낼 End point offset = 0x50 byte임을 의미한다. 종합하면, 해시 값 계산은 (블록번호 '1'번의 시작점 - 0x15 byte) 에서 (블록번호 '1'번의 끝점 + 0x50) 까지에 대해 해시 값을 계산한다.
S150 단계에서 전송되는 명령어 'C0 03 02 A0 FF'에서, 첫번째 byte 'C0'는 해시 값을 계산해 줄 것을 요청을 의미하고, 세번째 byte '02'는 해시 값 계산을 시작할 블록 번호가 '0x02'을 의미하고, 네번째 byte 'A0'는 해시 값 계산을 시작할 start point offset = 0xA0 byte임을 의미하고, 다섯번째 byte 'FF'는 해시 값 계산을 끝낼 End point offset = 0xFF byte임을 의미한다. 종합하면, 해시 값 계산은 (블록번호 '2'번의 시작점 - 0xA0 byte) 에서 (블록번호 '2'번의 끝점 + 0xFF) 까지에 대해 해시 값을 계산한다.
S160 단계에서 전송되는 명령어 'C0 03 03 88 00'에서, 첫번째 byte 'C0'은 해시 값을 계산해 줄 것을 요청을 의미하고, 세번째 byte '02'는 해시 값 계산을 시작할 블록 번호가 '0x03'을 의미하고, 네번째 byte 'A0'은 해시 값 계산을 시작할 start point offset = 0x88 byte임을 의미하고, 다섯번째 byte 'FF'은 해시 값 계산을 끝낼 End point offset = 0x0 byte임을 의미하고. 마지막 블록의 경우는 항상 End point offset = 0byte가 되어야 한다. 종합하면, 해시 값 계산은 (블록번호 '3'번의 시작점 - 0x88 byte) 에서 블록번호 '3' 번의 끝점, 즉 코드의 마지막 점까지에 대해 해시 값을 계산한다.
메인 MCU(310)는 하드웨어 보안모듈(320)이 보내온 블록 번호에 해당하는 실행 코드의 해시 값을 순차적으로 계산하고, 이것들을 블록단위로 계산된 해시 값들을 모두 XOR연산을 수행함으로써 최종 무결성 값을 계산한 후, 계산된 무결성 값을 하드웨어 보안모듈(320)에 보내준다(S170). 이때 전송되는 명령어 'C2 15 FA 20bytes(hash값)'에서, 첫번째 byte 'C2'는 요청한 무결성 값(해시 값)을 계산해서 보내는 명령을 의미하고, 세번째 byte 'FA'은 해시 값을 계산한 영역이 모든 블록(전체 실행 코드)임을 의미하고, 네번째 byte 부터 '23번째 byte'까지는 각 블록에 대한 해시 값들에 대해 XOR연산을 수행한 값을 의미한다.
하드웨어 보안모듈(320)은 메인 MCU(310)가 보내온 무결성 값을 하드웨어 보안모듈(320) 내부에 저장된 값과 비교하고, 비교 결과로써 동일한 경우에 무결성 검증이 성공하였음을 메인 MCU(310)으로 알려준다(S180).
이때 전송되는 명령어 'C0 00'은 하드웨어 보안모듈(320)이 무결성 검증(보내온 무결성 값이 하드웨어 보안모듈(320) 내부에 저장된 무결성 값과 동일함)이 성공하였음을 메인 MCU(310)에게 알리는 것을 의미한다.
한편, 하드웨어 보안모듈(320)은 설명한 실행 코드의 무결성 검증과정을 통과한 경우에만, 하드웨어 보안모듈(320) 내부의 보안 기능(암호, 서명, 키관리 등)을 수행할 수 있다. 만일, 실행 코드에 대한 무결성 검증을 통과하지 못하는 경우, 하드웨어 보안모듈(320) 내부의 보안기능은 사용이 불가능하다.
마지막으로, 디바이스의 부팅이 완료된 이후, 메인 MCU(310)가 하드웨어 보안모듈(320)이 제공하는 보안 기능을 수행하는 경우에도 메인 MCU(310)의 실행 코드의 무결성을 검증할 수 있다. 이 경우에 디바이스(300)의 무결성 검증의 따른 부담을 최소화하기 위해, 메인 MCU(310)의 실행 코드의 특정한 한개 블록에 대한 무결성 검증을 수행하게 된다. 메인 MCU(310)의 실행 코드의 한개 블록에 대한 무결성 검증은 다음과 같다.
도 8은 본 발명의 실시 예에 따른 메인 MCU(310)의 실행 코드의 한 개 블록에 대한 무결성 검증 동작을 예시적으로 보여주는 흐름도이다. 도 8를 참조하면, 실행 코드의 한 개 블록에 대한 무결성 검증 동작은 동작은 다음과 같이 진행될 수 있다.
메인 MCU(310)은 실행 코드의 한개 블록에 대한 무결성 검증에 필요한 정보를 하드웨어 보안모듈(320)에 요청한다(S210).
예를 들어, 전송된 명령어 'C2 00'는 메인 MCU(310)이 실행 코드의 한 블록에 대한 무결성 값 검증에 필요한 정보를 보내줄 것을 하드웨어 보안모듈(320)에게 명령하는 것을 의미한다.
하드웨어 보안모듈(320)은 무결성 검증을 수행할 메인 MCU(310)의 블록번호 및 offset값을 메인 MCU(310)에 보낸다(S220). 이때 하드웨어 보안모듈은 블록 번호를 랜덤하게 생성한다.
예를 들어, 전송된 명령어 'C0 03 02 A0 FF'에서 첫번째 byte 'C0'은 해시 값을 계산해 줄 것을 요청하는 의미이고, 세번째 byte '02'는 해시 값 계산을 시작할 블록 번호가 '0x02'을 의미이고, 네번째 byte 'A0'는 해시 값 계산을 시작할 start point offset = 0xA0 byte임을 의미이고, 다섯번째 byte 'FF'는 해시 값 계산을 끝낼 End point offset = 0xFF byte임을 의미이다. 종합하면, 해시 값 계산은 (블록번호 '2'번의 시작점 - 0xA0 byte) 에서 (블록번호 '2'번의 끝점 + 0xFF) 까지에 대해 해시 값을 계산해 줄 것을 메인 MCU(310)에 요청한다.
메인 MCU(310)는 하드웨어 보안모듈(320)이 보내온 블록 번호에 해당하는 실행 코드의 해시 값을 계산하여 하드웨어 보안모듈(320)에 보내준다(S230).
예를 들어, 전송된 명령어 'C2 15 02 20bytes(hash값)'에서 첫번째 byte 'C2'는 요청한 블록에 대한 해시 값을 계산해서 보내는 명령을 의미하고, 세번째 byte '02'는 해시 값을 계산한 블록 번호가 '0x02'를 의미하고, 네번째 byte 부터 '23번째 byte'까지는 해당 블록에 대해 계산한 해시 값을 의미한다.
하드웨어 보안모듈(320)은 받은 해시값을 하드웨어 보안모듈(320) 내부에 저장된 값과 비교하여 동일한 경우에는 무결성 검증이 성공하였음을 메인 MCU(310)에 알려준다(S240).
예를 들어, 전송된 명령어 'C0 00'은 보내온 무결성 값이 요청한 무결성 값과 동일하다는 의미이다. 즉, 무결성 검증이 성공하였음을 하드웨어 보안모듈(320)이 메인 MCU(310)에게 알린다.
상술 된 바와 같이, 메인 MCU(310)의 실행 코드의 한 개 블록에 대한 무결성 검증은, 디바이스(300)의 부팅이 완료된 이후 동작 과정에서 이루어질 수 있다. 또한 한개 블록에 대한 무결성 검증은, 메인 MCU(310)가 하드웨어 보안모듈(320)에서 제공하는 보안기능을 호출할 때마다 이루어질 수도 있다. 또한, 하드웨어 보안모듈(320)의 보안 기능 중 특정한 기능에만 국한하여 실행 코드의 한 개 블록에 대한 무결성 검증이 이루어질 수도 있다.
상술된 동작 시나리오는 실시 예에 불과한 것으로, 본 발명을 제한하지 않는다고 이해되어야 할 것이다. 하드웨어 보안 모듈(310)을 이용한 디바이스(300)의 메인 MCU(310)의 실행 코드 무결성 검증과 관련된 기능 수행은, 다양한 동작 시나리오에서 가능하다.
도 9는 본 발명의 실시 예에 따른 실행 코드의 무결성을 검증하는 디바이스 의 동작 방법을 예시적으로 보여주는 흐름도이다. 도 1 내지 도 9를 참조하면, 디바이스의 실행 코드에 대한 무결성 검증 동작은 다음과 같이 진행될 수 있다.
MCU는 실행 코드를 복수의 블록들로 분할할 수 있다(S310). 여기서 복수의 블록들의 크기는 동일하거나 서로 다를 수 있다. 분할된 실행 코드에 대응하는 해시값이 계산되고, 계산된 해시값은 HSM에 저장될 수 있다(S320). 이후에 실행 코드를 실행할 때, HSM에 실행 코드의 일부분에 대한 해시값과 저장된 해시값이 비교함으로써, 실행 코드에 대한 무결성 검증 동작이 수행될 수 있다(S330).
한편, 복수의 디바이스들이 네트워크로 연결되는 IoT(Internet of Things) 환경에서, 복수의 디바이스들이 해킹으로 인해 실행 코드가 훼손되는 경우, 좀비 디바이스로 작용할 수 있다. 이러한 좀비 디바이스는 디도스 공격 등의 사이버 공격에 이용되어, 네트워크 전체를 위험에 빠뜨릴 수 있다. 따라서 IoT 환경에서 디바이스의 실행 코드가 훼손되지 않도록 보호하는 것은 무엇보다 중요하다.
본 발명의 실시 예에 따른 실행 코드의 무결성 검증 장치 및 방법은, 하드웨어 보안모듈을 이용하여 디바이스의 실행 코드의 무결성을 검증할 수 있다. 특히, 본 발명의 실시 예에 따른 실행 코드의 무결성 검증 장치 및 방법은, 동일한 실행 코드에 대해서도 디바이스마다 하드웨어 보안모듈에 저장되는 실행 코드의 무결성 값을 다르게 함으로써, 해킹으로 동일한 실행 코드를 사용하는 디바이스를 한꺼번에 훼손시킬 수 없다. 이로써, 디바이스에 대한 실행 코드의 무결성을 보장할 수 있다. 또한, 실행 코드를 훼손한 다수의 디바이스들을 이용하여 디도스 공격 등의 사이버 공격을 시도하는 것을 원천적으로 차단될 수 있다. 따라서 디바이스가 서로 연결되어 있는 IoT환경에 대해, 본 발명의 실행 코드의 무결성 검증 장치 및 방법은 보다 높은 보안성과 안전성을 제공할 수 있다.
본 발명의 실시 예에 따른 특정 기능을 수행하는 임베디드 디바이스는, 디바이스의 구성 부품에 메인 MCU 및 물리적 해킹방지가 가능한 하드웨어 보안모듈(보안 칩)을 포함할 수 있다.
실시 예에 있어서, 디바이스는 훼손되지 않은 무결한 상태의 실행 코드를 일정한 부분으로 나누고, 나누어진 실행 코드의 부분들도 디바이스마다 시작지점과 끝점을 다르게 설정하여 해시값을 계산하여 하드웨어 보안모듈(보안 칩)에 미리 저장할 수 있다.
실시 예에 있어서, 실행 코드가 수행되는 과정에서 하드웨어 보안모듈(보안 칩)이 요청하는 대로 현재의 실행 코드도 일정한 부분으로 나누어 해시 값을 계산하여 하드웨어 보안모듈(보안 칩)에 전송하면, 하드웨어 보안모듈(보안 칩)은 미리 저장되어 있는 실행 코드의 무결한 상태의 해시값과 현재의 실행 코드의 해시 값을 비교하는 과정을 수행할 수 있다.
실시 예에 있어서, 무결성 검증의 대상이 되는 실행 코드가 저장되고 실행되는 메모리는 디바이스의 메인 MCU 내부에 위치하는 플래시 메모리 혹은 메인 MCU외부에 위치하는 플래시 메모리일 수 있다.
실시 예에 있어서, 실행 코드의 무결성을 검증하는 방법은, 실행 코드 전체에 대한 무결성을 검증하는 경우에, 실행 코드를 일정한 부분으로 나누어 해시값을 각각 계산하고, 계산된 해시값들을 서로 XOR연산을 통해 하나의 값으로 만들어 무결성 검증을 수행할 수 있다.
실시 예에 있어서, 실행 코드의 무결성을 검증하는 방법은, 실행 코드의 일부분에 대한 무결성을 검증하는 경우에, 나누어진 실행 코드의 한 부분에 대해서만 하드웨어 보안모듈에 저장된 무결한 상태의 해시값과 현재의 실행 코드의 해시 값을 비교하는 과정을 수행할 수 있다.
실시 예에 있어서, 메인 MCU와 하드웨어 보안모듈(보안칩)은 표준 인터페이스(UART, SPI, UART, SD card등)중 하나를 이용하여 연결될 수 있다.
실시 예에 있어서, 실행 코드 전체 혹은 일부분에 대한 무결성을 검증하는 과정은 디바이스의 부팅 과정뿐만 아니라 부팅 이후에 응용 서비스가 수행되는 중에도 가능하다.
실시 예에 있어서, 디바이스의 실행 코드가 응용서비스를 수행되는 과정에서, 실행 코드가 하드웨어 보안모듈(보안칩)에서 제공하는 보안 기능(암호, 전자서명 등)을 사용하고자 할 때, 미리 실행 코드의 무결성 검증을 이행하여야 만 가능하고, 실행 코드의 무결성 검증을 거치지 않고 하드웨어 보안모듈(보안칩)에서 제공하는 보안 기능을 사용하고자 하는 경우에 하드웨어 보안모듈(보안칩)은 이를 거부할 수 있다.
도 10은 본 발명의 실시 예에 따른 전자 장치(1000)를 예시적으로 보여주는 도면이다. 도 10을 참조하면, 전자 장치(1000)는 적어도 하나의 프로세서(1100), 네트워크 인터페이스(1200), 메모리(1300), 디스플레이(1400), 및 입출력 장치(1500)를 포함할 수 있다.
프로세서(1100)는 도 1 내지 도 9를 통하여 적어도 하나의 장치를 포함하거나, 도 1 내지 도 9를 통하여 전술한 적어도 하나의 방법으로 구현될 수 있다. 프로세서(1100)는, 실행 코드의 무결성 검증을 수행하도록 하드웨어 보안모듈(도 3 참조, 320)를 제어할 수 있다. 여기서, 하드웨어 보안 모듈은 디바이스를 제조할 때, MCU(Micro Control Unit)로부터 복수의 블록들로 분할된 실행 코드에 대응하는 해시값들을 수신하고; 분할된 실행 코드에 대응하는 해시값들을 저장하고; 디바이스를 부팅할 때, MCU로부터 복수의 블록들 중에서 적어도 하나의 해시값을 수신하고; 및 적어도 하나의 해시값과 저장된 해시값들 중에서 적어도 하나의 해시값에 대응하는 해시값을 비교할 수 있다.
프로세서(1100)는 프로그램을 실행하고, 전자 장치(1000)를 제어할 수 있다. 전자 장치(1000)는 입출력 장치(1500)를 통하여 외부 장치(예를 들어, 퍼스널 컴퓨터 혹은 네트워크)에 연결되고, 데이터를 교환할 수 있다.
네트워크 인터페이스(1200)는 외부의 네트워크와 다양한 유/무선 방식에 의해 통신을 수행하도록 구현될 수 있다.
메모리(1300)는 컴퓨터에서 읽을 수 있는 명령어(instruction)를 포함할 수 있다. 프로세서(1100)는 메모리(1300)에 저장된 명령어가 프로세서(1100)에서 실행됨에 따라 앞서 언급된 동작들을 수행할 수 있다. 메모리(1300)는 휘발성 메모리 혹은 비휘발성 메모리일 수 있다. 메모리(1300)는 사용자의 데이터를 저장하도록 저장 장치를 포함할 수 있다. 저장 장치는 eMMC(Embedded Multimedia Card), SSD(Solid State Drive), UFS(Universal Flash Storage) 등 일 수 있다. 저장 장치는 적어도 하나의 비휘발성 메모리 장치를 포함할 수 있다. 비휘발성 메모리 장치는, 낸드 플래시 메모리(NAND Flash Memory), 수직형 낸드 플래시 메모리(Vertical NAND; VNAND), 노아 플래시 메모리(NOR Flash Memory), 저항성 램(Resistive Random Access Memory: RRAM), 상변화 메모리(Phase-Change Memory: PRAM), 자기저항 메모리(Magnetoresistive Random Access Memory: MRAM), 강유전체 메모리(Ferroelectric Random Access Memory: FRAM), 스핀주입 자화반전 메모리(Spin Transfer Torque Random Access Memory: STT-RAM) 등이 될 수 있다.
이상에서 설명된 실시 예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/혹은 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(Arithmetic Logic Unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(Field Programmable Gate Array), PLU(Programmable Logic Unit), 마이크로프로세서, 혹은 명령(Instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 혹은 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(Operating System; OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다.
또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 대응하는 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(Processing Element) 및/혹은 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수의 프로세서 혹은 하나의 프로세서 및 하나의 제어기(Controller)를 포함할 수 있다. 또한, 병렬 프로세서(Parallel Processor)와 같은, 다른 처리 구성(Processing Configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(Computer Program), 코드(Code), 명령(Instruction), 혹은 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 혹은 결합적으로(Collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/혹은 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 혹은 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(Component), 물리적 장치, 가상 장치(Virtual Equipment), 컴퓨터 저장 매체 혹은 장치, 혹은 전송되는 신호파(Signal Wave)에 영구적으로, 혹은 일시적으로 구체화(Embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시 예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 혹은 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시 예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(Magnetic Media), CD-ROM, DVD와 같은 광기록 매체(Optical Media), 플롭티컬 디스크(Floptical Disk)와 같은 자기-광 매체(Magneto Optical media), 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
한편, 상술 된 본 발명의 내용은 발명을 실시하기 위한 구체적인 실시 예들에 불과하다. 본 발명은 구체적이고 실제로 이용할 수 있는 수단 자체뿐 아니라, 장차 기술로 활용할 수 있는 추상적이고 개념적인 아이디어인 기술적 사상을 포함할 것이다.
100, 300: 디바이스
200, 320: 하드웨어 보안모듈
130: 디램
120: 플래시 메모리
110, 310: MCU
1000: 전자 장치

Claims (20)

  1. 디바이스에서 실행 코드의 무결성 검증 방법에 있어서,
    마이크로 콘트롤 유닛(Micro Control Unit; MCU)에서 실행 코드를 복수의 블록들로 분할하는 단계;
    상기 MCU에서 상기 분할된 블록들에 대응하는 해시값들을 생성하는 단계;
    하드웨어 보안 모듈(Hardware Security Module; HSM)에서 상기 생성된 해시값들을 저장하는 단계;
    상기 실행 코드를 부팅할 때, 상기 MCU에서 상기 복수의 블록들 중에서 적어도 하나의 해시값을 계산하는 단계; 및
    상기 HSM에서 상기 계산된 해시값과 상기 HSM에 저장된 해시값들 중에서 상기 계산된 해시값에 대응하는 해시값을 비교하는 단계를 포함하고,
    상기 분할된 블록들마다 해시값을 계산하기 위한 시작점 혹은 끝점이 다르게 설정되는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    상기 분할된 블록들의 크기는 블록 마다 서로 다른 것을 특징으로 하는 방법.
  3. 삭제
  4. 제 1 항에 있어서,
    상기 해시값들을 생성하는 단계는,
    상기 시작점에 대응하는 제 1 옵셋 값 혹은 상기 끝점에 대응하는 제 2 옵셋 값을 상기 분할된 블록들 중에서 대응하는 블록에 추가하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  5. 제 4 항에 있어서,
    상기 HSM에서 난수 발생기를 이용하여 상기 시작점에 대응하는 상기 제 1 옵셋 값과 상기 끝점에 대응하는 제 2 옵셋 값을 생성하는 단계; 및
    상기 HSM에서 상기 제 1 및 제 2 옵셋 값들을 저장하는 단계를 더 포함하는 방법.
  6. 제 4 항에 있어서,
    상기 해시값들을 생성하는 단계는,
    상기 분할된 블록들 중에서 적어도 하나의 블록의 해시값을 생성하기 위하여, 상기 적어도 하나의 블록의 시작점에서 상기 제 1 옵셋 값을 뺀 값부터 상기 적어도 하나의 블록의 끝점에서 상기 제 2 옵셋 값을 더한 값까지를 블록 범위로 설정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  7. 제 6 항에 있어서,
    상기 분할된 블록들 중에서 첫번째 블록의 블록 범위는 상기 첫번째 블록의 시작점에서 상기 첫번째 블록의 끝점에 상기 제 2 옵셋 값을 더한 값까지인 것을 특징으로 하는 방법.
  8. 제 6 항에 있어서,
    상기 분할된 블록들 중에서 마지막 블록의 블록 범위는 상기 마지막 블록의 시작점에서 상기 제 1 옵셋 값을 뺀 값부터 첫번째 블록의 끝점까지인 것을 특징으로 하는 방법.
  9. 제 1 항에 있어서,
    상기 생성된 해시값들은 상기 디바이스를 제조할 때 상기 HSM에 저장되는 것을 특징으로 하는 방법.
  10. 제 1 항에 있어서,
    상기 HSM에서 상기 분할된 블록들에 대한 전체 블록에 대한 무결성이 검증되는 것을 특징으로 하는 방법.
  11. 제 1 항에 있어서,
    상기 HSM에서 상기 분할된 블록들 중에서 어느 하나의 블록에 대한 무결성이 검증되는 것을 특징으로 하는 방법.
  12. 제 11 항에 있어서,
    상기 어느 하나의 블록에 대응하는 블록 번호를 랜덤하게 생성하는 단계를 더 포함하는 방법.
  13. 제 11 항에 있어서,
    상기 어느 하나의 블록에 대한 무결성 검증 동작은 상기 MCU에서 상기 HSM에 제공하는 보안 기능을 호출할 때 수행되는 것을 특징으로 하는 방법.
  14. 실행 코드의 무결성을 검증하기 위한 하드웨어 보안모듈에 있어서:
    적어도 하나의 프로세서; 및
    상기 적어도 하나의 프로세서에서 실행되는 적어도 하나의 인스트럭션을 저장하는 메모리를 포함하고,
    상기 적어도 하나의 인스트럭션은,
    디바이스를 제조할 때, MCU(Micro Control Unit)로부터 복수의 블록들로 분할된 실행 코드에 대응하는 해시값들을 수신하고;
    상기 분할된 실행 코드에 대응하는 상기 해시값들을 저장하고;
    상기 디바이스를 부팅할 때, 상기 MCU로부터 상기 복수의 블록들 중에서 적어도 하나의 해시값을 수신하고; 및
    상기 적어도 하나의 해시값과 상기 저장된 해시값들 중에서 상기 적어도 하나의 해시값에 대응하는 해시값을 비교하도록 상기 적어도 하나의 프로세서에 실행되고,
    상기 분할된 실행 코드마다 해시값을 계산하기 위한 시작점 혹은 끝점이 다르게 설정되는 것을 특징으로 하는 하드웨어 보안모듈.
  15. 제 14 항에 있어서,
    상기 디바이스를 부팅할 때, 상기 복수의 블록들 전체에 대한 무결성이 검증되는 것을 특징으로 하는 하드웨어 보안모듈.
  16. 제 14 항에 있어서,
    상기 MCU로부터 보안 기능 호출을 수신할 때, 상기 복수의 블록들 중에서 어느 하나의 블록에 대한 무결성이 검증되는 것을 특징으로 하는 하드웨어 보안모듈.
  17. 제 16 항에 있어서,
    상기 어느 하나의 블록에 대응하는 블록 번호를 생성하는 난수 발생기를 더 포함하는 하드웨어 보안모듈.
  18. 제 14 항에 있어서,
    상기 복수의 블록들의 각각의 무결성을 검증하기 위한 블록 범위는 디바이스에 따라 서로 다르게 설정되는 것을 특징으로 하는 하드웨어 보안모듈.
  19. 실행 코드의 무결성을 검증하는 디바이스에 있어서,
    상기 디바이스를 제조할 때 상기 실행 코드를 복수의 블록들로 분할하고, 상기 분할된 블록들에 대응하는 해시값들을 생성하는 마이크로 콘트롤 유닛; 및
    상기 디바이스를 제조할 때 상기 생성된 해시값들을 저장하고, 상기 실행 코드를 부팅할 때 상기 마이크로 콘트롤 유닛으로부터 상기 복수의 블록들 중에서 적어도 하나의 해시값을 수신하고, 상기 수신된 해시값과 상기 저장된 해시값들 중에서 상기 수신된 해시값에 대응하는 해시값을 비교하고, 상기 비교 결과에 따라 상기 실행 코드의 무결성을 검증하는 하드웨어 보안모듈을 포함하고,
    상기 분할된 블록들마다 해시값을 계산하기 위한 시작점 혹은 끝점이 다르게 설정되는 것을 특징으로 하는 디바이스.
  20. 제 19 항에 있어서,
    상기 복수의 블록들의 블록 범위는 상기 하드웨어 보안모듈의 난수 발생기에서 생성된 적어도 하나의 옵셋 값을 이용하여 디바이스 별로 다르게 설정되는 것을 특징으로 하는 디바이스.
KR1020190102287A 2019-08-21 2019-08-21 실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법 KR102415005B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020190102287A KR102415005B1 (ko) 2019-08-21 2019-08-21 실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법
US16/940,146 US11336444B2 (en) 2019-08-21 2020-07-27 Hardware security module for verifying executable code, device having hardware security module, and method of operating device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190102287A KR102415005B1 (ko) 2019-08-21 2019-08-21 실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법

Publications (2)

Publication Number Publication Date
KR20210022915A KR20210022915A (ko) 2021-03-04
KR102415005B1 true KR102415005B1 (ko) 2022-07-01

Family

ID=74646915

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190102287A KR102415005B1 (ko) 2019-08-21 2019-08-21 실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법

Country Status (2)

Country Link
US (1) US11336444B2 (ko)
KR (1) KR102415005B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115344832A (zh) * 2021-04-28 2022-11-15 开利消防及保安伊米有限公司 通过一起传递加密和数据的安全装置更新
KR102598510B1 (ko) * 2021-12-16 2023-11-06 주식회사 텔레칩스 소프트웨어의 무결성 검증 방법 및 그 장치
US20240045791A1 (en) * 2022-08-08 2024-02-08 Rolos AG System and method for generating failing tests from failed proofs
WO2024076709A1 (en) * 2022-10-05 2024-04-11 Data I/O Corporation Device programming system with hardware hash module

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060161761A1 (en) * 2005-01-18 2006-07-20 Microsoft Corporation Systems and methods for validating executable file integrity using partial image hashes
US20150106579A1 (en) * 2013-10-16 2015-04-16 Exablox Corporation Forward-Only Paged Data Storage Management
US20190253256A1 (en) * 2018-02-13 2019-08-15 Texas Precious Metals LLC Tracking and verifying authenticity of an asset via a distributed ledger

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8838551B2 (en) * 2011-10-21 2014-09-16 International Business Machines Corporation Multi-level database compression
KR101325096B1 (ko) 2012-04-06 2013-11-21 주식회사 니벤스컴퍼니 불법 복제 방지 시스템 및 불법 복제 방지 방법
KR101907486B1 (ko) 2012-09-14 2018-10-12 한국전자통신연구원 보안성이 우수한 실행환경을 제공하는 이동 컴퓨팅 시스템
KR20150072061A (ko) 2013-12-19 2015-06-29 한국전자통신연구원 모바일 신뢰 모듈 기반 서비스 보안 장치 및 방법
KR102028197B1 (ko) * 2015-02-11 2019-10-04 한국전자통신연구원 하드웨어 보안 모듈, 상기 하드웨어 보안 모듈에 저장된 무결성 검증 값을 업데이트하는 방법, 상기 하드웨어 보안 모듈을 이용하여 단말에 저장된 프로그램을 업데이트하는 방법
CN108399339B (zh) 2018-02-12 2021-09-14 广东为辰信息科技有限公司 一种基于安全芯片的可信启动方法
US10621354B2 (en) * 2018-02-22 2020-04-14 Dell Products, L.P. Verifying basic input/output system (BIOS) boot block code
US11170077B2 (en) * 2019-01-04 2021-11-09 Vmware, Inc. Validating the integrity of application data using secure hardware enclaves

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060161761A1 (en) * 2005-01-18 2006-07-20 Microsoft Corporation Systems and methods for validating executable file integrity using partial image hashes
US20150106579A1 (en) * 2013-10-16 2015-04-16 Exablox Corporation Forward-Only Paged Data Storage Management
US20190253256A1 (en) * 2018-02-13 2019-08-15 Texas Precious Metals LLC Tracking and verifying authenticity of an asset via a distributed ledger

Also Published As

Publication number Publication date
US11336444B2 (en) 2022-05-17
KR20210022915A (ko) 2021-03-04
US20210058249A1 (en) 2021-02-25

Similar Documents

Publication Publication Date Title
KR102415005B1 (ko) 실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법
TWI567580B (zh) 用於防止惡意軟體執行的方法與系統
US8006095B2 (en) Configurable signature for authenticating data or program code
WO2019104988A1 (zh) Plc的安全处理单元及其总线仲裁方法
US20090193211A1 (en) Software authentication for computer systems
JP2014513348A (ja) 統合拡張ファームウェアインタフェース準拠計算装置内のシステムセキュリティデータベースおよびファームウェア格納部を変更する要求を処理するシステムおよび方法
US20140223192A1 (en) Method for protecting the integrity of a fixed-length data structure
US11960632B2 (en) Data attestation in memory
JP6639620B2 (ja) コード署名の条件付き規定に基づくセキュアクライアント認証
US20220158823A1 (en) Validating data stored in memory using cryptographic hashes
US10853086B2 (en) Information handling systems and related methods for establishing trust between boot firmware and applications based on user physical presence verification
US20220179945A1 (en) Run-time code execution validation
US20170060775A1 (en) Methods and architecture for encrypting and decrypting data
US11669643B2 (en) Block chain based validation of memory commands
US7624442B2 (en) Memory security device for flexible software environment
US11836254B2 (en) System and method for securing a series of firmware function calls using session tokens
US11228443B2 (en) Using memory as a block in a block chain
US8966605B2 (en) Security token for securely executing an application on a host computer
US20200310776A1 (en) Over-the-air update validation
CN112307481B (zh) 一种***可信启动方法、电子设备及计算机可读存储介质
WO2016024967A1 (en) Secure non-volatile random access memory
GB2595509A (en) Computer secure boot method and system

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant