KR101846427B1 - 컴퓨팅 장치의 보안 부팅 기법 - Google Patents

컴퓨팅 장치의 보안 부팅 기법 Download PDF

Info

Publication number
KR101846427B1
KR101846427B1 KR1020167026703A KR20167026703A KR101846427B1 KR 101846427 B1 KR101846427 B1 KR 101846427B1 KR 1020167026703 A KR1020167026703 A KR 1020167026703A KR 20167026703 A KR20167026703 A KR 20167026703A KR 101846427 B1 KR101846427 B1 KR 101846427B1
Authority
KR
South Korea
Prior art keywords
block
hash value
initial boot
boot firmware
firmware
Prior art date
Application number
KR1020167026703A
Other languages
English (en)
Other versions
KR20160126067A (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 인텔 코포레이션
Publication of KR20160126067A publication Critical patent/KR20160126067A/ko
Application granted granted Critical
Publication of KR101846427B1 publication Critical patent/KR101846427B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • 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/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/72Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/068Hybrid storage device
    • 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
    • H04L9/3242Cryptographic 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 involving keyed hash functions, e.g. message authentication codes [MACs], CBC-MAC or HMAC
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Power Engineering (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Stored Programmes (AREA)
  • Storage Device Security (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

컴퓨팅 장치를 보안 부팅하는 기술은 초기 부트 펌웨어의 각각의 블록에 대한 해시 값을 연속으로 결정하고 블록들 각각에 대하여 결정된 해시 값으로부터 총합 해시 값을 생성하는 컴퓨팅 장치의 보안 엔진을 포함한다. 컴퓨팅 장치의 프로세서는 총합 해시 값이 기준 체크섬 값과 매칭되는지의 여부를 결정한다. 프로세서의 초기화는 총합 해시 값이 기준 체크섬 값과 매칭된다는 결정에 응답하여 완료된다. 일부 실시예에 있어서, 보안 엔진은 초기 부트 펌웨어의 각각의 블록을 컴퓨팅 장치의 메모리로부터 연속으로 취득하고, 각각의 취득된 블록을 보안 엔진의 보안 메모리에 저장하고, 각각의 저장된 블록에 대한 해시 값을 결정한다. 보안 메모리에 저장된 각각의 블록은 프로세서의 캐시 메모리 중 RAM으로서의 캐시(Cache as RAM)로서 초기화된 부분에 복사된다.

Description

컴퓨팅 장치의 보안 부팅 기법{SECURELY BOOTING A COMPUTING DEVICE}
컴퓨터 보안의 일 양태는 "멀웨어(malware)"라고도 알려져 있는 악성 소프트웨어로부터 컴퓨터 시스템을 보호하는 것을 수반한다. 그러나, 멀웨어는 수많은 형태가 존재하고; 수많은 흔한 각종 멀웨어는 컴퓨터 메모리 내의 승인되지 않은 위치에 대한 기입 또는 그 밖의 액세스를 수행한다. 예컨대, 어떤 멀웨어는 부팅 프로세스의 초기에 저레벨(low-level) 시스템 코드(예컨대, 플랫폼 초기화 펌웨어, 부트 로더(boot loader), 운영 체제 커널 등)를 공격한다. 상기와 같은 공격은 시스템의 제어를 획득해서 검출을 회피하는 이른바 "부트킷(bootkits)" 또는 "루트킷(rootkits)"에 의해 사용될 수 있다.
전형적인 컴퓨터 시스템은 "보안 부트(secure boot)" 또는 "보안 론치(secure launch)"를 수행함으로써 멀웨어의 실행을 검출 및 방지하려 한다. 그렇게 하기 위해, 컴퓨팅 시스템은 부팅 프로세스 동안 로딩되기 전에 저레벨 시스템 코드의 무결성(integrity)을 검증하도록 구성된 보안 엔진 또는 보안 코프로세서를 포함할 수 있다. 예컨대, 부팅 프로세스의 초기화시에, 컴퓨팅 시스템의 보안 엔진은 컴퓨팅 시스템의 메인 프로세서를 초기화하는데 필요한 펌웨어의 해시(hash)를 생성할 수 있다. 이후, 보안 엔진은 해당 해시를, 순수한 버전(unadulterated version)의 펌웨어에 대응하는 기지의 바람직한 해시 또는 체크섬(checksum) 값과 비교할 수 있다. 두 해시가 매칭된다고 판정되면, 컴퓨팅 시스템의 메인 프로세서 또는 그 밖의 컴포넌트들을 초기화하도록 펌웨어의 실행이 허용될 수 있다.
임베디드 시스템 및 시스템-온-칩(SoC) 시스템은 컴퓨팅 생태계에서 더욱 보편화되고 있다. 통상의 SoC 시스템에 있어서, 보안 부트 프로세스는 SoC에 자체적인 스태틱 랜덤 액세스 메모리(SRAM)가 내장되어 있는 통합 보안 엔진 또는 보안 코프로세서에 의해 관리된다. 근본적으로 보안 부트를 철저히 보장하기 위해, 저레벨 시스템 코드는 실행이 허용되기 전에 통합 보안 엔진에 의해 검증되어야만 한다. 통상적으로, 상기와 같은 저레벨 시스템 코드는 먼저 통합 보안 엔진의 SRAM에 저장되어야 한다. 그에 따라, 통합 보안 엔진에 의해 검증되게 되는 임의의 저레벨 시스템 코드의 크기는 SoC에 내장된 SRAM의 크기에 의해 효과적으로 제한된다. 또한, 대형화된 저레벨 시스템 코드의 검증이 가능하도록 SoC 상의 SRAM의 전체 크기를 증가시키는 것은, 통상적으로 SoC 상의 부가적인 SRAM 뱅크들의 관련된 비용, 다이 크기(die size), 및 전력 소비로 인해, 비현실적이다.
본 명세서에 기재된 개념들은 첨부 도면들에서 한정이 아닌 예시로서 나타내진다. 설명의 간략화 및 명료화를 위해, 도면들에 나타내진 요소들은 실척으로만 도시되는 것은 아니다. 적합한 정도를 고려하여, 도면들 사이에서는, 상응하는 또는 비슷한 요소들을 가리키기 위해 참조 레이블들이 반복되어 있다.
도 1은 보안 부트를 수행하기 위해 컴퓨팅 장치를 이용하는 시스템의 적어도 하나의 실시예의 간략화된 블록도,
도 2는 도 1의 시스템의 컴퓨팅 장치의 환경의 적어도 하나의 실시예의 간략화된 블록도,
도 3은 도 1 및 도 2의 컴퓨팅 장치에 의해 실행될 수 있는 보안 부트를 수행하는 방법의 적어도 하나의 실시예의 간략화된 흐름도,
도 4는 도 1 및 도 2의 컴퓨팅 장치에 의해 실행될 수 있는 초기 부트 펌웨어의 블록들에 대한 해시 값을 연속으로 결정하는 도 3의 방법의 서브루틴의 적어도 하나의 실시예의 간략화된 흐름도,
도 5는 도 1 및 도 2의 컴퓨팅 장치에 의해 실행될 수 있는 초기 부트 펌웨어의 블록들에 대한 해시 값을 연속으로 결정하는 도 3의 방법의 서브루틴의 적어도 하나의 다른 실시예의 간략화된 흐름도이다.
본 개시물의 개념이 다양한 수정 및 대안적인 형태를 허용할 수 있으며, 그 특정 실시예는 도면들에서 예시로서 도시되어 있으며 본 명세서에서 상세히 기재될 것이다. 그러나, 본 개시물의 개념들을 개시된 특정 형태들에 한정하려는 의도는 없지만, 그와는 반대로, 본 발명은 본 개시물 및 첨부된 청구항들과 일치하는 모든 수정, 등가물, 및 변경을 포괄하는 것임을 이해해야 한다.
명세서에서 "일 실시예(one embodiment)", "실시예(an embodiment)", "예시적인 실시예(an illustrative embodiment)" 등의 언급은, 기재된 실시예가 특정한 특징, 구조, 또는 특성을 포함할 수 있지만, 모든 실시예가 그 특정한 특징, 구조, 또는 특성을 포함할 수도, 또는 포함하지 않을 수도 있음을 나타낸다. 또한, 상기와 같은 관용구는 반드시 동일한 실시예를 언급하는 것은 아니다. 또한, 특정한 특징, 구조, 또는 특성이 실시예와 관련되어 기재되는 경우에는, 상기와 같은 특징, 구조, 또는 특성이 다른 실시예들과 관련되어 분명하게 기재되는지의 여부에 영향을 미치는 것은 본 기술분야의 당업자의 지식 수준에서 이루어지는 것이라는 점을 제기한다. 부가적으로, "A, B, 및 C 중 적어도 하나(at least one of A, B, and C)"의 형태로 목록에 포함되는 항목들은 (A); (B); (C); (A 및 B); (A 및 C); (B 및 C); 또는 (A, B, 및 C)를 의미할 수 있음을 인식해야 한다. 유사하게, "A, B, 또는 C 중 적어도 하나(at least one of A, B, or C)"의 형태로 열거되는 항목들은 (A); (B); (C); (A 및 B); (A 및 C); (B 및 C); 또는 (A, B, 및 C)를 의미할 수 있다.
개시된 실시예들은, 어떤 경우에는, 하드웨어로, 펌웨어로, 소프트웨어로, 또는 그 임의의 조합으로 구현될 수 있다. 개시된 실시예들은 또한, 하나 이상의 프로세서에 의해 판독 및 실시될 수 있는 하나 이상의 비일시적 머신 판독가능(예컨대, 컴퓨터 판독가능) 스토리지 매체에 수용 또는 저장되는 명령어로서 구현될 수도 있다. 머신 판독가능 스토리지 매체는 정보를 머신에 의해 판독 가능한 형태로 저장하는 임의의 스토리지 장치, 메커니즘, 또는 그 밖의 물리적 구조(예컨대, 휘발성 또는 비휘발성 메모리, 미디어 디스크, 또는 그 밖의 미디어 장치)로서 구체화될 수 있다.
도면들에 있어서, 일부 구조상의 또는 방법상의 특징들은 특정한 배치 및/또는 배열로 도시될 수 있다. 그러나, 상기와 같은 특정한 배치 및/또는 배열이 필요치 않을 수 있음을 인식해야 한다. 오히려, 일부 실시예에 있어서는, 상기와 같은 특징들이 예시적인 도면들에 도시된 것과는 다른 방식 및/또는 순서로 배치될 수 있다. 부가적으로, 특정한 도면에서 구조 또는 방법상의 특징을 포함시킨다는 것은, 상기와 같은 특징이 모든 실시예에서 필요하다는 점을 암시하려는 것이 아니고, 일부 실시예에 있어서는, 포함되지 않을 수 있거나 또는 다른 특징들과 결합될 수 있다는 것이다.
이제, 도 1을 참조하면, 예시적인 실시예에 있어서, 보안 부트를 수행하는 시스템(100)은 컴퓨팅 장치(102)를 포함한다. 사용시에, 컴퓨팅 장치(102)의 보안 엔진(140)은 컴퓨팅 장치(102)의 메모리(130)에 저장된 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))를 취득 및 인증한다. 컴퓨팅 장치(102)의 프로세서(110)는 프로세서(110)의 캐시 메모리(112)의 일부를 CAR(Cache as RAM(RAM으로서의 캐시))(114)으로서 초기화하기 위해, 인증된 플랫폼 초기화 펌웨어(136)를 실행할 수 있다. 컴퓨팅 장치(102)의 메모리(130)는 또한, 프로세서(110)의 초기화(예컨대, 부팅 등)를 완료하는데 필요해질 수 있는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))를 저장할 수 있다. 일부 실시예에 있어서, 초기 부트 펌웨어(136)의 총 스토리지 크기는 보안 엔진(140)의 보안 메모리(142)에서 이용 가능한 스토리지 용량의 크기를 초과할 수 있다. 상기와 같은 실시예에 있어서, 초기 부트 펌웨어(136)는, 각각 보안 엔진(140)에 의해 메모리(130)로부터 취득되고 나서 보안 메모리(142)에 저장될 수 있는 다수의 블록(예컨대, 세그먼트, 블랍(blob), 포션, 서브세트 등)으로 나뉠 수 있다. 보안 엔진(140)은 보안 메모리(142)에 저장된 초기 부트 펌웨어(136)의 각각의 취득된 블록에 대한 해시 값을 결정할 수 있다. 초기 부트 펌웨어(136)의 취득된 블록에 대한 해시 값을 생성하고 나서, 보안 엔진(140)은 해당 블록을 프로세서(110)의 캐시 메모리(112) 내의 초기화된 CAR(114)에 복사할 수 있다. 일부 실시예에 있어서는, 보안 엔진(140)을 대신하여, 프로세서(110)가 초기 부트 펌웨어(136)의 각각의 블록을 CAR(114)에 복사할 수 있다. 초기 부트 펌웨어(136)의 취득된 블록들 각각에 대하여 결정된 해시 값들에 기초하여, 총합 해시 값(aggregated hash value)이 보안 엔진(140)에 의해 생성될 수 있다. 총합 해시 값은 원래의 또는 순수한 버전의 초기 부트 펌웨어(136)에 대한 기지의 해시 값에 대응하는 기준 해시 값 또는 체크섬 값과 비교될 수 있다. 프로세서 초기화는 총합 해시 값이 기준 해시 값과 매칭된다는 결정에 응답하여 완료될 수 있다. 일부 실시예에 있어서는, 총합 해시 값이 기준 해시 값과 매칭되지 않는다는 결정에 응답하여 하나 이상의 보안 기능이 수행될 수 있다. 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))를 다수의 블록으로 나누고, 각각의 블록을 보안 메모리(142)에 연속으로 저장하고 나서, 해시 값의 생성 이후에 보안 메모리(142)로부터 각각의 블록을 CAR(114)에 복사하는 것에 의해, 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 총 스토리지 크기가 보안 엔진(140)의 보안 메모리(142)에서 이용 가능한 스토리지 용량의 크기를 초과할 수 있다는 점을 인식해야 한다. 즉, 보안 엔진(140)의 보안 메모리(142)의 스토리지 용량의 크기는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 총 스토리지 크기를 제한하지 않는다.
일부 실시예에 있어서, 보안 엔진(140)의 보안 메모리(142)는 다수의 버퍼(144, 146)(예컨대, BUFFER 1(144) 및 BUFFER 2(146))를 포함한다. 상기와 같은 실시예에 있어서, 보안 엔진(140)은 메모리(130)로부터 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 초기 블록(예컨대, 제 1 블록)을 취득하는 한편, 해당 블록을 보안 메모리(142)의 버퍼(144)(예컨대, BUFFER 1(144))에 저장할 수 있다. 초기 블록(예컨대, 제 1 블록)에 대한 해시 값의 결정과 동시에, 보안 엔진(140)은 메모리(130)로부터 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 다음 블록(예컨대, 제 2 블록)을 취득하는 한편, 해당 블록을 보안 메모리(142)의 버퍼(146)(예컨대, BUFFER 2(146))에 저장할 수 있다. 초기 블록의 해시 값의 결정시에, 보안 엔진(140) 또는 프로세서(110)는 해당 블록을 프로세서(110)의 캐시 메모리(112) 내의 초기화된 CAR(114)에 복사할 수 있다. 상기와 같은 실시예에 있어서, 보안 엔진(140)은 초기 부트 펌웨어(136)의 추가 블록들의 취득 및 버퍼들(144, 146) 중 하나에의 해당 블록들의 저장을, 이용 가능한 버퍼(144, 146)(예컨대, 이전의 블록은 버퍼(144, 146)에서 및 CAR(114)에 복사되어 있음)에 기초하여 교번식으로, 지속할 수 있다. 논의된 바와 같이, 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))를 다수의 블록으로 나누고, 각각의 블록을 보안 메모리(142)에 연속으로 저장하고 나서, 해시 값의 생성 이후에 보안 메모리(142)로부터 각각의 블록을 CAR(114)에 복사하는 것에 의해, 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 총 스토리지 크기는 보안 엔진(140)의 보안 메모리(142)에서 이용 가능한 스토리지 용량의 크기보다 커질 수 있다.
컴퓨팅 장치(102)는, 한정되는 것은 아니지만, 데스크탑 컴퓨터, 랩탑 컴퓨팅 장치, 서버 컴퓨터, 가전제품, 모바일 컴퓨팅 장치, 모바일 폰, 스마트폰, 태블릿 컴퓨팅 장치, 개인 정보 단말, 웨어러블 컴퓨팅 장치, 스마트 텔레비전, 스마트 가전, 및/또는 그 밖의 유형의 컴퓨팅 장치를 포함하는, 본 명세서에 기재된 기능들을 수행할 수 있는 임의의 유형의 컴퓨팅 장치로서 구체화될 수 있거나, 내지는 이를 포함할 수 있다. 예시적인 컴퓨팅 장치(102)는 프로세서(110), 메모리(130), 입력/출력(I/O) 서브시스템(120), 보안 엔진(140), 통신 회로(150), 및 데이터 스토리지(160)를 포함한다. 물론, 컴퓨팅 장치(102)는, 다른 실시예들에 있어서는, 컴퓨터에서 흔히 발견되는 것들과 같은, 그 밖의 또는 부가적인 컴포넌트들(예컨대, 다양한 입력/출력 장치들)을 포함할 수 있다. 부가적으로, 일부 실시예에 있어서, 하나 이상의 예시적인 컴포넌트가 다른 컴포넌트에 포함될 수 있거나, 내지는 그 일부를 형성할 수 있다. 예컨대, 메모리(130), 또는 그 일부는, 일부 실시예에 있어서, 프로세서(110)에 포함될 수 있다.
프로세서(110)는 본 명세서에 기재된 기능들을 수행할 수 있는 임의의 유형의 프로세서로서 구체화될 수 있다. 예컨대, 프로세서(110)는 싱글 또는 멀티-코어 프로세서(들), 디지털 신호 프로세서, 마이크로컨트롤러, 또는 그 밖의 프로세서 또는 프로세싱/컨트롤링 회로로서 구체화될 수 있다. 프로세서(110)는 실행을 위한 명령어들 및/또는 데이터를 저장하는 캐시 메모리(112)를 포함할 수 있다. 일부 실시예에 있어서, 아래에서 더 상세히 논의되는 바와 같이, 캐시 메모리(112)의 일부는 CAR(Cache as RAM)(114)로서 초기화될 수 있다. 상기와 같은 실시예에 있어서, CAR(114)은, 메모리(130)(예컨대, 메인 장치 메모리)가 초기화되기 전에, 부팅 프로세스 동안 필요한 데이터 및/또는 변수들을 저장하기 위해 컴퓨팅 장치(102)의 컴포넌트들에 의해 사용될 수 있다. 예컨대, 일부 실시예에 있어서, 프로세서(110)는 저장을 위해 보안 엔진(140)의 보안 메모리(142)로부터 및 CAR(114)에 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 하나 이상의 블록을 복사(예컨대, 취득, 이동, 재배치, 획득 등)할 수 있다.
메모리(130)는 본 명세서에 기재된 기능들을 수행할 수 있는 임의의 유형의 휘발성 또는 비휘발성 메모리 또는 데이터 스토리지로서 구체화될 수 있다. 동작 중에, 메모리(130)는 운영 체제, 애플리케이션, 프로그램, 라이브러리, 및 드라이버와 같은 컴퓨팅 장치(102)의 동작 동안 사용되는 다양한 데이터 및 소프트웨어를 저장할 수 있다. 메모리(130)는, 컴퓨팅 장치(102)의 프로세서(110), 메모리(130), 및 그 밖의 컴포넌트들과의 입력/출력 동작을 가능하게 하기 위해 회로 및/또는 컴포넌트로서 구체화될 수 있는, I/O 서브시스템(120)을 통해 프로세서(110)에 통신 가능하게 연결된다. 예컨대, I/O 서브시스템(120)은 입력/출력 동작이 가능하도록 메모리 컨트롤러 허브, 입력/출력 컨트롤 허브, 펌웨어 장치, 통신 링크(즉, 점대점 링크, 버스 링크, 와이어, 케이블, 광 가이드, 인쇄 회로 기판 트레이스 등) 및/또는 그 밖의 컴포넌트 및 서브시스템으로서 구체화될 수 있거나, 내지는 이를 포함할 수 있다. 일부 실시예에 있어서, I/O 서브시스템(120)은 시스템-온-칩(SoC)의 일부분을 형성할 수 있는 한편, 컴퓨팅 장치(102)의 프로세서(110), 메모리(130), 및 그 밖의 컴포넌트들과 함께, 단일의 집적회로 칩에 포함될 수 있다.
일부 실시예에 있어서, 메모리(130)는 컴퓨팅 장치(102)의 플랫폼 및/또는 운영 체제(OS)의 부팅 내지는 초기화를 가능하게 하도록 구성된 펌웨어(132)를 포함한다. 펌웨어(132)는 하드웨어 컴포넌트, 소프트웨어 컴포넌트, 또는 그 조합(예컨대, 시스템 펌웨어, 시스템 초기화 데이터 등)으로서 구체화될 수 있다. 일부 실시예에 있어서, 펌웨어(132)는, 프로세서(110) 및/또는 보안 엔진(140)에 의한 실행시에, 컴퓨팅 장치(102)의 하나 이상의 컴포넌트가 초기화되게 하거나, 및/또는 하나 이상의 플랫폼 초기화 기능이 수행되게 하는 저레벨 시스템 코드를 포함한다. 예컨대, 일부 실시예에 있어서, 펌웨어(132)는, 프로세서(110)에 의한 실행시에, 프로세서(110)로 하여금 캐시 메모리(112)의 일부를 CAR(114)로서 초기화하게 하는 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))를 포함한다. 부가적으로, 일부 실시예에 있어서, 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))의 실행은, 프로세서(110)로 하여금, 상응하는 해시 값의 생성 이후에 보안 엔진(140)의 보안 메모리(142)로부터 및 CAR(114)에 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 하나 이상의 블록을 복사(예컨대, 취득, 이동, 재배치, 획득 등)하게 할 수 있다. 일부 실시예에 있어서, 펌웨어(132)는 또한, 실행시에, 프로세서(110)로 하여금, 그 초기화 프로세스를 완료하게 하는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))를 포함한다. 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))의 실행 동안, 프로세서(110)는 완전하게 동작(예컨대, 기능)하고 있지 않을 수 있다. 즉, 프로세서(110)는 플랫폼 초기화 펌웨어(134)에 의해 규정된 대로 기본적인 및/또는 감소된 기능을 포함할 수 있다. 아래에서 논의되는 바와 같이, 프로세서(110)의 완전한 기능은 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 실행 이후에 가능해질 수 있다. 일부 실시예에 있어서는, 플랫폼 초기화 펌웨어(134)가 STAGE-0 부트 로더로서 구체화될 수 있으며, 초기 부트 펌웨어(136)가 STAGE-1 부트 로더로서 구체화될 수 있음을 인식해야 한다.
보안 엔진(140)은 본 명세서에 기재된 기능들을 수행할 수 있는 임의의 하드웨어 컴포넌트(들) 또는 회로로서 구체화될 수 있다. 일부 실시예에 있어서, 보안 엔진(140)은, 프로세서(110)의 동작 상태(예컨대, 프로세서(110)는 스탠바이 또는 전원 차단 상태에 있을 수 있음)에 관계없이, 프로세서(110)와는 별도로 동작할 수 있는 보안 코프로세서 또는 마이크로컨트롤러로서 구체화될 수 있다. 부가적으로 또는 대안으로서, 일부 실시예에 있어서, 보안 엔진(140)은 프로세서(110)와는 별개의 범용 프로세서(예컨대, 제 2 프로세서)로서 구체화될 수 있다. 동작 중에, 보안 엔진(140)은 컴퓨팅 장치(102)의 "보안 부트(secure boot)" 또는 "신뢰 부트(trusted boot)"를 수행할 수 있다. 그렇게 하기 위해, 보안 엔진(140)은 메모리(130)와는 별도의 내부 또는 로컬 보안 메모리일 수 있는 보안 메모리(142)를 포함한다. 보안 메모리(142)에 저장된 데이터는 보안 엔진(140)에 액세스할 수 있으며, 컴퓨팅 장치(102)의 다른 컴포넌트들에는 액세스할 수 없다. 일부 실시예에 있어서, 보안 메모리(142)는, 보안 엔진(140)에 의해 메모리(130)로부터 취득될 수 있는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 하나 이상의 블록을 저장하도록 구성될 수 있다. 보안 메모리(142)는, 이전에 저장된 블록이 다른 메모리(예컨대, CAR(114))에 복사(예컨대, 이동, 재배치, 전송 등)된 후에, 초기 부트 펌웨어(136)의 다음 블록이 보안 메모리(142)에서 취득 및 저장되는 선입선출 프로세스에 따라 초기 부트 펌웨어(136)의 블록들을 저장할 수 있다.
부가적으로 또는 대안으로서, 일부 실시예에 있어서, 보안 메모리(142)는 "핑-퐁 버퍼(ping-pong buffer)"로서 집단적으로 동작하도록 구성될 수 있는 다수의 버퍼(144, 146)(예컨대, BUFFER 1(144) 및 BUFFER 2(146))를 포함할 수 있다. 상기와 같은 실시예에 있어서, 초기 부트 펌웨어(136)의 블록(예컨대, 제 1 블록)은 제 1 버퍼(144)(예컨대, BUFFER 1(144))에 저장될 수 있다. 해당 블록(예컨대, 제 1 블록)의 처리 동안, 다른 블록(예컨대, 제 2 블록)이 제 2 버퍼(146)(예컨대, BUFFER 2(146))에 저장될 수 있다. 제 1 블록의 처리가 완료된 후에, 이는 제 1 버퍼(144)(예컨대, BUFFER 1(144))로부터 CAR(114)에 복사(예컨대, 이동, 재배치, 전송 등)될 수 있다. 이후, 다음 블록(예컨대, 제 3 블록)이 현재 이용 가능한 제 1 버퍼(144)(예컨대, BUFFER 1(144))에 저장되고, 결국 처리될 수 있다. 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 나머지 블록들은, 이용 가능한 버퍼(144, 146)(예컨대, 이전에 저장된 블록은 CAR(114)에 복사되어 있음)에 기초하여 교번식으로 버퍼들(144, 146)(예컨대, BUFFER 1(144) 및 BUFFER 2(146))에 저장될 수 있다. 보안 메모리(142)가 2개의 버퍼(144, 146)(예컨대, BUFFER 1(144) 및 BUFFER 2(146))를 예시적으로 포함하고 있지만, 보안 메모리(142)는 임의의 개수의 버퍼(예컨대, 1개의 버퍼, 2개의 버퍼, 3개의 버퍼, 4개의 버퍼 등)를 포함할 수 있음을 인식해야 한다. 부가적으로 또는 대안으로서, 버퍼(144, 146)(예컨대, BUFFER 1(144), BUFFER 2(146), 및 임의의 다른 버퍼들)는 "핑-퐁 버퍼"로서, "링 버퍼(ring buffer)"로서, 또는 임의의 다른 버퍼링 프로세스 및/또는 버퍼링 유형에 따라 동작하도록 구성될 수 있다.
컴퓨팅 장치(102)의 통신 회로(150)는, 컴퓨팅 장치(102)와 하나 이상의 다른 컴퓨팅 장치 사이의 통신을 가능하게 할 수 있는 임의의 유형의 통신 회로, 장치, 또는 그 집합체로서 구체화될 수 있다. 통신 회로(150)는 상기와 같은 통신을 실현하기 위해 어느 하나 이상의 통신 기술(예컨대, 무선 또는 유선 통신) 및 연관 프로토콜(예컨대, 이더넷(Ethernet), 와이파이(Wi-Fi®), 와이맥스(WiMAX) 등)을 이용하도록 구성될 수 있다.
데이터 스토리지(160)는, 예컨대 메모리 장치 및 회로, 메모리 카드, 하드 디스크 드라이브, 솔리드-스테이트 드라이브, 또는 그 밖의 데이터 스토리지 장치와 같이, 데이터의 단기 또는 장기 저장을 위해 구성된 임의의 유형의 장치 또는 장치들로서 구체화될 수 있다. 예컨대, 데이터 스토리지(160)는 컴퓨팅 장치(102)에 의해 초기화 및/또는 실행되게 하기 위해 하나 이상의 운영 체제를 저장하도록 구성될 수 있다. 일부 실시예에 있어서, 운영 체제(들)의 일부분들은 더 신속한 처리를 위해 및/또는 임의의 다른 이유로 동작 동안 메모리(130)에 복사될 수 있다.
이제, 도 2를 참조하면, 사용시에, 컴퓨팅 장치(102)가 동작 동안 환경(200)을 확립한다. 예시적인 환경(200)은 보안 부트 모듈(202) 및 프로세서 초기화 모듈(212)을 포함한다. 보안 부트 모듈(202)은 보안 엔진(140)에 의해 확립될 수 있으며, 또한 일부 실시예에 있어서는, 인증 모듈(204), 블록 취득 모듈(206), 해시 생성 모듈(208), 및 블록 전송 모듈(210)을 포함할 수 있다. 프로세서 초기화 모듈(212)은 프로세서(110)에 의해 확립될 수 있으며, 또한 일부 실시예에 있어서는, 캐시 초기화 모듈(214) 및 해시 비교 모듈(216)을 포함할 수 있다. 일부 실시예에 있어서, 프로세서 초기화 모듈(212)은 프로세서(110)에 의한 인증된 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))의 실행에 응답하여 프로세서(110)에 의해 확립될 수 있다. 환경(200)의 모듈, 로직, 및 그 밖의 컴포넌트들 각각은 하드웨어, 소프트웨어, 펌웨어, 또는 그 조합으로서 구체화될 수 있다. 컴퓨팅 장치(102)는, 설명의 명료화를 위해 도 2에 나타내지지 않은, 컴퓨팅 장치에서 흔히 발견되는 다른 컴포넌트, 서브-컴포넌트, 모듈, 및 장치를 포함할 수 있음을 인식해야 한다.
보안 부트 모듈(202)은, 부팅 프로세스의 초기에(예컨대, 하드웨어 컴포넌트, 운영 체제 등의 초기화 전에) 컴퓨팅 장치(102)의 하나 이상의 컴포넌트를 초기화하기 위해 보안 엔진(140) 및/또는 프로세서(110)에 의해 실행되도록 구성되는 저레벨 코드 및/또는 명령어로서 구체화될 수 있는 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))를 인증하도록 구성될 수 있다. 그렇게 하기 위해, 보안 부트 모듈(202)은 인증 모듈(204)을 포함할 수 있다. 일부 실시예에 있어서, 인증 모듈(204)은 컴퓨팅 장치(102)의 메모리(130) 또는 다른 펌웨어 스토리지로부터 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))를 취득 내지는 획득하도록 구성될 수 있다. 부가적으로, 인증 모듈(204)은 플랫폼 초기화 펌웨어(134)를 인증하기 위해 임의의 적절한 프로세스를 이용하도록 구성될 수 있다. 예컨대, 일부 실시예에 있어서, 인증 모듈(204)은 플랫폼 초기화 펌웨어(134)와 관련된 디지털 서명을 검증할 수 있거나, 및/또는 플랫폼 초기화 펌웨어(134)로부터 생성된 해시를 플랫폼 초기화 펌웨어(134)의 기준(예컨대, 비수정된, 순수한, 원래의 등) 버전에 대응하는 기지의 해시와 비교할 수 있다. 일부 실시예에 있어서, 인증 모듈(204)은 플랫폼 초기화 펌웨어(134)가 인증되어 있다는 결정에 응답하여 프로세서 초기화 모듈(212)(또는 그 컴포넌트)에 통지하도록 구성될 수 있다.
논의된 바와 같이, 컴퓨팅 장치의 메모리(130)는, 실행시에, 프로세서(110)로 하여금 초기화 프로세스를 완료하게 하는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))를 저장할 수 있다. 일부 실시예에 있어서, 초기 부트 펌웨어(136)의 스토리지 크기는 보안 엔진(140)의 보안 메모리(142)에 의해 이용 가능한, 내지는 제공되는 스토리지의 크기를 초과할 수 있다. 상기와 같이, 컴퓨팅 장치(102)의 보안 부트가 가능하도록, 초기 부트 펌웨어(136)는 다수의 블록(예컨대, 세그먼트, 블랍, 포션, 서브세트 등)으로 나뉠 수 있다. 각각의 블록은 보안 메모리(142)에서 이용 가능한 스토리지 및/또는 다수의 버퍼(144, 146)(예컨대, BUFFER 1(144), BUFFER 2(146) 등) 각각의 크기보다 크기가 작을 수 있다. 부가적으로, 각각의 블록은 서로 동일한 메모리 내 크기를 가질 수 있다. 상기와 같은 실시예에 있어서, 보안 부트 모듈(202)은 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록에 대한 해시 값을 연속으로 결정하도록 구성될 수 있다. 그렇게 하기 위해, 보안 부트 모듈(202)은 블록 취득 모듈(206), 해시 생성 모듈(208), 및 블록 전송 모듈(210)을 포함할 수 있다.
블록 취득 모듈(206)은 컴퓨팅 장치(102)의 메모리(130) 또는 다른 펌웨어 스토리지로부터 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록을 연속으로 취득하도록 구성될 수 있다. 또한, 블록 취득 모듈(206)은 취득된 블록들을 보안 엔진(140)의 보안 메모리(142)에 저장하도록 구성될 수 있다. 보안 메모리(142)가 취득된 블록들을 선입선출 프로세스에 따라 저장하도록 구성되는 실시예들에 있어서, 블록 취득 모듈(206)은, 초기 부트 펌웨어(136)의 이전의 블록이 보안 메모리(142)에서 및 CAR(114)에 복사된 후에, 초기 부트 펌웨어(136)의 후속 블록들을 취득 및 저장할 수 있다. 보안 메모리(142)가 "핑-퐁 버퍼"로서 동작하도록 구성된 다수의 버퍼(144, 146)(예컨대, BUFFER 1(144) 및 BUFFER 2(146))를 포함하는 실시예들에 있어서, 블록 취득 모듈(206)은, 이용 가능한 버퍼(144, 146)(예컨대, 이전에 저장된 블록은 CAR(114)에 복사되어 있음)에 기초하여 초기 부트 펌웨어(136)의 블록들을 연속으로 취득 및 저장할 수 있다. 상기와 같은 실시예들에 있어서, 블록 취득 모듈(206)은 버퍼들(144, 146) 중 하나(예컨대, BUFFER 1(144) 또는 BUFFER 2(146))에 현재 저장되어 있는 이전의 블록의 처리와 동시에 메모리(130)로부터 각각의 후속 블록을 취득할 수 있다.
해시 생성 모듈(208)은 메모리(130)로부터 취득되고 나서 보안 메모리(142)에 저장되는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록에 대한 해시 값을 생성하도록 구성될 수 있다. 그렇게 하기 위해, 해시 생성 모듈(208)은 각각의 블록에 암호화 해시 함수를 적용해서 상응하는 해시 값을 결정할 수 있다. 일부 실시예에 있어서, 암호화 해시 함수는 보안 해시 알고리즘(예컨대, SHA-0, SHA-1, SHA-2, SHA-3 등)으로서 구체화될 수 있다. 그러나, 암호화 해시 함수는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 무결성을 검증하기 위한 임의의 다른 유형의 함수 또는 알고리즘으로서 구체화될 수 있음을 인식해야 한다.
부가적으로, 해시 생성 모듈(208)은 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 블록들 각각에 대하여 생성된 해시 값들에 기초하여 총합 해시 값을 생성하도록 구성될 수 있다. 그렇게 하기 위해, 해시 생성 모듈(208)은 결정된 해시 값들을 합산(예컨대, 해시 값들의 총계를 생성 등)해서, 총합 해시 값을 생성할 수 있다. 논의된 바와 같이, 총합 해시 값은 초기 부트 펌웨어(136)에 대응하는 기지(예컨대, 미리 결정된, 미리 계산된, 기준 등)의 해시 값 및/또는 체크섬과 비교될 수 있다.
블록 전송 모듈(210)은 상응하는 해시 값이 생성된 후에 보안 메모리(142)에서 및 CAR(114)에 초기 부트 펌웨어(136)의 각각의 블록을 복사(예컨대, 이동, 재배치, 전송 등)하도록 구성될 수 있다. 일부 실시예에 있어서, 블록 전송 모듈(210)은, 블록이 CAR(114)에 복사되고 있음에 응답하여, 보안 메모리(142) 및/또는 버퍼들(144, 146)(예컨대, BUFFER 1(144) 또는 BUFFER 2(146))로부터 초기 부트 펌웨어(136)의 블록을 클리어(예컨대, 리셋, 지우기, 삭제 등)하도록 구성될 수 있다. 상응하는 해시 값이 생성된 후에 보안 메모리(142) 및/또는 버퍼들(144, 146)에서 초기 부트 펌웨어(136)의 각각의 블록을 복사함으로써, 보안 메모리(142)가 다른 블록(예컨대, 다음 블록)을 저장하는데 이용 가능해진다는 점을 인식해야 한다. 논의된 바와 같이, 일부 실시예에 있어서는, 보안 엔진(140)보다는 오히려 프로세서(110)가, 상응하는 해시 값이 생성된 후에, 보안 메모리(142)에서 및 CAR(114)에 초기 부트 펌웨어(136)의 각각의 블록을 복사(예컨대, 취득, 이동, 재배치, 전송, 획득 등)할 수 있다. 일부 실시예에 있어서는, 보안 부트 모듈(202)보다는 오히려 프로세서 초기화 모듈(212)이 블록 전송 모듈(210)을 포함할 수 있다.
프로세서 초기화 모듈(212)은 보안 부트 모듈(202)로부터 수신된, 내지는 획득된 펌웨어에 기초하여 프로세서(110)를 전부 또는 일부 초기화하도록 구성될 수 있다. 예컨대, 일부 실시예에 있어서, 프로세서 초기화 모듈(212)은 인증 모듈(204)에 의해 인증된 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))를 보안 메모리(142)로부터 취득하도록 구성될 수 있다. 상기와 같은 실시예에 있어서, 프로세서 초기화 모듈(212)은 플랫폼 초기화 펌웨어(134)에 의해 규정된 대로 프로세서(110)에 대하여 기본적인 및/또는 감소된 기능을 가능하게 할 수 있다.
프로세서 초기화 모듈(212)은 또한, 메모리(130)(예컨대, 메인 장치 메모리)의 초기화 전에는, 부팅 프로세스 동안 필요한 데이터 및/또는 변수들의 저장에 사용되도록 프로세서(110)의 캐시 메모리(112)를 전부 또는 일부 초기화하도록 구성될 수도 있다. 그렇게 하기 위해, 일부 실시예에 있어서는, 프로세서 초기화 모듈(212)이 캐시 초기화 모듈(214)을 포함할 수 있다. 캐시 초기화 모듈(214)은 CAR(Cache as RAM)(114)로서 사용되도록 프로세서(110)의 캐시 메모리(112)를 전부 또는 일부 초기화하도록 구성될 수 있다. 위에서 논의된 바와 같이, CAR(114)은 해시 생성 모듈(208)이 상응하는 해시 값들을 결정한 후에 초기화 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 블록들을 저장하는데 사용될 수 있다.
부가적으로, 일부 실시예에 있어서, 프로세서 초기화 모듈(212)은 상응하는 해시 값이 생성된 후에 보안 메모리(142)에서 및 CAR(114)에 초기화 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록을 복사(예컨대, 취득, 이동, 재배치, 전송 등)하도록 구성될 수 있다. 상기와 같은 실시예에 있어서는, 보안 부트 모듈(202)보다는 오히려 프로세서 초기화 모듈(212)이 블록 전송 모듈(210)을 포함할 수 있다. 일부 실시예에 있어서, 프로세서 초기화 모듈(212)의 블록 전송 모듈(210)은, 상응하는 해시 값의 생성이 완료되어 있다는 메시지(예컨대, 신호 또는 임의의 다른 유형의 통지)를 보안 엔진(140)(또는 그 컴포넌트)으로부터 수신함에 따라, 보안 메모리(142)에서 및 CAR(114)에 초기 부트 펌웨어(136)의 각각의 블록을 복사(예컨대, 취득, 이동, 재배치, 전송, 획득 등)할 수 있다.
프로세서 초기화 모듈(212)은 또한, 총합 해시 값을 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))에 대응하는 기준 해시 값(예컨대, 미리 계산된 해시 값, 미리 결정된 해시 값, 기지의 해시 값 등)과 비교하도록 구성될 수도 있다. 그렇게 하기 위해, 프로세서 초기화 모듈(212)은 해시 비교 모듈(216)을 포함할 수 있다. 해시 비교 모듈(216)은, 총합 해시 값이 기준 해시 값 또는 체크섬 값의 미리 정해진(예컨대, 기준) 허용치와 매칭되는지, 내지는 실질적으로 유사하거나 또는 그 이내의 값인지의 여부를 결정하도록 구성될 수 있다. 즉, 해시 비교 모듈(216)은, 총합 해시 값이 순수한(예컨대, 비수정된, 원래의 등) 버전의 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))에 대응하는 기지의 양호한 해시 또는 체크섬 값과 매칭되는지의 여부를 결정할 수 있다.
일부 실시예에 있어서, 프로세서 초기화 모듈(212)은 또한, 총합 해시 값이 기준(예컨대, 미리 계산된, 미리 결정된, 기지의 등) 해시 값 또는 체크섬 값의 미리 정해진(예컨대, 기준) 허용치와 매칭되거나, 내지는 실질적으로 유사하거나 또는 그 이내의 값이라는, 해시 비교 모듈(216)에 의한 결정에 응답하여 프로세서(110)의 초기화를 완료하도록 구성될 수도 있다. 상기와 같은 실시예에 있어서는, 프로세서(110)의 완전한 동작 및/또는 기능이 가능해질 수 있는 한편, 컴퓨팅 장치의 부가적인 컴포넌트들(예컨대, 하드웨어 컴포넌트, 주변 장치, 운영 체제 등)이 초기화될 수 있다. 부가적으로 또는 대안으로서, 프로세서 초기화 모듈(212)은 또한, 총합 해시 값이 기준 해시 값 또는 체크섬 값의 미리 정해진(예컨대, 기준) 허용치와 매칭되지 않거나, 내지는 실질적으로 유사하거나 또는 그 이내의 값이 아니라는 결정에 기초하여 하나 이상의 보안 기능을 수행하도록 구성될 수도 있다. 예컨대, 일부 실시예에 있어서, 프로세서 초기화 모듈(212)은 총합 해시 값이 기준 해시 값 또는 체크섬 값과 매칭되지 않는다는 결정에 응답하여 컴퓨팅 장치(102)를 셧다운(shut down)시키거나 또는 리부팅(reboot)하는 하나 이상의 보안 기능을 수행할 수 있다. 부가적으로 또는 대안으로서, 프로세서 초기화 모듈(212)은 총합 해시 값이 기준 해시 값 또는 체크섬 값과 매칭되지 않는다는 결정에 응답하여 컴퓨팅 장치(102) 및/또는 컴퓨팅 장치(102)의 하나 이상의 컴포넌트 또는 서비스를 비활성화(disable)하는 하나 이상의 보안 기능을 수행할 수 있다. 프로세서 초기화 모듈(212)은 총합 해시 값이 기준 해시 값 또는 체크섬 값과 매칭되지 않는다는 결정에 응답하여 임의의 다른 유형의 보안 기능을 수행할 수 있음을 인식해야 한다.
이제, 도 3을 참조하면, 컴퓨팅 장치(102)는 보안 부트를 수행하기 위한 방법(300)을 실행할 수 있다. 방법(300)은 컴퓨팅 장치(102)의 보안 엔진(140)이 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))를 인증하는 블록(302)으로 시작한다. 플랫폼 초기화 펌웨어(134)는, 부팅 프로세스의 초기에(예컨대, 하드웨어 컴포넌트, 운영 체제 등의 초기화 전에) 컴퓨팅 장치(102)의 하나 이상의 컴포넌트를 초기화하기 위해 보안 엔진(140) 및/또는 프로세서(110)에 의해 실행되도록 구성되는 저레벨 코드 및/또는 명령어로서 구체화될 수 있다. 예컨대, 일부 실시예에 있어서, 플랫폼 초기화 펌웨어(134)는 프로세서(110)가 캐시 메모리(112)의 일부를 CAR(114)로서 초기화할 수 있게 하도록 구성될 수 있다. 부가적으로, 플랫폼 초기화 펌웨어(134)는 또한, 프로세서(110)가 보안 엔진(140)의 보안 메모리(142)로부터 및 CAR(114)에 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 하나 이상의 블록을 복사(예컨대, 취득, 이동, 재배치, 취득 등)할 수 있게 하도록 구성될 수도 있다. 동작 중에, 보안 엔진(140)은 플랫폼 초기화 펌웨어(134)를 인증하기 위해 임의의 적절한 프로세스를 이용할 수 있다. 예컨대, 일부 실시예에 있어서, 보안 엔진(140)은 플랫폼 초기화 펌웨어(134)와 관련된 디지털 서명을 검증할 수 있거나, 및/또는 플랫폼 초기화 펌웨어(134)로부터 생성된 해시를 원래(예컨대, 비수정, 순수한 등) 버전의 플랫폼 초기화 펌웨어(134)에 대응하는 기준(예컨대, 미리 계산된, 미리 결정된, 기지의 등) 해시 값과 비교할 수 있다. 일부 실시예에 있어서, 블록(304)에서, 보안 엔진(140)은 컴퓨팅 장치(102)의 메모리(130)로부터 플랫폼 초기화 펌웨어(134)(예컨대, STAGE-0 펌웨어(134))를 취득한다. 메모리(130)로부터 플랫폼 초기화 펌웨어(134)가 취득되면, 보안 엔진(140)은 플랫폼 초기화 펌웨어(134)를 보안 메모리(142)에 저장한다. 일부 실시예에 있어서, 블록(306)에서, 보안 엔진(140)은 또한, 플랫폼 초기화 펌웨어(134)가 인증되어 있음을 프로세서(110)에 통지할 수 있다.
블록(308)에서, 컴퓨팅 장치(102)의 프로세서(110)는 캐시 메모리(112)의 일부를 CAR(Csche as RAM)(114)로서 초기화한다. 그렇게 하기 위해, 프로세서(110)는 인증된 플랫폼 초기화 펌웨어(134)를 실행할 수 있다. 메모리(130)(예컨대, 메인 장치 메모리)의 초기화를 완료하기 전에는, 부팅 프로세스 동안 필요한 데이터 및/또는 변수들을 저장하기 위해 CAR(114)이 컴퓨팅 장치(102)의 컴포넌트들에 의해 사용될 수 있다. 일부 실시예에 있어서, 블록(310)에서, 프로세서(110)는 보안 엔진(140)의 보안 메모리(142)로부터 인증된 플랫폼 초기화 펌웨어(134)를 취득할 수 있다. 상기와 같은 실시예에 있어서, 프로세서(110)는 보안 엔진(140)으로부터의 통지를 수심함에 따라 인증된 플랫폼 초기화 펌웨어(134)를 취득할 수 있다.
블록(312)에서, 보안 엔진(140)은 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록에 대한 해시 값을 연속으로 결정할 수 있다. 논의된 바와 같이, 초기 부트 펌웨어(136)는 처음에는 컴퓨팅 장치(102)의 메모리(130)에 저장될 수 있으며, 프로세서(110)의 초기화가 완료되게 할 수 있게 구성될 수 있다. 일부 실시예에 있어서, 초기 부트 펌웨어(136)의 스토리지 크기는 보안 엔진(140)의 보안 메모리(142) 및/또는 하나 이상의 버퍼(144, 146)(예컨대, BUFFER 1(144) 및 BUFFER 2(146))에 의해 이용 가능하거나, 내지는 제공될 수 있는 스토리지의 크기를 초과할 수 있다. 상기와 같이, 컴퓨팅 장치(102)의 보안 부트가 가능하도록, 초기 부트 펌웨어(136)는 다수의 블록(예컨대, 세그먼트, 블랍, 포션, 서브세트 등)으로 나뉠 수 있다. 각각의 블록은 보안 메모리(142) 및/또는 하나 이상의 버퍼(144, 146)에서 이용 가능한 스토리지의 크기보다 크기가 작을 수 있다. 상기와 같은 실시예에 있어서는, 암호화 해시 함수가 각각의 블록에 적용되어서 상응하는 해시 값을 결정할 수 있다. 일부 실시예에 있어서, 암호화 해시 함수는 보안 해시 알고리즘(예컨대, SHA-0, SHA-1, SHA-2, SHA-3 등)으로서 구체화될 수 있다. 그러나, 암호화 해시 함수는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 무결성을 검증하기 위한 임의의 다른 유형의 함수 또는 알고리즘으로서 구체화될 수 있음을 인식해야 한다.
일부 실시예에 있어서, 보안 엔진(140)은 선입선출 프로세스를 이용해서 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록에 대한 해시 값을 연속으로 결정할 수 있다. 상기와 같은 실시예에 있어서, 보안 엔진(140)의 보안 메모리(142)는 임의의 주어진 시간에 초기 부트 펌웨어(136)의 단일의 블록을 저장하도록 구성될 수 있다. 상기와 같이, 미리 저장된 블록이 보안 엔진(140) 또는 프로세서(110)에 의해 CAR(114)에 복사될 때까지는, 초기 부트 펌웨어(136)의 다음 블록은 보안 메모리(142)에 대하여 취득 및 복사되지 않게 된다. 예컨대, 이제, 도 4를 참조하면, 컴퓨팅 장치(102)는 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록에 대한 해시 값을 연속으로 결정하기 위한 방법(400)을 실행할 수 있다. 방법(400)은, 컴퓨팅 장치(102)의 보안 엔진(140)이 메모리(130)로부터 초기 부트 펌웨어(136)의 다음 블록을 취득해서 보안 메모리(142)에 저장하는 블록(402)으로 시작한다. 방법(400)의 제 1 반복 동안, 보안 엔진(140)은 메모리(130)로부터 초기 부트 펌웨어(136)의 제 1 블록을 취득해서 보안 메모리(142)에 저장할 수 있음을 인식해야 한다.
이후, 블록(404)에서, 보안 엔진(140)은 보안 메모리(142)에 저장된 초기 부트 펌웨어(136)의 제 1/다음 블록의 해시 값을 계산 및/또는 결정한다. 그렇게 하기 위해, 보안 엔진(140)은 제 1/다음 블록에 암호화 해시 함수를 적용해서 상응하는 해시 값을 생성할 수 있다. 논의된 바와 같이, 각각의 블록은 보안 메모리(142)에서 이용 가능한 스토리지의 크기보다 크기가 작을 수 있다. 부가적으로, 일부 실시예에 있어서, 초기 부트 펌웨어(136)의 블록들 각각은 동일한 메모리 내크기를 가질 수 있다. 결과적으로, 상기와 같은 실시예에 있어서는, 블록들 각각에 대하여 생성된 해시 값들도 마찬가지로 동일한 크기를 가질 수 있다. 그러나, 서로 다른 크기들을 갖는 블록들의 해시 값들이 생성될 수도 있음을 인식해야 한다.
블록(406)에서, 보안 엔진(140) 또는 프로세서(110)는 보안 메모리(142)에서 및 CAR(114)에 초기 부트 펌웨어(136)의 제 1/다음 블록을 복사(예컨대, 취득, 이동, 재배치, 전송, 획득 등)할 수 있다. 일부 실시예에 있어서, 보안 엔진(140) 및/또는 프로세서(110)는, 보안 메모리(142)가 메모리(130)로부터 취득된 초기 부트 펌웨어(136)의 다음 블록(예컨대, 후속 블록)을 저장하는데 이용 가능하도록, 보안 메모리(142)로부터 초기 부트 펌웨어(136)의 제 1/다음 블록을 클리어(예컨대, 리셋, 지우기, 삭제 등)하도록 구성될 수 있다.
결정 블록(408)에서, 보안 엔진(140)은, 보안 메모리(142)로부터 CAR(114)에 복사된 초기 부트 펌웨어(136)의 제 1/다음 블록이 초기 부트 펌웨어(136)의 최종 블록인지의 여부를 결정한다. 즉, 여전히 메모리(130)로부터 취득되고, 보안 메모리(142)에 저장되고, 그로부터 생성된 상응하는 해시 값을 갖고, 또한 CAR(114)에 복사될 필요가 있는 초기 부트 펌웨어(136)의 임의의 잔여 블록들이 존재하는지의 여부를, 보안 엔진(140)이 결정할 수 있다. 결정 블록(408)에서, 보안 엔진(140)이 제 1/다음 블록이 초기 부트 펌웨어(136)의 최종 블록이 아니라고 결정하면, 방법(400)은 블록(402)으로 되돌아가서, 보안 메모리(142)에서의 저장을 위해 메모리(130)로부터 초기 부트 펌웨어(136)의 다음 블록(예컨대, 후속 블록)을 취득한다. 그러나, 그 대신에, 보안 엔진(140)이, 결정 블록(408)에서, 제 1/다음 블록이 초기 부트 펌웨어(136)의 최종 블록이라고 결정하면, 방법(400)은 종료하고, 도 3의 블록(314)으로 처리를 계속한다.
부가적으로 또는 대안으로서, 일부 실시예에 있어서, 보안 엔진(140)은 보안 메모리(142)의 다수의 버퍼(144, 146)(예컨대, BUFFER 1(144) 및 BUFFER 2(146))를 이용해서 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록에 대한 해시 값을 연속으로 결정할 수 있다. 상기와 같은 실시예에 있어서, 보안 메모리(142)의 각각의 버퍼(144, 146)(예컨대, BUFFER 1(144) 및 BUFFER 2(146))는 각각 임의의 주어진 시간에 초기 부트 펌웨어(136)의 단일의 블록을 저장하도록 구성될 수 있다. 예컨대, 이제, 도 5를 참조하면, 컴퓨팅 장치(102)는 보안 메모리(142)의 다수의 버퍼(144, 146)를 이용해서 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 각각의 블록에 대한 해시 값을 연속으로 결정하기 위한 방법(500)을 실행할 수 있다. 방법(500)은, 컴퓨팅 장치(102)의 보안 엔진(140)이 메모리(130)로부터 초기 부트 펌웨어(136)의 제 1/다음 블록을 취득해서 보안 메모리(142)의 제 1 버퍼(144)(예컨대, BUFFER 1(144))에 저장하는 블록(502)으로 시작한다.
이후, 블록(504)에서, 보안 엔진(140)은 제 1 버퍼(144)(예컨대, BUFFER 1(144))에 저장된 초기 부트 펌웨어(136)의 제 1/다음 블록의 해시 값을 계산 및/또는 결정한다. 그렇게 하기 위해, 보안 엔진(140)은 제 1/다음 블록에 암호화 해시 함수를 적용해서 상응하는 해시 값을 생성할 수 있다. 일부 실시예에 있어서, 각각의 블록은 보안 메모리(142)의 버퍼들(144, 146) 각각에서 이용 가능한 스토리지의 크기보다 크기가 작을 수 있다. 부가적으로, 일부 실시예에 있어서, 초기 부트 펌웨어(136)의 블록들 각각은 동일한 메모리 내 크기를 가질 수 있다. 결과적으로, 상기와 같은 실시예에 있어서는, 블록들 각각에 대하여 생성된 해시 값들도 마찬가지로 동일한 크기를 가질 수 있다. 그러나, 서로 다른 크기들을 갖는 블록들의 해시 값들이 생성될 수도 있음을 인식해야 한다.
블록(506)에서, 보안 엔진(140)은, 또는 일부 실시예에 있어서는 프로세서(110)는 제 1 버퍼(144)(예컨대, BUFFER 1(144))에서 및 CAR(114)에 초기 부트 펌웨어(136)의 제 1/다음 블록을 복사(예컨대, 취득, 이동, 재배치, 전송, 획득 등)할 수 있다. 일부 실시예에 있어서, 보안 엔진(140) 및/또는 프로세서(110)는, 제 1 버퍼(144)가 메모리(130)로부터 취득된 초기 부트 펌웨어(136)의 다른 블록(예컨대, 후속 블록)을 저장하는데 이용 가능하도록, 제 1 버퍼(144)로부터 초기 부트 펌웨어(136)의 제 1/다음 블록을 클리어(예컨대, 리셋, 지우기, 삭제 등)하도록 구성될 수 있다.
결정 블록(508)에서, 보안 엔진(140)은, 제 1 버퍼(144)로부터 CAR(114)에 복사된 초기 부트 펌웨어(136)의 제 1/다음 블록이 초기 부트 펌웨어(136)의 최종 블록인지의 여부를 결정한다. 즉, 여전히 메모리(130)로부터 취득되고, 보안 메모리(142)의 이용 가능한 버퍼(144, 146)에 저장되고, 그로부터 생성된 상응하는 해시 값을 갖고, 또한 CAR(114)에 복사될 필요가 있는 초기 부트 펌웨어(136)의 임의의 잔여 블록들이 존재하는지의 여부를, 보안 엔진(140)이 결정할 수 있다. 결정 블록(508)에서, 보안 엔진(140)이 제 1/다음 블록이 초기 부트 펌웨어(136)의 최종 블록이 아니라고 결정하면, 방법(500)은 블록(502)으로 되돌아가서, 제 1 버퍼(144)에서의 저장을 위해 메모리(130)로부터 초기 부트 펌웨어(136)의 다른 블록(예컨대, 제 3 블록, 다음 블록, 후속 블록 등)을 취득한다. 그러나, 그 대신에, 보안 엔진(140)이, 결정 블록(508)에서, 제 1/다음 블록이 초기 부트 펌웨어(136)의 최종 블록이라고 결정하면, 방법(500)은 종료하고, 도 3의 블록(314)으로 처리를 계속한다.
일부 실시예에 있어서, 블록(510)에서, 보안 엔진(140)은 메모리(130)로부터 초기 부트 펌웨어(136)의 제 2/다음 블록을 취득해서 보안 메모리(142)의 제 2 버퍼(146)(예컨대, BUFFER 2(146))에 저장한다. 컴퓨팅 장치(102) 및/또는 보안 엔진(140)은 블록(504)과 동시에 블록(510)을 실행할 수 있다는 점을 인식해야 한다. 즉, 보안 엔진(140)은 메모리(130)로부터 초기 부트 펌웨어(136)의 제 2 블록을 취득해서, 제 1 버퍼(146)에 저장된 제 1 블록의 해시 값이 결정될 때와 동시에 또는 중첩하는 시기에 제 2 버퍼(146)에 저장할 수 있다. 이후, 방법(500)은 블록(512)으로 진행한다.
이후, 블록(512)에서, 보안 엔진(140)은 제 2 버퍼(146)(예컨대, BUFFER 2(146))에 저장된 초기 부트 펌웨어(136)의 제 2/다음 블록의 해시 값을 계산 및/또는 결정한다. 그렇게 하기 위해, 보안 엔진(140)은 제 2/다음 블록에 암호화 해시 함수를 적용해서 상응하는 해시 값을 생성할 수 있다. 이후, 방법(500)은, 보안 엔진(140) 또는 프로세서(110)가 제 2 버퍼(146)(예컨대, BUFFER 2(146))에서 및 CAR(114)에 초기 부트 펌웨어(136)의 제 2/다음 블록을 복사(예컨대, 취득, 이동, 재배치, 전송, 획득 등)하는 블록(514)으로 진행한다. 일부 실시예에 있어서, 보안 엔진(140) 및/또는 프로세서(110)는, 제 2 버퍼(146)가 메모리(130)로부터 취득된 초기 부트 펌웨어(136)의 다른 블록(예컨대, 다음 블록 또는 후속 블록)을 저장하는데 다시 이용 가능하도록, 제 2 버퍼(146)로부터 초기 부트 펌웨어(136)의 제 2/다음 블록을 클리어(예컨대, 리셋, 지우기, 삭제 등)하도록 구성될 수 있다.
결정 블록(516)에서, 보안 엔진(140)은 제 2 버퍼(146)로부터 CAR(114)에 복사된 초기 부트 펌웨어(136)의 제 2/다음 블록이 초기 부트 펌웨어(136)의 최종 블록인지의 여부를 결정한다. 즉, 여전히 메모리(130)로부터 취득되고, 보안 메모리(142)의 이용 가능한 버퍼(144, 146)에 저장되고, 그로부터 생성된 상응하는 해시 값을 갖고, 또한 CAR(114)에 복사될 필요가 있는 초기 부트 펌웨어(136)의 임의의 잔여 블록들이 존재하는지의 여부를, 보안 엔진(140)이 결정할 수 있다. 결정 블록(516)에서, 보안 엔진(140)이 제 2/다음 블록이 초기 부트 펌웨어(136)의 최종 블록이 아니라고 결정하면, 방법(500)은 블록(510)으로 되돌아가서, 제 2 버퍼(146)에서의 저장을 위해 메모리(130)로부터 초기 부트 펌웨어(136)의 다른 블록(예컨대, 제 4 블록, 다음 블록, 후속 블록 등)을 취득한다. 그러나, 그 대신에, 보안 엔진(140)이, 결정 블록(516)에서, 제 2/다음 블록이 초기 부트 펌웨어(136)의 최종 블록이라고 결정하면, 방법(500)은 종료하고, 도 3의 블록(314)으로 처리를 계속한다.
다시, 도 3을 참조하면, 블록(314)에서, 보안 엔진(140)은 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 블록들 각각에 대하여 생성된 해시 값들로부터 총합 해시 값을 생성할 수 있다. 그렇게 하기 위해, 해시 생성 모듈(208)은 결정된 해시 값들을 합산(예컨대, 해시 값들의 총계를 생성 등)해서, 총합 해시 값을 생성할 수 있다. 해시 생성 모듈(208)은 결정된 해시 값을 합산하기 위해 임의의 적절한 프로세스를 이용할 수 있다.
블록(316)에서, 프로세서(110)는 총합 해시 값을 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))에 대응하는 기준(예컨대, 미리 결정된, 미리 계산된, 기지의 등) 해시 값 또는 체크섬 값과 비교한다. 방법(300)은, 총합 해시 값이 초기 부트 펌웨어(136)에 대응하는 기준 해시 값 또는 체크섬 값의 미리 정해진(예컨대, 기준) 허용치와 매칭되는지, 내지는 실질적으로 유사하거나 또는 그 이내의 값인지의 여부를, 프로세서(110)가 결정하는 결정 블록(318)으로 진행한다. 결정 블록(318)에서, 프로세서(110)가 총합 해시 값이 기준 해시 값 또는 체크섬 값의 미리 정해진(예컨대, 기준) 허용치와 매칭된다고, 내지는 실질적으로 유사하거나 또는 그 이내의 값이라고 결정하면, 방법(300)은 블록(320)으로 진행한다. 그러나, 그 대신에, 프로세서(110)가 총합 해시 값이 기준 해시 값 또는 체크섬 값의 미리 정해진(예컨대, 기준) 허용치와 매칭되지 않는다고, 내지는 실질적으로 유사하거나 또는 그 이내의 값이 아니라고 결정하면, 방법(300)은 블록(324)으로 진행한다.
블록(320)에서는, 총합 해시 값이 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))에 대한 기준(예컨대, 기지의, 미리 계산된, 미리 결정된 등) 해시 값 및/또는 체크섬 값과 매칭된다는 결정에 응답하여, 프로세서(110)의 초기화가 완료될 수 있다. 예컨대, 블록(322)에서, 프로세서는 CAR(114)에 저장된 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))의 시작점으로 건너뛰고 그로부터 실행을 시작할 수 있다. 그렇게 함에 있어서, 프로세서(110)의 완전한 동작이 가능해질 수 있다.
블록(324)에서, 프로세서(110)는, 총합 해시 값이 초기 부트 펌웨어(136)(예컨대, STAGE-1 펌웨어(136))에 대한 기준(예컨대, 기지의, 미리 계산된, 미리 결정된 등) 해시 값 또는 체크섬 값과 매칭되지 않는다는 결정에 기초하여, 하나 이상의 보안 기능을 수행한다. 예컨대, 블록(326)에서, 프로세서(110)는 컴퓨팅 장치 또는 그 임의의 컴포넌트를 셧다운시키거나 및/또는 비활성화할 수 있다. 부가적으로 또는 대안으로서, 블록(328)에서, 프로세서(110)는 상기와 같은 결정에 응답하여 컴퓨팅 장치(102)를 리부팅할 수 있다.
예시들(EXAMPLES)
본 명세서에 개시된 기술들의 실례가 되는 예시들이 아래에 제공된다. 그 기술들의 실시예는, 아래에 기재된 예시들의 어느 하나 이상, 및 그 임의의 조합을 포함할 수 있다.
예시 1은 보안 부팅을 수행하는 컴퓨팅 장치를 포함하고, 컴퓨팅 장치는, (i) 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하고; 이때 해시 값들을 연속으로 결정하는 것은 (a) 컴퓨팅 장치의 메모리로부터 복수의 블록의 각각의 블록을 취득하고, (b) 보안 엔진의 보안 메모리에 각각의 취득된 블록을 저장하고, (c) 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 것을 포함하고; 또한 (ii) 초기 부트 펌웨어의 각각의 블록에 대하여 결정된 해시 값으로부터 총합 해시 값을 생성하는 보안 부트 모듈을 포함하는 컴퓨팅 장치의 보안 엔진; 및 (i) 총합 해시 값을 초기 부트 펌웨어와 관련된 기준 체크섬(reference checksum) 값과 비교해서 총합 해시 값이 기준 체크섬 값과 매칭되는지의 여부를 결정하고, 또한 (ii) 총합 해시 값이 기준 체크섬 값과 매칭된다는 결정에 응답하여 프로세서의 초기화를 완료하는 프로세서 초기화 모듈 및 RAM으로서의 캐시(Cache as RAM)를 포함하는 프로세서를 포함하고, 보안 부트 모듈 또는 프로세서 초기화 모듈은 보안 메모리에 저장된 각각의 블록을 프로세서의 RAM으로서의 캐시(Cache as RAM)에 복사한다.
예시 2는 예시 1의 청구 대상을 포함하고, 여기서 보안 엔진은 컴퓨팅 장치의 프로세서와는 상이한 보안 코프로세서를 포함한다.
예시 3은 예시 1 및 예시 2 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 것은 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 암호화 해시 함수로 결정하는 것을 포함한다.
예시 4는 예시 1 내지 예시 3 중 어느 하나의 청구 대상을 포함하고, 여기서 암호화 해시 함수는 보안 해시 알고리즘을 포함한다.
예시 5는 예시 1 내지 예시 4 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록은 동일한 메모리 내 크기를 갖는다.
예시 6은 예시 1 내지 예시 5 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록은 보안 엔진의 보안 메모리의 메모리 스토리지 용량 이하의 메모리 내 크기를 갖는다.
예시 7은 예시 1 내지 예시 6 중 어느 하나의 청구 대상을 포함하고, 여기서 프로세서의 초기화를 완료하는 것은 (i) RAM으로서의 캐시(Cache as RAM)에 저장된 초기 부트 펌웨어의 시작점(beginning)으로 건너뛰는(jump) 것 및 (ii) 초기 부트 펌웨어를 실행하는 것을 포함한다.
예시 8은 예시 1 내지 예시 7 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 부트 모듈은 또한, 총합 해시 값을 프로세서에 전송한다.
예시 9는 예시 1 내지 예시 8 중 어느 하나의 청구 대상을 포함하고, 여기서 프로세서는 또한, 총합 해시 값이 기준 체크섬 값과 매칭되지 않는다는 결정에 응답하여 보안 기능을 수행한다.
예시 10은 예시 1 내지 예시 9 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 기능을 수행하는 것은 컴퓨팅 장치를 셧다운시키거나, 컴퓨팅 장치를 비활성화하거나, 또는 컴퓨팅 장치를 리부팅하는 것 중 적어도 하나를 포함한다.
예시 11은 예시 1 내지 예시 10 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 부트 모듈은 또한, 컴퓨팅 장치에 대하여 플랫폼 초기화 펌웨어를 인증하고; 프로세서는 또한, 인증된 플랫폼 초기화 펌웨어를 실행해서 프로세서의 캐시 메모리의 일부를 RAM으로서의 캐시(Cache as RAM)로서 초기화한다.
예시 12는 예시 1 내지 예시 11 중 어느 하나의 청구 대상을 포함하고, 여기서 플랫폼 초기화 펌웨어를 인증하는 것은 (i) 플랫폼 초기화 펌웨어를 컴퓨팅 장치의 메모리로부터 취득하는 것 및 (ii) 플랫폼 초기화 펌웨어가 인증된 것을 프로세서에 통지하는 것을 포함한다.
예시 13은 예시 1 내지 예시 12 중 어느 하나의 청구 대상을 포함하고, 여기서 프로세서는 또한, 인증된 플랫폼 초기화 펌웨어를 보안 엔진의 보안 메모리로부터 취득하고; 인증된 플랫폼 초기화 펌웨어를 실행하는 것은 보안 엔진의 보안 메모리로부터 취득된 인증된 플랫폼 초기화 펌웨어를 실행하는 것을 포함한다.
예시 14는 예시 1 내지 예시 13 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어는 STAGE-1 부트 로더를 포함하고; 플랫폼 초기화 펌웨어는 STAGE-1 부트 로더의 실행에 앞서 프로세서에 의해 실행되는 STAGE-0 부트 로더를 포함한다.
예시 15는 예시 1 내지 예시 14 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 것은 (i) 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 것, (ii) 초기 부트 펌웨어의 취득된 제 1 블록을 보안 엔진의 보안 메모리에 저장하는 것, (iii) 보안 메모리에 저장된 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정하는 것, (iv) 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 저장하는 것에 응답하여 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 것, (v) 초기 부트 펌웨어의 취득된 제 2 블록을 보안 엔진의 보안 메모리에 저장하는 것, 및 (vi) 보안 메모리에 저장된 초기 부트 펌웨어의 제 2 블록에 대응하는 제 2 해시 값을 결정하는 것을 포함하고; 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 것은 (i) 제 1 해시 값의 결정에 응답하여 보안 메모리에 저장된 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 것 및 (ii) 제 2 해시 값의 결정에 응답하여 보안 메모리에 저장된 초기 부트 펌웨어의 제 2 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 것을 포함하고; 총합 해시 값을 생성하는 것은 결정된 제 1 및 제 2 해시 값으로부터 총합 해시 값을 생성하는 것을 포함한다.
예시 16은 예시 1 내지 예시 15 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 부트 모듈은 또한, 초기 부트 펌웨어의 제 2 블록이 초기 부트 펌웨어의 복수의 블록 중 최종 블록인지의 여부를 결정한다.
예시 17은 예시 1 내지 예시 16 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 제 2 블록이 최종 블록이 아니라는 결정에 응답하여: (i) 보안 부트 모듈은 또한, (a) 초기 부트 펌웨어의 복수의 블록 중 각각의 잔여 블록을 연속으로 취득하고, (b) 취득된 각각의 잔여 블록에 대한 해시 값을 결정하고, (ii) 보안 부트 모듈 또는 프로세서 초기화 모듈은 취득된 각각의 잔여 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하고; 총합 해시 값을 생성하는 것은 결정된 제 1 해시 값, 결정된 제 2 해시 값, 및 취득된 잔여 블록들 각각에 대하여 결정된 해시 값으로부터 총합 해시 값을 생성하는 것을 포함한다.
예시 18은 예시 1 내지 예시 17 중 어느 하나의 청구 대상을 포함하고, 여기서 총합 해시 값을 생성하는 것은 초기 부트 펌웨어의 제 2 블록이 최종 블록이라는 결정에 응답하여 총합 해시 값을 생성하는 것을 포함한다.
예시 19는 예시 1 내지 예시 18 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 것은 (i) 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 것, (ii) 초기 부트 펌웨어의 취득된 제 1 블록을 보안 엔진의 보안 메모리의 제 1 버퍼에 저장하는 것, (iii) 보안 메모리의 제 1 버퍼에 저장된 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정하는 것, (iv) 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정함과 동시에 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 것, (v) 초기 부트 펌웨어의 취득된 제 2 블록을 보안 엔진의 보안 메모리의 제 2 버퍼에 저장하는 것, 및 (vi) 보안 메모리의 제 2 버퍼에 저장된 초기 부트 펌웨어의 제 2 블록에 대응하는 제 2 해시 값을 결정하는 것을 포함하고; 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 것은 (i) 제 1 해시 값의 결정에 응답하여 보안 메모리의 제 1 버퍼에 저장된 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 것 및 (ii) 제 2 해시 값의 결정에 응답하여 보안 메모리의 제 2 버퍼에 저장된 초기 부트 펌웨어의 제 2 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 것을 포함하고; 총합 해시 값을 생성하는 것은 결정된 제 1 및 제 2 해시 값으로부터 총합 해시 값을 생성하는 것을 포함한다.
예시 20은 컴퓨팅 장치를 보안 부팅하는 방법을 포함하고, 방법은, 컴퓨팅 장치의 보안 엔진에 의해, 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 단계 - 해시 값들을 연속으로 결정하는 단계는 (i) 컴퓨팅 장치의 메모리로부터 복수의 블록의 각각의 블록을 취득하는 단계, (ii) 보안 엔진의 보안 메모리에 각각의 취득된 블록을 저장하는 단계, 및 (iii) 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 단계를 포함함 - ; 컴퓨팅 장치의 보안 엔진 또는 프로세서에 의해, 보안 메모리에 저장된 각각의 블록을 프로세서의 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계; 보안 엔진에 의해, 초기 부트 펌웨어의 각각의 블록에 대하여 결정된 해시 값으로부터 총합 해시 값을 생성하는 단계; 프로세서에 의해, 총합 해시 값을 초기 부트 펌웨어와 관련된 기준 체크섬 값과 비교해서 총합 해시 값이 기준 체크섬 값과 매칭되는지의 여부를 결정하는 단계; 및 총합 해시 값이 기준 체크섬 값과 매칭된다는 결정에 응답하여 프로세서의 초기화를 완료하는 단계를 포함한다.
예시 21은 예시 20의 청구 대상을 포함하고, 여기서 보안 엔진은 컴퓨팅 장치의 프로세서와는 상이한 보안 코프로세서를 포함한다.
예시 22은 예시 20 및 예시 21 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 단계는 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 암호화 해시 함수로 결정하는 단계를 포함한다.
예시 23은 예시 20 내지 예시 22 중 어느 하나의 청구 대상을 포함하고, 여기서 암호화 해시 함수는 보안 해시 알고리즘을 포함한다.
예시 24는 예시 20 내지 예시 23 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록은 동일한 메모리 내 크기를 갖는다.
예시 25는 예시 20 내지 예시 24 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록은 보안 엔진의 보안 메모리의 메모리 스토리지 용량 이하의 메모리 내 크기를 갖는다.
예시 26은 예시 20 내지 예시 25 중 어느 하나의 청구 대상을 포함하고, 여기서 프로세서의 초기화를 완료하는 단계는 (i) RAM으로서의 캐시(Cache as RAM)에 저장된 초기 부트 펌웨어의 시작점으로 건너뛰는 단계 및 (ii) 초기 부트 펌웨어를 실행하는 단계를 포함한다.
예시 27은 예시 20 내지 예시 26 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 엔진에 의해, 총합 해시 값을 프로세서에 전송하는 단계를 추가로 포함한다.
예시 28은 예시 20 내지 예시 27 중 어느 하나의 청구 대상을 포함하고, 여기서 총합 해시 값이 기준 체크섬 값과 매칭되지 않는다는 결정에 응답하여 보안 기능을 수행하는 단계를 추가로 포함한다.
예시 29는 예시 20 내지 예시 28 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 기능을 수행하는 단계는 컴퓨팅 장치를 셧다운시키는 단계, 컴퓨팅 장치를 비활성화하는 단계, 또는 컴퓨팅 장치를 리부팅하는 단계 중 적어도 하나를 포함한다.
예시 30은 예시 20 내지 예시 29 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 엔진에 의해, 컴퓨팅 장치에 대하여 플랫폼 초기화 펌웨어를 인증하는 단계; 및 프로세서에 의해, 인증된 플랫폼 초기화 펌웨어를 실행해서 프로세서의 캐시 메모리의 일부를 RAM으로서의 캐시(Cache as RAM)로서 초기화하는 단계를 추가로 포함한다.
예시 31은 예시 20 내지 예시 30 중 어느 하나의 청구 대상을 포함하고, 여기서 플랫폼 초기화 펌웨어를 인증하는 단계는 (i) 플랫폼 초기화 펌웨어를 컴퓨팅 장치의 메모리로부터 취득하는 단계 및 (ii) 플랫폼 초기화 펌웨어가 인증된 것을 프로세서에 통지하는 단계를 포함한다.
예시 32는 예시 20 내지 예시 31 중 어느 하나의 청구 대상을 포함하고, 여기서 프로세서에 의해, 인증된 플랫폼 초기화 펌웨어를 보안 엔진의 보안 메모리로부터 취득하는 단계를 추가로 포함하고; 인증된 플랫폼 초기화 펌웨어를 실행하는 단계는 보안 엔진의 보안 메모리로부터 취득된 인증된 플랫폼 초기화 펌웨어를 실행하는 단계를 포함한다.
예시 33은 예시 20 내지 예시 32 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어는 STAGE-1 부트 로더를 포함하고; 플랫폼 초기화 펌웨어는 STAGE-1 부트 로더의 실행에 앞서 프로세서에 의해 실행되는 STAGE-0 부트 로더를 포함한다.
예시 34는 예시 20 내지 예시 33 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 단계는 (i) 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 단계, (ii) 초기 부트 펌웨어의 취득된 제 1 블록을 보안 엔진의 보안 메모리에 저장하는 단계, (iii) 보안 메모리에 저장된 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정하는 단계, (iv) 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 저장하는 것에 응답하여 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 단계, (v) 초기 부트 펌웨어의 취득된 제 2 블록을 보안 엔진의 보안 메모리에 저장하는 단계, 및 (vi) 보안 메모리에 저장된 초기 부트 펌웨어의 제 2 블록에 대응하는 제 2 해시 값을 결정하는 단계를 포함하고; 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계는 (i) 제 1 해시 값의 결정에 응답하여 보안 메모리에 저장된 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계 및 (ii) 제 2 해시 값의 결정에 응답하여 보안 메모리에 저장된 초기 부트 펌웨어의 제 2 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계를 포함하고; 총합 해시 값을 생성하는 단계는 결정된 제 1 및 제 2 해시 값으로부터 총합 해시 값을 생성하는 단계를 포함한다.
예시 35는 예시 20 내지 예시 34 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 제 2 블록이 초기 부트 펌웨어의 복수의 블록 중 최종 블록인지의 여부를 결정하는 단계를 추가로 포함한다.
예시 36은 예시 20 내지 예시 35 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 제 2 블록이 최종 블록이 아니라는 결정에 응답하여: (i) 보안 엔진에 의해, 초기 부트 펌웨어의 복수의 블록 중 각각의 잔여 블록을 연속으로 취득하고, 취득된 각각의 잔여 블록에 대한 해시 값을 결정하는 단계, 및 (ii) 보안 엔진 또는 프로세서에 의해, 취득된 각각의 잔여 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계를 추가로 포함하고; 총합 해시 값을 생성하는 단계는 결정된 제 1 해시 값, 결정된 제 2 해시 값, 및 취득된 잔여 블록들 각각에 대하여 결정된 해시 값으로부터 총합 해시 값을 생성하는 단계를 포함한다.
예시 37은 예시 20 내지 예시 36 중 어느 하나의 청구 대상을 포함하고, 여기서 총합 해시 값을 생성하는 단계는 초기 부트 펌웨어의 제 2 블록이 최종 블록이라는 결정에 응답하여 총합 해시 값을 생성하는 단계를 포함한다.
예시 38은 예시 20 내지 예시 37 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 단계는 (i) 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 단계, (ii) 초기 부트 펌웨어의 취득된 제 1 블록을 보안 엔진의 보안 메모리의 제 1 버퍼에 저장하는 단계, (iii) 보안 메모리의 제 1 버퍼에 저장된 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정하는 단계, (iv) 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정함과 동시에 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 단계, (v) 초기 부트 펌웨어의 취득된 제 2 블록을 보안 엔진의 보안 메모리의 제 2 버퍼에 저장하는 단계, 및 (vi) 보안 메모리의 제 2 버퍼에 저장된 초기 부트 펌웨어의 제 2 블록에 대응하는 제 2 해시 값을 결정하는 단계를 포함하고; 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계는 (i) 제 1 해시 값의 결정에 응답하여 보안 메모리의 제 1 버퍼에 저장된 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계 및 (ii) 제 2 해시 값의 결정에 응답하여 보안 메모리의 제 2 버퍼에 저장된 초기 부트 펌웨어의 제 2 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계를 포함하고; 총합 해시 값을 생성하는 단계는 결정된 제 1 및 제 2 해시 값으로부터 총합 해시 값을 생성하는 단계를 포함한다.
예시 39는 보안 부팅을 수행하는 컴퓨팅 장치를 포함하고, 컴퓨팅 장치는, 프로세서와; 프로세서에 의한 실행시에, 컴퓨팅 장치로 하여금 예시 20 내지 예시 38 중 어느 하나의 방법을 수행하게 하는 복수의 명령어가 저장되어 있는 메모리를 포함한다.
예시 40은, 실행에 응답하여, 예시 20 내지 예시 38 중 어느 하나의 방법을 컴퓨팅 장치가 수행하게 하는, 복수의 명령어가 저장되어 있는 하나 이상의 머신 판독가능 매체를 포함한다.
예시 41은 보안 부팅을 수행하는 컴퓨팅 장치를 포함하고, 컴퓨팅 장치는, 컴퓨팅 장치의 보안 엔진에 의해, 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 수단- 해시 값들을 연속으로 결정하는 수단은 (i) 컴퓨팅 장치의 메모리로부터 복수의 블록의 각각의 블록을 취득하는 수단, (ii) 보안 엔진의 보안 메모리에 각각의 취득된 블록을 저장하는 수단, 및 (iii) 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 수단을 포함함 - ; 컴퓨팅 장치의 보안 엔진 또는 프로세서에 의해, 보안 메모리에 저장된 각각의 블록을 프로세서의 RAM으로서의 캐시(Cache as RAM)에 복사하는 수단; 보안 엔진에 의해, 초기 부트 펌웨어의 각각의 블록에 대하여 결정된 해시 값으로부터 총합 해시 값을 생성하는 수단; 프로세서에 의해, 총합 해시 값을 초기 부트 펌웨어와 관련된 기준 체크섬 값과 비교해서 총합 해시 값이 기준 체크섬 값과 매칭되는지의 여부를 결정하는 수단; 및 총합 해시 값이 기준 체크섬 값과 매칭된다는 결정에 응답하여 프로세서의 초기화를 완료하는 수단을 포함한다.
예시 42는 예시 41의 청구 대상을 포함하고, 여기서 보안 엔진은 컴퓨팅 장치의 프로세서와는 상이한 보안 코프로세서를 포함한다.
예시 43은 예시 41 및 예시 42 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 수단은 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 암호화 해시 함수로 결정하는 수단을 포함한다.
예시 44는 예시 41 내지 예시 43 중 어느 하나의 청구 대상을 포함하고, 여기서 암호화 해시 함수는 보안 해시 알고리즘을 포함한다.
예시 45는 예시 41 내지 예시 44 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록은 동일한 메모리 내 크기를 갖는다.
예시 46은 예시 41 내지 예시 45 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록은 보안 엔진의 보안 메모리의 메모리 스토리지 용량 이하의 메모리 내 크기를 갖는다.
예시 47은 예시 41 내지 예시 46 중 어느 하나의 청구 대상을 포함하고, 여기서 프로세서의 초기화를 완료하는 수단은 (i) RAM으로서의 캐시(Cache as RAM)에 저장된 초기 부트 펌웨어의 시작점으로 건너뛰는 수단 및 (ii) 초기 부트 펌웨어를 실행하는 수단을 포함한다.
예시 48은 예시 41 내지 예시 47 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 엔진에 의해, 총합 해시 값을 프로세서에 전송하는 수단을 추가로 포함한다.
예시 49는 예시 41 내지 예시 48 중 어느 하나의 청구 대상을 포함하고, 여기서 총합 해시 값이 기준 체크섬 값과 매칭되지 않는다는 결정에 응답하여 보안 기능을 수행하는 수단을 추가로 포함한다.
예시 50은 예시 41 내지 예시 49 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 기능을 수행하는 수단은 컴퓨팅 장치를 셧다운시키는 수단, 컴퓨팅 장치를 비활성화하는 수단, 또는 컴퓨팅 장치를 리부팅하는 수단 중 적어도 하나를 포함한다.
예시 51은 예시 41 내지 예시 50 중 어느 하나의 청구 대상을 포함하고, 여기서 보안 엔진에 의해, 컴퓨팅 장치에 대하여 플랫폼 초기화 펌웨어를 인증하는 수단; 및 프로세서에 의해, 인증된 플랫폼 초기화 펌웨어를 실행해서 프로세서의 캐시 메모리의 일부를 RAM으로서의 캐시(Cache as RAM)로서 초기화하는 수단을 추가로 포함한다.
예시 52는 예시 41 내지 예시 51 중 어느 하나의 청구 대상을 포함하고, 여기서 플랫폼 초기화 펌웨어를 인증하는 수단은 (i) 플랫폼 초기화 펌웨어를 컴퓨팅 장치의 메모리로부터 취득하는 수단 및 (ii) 플랫폼 초기화 펌웨어가 인증된 것을 프로세서에 통지하는 수단을 포함한다.
예시 53은 예시 41 내지 예시 52 중 어느 하나의 청구 대상을 포함하고, 여기서 프로세서에 의해, 인증된 플랫폼 초기화 펌웨어를 보안 엔진의 보안 메모리로부터 취득하는 수단을 추가로 포함하고; 인증된 플랫폼 초기화 펌웨어를 실행하는 수단은 보안 엔진의 보안 메모리로부터 취득된 인증된 플랫폼 초기화 펌웨어를 실행하는 수단을 포함한다.
예시 54는 예시 41 내지 예시 53 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어는 STAGE-1 부트 로더를 포함하고; 플랫폼 초기화 펌웨어는 STAGE-1 부트 로더의 실행에 앞서 프로세서에 의해 실행되는 STAGE-0 부트 로더를 포함한다.
예시 55는 예시 41 내지 예시 54 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 수단은 (i) 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 수단, (ii) 초기 부트 펌웨어의 취득된 제 1 블록을 보안 엔진의 보안 메모리에 저장하는 수단, (iii) 보안 메모리에 저장된 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정하는 수단, (iv) 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 저장하는 것에 응답하여 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 수단, (v) 초기 부트 펌웨어의 취득된 제 2 블록을 보안 엔진의 보안 메모리에 저장하는 수단, 및 (vi) 보안 메모리에 저장된 초기 부트 펌웨어의 제 2 블록에 대응하는 제 2 해시 값을 결정하는 수단을 포함하고; 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 수단은 (i) 제 1 해시 값의 결정에 응답하여 보안 메모리에 저장된 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 수단 및 (ii) 제 2 해시 값의 결정에 응답하여 보안 메모리에 저장된 초기 부트 펌웨어의 제 2 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 수단을 포함하고; 총합 해시 값을 생성하는 수단은 결정된 제 1 및 제 2 해시 값으로부터 총합 해시 값을 생성하는 수단을 포함한다.
예시 56은 예시 41 내지 예시 55 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 제 2 블록이 초기 부트 펌웨어의 복수의 블록 중 최종 블록인지의 여부를 결정하는 수단을 추가로 포함한다.
예시 57은 예시 41 내지 예시 56 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 제 2 블록이 최종 블록이 아니라는 결정에 응답하여: 컴퓨팅 장치는 (i) 보안 엔진에 의해, 초기 부트 펌웨어의 복수의 블록 중 각각의 잔여 블록을 연속으로 취득하는 수단, (ii) 보안 엔진에 의해, 취득된 각각의 잔여 블록에 대한 해시 값을 결정하는 수단, 및 (iii) 보안 엔진 또는 프로세서에 의해, 취득된 각각의 잔여 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 수단을 추가로 포함하고; 총합 해시 값을 생성하는 수단은 결정된 제 1 해시 값, 결정된 제 2 해시 값, 및 취득된 잔여 블록들 각각에 대하여 결정된 해시 값으로부터 총합 해시 값을 생성하는 수단을 포함한다.
예시 58은 예시 41 내지 예시 57 중 어느 하나의 청구 대상을 포함하고, 여기서 총합 해시 값을 생성하는 수단은 초기 부트 펌웨어의 제 2 블록이 최종 블록이라는 결정에 응답하여 총합 해시 값을 생성하는 수단을 포함한다.
예시 59는 예시 41 내지 예시 58 중 어느 하나의 청구 대상을 포함하고, 여기서 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 수단은 (i) 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 수단, (ii) 초기 부트 펌웨어의 취득된 제 1 블록을 보안 엔진의 보안 메모리의 제 1 버퍼에 저장하는 수단, (iii) 보안 메모리의 제 1 버퍼에 저장된 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정하는 수단, (iv) 초기 부트 펌웨어의 제 1 블록에 대응하는 제 1 해시 값을 결정함과 동시에 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 수단, (v) 초기 부트 펌웨어의 취득된 제 2 블록을 보안 엔진의 보안 메모리의 제 2 버퍼에 저장하는 수단, 및 (vi) 보안 메모리의 제 2 버퍼에 저장된 초기 부트 펌웨어의 제 2 블록에 대응하는 제 2 해시 값을 결정하는 수단을 포함하고; 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 수단은 (i) 제 1 해시 값의 결정에 응답하여 보안 메모리의 제 1 버퍼에 저장된 초기 부트 펌웨어의 제 1 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 수단 및 (ii) 제 2 해시 값의 결정에 응답하여 보안 메모리의 제 2 버퍼에 저장된 초기 부트 펌웨어의 제 2 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 수단을 포함하고; 총합 해시 값을 생성하는 수단은 결정된 제 1 및 제 2 해시 값으로부터 총합 해시 값을 생성하는 수단을 포함한다.

