KR20030014616A - 마이크로프로세서 - Google Patents

마이크로프로세서 Download PDF

Info

Publication number
KR20030014616A
KR20030014616A KR1020020046517A KR20020046517A KR20030014616A KR 20030014616 A KR20030014616 A KR 20030014616A KR 1020020046517 A KR1020020046517 A KR 1020020046517A KR 20020046517 A KR20020046517 A KR 20020046517A KR 20030014616 A KR20030014616 A KR 20030014616A
Authority
KR
South Korea
Prior art keywords
key
microprocessor
register
program
context
Prior art date
Application number
KR1020020046517A
Other languages
English (en)
Other versions
KR100550593B1 (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 KR20030014616A publication Critical patent/KR20030014616A/ko
Application granted granted Critical
Publication of KR100550593B1 publication Critical patent/KR100550593B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/72Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/123Restricting unauthorised execution of programs by using dedicated hardware, e.g. dongles, smart cards, cryptographic processors, global positioning systems [GPS] devices
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3271Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using challenge-response
    • H04L9/3278Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using challenge-response using physically unclonable functions [PUF]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Radar, Positioning & Navigation (AREA)
  • Remote Sensing (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)
  • Microcomputers (AREA)

Abstract

본 발명은 내탬퍼성, 성능을 유지하면서, 멀티프로세스, 멀티사용자 환경 등에 용이하게 대응할 수 있는 마이크로프로세서를 제공한다.
전원투입시, 리셋시에 난수발생부(104)는 마이크로프로세서(100) 외부로부터는 추측되지 않는 난수를 발생시키고, 발생한 난수에 따라 프로세서 일시 키(Kc)를 생성한다. 이 프로세서 일시 키(Kc)는 난수유지부(105)에 유지된다. 예외검출부 (108)가 인터럽트, 프로세스의 절환 등의 예외 상태를 검출하면, 연산처리부(103)는 암호화 처리부(109)에, 레지스터군(102)내의 각 레지스터의 값 등의 콘텍스트의 퇴피를 지시한다. 이에 따라, 암호화 처리부(109)는 프로세서 일시 키(Kc)에 의해 콘텍스트를 암호화한다. 암호화된 콘텍스트는 외부메모리(1)에 격납(格納)된다.

Description

마이크로프로세서 {A MICROPROCESSOR}
본 발명은 내탬퍼성(tamper resistant)을 향상시킨 마이크로프로세서에 관한 것이다.
근래의 컴퓨터 이용기술의 진전에 따라 프로그램의 해석, 복제 등이 종래와 비교하여 용이하게 행할 수 있는 상황으로 되고 있다. 이 때문에, 프로그램의 내부의 비밀을 보다 확실히 보호하기 위해, 프로그램 등의 내부의 비밀의 해석의 곤란성(내탬퍼성)을 높이는 기술이 요구되고 있다.
(1) 내탬퍼ㆍ소프트웨어기술
이러한 기술로서, 예컨대 내탬퍼ㆍ소프트웨어기술(David Aucsmith.,et al; "Tamper Resistant Software: An Implementation", Proceeding of the 1996, Intel Software Developer's Conference)이 알려져 있다.
이 문헌에 개시되어 있는 기술에서는, 프로그램의 일부 혹은 전부를 암호화하여 배포ㆍ보존하고, 이것을 실행할 때에 프로그램 자체가 프로그램과 내부의 데이터 등을 복호화하여 실행하고, 종료시에 필요하면 재차 암호화하도록 되어 있다.
그렇지만, 내탬퍼ㆍ소프트웨어 기술은 기본적으로 역어셈블러, 디버거 등의 해석툴에 의한 해석을 곤란하게 하기 위한 것이기 때문에, 프로그램이 종래의 프로세서에 의해 실행가능한 이상, 프로그램의 개시시부터 차례를 따라 해석해 가면, 반드시 프로그램의 실행과정을 해석하는 것이 가능하다.
예컨대, 프로세서의 입출력신호를 감시하는 ICE(In Circuit Emulator) 등의 장치, 특권레벨의 다른 프로그램 등에 의해 프로그램의 실행시에서의 프로세서의 입출력신호 혹은 메모리의 내용이 알려져 버릴 우려가 있다. 이와 같이, 프로세서의 입출력신호, 메모리의 내용 등이 해석되어 버리면, 프로그램이 실행하고 있는 처리가 추측되어 버려, 프로그램 내부의 비밀이 추측되어 버릴 가능성이 있다.
이 때문에, 외부의 프로그램, 해석장치 등으로부터 참조할 수 없도록 프로세서 내부에서 취급하는 데이터의 비밀을 유지하는 기능을 갖춘 프로세서가 요구되고 있다.
(2) 암호화ㆍ복호화를 행하는 프로세서
이를 위해, 프로그램의 암호화ㆍ복호화의 처리를 프로세서 내부에서 실행함으로써, 프로그램, 데이터의 비밀을 지키는 기술이, 예컨대 햄프슨(Hampson)에 의한 미국특허 제4,847,902호, 하트맨(Hartman)의 미국특허 제5,224,166호, 데이비스의 미국특허 제5,806,706호, 다카하시의 미국특허 제5,825,878호, 레오나르드 등의 미국특허 제6,003,117호, 특개평 11-282756호 등으로서 알려져 있다.
이들 문헌에 개시된 기술을 이용함으로써, 암호로 보호된 상태에서 프로그램을 배포할 수 있다. 이와 같이 암호화되어 배포된 프로그램은, 암호키를 알 수 없어 역어셈블 등에 의한 실행과정의 해석, 의도한 상태로의 프로그램의 개변 등을 행하는 것이 암호학적으로 곤란하게 된다.
그러나, 이들 기술에서는 복수의 프로세스(태스크, 잡(job), 스레드(thread) 등)가 병행하여 실행되는 멀티프로세스 환경하에서의 동작까지는 고려되고 있지 않다.
멀티프로세스 환경하에서는 프로세스의 절환시에 레지스터 등의 프로세서의 실행상태를 나타내는 정보(콘텍스트)의 퇴피/복귀를 행하는 콘텍스트 스위치로 불리는 처리를 이용하여, 복수의 프로세스를 시분할로 실행한다. 이 콘텍스트 스위치의 과정에서는 오퍼레이팅 시스템(OS) 등의 특권을 갖는 프로세스는 프로세서의 콘텍스트의 읽고 쓰기를 행할 수 있다.
이 때문에, OS 등의 특권 프로세스는 의도적으로 프로그램의 콘텍스트를 독출하거나, 콘텍스트를 개찬(改竄)함으로써, 프로그램의 동작 등의 비밀을 해석할 수 있을 가능성이 있다.
(3) 콘텍스트를 하드웨어에 의해 암호화ㆍ복호화하는 기술
이 문제를 해결하기 위해, 특원 2000-133010호에 있어서 개시된 기술에서는 콘텍스트 스위치를 하드웨어로 실행하고, 콘텍스트의 퇴피시에 콘텍스트를 암호화하여 메모리에 퇴피함으로써, OS 등의 특권 프롯세스가 콘텍스트의 내용을 알 수 없도록 하고 있다. 이에 따라, 메모리에 퇴피한 콘텍스트를 해석하여 프로그램의 동작 등의 비밀을 해석하는 것이 암호학적으로 곤란하게 된다.
그렇지만, 이 기술에서는 콘텍스트의 암호화ㆍ복호화의 처리 부하가 비교적 높고, 빈번하게 콘텍스트 스위치를 행하는 멀티프로세스 환경하에서는, 콘텍스트 스위치에 의한 오버헤드가 크다. 이 때문에, 콘텍스트 스위치의 부하의 저감이 요망되고 있었다.
(4) 콘텍스트 스위치 부하의 경감
이를 위해, 특원 2000-333635호에 있어서 개시된 기술에서는, 콘텍스트 스위치에 있어서 태그메모리를 이용한 억세스 제어에 의해 콘텍스트 스위치의 고속화를 실현하고 있었다. 이 기술에서는, 태그의 관리는 OS에 맡겨져 있지만, 콘텍스트의 개변의 곤란성을 높이는 관점으로부터는 프로세서내에서 실행하는 것이 요망되고 있었다.
그래서, 특원 2001-24480호에 있어서 개시된 기술에서는, 이들 관리를 간단화하여 프로세서내에서 행하도록 하고 있다. 이 기술에서는 프로세서내에 콘텍스트 키 테이블을 유지함으로써, 콘텍스트의 암호화키가 외부에 알려질 가능성이 저감했기 때문에, 콘텍스트의 암호화 방법으로서 대칭키(공통키방식에서의 암호키)를 이용하도록 하고 있다. 이에 따라, 비대칭키(공개키방식에서의 암호키)를 이용한 경우와 비교하여 암호화의 처리시간을 단축시킬 수 있어, 콘텍스트 스위치의 고속화를 한층 더 실현하고 있다.
또, 이 기술에서는 콘텍스트키를 콘텍스트의 퇴피마다 외부로부터 예측불가능한 난수에 의해 생성하고, 콘텍스트의 복귀시에 당해 콘텍스트의 암호키를 콘텍스트 키 테이블로부터 소거하도록 하고 있다. 이에 따라, 외부로부터 콘텍스트의내용을 복호화하거나, 의도한 바와 같이 개찬하는 것이 매우 곤란하게 되고 있다. 또, 이 기술에서는 메모리상에 퇴피된 콘텍스트를 다른 영역에 보존해 두고, 후에 복귀시키고자 해도 이미 콘텍스트의 암호키가 존재하지 않기 때문에, 콘텍스트를 올바르게 복귀시킬 수 없다. 따라서, 콘텍스트가 알려져 버릴 가능성을 더욱 저감시킬 수 있다.
상술한 특원 2001-24480호에 있어서 개시된 기술에서는, 동시에 존재하는 모든 내탬퍼성의 프로세스의 콘텍스트 키는 모든 프로세서내에 설치된 콘텍스트 키 테이블에 유지되고 있지 않으면 안된다. 이 내탬퍼성의 프로세스에는, 실행상태에 있는 프로세스뿐만 아니라, 실행가능상태, 대기상태에 있는 프로세스도 포함된다.
그렇지만, 프로세서내에 설치된 콘텍스트 키 테이블의 용량은 유한하기 때문에, 이 용량에 따른 수 이상의 내탬퍼성의 프로세스는, 동시에 존재시킬 수 없다. 즉, 이 프로세서에서는 동시에 실행되는 내탬퍼성의 프로세스수가 콘텍스트 키 테이블의 용량에 따라 제한을 받는다.
특히, 동시에 동작시키는 프로세스수가 많아지는 멀티프로세스, 멀티사용자 환경 혹은 복수의 내탬퍼성을 요구하는 모듈로 이루어진 OS 등의 프로그램의 실행시에는 내탬퍼성의 프로세스수가 제한됨으로써 성능이 저하되는 경우가 있다.
본 발명은 상술한 과제를 감안하여 이루어진 것으로, 동시에 실행되는 프로세스수가 마이크로프로세서 내부의 테이블의 용량에 따라 제약을 받지 않는 마이크로프로세서를 제공하는 것을 목적으로 한다.
또, 본 발명은 동시에 실행되는 프로세스수가 많은 프로그램의 실행에서의 성능의 개선에 기여하는 것을 목적으로 한다.
도 1은 본 발명의 1실시형태에 따른 마이크로프로세서의 요부의 구성을 나타낸 블록도이고,
도 2는 상기 마이크로프로세서를 구성하는 연산처리부의 요부의 구성을 나타낸 도면,
도 3은 마이크로프로세서에서의 초기화처리를 나타낸 플로우차트,
도 4는 외부메모리에 퇴피(退避)되는 암호화 콘텍스트의 포맷의 일례를 나타낸 도면,
도 5는 상기 마이크로프로세서에서의 콘텍스트의 퇴피처리를 나타낸 플로우차트,
도 6은 상기 마이크로프로세서에서의 콘텍스트의 복귀처리를 나타낸 플로우차트이다.
<도면부호의 간단한 설명>
1 -- 외부메모리, 100 -- 마이크로프로세서,
101 -- 캐시, 101c -- 태그격납영역,
101d -- 상태격납영역, 101e -- 어드레스 격납영역,
101f -- 데이터 격납영역, 102 -- 레지스터군,
102a -- 통상 레지스터군, 102b -- 키 레지스터군,
103 -- 연산처리부, 104 -- 난수발생부,
105 -- 난수유지부, 106 -- 키 테이블,
106a -- 레지스터 참조카운터, 106b -- 키 데이터 유지부,
108 -- 예외검출부, 109 -- 암호화 처리부.
본 발명의 청구항 1에 따른 마이크로프로세서는, 마이크로프로세서의 초기화마다, 각각의 마이크로프로세서 개체마다 다르고, 마이크로프로세서 내부의 파라미터에 따라 생성된 난수에 따라 비밀키방식의 암호키를 생성하는 일시 키생성수단과, 당해 마이크로프로세서의 동작상태를 나타내는 정보를 일시 키생성수단이 생성한 암호키로 암호화하여 외부기억수단에 격납하는 동작정보 퇴피수단 및, 외부기억수단에 암호화되어 격납되어 있는 동작상태를 나타내는 정보를 일시 키생성수단이 생성한 암호키로 복호화하는 동작정보 복귀수단을 갖춘 것을 특징으로 한다.
또, 본 발명의 청구항 2에 따른 마이크로프로세서는, 청구항 1에 기재된 마이크로프로세서에 있어서, 외부로 독출할 수 없는 마이크로프로세서 개체마다 다른 공개키방식의 비밀키를 유지하는 비밀키 유지수단과, 미리 비밀키에 대응하는 공개키에 의해 암호화된 프로그램 실행키를 외부기억수단으로부터 독출하는 실행키 독출수단, 실행키 독출수단에 의해 독출된 프로그램 실행키를 비밀키를 이용하여 복호화하는 실행키 복호수단 및, 외부기억수단의 소정 어드레스의 내용을 복호화된 프로그램 실행키에 의해 복호화하는 프로그램 실행수단을 갖춘 것을 특징으로 한다.
또, 본 발명의 청구항 3에 따른 마이크로프로세서는, 청구항 2에 기재된 마이크로프로세서에 있어서, 복수의 임의의 암호키를 유지하는 임의 키 유지수단과,실행중인 프로그램으로부터 외부기억수단에 대한 억세스가 지시되었을 때에 프로그램으로부터 억세스에 이용하는 키가 지정되지 않은 경우에 당해 억세스에 이용하는 키를, 일시 키생성수단이 생성하는 암호키, 실행키 독출수단이 독출한 프로그램 실행키 및 임의 키 유지수단에 유지되고 있는 암호키중 어느 하나로부터 지정하는 키 지정수단을 갖춘 것을 특징으로 한다.
또, 본 발명의 청구항 4에 따른 마이크로프로세서는, 청구항 3에 기재된 마이크로프로세서에 있어서, 각각의 마이크로프로세서의 개체마다 다르고, 마이크로프로세서 내부의 파라미터에 따라 생성된 난수에 따라 생성된 암호키를 임의 키 유지수단에 격납하는 키 격납수단을 갖춘 것을 특징으로 한다.
또, 본 발명의 청구항 5에 따른 마이크로프로세서는, 청구항 4에 기재된 마이크로프로세서에 있어서, 일시키 생성수단이 생성하는 암호키, 실행키 독출수단이 독출한 프로그램 실행키 및 임의 키 유지수단에 유지되고 있는 키 각각에 고유의 식별정보를 할당하는 할당수단과, 기억수단에 기억되어 있는 데이터를 소정의 블록마다 독출하여 유지하는 캐시수단 및, 캐시수단에 유지되고 있는 기억수단의 데이터중 적어도 암호화되어 기억수단에 기억되어 있는 블록을 나타내는 어드레스 정보와, 어드레스 정보에 대응하는 데이터의 암호화에 이용되고 있는 키를 나타내는 식별정보를 대응시켜 유지하는 관리수단을 갖춘 것을 특징으로 한다.
또, 본 발명의 청구항 6에 따른 마이크로프로세서는, 청구항 5에 기재된 마이크로프로세서에 있어서, 기억수단에 대한 억세스시에 키 지정수단에 의해 지정된 키의 식별정보와 관리수단에 유지되고 있는 식별정보를 비교하여, 일치하고 있는경우에 캐시수단에 유지되고 있는 데이터에 억세스하는 억세스 제어수단을 갖춘 것을 특징으로 한다.
(발명의 실시형태)
본 발명은, 예컨대 프로그램의 비밀을 보호하는 하드웨어기구를 갖춘 마이크로프로세서에 적용할 수 있다.
1. 구성
본 발명의 1실시형태에 따른 마이크로프로세서는, 예컨대 도 1에 그 요부를 나타낸 바와 같이, 예컨대 DRAM 등의 마이크로프로세서(100)의 외부에 설치된 메모리(외부메모리; 1)에 대한 억세스를 고속화하는 캐시(2차 캐시; 101)와, 데이터, 연산결과 등을 유지하는 레지스터군(102), 캐시(101)로부터 명령, 데이터 등을 취득하고, 명령을 디코드하여 데이터간의 연산 등의 처리를 실행하는 연산처리부(프로세서ㆍ코어; 103), 프로세서 외부로부터 알 수 없는 난수를 발생시키는 난수발생부(104), 발생된 난수를 유지하는 난수유지부(105), 암호화를 위한 키(공통키방식의 비밀키) 테이블(106), 외부메모리(1) 혹은 주변기기와의 인터페이스 등이 접속되는 버스(107), 인터럽트 요구에 따른 처리 등을 실행하는 예외검출부(108) 및, 비밀을 유지하기 위한 소정의 수순을 갖는 프로그램(이하, 내탬퍼 프로그램이라 칭함)을 포함하는 복수의 프로세스간의 절환시에 레지스터군(102)내의 각 레지스터의 내용 등의 마이크로프로세서(100)의 동작상태를 나타내는 정보(콘텍스트) 등의 암호화/복호화를 행하는 암호화 처리부(109)를 갖추고 있다.
이 마이크로프로세서(100)는, 예컨대 1칩 혹은 1개의 패키지에 봉입되는 복수의 칩으로 구성되어 있다. 이것에 이용하는 패키지는, 파괴되기 어려운 재질로 내부 마이크로프로세서(100)의 칩이 노출되지 않도록 구성하는 것이 바람직하다. 칩에 직접 프로브(probe)를 접속하여 해석하는 것을 곤란하게 하기 때문이다. 또, 칩의 레이아웃은 특히 난수발생부(104), 난수유지부(105) 등에 직접 프로브를 접속하는 것이 곤란한 바와 같이, 필요 최저한의 패드만을 설치하는 것이 바람직하다.
캐시(101)는, 예컨대 SRAM 등의 외부메모리(1)보다 고속인 메모리로 이루어진 캐시메모리(101a)와, 외부메모리(1)로부터 캐시메모리(101a)에 대한 데이터의 독출, 캐시메모리(101a)로부터 외부메모리(1)에 대한 데이터의 기록 등을 관리하는 캐시 콘트롤러(101b)를 갖추고 있다.
캐시메모리(101a)에는 통상의 마이크로프로세서에서의 메모리 캐시와 마찬가지로 복수의 소정 길이의 캐시라인을 갖추고 있다. 각각의 캐시라인에는 당해 캐시라인에 대응하는 외부메모리(1)상의 데이터를 복호화하기 위한 키를 지정하기 위한 정보(태그)를 격납하는 태그격납영역(101c)과, 캐시영역의 상태(스테이트)를 나타내는 정보를 격납하는 상태격납영역(101d), 캐시영역의 어드레스를 격납하는 어드레스 격납영역(101e), 캐시영역의 데이터를 격납하는 데이터 격납영역(101f)이 형성되어 있다. 각 격납영역(101c∼101f)에는, 캐시 콘트롤러(101b)로부터의 제어에 의해 캐시되는 각각의 영역마다 태그, 상태, 어드레스, 데이터가 대응지워져서 격납된다. 또, 이 캐시(101)는 내탬퍼 프로그램의 실행시에, 복호화된 프로그램, 데이터를 유지할 목적으로도 이용된다.
도 1에서는 레지스터군(102)은 1개밖에 설치되어 있지 않지만, 예컨대 마이크로프로세서(100)의 동작에서의 실행 권한(특권레벨)마다 복수의 레지스터군(102)을 설치할 수도 있다. 그렇지만, 이하의 설명에서는 간략화를 위해 레지스터군 (102)을 1개만 설치한 경우에 대해 설명한다.
이 레지스터군(12)은, 예컨대 범용 레지스터, 인덱스 레지스터, 제어 레지스터 등의 종래의 마이크로프로세서와 마찬가지인 레지스터군(통상 레지스터군; 102a)과, 프로그램 등의 암호화처리의 실행에 사용하는 키 레지스터군(102b)을 갖추고 있다. 이들 통상 레지스터군(102a), 키 레지스터군(102b)의 내용은 마이크로프로세서(100)의 동작상태를 나타내고 있고, 콘텍스트로 칭해진다. 이 콘텍스트는, 예컨대 인터럽트 처리를 실행할 때에 외부메모리(1) 등에 퇴피된다.
통상 레지스터군(102a)은 종래의 마이크로프로세서와 마찬가지로, 예컨대 연산 파라미터, 연산결과, 프로그램의 상태를 나타내는 값 등을 유지하는 레지스터를 갖추고 있다.
키 레지스터군(102b)은, 예컨대 실행중인 내탬퍼 프로그램의 실행키(복호키)가 격납되어 있는 영역을 나타내는 정보(키 ID)가 격납되는 실행키 레지스터(RKx)와, 실행중인 내탬퍼 프로그램의 실행시의 데이터의 복호키가 격납되어 있는 영역을 나타내는 정보(키 ID)가 격납되는 데이터 키 레지스터(RKd0, …, RKdn)를 갖추고 있다.
연산처리부(103)는 오퍼레이팅 시스템(OS) 혹은 어플리케이션 소프트웨어 등의 실행에서의 연산, 제어 등의 처리를 실행한다. 이 연산처리부(103)는, 예컨대 도 2에 나타낸 바와 같이 1차(L1) 캐시(=명령캐시(103ai)+ 데이터 캐시(103ad);103a)와, 캐시(101), 레지스터군(102) 등으로부터 명령, 데이터(명령에 대한 인수 등)를 취득하는 페치(fetch; 103b), 페치된 명령을 디코드하는 명령 디코더(103c), 페치한 데이터간의 연산 등을 실행하는 연산유닛(ALU; 103d), 디코드된 명령에 따라 레지스터 및, 연산유닛 등의 동작의 제어 등을 실행하는 연산제어부(103e)를 갖추고 있다. 연산제어부(103e)는, 예컨대 명령디코더(103c)에 의해 디코드된 명령에 따른 마이크로 프로그램을 실행함으로써 명령에 따른 처리를 실행한다.
난수발생부(104)는, 예컨대 마이크로프로세서(100)가 리셋될 때마다 암호학적으로 충분한 품질의 난수를 발생시킨다. 구체적으로는, 예컨대 마이크로프로세서(100)의 제조시의 오차 등에 기인하는 전압, 타이밍 등의 오차에 따라 암호학적으로 충분한 품질의 난수(난수열)를 발생시킨다. 혹은, 양자적인 요동을 난수의 종류로 하거나, 마이크로프로세서(100)내에 불휘발성 엔트로피 풀(pool)을 설치하고, 이에 따라 난수를 발생시키도록 해도 좋다.
이와 같이, 프로세서 내부의 파라미터에 따라 난수를 발생시킴으로써, 프로세서마다 달라 추측되기 어려운 난수를 발생시킬 수 있다. 이에 따라, 난수가 외부에 알려져 버리거나, 추측되어 버리는 것을 방지할 수 있다.
또, 난수발생부(104)는 이와 같이 발생된 난수에 따라 마이크로프로세서 (100)가 리셋될 때마다 다른 암호화를 위한 키(프로세서 일시 키; Kc)를 생성하고, 생성된 프로세서 일시 키(Kc)를 난수유지부(105)에 격납시킨다. 이 프로세서 일시 키(Kc)는 상술한 바와 같이 추측되기 어려운 난수에 의해 생성되고 있기 때문에, 외부로부터 추측하는 것이 매우 곤란하다.
난수유지부(105)는, 예컨대 통상 레지스터와 마찬가지로 구성할 수 있다. 이 난수유지부(105)에는 난수발생부(104)로부터의 프로세서 일시 키(Kc)만을 기록할 수 있도록 되어 있다. 또, 이 난수유지부(105)의 내용은, 예컨대 암호화 처리부(109)만이 독출할 수 있도록 구성되어 있다. 이 때문에, 연산처리부(103)에 의해 실행되는 통상의 프로그램으로부터는 참조할 수 없도록 구성되어 있다.
이 난수유지부(105)에 유지되어 있는 프로세서 일시 키(Kc)의 값은, 외부메모리(1)에 기록되는 일은 없다. 또, 이 마이크로프로세서(100)에서는 프로세서 일시 키(Kc)의 값을 다른 레지스터, 캐시(101) 등에 독출할 수 없도록 되어 있다. 이 때문에, 마이크로프로세서(100)의 사용자, 마이크로프로세서(100)상에서 실행되는 프로그램 등은 프로세서 일시 키(Kc)의 값을 참조할 수 없다.
난수유지부(105)에 유지된 프로세서 일시 키(Kc)는, 예컨대 상술한 바와 같이 외부메모리(1)에 퇴피하는 콘텍스트를 암호화하기 위해 이용된다. 이 프로세서 일시 키(Kc)는 상술한 바와 같이 외부로부터 추측하는 것이 매우 곤란하다. 이 때문에, 외부메모리(1)에 퇴피하는 콘텍스트의 암호화는 공통키방식의 암호화에 의해 행하도록 되어 있다. 즉, 프로세서 일시 키(Kc)는 대칭키로서 사용되고, 외부메모리(1)에 퇴피한 콘텍스트를 복호화하여 레지스터군(102)의 값으로서 복귀시킬 때에도 이 프로세서 일시 키(Kc)가 사용된다.
이와 같이, 마이크로프로세서(100)의 리셋마다 다르고, 외부로부터 알려지기 어려운 난수에 따라 생성된 대칭키를 이용하여 콘텍스트의 암호화를 행함으로써, 마이크로프로세서 내부에서 생성된 프로세서 일시 키가 외부에 알려질 가능성이 낮기 때문에, 콘텍스트의 암호화에 대칭키방식의 암호화방법을 사용해도 내탬퍼성을 실용상 충분한 레벨로 유지할 수 있다. 이 때문에, 비대칭키를 이용한 암호화와 비교하여 암호화를 위한 처리부하를 저감시킬 수 있다.
또, 리셋마다 다른 대칭키를 이용하여 모든 콘텍스트의 암호화를 행하기 때문에, 예컨대 특원 2001-24480호에 있어서 개시된 프로세서와 같이, 콘텍스트의 퇴피마다 다른 대칭키를 각각 유지하는 테이블이 필요없기 때문에, 테이블 사이즈에 따른 동시 실행가능한 프로세스수의 제한을 받지 않고, 동시에 실행할 수 있는 프로세스수를 증가시킬 수 있다.
또, 키 테이블(106)에는 상술한 키 레지스터군(102b)내의 레지스터수보다 많은 수의 엔트리(키 ID)가 정의되어 있고, 각 키 ID마다 키를 유지하는 키 데이터 유지부(106b)와, 대응하는 키 데이터 유지부(106b)에 유지되어 있는 키의 사용횟수를 나타내는 레지스터 참조카운터(106a)가 설치되어 있다.
각각의 키 ID에 대응하는 키 데이터 유지부(106b)는, 예컨대 키 ID에 대응하여 일의(一意)로 결정된다. 예컨대, 소정의 기억영역에 대해 어드레스를 정의해 두고, 키 ID에 따른 어드레스에 당해 어드레스에 대응하는 암호화 키를 격납하도록 해 두면, 별도 키 ID를 격납하는 영역을 형성할 필요는 없다.
또, 각 키 ID에 대응지워져 격납되는 키는 각각 다른 것으로 되고, 동일 키가 다른 키 ID에 대응지워져 격납되는 일이 없도록 되어 있다. 이것은, 예컨대 연산처리부(103)에 의한 명령의 실행시의 처리에 의해 담보된다. 단, 우연히 프로세서 일시 키(Kc)와 같은 키가 공급되는 경우는, 키 데이터 유지부(106b)에 마찬가지로 유지한다.
또, 각각의 키 ID에는 각각 대응하는 암호화 처리가 정의되어 있다. 예컨대 키 ID "0"은 암호화하지 않은 상태를 나타내는 것으로 정의되어 있고, 키 ID "1"은 프로세서 일시 키(Kc)에 의한 암호화를 나타내며, 키 ID "2" 이상은 각각 대응하는 키에 의한 암호화를 나타내는 것으로 정의되어 있다.
레지스터 참조카운터(106a)의 값이 0인 상태는, 이것에 대응하는 키 데이터 유지부(106b)가 필요없는 상태를 나타낸다. 이 때문에, 이것에 대응하는 키 ID에는 새로운 키를 할당할 수 있게 된다. 그러나, 상술한 키 ID "0"은 항상「암호화 없음」 상태를 나타내기 위해 이용되기 때문에, 이것에 대응하는 레지스터 참조카운터(106a)에는 1 이상의 값을 격납한다. 그러나, 이 키 ID "0"은 고정적으로 사용하기 때문에, 키 ID "0"에 대응하는 레지스터 참조카운터(106a)의 값 자체에는 의미가 없다. 이 때문에, 키 ID "0"에 대응하는 레지스터 참조카운터(106a)의 값은 1로서 고정해 두어도 좋다.
또, 키 ID "1" 이상에 대응하는 레지스터 참조카운터(106a)의 값은 키 ID "0"에 대응하는 값과는 다르고, 키 레지스터군(102b)내의 레지스터에 키 ID를 설정하면, 설정한 키 ID에 대응하는 레지스터 참조카운터(106a)의 값이 카운트업되고, 키 레지스터군(102b)내의 레지스터에 설정되어 있는 키 ID를 클리어하면, 대응하는 레지스터 참조카운터(106a)의 값이 카운트다운된다. 또, 콘텍스트의 퇴피에 의해 키 레지스터군(102b)내의 레지스터가 퇴피되기 때문에 당해 레지스터에 키 ID가 유지되어 있는 경우에는 당해 키 ID에 대응하는 레지스터 참조카운터(106a)의 값이카운트다운된다. 반대로, 콘텍스트를 복귀시키면, 키 레지스터군(102)내의 레지스터에 키 ID가 설정되는 경우가 있다. 이러한 경우에는 새로 설정된 키 ID에 대응하는 레지스터 참조카운터(106a)의 값이 카운트업된다.
그러나, 키 ID "1"은 항상 프로세서 일시 키(Kc)에 의한 암호화를 나타내고 있기 때문에, 이 키 ID "1"은 다음의 리셋시까지 해방되는 일은 없다. 이 때문에, 키 ID "1"에 대응하는 레지스터 참조카운터(106a)의 값은 항상 1 이상으로 제어된다.
이 키 ID는 연산처리부(103)가 외부메모리(1)에 대한 억세스를 따르는 명령을 실행할 때 등에, 암호화된 외부메모리(1)의 내용을 복호화하기 위한 키를 지정하기 위해 마이크로프로세서(100) 내부에서만 사용된다. 이 키 ID는 마이크로프로세서(100) 외부에서는 참조할 수 없도록 되어 있다.
또, 이 키 ID는 키 레지스터군(102b)내의 레지스터에 의해 지시되도록 되어 있지만, 프로그램으로부터는 레지스터의 지정이 가능할 뿐으로, 레지스터값을 독출하거나 값을 직접 지정할 수 없도록 되어 있다. 이 때문에, 실행중인 프로그램 자신도 특정의 키 ID(예컨대 "1")를 직접 지정하여 메모리 억세스를 행하거나, 특정의 키 ID를 지정하여 키 테이블(106)의 내용을 직접 변경할 수 없도록 되어 있다. 이 마이크로프로세서(100)에서는 이러한 명령을 정의하고 있지 않기 때문이다. 또, 연산처리부(103) 등에는 이러한 처리를 실현하기 위한 관리처리를 행하는 기능이 설정되어 있다.
또, 예외검출부(108)는 마이크로프로세서(100)에 대한 인터럽트 요구, 프로그램 실행상의 에러(연산, 실행제어, 가상기억(TLB 관계도 있다) 등)를 검출하여, 연산처리부(103)에 통지한다.
이 예외검출부(108)가 인터럽트를 검출하면, 예컨대 연산처리부(103)가 상술한 콘텍스트를 외부메모리(1)에 퇴피시킨다. 이 때, 암호화 처리부(109)는 키 테이블(106)의 키 ID "1"에 대응하는 프로세서 일시 키(Kc)를 이용하여, 퇴피해야 할 콘텍스트를 암호화하고, 캐시(101)를 매개로 외부메모리(1)에 격납된다. 이 때, 일단 캐시(101)에 유지된 암호화 콘텍스트는 캐시 콘트롤러(101b)로부터의 제어에 의해 소정의 타이밍에서 외부메모리(1)에 기록된다.
또, 암호화 처리부(109)는 상술한 예외검출부(108)로부터의 지시 등에 따라 콘텍스트의 암호화/복호화, 외부메모리(1)에 격납하는 데이터의 암호화, 외부메모리(1)로부터 독출한 데이터의 복호화 등의 처리를 실행한다.
이 암호화 처리부(109)는 상술한 연산제어부(103e)가 실행하는 마이크로 프로그램(109a)으로서 구성할 수도 있지만, 연산처리부(103)와는 별개의 기능블록 (109b)으로서 구성할 수도 있다.
마이크로 프로그램으로서 구성한 경우에는, 연산처리부(103)의 처리부하가 증대하지만 마이크로 프로그램의 변경으로 해결되기 때문에, 설계, 제조가 비교적 용이하다. 이에 대해, 연산처리부(103)와는 별개의 기능블록으로서 구성하는 경우에는, 하드웨어의 설계부담, 제조비용이 증가하지만, 콘텍스트의 암호화 처리를 행해도 연산처리부(103)의 처리부하는 그 만큼 증가하지 않는다. 따라서, 용도에 따라 암호화 처리부(109)의 구성을 적당히 변경한다.
또, 이 암호화 처리부(109)는 내탬퍼 프로그램의 실행시에 당해 내탬퍼 프로그램의 프로그램, 데이터를 복호화하기 위한 처리도 실행하도록 되어 있다.
이 때문에, 이 암호화 처리부(109)는 예컨대 각각의 마이크로프로세서(100)마다 다른 공개키방식의 비밀키(프로세서 비밀키) 및 이에 대응하는 공개키(프로세서 공개키)를 유지하고 있다. 비밀키는 마이크로프로세서(100)내에서만 사용되고, 외부에 알려지는 일이 없도록 되어 있다. 이에 대해, 공개키는, 예컨대 내탬퍼 프로그램이 구입시 등에 프로그램의 제공자 등에 제공된다. 프로그램의 제공자는, 예컨대 내탬퍼 프로그램의 실행키를, 제공된 공개키로 암호화하여 공급한다. 마이크로프로세서(100)에서는, 예컨대 암호화하여 공급된 프로그램의 실행키를 복호화하여 내탬퍼 프로그램을 실행한다.
이 복호화 처리는 상술한 콘텍스트의 암호화와는 다르고, 예컨대 비대칭 키를 이용한 암호화에 의해 행한다. 이 때문에, 암호화 처리부(109)는, 예컨대 프로그램(혹은, 프로세스)마다 난수유지부(105)내의 당해 프로그램마다의 식별정보에 따라 지정되는 상술한 키 레지스터군(102b)내의 소정의 데이터 키 레지스터( RKdm(m=0, 1, …, n))에 의해 지정되는 키 ID에 대응하는 비밀키(비대칭 키)에 따라 당해 프로그램, 데이터의 복호를 행하는 복호화 처리기능을 가지고 있다.
(내탬퍼 프로그램의 제공/실행의 개요)
내탬퍼 프로그램은, 예컨대 각각의 마이크로프로세서(100)에 대해 고유의 비밀키에 대응하는 공개키로 암호화되어 제공된다.
이와 같이 제공된 내탬퍼 프로그램은, 입출력 I/F2를 매개로 하드디스크 드라이브장치(HDD) 등의 보조기억장치 등에 격납된다. 내탬퍼 프로그램은, 실행전에는 유지기억장치 등으로부터 독출되어 외부메모리(1)에 격납된다. 이 상태에서는, 내탬퍼 프로그램은 암호화된 상태이다.
내탬퍼 프로그램의 기동이 지시되면, 예컨대 캐시 콘트롤러(101b)는, 외부메모리(1)로부터 당해 내탬퍼 프로그램을 독출하고, 암호화 처리부(109)에 공급하여 복호화시키며, 복호호된 내탬퍼 프로그램을 캐시(101)에 격납한다. 이 복호화는 상술한 바와 같이, 키 테이블(106)의 키 ID의 값이 2 이상인 키 데이터 유지부(106b)에 유지되어 있는 키를 이용하여 행한다.
연산처리부(103)는, 이와 같이 복호화되어 캐시(101)에 격납된 내탬퍼 프로그램을 실행한다. 당해 프로그램의 실행이 종료하면, 캐시(101)의 내용이 파기된다.
암호화 처리부(109)는 이들 레지스터의 값을 참조함으로써, 복호처리에 이용하는 키의 키 ID를 알 수 있다. 암호화 처리부(109)는 복호시에, 이렇게 알게 된 키 ID에 대응하는 키를 키 데이터 유지부(106b)로부터 독출하여 복호화 처리를 실행한다.
이 마이크로프로세서(100)에서는, 각각의 프로그램, 데이터를 복호화하는 키는 키 ID마다 키 데이터 유지부(106b)에 유지되어 있다. 암호화되어 있는 메모리블록의 내용을 복호화하기 위한 키는 상술한 키 레지스터군(102b)내의 실행키 레지스터(RKx)와, 데이터 키 레지스터(RKdm(m=0, 1, 2, …, n))에 격납된 키 ID에 의해 지정한다.
그런데, 이 마이크로프로세서(100)는 내탬퍼 프로그램, 암호화 처리가 필요없는 통상의 프로그램 등을 복수, 병행하여 실행시킬 수 있도록 되어 있다.
이 때문에, 이 마이크로프로세서(100)에서는 각각의 내탬퍼 프로그램마다 복호키(공개키방식에서의 비밀키)를 관리하도록 되어 있다. 상술한 바와 같이 키의 지정은 상술한 키 레지스터군(102b)내의 실행키 레지스터(RKx), 데이터 키 레지스터(RKd0, …, RKdn)에 키 ID를 격납함으로써 행한다.
상술한 바와 같이, 이 마이크로프로세서(100)에서는 이들 레지스터(RKx, RKd0, …, RKdn)는 1조 밖에 설치되어 있지 않기 때문에, 복수의 내탬퍼 프로그램을 병행시켜 실행하고 있을 때에는 연산처리부(103)에서 실행하는 프로세스를 시분할로 절환할 때에 이들 레지스터(RKx, RKd0, …, RKdn)의 값은 다른 콘텍스트와 더불어 일단 외부메모리(1)에 퇴피시켜진다. 이와 같이 콘텍스트의 퇴피를 행한 프로세스에 다음의 실행시간이 할당되면, 퇴피한 콘텍스트가 레지스터(RKx, RKd0, …, RKdn)에 복귀된다. 이러한 콘텍스트의 절환(콘텍스트 스위치)에 의해 각 내탬퍼 프로그램마다 키의 관리가 행해진다.
그런데, 상술한 키 테이블(106)의 용량은 유한하기 때문에, 이 마이크로프로세서(100)에서는 콘텍스트와 더불어 키 데이터 유지부(106b)의 용량도 퇴피할 수 있도록 되어 있다. 이와 같이, 키 데이터 유지부(106b)의 내용을 퇴피함으로써, 내용을 퇴피한 키 데이터 유지부(106b)에 대응하는 키 ID를 해방시킬 수 있다.
이와 같이, 키 ID를 해방시킨 키 데이터 유지부(106b)에는 다른 프로그램에 의해 키가 유지되는 경우가 있다. 이 경우, 당해 프로그램이 콘텍스트의 퇴피시에당해 키 ID를 해방시키지 않는 경우도 있다.
이러한 경우에는, 앞의 프로그램의 콘텍스트를 복귀할 때에 복귀시키고자 하는 키에 비어 있는 적당한 키 ID를 할당한다. 이 때, 복귀시키고자 하는 레지스터(RKx, RKd0, …, RKdn)중에 콘텍스트의 퇴피전에 당해 키의 키 ID를 지정하고 있는 것이 있으면, 퇴피전의 키 ID를 새로 할당된 키 ID로 변경한다.
(특권레벨에 따른 메모리 보호)
또, 이 마이크로프로세서(100)에서는 프로세서의 특권레벨(예컨대, 일반 모드, 특권모드 등)에 따른 메모리 보호를 행할 수 있도록 되어 있다. 이를 위해, 이 마이크로프로세서(100)는 현재 실행중인 프로세스의 특권레벨을 유지하는 레벨보호수단과, 특권레벨마다의 메모리 억세스의 제한을 유지하는 제한을 유지하는 제한유지수단 및, 현재 실행중인 프로세스의 특권레벨에 따른 메모리 억세스의 제한에 따라 메모리 억세스를 실행하는 제한수단을 갖추고 있다. 이에 따라, 이 마이크로프로세서(100)에서는 프로세스의 특권레벨에 따른 메모리 보호를 실현할 수 있도록 되어 있다.
그렇지만, 특권레벨에 의한 메모리 보호와, 내탬퍼 동작에 의한 프로그램 등의 외부메모리(1)에 유지되어 있는 데이터의 암호화 사이에 직접적인 관련은 없다. 따라서, 이것들은 독립하여 설정할 수 있다.
예컨대, 외부메모리(1)내의 메모리 블록에는, 일반 모드에서 읽고 쓰기가 가능하지만 데이터가 암호화되어 격납되어 있는 메모리 블록, 특권모드에서만 읽고 쓰기가 가능하지만 평문 그대로 데이터가 격납되어 있고, 내탬퍼화되어 있지 않은메모리 블록 등이 있을 수 있다.
마찬가지로, 내탬퍼성은 OS에 의한 메모리 보호기구와도 직접 관련은 없다. 그렇지만, OS 등의 시스템을 제어하기 위한 프로그램과, 이 프로그램상에서 동작하는 어플리케이션 등의 프로그램 사이에는 콘텍스트 스위치가 빈번하게 발생한다. 이 때문에, 프로세서가 복수의 특권레벨을 갖는 경우에, 각 특권레벨마다 레지스터군(102)을 설치함으로써, 특권레벨마다 레지스터군(102)을 절환함으로써, 특권레벨의 다른 프로세스간의 절환에 있어서는, 콘텍스트 스위치를 행할 필요가 없어진다. 이 때문에, 콘텍스트 처리 및 이에 부수하는 상술한 바와 같은 키 레지스터군 (102b)내의 레지스터의 값의 조작 등의 부하를 경감시킬 수 있다.
(특권레벨과 키 테이블의 관계)
복수의 특권레벨을 설정하는 경우에도 키 테이블(106)은 1개로만 하지만, 키 테이블(106)의 일부 키 ID를, 높은 특권레벨을 위해 예약해 두어도 좋다. 이에 따라, 예컨대 OS 자체에 내탬퍼 프로그램이 포함되는 경우 등에, 키 테이블(106)의 부족에 의해 OS의 동작이 불안정하게 될 가능성을 저감시킬 수 있다.
또, 이 경우에 있어서도 특정 키 ID(예컨대, "1")를 직접 지정하여 외부메모리(1)에 대한 억세스를 행하거나, 키 테이블(106)의 내용을 변경하거나 하는 명령은, 설령 특권레벨에만 대한 것이어도 정의하지 않고 두는 것이 바람직하다.
이와 같이 구성함으로써, 예컨대 다른 제공자로부터의 OS, 어플리케이션, 디바이스 드라이버 등의 프로그램이 같은 특권레벨로 실행되는 경우에 있어서도, 각각의 프로그램이 다른 실행키를 가지고, 각각의 프로그램의 내탬퍼성을 유지할 수있다. 이에 따라, OS의 제공자와 어플리케이션 프로그램 혹은 디바이스 드라이버(특정 디바이스를 동작시키기 위한 프로그램)의 제공자가 다른 경우에 있어서도, 각각의 프로그램의 비밀을 유지할 수 있다.
또, OS 등의 프로그램에서는, 제공자가 다른 복수의 특권모드의 모듈을 이용하는 경우가 있다. 이러한 프로그램에 있어서, 악의가 있는 모듈 등이 특권모드를 위해 예약한 키 테이블을 소비하고, OS를 동작불능시킬 가능성도 있다. 그렇지만, 이러한 가능성은 프로세서의 내탬퍼기능과는 별도로 OS 자신이 각각의 모듈의 서명을 검증하는 등의 방법으로 저감시킬 수 있다.
(메모리 보호와 캐시의 관계)
그런데, 마이크로프로세서(100)가 외부메모리(1)에 억세스할 때에는, 먼저 상술한 특권레벨에 따라 억세스하고자 하는 어드레스에 대한 억세스가 제한되어 있는지의 여부를 판정한다. 억세스가 제한되어 있는 경우에는, 마이크로프로세서 (100)는 메모리 보호 위반 혹은 더블 폴트(double fault) 등으로서, 예외처리, 프로그램의 강제 종료 등의 처리를 실행한다. 이 동작은 내탬퍼 기능을 갖지 않는 통상의 프로세서와 마찬가지이다.
이 마이크로프로세서(100)에서는, 상술한 바와 같이 특권레벨에 따라 메모리 억세스가 제한되어 있는 영역에 대한 억세스가 아니고, 더욱이 태그 격납 영역(101c)에 유지되어 있는 키 ID에 대응하는 키 데이터 유지부(106b)에 유지되어 있는 키가, 억세스하고자 하는 외부메모리(1)상의 영역의 데이터를 암호화한 키에 대응하고 있는 경우에만, 외부메모리(1)에 억세스할 수 있도록 되어 있다.
상술한 바와 같이, 억세스하고자 하는 영역에 대한 억세스가 제한되어 있는 경우의 동작은 통상 프로세서와 마찬가지이다. 이 때문에, 이하의 메모리 억세스에 대한 설명에서는, 통상의 프로세서와 마찬가지의 메모리 보호에 의해 억세스하고자 하는 영역으로의 억세스가 제한되어 있지 않은 경우에 대해서만 설명한다.
2. 초기 설정
(캐시의 클리어)
상술한 바와 같이 구성된 마이크로프로세서(100)에서는, 전원이 투입되거나 마이크로프로세서가 리셋되면, 먼저 캐시(101)의 내용을 클리어한다.
마이크로프로세서(100)의 전원이 최초로 투입된 경우에는, 캐시 콘트롤러 (101b)는 캐시 메모리(101a)의 내용을 전부 클리어한다. 이 이외의 이유로 마이크로프로세서(100)가 리셋되어 있는 경우에는, 캐시 콘트롤러(101b)는 캐시 메모리 (101a)의 내용을 클리어하기 전에 캐시 메모리(101a)에 유지되어 있는 데이터를 외부메모리(1)로 쓸어낸다.
이러한 전원투입 이외에 의한 리셋의 경우에는, 캐시(101)의 태그격납영역 (101c)의 키 ID가 0인 캐시라인, 즉 암호화 없음으로 설정되어 있는 캐시라인에 대해서는 반드시 클리어할 필요는 없다. 그렇지만, 태그격납영역(101c)의 키 ID가 0 이외의 값(1도 포함)인 캐시라인에 대해서는 클리어할 필요가 있다. 따라서, 캐시 콘트롤러(101b)는 각 캐시라인의 태그격납영역(101c)을 확인하여 필요하면 캐시라인의 내용을 클리어한다.
이러한 캐시의 클리어전에 태그격납영역(101c)의 키 ID가 프로세서 일시 키를 나타내는 1인 캐시라인을 외부메모리(1)로 쓸어낼 때에는, 리셋전의 프로세서 일시 키(Kc)를 이용하여 암호화하여 외부메모리(1)에 격납한다. 또, 이 때의 프로세서 일시 키(Kc)는 즉시 변경되기 때문에, 외부메모리(1)로 쓸어낸 데이터는 정상인 데이터로서는 다시는 복귀되지 않는다. 이 때문에, 캐시의 클리어전에 쓸어낸 캐시라인의 데이터는 랜덤 데이터(적당한 데이터)로서 밖에 독출할 수 없다. 프로세서 일시 키(Kc)는 콘텍스트를 암호화하는데 이용되고 있기 때문에, 캐시(101)에 유지되어 있는 콘텍스트는, 리셋후에 정상인 데이터로서 재차 복귀되는 일은 없다.
이 때문에, 리셋시에 태그격납영역(101c)에 프로세서 일시 키의 키 ID가 붙은 캐시라인을 쓸어낼 때에는, 암호화를 행하지 않고 적당한 데이터를 쓸어낼 곳의 외부메모리(1)상의 영역에 격납하는 것만으로도 충분하다. 단, 랜덤한 데이터에는, 명시적으로도 암시적으로도 난수발생부(104)가 발생시키는 난수를 예측하기 위한 단서가 될 수 있는 정보가 포함되지 않도록 한다. 구체적으로는, 예컨대 난수발생부(104)와는 다른 방법으로 발생시킨 난수를 사용한다.
(프로세서 일시 키(Kc)의 설정)
상술한 바와 같이, 캐시(101)의 내용을 클리어한 후, 마이크로프로세서(100)는 프로세서 일시 키(Kc)를 설정한다. 이 프로세서 일시 키(Kc)의 값은 상술한 바와 같이, 난수발생부(104)가 마이크로프로세서(100)의 리셋마다 암호학적으로 충분한 품질의 난수에 따라 자동적으로 설정한다. 구체적으로는, 예컨대 도 3에 나타낸 바와 같이, 먼저 난수발생부(104)는 난수를 발생시키고(S1), 발생한 난수에 따라 프로세서 일시 키(Kc)를 생성하며(S2), 생성한 프로세서 일시 키(Kc)를 난수유지부(105)에 격납한다(S3).
이와 같이 난수발생부(104)가 발생시키는 난수는 마이크로프로세서(100)마다 다르고, 외부에 알려지거나 추측되어 버리는 경우가 없다. 이 때문에, 마이크로프로세서(100) 자신 이외는 프로세서 일시 키(Kc)의 값은 알 수 없다.
또, 마이크로프로세서(100)는 프로세서 일시 키(Kc)의 설정과 더불어, 키 테이블(106)을 초기화한다(S4). 예컨대, 키 테이블(106)의 키 ID "0"은 「암호화 없음」을 나타내는 키 ID로 한다. 이 키 ID "0"에 대응하는 레지스터 참조카운터 (106a)에는 1 이상의 값이 설정되지만, 이 값은 리셋 이후의 동작에 의해서도 변경되지 않는다. 또, 키 ID "1"은 프로세서 일시 키(Kc)를 나타내는 키 ID로 하고, 대응하는 레지스터 참조카운터(106a)의 초기값에는 1이 설정된다. 키 ID "2" 이후의 키 데이터 유지부(106b)의 내용은 전부 클리어되고, 대응하는 레지스터 참조카운터(106a)의 값은 각각 0으로 설정된다.
이러한 리셋시의 초기 설정을 행한 후, 마이크로프로세서(100)는 외부메모리 (1)의 소정의 어드레스로부터의 처리의 실행을 개시한다.
이 후, 마이크로프로세서(100)는 통상의 실행상태로 이행하고, 예컨대 IPL(Initial Program Loader) 등의 초기화 프로그램이 기동하며, 필요에 따라 OS 등의 프로그램이 기동된다.
3. 마이크로프로세서의 동작 개요
(내탬퍼 상태로의 이행)
마이크로프로세서(100)의 연산처리부(103)에서 실행되는 프로그램은, 실제로는 바이너리(2진수) 코드이지만, 이해를 용이하게 하기 위해 이하의 설명에서는 바이너리 코드에 1대 1로 대응하는 연상(mnemonic)으로 표현한다. 연상으로 표현된 명령은 실제로는 대응하는 바이너리 코드로서 외부메모리(1), 캐시(101) 등에 격납되어 있다.
마이크로프로세서(100)에서 실행되는 프로그램은 그 특권레벨에 따르지 않고 암호화된 프로그램을 복호하면서 실행하는 내탬퍼 상태로 이행하는 명령을 실행할 수 있다. 이 내탬퍼 상태로 이행하는 명령은, 예컨대 다음의 연상으로 표현한다.
strtenc Ra, Rb
이 strtenc 명령은 2개의 오퍼랜드를 필요로 한다. Ra는 레지스터를 지정하는 오퍼랜드이고, 이에 따라 프로그램 고유의 실행 키(프로그램 실행 키)로 암호화된 메모리 블록의 선두 어드레스를 나타내는 값이 지정된다. Rb도 마찬가지로 어드레스를 나타내는 레지스터를 지정하는 오퍼랜드이고, 이에 따라 프로세서 공개키로 암호화된 프로그램 실행키의 어드레스가 지정된다.
이 마이크로프로세서(100)에는, 예컨대 특원 2000-135010호에 개시된 마이크로프로세서와 마찬가지로 마이크로프로세서마다 고유의 프로세서 비밀키(비대칭키 방식의 비밀키)가 유지되어 있다. 이 프로세서 비밀키에 대응하는 공개키(프로세서 공개키)는 공개되어 있고, 내탬퍼 프로그램은 미리 이 프로세서 공개키로 암호화되어 공급되어 있다.
strtenc 명령이 실행되면, 암호화 처리부(109)는 연산제어부(103e)로부터의 지시에 따라 프로세서 비밀키에 의해 Rb가 나타내는 데이터를 복호화하고, 취출(取出)한 프로그램 실행키를 키 테이블(106)의 소정의 키 ID에 대응하는 영역에 격납한다. 더욱이, 암호화 처리부(109)는 격납한 프로그램 실행키에 대응하는 키 ID를 실행키 레지스터(RKx)에 격납한다. 구체적인 키의 등록수순의 상세에 대해서는 후술한다.
실행키 레지스터(RKx)에 키 ID가 격납된 후, 프로그램은 Ra로 지정되는 어드레스로부터 실행을 계속한다. 이 때, Ra로 지정되는 어드레스의 외부메모리(1)에는 프로그램 실행키로 암호화된 프로그램이 격납되어 있지만, 실행키 레지스터 (RKx) 및 키 테이블(106)에 격납된 정보에 의해 암호화 처리부(109)가 당해 프로그램을 올바르게 복호화하기 때문에, 연산처리부(103)는 프로그램의 실행을 계속할 수 있다.
이하, 이와 같이 프로그램 실행키로 프로그램을 복호화하면서 실행하는 상태를 내탬퍼 상태로 부르기로 한다. 반대로, 외부메모리(1)상의 프로그램을 복호화하지 않고, 평문으로서 읽어들여 그대로 실행하는 상태를 통상 상태 혹은 비내탬퍼 상태로 부르기로 한다.
(비내탬퍼 상태로의 이행)
마이크로프로세서(100)의 실행상태를 내탬퍼 상태로부터 비내탬퍼 상태로 이행시키는 방법으로는, 예컨대 명시(A), 인터럽트ㆍ예외 등의 처리(B), 시스템 콜(C) 등의 방법이 있다.
A. 명시적인 지시에 의한 비내탬퍼 상태로의 이행
명시적으로 비탬퍼 상태로 이행시키는 경우에는, 내탬퍼 상태에서 동작하는프로그램중에서 명시적으로 비내탬퍼 상태로 이행하는 명령을 실행시킨다. 이 명령은, 예컨대 다음의 연상으로 표현한다.
endenc Ra
이 endenc명령은 1개의 오퍼랜드를 필요로 한다. Ra는 비내탬퍼 상태에서 실행을 계속해야 할 프로그램의 어드레스를 나타내는 레지스터를 지정하는 오퍼랜드이다.
내탬퍼 상태에 있어서, 이 endenc명령을 실행하면, 연산제어부(103e)는 키 레지스터군(102b)의 내용을 전부 클리어한 후, Ra로 지정되는 어드레스로부터 비내탬퍼 상태로 프로그램의 실행을 계속한다. 또, 이러한 명령에 의한 비내탬퍼 상태로의 이행에서는, 일반 레지스터 등의 다른 프로그램 등으로부터 참조될 수 있는 영역에 감춰야 할 정보를 남기지 않도록 프로그램을 작성시에 주의해야 한다.
B. 인터럽트ㆍ예외에 의한 비내탬퍼 상태로의 이행
내탬퍼 상태에서 프로그램을 실행중에 인터럽트ㆍ예외(예외명령의 실행, 어드레스 변환의 에러 등)가 발생한 경우에는, 비내탬퍼 상태로 이행시킬 수 있다. 비내탬퍼 상태로 이행하는지의 여부는, 예컨대 인터럽트의 허가상황, 발생한 예외에 따른 처리 등에 따라 결정된다.
이러한 이행에 있어서는, 마이크로프로세서(100)는 후술하는 수순으로 레지스터군(102)의 내용 등의 콘텍스트를 퇴피시킨다. 이 후, 연산제어부(103e)는 통상 레지스터군(102a)내의 레지스터중 특권레벨의 설정, 메모리 보호 위반으로 된 어드레스를 나타내는 레지스터 등의 시스템 상태를 나타내는 일부 레지스터 이외의모든 레지스터의 내용을 클리어한다. 특히, 범용 레지스터 등에는 감춰져야 할 데이터가 격납되어 있을 가능성이 있기 때문에, 클리어할 필요가 있다.
이러한 처리를 실행한 후, 종래의 프로세서와 마찬가지로 인터럽트ㆍ예외처리를 실행하는 인터럽트ㆍ예외처리 핸들러의 처리가 개시된다. 예컨대, 인터럽트의 경우에는 인터럽트 벡터에 의해 지정되는 어드레스로 정의되어 있는 처리가 실행된다.
C. 시스템 콜 명령에 의한 비내탬퍼 상태로의 이행
어플리케이션 프로그램이 OS의 기능을 호출하기 위한 시스템 콜을 실행할 때에는, 종래의 프로세서에서는 일반 레지스터에 기능을 나타내는 기능번호, 당해 기능의 파라메터 등을 설정한 후 예외명령을 실행하여 특권레벨의 OS 등의 예외처리 프로그램에 처리를 이행시키는 방법이 이용되고 있다.
이에 대해, 이 마이크로프로세서(100)에서는 상술한 바와 같이 예외명령을 실행하면 레지스터군(102)의 내용을 클리어하도록 되어 있기 때문에, OS로 실행이 옮겨진 시점에서 기능번호나 파라메터 등이 레지스터군(102)내의 레지스터상으로부터 손실되게 된다.
이 때문에, 이 마이크로프로세서(100)에서는 시스템 콜용의 명령을 정의하고 있다. 이 명령은, 예컨대 다음의 연상으로 표현한다.
syscall Ra, Rb
이 syscall명령은 2개의 오퍼랜드를 필요로 한다. Ra는 호출하는 기능을 나타내는 기능번호를 나타내는 오퍼랜드이고, Rb는 파라메터 또는 파라메터를 격납한어드레스를 나타내는 오퍼랜드이다.
내탬퍼 상태에 있어서, syscall명령이 실행되면 예외처리와 마찬가지로 콘텍스트가 퇴피되고, 통상 레지스터군(102a)도 마찬가지로 클리어된다. 그러나, Ra와 Rb는 클리어되지 않고, 그대로 레지스터내에 격납된 채로 된다. 이에 따라, 시스템 콜의 처리를 실행하는 시스템 콜 핸들러는 필요한 파라메터를 취득할 수 있다.
또, 시스템 콜로부터 원프로그램으로 복귀할 때에는, syscall명령으로 지정된 레지스터에는 시스템 콜에 의해 얻어진 값을 유지한 채, 다른 레지스터군(102)내의 레지스터가 시스템 콜전의 상태로 복귀된다.
이 마이크로프로세서(100)에서는 이상의 처리에 의해 시스템 콜을 실현하고 있다.
D. 내탬퍼 상태 특유의 명령
이 마이크로프로세서(100)는 내탬퍼 상태 및 비내탬퍼 상태에 있어서는 종래의 프로세서와 마찬가지의 연산, 제어 등의 명령을 실행할 수 있도록 되어 있다. 더욱이, 이 마이크로프로세서(100)는 내탬퍼 상태에 있어서는 내탬퍼 상태 특유의 명령을 실행할 수 있도록 되어 있다. 이하, 이러한 내탬퍼 상태 특유의 명령에 대해 설명한다.
(1) 데이터 키 레지스터에 의한 키 ID의 지정
상술한 바와 같이, 이 마이크로프로세서(100)에는 복수의 데이터 키 레지스터(RKd0, …, RKdn)가 설치되어 있다. 이들 데이터 키 레지스터(RKd0, …, RKdn)에는 상술한 바와 같이 키 ID가 격납된다.
내탬퍼 상태에 있어서, 마이크로프로세서(100)가 외부메모리(1)에 대한 억세스를 수반하는 명령을 실행할 때에는, 반드시 1개의 키 ID를 사용한다. 이하, 이 키 ID를 억세스 키 ID로 칭한다.
이 마이크로프로세서(100)에서는, 내탬퍼 상태에 있어서는 통상 레지스터군 (102a)중 외부메모리(1)상의 어드레스를 격납할 수 있는 모든 레지스터에 대응하는 데이터 키 레지스터(RKd0∼RKdn)를 고정적으로 정하고 있다. 예컨대, 주로 스택상의 어드레스를 격납하는데 이용되는 레지스터에 대해서는 데이터 키 레지스터 (RKd2)가 대응지워져 있고, 그 외의 일반 레지스터에 대해서는 데이터 키 레지스터 (RKd1)가 대응지워져 있는 것으로 한다.
이 마이크로프로세서(100)에서는, 종래의 프로세서와 마찬가지로 외부메모리 (1)에 억세스하는 명령에 있어서는 오퍼랜드로서 억세스하는 어드레스를 유지하고 있는 레지스터를 지정할 수 있도록 되어 있다. 이 마이크로프로세서(100)에서는, 이 레지스터에 대응지워진 데이터 키 레지스터(RKd1∼RKdn)의 값이 상술한 억세스 키 ID로 된다.
또, 명령에 따라서는 상술한 바와 같이 고정적으로 정해진 통상의 데이터 키 레지스터는 아니고, 다른 특정의 데이터 키 레지스터(RKdm(m=0, 1, …, n))를 생략할 때의 값(디폴트값)으로 하고 있는 편이 프로그램의 작성상의 부담을 경감시킬 수 있는 경우가 있다.
이 때문에, 이 마이크로프로세서(100)에서는, 몇개의 명령에 대해서는 메모리 억세스 명령 및 그 어드레싱 모드에 따라 데이터 키 레지스터를 지정하는 오퍼렌드를 생략했을 때에 이용하는 데이터 키 레지스터(생략시 데이터 키 레지스터)를 정하고 있다. 이러한 명령에 있어서 데이터 키 레지스터의 지정이 없는 경우에는 정해진 생략시 데이터 키 레지스터에 격납된 키 ID를 상술한 억세스 키 ID로 한다.
상술한 데이터 키 레지스터(RKd1) 및 데이터 키 레지스터(RKd2)를 적절히 설정해 두면, 대부분의 경우의 메모리 억세스는 데이터 키 레지스터를 지정하는 오퍼랜드를 생략하여, 통상의 동작(비내탬퍼 상태)과 마찬가지의 명령으로 실행할 수 있다. 따라서, 상술한 바와 같이 생략시의 억세스 키 ID를 정해 두면, 프로그램의 작성상의 부담을 경감시킬 수 있다.
예컨대, 메모리로부터 데이터를 읽어들이는 통상의 명령을 다음의 연상으로 표현한다.
load Ra, Rb
여기에서, Rb는 외부메모리(1)상의 어드레스를 나타내는 레지스터를 지정하는 오퍼랜드이고, Ra는 읽어들인 데이터를 격납하는 레지스터를 지정하는 오퍼랜드이다.
이러한 명령에 있어서 지정되는 Rb가 소정의 레지스터(예컨대, 스택 포인터, 베이스 포인터 등) 이외의 일반 레지스터인 경우에는 연산처리부(103)는 Rb로 나타내어지는 어드레스를 포함하는 외부메모리(1)상의 블록이 상술한 억세스 키 ID로서 정의되어 있는 데이터 키 레지스터(RKd1)에 유지되어 있는 키 ID에 대응하는 암호키로 암호화되어 있는 것으로 간주한다. 이 때문에, 암호화 처리부(109)는 연산처리부(103)로부터의 지시에 따라 데이터 키 레지스터(RKd1)에 유지되어 있는 키 ID에 대응하는 키를 키 테이블(106)로부터 취득한다. 더욱이, 암호화 처리부(109)는 Rb로 나타내어지는 어드레스의 내용을 취득하고, 이것을 먼저 취득한 키에 의해 복호화한다. 이와 같이 복호화된 Rb로 나타내어지는 어드레스의 내용은 Ra로 격납된다.
(2) 데이터 키 레지스터에 의한 키 레지스터 수식
한편, 고정적으로 정해진 데이터 키 레지스터로 지정되는 키 ID와는 다른 키 ID를 사용하여 외부메모리(1)에 억세스하는 경우에는, 데이터 키 레지스터(RKd1, RKd2)에 당해 다른 키 ID를 격납하고 나서, 상술한 load명령을 실행하거나 load명령에 키 레지스터 수식을 부가한다. 예컨대, 억세스 키 ID로서 데이터 키 레지스터(RKd3)가 나타내는 키 ID를 사용하고 싶은 경우에는, 이하와 같은 연상으로 표현되는 load명령을 실행한다.
load/kd3 Ra, Rb
여기에서「/kd3」가 키 레지스터 수식이고, 이 경우에는 데이터 키 레지스터(RKd3)에 유지되어 있는 키 ID에 대응하는 키를 억세스 키 ID로서 load명령「load Ra, Rb」와 마찬가지의 처리가 실행되야 한다는 것을 의미하고 있다.
또, RKd0에는 상술한 키 ID "0"이 항상 유지되어 있다. 이 키 ID "0"은「암호화 없음」 상태를 나타내고 있다. 내탬퍼 상태에 있어서 암호화하지 않고 메모리 억세스(예컨대, load)를 행하는 경우에는, 이 RKd0에 의해 키 레지스터 수식을 행한다. 이러한 키 레지스터 수식을 행하는 명령은, 예컨대 이하와 같은 연상으로 표현한다.
load/kd0 Ra, Rb
이것은 Rb로 나타내어지는 메모리 어드레스를 포함하는 블록이 평문 그대로라고 간주하여 당해 블록의 내용을 복호화하지 않고, 그대로 Ra로 읽어들이는 것을 의미한다.
또, 키 레지스터 수식으로 이용하는 키 레지스터는 상술한 바와 같은 데이터 키 레지스터(RKd0∼RKdn)로 한정되지 않는다. 예컨대, 다음과 같이 실행키 레지스터(RKx)로 키 레지스터 수식을 하는 것도 가능하도록 되어 있다.
load/kx Ra, Rb
이것은 Rb로 나타내어지는 메모리 어드레스가 (프로그램) 실행키로 암호화된 블록내에 있는 것으로 간주하고, 실행키 레지스터(RKdx)에 유지되어 있는 키 ID에 대응하는 현재의 실행키를 이용하여 복호화하는 것을 의미한다.
이와 같이, 실행키로 메모리의 내용을 복호화하는 Load명령을 정의함으로써, 미리 내탬퍼 프로그램내의 암호화 부분에 비밀 데이터를 안전하게 매립해 두고, 실행시에 참조시키는 프로그램의 실행을 가능하게 할 수 있다.
이에 따라, 프로그램내의 데이터의 안전성의 향상에 기여할 수 있다. 또, 이와 같은 프로그램의 작성의 부담을 저감시킬 수 있다.
또, 키 레지스터 수식은 상술한 load명령에 한정되지 않고, 예컨대 연산명령 등의 메모리 억세스를 수반하는 임의의 명령에 부가할 수 있다.
(3) 키의 로드
또, 이 마이크로프로세서(100)에서는 데이터 키 레지스터에 키를 설정할 수있도록 되어 있다. 이를 위한 명령은, 예컨대 이하와 같은 연상으로 표현한다.
loadkd RKd, Ra
이 loadkd명령은 2개의 오퍼랜드를 필요로 한다. RKd는 데이터 키 레지스터(RKd0) 이외의 데이터 키 레지스터(RKd1∼RKdn)중 하나를 지정하는 오퍼랜드이다. 또, Ra는 설정해야 할 대칭키가 격납되어 있는 어드레스를 유지하고 있는 레지스터를 지정하는 오퍼랜드이다. 또, 이 명령은 내탬퍼 상태로 실행되기 때문에, 이 Ra로 지정되는 레지스터에 격납되어 있는 어드레스에는 암호화된 대칭키가 격납되어 있다. 따라서, 암호화된 대칭키를 평문으로 복호화하여 독출하기 위해, 이 Ra로 지정되는 레지스터는 상술한 어느 하나의 어드레스 수식에 의해 평문 이외의 유효한 키를 나타내는 키 ID를 유지하는 데이터 키 레지스터에 의해 키 레지스터 수식되어 있을 필요가 있다.
loadkd가 실행되면, Ra로 유지되어 있는 어드레스에 유지되어 있는 대칭키가 독출된다. 독출된 대칭키는 상술한 바와 같이 수식되어 있는 데이터 키 레지스터의 내용(키 ID)에 대응하는 키로 복호화된다. 복호화된 대칭키에는 비어 있는 적당한 키 ID가 할당된다. 그리고, 복호화된 대칭키는 할당된 키 ID에 대응하는 키 데이터 유지부(106b)에 유지된다. 이것과 병행하여 Rkd로 지정된 데이터 키 레지스터에는 당해 대칭키에 할당된 키 ID가 격납된다.
이 loadkd명령에도, 상술한 load명령과 마찬가지로 키 레지스터 수식을 부가할 수 있다. 키 레지스터 수식된 loadkd명령은, 예컨대 이하의 연상으로 표현한다.
loadkd/kx RKd, Ra
여기에서, RKd는 데이터 키 레지스터를 지정하는 오퍼랜드이고, Ra는 외부메모리(1)상의 어드레스를 지정하는 오퍼랜드이다. 이 loadkd명령은 실행키 레지스터(RKx)로 수식되어 있기 때문에, Ra로 지정되는 어드레스는 실행키 레지스터(RKx)에 유지되어 있는 키 ID에 대응하는 현재의 실행키로 암호화된 프로그램 코드와 같은 암호화 블록내로 할 수 있다.
이러한 loadkd명령을 이용함으로써, 데이터참조에 이용하는 고정키를 미리 프로그램내에 암호화하여 매립해 두고, 실행시에 참조하는 프로그램의 실행을 가능하게 할 수 있다. 이에 따라, 프로그램내의 데이터의 안전성의 향상에 기여할 수있다. 또, 이와 같은 프로그램의 작성의 부담을 저감시킬 수 있다.
(4) 키의 격납
또, 이 마이크로프로세서(100)에서는, 데이터 키 레지스터에 키 ID가 격납되어 있는 키를 키 테이블(106)로부터 외부메모리(1)에 격납할 수 있도록 되어 있다. 이를 위한 명령은, 예컨대 이하와 같은 연상으로 표현한다.
storek Ra, RK
여기에서, Ra는 외부메모리(1)상의 어드레스를 나타내는 레지스터를 지정하는 오퍼랜드이고, RK는 키 레지스터 세트내의 임의의 레지스터(데이터 키 레지스터(RKd1∼RKdn)를 지정하는 오퍼랜드이다.
이 storek명령이 실행되면, RK로 지정되는 키 레지스터에 격납되어 있는 키 ID에 대응하는 키가, 키 데이터 유지부(106b)로부터 독출되고, 외부메모리(1)상의Ra로 지정된 어드레스에 격납된다.
그런데, Ra로 지정되는 레지스터에는, 상술한 내탬퍼 상태에서의 다른 메모리 억세스명령과 마찬가지로 키 레지스터 수식이 이루어지고 있다. 이 때문에, 암호화 처리부(109)는 연산처리부(103)로부터의 지시에 따라 Ra로 지정되는 레지스터에 대응하는 키 레지스터에 격납되어 있는 키 ID에 대응하는 키에 의해 써내고자 하는 키를 암호화하여 외부메모리(1)에 격납한다.
또, 이 storek명령에 대해서도 상술한 각 명령과 마찬가지로 키 레지스터 수식을 행할 수 있다. 키 레지스터 수식을 행할 때의 storek명령은, 예컨대 이하와 같은 연상으로 표현한다.
storek/kx Ra, RK
이 경우에는, 실행키로 키 레지스터 수식되어 있기 때문에, 실행시에는 현재의 실행키로 암호화하여 지시된 키가 외부메모리(1)에 써내어진다.
이 storek명령은 키 레지스터에 격납된 키 ID가 아니라, 키 ID에 대응하는 키 그 자체를 써낸다. 써내어지는 키에는 상술한 바와 같이 소정의 암호화가 이루어져 있기 때문에, 키 ID "0"에 대응하는 키의 실제의 값을 마이크로프로세서(100) 밖에서 직접 알 수 없다.
또, 이 storek명령으로 써내어진 키는 상술한 loadkd명령으로 재차 키 테이블(106)에 설정할 수 있다. 이 때문에, loadkd명령과 storek명령에 의해 다수의 키를 일시적으로 외부메모리(1)에 퇴피할 수 있다. 이에 따라, 프로그램내에서 다수의 키를 적절히 구별하여 사용할 수 있게 된다.
(5) 데이터 키 레지스터로 신규의 일시키를 격납
이 마이크로프로세서(100)에서는 이미 존재하고 있는 키를 키 테이블(106)에 격납하기 위해, 상술한 loadkd명령을 사용한다. 이 loadkd명령에 의해 읽어들이는 키는 프로그램에 의해 생성해도 좋다. 이러한 키를 생성하기 위해서는, 예컨대 적당한 난수를 생성하고, 이에 따라 키를 생성한다. 이와 같이 생성한 키는, 예컨대 암호화를 위한 일시키로서 사용된다.
그런데, 범용의 OS 등에 있어서 난수를 생성하는 방법으로서는, 어떤 종류의 결정적인 수열을 의사난수로서 이용하는 방법, 프로세서외의 타이머나 인터럽트의 타이밍 등에 의해 얻어지는 값을 비결정적인 수열로 간주하고, 이에 기초하여 난수열을 생성하는 방법 등이 알려져 있다.
그렇지만, 결정적인 수열을 의사난수로 간주하면, 초기 조건을 같게 한 경우에는, 같은 계열의 난수열밖에 발생시킬 수 없고, 이 때문에 외부로부터 난수열이 예측되어 버린다는 문제가 있다.
또, 타이머나 인터럽트 등의 프로세서외에서 발생하는 요인에 의해 얻어지는 값에 기초하여 난수를 생성하는 경우에는, 타이머, 인터럽트 등의 외부 환경을 동일하게 함으로써, 같은 난수계열이 재현되어 버릴 가능성이 있다.
이 때문에 내탬퍼성을 향상시키기 위해서는, 외부로부터 예측될 수 없는 난수열을 마이크로프로세서내에서 생성할 필요가 있다.
이 때문에, 이 마이크로프로세서(100)에서는 상술한 바와 같이 난수발생부 (104)를 설치하고 있다. 이 난수발생부(104)는 상술한 바와 같이 콘텍스트 스위치시의 프로세서 일시 키(Kc)를 생성하는 외에 상술한 바와 같이 프로그램으로부터 이용하는 키를 생성하기 위해서도 이용할 수 있도록 되어 있다. 이 때문에, 난수발생부(104)가 발생시키는 난수는 연산처리부(103)에도 공급되고 있다.
연산처리부(103)가, 난수발생부(104)로부터 공급된 난수에 따라 키를 생성할 수 있도록 되어 있다. 이와 같이 키를 생성하는 명령은, 예컨대 이하의 연상으로 표현한다.
genrndkd RKd
이 genrndkd명령은 1개의 오퍼랜드를 필요로 한다. RKd는 데이터 키 레지스터(RKd0) 이외의 데이터 키 레지스터(RKd1∼RKdn)중 하나를 지정하는 오퍼랜드이다. 이 genrndkd명령을 실행하면, 암호화 처리부(109)는 연산처리부(103)로부터의 지시에 따라 난수발생부(104)로부터 취득한 난수에 따른 키를 생성한다. 생성한 키에는, 비어 있는 적당한 키ID가 할당된다. 키 ID가 할당되면, 암호화 처리부 (109)는 상술한 바와 같이 생성한 키를 당해 키 ID에 대응하는 키 데이터 유지부 (16b)에 격납하고, 당해 키 ID를 RKd에 의해 지정된 데이터 키 레지스터에 격납한다.
이와 같이 키 ID가 격납된 데이터 키 레지스터는, 이후는 유효한 암호키를 유지하고 있어 상술한 키 레지스터 수식 등에 사용할 수 있다.
(6) 키 레지스터간의 키 ID의 조작
또, 이 마이크로프로세서(100)에서는 키 레지스터간의 키 ID의 이동이 가능하도록 되어 있다. 이를 위한 명령은, 예컨대 이하의 연상으로 표현한다.
movekd RKd, RK
이 movekd명령은 2개의 오퍼랜드를 필요로 한다. RKd는 RKd0 이외의 데이터 키 레지스터(RKd1∼RKdn)중 하나를 지정하는 오퍼랜드이다. RK는 키 레지스터 세트내의 임의의 레지스터를 지정하는 오퍼랜드이고, RKd0를 포함하는 모든 데이터 키 레지스터 또는 실행키 레지스터(RKx)를 지정한다. 이 movekd명령을 실행하면, RK로 저정되는 키 레지스터에 격납되어 있는 키 ID가 RKd로 지정되는 키 레지스터에 카피되어 격납된다. 특히 RK로서 RKd0를 지정한 경우는 RKd로 지정된 키 레지스터에 비암호화를 나타내는 키 ID "0"이 대입되게 된다.
RK로서 실행키 레지스터(RKx)를 지정한 경우는, RKd로 나타내어진 데이터 키 레지스터에 의한 수식을 이용하여 프로그램 코드내에 실행키와 같은 암호키로 격납한 데이터에 억세스할 수 있도록 된다.
또, 이 마이크로프로세서(100)에서는 데이터 키 레지스터 사이에서 유지하고 있는 키 ID의 교환을 행할 수 있도록 되어 있다. 이를 위한 명령은, 예컨대 이하의 연상으로 표현한다.
exchgkd RKda, RKdb
이 exchgkd명령은 2개의 오퍼랜드를 필요로 한다. RKda 및 RKdb는 각 데이터 키 레지스터(RKd0) 이외의 데이터 키 레지스터(RKd1∼RKdn)중 하나를 지정하는 오퍼랜드이다. 또, RKda와 RKdb는 다른 데이터 키 레지스터를 지정한다. 이 exchgkd명령이 실행되면, RKda로 지정된 키 레지스터에 유지되어 있는 값(키 ID)과 RKdb로 지정된 키 레지스터에 유지되어 있는 값(키 ID)이 교환된다.
4. 마이크로프로세서의 상세 동작
(1) 외부메모리 억세스
내탬퍼 상태에 있어서, 마이크로프로세서(100)가 외부메모리(1)에 대한 억세스를 행할 때에는, 연산처리부(103)는 억세스하고자 하는 외부메모리(1)상의 어드레스를 포함하는 암호화 블록이, 억세스 키 ID가 나타내는 키에 의해 암호화되어 있는 것으로 간주하여 억세스한다.
a. 외부메모리 억세스에 이용되는 키 ID
이 마이크로프로세서(100)에서는 외부메모리(1)에 대한 억세스에는 항상 하나의 키 ID(억세스 키 ID)가 수반된다.
비내탬퍼 상태에서의 프로그램의 실행시에는 억세스 키 ID는 비암호화를 나타내는 0이다. 또, 인터럽트, 예외에 의한 콘텍스트의 퇴피ㆍ복귀에 있어서는 억세스 키 ID는 프로세서 일시 키(Kc)를 의미하는 1이다. 또, 내탬퍼 상태에서의 프로그램을 독출할 때에는 억세스 키 ID는 실행 키 레지스터(RKx)에 격납되어 있는 키 ID이다.
상술한 바와 같이, 내탬퍼 상태의 프로그램이 외부메모리(1)에 억세스할 때에는 당해 억세스를 행하는 명령에 있어서, 어떤 키 레지스터를 이용하는지를 나타내는 키 레지스터 수식을 행할 수 있도록 되어 있다. 이 키 레지스터 수식이 이루어지는 경우에는 억세스 키 ID는 당해 명령에 있어서 지정된 키 레지스터에 격납되어 있는 키 ID로 된다.
이와 같은 키 레지스터 수식이 없는 경우에는 상술한 바와 같이 메모리 억세스 명령 및 그 어드레싱 모드에 의해 미리 정해져 있는 생략시 키 레지스터에 격납되어 있는 키 ID가 억세스 키 ID로 된다.
b. 키 ID와 캐시 메모리의 관계
연산처리부(103)가 억세스하고자 하는 어드레스의 데이터가 캐시(101)에 유지되어 있지 않은 경우(캐시(101)가 히트하지 않은 경우)는 캐시 콘트롤러(101b)는 새로운 캐시라인을 확보한다. 새로운 캐시라인을 확보하기 위해서는, 오래된 캐시라인을 해방시키지 않으면 안되는 경우도 있지만, 캐시라인의 해방에 대해서는 다른 항에서 설명하고 있는 바와 같다.
이 후, 캐시 콘트롤러(101b)는 암호화 처리부(109)에 의해 상술한 억세스 키 ID에 대응하는 키로 복호화된 외부메모리(1)상의 데이터를, 확보한 캐시라인에 읽어들이게 하고, 태그격납영역(101c)에는 복호화에 사용한 억세스 키 ID를 격납한다. 이와 같은 캐시 동작이 종료하면, 연산처리부(103)는 캐시된 데이터에 억세스한다.
프로세서가 억세스하고자 하는 어드레스의 데이터가 캐시(101)에 유지되어 있는 경우(캐시(101)가 히트한 경우)는, 캐시 콘트롤러(101b)는 히트한 캐시라인의 태그격납영역(101c)의 내용과 억세스 키 ID를 비교한다. 이것들이 일치하면, 그 캐시라인의 내용을 그대로 사용한다.
캐시(101)가 히트했지만, 태그격납영역(101c)의 내용과 억세스 키 ID가 일치하지 않은 경우는, 캐시 콘트롤러(101b)는 이 캐시라인을 해방한다. 캐시라인의 해방에 대해서는 다른 항에서 설명하고 있다. 이 후, 캐시 콘트롤러(101b)는 캐시가 히트하지 않은 경우와 마찬가지로, 억세스하고자 하는 어드레스의 데이터(암호화 블록)가 억세스 키 ID가 나타내는 키로 암호화되어 있는 것으로 간주하고, 암호화 처리부(109)에 의해 복호화된 데이터를 캐시라인에 읽어들여 태그격납영역 (101c)에 억세스 키 ID를 격납한다. 이 후, 연산처리부(103)는 캐시된 데이터에 억세스한다.
이 경우는, 캐시라인의 해방처리와 읽어들이는 처리시에 외부메모리(1)에 대한 실제 억세스를 행하지 않고도 프로세서내에서만 처리함으로써, 외부메모리 억세스를 최소화하여 고속화를 도모하는 것도 가능하다. 이 경우에도, 태그격납영역 (101c)의 내용과 억세스 키 ID가 일치하고 있지 않은 상태이기 때문에, 연산처리부 (103)가 현재 캐시되어 있는 데이터에 그대로 억세스하지 않도록 할 필요가 있다. 이 때문에, 예컨대 캐시되어 있는 데이터를 태그격납영역(101c)의 데이터로 암호화한 후, 억세스 키 ID로 복호화한 데이터를 당해 캐시라인에 격납한다. 이 후, 연산처리부(103)가 캐시되어 있는 데이터에 억세스한다.
이 마이크로프로세서(100)에서는 상술한 키 ID의 일의성(一意性)으로부터 캐시(101)의 태그격납영역(101c)의 내용과 억세스 키 ID를 비교하고, 실제 외부메모리(1)의 데이터의 암호화ㆍ복호화의 처리를 최소화하고, 적절한 억세스 제한을 행함으로써, 캐시(101)를 이용한 외부메모리(1)에 대한 억세스를 고속화할 수 있다.
(2) 키 레지스터의 조작
a. 키 레지스터의 값의 설정
이 마이크로프로세서(100)에서는 (a) 내탬퍼 프로그램의 개시명령의 실행시,(b) 내탬퍼 프로그램내에서 발행되는 데이터 키의 로드명령의 실행시, (c) 암호화 콘텍스트의 복귀시에 키 레지스터(RKx, RKdi(i=0, 1, …, n))에 값을 설정한다.
키 레지스터에 대한 값(키 ID)의 설정에서는, 연상처리부(103)는 먼저 값을 설정하고자 하는 키 레지스터가, 유효한 키 테이블상의 ID를 유지하고 있는지의 여부를 조사한다. 키 레지스터가 키 테이블(106)상의 유효한 ID를 유지하고 있는 경우는, 연산처리부(103)는 키 테이블(106)의 대응하는 키 ID의 레지스터 참조카운터 (106a)의 값을 하나 감소시킨다. 또, 레지스터 참조카운터(106a)의 값이 0으로 되어도, 대응하는 키 ID가 즉시 해방되는 것은 아니다.
다음으로, 연산처리부(103)는 설정하고자 하는 키와 일치하는 키가 키 테이블(106)내에 있는지의 여부를 조사한다. 일치하는 키가 있는 경우는, 연산처리부(103)는 이 키에 대응하는 레지스터 참조카운터(106a)의 값을 하나 증가시켜 대응하는 키 ID를 키 레지스터에 격납한다.
일치하는 키가 키 테이블(106)에 존재하지 않는 경우는, 연산처리부(103)는 키 테이블(106)내의 비어 있는 키 ID를 찾는다. 비어 있는 키 ID가 있는 경우에는, 연산처리부(103)는 임의의 비어 있는 키 ID를 선택하고, 선택한 키 ID에 대응하는 키 데이터 유지부(106b)에 키를 격납하여, 레지스터 참조카운터(106a)의 값을 1로 한다. 또, 연산처리부(103)는 키 ID를 키 레지스터에 격납한다.
키 테이블(106)에 비어 있는 키 ID가 없는 경우에는, 연산처리부(103)는 레지스터 참조카운터(106a)의 값이 0으로 되어 있는 키 ID를 선택한다. 키 테이블 (106)의 키 ID수는 키 레지스터군(102b)내의 레지스터수보다 많기 때문에, 비어 있는 키 ID가 없는 경우에도, 레지스터 참조카운터(106a)의 값이 0으로 되어 있는 키 ID는 반드시 존재한다. 연산처리부(103)는 선택한 키 ID를 해방시킨다. 이 후, 비어 있는 키 ID가 있는 경우와 마찬가지로 키를 격납하여 키 레지스터의 값을 설정한다.
b. 키 테이블 엔트리의 해방
키 테이블(106)로부터의 키 ID의 해방에서는, 연산처리부(103)는 먼저 캐시메모리(101)를 조사하고, 태그격납영역(101c)의 값이 해방하고자 하는 키 ID와 일치하는 캐시라인을 모두 해방시킨다. 캐시라인을 해방시키기 위해 내용을 외부메모리(1)로 쓸어낼 필요가 있는 경우에는, 대응하는 키 데이터 유지부(106b)에 격납되어 있는 키를 이용하여 암호화시킨 후, 외부메모리(1)로 쓸어낸다.
태그격납영역(101c)의 값이 해방하고자 하는 키 ID와 일치하는 캐시라인이 모두 해방되면, 연산처리부(103)는 해방하고자 하는 키 ID가 키 레지스터군(102b)내의 어느 하나의 레지스터에도 유지되어 있지 않은 것을 확인한다. 키 레지스터군(102b)내의 어느 하나의 레지스터에도 해방하고자 하는 키 ID가 유지되어 있지 않으면, 연산처리부(103)는 당해 키 ID를 해방시킨다. 어느 하나의 레지스터에 해방하고자 하는 키 ID가 유지되어 있는 경우에는, 당해 키 ID가 사용중이기 때문에 이 키 ID는 해방되지 않는다. 이러한 확인은 어떤 순간에 마이크로프로세서(100)내에서 사용되는 모든 키 ID가 적절한 키를 나타내고 있는 것을 보증하기 위해 필요하다.
c. 키 테이블 엔트리 해방의 최적화
해방하는 캐시라인을 선택하는 많은 방법이 캐시의 효율을 최적화하기 위해 제안되어 있다. 이들 방법은 해방하는 키 ID의 선택을 최적화하기 위해서도 이용할 수 있다.
(3) 콘텍스트의 퇴피와 복귀
a. 콘텍스트의 퇴피
도 4는 상술한 바와 같이 외부메모리(1)에 퇴피할 때에 암호화된 콘텍스트(암호화 콘텍스트)의 포맷을 나타내고 있다.
이 암호화 콘텍스트(200)는 동 도면내에 나타낸 바와 같이 콘텍스트의 퇴피를 행했던 원인을 나타내는 암호화 콘텍스트 플래그(201)와, 암호화된 콘텍스트 등이 격납되는 페이로드(202)를 갖추고 있다.
암호화 콘텍스트 플래그(201)는 콘텍스트의 퇴피를 행하는 원인이 통상의 인터럽트, 예외처리인지 상술한 시스템 콜인지를 나타내는 것이다.
페이로드(202)에는 상술한 통상 레지스터군(102a)의 레지스터의 데이터(203)와, 키 레지스터군(102b)의 레지스터의 데이터(204), 페이로드(202)내의 데이터를 셔플하기 위한 난수(205) 및, 암호화 콘텍스트가 마이크로프로세서(100) 자신에 의해 작성된 것임을 증명하기 위한 서명(206) 등이 격납된다.
데이터(203) 및 데이터(204)는, 콘텍스트가 동일해도 페이로드(202)내의 데이터(203, 204)가 다른 값으로 되도록 난수(205)에 따라 셔플되고 있다. 이 난수(205)는 암호학적으로 충분한 랜덤함을 가지고, 다른 프로세서 개체마다 다르며, 프로세서의 리셋마다 달라 마이크로프로세서(100) 외부로부터 예측되기 어려운난수를 이용하는 것이 바람직하다. 이 때문에, 예컨대 각각의 콘텍스트의 퇴피마다 난수발생부(104)에 의해 발생된다.
또, 서명(206)은 셔플된 데이터(203, 204), 난수(205)의 정당성을 증명하기 위해 부가되어 있다. 이 서명(206)은, 예컨대 마이크로프로세서(100)에 의해 생성된 것임을 나타내기 위한 것이고, 예컨대 해시함수의 하나인 MD(메시지 다이제스트)5 등에 의해 생성한 데이터(203)∼난수(205)의 다이제스트를 이용할 수 있다. 혹은, 프로세서 일시 키(Kc)를 이용한 콘텍스트의 암호화에 있어서 콘텍스트 전체가 하나의 암호화 블록으로 되어 있든지, 혹은 적절히 체이닝(연결)되어 있는 경우에는 서명(206)으로서 난수(205) 그 자체를 이용할 수 있다.
콘텍스트 전체를 적절히 체이닝하고 있는 경우는, 암호화에 있어서 구해진 다이제스트를 이용함으로써, 콘텍스트의 다이제스트의 계산을 생략할 수 있기 때문에, 콘텍스트의 보존을 비교적 고속으로 행할 수 있다. 또, 이 경우는 다이제스트이 변화를 피하기 위해, 암호화전에 콘텍스트에 대해 데이터 압축 등의 콘텍스트의 데이터의 엔트로피를 변화시키는 처리를 해서는 안된다.
또, 페이로드(202)내의 데이터(203)∼서명(206)은 전체가 프로세서 일시 키(Kc)에 의해 암호화되어 있다. 이러한 구성의 암호화 콘텍스트는 콘텍스트의 퇴피시에 연산처리부(103)로부터의 지시에 따라 암호화 처리부(109)가 생성한다.
도 5는 이러한 콘텍스트의 퇴피처리를 나타내고 있다. 전원투입시 혹은 마이크로프로세서(100)의 리셋시에 상술한 도 3에 나타낸 바와 같이 프로세서 일시 키(Kc)가 설정되면, 동 도면내의 스텝 S11로부터의 처리가 개시된다. 예외검출부(108)는 이 스텝 S11에 있어서, 예컨대 인터럽트, 프로세스 절환에 의해 콘텍스트 스위치의 요구 등의 예외상태의 발생을 감시한다. 이들 예외상태가 발생하지 않으면, 예외검출부(108)는 이 스텝 S11에 있어서 예외상태의 발생을 대기한다.
예외상태가 발생하면, 연산처리부(103)는 먼저 콘텍스트로서 보존해야 할 정보를 수집한다(S12). 구체적으로는, 내탬퍼동작과는 직접 관계하지 않는 통상 레지스터군(102a)내의 레지스터의 내용, 내탬퍼동작에서의 키 ID를 유지하고 있는 키 레지스터군(102b)내의 레지스터의 내용(키 ID) 및 이 키 ID에 대응하는 키 테이블 (106)내의 키, 셔플을 위한 난수 등을 취득한다.
이들 정보를 취득하면, 연산처리부(103)는 셔플을 위한 난수를 이용하여 레지스터군(102)내의 레지스터의 값을 셔플한다(S13). 이 후, 연산처리부(103)는 셔플한 레지스터의 값, 셔플에 이용한 난수의 값의 정당성을 나타내는 서명을 생성한다(S14).
더욱이, 연산처리부(103)는 이들 정보를 페이로드(202)내의 소정의 영역(203∼206)의 데이터로 하고, 이들 전체를 프로세서 일시 키(Kc)에 의해 암호화하도록 암호화 처리부(109)에 지시한다(S15). 암호화 처리부(109)에 의한 암호화가 종료하면, 암호화한 콘텍스트 등에 콘텍스트의 퇴피의 원인을 나타내는 정보, 프로세서 일시 키(Kc)에 의한 암호화를 나타내는 정보 등을 평문 그대로 암호화 콘텍스트 플래그(201)로서 부가하고, 외부메모리(1)상의 소정의 어드레스에 격납한다(S16). 이 후, 재차 스텝 S11에 있어서 예외상태의 발생을 대기한다.
콘텍스트의 퇴피가 종료하면, 키 레지스터군(102b)내의 모든 레지스터는 클리어되어 유효한 ID를 지시하고 있지 않은 상태로 된다.
또, 상술한 콘텍스트의 퇴피에 있어서는, 동시에 키 테이블(106)에 유지되어 있는 키를 퇴피할 수도 있게 되어 있다. 키도 퇴피하는 경우에는 키의 데이터는, 예컨대 페이로드(202)내의 데이터로서 외부메모리(1)에 퇴피된다. 이와 같이 키 테이블(106)내의 키를 퇴피한 경우에는, 대응하는 레지스터 참조카운터(106a)의 값은 0으로 되어, 다른 프로세스 등에 있어서 대응하는 키 ID를 할당할 수 있게 된다.
이와 같이 콘텍스트의 퇴피에서는, (a) 프로세서 일시 키(Kc)는 외부에 알려지기 어려운 난수에 따라 생성되어 있기 때문에, 비밀키방식의 암호화 방법을 이용할 수 있고, (b) 리셋마다 프로세서 일시 키(Kc)의 값이 변경되기 때문에, 콘텍스트의 퇴피마다 다른 키를 생성하지 않아도 프로세서 일시 키(Kc)가 외부에 알려질 가능성이 낮다. 이 때문에, 리셋될 때까지는 모든 콘텍스트의 퇴피에 동일한 키를 사용해도 내탬퍼성의 레벨을 유지할 수 있다.
그런데, 외부에 알려질 가능성이 이 마이크로프로세서(100)에서의 프로세서 일시 키(Kc)에 비교하여 높은 키(대칭키)를 콘텍스트의 암호화에 이용하는 마이크로프로세서에서는, 내탬퍼성의 레벨의 유지를 위해, 예컨대 복수의 키를 준비해 두고, 콘텍스트의 퇴피마다 다른 키를 사용할 필요가 있다. 이러한 처리를 실현하기 위해서는, 마이크로프로세서내에 퇴피하는 콘텍스트와 당해 콘텍스트의 암호화에 이용한 키의 대응을 나타내는 테이블을 설치할 필요가 있다.
콘텍스트의 퇴피는 프로세스간의 절환시에 실행되기 때문에, 이러한 마이크로프로세서에서는 동시에 실행할 수 있는 프로세스의 수가 상술한 테이블의 용량에 따라 제약을 받는다. 혹은, 동시에 실행하는 프로세스를 증가시키기 위해 소프트웨어에 의한 키의 관리 등의 특별한 처리가 별도로 필요하게 되기 때문에, 성능이 저하된다.
이에 대해, 이 마이크로프로세서(100)에서는, 상술한 바와 같이 콘텍스트의 퇴피에는 동일한 키를 이용하고 있기 때문에, 동시에 실행할 수 있는 프로세스의 수는 테이블의 용량 등에 따라서는 제약을 받지 않는다. 따라서, 별도로 특별한 처리가 필요하지 않아 성능을 저하시키는 일도 없다.
b. 콘텍스트의 복귀
마이크로프로세서(100)는, 상술한 바와 같이 퇴피한 콘텍스트를 복귀시키는 명령을 실행함으로써, 외부메모리(1)의 임의의 어드레스에 격납된 콘텍스트를 복귀시킬 수 있게 되어 있다.
이 콘텍스트 복귀명령은, 통상 OS 등의 시스템 프로그램에서만 이용되는 특권명령이지만, 특권명령의 개념이 없는 마이크로프로세서 등에서는 OS 이외의 프로그램이 실행하는 경우도 있다.
도 6은 이러한 콘텍스트의 복귀처리를 나타내고 있다. 이 마이크로프로세서 (100)에서는 전원투입시 혹은 리셋시에 상술한 프로세서 일시 키(Kc)가 설정되면, 동 도면내의 스텝 S21로부터의 처리가 개시된다. 이 스텝 S21에 있어서, 연산처리부(103)는 콘텍스트의 복귀요구인지의 여부를 판단한다. 복귀요구가 없으면, 연산처리부(103)는 이 스텝 S21에 있어서 복귀요구를 대기한다.
콘텍스트의 복귀요구가 있으면, 연산처리부(103)는 복귀가 요구되고 있는 암호화 콘텍스트를 외부메모리(1)로부터 독출한다(S22).
암호화 콘텍스트를 독출하면, 연산처리부(103)는 암호화 콘텍스트 플래그 (201)를 조사한다(S23). 이 플래그가 평문인 것을 나타내고 있는 경우에는, 암호화 콘텍스트(202)가 실제로는 암호화되어 있지 않기 때문에, 연산처리부(103)는 암호화 콘텍스트(202)의 내용을 그대로 레지스터군(102)내의 레지스터 등의 값으로서 복귀시키고(S24), 스텝 S21로 되돌아가 다음의 콘텍스트의 복귀요구를 대기한다.
한편, 암호화 플래그(602)가 암호화인 것을 나타내고 있는 경우에는, 이하의처리가 자동적으로 실행된다.
먼저, 연산처리부(103)는 암호화 콘텍스트(202)를 읽어들이고, 암호화 처리부(109)에 프로세서 일시 키(Kc)에 의한 복호화를 지시한다(S25). 이에 따라, 난수(205), 데이터(203; 키 레지스터군(102b)내의 레지스터의 데이터), 데이터(204; 통상 레지스터군(102a)내의 레지스터의 데이터), 서명 (206)이 취출된다.
이 후, 연산처리부(103)는 서명(206)에 의해 데이터(203, 204), 난수(206)가 마이크로프로세서(100)에 의해 정당하게 생성된 것인지의 여부를 검증하고(S26), 검증이 성공했는지의 여부를 판단한다(S27).
검증에 실패한 경우는, 콘텍스트의 복귀에 실패하고 있기 때문에, 연산처리부(103)는 상술한 바와 같이 복호화된 데이터(203, 204), 난수(205), 서명(206)을 소거(S28)한 후, 예외를 발생시키고(S29), 스텝 S21로 되돌아가 복귀요구를 대기한다.
한편, 검증에 성공하면, 연산처리부(103)는 난수(205)에 의해 셔플된 데이터 (203, 204)를 원래 상태로 되돌린다(S30). 또, 일단 서명이 검증되고, 셔플된 데이터를 원래 상태로 되돌린 후는, 마이크로프로세서(100)는 난수(603)를 무시한다.
이 후, 연산처리부(103)는 키 레지스터군(102b)내의 각 레지스터(RKd0∼RK dn)의 값과, 이들 레지스터에 유지되어 있는 키 ID에 대응하는 키를 복귀시킨다 (S31 이후).
구체적으로는, 연산처리부(103)는 먼저 원래 상태로 되돌린 콘텍스트내의 키 레지스터내의 키 ID를 취출하고, 이 키 ID에 대응하는 키 테이블(106)의 대응하는 키와, 콘텍스트내의 대응하는 키를 비교한다(S31). 이들 키가 일치하고 있으면, 키 ID를 대응하는 키 레지스터에 그대로 복귀시킨다(S32).
키가 일치하고 있지 않는 경우는, 콘텍스트내의 키를 새로 키 테이블(106)에 등록하고(S33), 등록에 의해 할당된 키 ID를 키 레지스터의 값으로 한다(S34). 이 처리는 상술한 내탬퍼 프로그램을 개시할 때의 실행키의 등록, 내탬퍼 프로그램내에서의 데이터 키의 등록시와 마찬가지로, 예컨대 상술한 strtenc명령을 실행하여 행해진다.
또, 연사처리부(103)는 키의 복귀가 실패했는지의 여부를 판정하고(S35), 실패하고 있는 경우에는, 콘텍스트의 복귀를 행하지 않고, 상술한 스텝 S28, S29의 처리를 실행한다.
키의 등록이 실패하고 있지 않으면, 연산처리부(103)는 모든 키의 복귀가 종료했는지의 여부를 판정하고(S36), 종료하고 있지 않으면 나머지 키 레지스터의 값의 복귀를 실행한다(S31∼S36).
모든 키 레지스터의 값의 복귀가 종료한 경우로 한정되고, 그 외의 통상의 콘텍스트(605)를 복귀시킨다. 즉, 모든 키 레지스터의 값이 종료한 후, 연산처리부(103)는 통상 레지스터군(102a)내의 레지스터의 값을 복귀시킨다(S37). 그리고, 콘텍스터의 복귀가 종료하면, 스텝 S21로 되돌아가 복귀요구를 대기한다.
상술한 바와 같이 콘텍스트가 복귀되면, 당해 콘텍스트에 대응하는 프로그램은, 예컨대 소정의 타임슬롯동안 실행상태로 된다.
또, 상술한 콘텍스트의 복귀처리에 있어서, 연산처리부(103)는 콘텍스트 퇴피를 행하는 원인을 암호화 콘텍스트 플래그(201)에 의해 조사하고, 시스템 콜명령에 의해 퇴피된 콘텍스트인 경우에는 시스템 콜명령으로 지정된 레지스터에 대해서는 콘텍스트 복귀전의 값을 복귀시키지 않고, 현재 상태 그대로 둔다.
각각의 암호화 콘텍스트의 복귀는, 모든 콘텍스트를 복귀시켜(S37) 성공리에 종료하거나, 혹은 어떠한 이유로 실패하여 레지스터의 값의 복귀를 전부 행하지 않고 예외를 발생시켜(S29) 종료하는 것중 어느 하나의 결과로 종료한다. 이 때문에, 일부 레지스터의 내용만이 복귀되는 경우는 없다. 이것은 콘텍스트의 복귀후의 내탬퍼 프로그램의 동작을 불안정하게 하는 것을 방지하기 위함이다.
5. 정리
이 실시형태에 따른 마이크로프로세서에서는, 상술한 바와 같이 콘텍스트의 암호화ㆍ복호화에, 전원투입 혹은 리셋마다 다른 난수에 의해 생성되는 프로세서 일시 키(Kc)를 이용하여 대칭키 암호(공통키방식 암호)에 의한 콘텍스트 암호화ㆍ복호화를 행함으로써, 콘텍스트를 암호화하여 외부메모리(1)에 퇴피하는 콘텍스트ㆍ스위치의 고속화에 기여할 수 있다.
또, 마이크로프로세서에서는 상술한 바와 같이 프로세서 일시 키(Kc)는 마이크로프로세서의 외부로부터 값이 추측될 가능성이 매우 낮다.
또, 프로세서 일시 키(Kc)의 값은 암호화/복호화의 처리를 실행하는 암호화 처리부(109)만이 참조할 수 있게 되어 있다. 이 때문에, 예컨대 연산처리부(103)에서 실행되고 있는 프로그램 등으로부터는 프로세서 일시 키(Kc)의 값을 참조할 수 없다. 이 때문에, 외부메모리(1)에 퇴피된 콘텍스트를 직접 복호화하거나, 자의적인 개변을 가하는 것이 매우 곤란해진다.
또, 이 마이크로프로세서에서는 퇴피하는 콘텍스트에 프로그램 실행키를 포함시킴으로써, 예컨대 다른 내탬퍼 프로그램 사이에서 퇴피된 콘텍스트를 바꿔 넣어도 의도한 동작을 계속시킬 수 없다.
또, 이 마이크로프로세서에서는 내부에 콘텍스트마다의 키를 유지하는 콘텍스트 키 테이블을 갖출 필요가 없기 때문에, 병렬로 실행할 수 있는 프로세스수가 테이블의 용량에 따라서는 제약을 받지 않는다. 이 때문에, 병렬로 실행할 수 있는 프로세스수의 증가에 기여할 수 있다.
또, 이 마이크로프로세서에서는 모든 콘텍스트의 복호화에 같은 프로세서 일시 키(Kc)를 사용하기 때문에, 같은 콘텍스트가 2번 이상 복귀될 가능성을 완전히 부정할 수 없다. 그렇지만, 상술한 바와 같이 프로세서 일시 키(Kc)가 리셋마다 변하기 때문에, 리셋전의 콘텍스트를 리셋후에 복귀시킬 수 없게 되어 있다.
또, 마이크로프로세서에서는 상술한 바와 같이 프로세서 개체마다 다르고, 외부로부터 예측불가능한 난수에 따라 프로세서 일시 키를 생성하고 있기 때문에, 프로세서 일시 키의 값은 각각의 마이크로프로세서마다 다르다. 이 때문에, 외부 환경을 모두 일치시킨다고 해도 마이크로프로세서가 다르면 프로세서 일시 키가 다르다. 따라서, 어떤 마이크로프로세서가 퇴피한 콘텍스트는 마이크로프로세서에서는 복귀시킬 수 없다.
또, 이 마이크로프로세서는 복수의 키 레지스터를 갖추고 있고, 이들 키 레지스터를 자유롭게 선택할 수 있도록 구성되어 있다.
이 때문에, 이들 키 레지스터를 적당히 사용함으로써, 암호화된 안전한 프로그램의 작성의 간략화에 기여할 수 있다.
또, 이 마이크로프로세서에서는 상술한 바와 같이, 프로세서 공개키, 프로세서 비밀키가 각각의 마이크로프로세서마다 다르다. 또, 상술한 바와 같이, 리셋후에 리셋전의 콘텍스트를 복귀시키거나, 다른 마이크로프로세서에서 퇴피된 콘텍스트를 복귀할 수 없다. 이에 따라, 프로그램의 제공자는, 예컨대 특정의 마이크로프로세서의 개체 전용으로 암호화된 프로그램 실행키만을 배포함으로써, 당해 프로그램이 다른 마이크로프로세서에서 실행시키는 것을 방지할 수 있다. 이 때문에, 부정하게 카피한 프로그램이 동작하지 않도록 할 수 있다. 따라서, 프로그램의 보호에 기여할 수 있다.
또, 이 마이크로프로세서에서는 상술한 프로그램 실행키ㆍ데이터의 복호키에 의한 프로그램과 데이터의 보호와, 외부메모리(1)에 퇴피하는 콘텍스트의 암호화에의한 실행상태의 보호에 의해, 프로그램, 데이터에 포함되는 비밀보호의 강화에 기여할 수 있다.
본 발명에서는 일시 키 생성수단이, 마이크로프로세서의 초기화마다, 각각의 마이크로프로세서 개체마다 다르고, 마이크로프로세서 내부의 파라미터에 따라 생성된 난수에 따라 비밀키방식의 암호키를 생성한다. 동작정보 퇴피수단은, 예컨대 인터럽트, 프로세스의 절환시 등에 당해 마이크로프로세서의 동작상태를 나타내는 정보를 일시 키생성수단이 생성한 암호키로 암호화하여 외부기억수단에 격납한다. 이와 같이 퇴피된 동작상태를 나타내는 정보를 복귀시킬 때에는 동작정보 복귀수단이 외부기억수단에 암호화되어 격납되어 있는 동작상태를 나타내는 정보를 일시 키 생성수단이 생성한 암호키로 복호화한다.
일시 키 생성수단이 생성하는 비밀키는, 외부로부터 추측하는 것이 곤란하다. 이 때문에, 이와 같은 비밀키를 이용하여 당해 마이크로프로세서의 동작상태를 외부기억수단에 유지함으로써, 외부 혹은 당해 프로세서에서 실행되고 있는 다른 프로세스 등이 기억장치에 유지된 동작상태를 나타내는 정보를 복호화하여 내용을 아는 것이 매우 곤란하게 된다. 이 때문에, 각각의 동작상태의 퇴피마다 다른 비밀키를 이용하지 않아도 내탬퍼성의 레벨을 유지할 수 있다.
이에 따라, 복수의 비밀키를 이용하는 경우와 같이, 각각의 비밀키를 관리하는 테이블 등이 필요없고, 테이블의 용량에 따라 동시에 실행되는 프로세스수가 제약을 받는 경우가 없다. 이 때문에, 동시에 실행되는 프로세스수의 증가에 기여할수 있다. 또, 동시에 실행되는 프로세스수가 제약을 받지 않기 때문에, 동시에 실행되는 프로세스수가 많은 프로그램의 실행에서의 성능의 개선에 기여할 수 있다.

Claims (6)

  1. 마이크로프로세서의 초기화마다, 각각의 마이크로프로세서 개체마다 다르고, 마이크로프로세서 내부의 파라미터에 따라 생성된 난수에 따라 비밀키방식의 암호키를 생성하는 일시 키생성수단과,
    당해 마이크로프로세서의 동작상태를 나타내는 정보를 상기 일시 키생성수단이 생성한 암호키로 암호화하여 외부기억수단에 격납하는 동작정보 퇴피수단 및,
    상기 외부기억수단에 암호화되어 격납되어 있는 동작상태를 나타내는 정보를 상기 일시 키생성수단이 생성한 암호키로 복호화하는 동작정보 복귀수단을 갖춘 것을 특징으로 하는 마이크로프로세서.
  2. 제1항에 있어서, 외부로 독출할 수 없는 마이크로프로세서 개체마다 다른 공개키방식의 비밀키를 유지하는 비밀키 유지수단과,
    미리 상기 비밀키에 대응하는 공개키에 의해 암호화된 프로그램 실행키를 외부기억수단으로부터 독출하는 실행키 독출수단,
    그 실행키 독출수단에 의해 독출된 상기 프로그램 실행키를 상기 비밀키를 이용하여 복호화하는 실행키 복호수단 및,
    외부기억수단의 소정 어드레스의 내용을 상기 복호화된 프로그램 실행키에 의해 복호화하는 프로그램 실행수단을 갖춘 것을 특징으로 하는 마이크로프로세서.
  3. 제2항에 있어서, 복수의 임의의 암호키를 유지하는 임의 키 유지수단과,
    실행중인 프로그램으로부터 상기 외부기억수단에 대한 억세스가 지시되었을 때에 상기 프로그램으로부터 억세스에 이용하는 키가 지정되지 않은 경우에 당해 억세스에 이용하는 키를, 상기 일시 키생성수단이 생성하는 암호키, 상기 실행키 독출수단이 독출한 프로그램 실행키 및 상기 임의 키 유지수단에 유지되고 있는 암호키중 어느 하나로부터 지정하는 키 지정수단을 갖춘 것을 특징으로 하는 마이크로프로세서.
  4. 제3항에 있어서, 각각의 마이크로프로세서의 개체마다 다르고, 마이크로프로세서 내부의 파라미터에 따라 생성된 난수에 따라 생성된 암호키를 상기 임의 키 유지수단에 격납하는 키 격납수단을 갖춘 것을 특징으로 하는 마이크로프로세서.
  5. 제4항에 있어서, 상기 일시키 생성수단이 생성하는 암호키, 상기 실행키 독출수단이 독출한 프로그램 실행키 및 상기 임의 키 유지수단에 유지되고 있는 키 각각에 고유의 식별정보를 할당하는 할당수단과,
    상기 기억수단에 기억되어 있는 데이터를 소정의 블록마다 독출하여 유지하는 캐시수단 및,
    그 캐시수단에 유지되고 있는 기억수단의 데이터중 적어도 암호화되어 기억수단에 기억되어 있는 블록을 나타내는 어드레스 정보와, 그 어드레스 정보에 대응하는 데이터의 암호화에 이용되고 있는 키를 나타내는 상기 식별정보를 대응시켜유지하는 관리수단을 갖춘 것을 특징으로 하는 마이크로프로세서.
  6. 제5항에 있어서, 상기 기억수단에 대한 억세스시에 상기 키 지정수단에 의해 지정된 키의 상기 식별정보와 상기 관리수단에 유지되고 있는 식별정보를 비교하여, 일치하고 있는 경우에 상기 캐시수단에 유지되고 있는 데이터에 억세스하는 억세스 제어수단을 갖춘 것을 특징으로 하는 마이크로프로세서.
KR1020020046517A 2001-08-08 2002-08-07 마이크로프로세서 KR100550593B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JPJP-P-2001-00241089 2001-08-08
JP2001241089A JP2003051819A (ja) 2001-08-08 2001-08-08 マイクロプロセッサ

Publications (2)

Publication Number Publication Date
KR20030014616A true KR20030014616A (ko) 2003-02-19
KR100550593B1 KR100550593B1 (ko) 2006-02-09

Family

ID=19071596

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020020046517A KR100550593B1 (ko) 2001-08-08 2002-08-07 마이크로프로세서

Country Status (5)

Country Link
US (1) US20030033537A1 (ko)
EP (1) EP1283458A3 (ko)
JP (1) JP2003051819A (ko)
KR (1) KR100550593B1 (ko)
CN (1) CN1266615C (ko)

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060288407A1 (en) * 2002-10-07 2006-12-21 Mats Naslund Security and privacy enhancements for security devices
CN1708942B (zh) * 2002-10-31 2010-11-03 艾利森电话股份有限公司 设备特定安全性数据的安全实现及利用
JP4338989B2 (ja) * 2003-02-20 2009-10-07 パナソニック株式会社 メモリデバイス
JP4375980B2 (ja) * 2003-03-11 2009-12-02 株式会社エヌ・ティ・ティ・ドコモ マルチタスク実行システム及びマルチタスク実行方法
US7257718B2 (en) 2003-05-12 2007-08-14 International Business Machines Corporation Cipher message assist instructions
DE10330643A1 (de) * 2003-07-07 2005-02-10 Siemens Ag Verfahren zur verschlüsselten Datenübertragung über ein Kommunikationsnetz
JP4624732B2 (ja) * 2003-07-16 2011-02-02 パナソニック株式会社 アクセス方法
US7533276B2 (en) 2003-08-26 2009-05-12 Panasonic Corporation Program execution device
JP4263976B2 (ja) * 2003-09-24 2009-05-13 株式会社東芝 オンチップマルチコア型耐タンパプロセッサ
US7325115B2 (en) * 2003-11-25 2008-01-29 Microsoft Corporation Encryption of system paging file
US8156343B2 (en) 2003-11-26 2012-04-10 Intel Corporation Accessing private data about the state of a data processing machine from storage that is publicly accessible
JP4282472B2 (ja) * 2003-12-26 2009-06-24 株式会社東芝 マイクロプロセッサ
JP4696449B2 (ja) * 2004-01-09 2011-06-08 ソニー株式会社 暗号化装置およびその方法
KR100604828B1 (ko) * 2004-01-09 2006-07-28 삼성전자주식회사 펌웨어 암호화 방법 및 해독 방법과 그 처리 장치
JP4574994B2 (ja) * 2004-01-26 2010-11-04 東芝マイクロエレクトロニクス株式会社 メモリ外付けマイコン
US8028164B2 (en) * 2004-03-19 2011-09-27 Nokia Corporation Practical and secure storage encryption
WO2005121972A1 (en) * 2004-06-14 2005-12-22 Research In Motion Limited Method and system for securing data utilizing redundant secure key storage
JP4559794B2 (ja) * 2004-06-24 2010-10-13 株式会社東芝 マイクロプロセッサ
JP4612461B2 (ja) * 2004-06-24 2011-01-12 株式会社東芝 マイクロプロセッサ
US20050286719A1 (en) * 2004-06-29 2005-12-29 Canon Kabushiki Kaisha Generating entropy through image capture
JP4490192B2 (ja) * 2004-07-02 2010-06-23 株式会社エヌ・ティ・ティ・ドコモ マルチタスク実行システム
JP2006023957A (ja) * 2004-07-07 2006-01-26 Sony Corp 半導体集積回路及び情報処理装置
JP4204522B2 (ja) * 2004-07-07 2009-01-07 株式会社東芝 マイクロプロセッサ
US7653819B2 (en) * 2004-10-01 2010-01-26 Lenovo Singapore Pte Ltd. Scalable paging of platform configuration registers
US20070180539A1 (en) * 2004-12-21 2007-08-02 Michael Holtzman Memory system with in stream data encryption / decryption
JP4836504B2 (ja) * 2005-06-30 2011-12-14 富士通株式会社 Icチップ、ボード、情報処理装置及びコンピュータプログラム
JP2007215162A (ja) * 2006-01-11 2007-08-23 Canon Inc 情報処理装置及びその制御方法、プログラム、記憶媒体
US8001591B2 (en) * 2006-01-31 2011-08-16 Freescale Semiconductor, Inc. Distributed resource access protection
DE102006006057B4 (de) * 2006-02-09 2007-12-27 Infineon Technologies Ag Datenverschlüsselungsvorrichtung und Verfahren zum Verschlüsseln von Daten
JP4767129B2 (ja) * 2006-08-17 2011-09-07 株式会社エヌ・ティ・ティ・ドコモ Os切替装置及びos切替方法
US8495383B2 (en) * 2006-12-14 2013-07-23 Nokia Corporation Method for the secure storing of program state data in an electronic device
JP4976991B2 (ja) * 2007-11-22 2012-07-18 株式会社東芝 情報処理装置、プログラム検証方法及びプログラム
US8601285B2 (en) * 2007-11-23 2013-12-03 Nokia Corporation Method for secure program code execution in an electronic device
CN101494858B (zh) * 2008-01-21 2011-01-05 中兴通讯股份有限公司 一种用户面处理器倒换时加密恢复的方法、装置及系统
US8176279B2 (en) 2008-02-25 2012-05-08 International Business Machines Corporation Managing use of storage by multiple pageable guests of a computing environment
JP5060372B2 (ja) 2008-04-10 2012-10-31 ルネサスエレクトロニクス株式会社 データ処理装置
JP2009278491A (ja) * 2008-05-16 2009-11-26 Casio Comput Co Ltd マイクロプロセッサ及びマイクロプロセッサ応用装置
US8782433B2 (en) * 2008-09-10 2014-07-15 Inside Secure Data security
US8819450B2 (en) * 2008-11-25 2014-08-26 Dell Products L.P. System and method for providing data integrity
JP5322620B2 (ja) 2008-12-18 2013-10-23 株式会社東芝 情報処理装置、プログラム開発システム、プログラム検証方法及びプログラム
EP2434683A4 (en) * 2009-05-22 2016-04-20 Mitsubishi Electric Corp ELECTRONIC DEVICE, KEY GENERATION PROGRAM, RECORDING MEDIUM AND KEY PRODUCING METHOD
US9495190B2 (en) * 2009-08-24 2016-11-15 Microsoft Technology Licensing, Llc Entropy pools for virtual machines
US8250379B2 (en) * 2009-10-13 2012-08-21 Microsoft Corporation Secure storage of temporary secrets
US8812871B2 (en) * 2010-05-27 2014-08-19 Cisco Technology, Inc. Method and apparatus for trusted execution in infrastructure as a service cloud environments
US8990582B2 (en) * 2010-05-27 2015-03-24 Cisco Technology, Inc. Virtual machine memory compartmentalization in multi-core architectures
JP5171907B2 (ja) * 2010-09-13 2013-03-27 株式会社東芝 情報処理装置、情報処理プログラム
JP5813380B2 (ja) * 2011-06-03 2015-11-17 株式会社東芝 半導体記憶装置
KR101973510B1 (ko) * 2011-06-30 2019-05-09 삼성전자주식회사 컨텐츠를 보호하기 위한 저장 장치 및 호스트 장치와 그 방법
CN102521037B (zh) * 2011-12-05 2013-12-25 晶门科技(深圳)有限公司 使用双上下文存储的密码学算法协处理器及数据流处理方法
WO2013101216A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Cache coprocessing unit
ES2546072T3 (es) * 2012-09-14 2015-09-18 Barcelona Supercomputing Center-Centro Nacional De Supercomputación Dispositivo para controlar el acceso a una estructura de memoria caché
GB2515536A (en) * 2013-06-27 2014-12-31 Ibm Processing a guest event in a hypervisor-controlled system
US10796302B2 (en) * 2014-04-23 2020-10-06 Minkasu, Inc. Securely storing and using sensitive information for making payments using a wallet application
US11887073B2 (en) * 2014-04-23 2024-01-30 Minkasu, Inc. Securely storing and using sensitive information for making payments using a wallet application
US10861009B2 (en) 2014-04-23 2020-12-08 Minkasu, Inc. Secure payments using a mobile wallet application
KR20150128081A (ko) * 2014-05-08 2015-11-18 삼성전자주식회사 키 관리 방법 및 그 방법을 이용하는 전자 장치
GB2531770A (en) * 2014-10-30 2016-05-04 Ibm Confidential Extracting System Internal Data
JP6293648B2 (ja) 2014-12-02 2018-03-14 東芝メモリ株式会社 メモリデバイス
US10223289B2 (en) * 2015-07-07 2019-03-05 Qualcomm Incorporated Secure handling of memory caches and cached software module identities for a method to isolate software modules by means of controlled encryption key management
US10148423B2 (en) * 2015-07-20 2018-12-04 International Business Machines Corporation Data security system with identifiable format-preserving encryption
US9785783B2 (en) * 2015-07-23 2017-10-10 Ca, Inc. Executing privileged code in a process
CN107215292B (zh) * 2017-07-31 2019-07-12 北京新能源汽车股份有限公司 一种车辆控制器的控制方法、车辆控制器及汽车
KR102445243B1 (ko) * 2017-10-23 2022-09-21 삼성전자주식회사 데이터 암호화 방법 및 그에 따른 전자 장치
KR20190075363A (ko) * 2017-12-21 2019-07-01 삼성전자주식회사 반도체 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 모듈
US11082205B2 (en) * 2018-01-08 2021-08-03 Paperclip Inc. Methods for securing data
US11789874B2 (en) * 2018-01-09 2023-10-17 Qualcomm Incorporated Method, apparatus, and system for storing memory encryption realm key IDs
US11019042B1 (en) * 2018-03-23 2021-05-25 Northrop Grumman Systems Corporation Data assisted key switching in hybrid cryptography
US11139967B2 (en) 2018-12-20 2021-10-05 Intel Corporation Restricting usage of encryption keys by untrusted software
US20200201787A1 (en) * 2018-12-20 2020-06-25 Intel Corporation Scalable multi-key total memory encryption engine
US11374764B2 (en) * 2019-08-02 2022-06-28 Salesforce.Com, Inc. Clock-synced transient encryption
CN112416665B (zh) * 2019-08-20 2024-05-03 北京地平线机器人技术研发有限公司 检测处理器运行状态的装置和方法
US10742414B1 (en) 2019-10-18 2020-08-11 Capital One Services, Llc Systems and methods for data access control of secure memory using a short-range transceiver

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE2728076A1 (de) * 1977-06-22 1979-01-11 Harald Dipl Chem Dr Gottschall Trockenloeschpulver auf der basis von gluconsauren salzen
US4558176A (en) * 1982-09-20 1985-12-10 Arnold Mark G Computer systems to inhibit unauthorized copying, unauthorized usage, and automated cracking of protected software
US4652383A (en) * 1985-02-14 1987-03-24 Energy & Minerals Research Co. Vinyl polymer gelling agent for powder dissemination composition
JPS63152241A (ja) * 1986-12-17 1988-06-24 Fujitsu Ltd デ−タバス暗号化方式
DE3739177C1 (de) * 1987-11-19 1989-02-02 Marx Guenther Feuerloeschmittel
US5053147A (en) * 1990-04-20 1991-10-01 Jannette Gomez Kaylor Methods and compositions for extinguishing fires
US5167285A (en) * 1991-03-21 1992-12-01 Cca, Inc. Dry powder and liquid method and apparatus for extinguishing fire
US5091097A (en) * 1991-06-05 1992-02-25 Old Firehand Corporation Fire extinguishing and inhibiting material
US5224166A (en) * 1992-08-11 1993-06-29 International Business Machines Corporation System for seamless processing of encrypted and non-encrypted data and instructions
JP3766685B2 (ja) * 1993-02-16 2006-04-12 スペクトロニックス・リミテッド 消火方法およびシステム
US5423384A (en) * 1993-06-24 1995-06-13 Olin Corporation Apparatus for suppressing a fire
FR2712507B1 (fr) * 1993-11-19 1996-01-26 Adriaenssen Luc Appareil de filtration pour liquides et gaz industriels.
US5666411A (en) * 1994-01-13 1997-09-09 Mccarty; Johnnie C. System for computer software protection
JP3146276B2 (ja) * 1994-03-10 2001-03-12 富士通株式会社 共有メモリの更新及び参照管理方式並びに参照タイミング制御方式
US5393437A (en) * 1994-05-31 1995-02-28 Chemguard, Inc. Fire extinguishing material
US5533123A (en) * 1994-06-28 1996-07-02 National Semiconductor Corporation Programmable distributed personal security
US5701343A (en) * 1994-12-01 1997-12-23 Nippon Telegraph & Telephone Corporation Method and system for digital information protection
JPH08185361A (ja) * 1994-12-28 1996-07-16 Hitachi Ltd 半導体集積回路装置
GB2309640B (en) * 1996-02-05 1999-04-28 Atomic Energy Authority Uk Fire suppressant powder
JP3440763B2 (ja) * 1996-10-25 2003-08-25 富士ゼロックス株式会社 暗号化装置、復号装置、機密データ処理装置、及び情報処理装置
KR100207541B1 (ko) * 1996-12-30 1999-07-15 윤종용 디지탈 비디오 디스크 롬 인터페이스 장치 및 방법
US6101255A (en) * 1997-04-30 2000-08-08 Motorola, Inc. Programmable cryptographic processing system and method
JP2980576B2 (ja) * 1997-09-12 1999-11-22 株式会社東芝 物理乱数発生装置及び方法並びに物理乱数記録媒体
US6438666B2 (en) * 1997-09-26 2002-08-20 Hughes Electronics Corporation Method and apparatus for controlling access to confidential data by analyzing property inherent in data
JPH11282667A (ja) * 1998-03-31 1999-10-15 Nakamichi Corp 多重鍵方式の暗号処理機能を有するマイクロプロセッサ
TW449991B (en) * 1999-01-12 2001-08-11 Ibm Method and system for securely handling information between two information processing devices
US6217788B1 (en) * 1999-02-19 2001-04-17 Primex Aerospace Company Fire suppression composition and device
US6449720B1 (en) * 1999-05-17 2002-09-10 Wave Systems Corp. Public cryptographic control unit and system therefor
US7005733B2 (en) * 1999-12-30 2006-02-28 Koemmerling Oliver Anti tamper encapsulation for an integrated circuit
JP3801833B2 (ja) * 2000-02-14 2006-07-26 株式会社東芝 マイクロプロセッサ
JP4226760B2 (ja) * 2000-05-08 2009-02-18 株式会社東芝 マイクロプロセッサ、これを用いたマルチタスク実行方法、およびマルチレッド実行方法
US6983374B2 (en) * 2000-02-14 2006-01-03 Kabushiki Kaisha Toshiba Tamper resistant microprocessor
US6895506B1 (en) * 2000-05-16 2005-05-17 Loay Abu-Husein Secure storage and execution of processor control programs by encryption and a program loader/decryption mechanism
JP4153653B2 (ja) * 2000-10-31 2008-09-24 株式会社東芝 マイクロプロセッサおよびデータ保護方法
JP4098478B2 (ja) * 2001-01-31 2008-06-11 株式会社東芝 マイクロプロセッサ

Also Published As

Publication number Publication date
US20030033537A1 (en) 2003-02-13
EP1283458A2 (en) 2003-02-12
JP2003051819A (ja) 2003-02-21
CN1266615C (zh) 2006-07-26
EP1283458A3 (en) 2003-09-24
CN1474279A (zh) 2004-02-11
KR100550593B1 (ko) 2006-02-09

Similar Documents

Publication Publication Date Title
KR100550593B1 (ko) 마이크로프로세서
KR100375158B1 (ko) 변조방지 마이크로프로세서
JP4226760B2 (ja) マイクロプロセッサ、これを用いたマルチタスク実行方法、およびマルチレッド実行方法
US7673152B2 (en) Microprocessor with program and data protection function under multi-task environment
US20190236314A1 (en) Secure processor and a program for a secure processor
JP4226816B2 (ja) マイクロプロセッサ
JP5091877B2 (ja) セキュアモードおよびノンセキュアモードでデータを処理するデータプロセッサを含むデータ処理装置及びデータ処理方法
US7721114B2 (en) Method for using shared library in tamper resistant microprocessor
JP3866597B2 (ja) 内部メモリ型耐タンパプロセッサおよび秘密保護方法
JP3880933B2 (ja) 耐タンパマイクロプロセッサ及びキャッシュメモリ搭載プロセッサによるデータアクセス制御方法
JP4347582B2 (ja) 情報処理装置
JP2006350782A (ja) プロセッサ及びシステム
US20160188874A1 (en) System and method for secure code entry point control
JP4643702B2 (ja) マイクロプロセッサ
JP4375980B2 (ja) マルチタスク実行システム及びマルチタスク実行方法
CN110598403B (zh) 一种进程数据保护方法
US20240176638A1 (en) Register protection for confidential computing environment
Platte A security architecture for microprocessors

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20090123

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee