KR20240064493A - 스토리지 컨트롤러 및 펌웨어 이미지 제공 방법 - Google Patents

스토리지 컨트롤러 및 펌웨어 이미지 제공 방법 Download PDF

Info

Publication number
KR20240064493A
KR20240064493A KR1020230015881A KR20230015881A KR20240064493A KR 20240064493 A KR20240064493 A KR 20240064493A KR 1020230015881 A KR1020230015881 A KR 1020230015881A KR 20230015881 A KR20230015881 A KR 20230015881A KR 20240064493 A KR20240064493 A KR 20240064493A
Authority
KR
South Korea
Prior art keywords
signature
public key
firmware image
firmware
storage controller
Prior art date
Application number
KR1020230015881A
Other languages
English (en)
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 US18/232,618 priority Critical patent/US20240152284A1/en
Priority to CN202311459110.XA priority patent/CN117997544A/zh
Publication of KR20240064493A publication Critical patent/KR20240064493A/ko

Links

Images

Classifications

    • 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/062Securing storage systems
    • 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/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication
    • G06F21/33User authentication using certificates
    • 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)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Storage Device Security (AREA)

Abstract

비휘발성 메모리를 제어하는 스토리지 컨트롤러는, 제1 공개키를 저장하는 OTP(One Time Programmable) 메모리; 및 호스트 인증용 공개키를 포함하는 펌웨어 이미지에 부가된 제1 서명이 상기 제1 공개키를 이용하여 검증되면 상기 펌웨어 이미지에 대응하는 펌웨어를 실행하고, 하나 이상의 제2 공개키 및 상기 제2 공개키에 대한 호스트 인증용 서명을 포함하는 저장 커맨드를 수신하고, 상기 호스트 인증용 서명이 상기 호스트 인증용 공개키를 이용하여 검증되면 상기 하나 이상의 제2 공개키를 상기 OTP 메모리에 저장하는 프로세서를 포함한다.

Description

