KR100996784B1 - 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체 - Google Patents

공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체 Download PDF

Info

Publication number
KR100996784B1
KR100996784B1 KR1020030024374A KR20030024374A KR100996784B1 KR 100996784 B1 KR100996784 B1 KR 100996784B1 KR 1020030024374 A KR1020030024374 A KR 1020030024374A KR 20030024374 A KR20030024374 A KR 20030024374A KR 100996784 B1 KR100996784 B1 KR 100996784B1
Authority
KR
South Korea
Prior art keywords
key
data
bound
program
processors
Prior art date
Application number
KR1020030024374A
Other languages
English (en)
Other versions
KR20030082484A (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 KR20030082484A publication Critical patent/KR20030082484A/ko
Application granted granted Critical
Publication of KR100996784B1 publication Critical patent/KR100996784B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database

Abstract

본 발명의 일 양상에 따르면, 호출 프로그램으로부터 데이터가 검색된다. 이 데이터를 포함하는 암호문이, 단 하나 또는 그 이상의 목표 프로그램만이 그 암호문으로부터 데이터를 얻을 수 있도록 하는 방식으로, 공개 키 암호화를 이용하여 생성된다. 본 발명의 다른 양상에 따르면, 호출 프로그램으로부터 비트 스트링이 검색된다. 호출 프로그램이 그 비트 스트링의 암호문에 암호화되어 있는 데이터에의 접근이 허락되어 있는 지를 결정하기 위하여 그 호출 프로그램의 식별자가 체크된다. 그 데이터는 공개 키 해독을 이용하여 해독되고, 호출 프로그램이 그 데이터에 접근하도록 허락되어 있는 경우에만, 그 호출 프로그램에 리턴된다.
암호화, 해독, 공개 키 암호화, 공개 키 해독, 호출 프로그램, 식별자, 목표 프로그램

Description

공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체{SAVING AND RETRIEVING DATA BASED ON PUBLIC KEY ENCRYPTION}
도 1은 예시적인 접근 제어 모델을 나타내는 도면.
도 2는 4개의 서로 다른 계층을 채용하는 예시적인 접근 제어 모델을 나타내는 도면.
도 3은 Seal 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 4는 UnSeal 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 5는 Store 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 6은 Seal 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 7은 Quote 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 8은 Verify 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 9는 Seal 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 10은 PKSeal 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 11은 GenSeal 연산을 구현하기 위한 예시적인 프로세스를 나타내는 흐름도.
도 12는 본 명세서에 설명되는 기술을 구현하기 위해 이용될 수 있는 일반적 컴퓨터 환경을 나타내는 도면.
<도면의 주요부분에 대한 간단한 설명>
100: 접근 제어 모델
102: 프린시펄
104: 가드
106: 자원
120: 프로그램
122: 모듈
<관련 문헌>
본 US 정규 출원은, 2002년 4월 17일에 출원되고 발명자가 Paul Engliand, Marcus Peinado 및 Bryan M. Willman이며, 발명의 명칭이 "Secure Store Processor"인, US 가출원 제60/373,505호로부터의 우선권을 주장하며, 본 명세서에 참조로 그 전체의 개시를 포함한다.
본 특허 문서의 개시의 일부는 저작권 보호(copyright protection)가 필요한 내용을 포함한다. 본 저작권의 소유자는, 특허청의 파일 또는 기록에서 보여지는 바와 같이, 임의의 누군가에 의한 특허 문서 또는 특허 명세의 복사를 반대하지 않으나, 다른 경우에는 무엇이든지 간에 모든 저작권이 유지된다.
본 발명은 데이터의 저장 및 검색에 관한 것이고, 특히 공개 키 암호화에 기초한 데이터의 저장 및 검색에 관한 것이다.
데이터가 적절한 주체(party)에게만 노출(disclose)되도록 컴퓨터상의 데이터를 보호하는 것은 유저에게 중요한 관심사항이 되어 왔다. 유저가 보호를 원하는 데이터의 타입은, 작업관련 또는 개인적 비밀 문서, 은행 계좌 번호, 신용 카드 번호, 주민등록번호(미국에서는 social security number) 등 매우 다양하다. 또한, 유저의 컴퓨터상의 데이터를 부적절한 이용이나 접근으로부터 보호하는 것은 또한 어떤 제3주체에 있어서도 중요하다. 예를 들면, 신용 카드 발급 회사는 신용 카드 번호가 컴퓨터를 해킹하여 들어온 유해 프로그램 또는 주체에게 노출(disclose)되지 않도록 보호되기를 원하며, 음악 회사는 음악이 복제될 수 없도록 보호되기를 원하며, 또한 영화 제작 회사는 영화가 복제될 수 없도록 보호되기를 원하고 있다.
컴퓨터상의 데이터를 보호하는 하나의 해법은 범용의 컴퓨팅 장치를 제거해 버리고, 보안 컨텐츠의 전달, 저장 및 표시를 위해 특화된 목적의 변경 방지(tamper-resistant) 박스를 이용하는 것이다. 하지만, 이러한 해법은 유저가 컴퓨터를 확장시키는 것조차 방지하므로 바람직하다고 할 수 없다(예를 들면, 유저도 이러한 변경 방지 박스에 추가적인 소프트웨어 컴포넌트 및/또는 하드웨어 컴포넌트를 설치할 수 없다). 그래서, 범용 컴퓨팅 장치상에서 데이터가 보호되도록 하는 방법을 제공하는 것이 이로울 것이다.
공개 키 암호화에 기초하여 데이터를 저장하고 검색하는 것을 이하에서 설명한다.
본 발명의 일 양상에 따르면, 데이터는 호출 프로그램으로부터 수신된다. 이 데이터를 포함하는 암호문이, 공개 키 암호화를 이용하여, 단 하나 또는 그 이상의 목표 프로그램이 암호문으로부터 데이터를 얻을 수 있도록 하는 방식으로 생성된다.
본 발명의 다른 양상에 따르면, 비트 스트링이 호출 프로그램으로부터 수신된다. 호출 프로그램의 식별자는 그 호출 프로그램이 비트 스트링의 암호문에 암호화된 데이터에 접근이 허락되어 있는 지를 결정하기 위하여 체크된다. 이 데이터는 공개 키 해독을 이용하여 해독되고, 그 호출 프로그램이 데이터에 접근하도록 허락되어 있는 경우에만 호출 프로그램에 리턴된다.
명세서 전체에 있어서, 동일한 구성 성분 및/또는 특성에 대해서는 동일한 부재번호가 사용된다.
도 1은 예시적인 접근 제어 모델(100)을 나타낸다. 프린시펄(principal) (102)은 보호된 자원에 접근하고자 하는 요청을 한다. 이 요청은, 자원(106)에의 접근을 제어하는 컴포넌트인 가드(104)에 의해 수신된다. 가드(104)는 요청을 조사하여, 요청을 발한 프린시펄(102)의 아이덴티티(identity)와 같은 다른 정보뿐만아니라 자원에 대한 접근 정책(policy)에 기초하여 그 요청을 허가할 것인 지를 결정한다. 설명을 간단히 하기 위해, 도 1에는 단일의 프린시펄(102), 가드(104) 및 자원(106)이 도시되어 있다. 하지만, 접근 제어 모델(100)은 다수의 프린시펄(102), 다수의 가드(104), 및/또는 다수의 자원(106)을 포함할 수 있다는 것은 인식되어야 한다.
프린시펄(102)은 보호되는 데이터에의 접근을 요청하는 컴포넌트 또는 모듈을 의미한다. 이러한 요청은 보호되는 데이터를 검색하고자 하는 요청(예로서, 암호 키의 검색을 위한 요청), 또는 보호되는 데이터를 이용하여 연산(들)을 수행하고자 하는 요청(예로서, 보호되는 데이터는 암호 키이고 그 요청은 그 암호 키를 이용하여 특정의 데이터를 암호화 또는 해독하고자 하는 요청일 수도 있다)일 수도 있다. 프린시펄(102)은 하드웨어, 소프트웨어, 펌웨어 또는 하드웨어, 소프트웨어, 및/또는 펌웨어의 조합으로 컴포넌트 또는 모듈로서 구현될 수 있다.
가드(104)는 보호되는 데이터에의 접근을 제어하는 컴포넌트 또는 모듈을 의미한다. 가드(104)는 다른 정보(보호되는 컨텐츠에의 접근을 요청하는 프린시펄의 아이덴티티 등)뿐만아니라 보호되는 데이터에 연계된 접근 정책을 이용하여, 프린시펄이 그 보호되는 데이터에 접근하도록 허락할 것인 지를 결정한다. 가드(104)가 요청을 한 프린시펄이 보호되는 데이터에 접근하도록 허락한다는 결정을 하면, 가드(104)는 적절한 방식으로 요청에 응답한다(예를 들면, 요청이 보호되는 데이터에 대한 요청인 경우에는 그 보호되는 데이터는 프린시펄로 리턴되고; 또는 요청이 보호되는 데이터를 이용하여 암호화될 특정의 데이터에 대한 요청인 경우에는 가드(104)는 그 보호되는 데이터를 이용하여 특정의 데이터를 암호화하고 암호문(암호화된 데이터)을 프린시펄에 리턴한다). 가드(104)는 요청의 속성(nature)에 기초하여 프린시펄을 제한할 수도 있다는 것은 인식되어야 한다. 예를 들면, 가드(104)는 특정의 프린시펄이 그 보호되는 데이터를 이용하여 서명된 특정의 데이터를 가지도록 할 수도 있지만, 보호되는 데이터가 특정의 프린시펄에 리턴되지 않도록 할 수도 있다.
가드(104)는 또한 노출(disclosure) 가드 및/또는 서비스 가드인 것을 특징으로 할 수도 있다. 서비스 가드는 프린시펄의 요청시에 보호되는 데이터를 노출시키지 않고 보호되는 데이터(예로서, 암호키)로써 어떤 연산(예로서, 암호화, 해독, 디지털 서명 등)을 수행한다. 한편, 노출 가드는 인증된 요청자에게 보호되는 데이터를 시현(示現; reveal)한다. 특정의 가드(104)는 노출 가드 및 서비스 가드 양쪽이 될 수도 있다는 것은 인식되어야 한다.
자원(106)은 접근이 제한되어 있는 데이터라면 어떤 타입이라도 될 수 있다. 자원(106)의 예로는, 암호키, 은행 계좌 번호, 신용 카드 번호, 주민 등록 번호와같은 개인 정보 등을 들 수 있다. 자원(106)은 또한 컴퓨팅 장치에서의 그 밖의 어떤 가상적인 것도 될 수 있다. 예를 들면, 자원(106)은 또한 물리적 메모리(예로서, RAM 또는 ROM), 광 디스크 또는 자기 디스크 또는 디스크 드라이브, 비디오 카드, 사운드 카드, 스마트 카드 등이 될 수도 있다. 다른 예로서는, 자원(106)은 또한 프로세스, 파일, 쓰레드, 세마포어 등과 같은 운영 체제의 추상적 요소(abstractions)도 될 수 있다.
이하의 설명에 있어서, 접근 제어 모델(100)은 단일의 컴퓨팅 장치상에서 구현되는 것을 주로 참조하여 설명될 것이다. 하지만, 이 모델의 다른 부분들은 다른 컴퓨팅 장치상에서 구현될 수도 있임을 인식하여야 한다. 예를 들면, 프린시펄(102)은 하나의 컴퓨팅 장치상에 있고 가드(104) 및 자원(106)은 다른 컴퓨팅 장치상에 있을 수도 있다.
하나의 컴퓨팅 장치상에 있는 프린시펄들과 가드들은 임의의 n 개의 계층 ln으로 분류될 수 있다. 도 2는 4개의 서로 다른 계층을 채용하는 예시적인 접근 제어 환경을 나타낸다. 일 구현예에서, 층 l1 은 어떤 하드웨어 또는 보안 커넬(kernel) 층을 의미하고, 층 l2 은 기본 입력/출력 시스템(BIOS) 층을 의미하고, 층 l3 은 운영 체제(OS) 층을 의미하고, 층 l4 는 애플리케이션 층을 의미한다.
도 2의 예시적 환경에서, 최하층(층 l1)은 루트 자원을 가드한다. 중간층( 층 l2 및 l3)내의 프로그램은 다음으로 낮은 층으로부터의 접근을 요청하는 프린시펄로서 역할을 하는 한편, 동시에 다음으로 높은 층에서 프린시펄쪽으로의 가드로서 역할을 한다.
예로서, 프로그램(120)은 가드(126)에 의해 가드되는 루트 자원(128)을 검색하기를 원하는 것으로 가정한다. 프로그램(120)은 자원의 가드로서 역할을 하는 모듈(122)로부터 루트 자원(128)에의 접근을 요청하는 프린시펄로서 역할을 한다. 모듈(122)이 (예를 들어, 층 l4 내의 프로그램(120) 또는 다른 어떤 프로그램에 의해 자원에 대한 이전의 요청에 응답하여 또는 모듈(122)이 컴퓨팅 장치내에 초기화되고 로드되는 경우에 가드(126)로부터 이전에 얻어진) 자원(128)의 복제를 가지면, 모듈(122)은 프로그램(120)이 자원을 검색하도록 허락되어 있는 지를 체크한다. 다음, 프로그램(120)이 자원을 검색하도록 허락되면, 모듈(122)은 자원을 프로그램(120)에 리턴시킨다.
하지만, 모듈(122)이 자원(128)의 복제를 가지지 않으면, 모듈(122)은 자원의 가드로서 역할을 하는 모듈(124)로부터 루트 자원에의 접근을 요청하는 프린시펄로서 역할을 한다. 모듈(124)이 (예를 들어, 층 l3 내의 모듈(122) 또는 다른 어떤 모듈에 의해 자원에 대한 이전의 요청에 응답하여 또는 모듈(124)이 컴퓨팅 장치내에 초기화되고 로드되는 경우에 가드(126)로부터 이전에 얻어진) 자원(128)의 복제를 가지면, 모듈(124)은 모듈(122)이 자원을 검색하도록 허락되어 있는 지를 체크한다. 다음, 모듈(122)이 자원을 검색하도록 허락되면, 모듈(124)은 자원 을 모듈(122)에 리턴시킨다. 다음, 프로그램(120)이 자원을 검색하도록 허락되면, 모듈(122)은 자원을 프로그램(120)에 리턴시킨다.
하지만, 모듈(124)이 자원(128)의 복제를 가지지 않으면, 모듈(124)은 가드(126)로부터 루트 자원에의 접근을 요청하는 프린시펄로서 역할을 한다. 가드(126)는 모듈(124)이 자원을 검색하도록 허락되어 있는 지를 체크하고, 모듈(124)이 자원을 검색하도록 허락되면, 자원을 모듈(124)에 리턴시킨다. 다음, 모듈(122)이 자원을 검색하도록 허락되면, 모듈(124)은 자원을 모듈(122)에 리턴시키고, 프로그램(120)이 자원을 검색하도록 허락되면, 모듈(122)은 자원을 프로그램(120)에 리턴시킨다.
이하의 설명에 있어서, 소프트웨어의 인증된 연산을 허락하도록 도 1의 접근 제어 모델을 채용하는 것에 대한 다수의 참조가 이루어진다. 전형적으로, 소프트웨어의 인증된 연산에서 보호되어 있는 자원은 암호키들이다. 하지만, 소프트웨어의 인증된 연산이 접근 제어 모델(100)의 이용의 일 예일뿐이라는 것이 인식되어야 한다.
접근 제어 모델(100)의 이용의 다른 예는 컴퓨터에 대한 유저의 인증이다. 대부분의 현재 컴퓨터는 접근 제어 시스템을 가진다. 유저는 컴퓨터가 사용자가 누구인 지를 알 수 있도록 컴퓨터에 로그인한다. 로그인 후에, 유저는 전형적으로 시스템 자원에 접근할 필요가 있는 프로그램을 실행한다(예로서, 파일 읽기, 스크린상의 윈도우에의 기록, 등). 전형적으로, 컴퓨터의 접근 제어 시스템에게 묻는다(consult)(예로서, "유저 x는 자원 z에서 연산 y를 수행할 수 있는가?"). 그 답이 "아니오"이면, 프로그램은 자원에 접근할 수 없다.
접근 제어 모델(100)의 이용의 다른 예는 원격 장치에 대한 유저의 인증이다. 웹사이트(예로서, 온라인 증권회사 또는 은행)와 같은 원격 서비스가 접근 제어 시스템을 가지는 것으로 고려될 수 있다. 이 자원들은 고객의 은행 계좌, 그들의 자금, 그들의 주식이다. 유저가 웹 사이트에 로그인한 후에, 접근 제어 시스템은 유저가 그 유저에 의해 요청된 접근 - (최근의 은행 재무제표를 검색하기 위해) 자원 "은행 계좌 데이터"에 대한 "읽기" 접근, 또는 자원 "은행 계좌 12345에의 $1000" 에 대한 "이체(transfer)" 접근 등 - 을 수행하도록 인증되어 있는 지를 결정할 것이다.
접근 제어 모델(100)의 이용의 또 다른 예는 특정의 건물 또는 지역에 대한 물리적 접근의 제한이다. 예를 들면, 유저가 아침에 직장에 도착한 때에, 유저는 뱃지(badge)를 보여주고 자원 "현관문"에 대해 "열림" 연산을 요청한다. 어떤 전자 시스템(일종의 가드)은 그 뱃지에 저장된 정보에 기초하여 그 유저가 그 건물에 출입하도록 허락되어 있고 따라서 문을 열어 주어야 하는지를 결정한다.
만약 프로그램으로 하여금 적어도 하나의 암호 자원에의 (노출 가드로부터의 또는 서비스 가드로부터의) 보호 접근을 얻도록 하는 것이 가능하면, 컴퓨팅 장치는 프로그램(소프트웨어)의 인증된 연산을 인에이블시킨다. 어떤 실시예에서는, 후술하는 바와 같은 인증 및 격리(isolation)를 인에이블시키는 컴퓨팅 장치가 인증된 연산을 인에이블시킨다.
만약 다음의 두가지 포인트가 만족된다면, 프로그램 C는 다른 프로그램 D로부터 격리되는 것으로 말할 수 있다; 즉 (1) 프로그램 D에 의해서가 아니라 프로그램 C에 의해서 접근될 수 있는 메모리가 있음, (2) 프로그램 D는 프로그램 C의 실행을 초기화할 수 없음(가능하다면, 프로그램 C에 의해 결정된 엔트리 포인트(들)에서는 제외함). 프로그램에는 천이 규칙(실행가능 코드) 및 초기 상태(엔트리 포인트(들) 또는 명령어 포인터 IP의 초기 값)가 주어진다. 프로그램 D에 의한 적대적(adversarial) 거동이 존재하더라도, 프로그램 D에 의해 접근될 수 없는 메모리에 데이터가 저장될 수 있기 때문에, 제1 포인트는 프로그램 C의 상태 정보 및 프로그램 코드의 무결성(integrity)를 보장한다. 이러한 포인트는 또한 프로그램 C가 프로그램 D에 의한 관측으로부터 기밀(confidential) 데이터(예로서, 암호키)를 보호할 수 있게 한다. 제2 포인트는 프로그램 D가 엔트리 포인트를 적대적으로 선택함으로써 프로그램 C의 거동을 파괴할(subvert) 수 없게 하는 것을 보장한다.
또한, 프로그램 C가 프로그램 D의 초기 상태 및 천이 규칙(프로그램 코드) 양쪽을 식별할 수 있는 경우에, 프로그램 C는 프로그램 D를 인증할 수 있다라고 말할 수 있다. 컴퓨팅 장치는 각각의 층 j<i(여기서, i는 프로그램 C의 층임)에 대한 단일의 프로그램 Ej를 제외하고는, 어떤 다른 프로그램 D로부터 어떤 프로그램 C에 대한 격리를 인에이블한다. 이것은, 프로그램 C가 자원에의 접근을 그를 통해서 요청하는 가드들의 시퀀스 E1, E2, ..., Ei-1 을 제외하고는, 모든 프로그램에 의해 관측 및 간섭으로부터 프로그램을 보호한다. 더나아가, 임의의 층 i에 대해, 컴퓨팅 장치는 층 i+1 에서 적어도 어떤 프로그램을 인증하기 위해 층 i에서 실행하는 프로그램을 인에이블한다. 이러한 요구는 프로그램으로 하여금 다음 층에서 프린시펄로부터의 요청에 대한 가드로서 역할을 하도록 한다. 이러한 두개의 관측은, 선행자(predecessor)들로부터의 자원에 대한 접근을 요청하고 격리를 통하여 그들의 무결성 및 자원을 보호하고 다음 층의 프린시펄로부터의 요청을 인증함으로써, 임의의 층의 프로그램이 자원에 대한 가드로서 역할을 할 수 있다는 귀납적인 주장을 일으킨다.
격리는 물리적 메모리 보호를 이용하여 구현될 수 있다. 이러한 접근법은 "공간적으로의 격리" 또는 "공간 격리"라고 한다. 예를 들면, 많은 모뎀 마이크로프로세서에서 발견되는 링(ring) 및 가상 메모리 보호는 공간적으로 격리를 충분히 구현할 수 있다. 특권(privileged) 모드에서 실행되는 운영 체제 커넬(층 i)은 애플리케이션(층 i+1)에 대한 페이지 테이블을 셋업할 수 있어, 임의의 애플리케이션은 그 운영 체제 커넬이 애플리케이션의 가상 어드레스 공간으로 매핑하기로 한 물리적 메모리의 부분들에만 접근할 수 있다. 더나아가, 이 커넬은 애플리케이션들의 특권을 제한하여, 애플리케이션들이 메모리 매핑을 변경할 수 없게 하고, 애플리케이션들이 잘 정의된 엔트리 포인트(들)(시스템 호출(call))에서만 커넬 코드의 실행을 개시하는 것을 보장한다.
두 층간의 격리를 구현하는 다른 접근법은 이들의 실행을 시간적으로 분리하는 것이다. 이러한 접근법은 "시간적으로의 격리" 또는 "시간 격리"라 한다. 제1 층 i의 프로그램이 수행을 완료하고, 어떤 자원을 가용하지 않게 만들고, 종료한다. 후속하여, 제어가 다음 층 i+1에 전달된다.
인증은, 후속하는 층들(j = i+1) 사이에서 일어난다. 프로그램 C는 층 j의 구성의 초기 상태 및 프로그램(천이 규칙)을 인증한다. 프로그램은, 프로그램 C로 하여금 층 j 의 프로그램을 검사하게 함으로써 인증될 수 있다. 즉, 전형적으로 프로그램 C는 층 j의 프로그램을 포함하는 메모리를 읽고 그 메모리 범위에 걸쳐 암호 다이제스트(digest)를 계산한다. 이 포인트에서의 목적은 코드에 대해 다른 프린시펄에 의해 만들어지는 스테이트먼트(statement)를 평가하기 위한 것이 아니라 코드의 아이덴티티(identity)를 확인하는 것임을 주목하여야 한다. 그래서, 인증서(certificate)들이 이 포인트에서는 불필요하다.
프로그램 C에 대한 제2 태스크는 프로그램 D의 초기 상태를 식별하는 것이다. 일반적으로, 임의의 실행 단계에서 프로그램의 초기 상태를 결정하는 문제는 매우 어려운 문제이다. 그래서, 프로그램 C는 프로그램 D의 초기 상태를 제어한다. 실용적 관점에서, 이것은, 만약 프로그램 C가 프로그램 D의 초기 상태 σ 에서 프로그램 D의 실행을 개시한다면, 프로그램 C가 프로그램 D의 초기 상태 σ 를 단지 확인할 수만 있다는 것을 의미한다.
요약하면, 프로그램 D를 인증하기 위해, 프로그램 C는 적절하다고 간주하는 메모리 컨텐츠(프로그램 및 가능하다면 데이터)를 검사하고, 암호 다이제스트를 계산한다. 그 후, 프로그램 C는 프로그램 D의 잘 정의된 엔트리 포인트로 실행을 전달한다.
자원이 암호키인 상황에서, 인증된 연산은 운영 체제 및 애플리케이션 프로 그램 각각이 하나 이상의 시크리트에 배타적으로 접근하도록 허락한다. 전술한 격리는 적대적 코드에 의한 공격으로부터 각각의 시크리트를 보호한다. 전술한 프로그램의 인증은 프로그램이 식별되도록 하여, 각각의 시크리트가 그를 소유한 프로그램에만 노출된다.
일반적으로, 프로그램(도 1의 프린시펄(102))으로부터의 요청이 주어지면, 가드(104)는 프로그램의 아이덴티티를 확립한다(즉, 가드(104)가 그 프로그램을 인증한다). 프로그램이 그 요청된 시크리트(자원(106))의 소유자가 아니면, 가드(104)는 그 요청을 거절한다. 그렇지 않으면, 가드(104)는 시크리트의 어떤 함수(시크리트 자체가 될 수도 있음) 및 가능하다면 더나아가 그 프로그램에 의해 제공된 정보를 계산하여, 그 결과를 리턴시킨다. 대안으로서는, 요청을 명시적으로 수용하거나 거절하는 것이 아니라, 가드(104)가 그 요청을 서비스하되 그 호출자의 아이덴티티를 그 결과에 바인딩할(bind) 수도 있다. 이러한 대안의 접근법은 예로서, 가드에 의해 리턴된 결과가 기밀 정보를 포함하지 않은 경우에(예를 들면, 시크리트를 이용하여 디지털 서명을 생성하고자 하는 요청의 경우에) 적절하다. 텀 게이팅 함수(term gating function)는 여기에서 이들 경우 양쪽을 지칭하도록 이용된다.
또한, 어느 경우에도, 가드(104)는 호출자(프린시펄(102))를 인증한다. 또한, 프린시펄(102)을 인증하는 것은, 본 명세서에서 "함수 ID()"로 나타내며, 이 함수는 호출 프로그램(가드(104)의 게이팅 함수를 호출하는 프로그램)의 다이제스트를 리턴시킨다. 이 다이제스트는, SHA1(Secure Hash Algorithm 1), MD5(Message Digest 5), MD2(Message Digest 2)와 같은 다양한 암호 해시 함수 ("일방향 해시 함수"라고도 함)중의 어느 하나 이상의 것을 이용하는 것; 키형(keyed) MAC(Message Authentication Code)를 이용하는 것 등, 종래의 다양한 방식 중의 어느 하나의 방식으로 생성될 수 있다.
여기에 설명되는 일 클래스의 게이팅 함수는 봉인된(sealed) 저장을 구현한다. 봉인된 저장의 목적은, 프로그램으로 하여금 시크리트들을 저장하도록 하여, (그 시크리트들을 저장하는 프로그램에 의해 정의된) 하나 이상의 프로그램의 특정의 세트가 그 시크리트들을 검색할 수 있게 하는 것이다. 일 구현예에서, 시크리트를 최초로(originally) 저장하고(봉인하고) 있는 프로그램만이 그 시크리트를 복원할(봉인해제할) 수 있다. 전형적으로, 이들 시크리트의 수명(life time)은 그 프로그램의 개별적 실행들의 시간을 초과할 것이다. 프로그램의 단일의 실행 동안에 이용된 시크리트들은 저장될(봉인될) 수 있고, 또는 대안으로서 격리 및 난수 발생기는 또한 그 프로그램으로 하여금 단일의 실행 동안에 시크리트를 유지하도록 할 수 있다. 봉인된 저장은 또한 프로그램으로 하여금 시간적으로 서로 중첩하지 않는 서로 다른 실행에 걸쳐 시크리트를 유지하도록 할 수 있다. 층 li 는 이하의 인터페이스(예로서, "Seal" 및 "UnSeal" 연산 및/또는 "PKSeal" 및 "PKUnSeal" 연산)로 다음 층 li+1 에 그 봉인된 저장을 표출시킨다(expose).
봉인된 저장에 관한 여기서의 논의는 데이터를 암호화하고 해독하는 데 이용되는 암호키를 지칭한다. 이러한 암호키는 자원에의 접근을 가드하는 가드(예로서, 도 1의 가드(104))와 연계된 키들이다.
여기서의 논의는 또한 프로그램의 식별자를 언급한다(예로서, 연산을 호출하는 또는 인보크하는(invoke) 프로그램의 식별자, 또는 자원에의 접근이 허락된 목표 프로그램의 식별자). 이들 식별자는 때때로 다이제스트라 부른다. 하지만, 다이제스트는 프로그램의 식별자의 단지 일 예임을 인식하여야 한다. 프로그램의 측정(measure) 또는 다른 표현(representation)이며 검출될 프로그램에 어떤 변경을 허락하는 다른 타입의 식별자도 이용될 수 있다. 어떤 변경이 프로그램에 가해지면(예로서, 하나 이상의 명령어(instruction)가 보안 데이터로의 유해한 접근을 얻어 그것을 이용하려는 시도로 적대적인 것(adversary)에 의해 변경되는 것), 프로그램의 식별자는 그 변경을 반영하여야 한다(예로서, 변경되지 않은 프로그램에 대한 식별자는 그 변경된 프로그램에 대한 식별자와 다르게 될 것이다).
Seal 연산은 봉인될 데이터(예로서, 시크리트)를 입력으로서 수신한다. Seal 연산은 또한 선택사항으로서 시크리트가 언제 및/또는 누구에게 시현되는(봉인해제되는) 지를 식별하는 조건을 입력으로서 수신한다. 일 구현예에서, 이러한 조건은 데이터를 검색하도록(봉인해제하도록) 허락된 목표 프로그램의 다이제스트이다. 대안으로서, 데이터를 검색하도록(봉인해제하도록) 허락된 프로그램은 다른 방식으로 식별될 수도 있다. 예를 들면, 프로그램은 하나 이상의 인증서를 검증하는 공개 키에 의해 식별될 수도 있고, 여기서 각각의 인증서는 하나 이상의 프로그램에 연계되어 있다.
대안으로서, 다른 조건들이 목표 프로그램의 식별자에 부가하여 또는 이를 대신하여 이용될 수도 있다. 예를 들면, 그 조건은, 시크리트가 시현될(봉인해제될) 주간의 일자(들)의 특정의 시간과 같이, 데이터가 언제 시현될(봉인해제될) 수 있는지에 대한 특정의 시간 제약조건을 포함한다. 다른 예로서는, 그 조건은 시크리트가 시현되기(봉인해제되기) 위해서 제공되어야 하는 패스워드 또는 다른 데이터의 식별자를 포함할 수도 있다 - 예로서, 시크리트는 패스워드를 알고 있는 프로그램에 의해만 봉인해제될 수 있다 -.
다른 예로서는, 그 조건은 논리식(예로서, 일차 논리로 쓰여진 어떤 스테이트먼트, 또는 술어(predicate) 논리로 쓰여진 스테이트먼트가 될 수도 있다). 이 논리식은 (예로서, 가드에 의해) 평가되고, 그 시크리트는 그 평가가 참의 지시를 리턴시키는 경우에만 시현된다(봉인해제된다).
또 다른 예에서는, 그 조건은 어떤 언어(예로서, 자바, C*, 자바스크립트, VBScript 등)로 쓰인 실행가능한 프로그램이 될 수 있다. 프로그램은 (예로서, 가드에 의해) 실행되고, 그 시크리트는 그 프로그램이 "참" 또는 "만족"의 어떤 표시를 리턴시키는 경우에만 시현된다(봉인해제된다).
그 조건에, 목표 프로그램의 다이제스트가 공급되는 것이 아니라, 그 조건이 목표 프로그램의 다이제스트인 상황에서, Seal 연산은 Seal 연산을 인보크(invoke)하는 프로그램의 다이제스트를 이용할 수도 있다 (이로써, 목표 프로그램의 다이제스트를 암시적으로 입력한다). 또한, 다수의 목표 프로그램의 다이제스트가 Seal 연산에 입력될 수 있고, 이로써 다수의 목표 프로그램으로 하여금 데이터를 검색하도록(봉인해제하도록) 허락한다.
Seal 연산은 호출자의 식별자와 함께 그 입력(데이터의 검색(봉인해제)을 허락하는 데이터 및 조건(들))을 암호화한다. Seal 연산은 입력 데이터를 암호화된 형태로(암호문으로서) 리턴시킨다. Seal 연산은 또한 봉인된 데이터의 무결성을 검증하는데 이용될 수 있는 값(예로서, 메시지 인증 코드(MAC) 값)을 리턴시킨다. 이 리턴된 데이터는 저장된 데이터가 후속하는 UnSeal 연산에서 참조될 수 있도록 한다(이에 대해서는 다음에 자세히 설명함).
Seal 연산에 대한 의사 코드가 테이블 I에 나타나 있다. 테이블 I의 의사 코드에서, ID()는 전술한 ID() 함수를 의미하고, e 는 호출자에게 리턴되는 값(예로서, 비트들의 스트링 또는 시퀀스)를 의미하고, data 는 봉인될 데이터를 의미하고, [t 1 , ..., t m ]은 데이터(대안으로서는, 하나 이상의 다른 조건들)를 검색하도록(봉인해제하도록) 허락된 하나 이상의 (m개의) 목표 프로그램의 다이제스트들을 의미한다.
테이블 I
Figure 112003013600861-pat00001
도 3은 Seal 연산을 구현하기 위한 예시적인 프로세스(200)를 나타내는 흐름도이다. 프로세스(200)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 봉인될 시크리트가 호출자로부터 수신된다(동작 202). 시크리트는 암호화되어, 그 시크리트가 특정의 목표 프로그램(들)에 의해서 단지 검색될 수 있게 하거나(동작 204), 또는 대안으로서 하나 이상의 특정의 조건이 만족될 때만 그 시크리트가 검색될 수 있게 한다. 이후 암호화된 시크리트를 포함하는 암호문은 호출자에 리턴된다(동작 206). 추가적인 정보는 또한 호출자의 다이제스트 및/또는 목표 프로그램(들)의 다이제스트(들)와 같은 (그 암호문의 일부로서 또는 그 암호문과는 별도로) 호출자에 리턴될 수도 있다.
UnSeal 연산은, 호출 프로그램이 현재 검색하기를 원하는 데이터(예로서, 암호키)를 봉인하는 때에 그 Seal 연산에 의해 리턴되는 비트 스트링을 입력으로서 수신한다. UnSeal 연산은 데이터를 시현하기 위한 조건(들)을 얻고, 이들 조건이 만족되는 지를 체크한다. 예를 들면, 조건(들)이 데이터를 검색하도록(봉인해제하도록) 허락된 하나 이상의 프로그램의 다이제스트(들)를 포함한다면, UnSeal 연산은 이들 다이제스트(들)을 얻고 호출 프로그램이 하나 이상의 목표 프로그램 중 하나인지를 체크한다. 만약 호출 프로그램이 하나 이상의 목표 프로그램 중의 하나가 아니면, UnSeal 연산은 실패한 것이고 그 요청된 데이터는 호출자에게 리턴되지 않는다. 하지만, 만약 호출 프로그램이 하나 이상의 목표 프로그램 중의 하나이면, UnSeal 연산은 성공한 것이고 그 요청된 데이터는 호출 프로그램에게 리턴된다. 데이터를 봉인했던 프로그램의 다이제스트는 또한 선택적으로 UnSeal 연산에 의해 리턴된다.
UnSeal 연산에 대한 의사 코드가 테이블 II에 나타나 있다. 테이블 II의 의 사 코드에서, data 는 요청되고 있는 (그리고 이전에 봉인되어 있는) 데이터를 의미하고, [t 1 , ..., t m ]은 데이터(대안으로서는, 하나 이상의 다른 조건들)를 검색하도록(봉인해제하도록) 허락된 하나 이상의 (m개의) 목표 프로그램의 다이제스트들을 의미하고, e 는 UnSeal 연산에의 입력(전형적으로는, Seal 연산에 의해 이전에 출력된 것)을 의미하고, ddata 를 봉인하였던 프로그램의 다이제스트를 의미한다.
테이블 II
Figure 112003013600861-pat00002
도 4는 UnSeal 연산을 구현하기 위한 예시적인 프로세스(220)를 나타내는 흐름도이다. 프로세스(220)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 호출자가 검색하기를 원하는 암호화된 데이터를 가진 암호문이 수신된다(동작 222). 호출자가 데이터를 검색하도록 허락되어 있는 지에 대한 체크가 행해지고(동작 224), 호출자가 데이터를 검색하도록 허락되어 있는 지에 기초하여 처리가 진행된다(동작 226). 호출자가 데이터를 검색하도록 허락되어 있으면, (해독된) 데이터가 호출자에게 리턴된다(동작 228). 호출자가 데이터를 검색하도록 허락되어 있지 않으면, 프로세스는 실패한 것으로 되고(동작 230), 데이터는 호출자에게 리턴되지 않는다.
봉인된 저장은 다른 방식으로 구현될 수 있다. 일 구현예에서, 봉인된 저장은 물리적으로 보호된 비휘발성 메모리를 이용하여 구현된다. 이 구현예에서, 컴퓨팅 장치는 서로 다른 가드를 보호되는 비휘발성 메모리의 다른 부분들에 연계시키고, 각각의 가드가 그 가드에 연계된 부분들에만 접근하도록 허락하다. 이 구현예에서, Seal 연산과 UnSeal 연산에서 참조된 Store 연산과 Retrieve 연산이 인보크되어, 컴퓨팅 장치가 그 가드에 연계되어 있는 보호되는 비휘발성 메모리내의 데이터를 각각 저장하고 검색하게 한다.
예로서, 저장 장치(하드 디스크 드라이브 등)는 가드를 구현할 수 있다. 저장 장치에 무조건적으로 읽기 및 쓰기 명령을 단순히 실행하는 것이 아니라, 저장 장치는 그 저장 장치에 접근을 시도하는 프린시펄을 (예로서, 그 프린시펄의 다이제스트에 기초하여) 식별하고, 특정의 프린시펄(들)만이 저장 장치에 접근하도록 허락한다. 대안으로서, 다른 프린시펄들은 저장 장치의 특정의 부분들에만(예로서, 특정의 섹터 또는 어드레스 범위들) 액세스하도록 제한될 수도 있다.
다른 구현예에서는, 봉인된 저장은 암호작성법(cryptography)을 이용하여 구현된다. 암호작성법을 이용하는 봉인된 저장의 예시적인 구현예의 설명은 다음과 같다.
봉인된 저장을 구현하기 위해 암호작성법을 이용하는 경우에, 자원은 물리적으로 보호되는 메모리보다는 키 K이다. Store 연산은 그 입력을 물리적으로 저장하지 않는다. 오히려, Store 연산은 암호작성법으로 보호된 출력 c 를 생성하며, 이것은 암호화되고 및 무결성-보호된 형태의 Store 연산의 입력이다. 암호화는 그 입력(들)에 대칭 암호(cipher)을 적용한 결과이다. 후자의 속성(property)은 (입력이 암호화되기 전에 또는 후에) 그 입력(들)에 메시지 인증 코드(MAC)를 적용한 결과로 얻어진다.
Store 연산에 대한 의사 코드가 테이블 III에 나타나 있다. 테이블 III의 의사 코드에서, b는 Store 연산으로의 비트 스트링 입력을 의미하고, c 는 Store 연산에 의해 출력된 비트 스트링을 의미하고, K1은 키 K 의 제1 부분을 의미하고 K2는 키 K의 제2 부분을 의미한다. 키 K 는 Seal 연산 및 Store 연산을 구현하는 가드의 대칭 키이다.
테이블 III
Figure 112003013600861-pat00003
그래서, 테이블 III에서 볼 수 있는 바와 같이, 값 (m)은 MAC를 Store 연산에 입력된 비트 스트링에 적용함으로써 생성된다. MAC는 키 K 의 일부(K1)에 키잉된다(keyed). Store 연산에 입력된 비트 스트링은 또한 키 K 의 제2 부분(K2)을 이용하여 암호화된다. 입력된 비트 스트링에 MAC를 적용함으로써 그리고 그 입력된 비트 스트링을 암호화함으로써 생성된 값들이 이후에 Store 연산의 호출자에게 리턴된다.
K 는 MAC에 대한 동일한 키와 암호를 이용하는 것을 회피하기 위하여 독립적인 2개의 키 K1K2 로 분할된다. 이러한 분할은 다양한 방식으로 수행될 수 있다. 이러한 분할은 키 K 의 다른 비트들을 이용할 수도 있고, 또한 대안으로서 하나 이상의 동일한 비트를 이용할 수도 있다. 예를 들면, 키 K 가 1024개의 비트라고 가정하면, 하위 512개 비트는 키 K1 로서 이용되고, 상위 512개 비트는 키 K2 로서 이용되고, 우수 비트(비트 0, 2, 4, 6, 8, 10, ..., 1022)는 키 K1 로서 이용되고, 기수 비트(비트 1, 3, 5, 7, 9, 11, ..., 1023)는 키 K2 로서 이용되고, 하위 650개 비트는 키 K1 로서 이용되고, 상위 650개 비트는 키 K2 (결과적으로 일부 비트는 K1K2 양쪽에 대해 이용됨) 로서 이용되는 것 등으로 할 수 있다. 대안으로서, 동일한 키 K 가 MAC 및 암호 양쪽에 대해 이용될 수 있다.
테이블 III에 나타낸 의사 코드는 데이터에 대해 MAC를 계산하고, 데이터를 암호화하고 MAC 및 암호 양쪽을 출력함으로써 Store 연산을 구현한다. 대안으로서, Store 연산은 다른 방식으로 구현될 수도 있다. 예를 들면, Store 연산은 우선 데이터를 암호화하고, 그 다음에 암호문에 대해 MAC를 계산하고, 암호문 및 MAC 양쪽을 출력할 수도 있다. 다른 예로서, Store 연산은 데이터에 대하여 MAC를 계산하고, 그 다음에 데이터 및 MAC 양쪽을 암호화하고, 암호문을 출력할 수도 있다.
Store 연산의 암호에 의해 수행된 암호화는 다양한 대칭 암호화 알고리즘을 이용하여 수행될 수 있다. 일반적으로, 대칭 암호화 알고리즘은 암호화 및 해독 양쪽에 대해 동일한 키를 이용한다. 이러한 알고리즘의 예는, 트리플-DES(Data Encryption Standard), AES(Advanced Encryption Standard) 등을 포함한다.
마찬가지로, MAC는 M. Bellare, R. Canetti, 및 H. Krawczyk의 문헌 "Keying hash functions for message authentication" (Advances in Cryptology-Crypto '96, CS의 Lecture Notes의 number 1109, 1996년)에 개시된 MAC와 같은 다양한 메시지 인증 코드 중의 어느 하나가 될 수 있다. 대안으로서, 무결성은 MAC를 대신하여 공개 키 디지털 서명에 의해 보호될 수 있다.
도 5는 Store 연산을 구현하기 위한 예시적인 프로세스(250)를 나타내는 흐름도이다. 프로세스(250)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 저장될 데이터가 수신된다(동작 252). 대칭 암호가 그 데이터에 적용되고(동작 254), 메시지 인증 코드(MAC)가 데이터에 적용된다(동작 256). 동작 254에서 생성된 그 암호화된 데이터 및 동작 265에서 생성된 MAC 값이 이후에 호출자에게 리턴된다(동작 258).
Retrieve 연산은 MAC 값과 암호문을 포함하는 입력 비트 스트링을 수신한다. 암호문은 평문(plaintext)을 생성하기 위해 해독되고 MAC 값은 평문에 대하여 생성된다. 평문에 대하여 생성된 MAC 값이 입력 비트 스트링의 부분으로서 수신된 MAC 값과 동일하면, 그 평문은 호출자에게 리턴된다. 하지만, 평문에 대하여 생성된 MAC 값이 입력 비트 스트링의 부분으로서 수신된 MAC 값과 동일하지 않으면, Retrieve 연산은 실패한 것으로 되고, 그 평문은 호출자에게 리턴되지 않는다. MAC 와 암호문을 입력 비트 스트링으로부터 얻기 위해 Retrieve 연산이 구현되는 특정의 방식이 Store 연산이 구현되는 방식에 종속됨을 이해할 것이다.
Retrieve 연산에 대한 의사 코드가 테이블 IV에 나타나 있다. 테이블 IV의 의사 코드에서, c 는 Retrieve 연산에의 비트 스트링 입력을 의미하고, b 는 Retrieve 연산에 의해 출력된 비트 스트링을 의미하고, m 은 Retrieve 연산에 입력된 비트 스트링의 MAC 값 부분을 의미하고, d 는 Retrieve 연산에 입력된 비트 스트링의 암호문 부분을 의미하고, K1은 키 K 의 제1 부분을 의미하고 K2는 키 K의 제2 부분을 의미한다. K1 K2 키는 Store 연산과 관련하여 전술한 키 K의 동일한 부분들이다.
테이블 IV
Figure 112003013600861-pat00004
그래서, 테이블 IV에서 볼 수 있는 바와 같이, 값 (b)은 Retrieve 연산에 입력된 비트 스트링을 해독함으로써 생성된다. 이후 MAC 값이 값(b)에 대해 생성된다. Retrieve 연산에 의해 생성된 MAC 값이 Retrieve 연산에 입력된 비트 스트링의 부분으로서 수신된 MAC 값과 동일하면, 그 값(b)은 Retrieve 연산의 호출자에게 리턴되고, 그렇지 않으면 Retrieve 연산은 실패한 것으로 된다.
테이블 IV의 의사 코드는 Store 연산의 구현에 기초하며, 여기서 MAC은 데이터에 대하여 계산되고, 데이터는 암호화되고, MAC 및 암호문이 함께 출력된다(그리고, Retrieve 연산에 대해 입력 비트 스트링으로서 역할을 한다). 만약 Store 연산이 구현되어 우선 데이터를 암호화하고 그 암호문에 대하여 MAC를 계산하고 암호문 및 MAC 양쪽을 출력하면, 그 다음에 Retrieve 연산이 구현되어 암호문의 MAC를 계산하고 이를 입력 비트 스트링의 부분으로서 수신된 MAC 값과 비교하고 암호문을 해독하고, 그 MAC 값이 일치하면 그 해독된 데이터를 리턴시킨다. 만약 Store 연산이 구현되어 데이터에 대하여 MAC를 계산하면, 데이터 및 MAC 양쪽을 암호화하고, 그 다음에 Retrieve 연산이 구현되어 입력 비트 스트링을 해독하고, 그 입력 비트 스트링내의 데이터에 대하여 MAC를 계산하고 그 계산된 MAC를 그 해독된 스트링내의 MAC 값과 비교하고, 그 MAC 값이 일치하면 그 데이터를 리턴시킨다.
Store 연산과 관련하여 전술한 바와 마찬가지로, 다양한 해독 알고리즘이 Retrieve 연산에 의해 이용될 수 있다. 하지만, 이 해독 알고리즘은 그 암호화된 데이터가 해독될 수 있도록 암호화 알고리즘에 상응하여야 한다. 마찬가지로, 다양한 메시지 인증 코드 중 임의의 것이 MAC로서 이용될 수도 있지만, 그 이용된 메시지 인증 코드는 Store 연산에 의해 이용된 메시지 인증 코드와 동일하여야 한다.
도 6은 Seal 연산을 구현하기 위한 예시적인 프로세스(270)를 나타내는 흐름도이다. 프로세스(270)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 암호문 및 MAC 값이 수신된다(동작 272). 암호문은 평문 데이터를 생성하기 위해 해독된다(동작 274). 메시지 인증 코드(MAC)가 MAC 값을 생성하기 위해 평문 데이터에 적용되고(동작 276), 동작 276에서 생성된 그 MAC 값이 동작 272에서 수신된 MAC 값과 동일한 지가 체크된다(동작 278). 다음에, 그 생성된 MAC 값이 그 수신된 MAC 값과 동일한 지에 기초하여 처리가 진행된다(동작 280). 만약 그 생성된 MAC 값이 그 수신된 MAC 값과 동일하면, 평문 데이터가 호출자에게 리턴된다(동작 282). 하지만, 만약 그 생성된 MAC 값이 그 수신된 MAC 값과 동일하지 않으면, 프로세스는 실패한 것으로 되고(동작 284), 평문 데이터는 호출자에게 리턴되지 않는다.
그래서, 봉인된 저장에 대한 암호작성법 접근법은, 값 c (Store 연산의 출력)의 어떤 손상(corruption)이 검출될 수 있는 것과, 값 b(Store 연산의 입력)가 키 K2(값 b 를 암호화하기 위해 암호에 의해 이용된 키)에의 접근없이 검색될 수 없다는 것을 실질적으로 보장한다.
다른 클래스의 게이팅 함수는 원격 인증을 구현한다. 원격 인증의 목적은, 프로그램이 인증자로의 강한 물리적 결합(예로서, 서버 또는 스마트 카드를 이용하는 것)이 존재하지 않을 지라도 인증되도록 허락하는 것이다. 이러한 상황에서, 인증은 암호작성법에 기초한다. 즉, 양쪽의 엔티티들은 암호 인증 프로토콜을 행한다. 이것은, 프로토콜에 의존하는, 전형적으로 사설 키 또는 공개 키인 시크리트에의 접근을 갖는 인증된 구성(configuration)과 연관되어 있다. 또한, 컴퓨팅 장치는 이들 인증 시크리트의 이용들을 그들의 이용을 요청하는 구성(예로서, 프로세서 및/또는 소프트웨어)의 아이덴티티에 속박시킬(tie) 수 있다. 그래서, 인증자는 컴퓨팅 장치 뿐만 아니라 그 위에서 실행되는 소프트웨어의 아이덴티티를 확립할 수 있다.
두개의 연산, 즉, Quote 연산 및 PKUnseal 연산이 공개 키 서명(signing) 및 공개 키 해독에 대한 각각의 게이팅 함수이다. 이들 게이팅 함수를 구현하는 가드는 서명 키 Ks 및 해독 키 Kd 에의 접근을 가진다. 서명 키 Ks 및 해독 키 Kd 양쪽은 또한 공개 키/사설 키 쌍의 사설 키라 부른다. 이러한 공개 키/사설 키 쌍 은 Quote 연산 및 PKUnseal 연산을 구현하는 가드의 키 쌍이다.
Quote 연산은 Quote 연산에의 입력과 그 시크리트가 언제 및/또는 누구에게 시현되는 지를 식별하는 조건의 조합(예로서, 그들의 연결(concatenation))에 대해 공개 키 서명을 리턴시킨다. 전술한 Seal 연산 및 Unseal 연산과 마찬가지로, 시크리트의 시현은 다양한 조건에 속박될 수 있다. 일 구현예에서, 그 조건은 호출 프로그램의 식별자(예로서, 다이제스트)이다.
연산이 그 식별된 호출 프로그램의 요청에서 수행되었다라는 단정(assertion)은 서명에 있어서 고유한(inherent) 것이다. Quote 연산은 Verify 연산과 결합하여 작동하고, 이것은 전형적으로 Quote 연산이 그에서(예로서, 원격 서버 장치 상에서, 또는 스마트 카드 상에서 등등) 수행되는 장치와 다른 장치 상에서 실행된다. Verify 연산은 공개 키 서명 확인을 수행하고 호출 프로그램의 식별자(및/또는 시크리트를 시현하기 위한 다른 조건들)를 검색하고 평가한다.
Quote 연산에 대한 의사 코드가 테이블 V에 나타나 있다. 테이블 V의 의사 코드에서, ID()는 전술한 ID() 함수를 의미하고, a 는 Quote 연산에 입력된 데이터를 의미하고, Ks 는 서명 키(signing key)를 의미한다.
테이블 V
Figure 112003013600861-pat00005
그래서, 테이블 V에서 볼 수 있는 바와 같이, Quote 연산은 호출 프로그램의 다이제스트를 얻고, 입력 값 a 를 수신한다. Quote 연산은 서명 키 Ks를 이용하 여 호출 프로그램의 다이제스트와 입력 값 a 의 디지털 서명(sn)을 생성한다. 입력 값 a 는 호출 프로그램에 의해 생성될 수 있고, 또한 대안으로서 다른 컴포넌트 또는 장치로부터(예로서, Verify 연산을 수행할 장치로부터) 수신된 값일 수도 있다. 디지털 서명은 공개 키 암호화를 이용하여 생성된다.
도 7은 Quote 연산을 구현하기 위한 예시적인 프로세스(300)를 나타내는 흐름도이다. 프로세스(300)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 입력 데이터는 호출자로부터 수신된다(동작 302). 호출자의 식별자(및/또는 입력 데이터를 검색하기 위한 하나 이상의 다른 조건)이 얻어지고(동작 304), 입력 데이터와 호출자의 식별자(및/또는 하나 이상의 다른 조건)의 조합에 대한 디지털 서명이 생성된다(동작 306). 생성된 디지털 서명은 다음에 호출자에게 리턴된다(동작 308).
Verify 연산은 공개 키 서명 검증을 수행하고 호출 프로그램의 식별자를 검색하고 평가한다. Verify 연산은, 전형적으로, 그 Verify 연산이 (예로서, 원격 서버 장치 또는 스마트 카드 상에서 등등) 실행되는 장치가 아닌 다른 장치로부터, Quote 연산에 의해 생성되었던 디지털 서명을 수신한다. Verify 연산은 그 수신된 디지털 서명으로부터 Quote 연산을 호출했던 프로그램(예로서, 애플리케이션 프로그램, 운영 체제, 펌웨어 프로그램 등)의 다이제스트를 추출하고, 어떻게 진행할 지를 결정하기 위해서 그 다이제스트를 평가한다.
Verify 연산에 대한 의사 코드가 테이블 VI에 나타나 있다. 테이블 VI의 의 사 코드에서, d 는 Quote 연산을 호출했던 프로그램의 다이제스트를 의미하고, a 는 Quote 연산에 입력된 데이터를 의미하고, Sn 은 Verify 연산에 의해 입력으로서 수신된 디지털 서명을 의미한다.
테이블 VI
Figure 112003013600861-pat00006
그래서, 테이블 VI에서 볼 수 있는 바와 같이, Verify 연산은 디지털 서명을 수신하고, 확인 키 Kv (이것은 서명 키 Ks 를 포함하는 공개 키/사설 키 쌍의 공개 키이다)를 이용하여 그 서명으로부터 다이제스트 d 및 값 a 를 추출한다. 다음에, Verify 연산은 Quote 연산을 호출했던 프로그램의 다이제스트 d 를 평가한다. 다이제스트 d 가 평가되는 방식은 다양하다. 예를 들면, 그 평가는 "승인된" 또는 "신뢰받은" 애플리케이션 프로그램의 리스트와 다이제스트 d 를 비교하는 것을 수반할 수도 있다.
도 8은 Verify 연산을 구현하기 위한 예시적인 프로세스(320)를 나타내는 흐름도이다. 프로세스(320)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 디지털 서명이 수신된다(동작 322). 입력 값을 (Quote 연산을 이용하여) 인용했던 호출자의 식별자(및/또는 입력 데이터를 검색하기 위한 하나 이상의 다른 조건) 및 입력 값 자체가 디지털 서명으로부터 추출된다(동작 324). 호출자의 식별자(및/또는 하나 이상의 다른 추출된 조건)가 다음에, 그 입력 값으로써 어떻게 진행할 것인 지를 결정하기 위하여 평가된다(동작 326).
PKUnseal 연산은 공개 키 해독의 버전이고, 이것은 호출자의 아이덴티티(예로서, 호출 프로그램의 다이제스트), 또는 대안으로서는 하나 이상의 다른 조건에 대해 게이팅된다. PKUnseal 연산에의 입력 c 의 공개 키 해독의 결과는 쌍(d, s)으로서 해석되는데, 여기서, s 는 시크리트이고 d 는 s 가 시현될 수도 있는 구성(예로서, 호출 프로그램의 다이제스트)을 식별한다. PKUnseal 연산의 호출자가 d 가 아니면, PKUnseal 연산은 실패한 것으로 된다. PKUnseal 연산에의 입력 c 는 제2 연산 PKseal 에 의해 생성되고, 그것은 PKUnseal 연산이 (예로서, 원격 서버 장치상에서 또는 스마트 카드 상에서 등등) 실행되는 장치가 아닌 다른 장치상에서 실행될 수 있다. PKseal 연산은 쌍(d, s)의 공개 키 암호화를 수행한다. PKseal 연산 및 PKUnseal 연산은 또한 봉인될 저장을 구현하는 데에 이용될 수 있다.
PKUnseal 연산에 대한 의사 코드가 테이블 VII에 나타나 있다. 테이블 VII의 의사 코드에서, ID()는 전술한 ID() 함수를 의미하고, c 는 PKUnseal 연산에의 입력을 의미하고, [d1, ..., dm ]은 s가 시현될 수 있는 하나 이상의 호출 프로그램의 다이제스트(들)(또는 대안으로서는 하나 이상의 다른 조건들)를 의미하고, s는 보호되는 데이터를 의미하고, Kd는 해독 키(PKUnseal 연산을 구현하는 가드와 연계된 공개 키/사설 키 쌍의 사설 키)를 의미한다.
테이블 VII
Figure 112003013600861-pat00007
그래서, 테이블 VII에서 볼 수 있는 바와 같이, PKUnseal 연산은 공개 키 해독과 해독 키 Kd 를 이용하여 입력 값 a를 해독한다. 해독된 입력 값은 보호되는 데이터 s가 시현되도록 허락된 하나 이상의 호출 프로그램의 다이제스트 [d1, ..., dm ](또는 대안으로서는 보호되는 데이터가 언제 및/또는 누구에게 시현되도록 허락되어 있는 지를 식별하는 하나 이상의 다른 조건들)를 포함한다. PKUnseal 연산은 또한 호출 프로그램의 다이제스트를 생성한다. 만약 호출 프로그램의 다이제스트가 다이제스트 [d1, ..., dm ] 중 하나와 동일하면, 그 보호되는 데이터 s는 호출 프로그램에 리턴된다. 하지만, 만약 호출 프로그램의 다이제스트가 다이제스트 [d1, ..., dm ] 중 하나와 동일하지 않으면, 그 보호되는 데이터 s는 호출 프로그램에 리턴되지 않는다.
도 9는 PKUnseal 연산을 구현하기 위한 예시적인 프로세스(340)를 나타내는 흐름도이다. 프로세스(340)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 호출자가 검색하기를 원하는 암호화된 데이터를 가진 암호문이 검색된다(동작 342). 호출자가 그 데이터를 검색하도록 허락되어 있는 지에 대한 체크가 수행되고(동작 344), 호출자가 그 데이터를 검색하도록 허락되어 있는 지에 기초하여 처리가 진행된다(동작 346). 만약 호출자가 그 데이터를 검색하도록 허락되어 있다면, (공개 키 해독을 이용하여 해독된) 데이터가 호출자에게 리턴된다(동작 348). 만약 호출자가 그 데이터를 검색하도록 허락되어 있지 않다면, 프로세스는 실패한 것으로 되고(동작 350), 데이터는 호출자에게 리턴되지 않는다.
PKSeal 연산은 공개 키 해독의 버전이고, 이것은 호출자의 아이덴티티(예로서, 호출 프로그램의 다이제스트 또는 하나 이상의 다른 조건)에 대해 게이팅된다. PKSeal 연산은 쌍(d, s)의 공개 키 암호화를 수행하는데, 여기서, s 는 시크리트이고 d s 가 시현될 수도 있는 하나 이상의 구성(예로서, 호출 프로그램의 다이제스트)을 식별한다.
PKSeal 연산에 대한 의사 코드가 테이블 VIII에 나타나 있다. 테이블 VIII의 의사 코드에서, c 는 PKSeal 연산에의 출력을 의미하고, [d1, ..., dm ]은 s가 시현될 수 있는 하나 이상의 호출 프로그램의 다이제스트(들)를 의미하는데, 여기서 s는 보호되는 데이터를 의미하고, Kd는 암호화 키를 의미한다.
테이블 VIII
Figure 112003013600861-pat00008
그래서, 테이블 VIII에서 볼 수 있는 바와 같이, PKSeal 연산은 보호되는 데이터 s 및 그 보호되는 데이터 s 가 시현될 수 있는 하나 이상의 호출 프로그램의 다이제스트 [d1, ..., dm ]를 입력으로서 수신한다. 다음에, 그 쌍 [d1, ..., dm ], s 는 암호화 키 Ke에 기초하여 공개 키 암호작성법을 이용하여 암호화된다. 암호화 키 Ke는 암호문을 해독할 수 있도록 의도된 가드의 공개 키이다. 공개 키 암호화의 결과로 얻어진 암호문은 호출 프로그램으로 리턴된다.
도 10은 PKSseal 연산을 구현하기 위한 예시적인 프로세스(360)를 나타내는 흐름도이다. 프로세스(360)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 봉인될 시크리트가 호출자로부터 수신된다(동작 362). 시크리트는 그 시크리트가 특정의 목표 프로그램(들)에 의해서만 검색될 수 있도록 또는 하나 이상의 조건이 만족되는 경우에만 검색될 수 있도록, 공개 키 암호화를 이용하여 암호화된다. 암호화된 시크리트를 포함하는 암호문은 또한 호출자에 리턴된다(동작 366). 그 호출자의 다이제스트 및/또는 그 목표 프로그램(들)의 다이제스트(들)와 같은, 추가적인 정보가 또한 호출자에게 (그 암호문의 부분으로서 또는 그 암호문과는 별도로) 리턴될 수도 있다.
Quote 연산 및 PKUseal 연산은 공개 키 인증 프로토콜과 결합되어 이용되도록 의도된다. 대부분의 공개 키 인증 프로토콜은 공개 키 해독, 공개 키 암호화, 서명 및 서명 검증에 대한 어떤 호출을 PKUnseal, PKSeal, Quote, Verify에 대한 호출로 각각 대체함으로써 간단하게 적응될 수 있다.
어떤 상황에서는, (예로서, 암호키를 생성하기 위한 기초로서) 난수를 얻을 수 있는 것이 중요하다. 난수는 다양한 다른 방식으로 얻을 수 있다. 일 구현예에서는, 난수의 소스는 컴퓨팅 장치의 하드웨어 내에 구현된 암호적으로 강력한 난수 발생기이다.
전술한 Seal 연산의 대체예는, Seal 연산에 난수 발생 연산을 결합한 GenSeal 연산이다. GenSeal 연산은 시크리트를 검색할 수 있어야 하는 목표 프로그램(들)의 다이제스트 [t1, ..., tm ] (및/또는 시크리트가 검색되기 위해서 만족되어야 하는 다른 조건들)를 입력으로서 수신한다. GenSeal 연산은 난수를 발생시키고 신규로 발생된 난수를 봉인하여 목표 다이제스트(들) [t1, ..., tm ] (및/또는 만족된 다른 조건들) 중 하나를 가진 호출 프로그램에 의해서만 검색될 수 있도록 한다.
GenSeal 연산에 대한 의사 코드가 테이블 IX에 나타나 있다. 테이블 IX의 의사 코드에서, ID()는 전술한 ID() 함수를 의미하고, c 는 GenSeal 연산의 출력을 의미하고, s는 신규로 발생된 난수를 의미하고, [t1, ..., tm ]은 값 s를 검색하도록 허락되어야 하는 하나 이상의 목표 프로그램(들)(선택사항으로서 그 중의 하나는 GenSeal 연산을 호출하는 프로그램일 수도 있음) 또는 대안으로서 하나 이상의 다른 조건을 의미하고, GenRandom()은 난수를 발생시키는 함수를 의미한다.
테이블 IX
Figure 112003013600861-pat00009
도 11은 GenSeal 연산을 구현하기 위한 예시적인 프로세스(380)를 나타내는 흐름도이다. 프로세스(380)는 도 1의 가드(104)에 의해 수행되고, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 구현될 수도 있다.
먼저, 시크리트를 검색할 수 있어야 하는 목표 프로그램(들)을 식별하는 호출자로부터 입력이 수신되고(동작 382), 대안으로서는 그 시크리트가 검색되기 위해 만족되어야 하는 하나 이상의 다른 조건이 수신된다. 다음, 시크리트가 생성되고(동작 384), 시크리트는 그 시크리트가 그 식별된 목표 프로그램(들)에 의해서만 검색될 수 있도록 또는 대안으로서 그 시크리트가 하나 이상의 조건이 만족되는 경우에만 검색될 수 있도록 암호화된다(동작 386). 암호화된 시크리트를 포함하는 암호문이 다음에, 호출자에게 리턴된다(동작 388). 그 호출자의 다이제스트 및/또는 그 목표 프로그램(들)의 다이제스트(들)와 같은, 추가적인 정보가 또한 호출자에게 (그 암호문의 부분으로서 또는 그 암호문과는 별도로) 리턴될 수도 있다.
노출 가드에 의해 제공된 서비스는 범용의 봉인 서비스를 위해 이용될 수 있다. 예를 들면, 도 1 및 도 2를 다시 참조하면, 층 n-1 은 초기화 시에(예로서, 컴퓨팅 장치를 리세트하거나 부팅한 후에 또는 프로그램의 실행을 개시할 때) 층 n의 아이덴티티에 기초하여 층 n에 단일의 키를 시현한다. 층 n은 이러한 키를 캐시하고, 추가적인 시크리트를 암호화하기 위해 이를 이용한다. 다음에 그 플랫폼이 동일한 구성으로 부팅되면, 그 노출 가드는 동일한 루트 키를 (예로서, UnSeal 또는 PKUnseal을 통하여) 제공하고, 이전에 암호화된 모든 시크리트가 층 n에 의해 검색될 수 있다.
어떤 상황에서는, 더 낮은 층은 그 다음 층이 개시되는 때에(예로서, 컴퓨팅 장치를 리세트하거나 부팅한 후에 또는 프로그램의 실행을 개시할 때) 그 다음 층에게 하나 이상의 시크리트를 노출시킨다. 이 게이팅된 노출에 후속하여, 그 더 낮은 층은 (다음 부팅시 또는 리세트시까지) 더이상 이용되지 않는다. 이러한 이용-모델은 또한 "노출 가드 모델"이라 부른다. 노출 가드 모델을 채용하면, 그 더 낮은 층에의 접근이 감소된다.
여기에서 논의된 게이팅 함수는 시간 격리 및 공간 격리를 이용하여 구현된 서비스 가드 및 노출 가드와 함께 이용될 수 있다. 인증된 연산에 대한 4개의 서비스 모델의 구현예는 다음과 같다: (1) 서비스 가드 - 공간 격리, (2) 노출 가드 - 공간 격리, (3) 노출 가드 - 시간 격리, (4) 서비스 가드 - 시간 격리. 이러한 서비스 모델의 논의에 있어서, 하위-레벨 가드는 고려되고 있는 층에서의 가드에 하나 이상의 키를 노출시킨다고 가정한다. 이들 키가 얻어지는 방식은 그 층 아래에 있는 가드 및 격리 모델에 의존한다. 동일한 컴퓨팅 장치상의 다른 층들은 이들 서비스 모델 중에서 서로 다른 것을 이용할 수 있다.
(1) 서비스 가드 - 공간 격리: 가드는 요청 프로그램이 초기화되는 때에 요청 프로그램의 아이덴티티를 측정하고 저장한다. 가드는 프로세서 서비스를 이용하여 보호 시스템 및 인증된 연산의 프리미티브(primitive) 연산을 표출시키는(expose) 시스템-호출 인터페이스를 구현한다.
(2) 노출 가드 - 공간 격리: 가드는 암호 블로브(blob)의 형태로 초기화에 대한 서비스 요청을 얻는다. 이들 블로브는 메모리에 저장되어 있을 수도 있고, 대안으로서는 외부 저장 장치로부터 얻어질 수도 있다. 가드는 그것이 초기화하는 프로그램의 아이덴티티를 측정하고, 전술한 게이팅 함수에 따라 프로그램들에게 키를 노출시킨다. 다음 층에 대한 제어를 포기하기 전에, 가드는 그 자체 및 그의 시크리트 자원에 대한 모드-보호를 확립한다.
(3) 노출 가드 - 시간 격리: 가드는 암호 블로브(비트들의 그룹)의 형태로 개시에 대한 서비스 요청을 얻는다. 이들 블로브는 메모리에 저장되어 있을 수도 있고, 대안으로서는 외부 저장 장치로부터 얻어질 수도 있다. 가드는 그것이 초기화하는 프로그램의 아이덴티티를 측정하고, 전술한 게이팅 함수에 따라 프로그램들에게 키를 노출시킨다. 다음 층에 대한 제어를 넘겨주기 전에, 가드는 게이팅 함수를 구현하기 위해 이용되었던 키들을 삭제한다(또는 그렇지 않으면 접근불가로 만든다).
(4) 서비스 가드 - 시간 격리: 서비스 가드 - 시간 격리 모델에 있어서, 컴퓨팅 장치는 보안 리세트를 통해 프로그램 상태를 안전하게 유지한다. 이 모델은 모델 (1) (서비스 가드 - 공간 격리)과 유사하지만, 다음 층에 제어를 넘겨 주기 전에, 서비스 가드는 그 시크리트를 (다음 부팅시까지 그것을 '비-기능(non-functional)'이 되게 함) 삭제한다. 다음 층은 가드로부터 서비스를 요청할 필요가 있을 때까지, 이제 통상적으로 실행을 한다. 이 시점에서, 다음 층은 메모리내의 어떤 곳에 요청의 파리미터들을 저장하며, 그곳에서 리세트를 견뎌내고(survive) 리세트를 수행한다. 장치가 재부팅되는 때에, 서비스 가드는 시크리트를 얻고, 요청을 확인하고(see), (그 키를 이용하여) 이를 실행하고, 그 키 및 임의의 관련된 정보를 폐기하고, 계산의 결과 및 제어를 다음 층(서비스를 원래 요청했었던 층)에게 넘겨준다.
어떤 실시예에서는, 컴퓨팅 장치가 공간 격리를 지원하면, 보안 커넬이 프리미티브 (연산들) Seal, Unseal, (난수를 얻기 위한) GetRandom, 및 PKUnseal (또는 Quote)을 표출시켜야 한다. 보안 커넬은 노출 가드 또는 서비스 가드를 구현할 수 있다. 한편, 플랫폼이 시간 격리를 지원하면, 보안 커넬은 노출 가드를 잭ㅎㅇ해야하고, 프리미티브 (연산들) Unseal, GenSeal, 및 PKUnseal (또는 Quote)을 구현해야 한다.
Quote 및 PKUnseal 기능성(functionality)은 Seal 및 Unseal 또는 Unseal 및 GetSeal 프리미티브들 상에 구축될 수 있다는 것이 주목되어야 한다. 예를 들면, 제조자는 Quote 또는 PKUnseal을 구현하고 l1 에 구현된 GenSeal 및 Unseal에 대한 고위-레벨 소프트웨어(예로서, 운영 체제)를 위한 호스트로서 역할을 하는 l2 프로그램을 구축할 수 있다. 제조자는 서비스 층에서 요구하는 키들을 생성하고 봉인하여(Seal), 이들을 장치 또는 CPU에 실을(ship) 수 있다(또는 이들은 온라인에서 가용하게 만듦).
플랫폼이 인증된 연산을 지원하도록 하는 하드웨어 구현체의 일 부류(family)에 대한 예시적인 설명은 다음과 같다. 시스템내의 고위의 층들에 대하여, 최하위 층(도 2의 l1)의 특성은 (a) 시크리트 키 자원들, (b) 이들 키에 접근을 가지는 특권 코드, 및 (c) 그 층의 제어된 개시이다.
인증된 연산은 프로그램과 시크리트 키들 사이에 강한 바인딩(binding)을 제공한다. 상위 층들에서, 하위 층들내의 가드는 이러한 바인딩을 보장한다. 최하위 층에서, 플랫폼 시크리트에의 접근을 게이팅할 수 있는 하지(underlying) 소프트웨어 가드는 전혀 없다. 그래서, 11 프로그램에 대한 l1 키들의 연계를 지원하는 데에는 또 다른 메카니즘이 이용된다. 이러한 바인딩을 성취하는 한가지 방법은, l1 소프트웨어를 후속하는 제조를 변경불가능하게 하는 플랫폼 마이크로코드 또는 펌웨어로 만들고, 그 l1 소프트웨어에게 l1 키에 대한 비제한적인 접근을 허락하는 것이다. 이러한 플랫폼 마이크로코드 또는 펌웨어는 그래서 "보안 커넬"이라 부르며, l1 키는 "플랫폼 키"라 부른다. 플랫폼은 소정의 보안 커넬에 제어를 단지 넘겨주도록 설계된다. 하드웨어 거동은 미리 정의된 보안 커넬에 플랫폼 키들을 노출시키는 단순한 자원 가드로서 설명될 수도 있다.
플랫폼 키들 및 보안 커넬 펌웨어는 프로세서의 부분이 될 수도 있고, 대안으로서는 컴퓨팅 장치내의 하나 이상의 다른 컴포넌트(예로서, 암호 연산을 수행할 수 있는 보안 프로세서 또는 코프로세서)에서 구현될 수 있다. 플랫폼 키들 및 보안 커넬은 단일의 컴포넌트에서 구현될 수도 있고, 또는 대안으로서는 컴퓨팅 장치내의 다수의 컴포넌트에서 구현될 수도 있다.
인증된 연산으로써, 프로그램들은 제어된 초기 상태에서 개시된다. 상위 레벨에서는, 하위 레벨에서 실행하는 소프트웨어가 정확한 엔트리 포인트에서 실행을 개시하기 위해 위탁될(entrust) 수 있다. 하지만, l1 에서, 하드웨어는 이러한 함수를 수행한다. 전형적으로, 파워업 또는 후속하는 리세트시에, 현재의 프로세서는 어떤 결정적 시퀀스를 따라 실행을 개시한다. 예를 들면, 가장 단순한 경우에, 프로세서는 아키텍처적으로 정의된 메모리 위치로부터 코드를 인출하고(fetch) 실행하는 것을 개시한다. l1 에 대하여, 프로그램은 그 보안 커넬이 개시(startup)시에 실행하는 코드인 것을 보장함으로써 제어된 초기 상태에서 하드웨어에 의해 개시될 수 있다.
또한, 어떤 다른 플랫폼 상태도 보안 커넬의 실행을 파괴시킬(subvert) 수는 없다. 리세트 및 파워업은 확고하고(robust) 잘 디버깅된 상태-소거(clear)를 프로세서에게 제공한다. 이러한 예에서 사용되는 바와 같이, 보안 커넬을 개시하거나 인보크하는데 이용되는 그 플랫폼 상태 변경을 "보안 리세트"라 부른다.
더나아가, 장치 제조자는 Seal 및 Unseal 의 l1 구현에 의해 이용된 플랫폼 키의 생성 및 설치에 대해 준비해야 한다. 만약 그 장치가 PKI(공개 키 인프라스트럭처)의 부분으로서 인식되면, 제조자는 또한 그 플랫폼의 공개 키를 증명해야한다(certify). 이것은 l1에 의해 직접 이용되는 플랫폼 키이거나, 대안으로서는 상위 층에 의해 이용되는 키일 수도 있다.
키 생성과 증명은 제조자의 CPU의 책임일 수도 있고, 대안으로서는 CPU를 장치에 조립하는 OEM과 같은 어떤 다른 주체일 수도 있다. 대안으로서, 이러한 책임은 다수의 이러한 주체들에 의해 분담될 수도 있다.
보안 커넬이 실행되면, 이는 상위 층들에서 실행된 코드로부터 그 자체를 보호하기 위해 전술한 격리 메커니즘을 이용할 수 있다. 공간적으로의 격리는 전형적으로 특권 모드 지원을 수반하고, 시간적으로의 격리는 전형적으로 더 상위의 층들로부터 숨겨진 시크리트를 수반한다.
대부분의 현재의 프로세서에서는 공간 격리를 지원하는 추가적인 플랫폼 지원이 필요하지 않다 - (플랫폼 키에 대한 접근을 허락하는 하드웨어 자원이 상위 층들로부터 보호될 수 있다면) 기존의 특권 모드 또는 레벨로도 충분하다.
시간 격리를 지원하기 위해, 보안 커넬로 하여금 상위 층들에 제어를 넘겨주기 전에 플랫폼 키를 감추도록(conceal)하기 위해 하드웨어의 도움이 이용된다. 시간 격리 모델에서 플랫폼 키 보안을 제공하는 하나의 방법은 "리세트 래치"라 부르는 상태적(stateful) 가드 회로를 채용하는 것이다. 리세트 래치는 후속하는 리세트 또는 파워업을 개방하는 특성을 가지는 하드웨어 회로이지만, 래치를 어느 때라도 프로그램적으로 폐쇄할(close) 수 있는 어떤 소프트웨어일 수도 있다. 한번 폐쇄되면, 래치는 다음의 리세트 또는 파워업시까지는 폐쇄된 상태를 유지한다. 시간 격리된 보안 커넬을 구현하는 플랫폼은 리세트 래치의 상태에 대한 플랫폼 키 접근을 게이팅하여야 하고, 보안 커넬은 상위 층들에게 제어를 넘겨주기 전에 래치를 폐쇄하여야 한다. 상술한 바와 같이, 보안 커넬은 또한 제어를 넘겨주기 전에 메모리 및 레지스터를 소거하는 등의 추가적인 동작을 수행하여야 하지만, 이들 동작은 상위 레벨에서 이용되는 것과 동일하다.
플랫폼이 공간 격리를 채용하면, 보안 커넬은 특권 모드를 이용하여, 그를 호스트하는 프로그램(예로서, 운영 체제)으로부터 그 자체 및 그 플랫폼 키를 보호한다. 더나아가, 보안 커넬은 인증 동작의 인보케이션에 대한 시스템 호출 인터페이스를 확립한다.
플랫폼이 공간 격리를 채용하면, 그 플랫폼은 또한 서비스 루틴에 파라미터를 넘겨주기 위해서 보안 리세트를 견디는 저장부(storage)를 포함하여야 한다. 서비스를 인보크하기 위해, 운영 체제는 보안 커넬에 알려진 메모리 위치에 명령 및 파리미터 블록을 준비하여 두고, 보안 리세트를 수행한다. 운영 체제(OS)가 (단순한 재-개시에 대립하는 것으로서) 서비스 호출에 후속하는 실행을 계속하기를 원하면, 그 OS와 보안 커넬은 이것이 신뢰성있고 안전하게 행해지는 것을 보장하기 위해서 추가적(extra) 조치(measure)를 취해야 한다.
여기선 논의된 그 인증된 동작은, 바이러스로부터 퍼스널 데이터를 보호하는 것, 네트워크 공격으로부터 기밀 서버 데이터를 보호하는 것, 복사 방지, 신뢰성있는 분산 컴퓨팅 등과 같은 다양한 설정으로 보안에 이용될 수 있다. 그 인증된 동작은 동일한 컴퓨터 상에서 특정의 신뢰 관계없이도 실행될 수 있는 서로 다른 프로그램으로 하여금 다른 소프트웨어의 동작에 무관하게 그들의 암호 자원을 유지하도록 허락한다.
이하에서의 어떤 논의는 SSP(Secure Service Processor)을 참조하여 이루어진다. 일 실시예에서, SSP는 컴퓨팅 장치에 기초적 암호 서비스를 제공하는 (컴퓨팅 장치에 이용하기 위한) 프로세서이다(예로서, SSP는 여기에서 설명된 게이팅 함수를 지원한다(예로서, 도 2의 층 l1)). SSP는 암호키를 이용할 수 있고, 전형적으로 그 SSP에 고유한 (또는 고유한 것으로 기대되는) 하나 이상의 암호키를 가진다. SSP는 그 장치의 CPU(들)의 부분일 수도 있고, 또한 대안으로서는 하나 이상의 다른 프로세서일 수도 있다. 예를 들면, SSP는 컴퓨팅 장치의 별도의 칩 또 는 집적 회로(IC)일 수도 있다.
다른 실시예에서, SSP는 이전의 실시예에서와 같이 호출자에게 동일한 기능성(functionality)을 표출시키는 적절하게 격리된 소프트웨어 프로그램이다. 이 SSP 구현체는 암호키에 (직접적으로 또는 간접적으로) 접근한다. 다수의 구현상의 선택사항이 이러한 접근을 제공하기 위해 존재한다. 예를 들면, SSP는 하위 층들에서의 가드들을 서비스 호출하거나 노출시킬 수도 있다. 또는, SSP는 요구된 암호키(들)를 포함하고 있는 영구적 메모리(예로서, 하드디스크, 플래시 메모리, ROM 등)의 어떤 일부분에 배타적인 접근을 가질 수도 있다.
요약하면, SSP는 상위 층에서의 프린시펄들에 노출시키는 기능성에 의해 정의된다. SSP는 (전술한 바와 같이) 암호키들에의 (직접적인 또는 간접적인) 접근을 가진 가드이다. SSP는 암호키를 호출자에게 제공하기 위해 그들의 키를 이용한다. 다음의 섹션은 SSP가 노출시키는 예시적인 기능성을 설명할 것이다.
예시적 연산들
이하의 논의는 봉인된 저장 연산 및 원격 인증 연산의 예시적인 구현에 관한 것이다. 이 섹션은 Seal, UnSeal, Quote 및 PKUnseal 연산의 예시적 구현을 나타낸다.
다음은 본 섹션에서 이용되는 정의들이다.
명칭 타입 설명
DIGEST(다이제스트) BYTE[20] 160 비트 값. 통상은 SHA-1 해시 연산의 출력임.
SECRET(시크리트) BYTE[32] 256 비트 값. 통상은 봉인될 또는 공개 키봉인될(pksealed) 시크리트임.
ordinal(서수) INTEGER(정수) 각각의 입력 및 출력 구조체의 서수 성분은 그것이 어느 연산에 속하는 것인 지 및 그것이 입력 또는 출력 구조체인 지를 식별한다.
KM 256 비트 키 HMAC 연산에 대한 키
KS 256 비트 키 Seal 및 UnSeal에 대한 AES 키
KU 2048 비트 * 3 PKUnseal에 대한 RSA 키 쌍
KQ 2048 비트 * 3 Quote에 대한 RSA 키 쌍
R 128 비트 난수
또한, 접근 정책(policy)이 본 섹션에서 언급되고, 바운드 키 연산(Bound Key Operation)은 이하의 섹션에서 언급된다. 접근 정책은 특정의 연산이 기능적인 경우(즉, 이들 연산이 작동하는 경우)를 기술한다. 컴퓨팅 장치의 유저는 어떤 함수를 선택적으로 스위치 오프할 수 있다. 예를 들면, 컴퓨팅 장치(예로서, Seal 연산을 구현하는 SSP)는 "FeatureEnable"이라 불리는 레지스터를 포함한다. 이 레지스터내의 비트 중의 하나는 "MainEnable"이라 불린다. 만약, 유저가 MainEnable 을 거짓(false)으로 설정하면, 이들 섹션내의 함수들은 어떤 것도 더이상 작동하지 않게 된다. 각각의 함수로써 포함되어 있는 접근 정책의 기술(description)은 어떤 FeatureEnable 설정하에서 그 함수가 작동하게 될 지를 설명할 것이다.
Seal
Figure 112008027410613-pat00036
코멘트
Seal 연산은 다음의 평가가 참이면, 대응하는 Unseal 연산에 의해서 단지 해독될 수 있는 암호화된 블로브(비트들의 그룹)을 형성한다.
ㆍ 인코딩이 정확한가?
ㆍ MAC가 정확한가?
ㆍ 현재 실행되는 SK/SL(Security Kernel 또는 Secure Loader)가 Seal 연산 동안에 Target(목표)으로서 지명된 것인가?
Seal 은 내부적 무작위성을 부가하여, 동일한 입력에 대한 Seal 연산의 출력이 서로 다른 결과를 생성하게 한다. 이것은, Seal이 하드웨어 장치 식별자로서 이용될 수 없는다는 것을 보장한다. Seal은 또한, 그 Seal이 봉인해제자(unsealer)에게 무결성 정보를 제공하기 위해 수행되는 경우에, Seal 연산을 호출하는 프로그램의 식별자(예로서, SSP의 PCR 레지스터에 저장된 호출 프로그램의 다이제스트, 여기서는 "PCR 값"이라 부른다)를 포함한다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UseSymmKey == All |
FeatureEnable.UseSymmKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UseSymmKey)
동작
Seal 연산은 다음과 같은 동작을 구현한다.
1. 128 비트 난수 R을 생성한다.
2. D0 를 PCR[0]의 현재 값으로 하고, D1 = PCR[1] 로 한다.
3. DEGEST M = HMAC[KM](R∥S∥target∥D0∥D1).
4. C = AES[KS](R∥S∥Target∥D0∥D1∥M).
5. SealedBlob을 C로 설정하면서 SSP_SUCCESS를 리턴시킨다.
Unseal
Figure 112008027410613-pat00037
코멘트
Unseal 연산은 Seal 연산에 의해 생성된 블로브를 내부적으로 해독하고, 다음의 조건을 체크한다.
ㆍ 인코딩이 정확한가?
ㆍ PCR의 현재 값이 Seal 연산 동안에 Target으로서 지명된 것인가?
만약 모든 체크가 성공하면, 그 시크리트 및 그 봉인자(sealer)의 PCR이 리턴되고, 그렇지 않으면, UNSEAL_ERROR가 리턴된다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UseSymmKey == All |
FeatureEnable.UseSymmKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UseSymmKey)
동작
Unseal 연산은 다음과 같은 동작을 구현한다.
1. M = AES-1[KS](SealedBlob).
2. M을 (BITS[128]R∥SECRET S1∥DEGEST Target0∥DEGEST Target1 ∥DEGEST Sealer1∥DEGEST N)으로 해석한다.
3. DEGEST D = HMAC[KM](R∥S1∥target0∥target1∥Sealer0∥Sealer1).
4. 만약 (Target0 != PCT[0]∥Target1 != PCT[1]) 이면, S, Source를 0으로 설정하면서 SSP_UNSEAL_ERROR를 리턴시킨다.
5. 만약 D != N 이면, S, Source를 0으로 설정하면서 SSP_UNSEAL_ERROR를 리턴시킨다.
6. 그렇지 않으면, S를 S1으로 설정하고, Source를 {Sealer0, Sealer1}로 설정하면서 SSP_SUCCESS를 리턴시킨다.
Quote
Figure 112008027410613-pat00038
코멘트
Quote 연산은 외부적으로 공급된 D-EXT 및 내부적인 PCR 값의 연결에 대하여 서명할 것을 SSP에게 지시한다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
Quote 연산은 다음과 같은 동작을 구현한다.
1. SSP는 다음과 같은 DER(Distinguished Encoding Rules) 인코딩하에서, QuoteMessage, D-EXT 및 PCR 레지스터의 컨텐츠에 대한 식별자의 연결로 구성되는 메시지를 형성한다.
SEQUENCE{
message-type PKMessage Type,
d-ext Digest.
pcr DigestPair
}
2. 다음 SSP는 PKCS#1 V2.1에서 규정되어 있는 RSASSA-PSS-SIGN의 디폴트 구현체에 따라 M에 대한 서명된 메시지를 생성하기 위하여, KQ, PRIV 를 이용한다. 이 함수가 에러를 리턴시키면, SigBlob을 0으로 설정하면서 SSP_CRYPTO_ERROR를 리턴시킨다.
3. SSP는 SSP_SUCCESS, 및 signatureAlgorithm = SigBlob내의 rSASSA-PSS-Default-Identifier 로 하면서 막 계산된 서명(signature) 값을 리턴시킨다.
PKUnseal
Figure 112008027410613-pat00039
코멘트
PKUnseal 연산은 길이 416 비트를 가지고 특정의 포맷을 가진 암호화된 블로브를 취한다. 이 블로브는 해독되고, 만약 그 해독 및 디코딩이 성공하면, 416 비트 메시지는 그 해독된 값을 수신하도록 허락된 PCR 값과 시크리트 값의 연결로서 해석된다.
만약 현재의 PCR 값이 그 암호화된 블로브에 특정되어 있는 것과 동일하면, 그 시크리트는 시현되고, 그렇지 않으면, 에러가 리턴된다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
PKUnseal 연산은 다음과 같은 동작을 구현한다.
1. SSP는 pk-sealed-blob(공개 키봉인된 블로브)내의 AlgorithmIdentifier가 sspV1BoundKey인 지를 테스트한다.
2. SSP는 PKCS#1 V2.1에서 규정되어 있는 대로 RSAES-OAEP-DECRYPT의 디폴트 구현체에 따라 SealedBlob를 내부적으로 해독하여, 평문 메시지 M을 얻는다.
3. 만약 디코딩 연산의 출력이 "디코딩 에러"이면, Secret을 0으로 설정하면서 SSP_BAD_DATA_ERROR를 리턴시킨다.
4. 그렇지 않으면, 복원된 메시지 M이 DER 인코딩 하에서 다음과 같은 형태를 가져야 한다.
SEQUENCE{
message-type PKMessage Type,
secret Secret,
target Digest }
더나아가, Secret 은 256 비트(= 32 옥텟)로 구성되고, target 은 160 비트 (= 20 옥텟)로 구성되어야 한다. 메시지 타입은 sspV1PKSealedMessage 이어야 한다. 만약 이들 조건들이 만족되지 않으면, Secret을 0으로 설정하면서 SSP_BAD_DATA_ERROR를 리턴시키고, 그렇지 않으면:
1. 만약 target != PCR 이면, Secret을 0으로 설정하면서 SSP_BAD_DATA_ERROR를 리턴시킨다.
2. 만약 target == PCR 이면, Secret를 secret로 설정하면서 SSP_BAD_DATA_ERROR를 리턴시킨다.
바운드 키 연산들(Bound Key Operations)
또한, 바운드 키 함수 또는 연산의 세트는 (예로서, SSP에 의해) 암호키가 국부적으로 생성되고 증명되도록 하며, 암호키가 신뢰할 수 있는 원격 주체들 사이에서 통신될(예로서, SSP에 통신될) 수 있도록 한다.
바운드 키 기능성은 다음과 같은 특징을 가진다:
1. 어떤 시스템 층에서의 서비스 가드(예로서, SSP)는 바운드 키에 직접적으로 접근한다. 각각의 바운드 키는, 어느 가드(들)가 그 바운드 키에 접근해도 좋은 지를 결정하는 연계된 조건(들)을 가진다. 이 조건(들)은 암시적으로 표현된다. 즉, 바운드 키는, 단하나의 가드 또는 어떤 가드의 세트로 하여금 이를 해독하도록 암호화되어 있다.
2. 바운드 키에의 접근을 가진 서비스 가드는 상위 층에서의 프린시펄에 그 바운드 키의 이용(예로서, 서명, MAC, 암호화, 해독 등)을 요구하는 함수들을 표출시킨다. 각각의 바운드 키는 연계된 이용 조건(들)을 가질 수도 있고, 이들 경우에 있어서 그 가드는 그 연계된 조건(들)을 만족시키는 요청만을 서비스한다.
3. 바운드 키들은 암호적으로 보호된 데이터 구조체들(여기서, "바운드 키 블로브들"이라 부른다)내에 포함되어 있다. 바운드 키 블로브들은 자체 보호할 수 있고, 신뢰를 얻은 환경 외부에 저장될 수도 있다.
바운드 키는 다음과 같은 이점을 가진다:
ㆍ 각각의 프린시펄은 그 자신의 바운드 키를 가지도록 허락될 수 있다. 더나아가, 각각의 프린시펄은 임의의 다수의 바운드 키를 가지도록 허락될 수 있다. 이것은 더욱 미세하게 그레인화된(grained) 정책 설정을 참작하게 하고, 어떤 애플리케이션에서 프라이버시를 향상시킨다. 그래서, 가드들이, 모든 프린시펄로부터의 요청을 서비스하기 위해 이용되는 단하나의 또는 수개의 키를 가지는 것으로 제한될 필요가 없다.
ㆍ 바운드 키는 인증된 서비스 가드(들)의 외부에 노출되지 않는다. 그래서, (예로서, 프로그래밍 에러에 기인하는) 프린시펄의 손상(compromise)는 어떤 바운드 키의 손상도 일으키지 않게 된다. 일 실시예에서, 서비스 가드(SSP)는 하드웨어로 구현된다. 이 경우에, 바운드 키는 유해한 또는 부정확한 소프트웨어에 기인하여 손상될 수 없다.
바운드 키 함수들은 암호키에 대한 보호를 제공한다. 바운드 키들은 원격 주체들에 의해 생성될 수 있고 또한 이들은 GenBoundKey 명령을 통하여 국부적으로 생성될 수도 있다.
국부적으로 생성된 바운드 키는, 공개 키의 타입, 생성된 키의 타입, 생성 도중의 머신의 상태 및 그 키가 바운드되는 (선택사항으로서의) 조건(예로서, 다이제스트)의 증거를 원격 주체들에게 제공하는 데에 이용될 수 있는 "quote(인용)" 인증서를 생략할 수도 있다.
바운드 키는 다음과 같은 하나 이상의 구성요소를 포함한다.
ㆍ 키 이용(예로서, BoundSign, BoundQuote, BoundPkUnSeal, BoundPkDecrypt, BoundMAC, BoundEncrypt, 또는 BoundDecrypt). 이들 구성요소는 선택사항이다. 만약 이 구성요소가 포함되면, 이는 그 바운드 키를 그 식별된 함수 타입과만 함께 이용되도록 제한한다.
ㆍ 바운드 키가 어떤 조건하에서 이용될 수 있는 지를 특정하는 (전술한 바와 같은) 조건 구성요소(또한 "바운드 키 이용 조건(들)"이라 부른다). 예를 들면, 그 조건(들)은 프로그램의 하나 이상의 다이제스트(들)의 형태로 표현될 수도 있다. 이 경우에, 바운드 키는 그 다이제스트가 특정되어 있는 프로그램에 의해서 또는 그를 대신하여 단지 이용되어야 한다. 조건의 다른 예는, 전술한 바와 같은 시간 제약조건, 논리식 및 실행가능한 프로그램을 포함한다. 이러한 구성요소는 선택사항이다. 만약 그 구성요소가 생략되면, 어떤 디폴트의 조건이 적용된다. 예를 들면, 디폴트 조건이 그 바운드 키에의 접근을 제한하지 않을 수도 있다(비어있는 조건).
ㆍ 암호키(바운드 키) 또는 그 키를 계산하도록 허락된 어떤 데이터.
ㆍ 바운드 키 이용 조건이 변경될 수 있게 하는 (전술한) 하나 이상의 조건. 이러한 변경은 또한 "바운드 키 이전(migration)"이라 부르며, 그 조건(들)은 이전 조건(들)이다. 이러한 구성요소는 선택사항이다. 만약 그 구성요소가 생략되면, 어떤 디폴트의 조건이 적용된다. 예를 들면, 디폴트 조건이 "항상 거짓"으로 되어, 다이제스트(만약 존재한다면)가 변경될 수 없도록 할 수도 있다.
ㆍ바운드 키에 직접적으로 접근할 수 있는 서비스 가드의 세트가 변경될 수 있도록 하는 하나 이상의 조건. 이러한 변경은 또한 "바운드 키 내보내기(exportation)"로 부르며, 그 조건(들)은 내보내기 조건(들)이다. 이러한 구성요소는 선택사항이다.
바운드 키의 암호적 보호
바운드 키는 전술한 봉인된 저장 및 입증(attestation) 함수(Seal, UnSeal, PKUnseal)에서와 동일한 암호적 요구사항을 가진다. 특히, 국부적으로 생성된 바운드 키는 전술한 Store 함수 및 Retrieve 함수의 암호적 구현들 중 임의의 것에 의해 보호될 수도 있다. 각각의 경우에, 바운드 키의 이용을 지배하는 다른 조건들이 손상되어 있지 않았다는 것을 보장하기 위해서, 바운드 키 자체의 기밀성(confidentiality)이 보호되고, 전체 데이터 구조체의 무결성이 보호된다. 전술한 바와 같이, 이것은 MAC들 또는 디지털 서명들을 가진 공개 키 암호화 알고리즘 또는 대칭 암호의 다양한 조합에 의해 성취될 수 있다. 일 실시예에서, 바운드 키 데이터 구조체는 암호화된 공개 키이다.
함수
일부 실시예에서, 바운드 키는 다음과 같은 함수들 중 하나 이상에서 이용될 수 있다:
ㆍBoundSign
ㆍBoundQuote
ㆍBoundPkDecrypt
ㆍBoundPkUnseal
ㆍBoundMAC
ㆍBoundEncrypt
ㆍBoundDecrypt
ㆍGenBoundKey
ㆍBoundKeyMigrate
ㆍBoundKeyExport
이들 함수 각각에서, 바운드 키 블로브(그 데이터 구조체내의 비트들의 그룹) 및 그 바운드 키 블로브내에 포함된 키에 의해 연산되는 데이터는 바운드 키 함수에 파라미터로서 제공된다. 만약 키 이용 구성요소가 바운드 키 블로브에 포함되어 있으면, SSP는 그 바운드 키가 옳은 목적으로 이용된다는 것을 보장한다. (예를 들면, "BoundQuoteKey" 타입을 가지고 생성된 키는 BoundQuote 연산에서만 이용될 수 있다).
어떤 구현예에서는, 바운드 키는 공개 키/사설 키 쌍의 사설 키이다. 이러한 구현예에서, 바운드 키 블로브는 사설 키를 포함할 수 있고, 대안으로서는 그 키가 계산되도록 허락하는 일부 데이터를 포함할 수도 있다. 예를 들면, 사설 키 프래그먼트는 그 바운드 키 블로브내에 포함될 수도 있고, 이 프래그먼트는 대응하는 공개 키와 결합하여 공개 키/사설 키 쌍의 사설 키를 재구성하기 위해 이용될 수 있다.
BoundSign 연산은 바운드 키를 이용하여 서명될 데이터 입력을 수신하고, 또한 바운드 키 블로브를 수신한다. SSP는 그 바운드 키 블로브로부터 사설 서명 키를 복원하고, 그 다음에 그 복원된 서명 키를 이용하여 데이터 입력에 대해 디지털적으로 서명 메시지를 생성한다. 다음에, SSP는 그 디지털적으로 서명된 메시지를 출력한다. 바운드 키 블로브가 손상되거나 바운드 키 이용 조건(들)(만약 있다면)이 만족되지 않으면, SSP는 그 연산을 수행하지 않는다. 그래서 데이터 입력은 사설 키가 SSP에 의해 시현되지 않으면서도 그 복원된 사설 키를 이용하여 디지털적으로 서명될 수 있다.
BoundQuote 연산은 서명될 데이터 및 바운드 키 블로브를 입력으로서 수신한다. SSP는 그 바운드 키 블로브로부터 사설 키를 복원하고, 그 다음에 전술한 Quote 연산에서와 같이 그 복원된 서명 키를 이용하여 그 연산에 입력된 데이터 및 현재의 PCR 값(예로서, BoundQuote 연산을 인보크하는 프로그램의 다이제스트와 같은 식별자)에 대해 서명을 생성한다. 다음에, SSP는 그 디지털적으로 서명된 메시지를 출력한다. 바운드 키 블로브가 손상되거나 바운드 키 이용 조건(들)(만약 있다면)이 만족되지 않으면, SSP는 그 연산을 수행하지 않는다. 일 실시예에서, BoundQoute 연산은 BoundSign 연산과 유사하지만, 현재의 PCR 값이 BoundQuote 연산에서 이용된다는 점에서 다르다.
BoundPkDecrypt 연산은 암호문 및 바운드 키 블로브를 입력으로서 수신한다. SSP는 그 바운드 키 블로브로부터 사설 키를 복원하고, 그 다음에 그 복원된 사설 바운드 키를 이용하여 그 입력된 암호문을 해독한다. 그 다음에, 해독된 데이터는 BoundPkDecrypt 연산에 의해 출력된다. 바운드 키 블로브가 손상되거나 바운드 키 이용 조건(들)(만약 있다면)이 만족되지 않으면, SSP는 그 연산을 수행하지 않는다.
BoundPkUnseal 연산은 암호문 및 바운드 키 블로브를 입력으로서 수신한다. SSP는 그 바운드 키 블로브로부터 사설 키를 복원하고, 그 다음에 PKUnseal 연산에서와 같이 그 사설 키를 이용하여 그 입력된 암호문을 해독한다. 그 다음에, 해독된 데이터는 BoundPkUnseal 연산에 의해 출력된다. 바운드 키 블로브가 손상되거나 바운드 키 이용 조건(들)(만약 있다면)이 만족되지 않으면, SSP는 그 연산을 수행하지 않는다.
BoundMAC 연산은 바운드 키를 이용하여 MAC이 계산될 데이터 입력을 수신하고, 또한 바운드 키 블로브를 수신한다. 바운드 키 블로브가 손상되거나 바운드 키 이용 조건(들)(만약 있다면)이 만족되지 않으면, SSP는 그 연산을 수행하지 않는다. 그렇지 않으면, SSP는 바운드 키 블로브로부터 바운드 키를 복원하고, 그 다음에 그 복원된 바운드 키를 이용하여 그 데이터 입력에 대하여 메시지 인증 코드(MAC)를 생성한다. 그 다음에, SSP는 그 계산된 MAC를 출력한다. 그래서, 데이터 입력에 대한 MAC는 바운드 키가 SSP에 의해 시현되지 않으면서도 그 복원된 바운드 키를 이용하여 계산될 수 있다.
BoundEncrypt 연산은 바운드 키를 이용하여 암호화될 데이터 입력을 수신하고, 또한 바운드 키 블로브를 수신한다. 바운드 키 블로브가 손상되거나 바운드 키 이용 조건(들)(만약 있다면)이 만족되지 않으면, SSP는 그 연산을 수행하지 않는다. 그렇지 않으면, SSP는 바운드 키 블로브로부터 바운드 키를 복원하고, 그 다 음에 그 복원된 바운드 키를 이용하여 그 데이터 입력을 암호화한다. 그 다음에, SSP는 그 계산된 암호문을 출력한다. 그래서, 데이터 입력은 바운드 키가 SSP에 의해 시현되지 않으면서도 그 복원된 바운드 키를 이용하여 암호화될 수 있다.
BoundDecrypt 연산은 바운드 키를 이용하여 해독될 데이터 입력을 수신하고, 또한 바운드 키 블로브를 수신한다. 바운드 키 블로브가 손상되거나 바운드 키 이용 조건(들)(만약 있다면)이 만족되지 않으면, SSP는 그 연산을 수행하지 않는다. 그렇지 않으면, SSP는 바운드 키 블로브로부터 바운드 키를 복원하고, 그 다음에 그 복원된 바운드 키를 이용하여 그 데이터 입력을 해독한다. 그 다음에, SSP는 그 계산된 평문을 출력한다. 그래서, 데이터 입력은 바운드 키가 SSP에 의해 시현되지 않으면서도 그 복원된 바운드 키를 이용하여 해독될 수 있다.
GenBoundKey 연산은 SSP가 신규의 바운드 키를 생성하도록 한다. 이 신규의 바운드 키는 암호키이고, 신규의 바운드 키 블로브가 그 신규로 생성된 키를 포함하도록 생성된다. 이 바운드 키 블로브는 항상 전체 키를 포함해야 하는 것을 아님을 인식하여야 한다. 예를 들면, 만약 신규로 생성된 키가 공개 키/사설 키 쌍이면, 이 바운드 키 블로브내에 사설 키를 포함하면 충분할 수 있다.
신규의 바운드 키 블로브는 하나 이상의 가드 - 전형적으로는 (예로서, 전술한 Store 함수와 유사하게 그 신규의 바운드 키 블로브를 암호적으로 보호함으로써, 그렇지 않으면 SSP에 의해서만 검색될 수 있도록 그 신규의 바운드 키 블로브를 보안함으로써) 연산을 실행하는 SSP - 에 바운드된다. GenBoundKey 연산은 또한 신규의 바운드 키 블로브의 다양한 측면을 결정할 수 있는 파라미터를 가지며, 이들 파라미터를 기술하는 데이터가 어떤 무결성-보호된 방식으로 그 신규로 생성된 사설 키에 부착될 수 있다(예로서, 그 데이터는 그 신규의 바운드 키 블로브의 부분으로서 이루어진다). 이러한 데이터의 예는, 전술한 바와 같이, 이전 조건, 바운드 키 이용 조건 등을 포함한다. 다음에 이 신규의 바운드 키 블로브는 GenBoundKey 연산에 의해 출력된다.
일반적으로, 바운드 키는 대칭 키 또는 공개 키/사설 키 쌍을 포함하는 어떤 종류의 암호키라도 될 수 있다. 정확한 키 타입은 그것이 이용될 바운드 키 연산(들)에 의존한다. 예를 들면, BoundMAC에서 이용될 바운드 키는 전형적으로 대칭 키가 될 수 있고, 반면에 BoundSign에서 이용될 바운드 키는 전형적으로 공개 서명 키/사설 서명 키 쌍이 될 수 있다. 키 타입은 GenBoundKey에 대한 파라미터로서 특정될 수도 있다.
BoundKeyMigrate 연산은 바운드 키의 이용 조건이 변경되도록 한다. SSP는 하나 이상의 이전 조건이 만족되는 지를 확인한다. 다양한 조건 중의 하나(예를 들어, 데이터가 언제 및/또는 누구에게 이전될 수 있는 지를 확인하는 조건으로서, Seal 연산 및 UnSeal 연산을 참조하며 전술한 것과 같은 조건)가 BoundKeyMigrate 연산과 함께 이용될 수도 있다. 만약 그 확인이 성공적으로 이루어지지 않으면, 그 연산을 실패한 것으로 된다. 만약, 그 확인이 성공적으로 이루어지면, 가드는 신규의 바운드 키 블로브를 생성하고, 여기서 그 바운드 키 이용 조건은 요청한 대로 변경되었다.
BoundKeyExport 연산은, 바운드 키를 직접 접근할 수 있는 가드들(SSP들)의 세트를 변경하도록 SSP에게 지시한다. SSP는 하나 이상의 조건이 만족되는 지를 확인한다. 다양한 조건 중의 하나(예를 들어, 데이터가 언제 및/또는 누구에게 내보내기될 수 있는 지를 확인하는 조건으로서, Seal 연산 및 UnSeal 연산을 참조하며 전술한 것과 같은 조건)가 BoundKeyExport 연산과 함께 이용될 수도 있다. 만약 그 확인이 성공적으로 이루어지지 않으면, 그 연산을 실패한 것으로 된다. 만약, 그 확인이 성공적으로 이루어지면, SSP는 바운드 키 블로브에 대한 암호적 보호를 요청한 대로 변경한다. 일 실시예에서, SSP는 하나 이상의 신규의 키로 그 바운드 키 데이터 구조체를 암호화한다.
바운드 키의 (국부적인 것이나 원격적인 것이나) 생성자가 특정할 수 있는 조건들의 부류의 예는, 그 바운드 키는 특정의 값(들)을 가진 프로그램 다이제스트를 가진 프린시펄을 대신하여 단지 이용될 수도 있다는 것이다. 이 경우에, 바운드 키 연산은 바운드 키 블로브의 내부적 검색 후에 요청하는 프린시펄의 다이제스트를 체크하고, 만약 그 다이제스트가 바운드 키 블로브내에서 특정된 대로가 아니면 추가적인 계산을 수행함이 없이 실패로 된다.
바운드 키 블로브는 전형적으로 특정의 SSP의 고유의 키가 성공하도록 요구하는 암호 연산을 통하여 특정의 SSP에 속박 또는 바운드된다. 이러한 연산의 예는 MAC 함수, 디지털 서명 함수, 암호화 함수, 및 결합된 암호화 및 무결성 확인 함수가 있다.
예시적인 바운드 키 연산
일 실시예에서, 이전은 인증하는 엔티티가 발행한 국부적 이전 인증서 또는 내보내기 인증서를 통해서 인증된다. 국부적 이전 인증서는 다음과 같은 데이터 구조체에 대한 RSASSA-PSS-SIGN 연산의 디폴트이다:
Figure 112003013600861-pat00014
국부적 SSP-이전은 BoundKeyMigrate 연산을 이용하여 요청된다. 국부적 이전을 인증하기 위해, SSP에는 그 바운드 키를 참조하는 Bound-migration-info 구조체 및 그 인증된 엔티티에 의해 제공된 이러한 구조체에 대해 적절하게 형성된 인증서가 제공된다. 만약 이전 인증이 수락가능하면, SSP는 그 키를 신규의 PCR에 재-바인드하며(rebind), 다른 모든 키의 속성은 변경되지 않도록 유지된다(예로서, 만약 그 키가 PCR 값에 원래부터 바운드되어 있지 않았다면 이것은 재-바운드되는 때에 그렇게 되지 않을 것이다). 소스-바운드-블로브-다이제스트(source-bound-blob-digest)는 바운드 키의 암호화된 외부적 형태의 다이제스트이다.
원격-이전은 예를 들면 인증 엔티티에 의해 서명된 Bound-migration-info 구조체로 BoundKeyExport 함수를 통해 성취된다.
Figure 112003013600861-pat00015
인증 엔티티는 키가 내보내기가능으로 마크되는 경우에 그 키가 재-바운드되는 장치 또는 소프트웨어에 대한 완전한 제어를 가진다.
바운드 키 연산은 PKCiphertext를 이용하는 데, 이는 다음과 같은 플랫폼 공 개 암호화 키로써 암호화된 타입 Bound-key-blob의 시퀀스이다.
Figure 112003013600861-pat00016
바운드-투-PCR(bound-to-PCR) 멤버는, 바운드 키가 이용되기 위해 바운드-투-다이제스트(bound-to-Digest) 필드가 현재의 PCR 값과 일치해야 하는 지를 나타내는 플래그이다. {migrateable, migrate-auth}는 그 키가 이전가능한 지를 그리고 만약 그러하다면 어떤 인증 기관의 제어하에 있는지를 나타낸다(만약 이전가능(migrateable)이 거짓이면, migrate-auth 값은 중요하지 않다). {exportable, export-auth}는 그 키가 내보내기가능한 지를 그리고 만약 그러하다면 어떤 인증 기관의 제어하에 있는지를 나타낸다(만약 내보내기가능이 거짓이면, export-auth 값은 중요하지 않다). Pub-key-digest는 사설 키를 복원하기 위해 필요한 공개 키와 PKCompressedPrivateKey 사이에 강한 바인딩을 제공하는 대응하는 공개 키의 다이제스트이다.
일 실시예에서, 바운드 키가 GenBoundKey 함수로 국부적으로 생성된다면, SSP는 막 생성된 키의 공개적 특성 및 바운드 키 내보내기 동안에의 시스템의 구성을 자세히-기술하고-있는(detailing) 데이터 구조체에 대한 서명을 생성한다.
Figure 112003013600861-pat00017
이러한 데이터 구조체에서, key-type, bound-to-PCR, bound-to, migrateable, migrate-auth, exportable, 및 export-auth 는 신규로 생성된 바운드 키 특성들이다. Creator-PCR 은 키가 내보내기되는 때에 활성화된 PCR이고, bound-pub-key 는 그 신규로 생성된 공개 키의 다이제스트이다. sig-nonce 는 바운드 키 생성이 요청된 경우에 전달된 다이제스트-크기조절된(digest-sized) 값이다.
BoundSign 연산, BoundQuote 연산, BoundPkDecrypt 연산, BoundPkUnseal 연산, GenBoundKey 연산, BoundKeyMigrate 연산, 및 BoundKeyExport 연산의 예시적인 정의는 다음과 같다.
BoundSign
Figure 112008027410613-pat00040
코멘트
BoundSign 연산은 타입 BoundSignKey인 BoundKeyBlob과 그에 대응하는 공개 키를 포함하는 타입 sspV1BoundKey인 PKciphertext를 취한다. 만약 이들 조건중의 어느 하나라도 만족시키지 않으면, 또는 그 시퀀스가 디코딩을 실패하면, 그 연산은 SSP_CRYPTO_ERROR로써 실패한 것으로 된다.
Bound-to_PCR 이 설정되면, SSP는 현재의 PCR 값이 Bound-key-blob 시퀀스내에서 특정된 대로인지를 체크한다. 만약 그렇지 아니하면, SSP는 SSP_CRYPTO_ERROR를 리턴시킨다.
마지막으로, SSP는 해독된 사설 키로써 입력 메시지를 서명한다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
BoundSign 연산은 다음과 같은 동작을 구현한다.
1. SSP는 pk-sealed-blob(공개 키봉인된 블로브)내의 AlgorithmIdentifier가 sspV1BoundKey인 지를 테스트한다.
2. SSP는 PKCS#1 V2.1에서 규정되어 있는 대로 RSAES-OAEP-DECRYPT의 디폴트 구현체에 따라 SealedBlob를 내부적으로 해독하여, 평문 메시지 M을 얻는다.
3. 만약 디코딩 연산의 출력이 "디코딩 에러"이면, Secret를 0으로 설정하면서 SSP_CRYPTO_ERROR를 리턴시킨다.
4. 그렇지 않으면, 복원된 메시지 M이 타입 BoundSignKey를 가진 형태 Bound-key-blob의 DER 인코딩이다. 만약 그렇지 않으면, SSP는 SSP_CRYPTO_ERROR를 방출하여야 한다.
5. 만약 bound-to-PCR 이 참(TRUE)이면, bound-to 는 현재의 PCR 값과 비교되어야 한다. 만약 그 값이 동일하지 않으면, SSP는 SSP_CRYPTO_ERROR를 출력하여야 한다.
6. 다음에, SSP는 제공되어 있는 그 연계된 공개 키를 이용하여 바운드 사설 키를 복원한다. 만약 이것이 실패로 되면, SSP는 SSP_CRYPTO_ERROR를 리턴시킨다. 만약 성공하면, SSP는 그 복원된 사설 키 bound-key를 이용하여, PKCS#1 V2.1에서 규정되어 있는 대로 RSASSA-PSS-SIGN의 디폴트 구현체에 따라 입력 메시지 DateToBeSigned 에 대한 서명된 메시지를 생성한다. 만약 이 함수가 에러를 리턴시키면, SigBlob을 0으로 설정하면서 SSP_CRYPTO_ERROR를 리턴시킨다.
7. SSP_SUCCESS를 리턴시킨다.
BoundQuote
Figure 112008027410613-pat00041
코멘트
BoundQuote 연산은 타입 BoundQuoteKey인 BoundKeyBlob를 포함하는 타입 sspV1BoundKey인 PKciphertext를 취한다. 만약 이들 조건중의 어느 하나라도 만족시키지 않으면, 또는 그 시퀀스가 디코딩을 실패하면, 그 연산은 SSP_CRYPTO_ERROR로써 실패한 것으로 된다.
Bound-to-PCR 이 설정되면, SSP는 현재의 PCR 값이 Bound-key-blob 시퀀스내에서 특정된 대로임을 체크한다. 만약 그렇지 아니하면, SSP는 SSP_CRYPTO_ERROR를 리턴시킨다.
마지막으로, SSP는 해독된 공개 키로써 입력 메시지를 인용한다(quote).
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
BoundQuote 연산은 다음과 같은 동작을 구현한다.
1. SSP는 pk-sealed-blob내의 AlgorithmIdentifier가 sspV1BoundKey인 지를 테스트한다.
2. SSP는 PKCS#1 V2.1에서 규정되어 있는 대로 RSAES-OAEP-DECRYPT의 디폴트 구현체에 따라 SealedBlob를 내부적으로 해독하여, 평문 메시지 M을 얻는다.
3. 만약 디코딩 연산의 출력이 "디코딩 에러"이면, Secret를 0으로 설정하면서 SSP_CRYPTO_ERROR를 리턴시킨다.
4. 그렇지 않으면, 복원된 메시지 M이 타입 BoundQuoteKey를 가진 형태 Bound-key-blob의 DER 인코딩이어야 한다. 만약 그렇지 않으면, SSP는 SSP_CRYPTO_ERROR를 방출하여야 한다.
5. 만약 bound-to-PCR 이 참이면, bound-to 는 현재의 PCR 값과 비교되어야 한다. 만약 그 값이 동일하지 않으면, SSP는 SSP_CRYPTO_ERROR를 출력하여야 한다.
6. 그 다음에 SSP는 공개 키를 재구성하기 위해 그 복원된 사설 키 프래그먼트 및 그 공개 키를 이용한다. 사설 키는 다음과 같이 재구성될 수 있다. 일반적으로, RSA 키는 수 N = p*q (N은 두 개의 소수 p 와 q의 곱이다) 및 2개의 지수 e (암호 지수)와 d (해독 지수)로 이루어진다. N 과 e 는 공개 키를 형성하며, d 가 사설 키이다. 일반적으로, d 는 N 만큼의 길이를 가진다(예로서, 2048 비트). N 의 인수분해-결과(factorization)가 알려지면(즉, p 와 q 가 알려지면), 사설 키 d는 즉시 결정된다. p와 q 는 단지 N 의 절반정도의 길이임에 유의한다. 그래서, d 를 사설 키로서 저장하기보다는, p 를 저장한다. 그 다음에, 공개 키에 N, e 및 p 이 주어지면, 값 q = N/p 가 계산될 수 있고, 그래서 주어진 p 및 q 에 대하여 값 d 가 결정된다.
그 사설 키는 다음에, 앞에서 정의된 Quote 연산에서의 세부사항에 따라 입력 메시지 DateToBeSigned 및 현재의 PCR 값에 대한 서명 메시지를 생성하는 데에 이용된다. 만약 이 함수가 에러를 리턴시키면, SigBlob을 0으로 설정하면서 SSP_CRYPTO_ERROR를 리턴시킨다.
7. SSP_SUCCESS를 리턴시킨다.
BoundPkDecrypt
Figure 112008027410613-pat00042
코멘트
BoundPkDecrypt 연산은 타입 BoundPkDecryptKey인 BoundKeyBlob를 포함하는 타입 sspV1BoundKey인 PKciphertext를 취한다. 만약 이들 조건중의 어느 하나라도 만족시키지 않으면, 또는 그 시퀀스가 디코딩을 실패하면, 그 연산은 SSP_CRYPTO_ERROR로써 실패한 것으로 된다.
Bound-to_PCR 이 설정되면, SSP는 현재의 PCR 값이 Bound-key-blob 시퀀스내에서 특정된 대로이다. 만약 그렇지 아니하면, SSP는 SSP_CRYPTO_ERROR를 리턴시 킨다.
마지막으로, SSP는 bound-blob로부터 그 해독된 공개 키로써 입력 메시지를 해독한다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
BoundPkDecrypt 연산은 다음과 같은 동작을 구현한다.
1. SSP는 pk-sealed-blob내의 AlgorithmIdentifier가 sspV1BoundKey인 지를 테스트한다.
2. SSP는 PKCS#1 V2.1에서 규정되어 있는 대로 RSAES-OAEP-DECRYPT의 디폴트 구현체에 따라 SealedBlob를 내부적으로 해독하여, 평문 메시지 M을 얻는다.
3. 만약 디코딩 연산의 출력이 "디코딩 에러"이면, Secret을 0으로 설정하면서 SSP_CRYPTO_ERROR를 리턴시킨다.
4. 그렇지 않으면, 복원된 메시지 M은 타입 BoundDecryptKey를 가진 형태 Bound-key-blob의 DER 인코딩이다. 만약 그렇지 않으면, SSP는 SSP_CRYPTO_ERROR를 방출하여야 한다.
5. 만약 bound-to-PCR 이 참이면, bound-to 는 현재의 PCR 값과 비교되어야 한다. 만약 그 값이 동일하지 않으면, SSP는 SSP_CRYPTO_ERROR를 출력하여야 한다.
6. SSP는 제공되어 있는 공개 키를 이용하여 그 사설 키를 복원한다. 사설 키는 BoundQuote 연산에서 전술한 바와 같은 방식으로 복원될 수 있다. 다음에 그 복원된 사설 키 bound-key 를 이용하여, PKCS#1 V2.1에서 규정되어 있는 대로 RSAES-OAEP-DECRYPT의 디폴트 구현체를 이용하는 pk-sealed-blob를 해독하여, 평문 M을 얻는다.
7. SSP는 d-blob를 M으로 설정한다.
8. SSP_SUCCESS를 리턴시킨다.
BoundPkUnseal
Figure 112008027410613-pat00043
코멘트
BoundPkUnseal 연산은 타입 BoundPkUnsealKey인 BoundKeyBlob를 포함하는 타입 sspV1BoundKey인 PKciphertext를 취한다. 만약 이들 조건중의 어느 하나라도 만족되지 않으면, 또는 그 시퀀스가 디코딩을 실패하면, 그 연산은 SSP_CRYPTO_ERROR로써 실패한 것으로 된다.
Bound-to-PCR 이 설정되면, SSP는 현재의 PCR 값이 Bound-key-blob 시퀀스내에서 특정된 대로이다. 만약 그렇지 아니하면, SSP는 SSP_CRYPTO_ERROR를 리턴시킨다.
마지막으로, SSP는 PK_Unseal을 이용하여, bound-blob로부터 그 해독된 사설 키로써 입력 메시지를 봉인해제한다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
BoundPkUnseal 연산은 다음과 같은 동작을 구현한다.
1. SSP는 pk-sealed-blob내의 AlgorithmIdentifier가 sspV1BoundKey인 지를 테스트한다.
2. SSP는 PKCS#1 V2.1에서 규정되어 있는 대로 RSAES-OAEP-DECRYPT의 디폴트 구현체에 따라 SealedBlob를 내부적으로 해독하여, 평문 메시지 M을 얻는다.
3. 만약 디코딩 연산의 출력이 "디코딩 에러"이면, Secret을 0으로 설정하면서 SSP_CRYPTO_ERROR를 리턴시킨다.
4. 그렇지 않으면, 복원된 메시지 M은 타입 BoundDecryptKey를 가진 형태 Bound-key-blob의 DER 인코딩이다. 만약 그렇지 않으면, SSP는 SSP_CRYPTO_ERROR를 방출하여야 한다.
5. 만약 bound-to-PCR 이 참이면, bound-to 는 현재의 PCR 값과 비교되어야 한다. 만약 그 값이 동일하지 않으면, SSP는 SSP_CRYPTO_ERROR를 출력하여야 한다.
6. SSP는 바운드 키 블로브를 이용하여 사설 키를 재생성한다. 사설 키는 BoundQuote 연산에서 전술한 바와 같은 방식으로 복원될 수 있다. 다음에 그 복원된 사설 키 bound-key 를 이용하여, PK_Unseal 명령에서 기술된 단계들을 이용하는 pk-sealed-blob를 봉인해제한다.
7. 봉인해제된 블로브에 지명된 PCR이 현재의 PCR과 일치하지 않으면, SSP는 SSP_CRYPTO_ERROR을 리턴시킨다.
8. 그렇지 않으면, SSP는 d-blob를 M으로 설정한다.
9. SSP_SUCCESS를 리턴시킨다.
GenBoundKey
Figure 112008027410613-pat00044
코멘트
GenBoundKey 연산은 SSP로 하여금 신규로 생성된 공개 키를 포함하는 신규의 바운드-키 블로브를 생성하도록 한다. 이 바운드-키 블로브는 SSP 자신의 공개 키로써 암호화된다.
GenBoundKey 는 또한 그 신규로 생성된 키-쌍의 공개 키, SSP가 그 키를 생성했다는 것을 나타내는 인용-서명, 그 특성, 및 그 키가 생성되는 때의 PCR 값을 출력한다.
GenBoundKey의 호출자는 또한 생성될 바운드-키의 타입을 나타낸다: 즉, 그것이 서명을 하기 위한 것인 지, 인용을 하기 위한 것인 지, BoundPkUnseal로써 봉인해제를 하기 위한 것인 지, 또는 BoundPkDecrypt로써 해독을 하기 위한 것인 지 여부. 그 호출자는 또한 바운드-키가 PCR에 바운드되어야 하는 지를, 그리고 그렇다면 그것이 어떤 PCR 값에 바운드되는 지를 특정한다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
GenBoundKey 연산은 다음과 같은 동작을 구현한다.
1. SSP는 신규의 공개 사설 RSA 키-쌍을 생성한다. SSP는 이것이 아니라면, 그 SSP가 유휴상태(idle)에 있는 경우에는, 선택사항으로서, 키-쌍을 생성하고, 즉시 검색을 위한 비휘발성 메모리내에 키들의 소규모 캐시로 저장한다.
2. SSP는 신규로 생성된 사설 키 및 바운드-키 타입을 포함하는 바운드-키 구조체 및 호출자에 의해 제공된 다른 파라미터를 내부적으로 생성한다.
3. SSP는 플랫폼 공개 암호화 키로써 바운드-키 블로브를 암호화한다.
4. SSP는 신규로 생성된 키의 특성, 키 생성시의 PCR의 값들, 및 그 공급된 논스(nonce)를 포함하는 bound-key-pub-info 의 서명된 블로브를 생성한다.
5. SSP는 그 암호화된 바운드-키 블로브, 그 신규로 생성된 공개 키, 및 그 인용된 키 블로브를 출력한다.
6. SSP_SUCCESS를 리턴시킨다.
BoundKeyMigrate
Figure 112008027410613-pat00045
코멘트
BoundKeyMigrate 연산은 SSP로 하여금 제어된 방식으로 다른 PCR 값에 키를 재-바인드하도록 지시한다. 본래의 키-생성자(국부적인 것 또는 원격적인 것)는 이전-인증 엔티티를 지명한다. 이전가능으로 마크된 바운드 키들만이 이전될 수 있고, 만약 SSP에 어떤 적절하게 서명된 Boundmigration-info 구조체가 제공되면 이들은 단지 이전될 것이다. "적절하게 서명된다"는 의미는, 바운드 키 블로브내에 포함된 다이제스트를 가진 공개 키로 서명된다는 것이다. 다른 바운드 키 속성들은 변경되지 않는다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
BoundKeyMigrate 연산은 다음과 같은 동작을 구현한다.
1. SSP는 바운드-키 구조체를 내부적으로 해독하고, 그것을 Bound-key-blob로 해석한다. 만약 디코딩이 실패하면, SSP는 SSP_CRYPTO_ERROR를 리턴시킨다.
2. SSP는 Bound-export-info가 동일한 키를 참조하는 지, 그 서명이 적절하게 형성되어 있는 지, 및 서명자의 공개 키의 다이제스트가 Bound-key-blob의 "이전가능(migrateable)" 필드에 지명된 대로인 지를 확인한다(validate).
3. SSP는 그 키가 이전가능인 지를 체크한다. 만약 그렇지 않으면, SSP는 SSP_CRYPTO_ERROR를 리턴시킨다.
4. 만약 그 키가 PCR에 바운드되어 있으면, SSP는 현재의 PCR이 키-블로브에 지명되어 있는 것인 지를 체크한다.
5. SSP는 Bound-migration-info의 dest-PCR 필드에 지명되어 있는 것으로 PCR 값을 대체한다.
6. SSP는 Bound-key-blob를 재-암호화하고, 그 재-암호화된 구조체를 내보내기한다.
7. SSP_SUCCESS를 리턴시킨다.
BoundKeyExport
Figure 112008027410613-pat00046
코멘트
BoundKeyExport 연산은 SSP로 하여금 제어된 방식으로, 바운드 키의 사설 부분을 소스 장치 상의 바운드 키와 일치하는 포맷으로 원격 엔티티로 내보내기하도록 지시한다. 본래의 키-생성자(국부적인 것 또는 원격적인 것)는 내보내기-인증 엔티티를 지명한다. 내보내기가능으로 마크된 바운드 키들만이 내보내기될 수 있고, 만약 SSP에 어떤 적절하게 서명된 Bound-export-info 구조체가 제공되면 이들은 단지 내보내기될 것이다. "적절하게 서명된다"는 의미는, 본래의 바운드 키 블로브내에 포함된 다이제스트를 가진 공개 키로 서명된다는 것이다. BoundKeyExport는 적절하게 인증된 호출자로 하여금 키가 재-바운드되어야 할 목표 엔티티의 PCR 값 및 공개 키를 특정하도록 한다. 외부 엔티티가 어떤 SSP이어야 한다는 특정된 요구사항을 전혀 없지만, 그 신규의 바운드 블로브는 원격 SSP들이 그 내보내기된 바운드 키들을 직접 소모하도록 하는 바운드-키-규약을 따른다.
접근 정책
Allowed = FeatureEnable.MainEnable &
(FeatureEnable.UsePrivKey == All |
FeatureEnable.UsePrivKey == AuthSL
& SLKnown & AuthPCR[CurrentSL].UsePrivKey)
동작
BoundKeyExport 연산은 다음과 같은 동작을 구현한다.
1. SSP는 바운드-키 구조체를 내부적으로 해독하고, 그것을 Bound-key-blob로 해석한다. 만약 디코딩이 실패하면, SSP는 SSP_CRYPTO_ERROR를 리턴시킨다.
2. SSP는 Bound-export-info가 동일한 키를 참조하는 지, 그 서명이 적절하게 형성되어 있는 지, 및 서명자의 공개 키의 다이제스트가 Bound-key-blob의 "내보내기(export)" 필드에 지명된 대로인 지를 확인한다.
3. SSP는 그 키가 내보내기가능인 지를 체크한다. 만약 그렇지 않으면, SSP는 SSP_CRYPTO_ERROR를 리턴시킨다.
4. 만약 그 키가 PCR에 바운드되어 있으면, SSP는 현재의 PCR이 키-블로브에 지명되어 있는 것인 지를 체크한다.
5. SSP는 Bound-export-info내에 제공된 신규의 PCR 값 및 본래의 bound-key-blob 구조체로부터의 파라미터들을 포함하는 신규의 bound-key-blob 구조체를 생성한다. 모든 다른 파라미터들은 동일하게 유지된다.
6. SSP는 Bound-export-info내에 제공된 공개 암호화 키로 그 신규의 Bound-key-blob를 암호화한다.
7. 신규의 바운드 키가 내보내기된다.
8. SSP_SUCCESS를 리턴시킨다.
일반적인 컴퓨터 환경
도 12는 여기에서 설명한 본 기술을 구현하기 위해 이용될 수 있는 일반적인 컴퓨터 환경(400)을 나타낸다. 컴퓨터 환경(400)은 컴퓨팅 환경의 단지 일 예일뿐이고, 컴퓨터 및 네트워크 아키텍처의 이용 또는 기능성의 범위에 대한 어떤 제한도 의미하는 것으로 의도되지는 않는다. 컴퓨터 환경(400)이 예시적인 컴퓨터 환경(400)에서 나타낸 어느 하나의 컴포넌트 또는 컴포넌트들의 조합과 관련된 어떤 의존성 또는 요구사항을 가지는 것으로 해석되지 않아야 한다.
컴퓨터 환경(400)은 컴퓨터(402)의 형태로 범용 컴퓨팅 장치를 포함한다. 컴퓨터(402)는 예로서 도 1의 프린시펄(102) 및 가드(104) 또는 도 2의 층들을 구현하기 위해 이용될 수 있다. 컴퓨터(402)의 컴포넌트들은 비록 이들만으로 제한되는 것은 아니지만, 하나 이상의 프로세서 또는 처리 장치(404)(선택적으로는 (SSP와 같은) 하나 이상의 보안 프로세서 또는 코프로세서 및/또는 하나 이상의 암호화 프로세서 또는 코프로세서를 포함함), 시스템 메모리(406), 및 시스템 메모리(406)에 프로세서(404)를 포함하는 다양한 시스템 컴포넌트들을 접속하는 시스템 버스(408)를 포함할 수 있다.
시스템 버스(408)는 다양한 버스 아키텍처 중의 어느 것을 이용하는 메모리 버스 또는 메모리 제어기, 주변 버스, 가속형 그래픽 포트, 및 프로세서 또는 로컬 버스를 포함하는 여러 타입의 버스 구조체 중의 하나 이상을 나타낸다. 예로서, 이러한 아키텍처는 ISA(Industry Standard Architecture) 버스, MCA(Micro Channel Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standards Association) 버스, 로컬 버스, 및 메저닌(Mezzanine) 버스로도 알려진 PCI(Peripheral Component Interconnects) 버스를 포함할 수 있다.
컴퓨터(402)는 전형적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 이러한 매체는 컴퓨터(402)에 의해 접근가능한 어떤 가용한 매체라도 될 수 있고, 휘발성 및 비휘발성 매체와 이동식 및 비이동식 매체 모두를 포함한다.
시스템 메모리(406)는 RAM(410)과 같은 휘발성 메모리 및/또는 ROM(412)과 같은 비휘발성 메모리를 포함한다. 컴퓨터(402)의 기동시에 그 내부의 구성요소들 사이에서 정보를 전달하는 것을 도와주는 기본적 루틴을 포함하는 기본 입력/출력 시스템(BIOS)(414)이, ROM(412)에 저장된다. RAM(410)은 전형적으로 처리 장치(404)에 의해 직접 접근되는 그리고/또는 현재 동작되는 데이터 모듈 및/또는 프로그램 모듈을 포함한다.
컴퓨터(402)는 또한 다른 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함한다. 예로서, 도 12에는 비이동식 비휘발성 자기 매체(도시하지 않음)에 읽기 및 쓰기를 하기 위한 하드 디스크 드라이브(416), 이동식 휘발성 자기 매체(예로서, "플로피 디스크")에 읽기 및 쓰기를 하기 위한 자기 디스크 드라이브(418), 및 CD-ROM, DVD-ROM 또는 그 밖의 광 매체와 같은 이동식 비휘발성 광 디스크(424)에 읽기 및 쓰기를 하기 위한 광 디스크 드라이브(422)가 도시되어 있다. 하드 디스크 드라이브(416), 자기 디스크 드라이브(418) 및 광 디스크 드라이브(422)는 각각 시스템 버스(408)에 하나 이상의 데이터 매체 인터페이스에 의해 접속되어 있다. 대안으로서, 하드 디스크 드라이브(416), 자기 디스크 드라이브(418) 및 광 디스크 드라이브(422)는 각각 시스템 버스(408)에 하나 이상의 인터페이스(도시하지 않음)에 의해 접속되어 있다.
디스크 드라이브 및 그와 연계된 컴퓨터 판독가능 매체는 컴퓨터(402)를 위한 컴퓨터 판독 가능 명령어, 데이터 구조체, 프로그램 모듈, 및 그 밖의 데이터의 비휘발성 저장을 제공한다. 비록 하드 디스크 드라이브(416), 자기 디스크 드라이브(418) 및 광 디스크 드라이브(422) 만을 예시하고 있지만, 자기 카세트 또는 그 밖의 광학적 저장장치, RAM, ROM, EEPROM 등등의 컴퓨터에 의해 접근가능한 데이터를 저장할 수 있는 다른 타입의 컴퓨터 판독가능 매체도, 예시적인 컴퓨팅 시스템과 환경을 구현하는 데에 이용될 수 있다는 것은 인식되어야 한다.
임의의 개수의 프로그램 모듈이, 하드 디스크 드라이브(416), 자기 디스크(420), 광 디스크(424), ROM(412), 및/또는 RAM(410)에 저장될 수 있으며, 그 프로그램 모듈의 예로서는, 운영 체제(426), 하나 이상의 애플리케이션 프로그램(428), 그 밖의 프로그램 모듈(430) 및 프로그램(432)이 포함된다. 이러한 운영 체제(426), 하나 이상의 애플리케이션 프로그램(428), 그 밖의 프로그램 모듈(430) 및 프로그램(432)(또는 이들의 어떤 결합)의 각각은 분산된 파일 시스템을 지원하는 상주(resident) 컴포넌트들의 전부 또는 일부를 구현할 수도 있다.
유저는, 키보드(434) 및 포인팅 장치(436)(예로서," 마우스")와 같은 입력장치를 통하여 컴퓨터(402)에 명령어 및 정보를 기입한다(enter). 그 밖의 입력 장치(438)(특별히 도시하지는 않음)에는, 마이크(microphone), 조이스틱, 게임 패드, 위성통신용 접시 안테나(satellite dish), 직렬 포트, 및/또는 그 유사 장치를 포함한다. 이들 입력 장치 및 그 밖의 입력 장치는, 시스템 버스(408)와 접속되어 있는 입력/출력 인터페이스(440)를 통하여 처리 장치(404)에 접속되어 있지만, 병렬 포트, 게임 포트, 또는 USB 포트(범용 직렬 포트)와 같은 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다.
모니터(442) 또는 그 밖의 타입의 표시 장치가 또한, 비디오 어댑터(444)와 같은 인터페이스를 통하여 버스 시스템(408)에 접속되어 있다. 모니터(442)에 부가하여, 다른 출력 주변 장치는, 입력/출력 인터페이스(440)를 통하여 컴퓨터(402)에 접속되어 있는 스피커(도시하지 않음) 및 프린터(446)와 같은 컴포넌트를 포함할 수 있다.
컴퓨터(402)는 원격 컴퓨팅 장치(448)와 같은 하나 이상의 원격 컴퓨터에 논리 접속을 이용하여 네트워크 환경에서 동작할 수 있다. 예로서, 원격 컴퓨팅 장치(448)는 개인 컴퓨터, 휴대용 컴퓨터, 서버, 라우터, 네트워크 컴퓨터, 피어(peer) 장치 또는 다른 공통 네트워크 노드 및 그 유사한 것일 수 있다. 원격 컴퓨팅 장치(448)는, 본 명세서에서 컴퓨터(402)와 관련하여 설명한 모든 구성요소 및 특성을 대부분 또는 모두 포함할 수 있는 휴대용 컴퓨터로서 예시되어 있다.
컴퓨터(402)와 원격 컴퓨터(448) 간의 논리 접속은 근거리 통신망(LAN)(450)과 일반적인 광역 통신망(WAN)(452)으로 나타낸다. 이러한 네트워크 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷 및 인터넷에서 일반적으로 이용되고 있다.
LAN 네트워크 환경에서 구현되는 경우에, 컴퓨터(402)는 로컬 네트워크(450)에 네트워크 인터페이스 또는 어댑터(454)를 통하여 접속되어 있다. WAN 네트워크 환경에 구현되는 경우에, 컴퓨터(402)는 전형적으로 광역 네트워크(452)에 걸쳐 통신을 하기 위한 모뎀(456) 또는 그 밖의 수단을 포함한다. 모뎀(456)은 컴퓨터(402)에 내장형으로 또는 외장형으로 존재할 수 있으며, 시스템 버스(408)에 입력/출력 인터페이스(440) 또는 그 밖의 적절한 메커니즘을 통하여 접속되어 있 다. 여기에 설명된 네트워크 접속은 예시적인 것이고, 컴퓨터들(402 및448) 사이에 통신 링크(들)를 형성하기 위한 다른 수단도 채용될 수 있다는 것은 인식되어야 한다.
네트워크형 환경에서, 컴퓨터 환경(400), 컴퓨터(402)와 관련하여 설명된 프로그램 모듈, 또는 이들의 부분들과 같은 것은 원격 메모리 저장 장치에 저장될 수도 있다. 예로서, 원격 애플리케이션 프로그램(458)은 원격 컴퓨터(448)의 메모리 장치상에 상주한다. 예시의 목적으로, 애플리케이션 프로그램 및 운영체제와 같은 다른 실행가능 프로그램 컴포넌트들은, 비록 이러한 프로그램 및 컴포넌트들이 컴퓨팅 장치(402)의 다른 저장 컴포넌트들내에 다양한 때에 상주하고 컴퓨터상의 데이터 프로세서(들)에 의해 실행되는 것으로 인식될 지라도, 여기에서는 분리된 블록으로서 도시되어 있다.
다양한 모듈 및 기술이 여기에서, 하나 이상의 컴퓨터 또는 다른 장치에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어의 일반적인 콘텍스트로 설명될 수도 있다. 일반적으로, 프로그램 모듈은 특정의 태스크를 수행하거나 특정의 추상적 데이터 타입을 구현하는 루틴, 프로그램, 객체(object), 컴포넌트, 데이터 구조체 등을 포함한다. 전형적으로는, 프로그램 모듈의 기능성들이 다양한 실시예에서 원하는 바에 따라, 조합되거나 분산될 수도 있다.
이들 모듈 및 기술의 구현체는 어떤 형태의 컴퓨터 판독가능 매체에 저장되거나 이들을 통하여 전달될 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터에 의해 접근될 수 있는 어떤 가용한 매체라도 될 수 있다. 예로서, 그리고 이들에만 제한되 는 것은 아니지만, 컴퓨터 판독가능 매체는 "컴퓨터 저장 매체" 및 "통신 매체"를 포함할 수도 있다.
"컴퓨터 저장 매체"는, 컴퓨터 명령어, 데이터 구조체, 프로그램 모듈 또는 그 밖의 데이터와 같은 정보를 저장하기 위한 어떤 방법 또는 기술에서 구현되는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는, 이들에만 제한되는 것은 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD(digital versatile disk; 디지털 다기능 디스크) 또는 다른 광학 저장장치, 자기 카세트, 자기 테이프, 자기 디스크 저장장치 또는 다른 자기 저장 장치 또는 원하는 정보를 저장하는 데 이용할 수 있고 컴퓨터에 의해 접근될 수 있는 그 밖의 다른 매체를 포함한다.
"통신 매체"는 전형적으로 반송파 또는 다른 전송 메커니즘에서와 같은 변조된 데이터 신호내에 컴퓨터 판독가능 명령어, 데이터 구조체, 프로그램 모듈 또는 다른 데이터를 구현한다. 통신 매체는 또한 어떤 정보 전달 매체라도 포함한다. 용어 "변조된 데이터 신호"는 그 신호내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 이에만 한정되는 것은 아니지만, 통신 매체는, 유선 통신망 또는 직접 유선 접속, 및 음향, RF, 적외선과 같은 무선 매체 및 그 밖의 무선 매체를 포함한다. 이상과 같은 것들의 조합도 또한 컴퓨터 판독가능 매체의 범위에 포함된다.
본 발명에 대한 설명은 특정된 구성적 특징 및/또는 방법적 단계에 고유한 용어를 통해 이루어져 있지만, 본 발명은 다음의 특허청구범위에 의해서만 정해지 며, 상기의 특정된 특징 및 단계에 의해 본 발명이 제한되지 아니함은 이해되어야 한다. 상기의 특정된 특징 및 단계들은 본 발명의 예시적 실시 양상을 개시하고 있을 뿐이다.
본 발명은 공개 키에 기초하여 데이터를 저장하고 검색하는 방법을 제공함으로써, 범용 컴퓨팅 장치상에서 데이터가 보호되도록 하는 방법을 제공한다.