Claims (25)

  1. 보안 부팅을 수행하는 컴퓨팅 장치로서,
    (i) 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정 - 상기 해시 값을 연속으로 결정하는 것은 (a) 상기 컴퓨팅 장치의 메모리로부터 상기 복수의 블록의 각각의 블록을 취득하고, (b) 보안 엔진의 보안 메모리에 각각의 취득된 블록을 저장하고, (c) 상기 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 것을 포함함 - 하고, (ii) 상기 초기 부트 펌웨어의 각각의 블록에 대하여 결정된 해시 값으로부터 총합 해시 값(aggregated hash value)을 생성하는 보안 부트 모듈을 포함하는 상기 컴퓨팅 장치의 상기 보안 엔진과,
    (i) 상기 총합 해시 값을 상기 초기 부트 펌웨어와 관련된 기준 체크섬 값(reference checksum value)과 비교해서 상기 총합 해시 값이 상기 기준 체크섬 값과 매칭되는지의 여부를 결정하고, (ii) 상기 총합 해시 값이 상기 기준 체크섬 값과 매칭된다는 결정에 응답하여 프로세서의 초기화를 완료하는 프로세서 초기화 모듈 및 RAM으로서의 캐시(Cache as RAM)를 포함하는 상기 프로세서
    를 포함하고,
    상기 보안 부트 모듈 또는 상기 프로세서 초기화 모듈은 상기 보안 메모리에 저장된 각각의 블록을 상기 프로세서의 RAM으로서의 캐시(Cache as RAM)에 복사하는
    컴퓨팅 장치.
  2. 제 1 항에 있어서,
    상기 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 것은 상기 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 암호화 해시 함수를 이용해서 결정하는 것을 포함하는
    컴퓨팅 장치.
  3. 제 1 항에 있어서,
    상기 초기 부트 펌웨어의 복수의 블록의 각각의 블록은 동일한 메모리 내 크기를 갖는
    컴퓨팅 장치.
  4. 제 1 항에 있어서,
    상기 초기 부트 펌웨어의 복수의 블록의 각각의 블록은, 상기 보안 엔진의 보안 메모리의 메모리 스토리지 용량 이하의 메모리 내 크기를 갖는
    컴퓨팅 장치.
  5. 제 1 항에 있어서,
    상기 프로세서의 초기화를 완료하는 것은 (i) 상기 RAM으로서의 캐시(Cache as RAM)에 저장된 상기 초기 부트 펌웨어의 시작점(beginning)으로 건너뛰는 것(jump) 및 (ii) 상기 초기 부트 펌웨어를 실행하는 것을 포함하는
    컴퓨팅 장치.
  6. 제 1 항에 있어서,
    상기 보안 부트 모듈은 또한, 상기 총합 해시 값을 상기 프로세서에 전송하는
    컴퓨팅 장치.
  7. 제 1 항에 있어서,
    상기 프로세서는 또한, 상기 총합 해시 값이 상기 기준 체크섬 값과 매칭되지 않는다는 결정에 응답하여 보안 기능을 수행하는
    컴퓨팅 장치.
  8. 제 7 항에 있어서,
    상기 보안 기능을 수행하는 것은 상기 컴퓨팅 장치를 셧다운(shut down)시키거나, 상기 컴퓨팅 장치를 비활성화(disable)하거나, 또는 상기 컴퓨팅 장치를 리부팅(reboot)하는 것 중 적어도 하나를 포함하는
    컴퓨팅 장치.
  9. 제 1 항에 있어서,
    상기 보안 부트 모듈은 또한, 상기 컴퓨팅 장치에 대하여 플랫폼 초기화 펌웨어를 인증하고,
    상기 프로세서는 또한, (i) 상기 인증된 플랫폼 초기화 펌웨어를 상기 보안 엔진의 보안 메모리로부터 취득하고, (ii) 상기 보안 엔진의 보안 메모리로부터 취득된 상기 인증된 플랫폼 초기화 펌웨어를 실행해서 상기 프로세서의 캐시 메모리의 일부를 상기 RAM으로서의 캐시(Cache as RAM)로서 초기화하는
    컴퓨팅 장치.
  10. 제 9 항에 있어서,
    상기 플랫폼 초기화 펌웨어를 인증하는 것은 (i) 상기 플랫폼 초기화 펌웨어를 상기 컴퓨팅 장치의 메모리로부터 취득하는 것 및 (ii) 상기 플랫폼 초기화 펌웨어가 인증된 것을 상기 프로세서에 통지하는 것을 더 포함하는
    컴퓨팅 장치.
  11. 제 9 항에 있어서,
    상기 초기 부트 펌웨어는 STAGE-1 부트 로더를 포함하고,
    상기 플랫폼 초기화 펌웨어는 상기 STAGE-1 부트 로더의 실행에 앞서 상기 프로세서에 의해 실행되는 STAGE-0 부트 로더를 포함하는
    컴퓨팅 장치.
  12. 제 1 항에 있어서,
    상기 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 것은 (i) 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 것, (ii) 상기 초기 부트 펌웨어의 상기 취득된 제 1 블록을 상기 보안 엔진의 보안 메모리에 저장하는 것, (iii) 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 제 1 해시 값을 결정하는 것, (iv) 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 저장하는 것에 응답하여 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 것, (v) 상기 초기 부트 펌웨어의 상기 취득된 제 2 블록을 상기 보안 엔진의 보안 메모리에 저장하는 것, 및 (vi) 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록에 대응하는 제 2 해시 값을 결정하는 것을 포함하고,
    상기 보안 메모리에 저장된 각각의 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 것은 (i) 상기 제 1 해시 값의 결정에 응답하여 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 것 및 (ii) 상기 제 2 해시 값의 결정에 응답하여 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 것을 포함하고,
    상기 총합 해시 값을 생성하는 것은 상기 결정된 제 1 해시 값과 제 2 해시 값으로부터 상기 총합 해시 값을 생성하는 것을 포함하는
    컴퓨팅 장치.
  13. 제 12 항에 있어서,
    상기 보안 부트 모듈은 또한, 상기 초기 부트 펌웨어의 상기 제 2 블록이 상기 초기 부트 펌웨어의 복수의 블록 중 최종 블록인지의 여부를 결정하는
    컴퓨팅 장치.
  14. 제 13 항에 있어서,
    상기 초기 부트 펌웨어의 상기 제 2 블록이 최종 블록이 아니라는 결정에 응답하여: (i) 상기 보안 부트 모듈은 또한, (a) 상기 초기 부트 펌웨어의 복수의 블록 중 각각의 잔여 블록을 연속으로 취득하고, (b) 취득된 각각의 잔여 블록에 대한 해시 값을 결정하며, (ii) 상기 보안 부트 모듈 또는 상기 프로세서 초기화 모듈은 취득된 각각의 잔여 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하고,
    상기 총합 해시 값을 생성하는 것은 상기 결정된 제 1 해시 값, 상기 결정된 제 2 해시 값, 및 상기 취득된 잔여 블록들 각각에 대하여 결정된 해시 값으로부터 상기 총합 해시 값을 생성하는 것을 포함하는
    컴퓨팅 장치.
  15. 제 13 항에 있어서,
    상기 총합 해시 값을 생성하는 것은 상기 초기 부트 펌웨어의 상기 제 2 블록이 최종 블록이라는 결정에 응답하여 상기 총합 해시 값을 생성하는 것을 포함하는
    컴퓨팅 장치.
  16. 제 1 항에 있어서,
    상기 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 것은 (i) 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 것, (ii) 상기 초기 부트 펌웨어의 상기 취득된 제 1 블록을 상기 보안 엔진의 보안 메모리의 제 1 버퍼에 저장하는 것, (iii) 상기 보안 메모리의 제 1 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 제 1 해시 값을 결정하는 것, (iv) 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 상기 제 1 해시 값을 결정함과 동시에 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 것, (v) 상기 초기 부트 펌웨어의 상기 취득된 제 2 블록을 상기 보안 엔진의 보안 메모리의 제 2 버퍼에 저장하는 것, 및 (vi) 상기 보안 메모리의 제 2 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록에 대응하는 제 2 해시 값을 결정하는 것을 포함하고,
    상기 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 것은 (i) 상기 제 1 해시 값의 결정에 응답하여 상기 보안 메모리의 제 1 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 것 및 (ii) 상기 제 2 해시 값의 결정에 응답하여 상기 보안 메모리의 제 2 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 것을 포함하고,
    상기 총합 해시 값을 생성하는 것은 상기 결정된 제 1 해시 값과 제 2 해시 값으로부터 상기 총합 해시 값을 생성하는 것을 포함하는
    컴퓨팅 장치.
  17. 복수의 명령어가 저장되어 있는 하나 이상의 머신 판독가능 저장 매체로서,
    상기 복수의 명령어는, 컴퓨팅 장치에 의한 실행에 응답하여, 상기 컴퓨팅 장치로 하여금,
    상기 컴퓨팅 장치의 보안 엔진에 의해, 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정 - 상기 해시 값을 연속으로 결정하는 것은 (i) 상기 컴퓨팅 장치의 메모리로부터 상기 복수의 블록의 각각의 블록을 취득하고, (ii) 상기 보안 엔진의 보안 메모리에 각각의 취득된 블록을 저장하고, (iii) 상기 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 것을 포함함 - 하게 하고,
    상기 컴퓨팅 장치의 보안 엔진 또는 프로세서에 의해, 상기 보안 메모리에 저장된 각각의 블록을 상기 프로세서의 RAM으로서의 캐시(Cache as RAM)에 복사하게 하고,
    상기 보안 엔진에 의해, 상기 초기 부트 펌웨어의 각각의 블록에 대하여 결정된 해시 값으로부터 총합 해시 값을 생성하게 하며,
    상기 프로세서에 의해, 상기 총합 해시 값을 상기 초기 부트 펌웨어와 관련된 기준 체크섬 값과 비교해서 상기 총합 해시 값이 상기 기준 체크섬 값과 매칭되는지의 여부를 결정하게 하고,
    상기 총합 해시 값이 상기 기준 체크섬 값과 매칭된다는 결정에 응답하여 상기 프로세서의 초기화를 완료하게 하는
    머신 판독가능 저장 매체.
  18. 제 17 항에 있어서,
    상기 복수의 명령어는, 상기 컴퓨팅 장치로 하여금 또한,
    (i) 상기 보안 엔진에 의해, 상기 컴퓨팅 장치에 대하여 플랫폼 초기화 펌웨어를 인증하게 하고,
    (ii) 상기 프로세서에 의해, 상기 인증된 플랫폼 초기화 펌웨어를 상기 보안 엔진의 보안 메모리로부터 취득하게 하며,
    (iii) 상기 프로세서에 의해, 상기 보안 엔진의 보안 메모리로부터 취득된 상기 인증된 플랫폼 초기화 펌웨어를 실행해서 상기 프로세서의 캐시 메모리의 일부를 상기 RAM으로서의 캐시(Cache as RAM)로서 초기화하게 하고,
    상기 프로세서의 초기화를 완료하게 하는 것은 (i) 상기 RAM으로서의 캐시(Cache as RAM)에 저장된 상기 초기 부트 펌웨어의 시작점으로 건너뛰게 하는 것 및 (ii) 상기 초기 부트 펌웨어를 실행하게 하는 것을 포함하는
    머신 판독가능 저장 매체.
  19. 제 17 항에 있어서,
    상기 복수의 명령어는, 상기 컴퓨팅 장치로 하여금 또한, 상기 총합 해시 값이 상기 기준 체크섬 값과 매칭되지 않는다는 결정에 응답하여 보안 기능을 수행하게 하는
    머신 판독가능 저장 매체.
  20. 제 17 항에 있어서,
    상기 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하게 하는 것은 (i) 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하게 하는 것, (ii) 상기 초기 부트 펌웨어의 상기 취득된 제 1 블록을 상기 보안 엔진의 보안 메모리에 저장하게 하는 것, (iii) 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 제 1 해시 값을 결정하게 하는 것, (iv) 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 저장하는 것에 응답하여 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하게 하는 것, (v) 상기 초기 부트 펌웨어의 상기 취득된 제 2 블록을 상기 보안 엔진의 보안 메모리에 저장하게 하는 것, 및 (vi) 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록에 대응하는 제 2 해시 값을 결정하게 하는 것을 포함하고,
    상기 보안 메모리에 저장된 각각의 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하게 하는 것은 (i) 상기 제 1 해시 값의 결정에 응답하여 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하게 하는 것 및 (ii) 상기 제 2 해시 값의 결정에 응답하여 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하게 하는 것을 포함하고,
    상기 총합 해시 값을 생성하게 하는 것은 상기 결정된 제 1 해시 값과 제 2 해시 값으로부터 상기 총합 해시 값을 생성하게 하는 것을 포함하는
    머신 판독가능 저장 매체.
  21. 제 17 항에 있어서,
    상기 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하게 하는 것은 (i) 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하게 하는 것, (ii) 상기 초기 부트 펌웨어의 상기 취득된 제 1 블록을 상기 보안 엔진의 보안 메모리의 제 1 버퍼에 저장하게 하는 것, (iii) 상기 보안 메모리의 제 1 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 제 1 해시 값을 결정하게 하는 것, (iv) 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 상기 제 1 해시 값을 결정함과 동시에 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하게 하는 것, (v) 상기 초기 부트 펌웨어의 상기 취득된 제 2 블록을 상기 보안 엔진의 보안 메모리의 제 2 버퍼에 저장하게 하는 것, 및 (vi) 상기 보안 메모리의 제 2 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록에 대응하는 제 2 해시 값을 결정하게 하는 것을 포함하고,
    상기 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하게 하는 것은 (i) 상기 제 1 해시 값의 결정에 응답하여 상기 보안 메모리의 제 1 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하게 하는 것 및 (ii) 상기 제 2 해시 값의 결정에 응답하여 상기 보안 메모리의 제 2 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하게 하는 것을 포함하고,
    상기 총합 해시 값을 생성하게 하는 것은 상기 결정된 제 1 해시 값과 제 2 해시 값으로부터 상기 총합 해시 값을 생성하게 하는 것을 포함하는
    머신 판독가능 저장 매체.
  22. 컴퓨팅 장치를 보안 부팅하는 방법으로서,
    상기 컴퓨팅 장치의 보안 엔진에 의해, 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 단계 - 상기 해시 값을 연속으로 결정하는 단계는 (i) 상기 컴퓨팅 장치의 메모리로부터 상기 복수의 블록의 각각의 블록을 취득하는 단계, (ii) 상기 보안 엔진의 보안 메모리에 각각의 취득된 블록을 저장하는 단계, 및 (iii) 상기 보안 메모리에 저장된 각각의 블록에 대한 해시 값을 결정하는 단계를 포함함 - 와,
    상기 컴퓨팅 장치의 상기 보안 엔진 또는 프로세서에 의해, 상기 보안 메모리에 저장된 각각의 블록을 상기 프로세서의 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계와,
    상기 보안 엔진에 의해, 상기 초기 부트 펌웨어의 각각의 블록에 대하여 결정된 상기 해시 값으로부터 총합 해시 값을 생성하는 단계와,
    상기 프로세서에 의해, 상기 총합 해시 값을 상기 초기 부트 펌웨어와 관련된 기준 체크섬 값과 비교해서 상기 총합 해시 값이 상기 기준 체크섬 값과 매칭되는지의 여부를 결정하는 단계와,
    상기 총합 해시 값이 상기 기준 체크섬 값과 매칭된다는 결정에 응답하여 상기 프로세서의 초기화를 완료하는 단계를 포함하는
    방법.
  23. 제 22 항에 있어서,
    상기 보안 엔진에 의해, 상기 컴퓨팅 장치에 대하여 플랫폼 초기화 펌웨어를 인증하는 단계와,
    상기 프로세서에 의해, 상기 인증된 플랫폼 초기화 펌웨어를 상기 보안 엔진의 보안 메모리로부터 취득하는 단계와,
    상기 프로세서에 의해, 상기 보안 엔진의 보안 메모리로부터 취득된 상기 인증된 플랫폼 초기화 펌웨어를 실행해서 상기 프로세서의 캐시 메모리의 일부를 상기 RAM으로서의 캐시(Cache as RAM)로서 초기화하는 단계를 더 포함하고,
    상기 프로세서의 초기화를 완료하는 단계는 (i) 상기 RAM으로서의 캐시(Cache as RAM)에 저장된 상기 초기 부트 펌웨어의 시작점으로 건너뛰는 단계 및 (ii) 상기 초기 부트 펌웨어를 실행하는 단계를 포함하는
    방법.
  24. 제 22 항에 있어서,
    상기 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 단계는 (i) 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 단계, (ii) 상기 초기 부트 펌웨어의 상기 취득된 제 1 블록을 상기 보안 엔진의 보안 메모리에 저장하는 단계, (iii) 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 제 1 해시 값을 결정하는 단계, (iv) 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 저장하는 것에 응답하여 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 단계, (v) 상기 초기 부트 펌웨어의 상기 취득된 제 2 블록을 상기 보안 엔진의 보안 메모리에 저장하는 단계, 및 (vi) 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록에 대응하는 제 2 해시 값을 결정하는 단계를 포함하고,
    상기 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계는 (i) 상기 제 1 해시 값의 결정에 응답하여 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계 및 (ii) 상기 제 2 해시 값의 결정에 응답하여 상기 보안 메모리에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계를 포함하고,
    상기 총합 해시 값을 생성하는 단계는 상기 결정된 제 1 해시 값과 제 2 해시 값으로부터 상기 총합 해시 값을 생성하는 단계를 포함하는
    방법.
  25. 제 22 항에 있어서,
    상기 초기 부트 펌웨어의 복수의 블록의 각각의 블록에 대한 해시 값을 연속으로 결정하는 단계는 (i) 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 1 블록을 취득하는 단계, (ii) 상기 초기 부트 펌웨어의 상기 취득된 제 1 블록을 상기 보안 엔진의 보안 메모리의 제 1 버퍼에 저장하는 단계, (iii) 상기 보안 메모리의 제 1 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 제 1 해시 값을 결정하는 단계, (iv) 상기 초기 부트 펌웨어의 상기 제 1 블록에 대응하는 상기 제 1 해시 값을 결정함과 동시에 상기 컴퓨팅 장치의 메모리로부터 초기 부트 펌웨어의 복수의 블록 중 제 2 블록을 취득하는 단계, (v) 상기 초기 부트 펌웨어의 상기 취득된 제 2 블록을 상기 보안 엔진의 보안 메모리의 제 2 버퍼에 저장하는 단계, 및 (vi) 상기 보안 메모리의 제 2 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록에 대응하는 제 2 해시 값을 결정하는 단계를 포함하고,
    상기 보안 메모리에 저장된 각각의 블록을 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계는 (i) 상기 제 1 해시 값의 결정에 응답하여 상기 보안 메모리의 제 1 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 1 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계 및 (ii) 상기 제 2 해시 값의 결정에 응답하여 상기 보안 메모리의 제 2 버퍼에 저장된 상기 초기 부트 펌웨어의 상기 제 2 블록을 상기 RAM으로서의 캐시(Cache as RAM)에 복사하는 단계를 포함하고,
    상기 총합 해시 값을 생성하는 단계는 상기 결정된 제 1 해시 값과 제 2 해시 값으로부터 상기 총합 해시 값을 생성하는 단계를 포함하는
    방법.
KR1020167026703A 2014-04-28 2014-04-28 컴퓨팅 장치의 보안 부팅 기법 KR101846427B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/076348 WO2015165000A1 (en) 2014-04-28 2014-04-28 Securely booting a computing device

Publications (2)

Publication Number Publication Date
KR20160126067A KR20160126067A (ko) 2016-11-01
KR101846427B1 true KR101846427B1 (ko) 2018-04-06

Family

ID=54357968

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167026703A KR101846427B1 (ko) 2014-04-28 2014-04-28 컴퓨팅 장치의 보안 부팅 기법

Country Status (6)

Country Link
US (1) US10248428B2 (ko)
EP (1) EP3138040B1 (ko)
KR (1) KR101846427B1 (ko)
CN (2) CN110263541B (ko)
TW (1) TWI643070B (ko)
WO (1) WO2015165000A1 (ko)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015113046A1 (en) * 2014-01-27 2015-07-30 Rambus Inc. Implementing access control by system-on-chip
US10223294B2 (en) * 2015-09-01 2019-03-05 Nxp Usa, Inc. Fast secure boot from embedded flash memory
KR101816022B1 (ko) * 2015-11-19 2018-01-31 시큐리티플랫폼 주식회사 장치 및 이의 제어 방법
US10747884B2 (en) 2015-12-24 2020-08-18 Intel Corporation Techniques for coordinating device boot security
EP3291087A1 (en) * 2016-09-01 2018-03-07 Nxp B.V. Apparatus and associated method for authenticating firmware
GB2554940B (en) * 2016-10-14 2020-03-04 Imagination Tech Ltd Out-of-bounds recovery circuit
US10346071B2 (en) 2016-12-29 2019-07-09 Western Digital Technologies, Inc. Validating firmware for data storage devices
US10664413B2 (en) * 2017-01-27 2020-05-26 Lear Corporation Hardware security for an electronic control unit
JP6884600B2 (ja) * 2017-03-02 2021-06-09 任天堂株式会社 無線通信システム、通信方法、情報処理装置、および、情報処理プログラム
US10902126B2 (en) * 2017-03-10 2021-01-26 International Business Machines Corporation Verification of a boot loader program at a control unit to be provided to a host system to load an operating system
FR3075420B1 (fr) * 2017-12-20 2020-01-10 Thales Systeme et procede de demarrage securise d'un processeur
US10860238B2 (en) * 2017-12-27 2020-12-08 Intel Corporation Method and apparatus for improving firmware loading
US10666767B1 (en) 2018-01-30 2020-05-26 State Farm Mutual Automobile Insurance Company Systems and methods for vehicle configuration verification using smart contracts
WO2019217934A1 (en) 2018-05-11 2019-11-14 Lattice Semiconductor Corporation Secure boot systems and methods for programmable logic devices
KR102286794B1 (ko) * 2018-08-16 2021-08-06 경희대학교 산학협력단 통합 보안 SoC를 이용한 IoT 디바이스의 안전한 부트 방법
CN109997140B (zh) * 2018-09-10 2023-03-24 深圳市汇顶科技股份有限公司 使用一次写入寄存器从设备的睡眠状态加速安全启动的低功耗嵌入式设备
US10776493B2 (en) 2018-10-12 2020-09-15 Hewlett Packard Enterprise Development Lp Secure management and execution of computing code including firmware
CN109445705B (zh) * 2018-10-29 2022-03-22 湖南国科微电子股份有限公司 固件认证方法及固态硬盘
KR102567097B1 (ko) * 2018-12-05 2023-08-14 삼성전자주식회사 임베디드 시스템의 부트 롬 업데이트 방법 및 부팅 방법
US11017090B2 (en) * 2018-12-17 2021-05-25 Hewlett Packard Enterprise Development Lp Verification of a state of a platform
US10824501B2 (en) 2019-01-07 2020-11-03 Mellanox Technologies, Ltd. Computer code integrity checking
WO2020163977A1 (en) * 2019-02-11 2020-08-20 Intel Corporation Virtual flash
US11360784B2 (en) 2019-09-10 2022-06-14 Hewlett Packard Enterprise Development Lp Integrity manifest certificate
US11238159B1 (en) * 2019-11-08 2022-02-01 Facebook Technologies, Llc Artificial reality system with verified boot sequences
GB2589877B (en) * 2019-12-10 2022-01-12 Advanced Risc Mach Ltd An apparatus and method of controlling access to data stored in a non-trusted memory
CN111736763B (zh) * 2020-05-25 2022-05-13 瑞芯微电子股份有限公司 一种存储数据读取控制方法和装置
US11636210B2 (en) 2020-07-01 2023-04-25 Meta Platforms Technologies, Llc Artificial reality system with multi-stage boot process
CN111541553B (zh) * 2020-07-08 2021-08-24 支付宝(杭州)信息技术有限公司 区块链一体机的可信启动方法及装置
CN112491812B (zh) 2020-07-08 2022-03-01 支付宝(杭州)信息技术有限公司 区块链一体机的哈希更新方法及装置
US11269637B2 (en) * 2020-07-23 2022-03-08 Hewlett Packard Enterprise Development Lp Validating machine-readable instructions using an iterative validation process
US20220180005A1 (en) * 2020-12-03 2022-06-09 Seagate Technology Llc Secure system-on-a-chip (soc) bootup
US20210110043A1 (en) * 2020-12-23 2021-04-15 Intel Corporation Platform firmware boot mechanism
US11741232B2 (en) 2021-02-01 2023-08-29 Mellanox Technologies, Ltd. Secure in-service firmware update

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080022108A1 (en) * 2006-06-27 2008-01-24 Brannock Kirk D Method and apparatus for verifying authenticity of initial boot code
CN102325025A (zh) * 2011-05-25 2012-01-18 北京数码视讯科技股份有限公司 提供源真实性的数据处理方法及系统
US8560823B1 (en) 2007-04-24 2013-10-15 Marvell International Ltd. Trusted modular firmware update using digital certificate

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9626241D0 (en) * 1996-12-18 1997-02-05 Ncr Int Inc Secure data processing method and system
US6735696B1 (en) * 1998-08-14 2004-05-11 Intel Corporation Digital content protection using a secure booting method and apparatus
US20050204155A1 (en) * 2004-03-09 2005-09-15 Nec Laboratories America, Inc Tamper resistant secure architecture
JP4489030B2 (ja) 2005-02-07 2010-06-23 株式会社ソニー・コンピュータエンタテインメント プロセッサ内にセキュアな起動シーケンスを提供する方法および装置
US8429418B2 (en) * 2006-02-15 2013-04-23 Intel Corporation Technique for providing secure firmware
KR101209252B1 (ko) * 2007-02-02 2012-12-06 삼성전자주식회사 전자기기의 부팅 방법 및 부팅 인증 방법
US9959404B2 (en) * 2007-10-01 2018-05-01 Symantec Corporation Methods and systems for creating and updating approved-file and trusted-domain databases
US7971048B2 (en) * 2008-03-27 2011-06-28 Intel Corporation System and method for establishing a trust domain on a computer platform
US9747340B2 (en) * 2008-06-19 2017-08-29 Microsoft Technology Licensing, Llc Method and system of using a local hosted cache and cryptographic hash functions to reduce network traffic
US9792439B2 (en) * 2012-09-19 2017-10-17 Nxp B.V. Method and system for securely updating firmware in a computing device
US9747450B2 (en) * 2014-02-10 2017-08-29 Facebook, Inc. Attestation using a combined measurement and its constituent measurements
CA2874277C (en) * 2014-10-04 2015-08-18 2381371 Ontario Inc. Tamper-evident network messaging method and system, and device configured therefor
US9965270B2 (en) * 2015-07-01 2018-05-08 Quanta Computer Inc. Updating computer firmware

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080022108A1 (en) * 2006-06-27 2008-01-24 Brannock Kirk D Method and apparatus for verifying authenticity of initial boot code
US8560823B1 (en) 2007-04-24 2013-10-15 Marvell International Ltd. Trusted modular firmware update using digital certificate
CN102325025A (zh) * 2011-05-25 2012-01-18 北京数码视讯科技股份有限公司 提供源真实性的数据处理方法及系统