스토리지 컨트롤러 및 펌웨어 이미지 제공 방법 {STORAGE CONTROLLER AND METHOD OF PROVIDING FIRMWARE IMAGE}
본 발명은 스토리지 컨트롤러와, 펌웨어 이미지를 제공하는 방법에 관한 발명이다.
펌웨어는 하드웨어를 제어하는 프로그램을 지칭할 수 있다. 펌웨어는 하드웨어 제조 시에 하드웨어 내 저장 공간에 주입될 수 있다. 펌웨어 및 하드웨어를 포함하는 시스템에 대한 공격은 다양한 방식으로 시도될 수 있다. 공격자들은 시스템의 펌웨어 중 적어도 일부를 변경함으로써, 공격자들이 의도한 동작을 시스템이 수행하게 할 수 있다. 펌웨어를 변경하는 공격에 대한 보안을 제공하기 위해, 시스템은 펌웨어 실행 전에 펌웨어에 대한 인증을 수행할 수 있고, 외부로부터 업데이트된 펌웨어를 다운로드하는 경우 업데이트된 펌웨어에 대한 인증을 수행할 수 있다.
본 발명은 호스트가 펌웨어 배포자의 개입 없이 상기 호스트의 서명이 부가된 펌웨어 이미지를 인증하기 위한 호스트 공개키를 주입할 수 있는 스토리지 컨트롤러를 제공하고자 한다.
본 발명은 정당한 호스트에 의해 주입된 호스트 공개키를 이용하여 상기 호스트의 서명이 부가된 펌웨어 이미지를 인증함으로써 보안성이 개선된 스토리지 컨트롤러를 제공하고자 한다.
본 발명은 출하 시에는 펌웨어 이미지에서 펌웨어 배포자의 단일 서명만을 검증하되, 상기 호스트 공개키 주입에 응하여 상기 펌웨어 이미지에서 펌웨어 배포자 및 호스트의 이중 서명을 검증하도록 전환됨으로써 범용성과 보안성이 개선된 스토리지 컨트롤러를 제공하고자 한다.
본 발명은 호스트가 펌웨어 배포자의 개입 없이, 스토리지 컨트롤러에 의해 검증될 수 있는 이중 서명된 펌웨어를 생성하고, 생성된 펌웨어를 스토리지 장치로 제공할 수 있는 펌웨어 이미지 제공 방법을 제공하고자 한다.
본 발명의 실시 예에 따르면, 비휘발성 메모리를 제어하는 스토리지 컨트롤러는, 제1 공개키를 저장하는 OTP(One Time Programmable) 메모리; 및 호스트 인증용 공개키를 포함하는 펌웨어 이미지에 부가된 제1 서명이 상기 제1 공개키를 이용하여 검증되면 상기 펌웨어 이미지에 대응하는 펌웨어를 실행하고, 하나 이상의 제2 공개키 및 상기 제2 공개키에 대한 호스트 인증용 서명을 포함하는 저장 커맨드를 수신하고, 상기 호스트 인증용 서명이 상기 호스트 인증용 공개키를 이용하여 검증되면 상기 하나 이상의 제2 공개키를 상기 OTP 메모리에 저장하는 프로세서를 포함한다.
본 발명의 실시 예에 따르면, 비휘발성 메모리를 제어하는 스토리지 컨트롤러는, 제1 공개키 및 제2 공개키를 저장하는 OTP(One Time Programmable) 메모리; 호스트로부터 수신된 업데이트 펌웨어 이미지를 버퍼링하는 버퍼 메모리; 및 상기 업데이트 펌웨어 이미지를 상기 제1 공개키 및 상기 제2 공개키를 이용하여 인증하고, 상기 인증이 완료되면 상기 업데이트 펌웨어 이미지를 저장하도록 상기 비휘발성 메모리를 제어하는 프로세서를 포함하고, 상기 제2 공개키는 기존 펌웨어 이미지에 포함된 호스트 인증용 공개키를 이용하여 인증되고, 상기 기존 펌웨어 이미지는 적어도 상기 제1 공개키를 이용하여 인증된 펌웨어 이미지이다.
본 발명의 실시 예에 따르면, 스토리지 장치에 이중 서명된 펌웨어 이미지를 제공하는 방법은, 고객 인증용 공개키 및 고객 인증용 비밀키를 포함하는 키 페어를 생성하는 단계; 상기 고객 인증용 공개키를 펌웨어 배포자에 제공하는 단계; 고객 공개키 및 고객 비밀키를 포함하는 키 페어를 생성하는 단계; 상기 고객 인증용 비밀키를 이용하여 상기 고객 공개키에 대한 고객 인증용 서명을 생성하고, 상기 고객 공개키 및 상기 고객 인증용 서명을 포함하는 저장 커맨드를 상기 스토리지 장치로 제공하는 단계; 상기 펌웨어 배포자로부터 상기 고객 인증용 공개키가 포함된 펌웨어 이미지 및 상기 펌웨어 이미지에 부가된 배포자 서명을 획득하는 단계; 상기 고객 비밀키를 이용하여 상기 펌웨어 이미지에 고객 서명을 더 부가하는 단계; 및 상기 배포자 서명 및 상기 고객 서명이 부가된 상기 펌웨어 이미지를 상기 스토리지 장치로 제공하는 단계를 포함한다.
본 발명의 실시 예에 따르면, 비휘발성 메모리를 제어하는 스토리지 컨트롤러는, 제1 공개키를 저장하는 OTP(One Time Programmable) 메모리; 호스트 인증용 공개키를 포함하는 펌웨어 이미지에 부가된 제1 서명이 상기 제1 공개키를 이용하여 검증되면 상기 펌웨어 이미지에 대응하는 펌웨어를 실행하고, 제2 공개키 및 상기 제2 공개키에 대한 호스트 인증용 서명을 포함하는 저장 커맨드를 수신하고, 상기 호스트 인증용 서명이 상기 호스트 인증용 공개키를 이용하여 검증되면 상기 제2 공개키의 다이제스트(digest)를 상기 OTP 메모리에 저장하는 프로세서; 및 제1 서명, 제2 서명 및 상기 제2 공개키가 부가된 업데이트 펌웨어 이미지를 버퍼링하는 버퍼 메모리를 포함하고, 상기 프로세서는 상기 제1 서명을 상기 제1 공개키로 검증하고, 상기 업데이트 펌웨어 이미지에 부가된 제2 공개키의 다이제스트를 생성하고, 상기 생성된 다이제스트를 상기 OTP 메모리에 저장된 다이제스트와 비교함으로써 상기 업데이트 펌웨어 이미지에 부가된 제2 공개키가 인증되면 상기 제2 서명을 상기 인증된 제2 공개키로 검증하고, 상기 제1 서명의 검증 및 상기 제2 서명의 검증이 완료되면 상기 업데이트 펌웨어 이미지를 저장하도록 상기 비휘발성 메모리를 제어한다.
본 발명의 실시 예에 따른 스토리지 컨트롤러는, 호스트가 펌웨어 배포자의 개입 없이 상기 호스트의 서명이 부가된 펌웨어 이미지를 인증하기 위한 호스트 공개키를 주입하도록 지원할 수 있다.
본 발명의 실시 예에 따른 스토리지 컨트롤러는, 정당한 호스트에 의해 주입된 호스트 공개키를 이용하여 상기 호스트의 서명이 부가된 펌웨어 이미지를 인증함으로써 보안성이 개선될 수 있다.
본 발명의 실시 예에 따른 스토리지 컨트롤러는, 출하 시에는 펌웨어 이미지에서 펌웨어 배포자의 단일 서명만을 검증하되, 상기 호스트 공개키 주입에 응하여 상기 펌웨어 이미지에서 펌웨어 배포자 및 호스트의 이중 서명을 검증하도록 전환됨으로써 범용성과 보안성이 개선될 수 있다.
본 발명의 실시 예에 따른 펌웨어 이미지 제공 방법은, 호스트가 펌웨어 배포자의 개입 없이, 스토리지 컨트롤러에 의해 검증될 수 있는 이중 서명된 펌웨어를 생성하고, 생성된 펌웨어를 스토리지 장치로 제공할 수 있다.
본 발명이 해결하려는 과제들은 이상에서 언급한 과제로 제한되지 않으며, 언급되지 않은 또 다른 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
도 1은 본 발명의 실시 예에 따른 스토리지 시스템을 나타내는 도면이다.
도 2는 본 발명의 실시 예에 따른 이미지 서명 시스템을 나타내는 도면이다.
도 3은 본 발명의 실시 예에 따른 서명 검증 방법을 설명하는 도면이다.
도 4a 및 도 4b는 본 발명의 실시 예에 따른 서명된 펌웨어 이미지 생성 방법을 설명하기 위한 도면이다.
도 5는 본 발명의 실시 예에 따른 스토리지 장치를 나타내는 도면이다.
도 6a 및 도 6b는 본 발명의 실시 예에 따른 서명 검증 상태를 설명하기 위한 도면이다.
도 7a 및 도 7b는 본 발명의 실시 예에 따른 스토리지 장치의 제2 공개키 주입 방법을 설명하기 위한 도면들이다.
도 8a 및 도 8b는 본 발명의 실시 예에 따른 스토리지 장치의 제2 공개키 삭제 방법을 설명하기 위한 도면들이다.
도 9a 내지 도 9c는 본 발명의 실시 예에 따른 스토리지 장치의 이중 서명 검증 준비 상태에서의 펌웨어 업데이트 방법을 설명하기 위한 도면들이다.
도 10a 및 도 10b는 본 발명의 실시 예에 따른 스토리지 장치의 이중 서명 검증 준비 상태에서의 펌웨어 실행 방법을 설명하기 위한 도면들이다.
도 11은 본 발명의 실시 예에 따른 스토리지 장치의 이중 서명 검증 상태에서의 펌웨어 업데이트 방법을 설명하기 위한 도면이다.
도 12는 본 발명의 실시 예에 따른 스토리지 장치의 이중 서명 검증 상태에서의 펌웨어 실행 방법을 설명하기 위한 도면이다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시 예를 설명하기로 한다.
도 1은 본 발명의 실시 예에 따른 스토리지 시스템을 나타내는 도면이다.
스토리지 시스템(1)은 호스트(10) 및 스토리지 장치(20)를 포함할 수 있다. 스토리지 장치(20)는 스토리지 컨트롤러(21) 및 비휘발성 메모리(22)를 포함할 수 있다.
호스트(10)는 명령어를 처리하는 적어도 하나의 코어를 포함할 수 있다. 예를 들어, 호스트(10)는 어플리케이션 프로세서, 마이크로프로세서, CPU(Central Processing Unit), 프로세서 코어, 멀티-코어 프로세서, 멀티 프로세서, ASIC(Application-Specific Integrated Circuit) 및 FPGA(Field Programmable Gate Array)를 포함할 수 있다.
스토리지 장치(20)는 호스트(10)의 요청에 응하여 데이터를 저장하기 위한 저장 매체들을 포함할 수 있다. 예를 들어, 스토리지 장치(20)는 SSD(Solid State Drive), 임베디드(embedded) 메모리 및 착탈 가능한 외장(external) 메모리 중 적어도 하나를 포함할 수 있다. 스토리지 장치(20)가 SSD, 임베디드 메모리 또는 외장 메모리인 경우, 스토리지 장치(20)는 비휘발성 메모리 장치를 더 포함할 수 있다. 스토리지 장치(20)가 SSD인 경우, 스토리지 장치(20)는 NVMe(non-volatile memory express) 표준을 따르는 장치일 수 있다. 스토리지 장치(20)가 임베디드 메모리 또는 외장(external) 메모리인 경우, 스토리지 장치(20)는 UFS(universal flash storage) 또는 eMMC(embedded multi-media card) 표준을 따르는 장치일 수 있다. 호스트(10)와 스토리지 장치(20)는 각각 채용된 표준 프로토콜에 따른 패킷을 생성하고 이를 전송할 수 있다.
스토리지 장치(20)는 스토리지 컨트롤러(21) 및 비휘발성 메모리(22)를 포함할 수 있다. 스토리지 컨트롤러(21)는 스토리지 장치(20)의 전반적인 동작을 제어할 수 있다. 예를 들어, 스토리지 컨트롤러(21)는 호스트(10)의 요청에 응하여 데이터를 비휘발성 메모리(22)에 저장하고, 호스트(10)의 요청에 응하여 비휘발성 메모리(22)에 저장된 데이터를 호스트(10)로 제공할 수 있다.
스토리지 장치(20)의 비휘발성 메모리(22)가 플래시 메모리를 포함할 때, 상기 플래시 메모리는 2D NAND 메모리 어레이나 3D(또는 수직형, Vertical) NAND(VNAND) 메모리 어레이를 포함할 수 있다. 다른 예로서, 스토리지 장치(20)는 다른 다양한 종류의 비휘발성 메모리들을 포함할 수도 있다. 예를 들어, 스토리지 장치(20)는 MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torgue MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase RAM), 저항 메모리(Resistive RAM) 및 다른 다양한 종류의 메모리가 적용될 수 있다.
스토리지 컨트롤러(21)는 펌웨어를 실행할 수 있다. 펌웨어는 스토리지 장치(20)를 제어하는 소프트웨어를 지칭할 수 있다. 예를 들어, 스토리지 장치(20)의 펌웨어는 HIL(Host Interface Layer), FTL(Flash Translation Layer) 및 FIL(Flash Interface Layer)을 포함할 수 있다. HIL은 호스트(10)와 스토리지 컨트롤러(21) 간의 데이터 전송을 관리할 수 있고, FTL은 호스트(10)로부터 수신된 논리 어드레스를 비휘발성 메모리(22)의 물리 어드레스로 변환할 수 있으며, FIL은 스토리지 컨트롤러(21)와 비휘발성 메모리(22) 간의 데이터 전송을 관리할 수 있다.
펌웨어를 변경하는 공격에 대해 보안을 제공하기 위해, 펌웨어 배포자(vendor)는 펌웨어 이미지(FW)에 제1 서명(SIGN_V)을 부가할 수 있다. 예를 들어, 펌웨어 배포자는 스토리지 장치(20)의 제조자, 스토리지 시스템(1)의 제조자 또는 펌웨어의 공급자일 수 있다. 스토리지 컨트롤러(21)는 제1 서명(SIGN_V)을 검증할 수 있는 제1 공개키(PKEY_V)를 이용하여 펌웨어 이미지(FW)를 인증하고, 인증된 펌웨어 이미지(FW)만을 업데이트 또는 실행할 수 있다. 스토리지 컨트롤러(21)가 제1 서명(SIGN_V)을 검증할 수 있도록, 스토리지 장치(20)에는 제1 공개키(PKEY_V)가 OTP(One-time Programmable) 메모리 등에 저장되어 있을 수 있다. 한편, 제1 서명(SIGN_V)이 부가된 펌웨어 이미지(FW)는 단일 서명된 펌웨어 이미지(FW_SS)로 지칭될 수도 있다.
호스트(10)는 펌웨어를 업데이트하기 위해, 펌웨어 배포자로부터 단일 서명된 펌웨어 이미지(FW_SS)를 획득하고, 단일 서명된 펌웨어 이미지(FW_SS)를 스토리지 장치(20)로 전달할 수 있다. 호스트(10)는 스토리지 장치(20)의 제조사로부터 스토리지 장치(20)를 납품 받아서 스토리지 장치(20)를 직접 사용하거나, 제3자에게 판매하는 고객(customer)일 수 있다.
한편, 호스트(10)는 펌웨어 배포자가 배포한 단일 서명된 펌웨어 이미지(FW_SS)에 대해 보안 검사(security audit) 절차를 통해 단일 서명된 펌웨어 이미지(FW_SS)를 검증하고, 스토리지 장치(20)가 보안이 검증된 펌웨어 이미지(FW)만을 실행하기를 원할 수 있다. 예를 들어, 호스트(10)는 보안이 검증된 단일 서명된 펌웨어 이미지(FW_SS)에 제2 서명을 부가할 수 있으며, 스토리지 장치(20)가 제1 서명(SIGN_V)뿐만 아니라 제2 서명까지 검증함으로써 펌웨어 이미지(FW)를 인증하고, 인증된 펌웨어 이미지(FW)만을 업데이트 또는 실행하기를 원할 수 있다. 제1 서명(SIGN_V) 및 제2 서명이 부가된 펌웨어 이미지는 이중 서명된 펌웨어 이미지로 지칭될 수 있다.
스토리지 장치(20)가 제2 서명을 검증하기 위해서는, 호스트(10)에서 생성된 제2 공개키가 내부 OTP 메모리 등에 사전에 저장되어야 할 수 있다. 만약 스토리지 장치(20)의 제조사가 스토리지 장치(20)의 제조 시에 어떤 고객의 제2 공개키를 OTP 메모리에 직접 주입한다면, 상기 스토리지 장치(20)를 다른 고객에게 공급하기 어려워질 수 있다. 즉, 스토리지 장치(20)의 범용성이 떨어질 수 있다. 따라서, 스토리지 장치(20)는 펌웨어 배포자의 단일 서명만을 검증하도록 제조되고, 출하된 이후에 호스트(10)의 선택에 따라서 펌웨어 배포자 및 호스트(10)의 이중 서명을 검증하도록 스토리지 장치(20)의 상태가 변경되는 것이 바람직하다.
만약 스토리지 장치(20)에 주입된 제2 공개키가 정당한 호스트(10)로부터 주입된 것인지 검증될 수 없다면, 공격자들이 스토리지 장치(20)에 자신의 공개키를 주입하고, 자신의 서명을 부가한 펌웨어를 업데이트함으로써 펌웨어를 변경하는 공격을 시도할 수 있다.
본 발명의 실시 예에 따르면, 호스트(10)는 호스트 인증용 공개키(PKEY_AUTH)를 펌웨어 배포자에 전달함으로써, 스토리지 장치(20)에 저장된 펌웨어 이미지(FW)에 호스트 인증용 공개키(PKEY_AUTH)가 포함되도록 할 수 있다. 펌웨어 이미지(FW)에는 제1 서명(SIGN_V)이 부가되므로, 펌웨어 이미지(FW)에 포함된 호스트 인증용 공개키(PKEY_AUTH)는 펌웨어 배포자에게 승인된 정당한 고객의 공개키일 수 있다. 본 명세서에서, 호스트 인증용 공개키(PKEY_AUTH)는 고객 인증용 공개키로 지칭될 수도 있다.
호스트(10)는 제2 공개키(PKEY_C)를 주입하기 위해 호스트 인증용 서명(SIGN_AUTH)이 부가된 커맨드(CMD)를 스토리지 장치(20)로 제공할 수 있다. 스토리지 컨트롤러(21)는 기존 펌웨어 이미지(FW)에 포함된 호스트 인증용 공개키(PKEY_AUTH)를 이용하여 호스트 인증용 서명(SIGN_AUTH)을 검증함으로써 커맨드(CMD)를 인증하고, 인증된 커맨드(CMD)에 포함된 제2 공개키(PKEY_C)를 OTP 메모리에 저장할 수 있다.
호스트(10)는 펌웨어를 업데이트하기 위해, 업데이트될 펌웨어 이미지에 제1 서명(SIGN_V)을 부가할 뿐만 아니라, 제2 공개키(PKEY_C)로 검증될 수 있는 제2 서명을 더 부가함으로써 이중 서명된 펌웨어 이미지를 생성할 수 있다. 스토리지 장치(20)는 상기 이중 서명된 펌웨어 이미지를 제2 공개키(PKEY_C)로 인증하고, 인증된 펌웨어 이미지만을 업데이트할 수 있다.
본 발명의 실시 예에 따르면, 스토리지 장치(20)는 펌웨어 배포자로부터 인증된 펌웨어 이미지(FW)에 포함된 호스트 인증용 공개키(PKEY_AUTH)를 이용하여 호스트(10)로부터 수신되는 제2 공개키(PKEY_C)를 인증할 수 있다. 따라서, 스토리지 장치(20)에는 펌웨어 배포자에게 승인된 정당한 고객으로부터 수신되는 제2 공개키(PKEY_C)만이 저장될 수 있다. 따라서, 이중 서명된 펌웨어 이미지에 대한 스토리지 장치(20)의 보안성이 개선될 수 있다.
그리고, 호스트(10)는 제2 공개키(PKEY_C)를 스토리지 장치(20)에 주입하기 위해 펌웨어 배포자에게 요청하지 않고, 직접 생성한 저장 커맨드(SAVE_CMD)를 스토리지 장치(20)로 제공할 수 있다. 따라서, 제2 공개키(PKEY_C)를 주입하는 호스트(10)의 편의성이 개선될 수 있다.
또한, 스토리지 장치(20)에 저장되는 펌웨어 이미지(FW)에 포함된, 특정한 고객의 호스트 인증용 공개키(PKEY_AUTH)는 펌웨어 배포자가 업데이트된 펌웨어 이미지를 제공함으로써 다른 고객의 호스트 인증용 공개키로 수정될 수도 있다. 따라서, 스토리지 장치(20)의 범용성이 개선될 수 있다.
이하에서, 도 2를 참조하여 펌웨어 이미지에 서명을 부가하는 방법의 예가 설명되며, 도 3을 참조하여 펌웨어 이미지에 부가된 서명을 검증하는 방법의 예가 설명된다.
도 2는 본 발명의 실시 예에 따른 이미지 서명 시스템을 나타내는 도면이다.
도 2의 이미지 서명 시스템(30)은 도 1을 참조하여 설명된 펌웨어 배포자에 포함될 수 있다. 이미지 서명 시스템(30)이 펌웨어 배포자에 포함되는 경우, 이미지 서명 시스템(30)은 펌웨어 이미지(FW)를 수신하고, 호스트(10)에 전달되는 단일 서명된 펌웨어 이미지(FW_SS)를 생성할 수 있다. 이미지 서명 시스템(30)은 도 1을 참조하여 설명된 호스트(10)에 포함될 수도 있다. 이미지 서명 시스템(30)이 호스트(10)에 포함되는 경우, 이미지 서명 시스템(30)은 단일 서명된 펌웨어 이미지를 수신하고, 이중 서명된 펌웨어 이미지를 생성할 수 있다. 이하에서, 이미지 서명 시스템(30)이 펌웨어 배포자에 포함되는 경우를 예로 들어 서명 생성 방법이 설명된다.
이미지 서명 시스템(30)은 임의의 컴퓨팅 시스템으로 구현될 수 있다. 예를 들면, 이미지 서명 시스템(30)의 구성요소들 각각은, 논리 합성을 통해서 설계되는 하드웨어 모듈, 적어도 하나의 코어에 의해서 실행되는 소프트웨어 모듈, 적어도 하나의 코어 및 소프트웨어 모듈을 포함하는 프로세싱 유닛 및 전술된 것들의 조합에 의해서 구현될 수 있다. 이미지 서명 시스템(30)은 호스트(10)에 전달되는 펌웨어를 수신할 수 있다. 도 2에 도시된 바와 같이, 이미지 서명 시스템(30)은 키 생성기(31), 해시 회로(32), 서명 생성기(33) 및 서명된 이미지 생성기(34)를 포함할 수 있다.
키 생성기(31)는 제1 비밀키(SKEY_V) 및 제1 공개키(PKEY_V)로 구성된 키 페어를 생성할 수 있다. 예를 들면, 키 생성기(31)는 난수 생성기를 포함할 수 있고, 난수에 기초하여 키 페어를 생성할 수 있다. 실시 예에 따라, 키 생성기(31)는 생략될 수 있고, 이미지 서명 시스템(30)은 외부로부터 키 페어 중 적어도 하나를 수신할 수도 있다.
해시 회로(32)는 펌웨어 이미지(FW)를 수신하고, 펌웨어 이미지(FW)에 대한 다이제스트(DIG)를 생성할 수 있다. 다이제스트(DIG)는 SHA(Secure Hash Algorithm)과 같이 해시(hash) 알고리즘에 기초하여 생성되는 해시 값을 지칭할 수 있다.
서명 생성기(33)는 키 생성기(31)로부터 제1 비밀키(SKEY_V)를 수신할 수 있고, 제1 비밀키(SKEY_V)를 기초로 다이제스트(DIG)에 대한 제1 서명(SIGN_V)을 생성할 수 있다. 제1 서명(SIGN_V)은 임의의 서명 알고리즘에 기초하여 생성될 수 있고, 예컨대 타원곡선 디지털 서명 알고리즘(Elliptic Curve Digital Signature Algorithm; ECDSA)에 기초하여 제1 비밀키(SKEY_V)로부터 생성될 수 있다. 일부 실시예들에서, 서명 생성기(33)는, 도 2에 도시된 바와 같이, 제1 공개키(PKEY_V)를 수신할 수도 있고, 제1 비밀키(SKEY_V) 및 제1 공개키(PKEY_V)를 기초로 제1 서명(SIGN_V)을 생성할 수도 있다.
서명된 이미지 생성기(34)는 펌웨어 이미지(FW) 및 제1 서명(SIGN_V)을 수신할 수 있고, 단일 서명된 펌웨어 이미지(FW_SS)를 생성할 수 있다. 즉, 단일 서명된 펌웨어 이미지(FW_SS)는 펌웨어 이미지(FW) 및 제1 서명(SIGN_V)을 포함할 수 있다. 일부 실시예들에서, 서명된 이미지 생성기(34)는 단일 서명된 펌웨어 이미지(FW_SS) 및 제1 공개키(PKEY_V)를 하나의 디지털 봉투(digital envelope) 형태로 생성하고, 생성된 디지털 봉투를 호스트(10)에 전달할 수도 있다.
이미지 서명 시스템(30)이 펌웨어 이미지(FW)에 대한 제1 서명(SIGN_V)을 생성하는 과정을 예로 들어 서명 생성 방법이 설명되었으나, 이미지 서명 시스템(30)은 임의의 펌웨어, 프로그램, 소프트웨어 또는 데이터에 대해 서명을 생성할 수 있다. 본 명세서에서, 서명의 대상이 되는 데이터는 메시지(MSG)로 지칭될 수도 있다.
도 3은 본 발명의 실시 예에 따른 서명 검증 방법을 설명하는 도면이다.
도 3을 참조하면, 스토리지 컨트롤러(21)는 메시지(MSG) 및 메시지에 대한 서명(SIG)을 수신하고, 공개키(PKEY)를 기초로 서명(SIG)을 검증함으로써 메시지(MSG)가 진정한 자에 의해 생성된 것임을 판정할 수 있다. 실시 예에 따라, 메시지(MSG)는 단일 서명된 펌웨어 이미지 또는 이중 서명된 펌웨어 이미지일 수 있다.
스토리지 컨트롤러(21)는 해시 회로(41), 복호화 회로(42) 및 비교 회로(43)를 포함할 수 있다. 해시 회로(41)는 해시 알고리즘을 기초로 메시지(MSG)에 대한 다이제스트(DIG)를 생성할 수 있다. 복호화 회로(42)는 공개키(PKEY)를 기초로 서명(SIG)을 복호화함으로써 비교 대상 다이제스트(DIG')를 생성할 수 있다. 비교 회로(43)는 다이제스트(DIG)와 비교 대상 다이제스트(DIG')를 비교함으로써 유효성 정보(VLD)를 생성할 수 있다. 유효성 정보(VLD)는 메시지(MSG)가 정당한 자에 의해 생성된 것임을 나타내는 정보일 수 있다.
예를 들어, 스토리지 컨트롤러(21)가 단일 서명된 펌웨어 이미지(FW_SS)에 고객사 서명이 부가된 이중 서명된 펌웨어 이미지를 인증하는 경우, 해시 회로(41)는 단일 서명된 펌웨어 이미지(FW_SS)의 다이제스트(DIG)를 생성할 수 있다. 복호화 회로(42)는 고객사 공개키(PKEY_C)를 이용하여 고객사 서명에 대한 비교 대상 다이제스트(DIG')를 생성할 수 있다. 비교 회로(43)는 다이제스트(DIG)와 비교 대상 다이제스트(DIG')를 비교하고, 비교 결과를 기초로 유효성 정보(VLD)를 출력할 수 있다. 유효성 정보(VLD)는 단일 서명된 펌웨어 이미지(FW_SS)가 정당한 고객에 의해 전달된 펌웨어라는 점을 나타내는 정보일 수 있다.
단일 서명된 펌웨어 이미지(FW_SS)가 정당한 고객에 의해 전달된 펌웨어 이미지라는 것이 검증된 경우, 스토리지 컨트롤러(21)는 펌웨어 이미지(FW), 제1 서명(SIGN_V) 및 제1 공개키(PKEY_V)를 이용하여 단일 서명된 펌웨어 이미지를 인증할 수 있다. 해시 회로(41)는 펌웨어 이미지(FW)의 다이제스트(DIG)를 생성할 수 있다. 복호화 회로(42)는 제1 공개키(PKEY_V)를 이용하여 제1 서명(SIGN_V)을 복호화함으로써 비교 대상 다이제스트(DIG')를 생성할 수 있다. 비교 회로(43)는 다이제스트(DIG)와 비교 대상 다이제스트(DIG')를 비교하고, 비교 결과를 기초로 유효성 정보(VLD)를 출력할 수 있다. 유효성 정보(VLD)는 펌웨어 이미지(FW)가 진정한 자. 즉, 펌웨어 배포자에 의해 생성된 것임을 나타내는 정보일 수 있다.
도 4a 및 도 4b는 본 발명의 실시 예에 따른 서명된 펌웨어 이미지 생성 방법을 설명하기 위한 도면이다. 구체적으로, 도 4a는 단일 서명된 펌웨어 이미지를 생성하는 방법을 나타내며, 도 4b는 이중 서명된 펌웨어 이미지를 생성하는 방법을 나타낸다.
도 4a를 참조하면, 배포자 시스템(300)과 호스트(100)이 도시된다. 호스트(100)은 도 1을 참조하여 설명된 호스트(10)에 대응할 수 있다. 배포자 시스템(300)은 제1 서버(310) 및 제1 HSM(Hardware Security Module, 320)을 포함할 수 있다. 호스트(100)은 제2 서버(110) 및 제2 HSM(120)을 포함할 수 있다.
제1 서버(310) 및 제2 서버(110)는 각각 명령어를 처리하는 적어도 하나의 코어를 포함할 수 있다. 일부 실시예들에서, 제1 서버(310) 및 제2 서버(110)는 비제한적인 예시로서 어플리케이션 프로세서, 마이크로프로세서, CPU(Central Processing Unit), 프로세서 코어, 멀티-코어 프로세서, 멀티 프로세서, ASIC(Application-Specific Integrated Circuit) 및 FPGA(Field Programmable Gate Array)를 포함할 수 있다.
제1 HSM(320) 및 제2 HSM(120)는 공개키와 비밀키를 포함하는 키 페어를 생성하고, 키 페어를 안전하게 저장할 수 있다. 예를 들어, 제1 HSM(320) 및 제2 HSM(120)은 도 2를 참조하여 설명된 이미지 서명 시스템(30)을 포함할 수 있다. 제1 HSM(320) 및 제2 HSM(120)은 외부로부터 메시지를 수신하고, 비밀키를 이용하여 메시지에 대한 서명을 생성하고, 서명을 출력할 수 있다. 제1 HSM(320) 및 제2 HSM(120)는 공개키를 출력할 수도 있으나, 비밀키는 유출하지 않을 수 있다. 한편, 비밀키는 개인키(private key)로 지칭될 수도 있다.
제1 HSM(320)은 제1 공개키(PKEY_V)와 제1 비밀키(SKEY_V)를 포함하는 키 페어를 생성할 수 있다. 그리고, 제2 HSM(120)은 제2 공개키(PKEY_C)와 제2 비밀키(PKEY_C)를 포함하는 키 페어를 생성할 수 있다. 본 발명의 실시 예에 따르면, 제2 HSM(120)은 호스트 인증용 공개키(PKEY_AUTH)와 호스트 인증용 비밀키(SKEY_AUTH)를 포함하는 키 페어를 더 생성할 수 있다.
단계 S11에서, 제2 서버(110)는 제2 HSM(120)으로부터 호스트 인증용 공개키(PKEY_AUTH)를 획득하고, 호스트 인증용 공개키(PKEY_AUTH)를 제1 서버(310)로 전달할 수 있다.
단계 S12에서, 제1 서버(310)는 펌웨어 이미지(FW)에 호스트 인증용 공개키(PKEY_AUTH)를 포함시킬 수 있다. 예를 들어, 제1 서버(310)는 스토리지 장치(200)에 최초로 저장되는 펌웨어 이미지에도 호스트 인증용 공개키(PKEY_AUTH)를 포함시킬 수 있고, 업데이트될 펌웨어 이미지에도 호스트 인증용 공개키(PKEY_AUTH)를 포함시킬 수 있다. 제1 서버(310)는 제2 서버(110)로부터 변경된 호스트 인증용 공개키를 수신하는 경우에 펌웨어 이미지(FW)에 변경된 호스트 인증용 공개키를 포함시킬 수도 있다.
단계 S13에서, 제1 서버(310)는 제1 HSM(320)으로 호스트 인증용 공개키(PKEY_AUTH)가 부가된 펌웨어 이미지(FW)를 제공할 수 있다. 제1 HSM(320)은 제1 비밀키(SKEY_V)를 이용하여 펌웨어 이미지(FW)에 대한 제1 서명(SIGN_V)을 생성하고, 단계 S14에서 제1 서명(SIGN_V)을 출력할 수 있다.
제1 서버(310)는 펌웨어 이미지(FW)에 제1 서명(SIGN_V)을 부가함으로써 단일 서명된 펌웨어 이미지(FW_SS)를 생성할 수 있다. 단계 S15의 경우, 제1 서버(310)는 스토리지 장치(200)에 단일 서명된 펌웨어 이미지(FW_SS)를 직접 저장할 수도 있다. 단계 S16의 경우, 제1 서버(310)는 제2 서버(110)로 단일 서명된 펌웨어 이미지(FW_SS)를 제공함으로써 제2 서버(110)가 스토리지 장치(200)의 펌웨어 업데이트를 수행하도록 지원할 수 있다. 단계 S15 및 단계 S16은 선택적으로 수행될 수 있다.
도 4b의 배포자 시스템(300)과 호스트(100)은 도 4a에 도시된 배포자 시스템(300) 및 호스트(100)에 대응할 수 있다.
도 4b를 참조하면, 배포자 시스템(300)과 호스트(100)은 단계 S21 내지 단계 S28을 수행함으로써 이중 서명된 펌웨어 이미지(FW_DS)를 생성하고, 이중 서명된 펌웨어 이미지(FW_DS)를 스토리지 장치(200)로 제공할 수 있다. 단계 S21 내지 단계 S24는 도 4a의 단계 S11 및 단계 S14와 동일할 수 있다.
단계 S25에서, 제1 서버(310)는 제2 서버(110)로 단일 서명된 펌웨어 이미지(FW_SS)를 제공할 수 있다. 제2 서버(110)는 단일 서명된 펌웨어 이미지(FW_SS)에 대한 보안 검사를 수행할 수 있다. 보안 검사가 완료되면, 단계 S26에서 제2 서버(110)는 제2 HSM(120)으로 단일 서명된 펌웨어 이미지(FW_SS)를 제공할 수 있다. 제2 HSM(120)은 제2 비밀키(SKEY_C)를 이용하여 단일 서명된 펌웨어 이미지(FW_SS)에 대한 제2 서명(SIGN_C)을 생성하고, 단계 S27에서 제1 서명(SIGN_V)을 출력할 수 있다.
제2 서버(110)는 단일 서명된 펌웨어 이미지(FW_SS)에 제2 서명(SIGN_C)을 부가함으로써 이중 서명된 펌웨어 이미지(FW_DS)를 생성할 수 있다. 제2 서버(110)는 스토리지 장치(200)로 이중 서명된 펌웨어 이미지(FW_DS)를 제공하고, 스토리지 장치(200)가 펌웨어를 업데이트하도록 요청할 수 있다.
도 4b에서는 제2 서버(110)가 단일 서명된 펌웨어 이미지(FW_SS) 전체에 대해 제2 서명(SIGN_C)을 부가하는 경우를 예로 들어 본 발명의 실시 예가 설명되었으나, 본 발명은 이에 제한되지 않는다. 예를 들어, 제2 서버(110)는 펌웨어 이미지(FW)만을 제2 HSM(120)으로 제공함으로써 펌웨어 이미지(FW)에 대한 제2 서명(SIGN_C)을 획득하고, 제2 서명(SIGN_C)을 단일 서명된 펌웨어 이미지(FW_SS)에 부가할 수도 있다.
한편, 제2 서버(110)는 제2 공개키(PKEY_C)를 호스트 인증용 서명이 부가된 커맨드를 이용하여 스토리지 장치(200)로 전달할 수 있다. 구체적으로, 제2 서버(110)는 제2 공개키(PKEY_C)를 제2 HSM(120)로부터 획득하는 한편, 제2 HSM(120)이 호스트 인증용 비밀키(SKEY_AUTH)를 이용하여 제2 공개키(PKEY_C)에 대한 호스트 인증용 서명을 생성하도록 요청할 수 있다. 제2 서버(110)는 제2 HSM(120)으로부터 호스트 인증용 서명을 획득하고, 상기 호스트 인증용 서명과 제2 공개키(PKEY_C)를 포함하는 커맨드를 스토리지 장치(200)로 제공할 수 있다.
스토리지 장치(200)는 펌웨어 이미지(FW)에 포함된 호스트 인증용 공개키(PKEY_AUTH)를 이용하여 상기 커맨드가 정당한 고객으로부터 전달된 것인지 검증하고, 검증 결과에 따라 제2 공개키(PKEY_C)를 저장할 수 있다.
한편, 공격자들은 스토리지 장치(200)가 제2 공개키(PKEY_C)를 저장한 후에도 스토리지 장치(200)가 펌웨어 이미지로부터 단일 서명만이 검증되면 펌웨어를 실행할 수 있도록 스토리지 장치(200)를 변경하려는 시도를 할 수도 있다.
본 발명의 실시 예에 따르면, 스토리지 장치(200)는 제2 공개키(PKEY_C)가 최초로 저장되면 펌웨어 이미지에서 공급자 서명 및 고객사 서명을 모두 확인하도록 서명 검증 상태를 변경할 수 있다. 그리고, 스토리지 장치(200)는 제2 공개키(PKEY_C)를 이용하여 인증된 이중 서명된 펌웨어 이미지가 최초로 실행되면, 단일 서명된 펌웨어 이미지를 실행할 수 없도록 서명 검증 상태를 변경할 수 있다. 스토리지 장치(200)는 변경된 서명 검증 상태를 OTP 메모리에 저장함으로써 공격자들이 스토리지 장치(200)의 서명 검증 상태를 변경하지 못하도록 보호할 수 있다. 따라서, 스토리지 장치(200)의 보안성이 더욱 개선될 수 있다.
이하에서, 도 5 내지 도 12를 참조하여 본 발명의 실시 예에 따른 스토리지 컨트롤러, 스토리지 장치 및 이들의 동작 방법이 더욱 자세히 설명된다.
도 5는 본 발명의 실시 예에 따른 스토리지 장치를 나타내는 도면이다.
스토리지 장치(200)는 스토리지 컨트롤러(210) 및 비휘발성 메모리(220)를 포함할 수 있다. 도 5의 스토리지 장치(200), 스토리지 컨트롤러(210) 및 비휘발성 메모리(220)는 각각 도 1을 참조하여 설명된 스토리지 장치(20), 스토리지 컨트롤러(21) 및 비휘발성 메모리(22)에 대응할 수 있다.
스토리지 컨트롤러(210)는 호스트 인터페이스(211), 메모리 인터페이스(212) 및 프로세서(213), 워킹 메모리(214), OTP 메모리(215) 및 버퍼 메모리(216)를 포함할 수 있다.
호스트 인터페이스(211)는 호스트(110)와 패킷(packet)을 송수신할 수 있다. 호스트(110)로부터 호스트 인터페이스(211)로 전송되는 패킷은 커맨드(command), 비휘발성 메모리(220)에 기록될 데이터 또는, 스토리지 컨트롤러(210) 내의 저장 공간(예를 들어, OTP 메모리(215))에 기록될 데이터 등을 포함할 수 있으며, 호스트 인터페이스(211)로부터 호스트(110)로 전송되는 패킷은 커맨드에 대한 응답(response) 혹은 비휘발성 메모리(220)로부터 독출된 데이터 등을 포함할 수 있다.
메모리 인터페이스(212)는 비휘발성 메모리(220)에 기록될 데이터를 비휘발성 메모리(220)로 송신하거나, 비휘발성 메모리(220)로부터 독출된 데이터를 수신할 수 있다. 이러한 메모리 인터페이스(212)는 토글(Toggle) 혹은 온파이(ONFI)와 같은 표준 규약을 준수하도록 구현될 수 있다.
프로세서(213)는 미리 정의된 동작을 고속으로 수행하도록 설계된 하드웨어 가속기, 프로세서(213)의 외부 구성요소와의 통신 채널을 제공하는 입출력(I/O) 인터페이스 등을 더 포함할 수도 있다. 일부 실시예들에서, 프로세서(213)의 구성요소들은 단일 칩 또는 단일 다이(die)에 집적될 수 있고, 프로세서(213)는 시스템-온-칩(System-on-Chip; SoC)으로서 지칭될 수 있다. 실시 예에 따라, 프로세서(213)의 구성요소들은 하나의 패키지에 포함된 2이상의 칩들에 집적될 수 있고, 프로세서(213)는 시스템-인-패키지(System-in-Package; SiP)로서 지칭될 수도 있다. 프로세서(213)는 MCU(Miro Control Unit)으로 지칭될 수도 있다.
워킹 메모리(214)는 프로세서(213)에 의해 사용되는 데이터를 일시적으로 저장할 수 있다. 예를 들어, 비휘발성 메모리(220)에 저장된 펌웨어 이미지(FW)에 포함된 명령어들의 적어도 일부가 워킹 메모리(214)에 복사될 수 있고, 프로세서(213)는 복사된 명령어들을 실행할 수 있다. 실시 예에 따라, 워킹 메모리(214)는 SRAM(Static Random Access Memory)와 같이 상대적으로 빠른 동작 속도를 제공하는 휘발성 메모리를 포함할 수 있다.
OTP 메모리(215)는 스토리지 컨트롤러(210)의 고유한 데이터를 비휘발적으로 저장할 수 있다. 예를 들어, OTP 메모리(215)는 펌웨어 이미지(FW)를 인증하기 위해 사용되는 제1 공개키(PKEY_V), 제2 공개키(PKEY_C) 등을 저장할 수 있다. 본 발명의 실시 예에 따르면, OTP 메모리(215)는 스토리지 컨트롤러(210)의 서명 검증 상태값을 더 저장할 수 있다.
버퍼 메모리(216)는 비휘발성 메모리(220)에 저장될 데이터, 또는 비휘발성 메모리(220)로부터 출력된 데이터를 일시적으로 저장할 수 있다. 예를 들어, 버퍼 메모리(216)는 호스트(100)로부터 다운로드한 펌웨어 이미지를 임시 저장하거나, 비휘발성 메모리(220)로부터 로드된 펌웨어 이미지를 임시 저장할 수 있다. 실시 예에 따라, 버퍼 메모리(216)는 DRAM(Dynamic Random Access Memory)과 같은 휘발성 메모리를 포함할 수 있다.
앞서 설명된 바와 같이, 스토리지 장치(200)는 제2 공개키(PKEY_C)가 OTP(215)에 최초로 저장될 때와, 이중 서명된 펌웨어 이미지가 최초로 실행될 때 각각 서명 검증 상태를 변경하고, 상태값을 OTP 메모리(215)에 저장함으로써 이전 서명 검증 상태로는 돌아갈 수 없도록 보호할 수 있다.
도 6a 및 도 6b는 본 발명의 실시 예에 따른 서명 검증 상태를 설명하기 위한 도면들이다. 도 6a는 스토리지 컨트롤러가 가질 수 있는 복수의 상태들을 설명하기 위한 도면이며, 도 6b는 스토리지 컨트롤러의 유한 상태 머신(finite state machine)을 나타낸다.
도 6a와 도 6b를 함께 참조하면, 스토리지 컨트롤러의 제1 상태(ST1)는 단일 서명 검증 상태, 제2 상태(ST2)는 이중 서명 검증 준비 상태, 제3 상태(ST3)는 이중 서명 검증 상태로 지칭될 수 있다.
스토리지 장치는 제조될 때 단일 서명 상태를 가질 수 있다. 단일 서명 상태에서, 스토리지 장치는 펌웨어 이미지를 인증하기 위해, 펌웨어 이미지에 부가된 제1 서명(SIGN_V)만을 검증할 수 있다. 그리고, 스토리지 장치는 단일 서명된 펌웨어 이미지, 즉 제1 서명(SIGN_V)만이 부가된 펌웨어 이미지의 실행을 허용할 수 있다.
한편, 스토리지 장치는 단일 서명 상태에서 이중 서명된 펌웨어 이미지의 업데이트 또는 실행을 금지하지는 않을 수 있다. 예를 들어, 스토리지 장치가 단일 서명 상태에서 호스트로부터 이중 서명된 펌웨어 이미지를 수신한 경우, 스토리지 장치는 이중 서명된 펌웨어 이미지에 포함된 제1 서명(SIGN_V) 및 제2 서명(SIGN_C) 중 제1 서명(SIGN_V)만이 검증되면 상기 이중 서명된 펌웨어 이미지의 인증을 완료하고, 상기 펌웨어 이미지를 업데이트 또는 실행할 수 있다.
스토리지 장치는 스토리지 장치의 제조사에 의해 출하되어 호스트에 인도될 때까지 단일 서명 상태를 유지할 수 있다. 본 발명의 실시 예에 따르면, 고객은 제2 공개키(PKEY_C) 및 호스트 인증용 서명을 포함하는 커맨드를 스토리지 장치로 제공함으로써, 스토리지 장치에 제2 공개키(PKEY_C)를 주입할 수 있다.
단일 서명 검증 상태인 스토리지 장치는 제2 공개키(PKEY_C)가 성공적으로 주입되면, 서명 검증 상태를 단일 서명 검증 상태에서 이중 서명 검증 준비 상태로 변경할 수 있다. 이중 서명 검증 준비 상태에서, 스토리지 장치는 펌웨어 이미지를 인증하기 위해, 펌웨어 이미지에 부가된 제1 서명(SIGN_V) 및 제2 서명(SIGN_C)을 모두 검증할 수 있다.
한편, 스토리지 장치는 이중 서명 검증 준비 상태에서, 단일 서명된 펌웨어 이미지의 업데이트 또는 실행을 금지하지는 않을 수 있다. 예를 들어, 스토리지 장치가 제2 공개키(PKEY_C)를 저장한 후에도 이중 서명된 펌웨어 이미지가 업데이트 및 실행되기 전까지는, 기존의 단일 서명된 펌웨어 이미지의 실행을 허용할 수 있으며, 단일 서명된 펌웨어 이미지의 업데이트 또한 허용할 수 있다. 그러나, 스토리지 장치는 이중 서명된 펌웨어 이미지의 제2 서명(SIGN_C) 검증에 실패한 경우, 상기 이중 서명된 펌웨어 이미지의 업데이트 또는 실행을 금지할 수 있다.
스토리지 장치는 이중 서명된 펌웨어 이미지의 업데이트가 완료되고, 상기 펌웨어 이미지가 일단 실행되면 서명 검증 상태를 이중 서명 검증 준비 상태에서 이중 서명 검증 상태로 변경할 수 있다. 이중 서명 검증 상태에서, 스토리지 장치는 펌웨어 이미지를 인증하기 위해, 펌웨어 이미지에 부가된 제1 서명(SIGN_V) 및 제2 서명(SIGN_C)을 모두 검증할 수 있다.
또한, 스토리지 장치는 이중 서명 검증 상태에서는 단일 서명된 펌웨어 이미지의 실행을 금지할 수 있다. 그리고, 스토리지 장치는 이중 서명 검증 상태에서 이중 서명 검증 준비 상태나 단일 서명 검증 상태로 되돌아갈 수 없다. 결과적으로, 스토리지 장치는 정당한 고객으로부터 획득한 이중 서명된 펌웨어 이미지가 일단 실행되면, 정당한 고객의 서명을 포함하지 않는 단일 서명된 펌웨어 이미지의 실행을 금지할 수 있다. 따라서, 스토리지 장치의 보안성이 개선될 수 있다.
도 7a 및 도 7b는 본 발명의 실시 예에 따른 스토리지 컨트롤러의 제2 공개키 주입 방법을 설명하기 위한 도면들이다.
도 7a를 참조하면, 단계 S31에서 스토리지 컨트롤러(210)는 호스트로부터 제2 공개키(PKEY_C) 및 호스트 인증용 서명(SIGN_AUTH)을 포함하는 저장 커맨드(SAVE_CMD)를 수신할 수 있다. 호스트 인증용 서명(SIGN_AUTH)은, 스토리지 컨트롤러(210)에서 실행되는 펌웨어 이미지에 포함되는 호스트 인증용 공개키(PKEY_AUTH)에 대응하는 호스트 인증용 비밀키(SKEY_AUTH)를 이용하여 생성된, 상기 제2 공개키(PKEY_C)에 대한 서명일 수 있다.
스토리지 컨트롤러(210)는 단계 S32에서 실행되는 펌웨어 이미지에 포함된 호스트 인증용 공개키(PKEY_AUTH)로 상기 호스트 인증용 서명(SIGN_AUTH)을 검증하고, 단계 S33에서 호스트 인증용 서명(SIGN_AUTH)의 검증 성공 여부를 판단할 수 있다.
호스트 인증용 서명(SIGN_AUTH)의 검증에 실패한 경우(단계 S33에서, "아니오"), 단계 S34에서 스토리지 컨트롤러(210)는 호스트(100)로 에러 메시지를 제공할 수 있다. 예를 들어, 상기 에러 메시지는 상기 커맨드에 대한 응답(response)으로서 제공될 수 있다.
호스트 인증용 서명의 검증에 성공한 경우(단계 S33에서, "예"), 단계 S35에서 스토리지 컨트롤러(210)는 상기 커맨드에 포함된 제2 공개키(PKEY_C)를 OTP 메모리(215)에 저장할 수 있다.
단계 S36에서, 스토리지 컨트롤러(210)는 현재의 서명 검증 상태가 단일 서명 상태인지 여부를 판단할 수 있다. 현재의 서명 검증 상태가 단일 서명 상태인 경우(단계 S36에서, "예"), 스토리지 컨트롤러(210)는 단계 S37에서 단일 서명 상태를 이중 서명 준비 상태로 전환할 수 있다. 현재의 서명 검증 상태가 단일 서명 상태가 아니라면(단계 S36에서, "아니오"), 스토리지 컨트롤러(210)는 제2 공개키(PKEY_C) 주입을 완료할 수 있다.
도 7b를 참조하면, 도 5를 참조하여 설명된 스토리지 컨트롤러(210)에 포함되는 워킹 메모리(214) 및 OTP 메모리(215)가 도시된다.
워킹 메모리(214)는 스토리지 컨트롤러(210)에 의해 실행되는 펌웨어 이미지의 적어도 일부를 로드할 수 있다. 워킹 메모리(214)에 로드된 펌웨어 이미지는 호스트 인증용 공개키(PKEY_AUTH)를 포함할 수 있다.
OTP 메모리(215)는 상태값 영역(2151), 제1 공개키 영역(2152), 제2 공개키 영역(2153) 및 폐기된 공개키 영역(2154)을 포함할 수 있다. 상태값 영역(2151)은 도 6a 및 도 6b를 참조하여 설명된, 스토리지 장치(200)의 상태값을 저장할 수 있다. 제1 공개키 영역(2152)은 펌웨어 이미지의 제1 서명을 검증하기 위한 제1 공개키(PKEY_V)를 저장할 수 있다. 제1 공개키(PKEY_V)는 스토리지 장치(200)의 제조 시에 저장될 수 있다. 제2 공개키 영역(2153)은 호스트로부터 주입되는 하나 이상의 제2 공개키(PKEY_C1, PKEY_C2)를 저장할 수 있다. 제2 공개키 영역(2153)은 각 제2 공개키의 인덱스(Index1, Index2)를 더 저장할 수 있다. 폐기된 공개키 영역(2154)은 제2 공개키 영역(2153)에 저장된 제2 공개키들 중 폐기된 공개키들을 표시할 수 있다.
호스트로부터 제공되는 저장 커맨드(SAVE_CMD)는 하나 이상의 제2 공개키(PKEY_C1, PKEY_C2)와, 하나 이상의 고객 공개 키에 대한 호스트 인증용 서명(SIGN_AUTH)을 포함할 수 있다. 저장 커맨드(SAVE_CMD)는 저장될 제2 공개키의 개수 정보를 더 포함할 수도 있다.
도 7a에서 설명된 바와 같이, 단계 S32에서 호스트 인증용 서명(SIGN_AUTH)이 호스트 인증용 공개키(PKEY_AUTH)를 이용하여 검증될 수 있다. 서명 검증을 통해 저장 커맨드(SAVE_CMD)의 검증이 완료되면, 단계 S35에서 스토리지 컨트롤러(210)는 저장 커맨드(SAVE_CMD)에 저장된 하나 이상의 제2 공개키(PKEY_C1, PKEY_C2)를 OTP 메모리(215)의 제2 공개키 영역(2153)에 저장할 수 있다. 그리고, 스토리지 컨트롤러(210)는 상태값 영역(2151)에 저장된 상태값이 단일 서명 검증 상태를 가리키는 경우, 상태값을 이중 서명 검증 준비 상태로 변경할 수 있다.
한편, 도 7a는 스토리지 컨트롤러(210)가 제2 공개키(PKEY_C1, PKEY_C2)를 OTP 메모리(215)에 평문으로 저장하는 경우를 예시하지만, 본 발명은 이에 제한되지 않는다. 예를 들어, 스토리지 컨트롤러(210)는 하나 이상의 제2 공개키(PKEY_C1, PKEY_C2) 각각에 해시 연산을 수행함으로써 하나 이상의 다이제스트를 생성하고, 상기 하나 이상의 다이제스트를 OTP 메모리(215)에 저장할 수 있다. 스토리지 컨트롤러(210)가 제2 공개키(PKEY_C1, PKEY_C2) 대신, 제2 공개키의 다이제스트를 저장하는 경우 OTP 메모리(215)의 저장 용량을 절약할 수 있다. 스토리지 컨트롤러(210)가 제2 공개키의 다이제스트를 저장하는 경우에 이중 서명 펌웨어 이미지의 제2 서명을 검증하는 방법은 도 9c를 참조하여 후술된다.
본 발명의 실시 예에 따르면, 스토리지 컨트롤러(210)는 정당한 배포자에 의해 생성된 펌웨어 이미지에 포함된 호스트 인증용 공개키(PKEY_AUTH)를 이용하여 제2 공개키(PKEY_C)를 인증함으로써, 정당한 고객으로부터 수신된 제2 공개키(PKEY_C)만을 OTP 메모리(215)에 저장할 수 있다. 따라서, 스토리지 컨트롤러(210)는 공격자들이 자신의 공개키를 주입하는 것을 방지하고, 결과적으로 공격자들에 의해 변경된 펌웨어 이미지를 실행하는 것을 방지할 수 있다.
한편, 스토리지 컨트롤러(210)는 OTP 메모리(215)에 저장된 제2 공개키(PKEY_C)를 폐기하는 방법을 더 제공할 수 있다.
도 8a 및 도 8b는 본 발명의 실시 예에 따른 스토리지 장치의 제2 공개키 폐기 방법을 설명하기 위한 도면들이다.
도 8a를 참조하면, 스토리지 컨트롤러(210)는 단계 S41에서 호스트로부터 폐기하려는 제2 공개키(PKEY_C) 및 호스트 인증용 서명(SIGN_AUTH)을 포함하는 폐기 커맨드(REVOKE_CMD)를 수신할 수 있다.
스토리지 컨트롤러(210)는 단계 S42에서 실행되는 펌웨어 이미지에 포함된 호스트 인증용 공개키(PKEY_AUTH)로 호스트 인증용 서명(SIGN_AUTH)을 검증할 수 있으며, 단계 S43에서 검증 성공 여부를 판단할 수 있다.
호스트 인증용 서명(SIGN_AUTH) 검증에 실패한 경우(단계 S43에서, "아니오"), 스토리지 컨트롤러(210)는 호스트(100)로 에러 메시지를 제공할 수 있다. 예를 들어, 상기 에러 메시지는 상기 폐기 커맨드(REVOKE_CMD)에 대한 응답으로서 제공될 수 있다.
호스트 인증용 서명(SIGN_AUTH) 검증에 성공한 경우(단계 S43에서, "예"), 스토리지 컨트롤러(210)는 폐기 커맨드에 포함된 제2 공개키(PKEY_C)를 폐기할 수 있다.
도 8b를 참조하면, 스토리지 컨트롤러(210)에 포함되는 워킹 메모리(214) 및 OTP 메모리(215)가 도시된다. 워킹 메모리(214) 및 OTP 메모리(215)는 도 7b를 참조하여 설명된 것에 대응할 수 있다.
호스트에 의해 제공되는 폐기 커맨드(REVOKE_CMD)는 폐기될 제2 공개키(PKEY_C1)와, 상기 폐기될 제2 공개키(PKEY_C1)에 대한 호스트 인증용 서명(SIGN_AUTH)을 포함할 수 있다.
도 8a에서 설명된 바와 같이, 단계 S42에서 폐기 커맨드(REVOKE_CMD)에 포함된 호스트 인증용 서명(SIGN_AUTH)이 호스트 인증용 공개키(PKEY_AUTH)를 이용하여 검증될 수 있다.
서명 검증을 통해 폐기 커맨드(REVOKE_CMD)의 검증이 완료되면, 단계 S45에서 스토리지 컨트롤러(210)는 OTP 메모리(215)의 제2 공개키 영역(2153)에 저장된 제2 공개키(PKEY_C1, PKEY_C2) 중 폐기 커맨드(REVOKE_CMD)에 포함된 제2 공개키(PKEY_C1)를 폐기할 수 있다.
스토리지 컨트롤러(210)는 OTP 메모리(215)의 폐기된 공개키 영역(2154)에 폐기되어야 할 제2 공개키(PKEY_C1)의 식별자, 예를 들어 인덱스 값을 기록함으로써 제2 공개키(PKEY_C1)가 폐기되었다는 점을 표시할 수 있다. 한편, 스토리지 컨트롤러(210)는 제2 공개키 영역(2153)에 저장된 제2 공개키(PKEY_C1)를 유지할 수도 있으며, 제2 공개키(PKEY_C1)가 저장된 영역의 모든 비트 값을 '1' 등의 더미 값으로 덮어씀으로써 제2 공개키(PKEY_C1)를 물리적으로 폐기할 수도 있다.
본 발명의 실시 예에 따르면, 스토리지 컨트롤러(210)는 호스트 인증용 공개키(PKEY_AUTH)를 이용하여 인증된 폐기 커맨드(REVOKE_CMD)만을 실행함으로써 공격자들이 제2 공개키(PKEY_C)를 임의로 폐기하는 것을 방지할 수 있다.
스토리지 컨트롤러(210)는 호스트로부터의 저장 커맨드(SAVE_CMD)에 응하여 주입된 제2 공개키(PKEY_C)를 이용하여 이중 서명된 펌웨어 이미지를 인증하고, 펌웨어 이미지가 인증된 경우에만 펌웨어를 업데이트하거나, 펌웨어를 실행할 수 있다. 이하에서, 도 9a 내지 도 12를 예로 들어 본 발명의 실시 예에 따른 펌웨어 업데이트 방법 및 펌웨어 실행 방법이 설명된다. 구체적으로, 도 9a 내지 도 10b는 스토리지 장치가 이중 서명 검증 준비 상태인 경우의 펌웨어 업데이트 방법 및 실행 방법을 설명하며, 도 11 및 도 12는 스토리지 장치가 이중 서명 검증 상태인 경우의 펌웨어 업데이트 방법 및 실행 방법을 설명한다.
도 9a 내지 도 9c는 본 발명의 실시 예에 따른 스토리지 장치의 이중 서명 검증 준비 상태에서의 펌웨어 업데이트 방법을 설명하기 위한 도면들이다.
도 9a를 참조하면, 단계 S51에서 스토리지 컨트롤러(210)는 호스트(100)로부터 펌웨어를 다운로드할 수 있다. 예를 들어, 호스트(100)는 스토리지 컨트롤러(210)로 단일 서명된 펌웨어 이미지, 또는 이중 서명된 펌웨어 이미지를 포함하는 펌웨어 다운로드 커맨드를 제공할 수 있다. 스토리지 컨트롤러(210)는 펌웨어 다운로드 커맨드에 포함된 펌웨어 이미지를 버퍼 메모리(216)에 버퍼링할 수 있다.
단계 S52에서, 스토리지 컨트롤러(210)는 호스트(100)로부터 펌웨어 업데이트 커맨드를 수신할 수 있다. 펌웨어 업데이트 커맨드는 펌웨어 커밋(commit) 커맨드로 지칭될 수도 있다.
스토리지 컨트롤러(210)는 단계 S53에서 버퍼 메모리(216)에 로드된 펌웨어 이미지에 부가된 제1 서명(SIGN_V)을 제1 공개키(PKEY_V)를 이용하여 검증하고, 단계 S54에서 검증 성공 여부를 판단할 수 있다.
제1 서명(SIGN_V)의 검증에 실패한 경우(단계 S54에서, "아니오"), 스토리지 컨트롤러(210)는 단계 S55에서 호스트(100)에 에러 메시지를 제공할 수 있다. 예를 들어, 에러 메시지는 펌웨어 업데이트 커맨드에 대한 응답으로서 제공될 수 있다.
제1 서명(SIGN_V)의 검증에 성공한 경우(단계 S54에서, "예"), 스토리지 컨트롤러(210)는 단계 S56에서 펌웨어 이미지에 제2 서명이 부가되어 있는지 여부를 판단할 수 있다.
펌웨어 이미지에 제2 서명이 부가되지 않은 경우(단계 S56에서, "아니오"), 상기 펌웨어 이미지는 단일 서명된 펌웨어 이미지일 수 있다. 이중 서명 검증 준비 단계에서, 스토리지 컨트롤러(210)는 제1 서명(SIGN_V)의 검증에 성공한 단일 서명된 펌웨어 이미지의 인증을 완료하고, 단계 S59를 수행할 수 있다. 단계 S59에서, 스토리지 컨트롤러(210)는 버퍼 메모리(216)에 로드된 펌웨어 이미지를 비휘발성 메모리(220)에 저장함으로써 펌웨어 업데이트를 완료할 수 있다. 그리고, 스토리지 컨트롤러(210)는 스토리지 장치(200)의 리셋을 트리거할 수 있다.
펌웨어 이미지에 제2 서명이 부가된 경우(단계 S56에서, "예"), 스토리지 컨트롤러(210)는 단계 S57에서 펌웨어에 부가된 제2 서명(SIGN_C)을 제2 공개키(PKEY_C)로 검증하고, 단계 S58에서 검증 성공 여부를 판단할 수 있다. 제2 공개키(PKEY_C)는 도 7a를 참조하여 설명된 저장 커맨드(SAVE_CMD))에 응하여 OTP 메모리(215)에 저장된 공개키로서, 정당한 고객으로부터 획득한 공개키일 수 있다.
제2 서명의 검증에 실패한 경우(단계 S58에서, "아니오"), 스토리지 컨트롤러(210)는 단계 S55를 수행할 수 있다. 즉, 이중 서명 검증 준비 상태에서, 스토리지 컨트롤러(210)는 제2 서명이 포함되지 않은 펌웨어 이미지에 기초한 펌웨어 업데이트는 허용할 수 있지만, 잘못된 제2 서명이 포함된 펌웨어 이미지에 기초한 펌웨어 업데이트는 금지할 수 있다.
제2 서명의 검증에 성공한 경우(단계 S58에서, "예"), 스토리지 컨트롤러(210)는 펌웨어 이미지의 인증을 완료하고, 단계 S59를 수행할 수 있다.
도 9b는 도 5를 참조하여 설명된 것과 같은 스토리지 컨트롤러(210) 및 비휘발성 메모리(220)를 도시한다. 도 9b에 도시된 워킹 메모리(214), OTP 메모리(215) 및 버퍼 메모리(216)는 도 5를 참조하여 설명된 것에 대응할 수 있다.
워킹 메모리(214)에 도시된 펌웨어 이미지(FW)는 현재 스토리지 컨트롤러(210)에서 실행되는 펌웨어의 이미지를 나타낼 수 있다. 스토리지 컨트롤러(210)는 펌웨어 이미지(FW)에 대응하는 펌웨어를 실행함으로써 펌웨어 다운로드 및 펌웨어 업데이트를 수행할 수 있다.
도 9a를 참조하여 설명된 것과 마찬가지로, 단계 S51에서 버퍼 메모리(216)는 펌웨어 다운로드 커맨드에 응하여 호스트(100)로부터 수신한, 업데이트 펌웨어 이미지(FW_NEW)를 버퍼링할 수 있다. 스토리지 컨트롤러(210)는 단계 S52에서 펌웨어 업데이트 커맨드(UPDATE_CMD)를 수신하고, 단계 S53에서 업데이트 펌웨어 이미지(FW_NEW)에 부가된 제1 서명(SIGN_V)을 OTP 메모리(215)에 저장된 제1 공개키(PKEY_V)를 이용하여 검증할 수 있다.
업데이트 펌웨어 이미지(FW_NEW)에 제2 서명(SIGN_C)이 더 부가된 경우 단계 S57에서 스토리지 컨트롤러(210)는 제2 서명(SIGN_C)을 대응하는 제1 공개키(PKEY_C2)를 이용하여 검증할 수 있다. 제2 서명(SIGN_C)은 상기 제2 서명(SIGN_C)이 어느 제2 공개키에 대응하는지 나타내기 위해, 인덱스(Index2)와 같은 식별자를 더 포함할 수 있다. 제2 서명(SIGN_C)의 검증이 완료되면, 스토리지 컨트롤러(210)는 업데이트 펌웨어 이미지(FW_NEW), 제1 서명(SIGN_V) 및 제2 서명(SIGN_C)을 비휘발성 메모리(220)에 저장할 수 있다.
한편, 도 7b를 참조하여 설명된 바에 따르면, 스토리지 컨트롤러(210)는 OTP 메모리(215)에 제2 공개키를 평문으로 저장하는 대신, 제2 공개키의 다이제스트를 저장할 수도 있다. 제2 공개키의 다이제스트는 해시 함수를 이용하여 얻어질 수 있으므로, 다이제스트를 이용하여 제2 공개키를 복원하기는 어려울 수 있다. 도 9c는 OTP 메모리(215)에 제2 공개키의 다이제스트가 저장된 경우에 스토리지 컨트롤러(210)가 펌웨어 이미지에 부가된 제2 서명을 인증하는 방법이 설명된다.
도 9c에 도시된 스토리지 컨트롤러(210) 및 비휘발성 메모리(220)는 도 9b를 참조하여 설명된 것들과 대응할 수 있다. 이하에서는, 도 9b와의 차이점을 중심으로 도 9c가 설명된다.
도 9c를 참조하면, OTP 메모리(215)의 제2 공개키 영역(2153)은 제2 공개키의 다이제스트(DIG_PKEY_C2)를 저장할 수 있다. 버퍼 메모리(216)는 제1 서명(SIGN_V), 제2 서명(SIGN_C) 및 제2 서명(SIGN_C)을 검증하기 위한 제2 공개키(PKEY_C2)가 부가된 업데이트 펌웨어 이미지(FW_NEW)를 버퍼링할 수 있다.
스토리지 컨트롤러(210)는 업데이트 펌웨어 이미지(FW_NEW)에 부가된 제2 공개키(PKEY_C2)의 다이제스트를 생성하고, 생성된 다이제스트를 OTP 메모리(215)에 저장된 다이제스트와 비교함으로써 제2 공개키(PKEY_C2)가 정당한 고객으로부터 부가된 공개키인지 여부를 판단할 수 있다.
제2 공개키(PKEY_C2)가 정당한 고객으로부터 부가된 공개키인 경우, 스토리지 컨트롤러(210)는 제2 공개키(PKEY_C2)로 제2 서명(SIGN_C)을 검증함으로써 업데이트 펌웨어 이미지(FW_NEW)를 인증할 수 있다. 업데이트 펌웨어 이미지(FW_NEW)의 인증이 완료되면, 스토리지 컨트롤러(210)는 업데이트 펌웨어 이미지(FW_NEW)를 비휘발성 메모리 장치(220)에 저장할 수 있다.
도 9a를 참조하여 설명된 것과 같이, 스토리지 컨트롤러(210)는 업데이트 펌웨어 이미지(FW_NEW)를 비휘발성 메모리(220)에 저장하고, 스토리지 장치(200)의 리셋을 트리거할 수 있다. 스토리지 장치(200)는 리셋 트리거에 응하여 리부팅될 수 있으며, 스토리지 컨트롤러(210)는 업데이트된 펌웨어를 실행할 수 있다.
도 10a 및 도 10b는 본 발명의 실시 예에 따른 스토리지 장치의 이중 서명 검증 준비 상태에서의 펌웨어 실행 방법을 설명하기 위한 도면들이다.
도 10a를 참조하면, 본 발명의 실시 예에 따른 펌웨어 실행 방법은 스토리지 장치(200)의 리셋에 응하여 시작될 수 있다. 예를 들어, 상기 펌웨어 실행 방법은 파워 온 리셋(POR)에 응하여 시작될 수도 있으며, 도 9a를 참조하여 설명된 리셋 트리거에 응하여 시작될 수도 있다.
단계 S61에서, 스토리지 컨트롤러(210)는 비휘발성 메모리 장치(220)에 저장된 펌웨어 이미지를 버퍼 메모리(216)로 로드할 수 있다. 예를 들어, 상기 펌웨어 이미지는 펌웨어 업데이트 커맨드에 응하여 비휘발성 메모리 장치(200)에 저장된 펌웨어 이미지를 포함할 수 있다.
스토리지 컨트롤러(210)는 단계 S62에서 펌웨어 이미지에 부가된 제1 서명(SIGN_V)을 OTP 메모리(215)에 저장된 제1 공개키(PKEY_V)로 검증하고, 단계 S63에서 검증 성공 여부를 판단할 수 있다.
제1 서명(SIGN_V)의 검증에 실패한 경우(단계 S63에서, "아니오"), 스토리지 컨트롤러(210)는 단계 S64에서 호스트로 에러 메시지를 제공할 수 있다. 상기 에러 메시지는 스토리지 장치(200)의 부팅 실패를 나타내는 메시지일 수 있다.
제1 서명(SIGN_V)의 검증에 성공한 경우(단계 S63에서, "예"), 스토리지 컨트롤러(210)는 단계 S65에서 펌웨어 이미지에 제2 서명이 부가되었는지 여부를 판단할 수 있다.
펌웨어 이미지에 제2 서명이 부가되지 않은 경우(단계 S65에서, "아니오"), 펌웨어 이미지는 단일 서명된 펌웨어 이미지일 수 있다. 이중 서명 검증 준비 상태에서, 스토리지 컨트롤러(210)는 단계 S70에서 단일 서명된 펌웨어 이미지에 대응하는 펌웨어의 실행을 허용할 수 있다.
펌웨어 이미지에 제2 서명이 부가된 경우(단계 S65에서, "예"), 스토리지 컨트롤러(210)는 단계 S66에서 제2 서명이 폐기된 제2 공개키에 연관된 서명인지 여부를 판단할 수 있다. 예를 들어, 펌웨어 이미지는 제2 서명에 대응하는 제2 공개키를 나타내는 식별자를 포함할 수 있으며, 스토리지 컨트롤러(210)는 폐기된 공개키 영역(2154)에서 상기 식별자를 찾음으로써 제2 서명이 폐기된 제2 공개키에 연관된 서명인지 여부를 판단할 수 있다.
제2 서명이 폐기된 제2 공개키에 연관된 서명인 경우(단계 S66에서, "예"), 스토리지 컨트롤러(210)는 단계 S64를 수행할 수 있다. 반면에, 제2 서명이 폐기된 제2 공개키에 연관된 서명이 아닌 경우(단계 S66에서, "아니오"), 스토리지 컨트롤러(210)는 단계 S67에서 펌웨어 이미지에 부가된 제2 서명을 제2 공개키로 검증하고, 단계 S68에서 검증 성공 여부를 판단할 수 있다.
제2 서명의 검증에 실패한 경우(단계 S68에서, "아니오"), 스토리지 컨트롤러(210)는 단계 S64를 수행할 수 있다. 반면에, 제2 서명의 검증에 성공한 경우(단계 S68에서, "예"), 스토리지 컨트롤러(210)는 단계 S69에서 상기 펌웨어 이미지의 적어도 일부를 워킹 메모리(214)로 로드하고, 상기 펌웨어 이미지에 대응하는 펌웨어를 실행할 수 있다.
제2 서명의 검증에 성공한 경우, 버퍼 메모리(216)에 로드된 펌웨어 이미지는 이중 서명된 펌웨어 이미지일 수 있다. 스토리지 컨트롤러(210)는 단계 S69에서 이중 서명된 펌웨어가 실행되면, 단계 S70에서 이중 서명 검증 준비 상태를 이중 서명 검증 상태로 변경할 수 있다.
도 10b는 도 5를 참조하여 설명된 것과 같은 스토리지 컨트롤러(210) 및 비휘발성 메모리(220)를 도시한다. 스토리지 컨트롤러(210)는 워킹 메모리(214), OTP 메모리(215) 및 버퍼 메모리(216)를 포함할 수 있다.
도 10a를 참조하여 설명된 것과 같이, 단계 S61에서 비휘발성 메모리(220)에 저장된 펌웨어 이미지(FW_NEW)가 버퍼 메모리(216)에 로드될 수 있다. 예를 들어, 스토리지 컨트롤러(210)는 스토리지 컨트롤러(210)에 포함된 부트 롬(도시되지 않음)에 저장된 부트 로더를 실행함으로써 펌웨어 이미지(FW_NEW)를 로드할 수 있다.
단계 S62에서, 버퍼 메모리(216)에 로드된 펌웨어 이미지(FW_NEW)에 부가된 제1 서명(SIGN_V)이 OTP 메모리(215)에 저장된 제1 공개키(PKEY_V)를 이용하여 검증될 수 있다. 그리고, 펌웨어 이미지(FW_NEW)에 폐기되지 않은 제2 공개키(PKEY_C2)에 연관된 제2 서명(SIGN_C)이 부가된 경우, 단계 S67에서 제2 서명(SIGN_C)은 제2 공개키(PKEY_C2)에 의해 검증될 수 있다.
펌웨어 이미지(FW_NEW)에 부가된 제1 서명(SIGN_V) 및 제2 서명(SIGN_C)이 모두 검증 완료되면, 스토리지 컨트롤러(210)는 펌웨어 이미지(FW_NEW)의 적어도 일부를 워킹 메모리(214)에 로드하고, 펌웨어를 실행할 수 있다. 그리고, 스토리지 컨트롤러(210)는 OTP 메모리(215)의 상태값 영역(2151)에 저장된 상태값을 제2 상태에서 제3 상태로 변경함으로써, 이중 서명 검증 준비 상태를 이중 서명 검증 상태로 변경할 수 있다.
본 발명의 실시 예에 따르면, 스토리지 컨트롤러(210)는 이중 서명된 펌웨어 이미지에 대응하는 펌웨어가 일단 실행되면, 이중 서명 검증 준비 상태를 이중 서명 검증 상태로 변경함으로써 단일 서명된 펌웨어 이미지의 실행을 금지할 수 있다. 따라서, 스토리지 컨트롤러(210)의 보안성이 개선될 수 있다.
이중 서명 검증 상태에서의 펌웨어 업데이트 방법 및 펌웨어 실행 방법은 이중 서명 검증 준비 상태에서의 펌웨어 업데이트 방법 및 펌웨어 실행 방법과 유사할 수 있으나, 단일 서명된 펌웨어 이미지의 인증을 허용하지 않는다는 차이점이 있다. 이하에서, 도 11 및 도 12를 참조하여 이중 서명 검증 상태에서의 스토리지 장치(200)의 펌웨어 업데이트 방법 및 펌웨어 실행 방법이 상기 차이점을 중심으로 설명된다.
도 11은 본 발명의 실시 예에 따른 스토리지 장치의 이중 서명 검증 상태에서의 펌웨어 업데이트 방법을 설명하기 위한 도면이다.
단계 S81 내지 단계 S85는 도 9a를 참조하여 설명된 단계 S51 내지 단계 S55와 유사할 수 있다.
단계 S86에서, 스토리지 컨트롤러(210)는 공급자 서명이 검증된 펌웨어 이미지에 제2 서명이 부가되었는지 여부를 판단할 수 있다. 펌웨어 이미지에 제2 서명이 부가되지 않은 경우(단계 S86에서, "아니오"), 스토리지 컨트롤러(210)는 단계 S85에서 호스트(100)로 에러 메시지를 제공할 수 있다. 즉, 이중 서명 검증 상태에서 스토리지 컨트롤러(210)는 단일 서명된 펌웨어 이미지에 대응하는 펌웨어의 업데이트를 금지할 수 있다.
펌웨어 이미지에 제2 서명이 부가된 경우(단계 S86에서, "예"), 스토리지 컨트롤러(210)는 단계 S87 내지 단계 S89를 수행할 수 있다. 단계 S87 내지 단계 S89는 도 9a를 참조하여 설명된 단계 S57 내지 단계 S59와 유사할 수 있다.
도 12는 본 발명의 실시 예에 따른 스토리지 장치의 이중 서명 검증 상태에서의 펌웨어 실행 방법을 설명하기 위한 도면이다.
단계 S91 내지 단계 S94는 도 10a를 참조하여 설명된 단계 S61 내지 단계 S64와 유사할 수 있다.
단계 S95에서, 스토리지 컨트롤러(210)는 공급자 서명이 검증된 펌웨어 이미지에 제2 서명이 부가되었는지 여부를 판단할 수 있다. 펌웨어 이미지에 제2 서명이 부가되지 않은 경우(단계 S95에서, "아니오"), 스토리지 컨트롤러(210)는 단계 S94에서 호스트(100)로 에러 메시지를 제공할 수 있다. 즉, 이중 서명 검증 상태에서 스토리지 컨트롤러(210)는 단일 서명된 펌웨어 이미지에 대응하는 펌웨어의 실행을 금지할 수 있다.
펌웨어 이미지에 제2 서명이 부가된 경우(단계 S95에서, "예"), 스토리지 컨트롤러(210)는 단계 S96 내지 단계 S99를 수행할 수 있다. 단계 S96 내지 단계 S99는 도 10a를 참조하여 설명된 단계 S66 내지 단계 S69와 유사할 수 있다.
본 발명의 실시 예에 따르면, 스토리지 장치(200)는 단일 서명 검증 상태로 출하될 수 있으며, 배포자 공개키로 인증된 펌웨어 이미지에 포함되는 고객 인증용 공개키를 이용하여 인증된 커맨드에 응하여 고객 공개키를 OTP 메모리에 저장할 수 있다. 스토리지 장치(200)는 고객 공개키를 OTP에 최초로 저장한 후 단일 서명 검증 상태를 이중 서명 검증 준비 상태로 전환할 수 있으며, 펌웨어 업데이트 커맨드에 응하여 펌웨어 이미지에 대한 이중 서명 검증을 시도할 수 있다. 스토리지 장치(200)는 이중 서명된 펌웨어를 최초로 실행한 후 이중 서명 검증 준비 상태를 이중 서명 검증 상태로 전환할 수 있다. 본 발명의 실시 예에 따르면, 스토리지 장치(200)의 범용성 및 보안성이 개선되고, 고객 공개키를 스토리지 장치(200)에 주입하는 호스트(100)의 편의성이 개선될 수 있다.
본 발명은 상술한 실시형태 및 첨부된 도면에 의해 한정되는 것이 아니며 첨부된 청구범위에 의해 한정하고자 한다. 따라서, 청구범위에 기재된 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 당 기술분야의 통상의 지식을 가진 자에 의해 다양한 형태의 치환, 변형 및 변경이 가능할 것이며, 이 또한 본 발명의 범위에 속한다고 할 것이다.
100: 호스트
200: 스토리지 장치
300: 배포자 시스템