Claims (75)

  1. 호출 프로그램으로부터 데이터를 수신하는 단계;
    공개 키 암호화를 이용하여, 상기 데이터 및 다수의 목표 프로그램 식별자 양자 모두를 포함하는 다수의 값을 암호화함으로써 암호문을 생성하는 단계 - 상기 다수의 목표 프로그램 식별자 각각은 상기 암호문으로부터 상기 데이터를 얻을 수 있는 다수의 목표 프로그램 중 상이한 것을 식별하고, 상기 다수의 목표 프로그램은 상기 호출 프로그램에 의해 식별됨 -; 및
    상기 암호문을 상기 호출 프로그램에 리턴시키는 단계
    를 포함하는 것을 특징으로 하는 방법.
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
  6. 제1항에 있어서,
    상기 다수의 목표 프로그램 식별자는 다수의 다이제스트(digest) 값을 포함하고, 상기 다수의 목표 프로그램 식별자 각각은 상기 다수의 목표 프로그램 중 상이한 것에 암호 해시 함수를 적용함으로써 생성된 다이제스트 값인 것을 특징으로 하는 방법.
  7. 제1항에 있어서,
    상기 다수의 목표 프로그램은 상기 호출 프로그램을 포함하는 것을 특징으로 하는 방법.
  8. 삭제
  9. 호출 프로그램으로부터 비트 스트링을 수신하는 단계;
    상기 호출 프로그램이 상기 비트 스트링의 암호문내의 암호화된 데이터에 접근하도록 허락된 다수의 목표 프로그램 중의 하나인 지를 결정하기 위하여 상기 호출 프로그램의 식별자를 체크하는 단계; 및
    상기 호출 프로그램이 상기 데이터에 접근하도록 허락된 다수의 목표 프로그램 중의 하나인 경우에만, 공개 키 해독을 이용하여 해독된 상기 데이터를 상기 호출 프로그램에 리턴시키는 단계
    를 포함하는 것을 특징으로 하는 방법.
  10. 삭제
  11. 제9항에 있어서,
    상기 체크하는 단계는,
    상기 데이터에 접근하도록 허락된 목표 프로그램의 식별자를 상기 비트 스트링으로부터 얻는 단계;
    상기 목표 프로그램의 식별자가 상기 호출 프로그램의 식별자와 동일한 지를 체크하는 단계; 및
    상기 목표 프로그램의 식별자가 상기 호출 프로그램의 식별자와 동일한 경우에, 상기 호출 프로그램이 상기 데이터에 접근하도록 허락된 상기 다수의 목표 프로그램 중의 하나인 것으로 결정하는 단계
    를 포함하는 것을 특징으로 하는 컴퓨팅 장치에서 구현되는 방법.
  12. 제9항에 있어서,
    상기 체크하는 단계는,
    상기 데이터에 접근하도록 허락된 다수의 목표 프로그램의 식별자를 상기 비트 스트링으로부터 얻는 단계;
    상기 호출 프로그램의 식별자가 상기 다수의 목표 프로그램의 식별자 중의 적어도 하나와 동일한 지를 체크하는 단계;
    상기 호출 프로그램의 식별자가 상기 다수의 목표 프로그램의 식별자 중의 적어도 하나와 동일한 경우에, 상기 호출 프로그램이 상기 데이터에 접근하도록 허락되는 것으로 결정하는 단계; 및
    상기 호출 프로그램의 식별자가 상기 다수의 목표 프로그램의 식별자 중의 어느 것과도 동일하지 아니한 경우에, 상기 호출 프로그램은 상기 데이터에 접근하도록 허락되지 않는 것으로 결정하는 단계
    를 포함하는 것을 특징으로 하는 컴퓨팅 장치에서 구현되는 방법.
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. PKSeal 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    암호화될 데이터를 얻는 단계; 및
    공개 키 암호화를 이용하여 상기 데이터 및 상기 데이터를 해독하도록 허락된 프로그램들의 식별자 세트를 암호화하는 단계
    를 수행하도록 하는
    것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  19. 삭제
  20. 제18항에 있어서,
    상기 식별자 세트는 상기 PKSeal 연산의 호출자의 식별자를 포함하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  21. PKUnseal 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    호출 프로그램으로부터 암호문을 포함하는 비트 스트링을 수신하는 단계;
    공개 키 해독을 이용하여, 평문(plaintext)을 형성하기 위해 상기 암호문을 해독하는 단계; 및
    상기 호출 프로그램이 평문 데이터가 시현(reveal)될 수 있는 일세트의 식별된 프로그램의 중의 하나인 경우에만, 상기 평문 데이터를 상기 호출 프로그램에 리턴시키는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  22. 제21항에 있어서,
    상기 명령어는 상기 하나 이상의 프로세서로 하여금:
    암호 해시 함수를 이용하여 상기 호출 프로그램의 다이제스트를 생성하는 단계;
    상기 호출 프로그램의 다이제스트를 상기 비트 스트링내의 식별된 일세트의 다이제스트와 비교하는 단계; 및
    상기 호출 프로그램의 다이제스트가 상기 비트 스트링내의 식별된 상기 일 세트의 다이제스트 중의 적어도 하나와 동일한 경우에만, 상기 평문 데이터를 상기 호출 프로그램에 리턴시키는 단계
    를 더 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  23. 제22항에 있어서,
    상기 비트 스트링내의 식별된 상기 하나 이상의 다이제스트는 상기 암호문의 일부인 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  24. 호출 프로그램으로부터 데이터를 수신하기 위한 수단; 및
    공개 키 암호화를 이용하여, 상기 데이터 및 다수의 목표 프로그램 식별자의 세트를 포함하는 다수의 값을 암호화함으로써 암호문을 생성하기 위한 수단 - 상기 다수의 목표 프로그램 식별자 각각은 상기 암호문으로부터 상기 데이터를 얻을 수 있도록 허락하는 상기 다수의 목표 프로그램 식별자 중 상이한 것을 식별함 -
    을 포함하는 것을 특징으로 하는 시스템.
  25. 호출 프로그램으로부터 비트 스트링을 수신하기 위한 수단;
    상기 호출 프로그램이 상기 비트 스트링의 암호문내의 암호화된 데이터에 접근하도록 허락된 다수의 프로그램 중의 하나인 지를 결정하기 위하여 상기 호출 프로그램의 식별자를 체크하기 위한 수단; 및
    상기 호출 프로그램이 상기 데이터에 접근하도록 허락된 다수의 프로그램 중의 하나인 경우에만, 공개 키 해독을 이용하여 해독된 상기 데이터를 상기 호출 프로그램에 리턴시키기 위한 수단
    을 포함하는 것을 특징으로 하는 시스템.
  26. 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    봉인(seal)될 데이터를 식별하는 단계; 및
    PKSeal 연산을 인보크하고(invoke), 상기 데이터를 상기 PKSeal 연산에의 입력으로서 전달하고, 상기 데이터가 봉인해제(unseal)되기 위해 만족시켜야 하는 조건들을 식별하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  27. 삭제
  28. 제26항에 있어서,
    상기 조건들은 상기 데이터를 봉인해제하도록 허락된 다수의 목표 프로그램의 식별자들을 포함하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  29. 삭제
  30. 삭제
  31. 삭제
  32. 제26항에 있어서,
    상기 조건들 중의 하나는 상기 데이터가 언제 봉인해제될 수 있는 지에 대한 시간 제약조건을 포함하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  33. 제26항에 있어서,
    상기 조건들 중의 하나는 평가될 논리식을 포함하고,
    상기 논리식이 참으로 평가되는 경우에만, 상기 데이터가 봉인해제될 수 있는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  34. 제26항에 있어서,
    상기 조건들 중의 하나는 실행될 프로그램을 포함하고,
    상기 프로그램의 실행이 참의 표시를 리턴시키는 경우에만, 상기 데이터가 봉인해제될 수 있는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  35. 삭제
  36. 삭제
  37. 삭제
  38. 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    PKSeal 연산의 인보크에 응답하여, 봉인된 비트 스트링으로부터 데이터를 얻기 위하여 PKUnseal 연산을 인보크하는 단계; 및
    상기 PKUnseal 연산의 인보크에 응답하여, 상기 데이터가 봉인해제되기 위해 만족시켜야 하는 조건들이 만족되는 경우에만, 상기 봉인된 비트 스트링으로부터 상기 데이터를 수신하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  39. 제38항에 있어서,
    상기 조건들은 상기 데이터를 봉인해제하도록 허락된 프로그램들의 식별자들을 포함하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  40. 제38항에 있어서,
    상기 조건들 중의 하나는 상기 데이터가 언제 봉인해제될 수 있는 지에 대한 시간 제약조건을 포함하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  41. 제38항에 있어서,
    상기 조건들 중의 하나는 평가될 논리식을 포함하고,
    상기 논리식이 참으로 평가되는 경우에만, 상기 데이터가 봉인해제될 수 있는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  42. 제38항에 있어서,
    상기 조건들 중의 하나는 실행될 프로그램을 포함하고,
    상기 프로그램의 실행이 참의 표시를 리턴시키는 경우에만, 상기 데이터가 봉인해제될 수 있는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  43. 루트 자원을 가드하는(guard) 최하층을 포함하는 복수의 계층 - 상기 복수의 계층은, 하나 이상의 중간층을 더 포함하되, 그 중간층은 그보다 다음으로 낮은 층으로부터 상기 루트 자원에의 접근을 요청하는 프린시펄(principal)로서 역할을 하고, 그보다 다음으로 높은 층에서 프린시펄쪽으로 상기 루트 자원에의 가드로서 역할을 함 -; 및
    상기 루트 자원에 접근하도록 인가된 프로그램에만의 상기 루트 자원에의 접근 허락 - 상기 접근 허락은 PKSeal 연산을 이용하여 상기 루트 자원을 안전하게 봉인하고 PKUnseal 연산을 이용하여 상기 루트 자원을 검색하는 것을 포함함 -
    을 포함하는 것을 특징으로 하는 시스템.
  44. 제43항에 있어서,
    상기 복수의 계층은 4개의 층을 포함하고,
    상기 최하층은 보안 커넬 층을 포함하고, 그 다음 층은 기본 입력/출력 시스템 층을 포함하고, 그 다음 층은 운영 체제 층을 포함하고, 최상층은 애플리케이션 층을 포함하는 것을 특징으로 하는 시스템.
  45. 삭제
  46. BoundSign 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    서명될 데이터 및 바운드 키 블로브(blob) 양쪽을 입력으로서 수신하는 단계 - 상기 바운드 키 블로브는 상기 하나 이상의 프로세서에 바운드됨 -;
    상기 바운드 키 블로브와 연계된 사설 키(private key)를 상기 바운드 키 블로브로부터 복원하는(recover) 단계;
    상기 사설 키를 이용하여 상기 데이터에 대한 디지털 서명을 생성하는 단계; 및
    상기 디지털 서명을 출력하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  47. 삭제
  48. 삭제
  49. BoundQuote 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    서명될 데이터 및 바운드 키 양쪽을 입력으로서 수신하는 단계 - 상기 바운드 키는 상기 하나 이상의 프로세서에 바운드됨 -;
    상기 바운드 키와 연계된 사설 키를 상기 바운드 키에 적어도 부분적으로 기초하여 재구성하는 단계;
    상기 사설 키를 이용하여 상기 데이터에 대한 디지털 서명을 생성하는 단계; 및
    상기 디지털 서명을 출력하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  50. 삭제
  51. 삭제
  52. BoundDecrypt 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    암호문 및 바운드 키 구조체 양쪽을 입력으로서 수신하는 단계 - 상기 바운드 키 구조체는 상기 하나 이상의 프로세서에 바운드됨 -;
    상기 바운드 키 구조체와 연계된 사설 키를 상기 바운드 키 구조체로부터 복원하는 단계;
    상기 암호문에 대응하는 평문을 생성하기 위하여, 상기 사설 키를 이용하여 상기 암호문을 해독하는 단계; 및
    상기 평문을 출력하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  53. 삭제
  54. 삭제
  55. BoundPkUnseal 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    암호문 및 바운드 키 양쪽을 입력으로서 수신하는 단계 - 상기 바운드 키는 상기 하나 이상의 프로세서에 바운드됨 -;
    상기 바운드 키와 연계된 사설 키를 상기 바운드 키에 적어도 부분적으로 기초하여 재구성하는 단계;
    상기 암호문에 대응하는 평문을 생성하기 위하여, 상기 사설 키를 이용하여 상기 암호문을 해독하는 단계; 및
    상기 평문을 출력하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  56. 삭제
  57. 삭제
  58. GenBoundKey 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    상기 하나 이상의 프로세서에 바운드될 신규 바운드 키에 대한 데이터 구조체를 생성하는 단계 - 상기 신규 바운드 키는 공개 키/사설 키 쌍의 사설 키가 상기 데이터 구조체로부터 복원되도록 허락하는 데이터를 포함함 -; 및
    상기 데이터 구조체를 암호적으로 보호하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  59. 삭제
  60. BoundKeyMigrate 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 하나 이상의 프로세서에 의해 실행되는 경우에 상기 하나 이상의 프로세서로 하여금:
    바운드 키를 입력으로서 수신하는 단계 - 상기 바운드 키는 프로그램에 바운드됨 -;
    상기 키에 연계된 이용 조건이 상기 프로그램에 의해 변경될 수 있는지 검증하는 단계; 및
    상기 검증이 성공하는 경우에, 상기 이용 조건을 변경하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  61. 삭제
  62. 삭제
  63. 제60항에 있어서,
    상기 하나 이상의 프로세서로 하여금 상기 키에 연계된 이용 조건이 상기 프로그램에 의해 변경될 수 있는 지를 검증하도록 하는 명령어는, 상기 하나 이상의 프로세서로 하여금 상기 BoundKeyMigrate 연산을 호출하는 프로그램이 상기 바운드 키를 이전하도록 허락되는 지를 검증하도록 하는 명령어를 포함하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  64. 삭제
  65. 삭제
  66. 삭제
  67. 제60항에 있어서,
    상기 이용 조건은 상기 바운드 키를 포함하는 데이터 구조체의 구성성분인 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  68. BoundKeyExport 연산을 구현하기 위한 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체로서,
    상기 복수의 명령어는 컴퓨팅 장치의 프로세서에 의해 실행되는 경우에 상기 프로세서로 하여금:
    바운드 키를 입력으로서 수신하는 단계 - 상기 바운드 키는 가드에 바운드됨 -;
    상기 키가 다른 가드에 재-바운드될 수 있는 지를 검증하는 단계; 및
    상기 검증이 성공하는 경우에, 상기 다른 가드에 상기 키를 재-바운드하는 단계
    를 수행하도록 하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  69. 삭제
  70. 삭제
  71. 삭제
  72. 제68항에 있어서,
    상기 프로세서로 하여금 상기 키가 다른 가드에 재-바운드될 수 있는 지를 검증하도록 하는 명령어는, 상기 프로세서로 하여금 상기 BoundKeyExport 연산을 호출하는 프로그램이 상기 바운드 키를 내보내기하도록 허락되는 지를 검증하도록 하는 명령어를 포함하는 것을 특징으로 하는 하나 이상의 컴퓨터 판독가능 매체.
  73. 삭제
  74. 삭제
  75. 삭제