Also Published As

Publication number Publication date
WO2015165000A1 (en) 2015-11-05
TW201602786A (zh) 2016-01-16
CN106462707A (zh) 2017-02-22
CN110263541B (zh) 2023-05-12
CN106462707B (zh) 2019-06-14
KR20160126067A (ko) 2016-11-01
EP3138040A4 (en) 2017-12-13
TWI643070B (zh) 2018-12-01
US20170147356A1 (en) 2017-05-25
EP3138040A1 (en) 2017-03-08
CN110263541A (zh) 2019-09-20
US10248428B2 (en) 2019-04-02
EP3138040B1 (en) 2020-12-09

Similar Documents

Publication Publication Date Title
KR101846427B1 (ko) 컴퓨팅 장치의 보안 부팅 기법
US9141802B2 (en) Computing device boot software authentication
TWI441024B (zh) 用於處理器主記憶體之記憶體內容之安全保護的方法及系統
KR102186609B1 (ko) 무결성 검증 장치를 포함하는 전자 시스템
CN104995629A (zh) 用于平台引导固件的信任继续
US10311236B2 (en) Secure system memory training
CN105144185A (zh) 验证控制器代码和系统启动代码
US7725637B2 (en) Methods and apparatus for generating system management interrupts
US10114949B2 (en) Techniques for monitoring integrity of OS security routine
JP2012032925A (ja) プラットフォーム完全性検証システム
US10747882B2 (en) System and method for secure boot of an information handling system using verification signature and including verifying applications
US11468200B2 (en) System and method for cryptographically coupling a media controller to a baseboard management controller
JP7101318B2 (ja) メモリ内のデータアテステーション
US10664178B2 (en) Integrity protection for system management mode
EP3948630A1 (en) Validating data stored in memory using cryptographic hashes
US20060265544A1 (en) Internally authenticated flash remediation
US7143278B2 (en) Method and apparatus for offloaded enhanced boot process
US11928210B2 (en) Module and method for monitoring systems of a host device for security exploitations

Legal Events

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