Claims (10)

  1. 비휘발성 메모리를 제어하는 스토리지 컨트롤러에 있어서,
    제1 공개키를 저장하는 OTP(One Time Programmable) 메모리; 및
    호스트 인증용 공개키를 포함하는 펌웨어 이미지에 부가된 제1 서명이 상기 제1 공개키를 이용하여 검증되면 상기 펌웨어 이미지에 대응하는 펌웨어를 실행하고, 하나 이상의 제2 공개키 및 상기 제2 공개키에 대한 호스트 인증용 서명을 포함하는 저장 커맨드를 수신하고, 상기 호스트 인증용 서명이 상기 호스트 인증용 공개키를 이용하여 검증되면 상기 하나 이상의 제2 공개키를 상기 OTP 메모리에 저장하는 프로세서
    를 포함하는 스토리지 컨트롤러.
  2. 제1항에 있어서,
    상기 프로세서는
    상기 하나 이상의 제2 공개키를 상기 OTP 메모리에 저장한 후, 상기 OTP 메모리에 이중 서명 검증 준비 상태를 나타내는 상태값을 저장하는
    스토리지 컨트롤러.
  3. 제2항에 있어서,
    상기 프로세서는
    상기 이중 서명 검증 준비 상태에서, 업데이트 펌웨어 이미지에 부가된 제1 서명이 상기 제1 공개키를 이용하여 검증되면, 상기 업데이트 펌웨어 이미지에 제2 서명이 부가되지 않은 경우에도 상기 업데이트 펌웨어 이미지에 대응하는 펌웨어의 업데이트 또는 실행을 허용하는
    스토리지 컨트롤러.
  4. 제2항에 있어서,
    상기 프로세서는
    상기 이중 서명 검증 준비 상태에서, 업데이트 펌웨어 이미지에 부가된 제2 서명의 검증에 실패하면, 상기 업데이트 펌웨어 이미지에 대응하는 펌웨어의 업데이트 또는 실행을 금지하는
    스토리지 컨트롤러.
  5. 제1항에 있어서,
    상기 스토리지 컨트롤러는
    호스트로부터 수신된 업데이트 펌웨어 이미지를 버퍼링하는 버퍼 메모리를 더 포함하고,
    상기 프로세서는
    상기 업데이트 펌웨어 이미지에 부가된 제1 서명을 상기 제1 공개키로 검증하고, 상기 업데이트 펌웨어 이미지에 부가된 제2 서명을 상기 제2 공개키로 검증하고, 상기 제1 서명의 검증 및 상기 제2 서명의 검증이 완료되면 상기 업데이트 펌웨어 이미지를 저장하도록 상기 비휘발성 메모리를 제어하는
    스토리지 컨트롤러.
  6. 제5항에 있어서,
    상기 프로세서는
    상기 비휘발성 메모리에 상기 업데이트 펌웨어 이미지의 저장이 완료되면 상기 스토리지 컨트롤러의 리셋을 트리거하고, 리셋 트리거에 응하여 상기 업데이트 펌웨어 이미지를 상기 비휘발성 메모리로부터 상기 버퍼 메모리에 로드하고, 상기 버퍼 메모리에 로드된 업데이트 펌웨어 이미지에 부가된 상기 제1 서명의 검증 및 상기 제2 서명의 검증이 완료되면 상기 업데이트 펌웨어 이미지를 실행하고, 상기 OTP 메모리에 이중 서명 검증 상태를 나타내는 상태값을 저장하는
    스토리지 컨트롤러.
  7. 제6항에 있어서,
    상기 프로세서는
    상기 이중 서명 검증 상태에서, 업데이트 펌웨어 이미지에 부가된 제1 서명이 상기 제1 공개키를 이용하여 검증되더라도, 상기 업데이트 펌웨어 이미지에 제2 서명이 부가되지 않은 경우 상기 업데이트 펌웨어 이미지에 대응하는 펌웨어의 업데이트 또는 실행을 금지하는
    스토리지 컨트롤러.
  8. 제1항에 있어서,
    상기 프로세서는
    폐기 대상 제2 공개키 및 상기 폐기 대상 제2 공개키에 대한 호스트 인증용 서명을 포함하는 폐기 커맨드를 수신하고, 상기 폐기 커맨드에 포함된 호스트 인증용 서명이 상기 호스트 인증용 공개키를 이용하여 검증되면 상기 OTP 메모리에 저장된 상기 하나 이상의 제2 공개키 중 상기 폐기 대상 제2 공개키를 폐기하는
    스토리지 컨트롤러.
  9. 비휘발성 메모리를 제어하는 스토리지 컨트롤러에 있어서,
    제1 공개키 및 제2 공개키를 저장하는 OTP(One Time Programmable) 메모리;
    호스트로부터 수신된 업데이트 펌웨어 이미지를 버퍼링하는 버퍼 메모리; 및
    상기 업데이트 펌웨어 이미지를 상기 제1 공개키 및 상기 제2 공개키를 이용하여 인증하고, 상기 인증이 완료되면 상기 업데이트 펌웨어 이미지를 저장하도록 상기 비휘발성 메모리를 제어하는 프로세서를 포함하고,
    상기 제2 공개키는 기존 펌웨어 이미지에 포함된 호스트 인증용 공개키를 이용하여 인증되고, 상기 기존 펌웨어 이미지는 적어도 상기 제1 공개키를 이용하여 인증된 펌웨어 이미지인
    스토리지 컨트롤러.
  10. 스토리지 장치에 이중 서명된 펌웨어 이미지를 제공하는 방법에 있어서,
    고객 인증용 공개키 및 고객 인증용 비밀키를 포함하는 키 페어를 생성하는 단계;
    상기 고객 인증용 공개키를 펌웨어 배포자에 제공하는 단계;
    고객 공개키 및 고객 비밀키를 포함하는 키 페어를 생성하는 단계;
    상기 고객 인증용 비밀키를 이용하여 상기 고객 공개키에 대한 고객 인증용 서명을 생성하고, 상기 고객 공개키 및 상기 고객 인증용 서명을 포함하는 저장 커맨드를 상기 스토리지 장치로 제공하는 단계;
    상기 펌웨어 배포자로부터 상기 고객 인증용 공개키가 포함된 펌웨어 이미지 및 상기 펌웨어 이미지에 부가된 배포자 서명을 획득하는 단계;
    상기 고객 비밀키를 이용하여 상기 펌웨어 이미지에 고객 서명을 더 부가하는 단계; 및
    상기 배포자 서명 및 상기 고객 서명이 부가된 상기 펌웨어 이미지를 상기 스토리지 장치로 제공하는 단계
    를 포함하는 방법.