KR1020030024374A 2002-04-17 2003-04-17 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체 KR100996784B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US37350502P 2002-04-17 2002-04-17
US60/373,505 2002-04-17
US10/407,117 2003-04-04
US10/407,117 US7890771B2 (en) 2002-04-17 2003-04-04 Saving and retrieving data based on public key encryption

Publications (2)

Publication Number Publication Date
KR20030082484A KR20030082484A (ko) 2003-10-22
KR100996784B1 true KR100996784B1 (ko) 2010-11-25

Family

ID=29218927

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020030024374A KR100996784B1 (ko) 2002-04-17 2003-04-17 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체

Country Status (4)

Country Link
US (7) US7890771B2 (ko)
EP (1) EP1391801B1 (ko)
JP (1) JP4689945B2 (ko)
KR (1) KR100996784B1 (ko)

Families Citing this family (83)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7174457B1 (en) 1999-03-10 2007-02-06 Microsoft Corporation System and method for authenticating an operating system to a central processing unit, providing the CPU/OS with secure storage, and authenticating the CPU/OS to a third party
US7194092B1 (en) * 1998-10-26 2007-03-20 Microsoft Corporation Key-based secure storage
US7890771B2 (en) * 2002-04-17 2011-02-15 Microsoft Corporation Saving and retrieving data based on public key encryption
US7487365B2 (en) * 2002-04-17 2009-02-03 Microsoft Corporation Saving and retrieving data based on symmetric key encryption
US20040127256A1 (en) * 2002-07-30 2004-07-01 Scott Goldthwaite Mobile device equipped with a contactless smart card reader/writer
US20040230489A1 (en) * 2002-07-26 2004-11-18 Scott Goldthwaite System and method for mobile payment and fulfillment of digital goods
WO2004088641A2 (en) * 2003-03-26 2004-10-14 Way Systems, Inc. System and method for securely storing, generating, transferring and printing electronic prepaid vouchers
US7330981B2 (en) * 2004-04-23 2008-02-12 Microsoft Corporation File locker and mechanisms for providing and using same
US7702922B2 (en) * 2004-08-17 2010-04-20 Microsoft Corporation Physical encryption key system
US20060064391A1 (en) * 2004-09-20 2006-03-23 Andrew Petrov System and method for a secure transaction module
US20110071949A1 (en) * 2004-09-20 2011-03-24 Andrew Petrov Secure pin entry device for mobile phones
US8666900B1 (en) * 2005-03-30 2014-03-04 Intuit Inc. Secure product enablement over channels with narrow bandwidth
US9497172B2 (en) * 2005-05-23 2016-11-15 Litera Corp. Method of encrypting and transferring data between a sender and a receiver using a network
US7529946B2 (en) * 2005-06-16 2009-05-05 Microsoft Corporation Enabling bits sealed to an enforceably-isolated environment
US7783896B2 (en) * 2005-09-06 2010-08-24 Research In Motion Limited System and method for management of plaintext data in a mobile data processing device
US8560853B2 (en) * 2005-09-09 2013-10-15 Microsoft Corporation Digital signing policy
US8799680B2 (en) * 2005-09-15 2014-08-05 Microsoft Corporation Transactional sealed storage
KR100781531B1 (ko) 2006-09-19 2007-12-03 삼성전자주식회사 컨텐츠 서비스 제공 방법 및 장치
US8438652B2 (en) * 2007-03-23 2013-05-07 Seagate Technology Llc Restricted erase and unlock of data storage devices
US8478988B2 (en) * 2007-05-15 2013-07-02 At&T Intellectual Property I, L.P. System and method for authentication of a communication device
US8433927B2 (en) * 2007-05-29 2013-04-30 International Business Machines Corporation Cryptographically-enabled privileged mode execution
US8332635B2 (en) * 2007-05-29 2012-12-11 International Business Machines Corporation Updateable secure kernel extensions
US8422674B2 (en) * 2007-05-29 2013-04-16 International Business Machines Corporation Application-specific secret generation
US8332636B2 (en) * 2007-10-02 2012-12-11 International Business Machines Corporation Secure policy differentiation by secure kernel design
US8724819B2 (en) * 2007-10-16 2014-05-13 Nokia Corporation Credential provisioning
EP2220808A4 (en) * 2007-12-13 2015-02-18 Symantec Corp APPARATUS AND METHOD FOR PROCESSING FRAGMENTED CRYPTOGRAPHIC KEYS
US20090325367A1 (en) 2008-05-30 2009-12-31 Alta Devices, Inc. Methods and apparatus for a chemical vapor deposition reactor
JP5457363B2 (ja) * 2008-10-10 2014-04-02 パナソニック株式会社 情報処理装置、認証システム、認証装置、情報処理方法、情報処理プログラム、記録媒体及び集積回路
US20100199233A1 (en) * 2009-01-30 2010-08-05 Petunin Vladimir V Uniquely Marking Products And Product Design Data
WO2015012782A1 (en) * 2009-12-16 2015-01-29 Robert Kulakowski Dynamic obfuscation processing
PL2520041T3 (pl) * 2009-12-30 2016-09-30 Sposób generowania tabeli korelacji dla białej skrzynki kryptograficznej
GB201003296D0 (en) * 2010-02-26 2010-04-14 Omnifone Ltd Acorn 1
KR101105095B1 (ko) * 2010-10-26 2012-01-16 김찬한 물과 증기를 사용하지 않는 콘크리트 양생시스템과 전기양생장치
US10110380B2 (en) * 2011-03-28 2018-10-23 Nxp B.V. Secure dynamic on chip key programming
US8918907B2 (en) * 2011-04-13 2014-12-23 Phoenix Technologies Ltd. Approaches for firmware to trust an application
US9063776B2 (en) * 2011-05-27 2015-06-23 Microsoft Technology Licensing, Llc Application activation framework
US8661527B2 (en) 2011-08-31 2014-02-25 Kabushiki Kaisha Toshiba Authenticator, authenticatee and authentication method
CN104067218B (zh) * 2011-12-28 2019-06-18 英特尔公司 分配存储器访问控制策略
US8739308B1 (en) 2012-03-27 2014-05-27 Amazon Technologies, Inc. Source identification for unauthorized copies of content
US9215076B1 (en) * 2012-03-27 2015-12-15 Amazon Technologies, Inc. Key generation for hierarchical data access
US8892865B1 (en) 2012-03-27 2014-11-18 Amazon Technologies, Inc. Multiple authority key derivation
US9703950B2 (en) * 2012-03-30 2017-07-11 Irdeto B.V. Method and system for preventing and detecting security threats
US9286491B2 (en) 2012-06-07 2016-03-15 Amazon Technologies, Inc. Virtual service provider zones
US10084818B1 (en) 2012-06-07 2018-09-25 Amazon Technologies, Inc. Flexibly configurable data modification services
US9590959B2 (en) 2013-02-12 2017-03-07 Amazon Technologies, Inc. Data security service
US10075471B2 (en) 2012-06-07 2018-09-11 Amazon Technologies, Inc. Data loss prevention techniques
WO2014046974A2 (en) 2012-09-20 2014-03-27 Case Paul Sr Case secure computer architecture
US8954546B2 (en) 2013-01-25 2015-02-10 Concurix Corporation Tracing with a workload distributor
US9021262B2 (en) * 2013-01-25 2015-04-28 Concurix Corporation Obfuscating trace data
US9207969B2 (en) 2013-01-25 2015-12-08 Microsoft Technology Licensing, Llc Parallel tracing for performance and detail
US20130283281A1 (en) 2013-02-12 2013-10-24 Concurix Corporation Deploying Trace Objectives using Cost Analyses
US9367697B1 (en) 2013-02-12 2016-06-14 Amazon Technologies, Inc. Data security with a security module
US8924941B2 (en) 2013-02-12 2014-12-30 Concurix Corporation Optimization analysis using similar frequencies
US10210341B2 (en) 2013-02-12 2019-02-19 Amazon Technologies, Inc. Delayed data access
US10211977B1 (en) 2013-02-12 2019-02-19 Amazon Technologies, Inc. Secure management of information using a security module
US8997063B2 (en) 2013-02-12 2015-03-31 Concurix Corporation Periodicity optimization in an automated tracing system
US9300464B1 (en) 2013-02-12 2016-03-29 Amazon Technologies, Inc. Probabilistic key rotation
US10467422B1 (en) 2013-02-12 2019-11-05 Amazon Technologies, Inc. Automatic key rotation
US9547771B2 (en) * 2013-02-12 2017-01-17 Amazon Technologies, Inc. Policy enforcement with associated data
US9705674B2 (en) 2013-02-12 2017-07-11 Amazon Technologies, Inc. Federated key management
US20140237258A1 (en) * 2013-02-20 2014-08-21 Kabushiki Kaisha Toshiba Device and authentication method therefor
US20130219372A1 (en) 2013-03-15 2013-08-22 Concurix Corporation Runtime Settings Derived from Relationships Identified in Tracer Data
US9575874B2 (en) 2013-04-20 2017-02-21 Microsoft Technology Licensing, Llc Error list and bug report analysis for configuring an application tracer
US9832171B1 (en) 2013-06-13 2017-11-28 Amazon Technologies, Inc. Negotiating a session with a cryptographic domain
US9292415B2 (en) 2013-09-04 2016-03-22 Microsoft Technology Licensing, Llc Module specific tracing in a shared module environment
CN105765528B (zh) 2013-11-13 2019-09-24 微软技术许可有限责任公司 具有可配置原点定义的应用执行路径跟踪的方法、系统和介质
US9397835B1 (en) 2014-05-21 2016-07-19 Amazon Technologies, Inc. Web of trust management in a distributed system
EP3161704B1 (en) * 2014-06-24 2021-02-17 Hewlett-Packard Development Company, L.P. Composite document access
US9438421B1 (en) 2014-06-27 2016-09-06 Amazon Technologies, Inc. Supporting a fixed transaction rate with a variably-backed logical cryptographic key
US9866392B1 (en) 2014-09-15 2018-01-09 Amazon Technologies, Inc. Distributed system web of trust provisioning
US9710675B2 (en) 2015-03-26 2017-07-18 Intel Corporation Providing enhanced replay protection for a memory
US9792229B2 (en) * 2015-03-27 2017-10-17 Intel Corporation Protecting a memory
US10469477B2 (en) 2015-03-31 2019-11-05 Amazon Technologies, Inc. Key export techniques
US10650169B2 (en) * 2015-09-14 2020-05-12 Hewlett Packard Enterprise Development Lp Secure memory systems
US10225265B1 (en) * 2016-04-15 2019-03-05 Snap Inc. End to end encryption
US10177910B2 (en) * 2016-08-31 2019-01-08 Microsoft Technology Licensing, Llc Preserving protected secrets across a secure boot update
JP7076819B2 (ja) 2016-09-15 2022-05-30 ナッツ・ホールディングス、エルエルシー 暗号化されたユーザデータの移動および記憶
EP3616356B1 (en) * 2019-03-18 2021-03-10 Advanced New Technologies Co., Ltd. Preventing misrepresentation of input data by participants in a secure multi-party computation
CN109921902B (zh) 2019-03-22 2020-10-23 创新先进技术有限公司 一种密钥管理方法、安全芯片、业务服务器及信息系统
ES2870823T3 (es) * 2019-04-19 2021-10-27 Advanced New Technologies Co Ltd Métodos y dispositivos para ejecutar aplicaciones confiables en un procesador que admite entornos de ejecución protegidos
US11048802B2 (en) * 2019-05-09 2021-06-29 X Development Llc Encrypted hard disk imaging process
AU2021251041A1 (en) 2020-04-09 2022-10-27 Nuts Holdings, Llc Nuts: flexible hierarchy object graphs
US20230237155A1 (en) * 2022-01-27 2023-07-27 Hewlett Packard Enterprise Development Lp Securing communications with security processors using platform keys