KR1020230015881A 2022-11-04 2023-02-07 스토리지 컨트롤러 및 펌웨어 이미지 제공 방법 KR20240064493A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US18/232,618 US20240152284A1 (en) 2022-11-04 2023-08-10 Storage controller and method of providing firmware image
CN202311459110.XA CN117997544A (zh) 2022-11-04 2023-11-03 存储控制器和提供固件映像的方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020220146292 2022-11-04
KR20220146292 2022-11-04

Publications (1)

Publication Number Publication Date
KR20240064493A true KR20240064493A (ko) 2024-05-13

Family

ID=91073406

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020230015881A KR20240064493A (ko) 2022-11-04 2023-02-07 스토리지 컨트롤러 및 펌웨어 이미지 제공 방법

Country Status (1)

Country Link
KR (1) KR20240064493A (ko)

Similar Documents

Publication Publication Date Title
JP5497171B2 (ja) セキュア仮想マシンを提供するためのシステムおよび方法
KR20090007123A (ko) 보안 부팅 방법 및 그 방법을 사용하는 반도체 메모리시스템
US20230351056A1 (en) Sram physically unclonable function (puf) memory for generating keys based on device owner
CN109445705B (zh) 固件认证方法及固态硬盘
US20230273977A1 (en) Managing ownership of an electronic device
US20220021544A1 (en) Secure Serial Peripheral Interface (SPI) Flash
CN109814934B (zh) 数据处理方法、装置、可读介质和系统
WO2023212178A1 (en) Sram physically unclonable function (puf) memory for generating keys based on device owner
CN109586898B (zh) 双系统通信密钥生成方法及计算机可读存储介质
CN117413268A (zh) 基于固件的安全租赁转移
US20240146525A1 (en) Batch Transfer of Control of Memory Devices over Computer Networks
US20220231858A1 (en) Control of Memory Devices over Computer Networks
US10461926B2 (en) Cryptographic evidence of persisted capabilities
CN113505363A (zh) 通过软件方式实现存储空间防重放的方法和系统
CN115062330B (zh) 基于tpm的智能密码钥匙密码应用接口的实现方法
KR20240064493A (ko) 스토리지 컨트롤러 및 펌웨어 이미지 제공 방법
US20240152284A1 (en) Storage controller and method of providing firmware image
WO2016024967A1 (en) Secure non-volatile random access memory
CN117813795A (zh) 设备身份密钥
JP2024507531A (ja) デジタルデバイスのためのトラステッドコンピューティング
CN117997544A (zh) 存储控制器和提供固件映像的方法
US20240152620A1 (en) Owner revocation emulation container
US20230222219A1 (en) Storage controller, storage system, and method of operating storage device
US20240078315A1 (en) Secure booting system and operation method thereof
KR20240116280A (ko) 스토리지 장치 및 스토리지 장치에 인증서를 주입하는 호스트를 포함하는 스토리지 시스템, 스토리지 시스템을 포함하는 시스템 및 시스템의 동작 방법