Family Cites Families (237)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5050213A (en) 1986-10-14 1991-09-17 Electronic Publishing Resources, Inc. Database usage metering and protection system and method
US4977594A (en) 1986-10-14 1990-12-11 Electronic Publishing Resources, Inc. Database usage metering and protection system and method
US4827508A (en) 1986-10-14 1989-05-02 Personal Library Software, Inc. Database usage metering and protection system and method
US4817140A (en) 1986-11-05 1989-03-28 International Business Machines Corp. Software protection system using a single-key cryptosystem, a hardware-based authorization system and a secure coprocessor
US4908861A (en) 1987-08-28 1990-03-13 International Business Machines Corporation Data authentication using modification detection codes based on a public one way encryption function
US5140634A (en) 1987-09-07 1992-08-18 U.S Philips Corporation Method and apparatus for authenticating accreditations and for authenticating and signing messages
US4969189A (en) 1988-06-25 1990-11-06 Nippon Telegraph & Telephone Corporation Authentication system and apparatus therefor
US5007082A (en) 1988-08-03 1991-04-09 Kelly Services, Inc. Computer software encryption apparatus
US5023907A (en) 1988-09-30 1991-06-11 Apollo Computer, Inc. Network license server
DE3906349A1 (de) 1989-03-01 1990-09-13 Hartmut Hennige Verfahren und vorrichtung zur vereinfachung des gebrauchs einer vielzahl von kreditkarten u. dgl.
US5038551A (en) * 1989-11-30 1991-08-13 Farmer Harold J Saddle seat riser pad
GB9010603D0 (en) * 1990-05-11 1990-07-04 Int Computers Ltd Access control in a distributed computer system
US5335334A (en) 1990-08-31 1994-08-02 Hitachi, Ltd. Data processing apparatus having a real memory region with a corresponding fixed memory protection key value and method for allocating memories therefor
US5404403A (en) * 1990-09-17 1995-04-04 Motorola, Inc. Key management in encryption systems
FR2673476B1 (fr) 1991-01-18 1996-04-12 Gemplus Card Int Procede securise de chargement de plusieurs applications dans une carte a memoire a microprocesseur.
US5940504A (en) * 1991-07-01 1999-08-17 Infologic Software, Inc. Licensing management system and method in which datagrams including an address of a licensee and indicative of use of a licensed product are sent from the licensee's site
GB2260629B (en) 1991-10-16 1995-07-26 Intel Corp A segment descriptor cache for a microprocessor
US5557518A (en) * 1994-04-28 1996-09-17 Citibank, N.A. Trusted agents for open electronic commerce
GB9126779D0 (en) 1991-12-17 1992-02-12 Int Computers Ltd Security mechanism for a computer system
US5365589A (en) 1992-02-07 1994-11-15 Gutowitz Howard A Method and apparatus for encryption, decryption and authentication using dynamical systems
JP3073590B2 (ja) * 1992-03-16 2000-08-07 富士通株式会社 電子化データ保護システム、使用許諾者側装置および使用者側装置
US5421006A (en) 1992-05-07 1995-05-30 Compaq Computer Corp. Method and apparatus for assessing integrity of computer system software
US5448716A (en) 1992-10-30 1995-09-05 International Business Machines Corporation Apparatus and method for booting a multiple processor system having a global/local memory architecture
US5418947A (en) * 1992-12-23 1995-05-23 At&T Corp. Locating information in an unsorted database utilizing a B-tree
JP3623979B2 (ja) * 1993-03-09 2005-02-23 株式会社東芝 オブジェクト走査装置及び方法
US5349643A (en) 1993-05-10 1994-09-20 International Business Machines Corporation System and method for secure initial program load for diskless workstations
US5860099A (en) * 1993-05-12 1999-01-12 Usar Systems, Inc. Stored program system with protected memory and secure signature extraction
US5375169A (en) * 1993-05-28 1994-12-20 Tecsec, Incorporated Cryptographic key management method and apparatus
US5544246A (en) 1993-09-17 1996-08-06 At&T Corp. Smartcard adapted for a plurality of service providers and for remote installation of same
WO1995016238A1 (en) * 1993-12-06 1995-06-15 Telequip Corporation Secure computer memory card
FR2713803B1 (fr) * 1993-12-07 1996-01-12 Gemplus Card Int Carte à mémoire et procédé de fonctionnement.
US5491827A (en) 1994-01-14 1996-02-13 Bull Hn Information Systems Inc. Secure application card for sharing application data and procedures among a plurality of microprocessors
US5812980A (en) 1994-02-22 1998-09-22 Sega Enterprises, Ltd. Program operating apparatus
US5473692A (en) 1994-09-07 1995-12-05 Intel Corporation Roving software license for a hardware agent
US5530758A (en) * 1994-06-03 1996-06-25 Motorola, Inc. Operational methods for a secure node in a computer network
US5724425A (en) 1994-06-10 1998-03-03 Sun Microsystems, Inc. Method and apparatus for enhancing software security and distributing software
US5483649A (en) * 1994-07-01 1996-01-09 Ybm Technologies, Inc. Personal computer security system
US5999711A (en) 1994-07-18 1999-12-07 Microsoft Corporation Method and system for providing certificates holding authentication and authorization information for users/machines
US5557765A (en) 1994-08-11 1996-09-17 Trusted Information Systems, Inc. System and method for data recovery
US5530753A (en) 1994-08-15 1996-06-25 International Business Machines Corporation Methods and apparatus for secure hardware configuration
US5870467A (en) 1994-09-16 1999-02-09 Kabushiki Kaisha Toshiba Method and apparatus for data input/output management suitable for protection of electronic writing data
JPH08137686A (ja) * 1994-09-16 1996-05-31 Toshiba Corp 著作物データ管理方法及び著作物データ管理装置
US5654746A (en) * 1994-12-01 1997-08-05 Scientific-Atlanta, Inc. Secure authorization and control method and apparatus for a game delivery service
US5615263A (en) 1995-01-06 1997-03-25 Vlsi Technology, Inc. Dual purpose security architecture with protected internal operating system
US5673319A (en) * 1995-02-06 1997-09-30 International Business Machines Corporation Block cipher mode of operation for secure, length-preserving encryption
DE69638018D1 (de) * 1995-02-13 2009-10-15 Intertrust Tech Corp Systeme und Verfahren zur Verwaltung von gesicherten Transaktionen und zum Schutz von elektronischen Rechten
US6157721A (en) * 1996-08-12 2000-12-05 Intertrust Technologies Corp. Systems and methods using cryptography to protect secure computing environments
US5943422A (en) * 1996-08-12 1999-08-24 Intertrust Technologies Corp. Steganographic techniques for securely delivering electronic digital rights management control information over insecure communication channels
US5892900A (en) * 1996-08-30 1999-04-06 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
US5559957A (en) 1995-05-31 1996-09-24 Lucent Technologies Inc. File system for a data storage device having a power fail recovery mechanism for write/replace operations
US5745886A (en) * 1995-06-07 1998-04-28 Citibank, N.A. Trusted agents for open distribution of electronic money
US5664016A (en) * 1995-06-27 1997-09-02 Northern Telecom Limited Method of building fast MACS from hash functions
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
US5638446A (en) 1995-08-28 1997-06-10 Bell Communications Research, Inc. Method for the secure distribution of electronic files in a distributed environment
US5671280A (en) * 1995-08-30 1997-09-23 Citibank, N.A. System and method for commercial payments using trusted agents
US5721781A (en) * 1995-09-13 1998-02-24 Microsoft Corporation Authentication system and method for smart card transactions
US5825876A (en) * 1995-12-04 1998-10-20 Northern Telecom Time based availability to content of a storage medium
US5857020A (en) * 1995-12-04 1999-01-05 Northern Telecom Ltd. Timed availability of secured content provisioned on a storage medium
US5812662A (en) * 1995-12-18 1998-09-22 United Microelectronics Corporation Method and apparatus to protect computer software
US5724527A (en) 1995-12-28 1998-03-03 Intel Corporation Fault-tolerant boot strap mechanism for a multiprocessor system
JPH09251426A (ja) * 1996-01-10 1997-09-22 Hitachi Ltd ファイル暗号化システム及びその制御方法ならびに暗号ファイル受信システム及びその制御方法
JP2000503154A (ja) * 1996-01-11 2000-03-14 エムアールジェイ インコーポレイテッド デジタル所有権のアクセスと分配を制御するためのシステム
TW346571B (en) 1996-02-06 1998-12-01 Matsushita Electric Ind Co Ltd Data reception apparatus, data transmission apparatus, information processing system, data reception method
US6038551A (en) 1996-03-11 2000-03-14 Microsoft Corporation System and method for configuring and managing resources on a multi-purpose integrated circuit card using a personal computer
US5991876A (en) * 1996-04-01 1999-11-23 Copyright Clearance Center, Inc. Electronic rights management and authorization system
US5778069A (en) * 1996-04-10 1998-07-07 Microsoft Corporation Non-biased pseudo random number generator
US5978484A (en) * 1996-04-25 1999-11-02 Microsoft Corporation System and method for safety distributing executable objects
US5802592A (en) 1996-05-31 1998-09-01 International Business Machines Corporation System and method for protecting integrity of alterable ROM using digital signatures
US5944821A (en) * 1996-07-11 1999-08-31 Compaq Computer Corporation Secure software registration and integrity assessment in a computer system
US5872847A (en) * 1996-07-30 1999-02-16 Itt Industries, Inc. Using trusted associations to establish trust in a computer network
US6148083A (en) 1996-08-23 2000-11-14 Hewlett-Packard Company Application certification for an international cryptography framework
US6745936B1 (en) 1996-08-23 2004-06-08 Orion Systems, Inc. Method and apparatus for generating secure endorsed transactions
US5841869A (en) * 1996-08-23 1998-11-24 Cheyenne Property Trust Method and apparatus for trusted processing
US5892902A (en) * 1996-09-05 1999-04-06 Clark; Paul C. Intelligent token protected system with network authentication
US5958050A (en) * 1996-09-24 1999-09-28 Electric Communities Trusted delegation system
US5937063A (en) 1996-09-30 1999-08-10 Intel Corporation Secure boot
US5844986A (en) 1996-09-30 1998-12-01 Intel Corporation Secure BIOS
US6006332A (en) 1996-10-21 1999-12-21 Case Western Reserve University Rights management system for digital media
GB9622177D0 (en) * 1996-10-24 1996-12-18 Xaar Ltd Passivation of ink jet print heads
PT932865E (pt) 1996-10-25 2002-12-31 Schlumberger Systems & Service Utilizacao de linguagem de programacao de nivel elevado com um microcontrolador
JPH10133955A (ja) * 1996-10-29 1998-05-22 Matsushita Electric Ind Co Ltd 可搬型メディア駆動装置とその方法、及び可搬型メディアとネットワークの連携装置とその方法
US5892904A (en) * 1996-12-06 1999-04-06 Microsoft Corporation Code certification for network transmission
US6367012B1 (en) * 1996-12-06 2002-04-02 Microsoft Corporation Embedding certifications in executable files for network transmission
US5757919A (en) * 1996-12-12 1998-05-26 Intel Corporation Cryptographically protected paging subsystem
US6009274A (en) 1996-12-13 1999-12-28 3Com Corporation Method and apparatus for automatically updating software components on end systems over a network
US6381741B1 (en) * 1998-05-18 2002-04-30 Liberate Technologies Secure data downloading, recovery and upgrading
US6192473B1 (en) * 1996-12-24 2001-02-20 Pitney Bowes Inc. System and method for mutual authentication and secure communications between a postage security device and a meter server
US6073124A (en) * 1997-01-29 2000-06-06 Shopnow.Com Inc. Method and system for securely incorporating electronic information into an online purchasing application
US6542610B2 (en) * 1997-01-30 2003-04-01 Intel Corporation Content protection for digital transmission systems
US5953502A (en) * 1997-02-13 1999-09-14 Helbig, Sr.; Walter A Method and apparatus for enhancing computer system security
US5920861A (en) * 1997-02-25 1999-07-06 Intertrust Technologies Corp. Techniques for defining using and manipulating rights management data structures
US6477648B1 (en) 1997-03-23 2002-11-05 Novell, Inc. Trusted workstation in a networked client/server computing system
US5995625A (en) * 1997-03-24 1999-11-30 Certco, Llc Electronic cryptographic packing
US7079649B1 (en) 1997-03-27 2006-07-18 British Telecommunications Public Limited Company Copy protection of data
US6028933A (en) * 1997-04-17 2000-02-22 Lucent Technologies Inc. Encrypting method and apparatus enabling multiple access for multiple services and multiple transmission modes over a broadband communication network
US6212636B1 (en) * 1997-05-01 2001-04-03 Itt Manufacturing Enterprises Method for establishing trust in a computer network via association
US6557104B2 (en) 1997-05-02 2003-04-29 Phoenix Technologies Ltd. Method and apparatus for secure processing of cryptographic keys
US5974546A (en) 1997-05-08 1999-10-26 Micron Electronics, Inc. Apparatus and method to determine cause of failed boot sequence to improve likelihood of successful subsequent boot attempt
EP1653463A1 (en) * 1997-05-13 2006-05-03 Kabushiki Kaisha Toshiba License information copying method and apparatus, license information moving method
US6335972B1 (en) * 1997-05-23 2002-01-01 International Business Machines Corporation Framework-based cryptographic key recovery system
US6070243A (en) * 1997-06-13 2000-05-30 Xylan Corporation Deterministic user authentication service for communication network
US6453334B1 (en) 1997-06-16 2002-09-17 Streamtheory, Inc. Method and apparatus to allow remotely located computer programs and/or data to be accessed on a local computer in a secure, time-limited manner, with persistent caching
US6229894B1 (en) * 1997-07-14 2001-05-08 Entrust Technologies, Ltd. Method and apparatus for access to user-specific encryption information
JPH1145507A (ja) * 1997-07-24 1999-02-16 Toshiba Corp 情報再生装置、認識装置、情報処理システム
US5919257A (en) * 1997-08-08 1999-07-06 Novell, Inc. Networked workstation intrusion detection system
US6032257A (en) * 1997-08-29 2000-02-29 Compaq Computer Corporation Hardware theft-protection architecture
US6351536B1 (en) * 1997-10-01 2002-02-26 Minoru Sasaki Encryption network system and method
US6185678B1 (en) * 1997-10-02 2001-02-06 Trustees Of The University Of Pennsylvania Secure and reliable bootstrap architecture
US6148387A (en) * 1997-10-09 2000-11-14 Phoenix Technologies, Ltd. System and method for securely utilizing basic input and output system (BIOS) services
US6026166A (en) * 1997-10-20 2000-02-15 Cryptoworx Corporation Digitally certifying a user identity and a computer system in combination
US6112181A (en) * 1997-11-06 2000-08-29 Intertrust Technologies Corporation Systems and methods for matching, selecting, narrowcasting, and/or classifying based on rights management and/or other information
US5991399A (en) * 1997-12-18 1999-11-23 Intel Corporation Method for securely distributing a conditional use private key to a trusted entity on a remote system
US6560706B1 (en) 1998-01-26 2003-05-06 Intel Corporation Interface for ensuring system boot image integrity and authenticity
JPH11265317A (ja) * 1998-03-16 1999-09-28 Nippon Telegr & Teleph Corp <Ntt> 著作権保護システム
US20010044901A1 (en) * 1998-03-24 2001-11-22 Symantec Corporation Bubble-protected system for automatic decryption of file data on a per-use basis and automatic re-encryption
US6148402A (en) 1998-04-01 2000-11-14 Hewlett-Packard Company Apparatus and method for remotely executing commands using distributed computing environment remote procedure calls
US6009401A (en) 1998-04-06 1999-12-28 Preview Systems, Inc. Relicensing of electronically purchased software
US6175917B1 (en) * 1998-04-23 2001-01-16 Vpnet Technologies, Inc. Method and apparatus for swapping a computer operating system
US6118873A (en) * 1998-04-24 2000-09-12 International Business Machines Corporation System for encrypting broadcast programs in the presence of compromised receiver devices
US6092189A (en) * 1998-04-30 2000-07-18 Compaq Computer Corporation Channel configuration program server architecture
US6223284B1 (en) * 1998-04-30 2001-04-24 Compaq Computer Corporation Method and apparatus for remote ROM flashing and security management for a computer system
US6363486B1 (en) * 1998-06-05 2002-03-26 Intel Corporation Method of controlling usage of software components
US6189100B1 (en) * 1998-06-30 2001-02-13 Microsoft Corporation Ensuring the integrity of remote boot client data
US6263445B1 (en) * 1998-06-30 2001-07-17 Emc Corporation Method and apparatus for authenticating connections to a storage system coupled to a network
US6105137A (en) * 1998-07-02 2000-08-15 Intel Corporation Method and apparatus for integrity verification, authentication, and secure linkage of software modules
US6401208B2 (en) 1998-07-17 2002-06-04 Intel Corporation Method for BIOS authentication prior to BIOS execution
US6189103B1 (en) 1998-07-21 2001-02-13 Novell, Inc. Authority delegation with secure operating system queues
JP3216607B2 (ja) * 1998-07-29 2001-10-09 日本電気株式会社 デジタル著作物流通システム及び方法、デジタル著作物再生装置及び方法、並びに記録媒体
US6983371B1 (en) * 1998-10-22 2006-01-03 International Business Machines Corporation Super-distribution of protected digital content
US7346580B2 (en) * 1998-08-13 2008-03-18 International Business Machines Corporation Method and system of preventing unauthorized rerecording of multimedia content
US6226618B1 (en) * 1998-08-13 2001-05-01 International Business Machines Corporation Electronic content delivery system
US6735696B1 (en) 1998-08-14 2004-05-11 Intel Corporation Digital content protection using a secure booting method and apparatus
US6230285B1 (en) * 1998-09-08 2001-05-08 Symantec Corporation Boot failure recovery
US6327660B1 (en) 1998-09-18 2001-12-04 Intel Corporation Method for securing communications in a pre-boot environment
KR100484209B1 (ko) * 1998-09-24 2005-09-30 삼성전자주식회사 디지털컨텐트암호화/해독화장치및그방법
JP4410324B2 (ja) * 1998-10-16 2010-02-03 富士通株式会社 資格管理方法および装置
US6609199B1 (en) 1998-10-26 2003-08-19 Microsoft Corporation Method and apparatus for authenticating an open system application to a portable IC device
US7194092B1 (en) * 1998-10-26 2007-03-20 Microsoft Corporation Key-based secure storage
US6820063B1 (en) 1998-10-26 2004-11-16 Microsoft Corporation Controlling access to content based on certificates and access predicates
US7174457B1 (en) 1999-03-10 2007-02-06 Microsoft Corporation System and method for authenticating an operating system to a central processing unit, providing the CPU/OS with secure storage, and authenticating the CPU/OS to a third party
US6327652B1 (en) 1998-10-26 2001-12-04 Microsoft Corporation Loading and identifying a digital rights management operating system
US7017188B1 (en) 1998-11-16 2006-03-21 Softricity, Inc. Method and apparatus for secure content delivery over broadband access networks
US6237785B1 (en) * 1998-11-20 2001-05-29 Westinghouse Air Brake Company Retainer member for use in railway coupling devices
US6330588B1 (en) 1998-12-21 2001-12-11 Philips Electronics North America Corporation Verification of software agents and agent activities
US6272629B1 (en) * 1998-12-29 2001-08-07 Intel Corporation Method and apparatus for establishing network connection for a processor without an operating system boot
US6263431B1 (en) * 1998-12-31 2001-07-17 Intle Corporation Operating system bootstrap security mechanism
US7130831B2 (en) * 1999-02-08 2006-10-31 Copyright Clearance Center, Inc. Limited-use browser and security system
JP2000236325A (ja) 1999-02-09 2000-08-29 Lg Electronics Inc デジタルデータファイルの暗号化装置及びその方法
US6480961B2 (en) 1999-03-02 2002-11-12 Audible, Inc. Secure streaming of digital audio/visual content
JP2000260121A (ja) * 1999-03-05 2000-09-22 Toshiba Corp 情報再生装置および情報記録装置
US7103574B1 (en) * 1999-03-27 2006-09-05 Microsoft Corporation Enforcement architecture and method for digital rights management
US6389537B1 (en) * 1999-04-23 2002-05-14 Intel Corporation Platform and method for assuring integrity of trusted agent communications
JP4177514B2 (ja) 1999-04-28 2008-11-05 株式会社東芝 コンピュータシステムおよびコンテンツ保護方法
US7263722B1 (en) * 1999-05-12 2007-08-28 Fraunhofer Crcg, Inc. Obfuscation of executable code
US7421586B2 (en) * 1999-05-12 2008-09-02 Fraunhofer Gesselschaft Protecting mobile code against malicious hosts
US6694025B1 (en) * 1999-06-02 2004-02-17 Koninklijke Philips Electronics N.V. Method and apparatus for secure distribution of public/private key pairs
US7062471B1 (en) 1999-06-07 2006-06-13 Nippon Telegraph And Telephone Corporation Electronic rights information processing system, method and apparatus for carrying out same and recorded medium for program carrying out the method
US7142676B1 (en) 1999-06-08 2006-11-28 Entrust Limited Method and apparatus for secure communications using third-party key provider
US6681214B1 (en) * 1999-06-29 2004-01-20 Assure Systems, Inc. Secure system for printing authenticating digital signatures
KR100751199B1 (ko) * 1999-07-06 2007-08-22 소니 가부시끼 가이샤 관리 장치 및 데이터 처리 장치
US7188240B1 (en) 1999-07-15 2007-03-06 International Business Machines Corporation Method and system for encryption of web browser cache
US6757831B1 (en) * 1999-08-18 2004-06-29 Sun Microsystems, Inc. Logic block used to check instruction buffer configuration
US6675298B1 (en) * 1999-08-18 2004-01-06 Sun Microsystems, Inc. Execution of instructions using op code lengths longer than standard op code lengths to encode data
US6477252B1 (en) 1999-08-29 2002-11-05 Intel Corporation Digital video content transmission ciphering and deciphering method and apparatus
US7761465B1 (en) 1999-09-17 2010-07-20 Sony Corporation Data providing system and method therefor
US20030014315A1 (en) * 1999-12-03 2003-01-16 Harri Jaalinoja Method and a system for obtaining services using a cellular telecommunication system
US7047411B1 (en) * 1999-12-17 2006-05-16 Microsoft Corporation Server for an electronic distribution system and method of operating same
US6996720B1 (en) 1999-12-17 2006-02-07 Microsoft Corporation System and method for accessing protected content in a rights-management architecture
JP2001209583A (ja) 2000-01-26 2001-08-03 Sony Corp データ記録再生器およびセーブデータ処理方法、並びにプログラム提供媒体
ATE533292T1 (de) * 2000-02-09 2011-11-15 Swisscom Ag Decodiergerät, decodierverfahren und chipkarte
JP4226760B2 (ja) 2000-05-08 2009-02-18 株式会社東芝 マイクロプロセッサ、これを用いたマルチタスク実行方法、およびマルチレッド実行方法
WO2001061600A1 (en) * 2000-02-17 2001-08-23 Matsushita Electric Industrial Co., Ltd. Semiconductor memory card that records contents for trial and purchase, recording apparatus, reproducing apparatus, and sales method
KR100430147B1 (ko) 2000-03-15 2004-05-03 인터내셔널 비지네스 머신즈 코포레이션 컴퓨터 액세스 제어
CN1225882C (zh) * 2000-03-27 2005-11-02 三洋电机株式会社 数据分配服务器,终端以及使用了这些设备的数据分配系统
US6754815B1 (en) * 2000-03-31 2004-06-22 Intel Corporation Method and system for scrubbing an isolated area of memory after reset of a processor operating in isolated execution mode if a cleanup flag is set
US20020094111A1 (en) * 2000-05-19 2002-07-18 Puchek Daniel R. Access control method and apparatus
AU7593601A (en) * 2000-07-14 2002-01-30 Atabok Inc Controlling and managing digital assets
JP4503794B2 (ja) * 2000-07-19 2010-07-14 株式会社日立製作所 コンテンツ提供方法及び装置
JP4304844B2 (ja) 2000-08-03 2009-07-29 ソニー株式会社 Os上のセキュアなタスク間通信方法
EP1316168A4 (en) 2000-08-04 2006-05-10 First Data Corp METHOD AND DEVICE FOR USE OF ELECTRONIC COMMUNICATION IN AN ELECTRONIC CONTRACT
EP1316169B1 (en) 2000-09-01 2004-06-16 724 Solutions Inc. Public key infrastructure systems and methods
JP4770012B2 (ja) * 2000-10-06 2011-09-07 ソニー株式会社 メモリ装置
JP4470312B2 (ja) * 2000-10-10 2010-06-02 ソニー株式会社 サーバ装置、再生装置、データ配信方法、データ再生方法、記憶媒体
US20020042754A1 (en) * 2000-10-10 2002-04-11 Del Beccaro David J. System and method for receiving broadcast audio/video works and for enabling a consumer to purchase the received audio/video works
DE60117618T2 (de) 2000-10-26 2006-12-14 General Instrument Corporation Anfängliche Betrachtungsperiode für die Autorisierung von Multimedia-Inhalten
US7143289B2 (en) * 2000-10-30 2006-11-28 Geocodex Llc System and method for delivering encrypted information in a communication network using location identity and key tables
US20020071565A1 (en) 2000-12-11 2002-06-13 Kurn David Michael Software process pre-authorization scheme for applications on a computer system
US6978376B2 (en) * 2000-12-15 2005-12-20 Authentica, Inc. Information security architecture for encrypting documents for remote access while maintaining access control
US6970562B2 (en) 2000-12-19 2005-11-29 Tricipher, Inc. System and method for crypto-key generation and use in cryptosystem
CN1165049C (zh) * 2000-12-28 2004-09-01 日本胜利株式会社 内容记录装置、重放装置、传送方法及接收方法
US7421082B2 (en) 2000-12-28 2008-09-02 Sony Corporation Data delivery method and data delivery system using sets of passkeys generated by dividing an encryption key
US20020094089A1 (en) 2000-12-28 2002-07-18 Shigeki Kamiya Data delivery method and data delivery system
JP4281252B2 (ja) * 2001-01-16 2009-06-17 ソニー株式会社 情報記録装置、情報再生装置、情報記録方法、情報再生方法、および情報記録媒体、並びにプログラム記憶媒体
JP4098478B2 (ja) 2001-01-31 2008-06-11 株式会社東芝 マイクロプロセッサ
US6882989B2 (en) * 2001-02-23 2005-04-19 Bbnt Solutions Llc Genetic algorithm techniques and applications
US6934389B2 (en) 2001-03-02 2005-08-23 Ati International Srl Method and apparatus for providing bus-encrypted copy protection key to an unsecured bus
DE10114157A1 (de) 2001-03-22 2002-09-26 Deutsche Telekom Ag Verfahren zur rechnergestützten Erzeugung von öffentlichen Schlüsseln zur Verschlüsselung von Nachrichten und Vorrichtung zur Durchführung des Verfahrens
JP2002288375A (ja) * 2001-03-26 2002-10-04 Sanyo Electric Co Ltd コンテンツ提供装置、コンテンツ提供方法およびライセンスサーバ
US7580988B2 (en) * 2001-04-05 2009-08-25 Intertrust Technologies Corporation System and methods for managing the distribution of electronic content
US7603703B2 (en) 2001-04-12 2009-10-13 International Business Machines Corporation Method and system for controlled distribution of application code and content data within a computer network
US6754854B2 (en) * 2001-06-04 2004-06-22 Motorola, Inc. System and method for event monitoring and error detection
US7007025B1 (en) * 2001-06-08 2006-02-28 Xsides Corporation Method and system for maintaining secure data input and output
US7237121B2 (en) * 2001-09-17 2007-06-26 Texas Instruments Incorporated Secure bootloader for securing digital devices
US20030009681A1 (en) * 2001-07-09 2003-01-09 Shunji Harada Digital work protection system, recording medium apparatus, transmission apparatus, and playback apparatus
US7111285B2 (en) * 2001-07-17 2006-09-19 Liquid Machines, Inc. Method and system for protecting software applications against static and dynamic software piracy techniques
US7188085B2 (en) * 2001-07-20 2007-03-06 International Business Machines Corporation Method and system for delivering encrypted content with associated geographical-based advertisements
WO2003027848A2 (en) * 2001-08-03 2003-04-03 Matsushita Electric Industrial Co., Ltd. Backup-restoration system and right management server
US7983419B2 (en) * 2001-08-09 2011-07-19 Trimble Navigation Limited Wireless device to network server encryption
TWI236250B (en) * 2001-09-12 2005-07-11 Nagravision Sa Data transmission method between a local server and local peripherals
US6983376B2 (en) * 2001-10-16 2006-01-03 Qualcomm Incorporated Method and apparatus for providing privacy of user identity and characteristics in a communication system
US20030079133A1 (en) * 2001-10-18 2003-04-24 International Business Machines Corporation Method and system for digital rights management in content distribution application
US7725490B2 (en) * 2001-11-16 2010-05-25 Crucian Global Services, Inc. Collaborative file access management system
US20030108202A1 (en) 2001-12-12 2003-06-12 Clapper Edward O. Location dependent encryption and/or decryption
US7260555B2 (en) * 2001-12-12 2007-08-21 Guardian Data Storage, Llc Method and architecture for providing pervasive security to digital assets
US7783765B2 (en) * 2001-12-12 2010-08-24 Hildebrand Hal S System and method for providing distributed access control to secured documents
US7103771B2 (en) 2001-12-17 2006-09-05 Intel Corporation Connecting a virtual token to a physical token
US20030126454A1 (en) 2001-12-28 2003-07-03 Glew Andrew F. Authenticated code method and apparatus
US7480806B2 (en) 2002-02-22 2009-01-20 Intel Corporation Multi-token seal and unseal
JP3863447B2 (ja) 2002-03-08 2006-12-27 インターナショナル・ビジネス・マシーンズ・コーポレーション 認証システム、ファームウェア装置、電気機器、及び認証方法
US20030174838A1 (en) * 2002-03-14 2003-09-18 Nokia Corporation Method and apparatus for user-friendly peer-to-peer distribution of digital rights management protected content and mechanism for detecting illegal content distributors
US7305704B2 (en) * 2002-03-16 2007-12-04 Trustedflow Systems, Inc. Management of trusted flow system
US7509687B2 (en) * 2002-03-16 2009-03-24 Trustedflow Systems, Inc. Remotely authenticated operation method
US7343493B2 (en) 2002-03-28 2008-03-11 Lenovo (Singapore) Pte. Ltd. Encrypted file system using TCPA
CA2778805C (en) 2002-04-17 2015-01-20 Microsoft Corporation Saving and retrieving data based on public key encryption
US7890771B2 (en) 2002-04-17 2011-02-15 Microsoft Corporation Saving and retrieving data based on public key encryption
US7487365B2 (en) 2002-04-17 2009-02-03 Microsoft Corporation Saving and retrieving data based on symmetric key encryption
US7392415B2 (en) 2002-06-26 2008-06-24 Intel Corporation Sleep protection
US7333615B1 (en) * 2002-06-26 2008-02-19 At&T Delaware Intellectual Property, Inc. Encryption between multiple devices
US7200868B2 (en) * 2002-09-12 2007-04-03 Scientific-Atlanta, Inc. Apparatus for encryption key management
US7283629B2 (en) 2002-12-05 2007-10-16 Microsoft Corporation Deriving keys used to securely process electronic messages
US7318235B2 (en) 2002-12-16 2008-01-08 Intel Corporation Attestation using both fixed token and portable token
US7493429B2 (en) * 2003-07-08 2009-02-17 Microsoft Corporation Communication of information via a side-band channel, and use of same to verify positional relationship
US6988842B2 (en) * 2003-09-30 2006-01-24 Pitney Bowes Inc. Method and apparatus for continuous high speed digital metering using multiple print heads
US7457872B2 (en) * 2003-10-15 2008-11-25 Microsoft Corporation On-line service/application monitoring and reporting system
US7125411B2 (en) * 2003-11-14 2006-10-24 Guanche Carlos A Cannula delivery and support system
US7551986B2 (en) * 2004-02-24 2009-06-23 Denso Corporation Program distribution system, program distribution device, and in-vehicle gateway device
US9542671B2 (en) 2004-05-12 2017-01-10 Paypal, Inc. Method and system to facilitate securely processing a payment for an online transaction

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
논문(1997.04.30)

Also Published As

Publication number Publication date
US20030200450A1 (en) 2003-10-23
US20110154057A1 (en) 2011-06-23
US7890771B2 (en) 2011-02-15
US8621243B2 (en) 2013-12-31
US7765397B2 (en) 2010-07-27
US8589701B2 (en) 2013-11-19
US20110119500A1 (en) 2011-05-19
EP1391801B1 (en) 2020-02-12
EP1391801A2 (en) 2004-02-25
EP1391801A3 (en) 2004-03-10
KR20030082484A (ko) 2003-10-22
JP2004005595A (ja) 2004-01-08
US20110119501A1 (en) 2011-05-19
JP4689945B2 (ja) 2011-06-01
US9183406B2 (en) 2015-11-10
US20070088949A1 (en) 2007-04-19
US8601286B2 (en) 2013-12-03
US20110119502A1 (en) 2011-05-19
US20110119505A1 (en) 2011-05-19
US8683230B2 (en) 2014-03-25

Similar Documents

Publication Publication Date Title
KR100996784B1 (ko) 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
KR101067399B1 (ko) 대칭 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
KR100611687B1 (ko) 멀티-토큰 실 및 실 해제
CA2425006C (en) Saving and retrieving data based on symmetric key encryption
CN115580413B (zh) 一种零信任的多方数据融合计算方法和装置
Malipatlolla SUSTAINABLE TRUSTED COMPUTING
Malipatlolla Sustainable Trusted Computing: A Novel Approach for a Flexible and Secure Update of Cryptographic Engines on a Trusted Platform Module

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
FPAY Annual fee payment

Payment date: 20131016

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20141017

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20151016

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20161019

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20171018

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20181018

Year of fee payment: 9