KR100375158B1 - 변조방지 마이크로프로세서 - Google Patents

변조방지 마이크로프로세서 Download PDF

Info

Publication number
KR100375158B1
KR100375158B1 KR10-2001-0007300A KR20010007300A KR100375158B1 KR 100375158 B1 KR100375158 B1 KR 100375158B1 KR 20010007300 A KR20010007300 A KR 20010007300A KR 100375158 B1 KR100375158 B1 KR 100375158B1
Authority
KR
South Korea
Prior art keywords
program
execution
key
context information
encrypted
Prior art date
Application number
KR10-2001-0007300A
Other languages
English (en)
Other versions
KR20010082631A (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
Priority claimed from JP2000035898A external-priority patent/JP3801833B2/ja
Priority claimed from JP2000135010A external-priority patent/JP4226760B2/ja
Application filed by 가부시끼가이샤 도시바 filed Critical 가부시끼가이샤 도시바
Publication of KR20010082631A publication Critical patent/KR20010082631A/ko
Application granted granted Critical
Publication of KR100375158B1 publication Critical patent/KR100375158B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • 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
    • 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/109Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM] by using specially-adapted hardware at the client

Abstract

다중작업 환경하에 있어서, 변조방지 마이크로프로세서는 실행이 인터럽트되는 하나의 프로그램에 대한 문맥정보를 격납한다. 이 문맥정보는 그 하나의 프로그램의 실행상태를 지시하는 정보와 그 하나의 프로그램의 실행코드 암호화키를 포함하고 있다. 그 하나의 프로그램의 실행은, 격납된 하나의 문맥정보로부터 그 하나의 프로그램의 실행상태를 복구함으로써 재개된다. 문맥정보는 마이크로프로세서의 공개키를 이용하여 암호화된 후, 마이크로프로세서의 비밀키를 이용하여 복호화된다.

Description

변조방지 마이크로프로세서 {TAMPER RESISTANT MICROPROCESSOR}
본 발명은, 다중작업의 프로그램 실행환경하에서 실행코드 및 처리대상 데이터의 불법(부정한) 치환을 방지할 수 있는 마이크로프로세서에 관한 것이다.
최근, 마이크로프로세서의 성능이 현저히 향상되어 계산이나 그래픽 등의 통상의 기능에 더하여 비디오 이미지와 오디오 사운드의 재생(reproduction) 및 편집을 실현할 수 있다. 그러한 마이크로프로세서를 최종 사용자(end-user; 이후 PC라고도 한다)용으로 설계된 시스템에 응용함으로써, 사용자는 각종의 비디오 이미지와 오디오 사운드를 모니터상에서 즐길 수 있게 되었다. 또, 비디오 이미지와 오디오 사운드를 재생하기 위한 기능을 PC의 계산 능력과 조합시킴으로써, 게임 등으로의 응용을 향상시킬 수 있다. 이러한 마이크로프로세서는 어떤 특정의 하드웨어용으로 설계되지 않고, 이미 PC를 소유하고 있는 사용자는 단순히 프로그램을 실행하기 위한 마이크로프로세서를 변경하는 것만으로 비디오 이미지와 오디오 사운드의 재생 및 편집을 저가로 즐길 수 있는 이점을 갖도록 여러 가지의 하드웨어로 구현될 수 있다.
PC에서 비디오 이미지와 오디오 사운드를 처리하는 경우에는, 원래의 이미지나 음악의 저작권의 보호의 문제를 발생시킨다. MD나 디지털 비디오 재생장치에 있어서는, 미리 이들 장치에 불법(부정한) 복사를 방지하기 위한 기구(mechanism)를 짜 넣음으로써 무제한의 복사를 방지할 수 있다. 장치를 분해 및 변경함으로써 불법 복사를 시도하는 일은 상당히 희박하고, 비록 그러한 장치가 있다고 해도 불법 복사할 목적으로 변경된 장치의 제조 및 판매를 법으로 금지하는 것이 세계적인 추세이다. 그래서, 하드웨어에 기초를 둔 불법 복사에 의한 손해는 그다지 심각하지 않다.
그렇지만, 이미지 데이터나 음악 데이터는 현재 하드웨어보다 소프트웨어로 PC상에서 처리되고 있는 바, PC에서는 최종 사용자가 그 소프트웨어를 자유로이 변경할 수 있다. 즉, 사용자가 일정 수준의 지식을 가지고 있다면, 프로그램을 분석(해석)하여 실행가능한 소프트웨어를 재기록함으로써 불법 복사를 수행하는 것은 충분히 예상할 수 있다. 더욱이, 그렇게 하여 만들어지는 불법 복사의 소프트웨어는 하드웨어와 비교하여 네트워크 등의 매체를 통해 아주 빨리 확산될 수 있다.
이러한 문제를 해결하기 위해, 관례적으로 상업 영화나 음악 등의 저작권이 문제로 되는 내용을 재생하기 위해 사용되는 PC 소프트웨어는, 소프트웨어를 암호화하는 등의 수법에 의해 분석 및 변경되는 것을 방지하는 기술이 사용되고 있다. 이 기술은 변조방지 소프트웨어(tamper resistant software)라고 알려져 있다(「David Aucsmith et al., "Tamper Resistant Software: An Implementation", Proceedings of the 1996 Intel Software Developer's Conference」 참조).
또, 변조방지 소프트웨어 기술은 비디오나 오디오 데이터뿐만 아니라 텍스트나 PC를 통해 사용자에게 제공되는 노하우를 포함한 가치 있는 정보의 불법 복사를 방지하고, PC 소프트웨어 자체에 포함된 노하우를 분석하는 것을 방지하는데도 유효하다.
그러나, 변조방지 소프트웨어 기술은, 프로그램중 보호를 요하는 프로그램의 부분을 실행 시작시에는 암호화해 두고, 그 부분을 실행하기 전에 복호화하며, 그 부분의 실행이 종료된 후에 그 부분을 다시 암호화함으로써 역어셈블러(de-assembler)나 디버거(debugger) 등의 기구에 의한 분석을 곤란하게 하는 기술이다. 따라서, 프로그램이 프로세서에 의해 실행가능한 이상, 프로그램의 시작으로부터 순서를 따라 분석을 한 단계씩 수행함으로써 프로그램을 분석하는 것이 가능하게 된다.
이것은, 저작권자가 PC를 이용한 비디오나 오디오 데이터를 재생하는 시스템에 저작물을 제공할 때의 장애로 되고 있다.
또, 그 밖의 변조방지 소프트웨어의 응용에 대해서도 마찬가지의 약점이 있고, 이 사실은 PC를 통한 복잡한 정보 서버, 기업이나 개인의 노하우를 포함하고 있는 프로그램의 PC로의 적용의 장애로 되고 있다.
상기의 것은 일반적으로 소프트웨어 보호에 동등하게 들어맞는 문제이지만, 이것에 더하여 오픈 플랫폼(open platform)인 PC에는 시스템의 소프트웨어 구성의 토대로 되는 운영체제(operating system: OS) 자체가 변경되어 공격의 수단으로 된다는 문제도 있다. 즉, 정통하면서 악의 있는 사용자는 자신이 소유하고 있는 PC의 OS에 변경을 가해 OS가 가진 권한을 이용하여 응용 프로그램에 매립되어 있는 저작권 보호기구를 무효화시킨다거나, 그 기구를 분석하거나 할 수 있다.
현재의 OS는 컴퓨터의 제어하에 리소스(resource: 자원)의 관리를 실현하고, CPU에 갖추어진 실행제어기능이나 메모리에 대한 권한 조작기능을 이용함으로써 그들의 속성을 사용한다. 관리의 대상으로서, 장치, CPU 및 메모리 리소스 등의 통상의 대상뿐만 아니라 네트워크나 응용 수준의 QoS(Quality of Service: 서비스의 질) 등을 포함한다. 그럼에도 불구하고, 리소스 관리의 기본은 역시 프로그램의 실행에 필요한 리소스의 할당이다. 즉, 그 프로그램의 실행에 대한 CPU 시간의 할당과 실행에 필요한 메모리 공간의 할당이 리소스 관리의 기본으로 된다. 그 이외의 장치, 네트워크 및 응용 QoS의 제어는, 이들 리소스에 대해 억세스를 가능하게 하는 프로그램의 실행을 제어함으로써(CPU 시간과 메모리 공간을 할당함으로써) 행해진다.
OS는 CPU 시간의 할당과 메모리 공간의 할당을 수행하기 위한 권한을 갖는다. 즉, OS는 CPU 시간의 할당을 행하기 위해 응용 프로그램을 임의의 타이밍에서 인터럽트하거나 재개하는 권한과, 임의의 타이밍에서 응용 프로그램에 할당된 메모리 공간의 내용을 다른 계층의 메모리로 이동시키는 권한을 가지고 있다. 후자의 권한은 다른 억세스 속도와 용량을 갖는 (통상은) 계층화된 메모리 시스템을 응용 프로그램으로부터 보이지 않게 함으로써 평탄한 메모리 공간을 응용 프로그램에 제공하기 위해서도 사용된다.
이들 2가지의 권한을 이용하여, 임의의 타이밍에서 OS는 응용 프로그램의 실행상태를 인터럽트하여 스냅 샷(snap shot)을 취하고, 그것을 복사 또는 재기록하여 재개하는 것이 가능하다. 이 기능은 응용 프로그램에 숨겨진 비밀을 분석하기 위한 도구로서도 사용할 수 있다.
컴퓨터상의 응용 프로그램에 대한 분석을 방지하기 위해, 프로그램이나 데이터를 암호화하기 위한 기술은 이미 몇 가지 알려져 있다(예컨대, 햄프슨에 의한 미국 특허 제4,847,902호, 하트만에 의한 미국 특허 제5,224,166호, 데이비스에 의한 미국 특허 제5,806,706호, 다카하시 등에 의한 미국 특허 제5,825,878호, 부어 등에 의한 미국 특허 제6,003,117호, 일본 특개평 11-282667(1999년) 등). 그러나, 이들 알려진 기술에서는, 상술한 바와 같은 OS의 권한의 연산으로부터 프로그램의 연산과 데이터 비밀을 보호하는 것은 고려에 넣고 있지 않다.
인텔사의 x86 아키텍처에 기초를 두고 있는 종래 기술(하트만에 의한 미국 특허 제5,224,166호)은 실행코드와 데이터를 미리 정해진 암호화키(Kx)를 이용하여 암호화하여 메모리에 저장하기 위한 기술이다. 암호화키(Kx)는 프로세서에 매립된 비밀키(Ks)에 대응하는 공개키(Kp)를 이용하여 암호화된 EKr[Kx]의 형태로 주어진다. 따라서, Ks를 알고 있는 프로세서만이 메모리상의 암호화된 실행코드를 복호화할 수 있다. 암호화키(Kx)는 세그먼트 레지스터(segment register)라 불리는 프로세서 내부의 레지스터에 저장된다.
이 기구에 의해, 확실히 프로그램 코드를 암호화함으로써 사용자로부터 코드의 비밀를 어느 정도 보호하는 것은 가능하다. 또, 코드의 암호화키(Kx)를 알고 있지 않은 사람이 코드를 의도한 대로 변경하는 것이나, 암호화키(Kx)를 이용하여 복호화되어 실행가능한 코드를 새로 작성하는 것은 암호학적으로 곤란하게 된다.
그러나, 이 기술을 적용한 시스템에서는, 암호화된 실행코드를 복호화하지 않아도, 문맥 절환(context switching)이라 불리는 OS의 권한을 이용하여 프로그램을 분석하는 것이 가능하게 된다는 결점이 있다.
구체적으로는, 인터럽션(interruption)에 의해 프로그램의 실행이 중단된 때나, 프로그램이 시스템 호출을 위해 자발적으로 소프트웨어 인터럽션 명령을 호출한 때, OS는 다른 프로그램의 실행을 목적으로 문맥의 절환처리를 행한다. 문맥의 절환이라고 하는 것은, 그 시점(point)에서의 레지스터값의 집합으로 이루어진 프로그램의 실행상태(이후 문맥 정보라고 한다)를 메모리에 저장하고, 미리 메모리에 보존되어 있던 다른 프로그램의 문맥정보를 레지스터에 재저장하는 조작이다.
도 15는 x86 프로세서에서의 종래의 문맥 저장의 포맷을 나타낸다. 여기에는 응용 프로그램이 사용하는 레지스터의 내용이 전부 포함되어 있다. 인터럽트된 프로그램의 문맥정보는 그 프로그램이 재개될 때에 원래의 레지스터에 재저장된다. 문맥 절환은 복수의 프로그램을 병렬로 동작시키는데 없어서는 안되는 기능이다. 통상의 기술에서는, OS는 문맥 절환시에 레지스터값을 독출할 수 있으므로, 그 프로그램의 실행상태가 어떻게 변화했는가에 기초하여 전부로는 한정되지 않지만, 프로그램에 의해 행해지는 연산의 대부분을 추정할 수 있다.
더욱이, 타이머 등의 설정에 의해 예외(exception)를 발생시키는 타이밍을 제어하면, 프로그램의 임의의 실행시점에서 이 처리를 행할 수 있다. 또, 실행의 인터럽션, 분석뿐만 아니라, 레지스터의 정보를 악의로 재기록하는 것도 가능하다. 레지스터의 재기록은 프로그램의 연산을 변경할 뿐만 아니라 프로그램의 분석도 용이하게 한다. OS는 응용 프로그램의 임의의 상태를 보존할 수 있기 때문에, 어떤 시점에서 보존한 상태로부터 반복하여 몇 번이나 레지스터값을 재기록하여 프로그램을 동작시킴으로써, 프로그램의 연산을 분석하는 것이 가능하게 된다. 상기의 기능에 더하여, 프로세서에는 계단식 실행(stepwise execution) 등의 디버깅 지원 기능(debugging support function)을 가지고 있고, OS는 이들 기능을 전부 이용하여 응용 프로그램의 분석을 행할 수 있게 되어 버린다는 문제가 있다.
또, 미국 특허 제5,224,166호에서는 데이터에 관해서는, 암호화된 코드 세그먼트를 통한 프로그램 실행에 의해서만, 프로그램은 암호화된 데이터에 억세스할 수 있도록 되어 있다. 이때, 각각 다른 암호화키를 이용하여 암호화된 프로그램이 있더라도, 암호화된 데이터는 프로그램이 어떠한 암호화키로 암호화되어 있는가에 관계없이 임의의 키를 이용하여 암호화된 프로그램으로부터 자유로이 독출할 수 있다는 문제가 있다. 여기에 나타낸 종래 기술에서는, OS와 응용 프로그램이 독립적으로 비밀을 갖고, 응용 프로그램의 비밀을 OS로부터 보호하는 일이나, 복수의 프로그램 제공자가 각각 비밀을 갖는 일은 고려에 넣고 있지 않은 것이다.
물론, 기존의 프로세서에서도, 가상 메모리 기구에 설치된 보호기능에 의해 응용 프로그램 사이에서 메모리 공간을 분리한다거나, 응용 프로그램에 의한 시스템 메모리로의 억세스를 금지하는 것은 가능하다. 그러나, 가상 메모리 기구가 OS의 관리하에 있는 이상, 응용 프로그램의 비밀을 보호하는 것을 OS의 관리하의 기능에 의존할 수는 없다. 이것은, OS가 보호기구를 무시하여 데이터를 억세스할 수 있기 때문이고, 그 권한은 전술한 바와 같이 가상 메모리 기능을 제공하는데 있어서 없어서는 안된다.
다른 종래 기술로서, 일본 특개평 11-282667(1999년)에서는 응용 프로그램이 갖는 비밀 정보를 저장하기 위해 CPU의 내부에 설치된 비밀 메모리의 기술이 개시되어 있다. 이 기술에서는, 비밀 메모리내의 데이터로 억세스하기 위해 미리 정해진 기준값을 필요로 하고 있다. 그렇지만, 이 공지기술에 있어서는 동일한 CPU에서 동작하는 복수의 프로그램, 특히 OS로부터 비밀 데이터의 억세스 권한을 얻기 위한 기준값을 어떻게 보호하는가에 관해서는 개시되어 있지 않다.
더욱이, 오스트로브스키 등에 의한 미국 특허 제5,123,045호에서는, 응용 프로그램에 대응하여 고유의 비밀키를 갖는 부프로세서를 이용하고, 그들 부프로세서가 메인 메모리상에 위치한 프로그램을 억세스할 때에 그 억세스 패턴으로부터 프로그램의 연산을 추정할 수 없는 시스템이 개시되어 있다. 이것은, 메모리에 대해 연산을 행하는 명령 체계를, 그것과는 다른 명령 체계로 변환하여 랜덤한 메모리 억세스를 수행하기 위한 기구에 기초를 두고 있다.
그렇지만, 이 기술은 응용 프로그램마다 다른 부프로세서가 필요하게 되어 고비용으로 될 뿐만 아니라, 이러한 명령 체계를 처리하기 위한 컴파일러나 프로세서 하드웨어의 실장, 고속화 기술은 현재 사용되는 프로세서의 그것과는 상당히 달라 그 구현 및 빠른 실현이 대단히 곤란하게 되리라고 예상되고 있다. 그 외, 이러한 프로세서에서는, 실제로 동작하는 코드의 연산이나 데이터를 관찰, 추적해도 데이터의 내용이나 연산의 대응관계를 파악하기 어렵게 되기 때문에, 프로그램 코드나 데이터가 단순히 암호화되어 있기 전의 미국 특허 제5,224,166호 및 일본 특개평 11-282667 등과 비교하여 프로그램의 디버깅이 대단히 곤란하게 되는 점에서, 실용에는 많은 문제가 있다.
그래서, 이들 문제점을 해결하기 위해, 본 발명의 제1의 목적은, 다중작업 환경하에 있어서, 인터럽션에 의해 실행이 중지된 경우에도 내부적으로 실행되는 알고리즘과 메모리 영역 내부의 데이터 상태의 쌍방을 불법 분석으로부터 확실하게 보호할 수 있는 마이크로프로세서를 제공하는 것이다.
이 제1의 목적은, 종래 기술에서는 프로그램 코드의 값을 보호할 수는 있었지만, 예외 발생이나 디버깅 기능에 의한 프로그램 실행의 인터럽션을 이용한 분석을 방지할 수 없다고 하는 문제를 감안하고 있다. 그래서, 본 발명은, 프로그램 실행 인터럽션시에도 확실히 코드를 보호할 수 있는 마이크로프로세서를 제공하고자 하는 것이다. 여기서, 그 보호는 현재의 OS가 필요로 하는 실행 제어기능 및 메모리 관리기능의 쌍방과 양립해야 한다.
본 발명의 제2의 목적은, 다른 암호화키를 이용하여 암호화된 복수의 프로그램이 실행되는 경우에도, 각각의 프로그램이 서로 독립하여 올바르게 독출/기록할 수 있는 데이터 영역을 확보한 마이크로프로세서를 제공하는 것이다.
특히, 하트만에 의한 미국 특허 제5,224,166호의 종래 기술에서는, 암호화되어 있지 않은 코드에 의한 암호화된 데이터 영역으로의 억세스가 금지될 뿐인 단순한 보호밖에 행하여지지 않아 복수의 프로그램이 각각 독립적으로 비밀을 보호하는 것이 불가능하였다. 이 문제점을 감안하여, 본 발명은 복수의 응용 프로그램이 각각 비밀을 갖는 경우(암호화되어 있지 않은 경우), 각각의 비밀을 OS로부터 보호하기 위한 데이터 영역을 갖는 마이크로프로세서를 제공하고자 하는 것이다.
본 발명의 제3의 목적은, 상술한 데이터 영역의 보호속성(즉, 암호화 속성)을, OS에 의한 불법 재기록으로부터 보호할 수 있는 마이크로프로세서를 제공하는 것이다.
이 제3의 목적은, 미국 특허 제5,224,166호의 종래 기술에서는, 프로그램이 메모리상에 데이터를 쓰기 시작하기 직전에, OS가 문맥 절환을 이용하여 프로그램의 실행을 인터럽트함으로써 세그먼트 레지스터에 설정된 암호화 속성을 재기록할 수 있다는 결점을 갖는다는 사실을 감안한 것이다. 암호화 속성을 재기록함으로써 평문(plaintext)의 형태로 데이터가 기록되는 상태로 되면, 데이터는 암호화되지 않고 메모리에 기록되어 버린다. 응용 프로그램이 어떤 타이밍에서 세그먼트 레지스터값을 점검했다고 해도, 그 후에 레지스터값이 재기록되어 버리면 결과는 같은 것이다. 그래서, 본 발명은 이러한 변경을 금지하거나 검출하여 대항 조치를 취할 수 있는 기구를 갖춘 마이크로프로세서를 제공하고자 하는 것이다.
본 발명의 제4의 목적은, 프로그램이 데이터 암호화키로서 임의의 값을 사용할 수 있고, 암호 분석이론상의 소위 선택평문 공격(chosen-plaintext attack)으로부터 암호화 속성을 보호할 수 있는 마이크로프로세서를 제공하는 것이다.
본 발명의 제5의 목적은, 프로그램 디버깅 및 피드백을 위한 기구를 갖춘 마이크로프로세서를 제공하는 것이다. 즉, 본 발명은 평문으로 프로그램 디버깅을 수행하고, 또 실행에 실패한 경우에 프로그램 코드의 제공자[프로그램 공급자(program vendor)]에게 결함이 있는 정보를 피드백시키는 마이크로프로세서를 제공하는 것을 의도한다.
본 발명의 제6의 목적은, 상기한 제1 내지 제5의 목적을 저가격, 고성능으로 실현할 수 있는 마이크로프로세서를 제공하는 것이다.
도 1은 본 발명의 제1실시예에 따른 마이크로프로세서를 짜 넣은 시스템을 나타낸 블록도,
도 2는 도 1의 마이크로프로세서에서의 전체 메모리공간을 나타낸 도면,
도 3은 본 발명의 제2실시예에 따른 마이크로프로세서의 기본 구성을 나타낸 블록도,
도 4는 도 3의 마이크로프로세서의 상세한 구성을 나타낸 블록도,
도 5는 도 3의 마이크로프로세서에서의 페이지 디렉토리 및 페이지 테이블 포맷을 나타낸 도면,
도 6은 도 3의 마이크로프로세서에서의 페이지 테이블 및 키 엔트리 포맷을 나타낸 도면,
도 7a 및 도 7b는 도 3의 마이크로프로세서에서의 인터리브 전후의 실험 데이터를 각각 나타낸 도면,
도 8은 도 3의 마이크로프로세서에서 실행되는 코드 복호화처리에 대한 정보의 흐름을 나타낸 도면,
도 9는 도 3의 마이크로프로세서에 사용되는 CPU 레지스터를 나타낸 도면,
도 10은 도 3의 마이크로프로세서에서의 문맥 격납 포맷을 나타낸 도면,
도 11은 도 3의 마이크로프로세서에서 실행되는 보호 도메인 절환수순에 대한 플로우챠트,
도 12는 도 3의 마이크로프로세서에서 실행되는 데이터 암호화 및 복호화 처리에 대한 정보의 흐름을 나타낸 도면,
도 13은 도 3의 마이크로프로세서에 의한 보호 도메인 내의 실행제어의 처리를 개념적으로 나타낸 도면,
도 14는 도 3의 마이크로프로세서에 의한 보호 도메인으로부터 비보호 도메인으로의 호출 및 분기의 처리를 개념적으로 나타낸 도면,
도 15는 종래의 프로세서에서의 문맥 격납 포맷을 나타낸 도면이다.
본 발명의 제1의 태양(態樣)은, 상기 제1의 목적을 달성하기 위해 다음과 같은 특징을 갖는다. 1칩 또는 1패키지로서 구성되는 마이크로프로세서는, 독출기능을 제공하는 버스 인터페이스부를 매개로 해서 프로그램마다 다른 코드 암호화키를 이용하여 암호화된 복수의 프로그램을, 마이크로프로세서 외부의 메모리(예컨대, 메인 메모리)로부터 독출한다. 복호화부는 독출한 이들 복수의 프로그램을 각각 대응하는 복호화키를 이용하여 복호화하고, 명령 실행부는 복호화된 이들 복수의 프로그램을 실행한다.
복수의 프로그램중에서 어떤 프로그램의 실행이 인터럽트되는 경우에, 실행상태 기록기능을 제공하는 문맥정보 암호화/복호화부는 마이크로프로세서에 고유의 암호화키를 이용하여 인터럽트되는 프로그램의 인터럽트된 시점까지의 실행상태를 나타내는 정보와 이 프로그램의 코드 암호화키를 암호화하고, 암호화된 정보를 문맥정보로서 마이크로프로세서 외부의 메모리에 기록한다.
인터럽트된 프로그램의 실행을 재개하는 경우에, 재개기능을 제공하는 검증부는 마이크로프로세서에 고유의 암호화키에 대응하는 고유의 복호화키를 이용하여 암호화된 문맥정보를 복호화하고, 복호화된 문맥정보에 포함된 코드 암호화키(즉 재개 예정의 프로그램의 코드 암호화키)가 인터럽트된 프로그램의 원래의 코드 암호화키와 일치하는 경우에만 프로그램의 실행을 재개한다.
또, 제2 및 제3의 목적을 달성하기 위해, 마이크로프로세서는 외부로 독출할 수 없는 프로세서 내부에 메모리 영역(예컨대, 레지스터)과, 프로그램의 처리대상인 데이터를 위한 암호화 속성을 내부의 메모리에 기록하기 위한 암호화 속성 기록부(예컨대, 명령 TLB)를 더 갖추고 있다. 암호화 속성은, 예컨대 프로그램의 코드 암호화키와 암호화의 대상으로 되는 어드레스 범위를 포함하고 있다. 이러한 암호화 속성의 적어도 일부는 문맥정보에 포함된다.
또, 문맥정보 암호화/복호화부는 마이크로프로세서에 고유의 비밀 정보에 기초를 둔 서명(signature)을 문맥정보에 부여한다. 이 경우, 검증부는 복호화된 문맥정보에 포함된 서명이 마이크로프로세서에 고유의 비밀 정보에 기초를 둔 원래의 서명과 일치하는지의 여부를 판단하고, 그들이 일치하는 경우에만 인터럽트되어 있던 프로그램을 재개한다.
이와 같이, 암호화된 프로그램의 인터럽트된 시점까지의 실행상태를 문맥정보로서 외부 메모리에 저장하고, 실행 처리대상인 데이터의 보호속성을 프로세서 내부의 레지스터에 저장함으로써, 데이터에 대한 불법 치환을 방지할 수 있다.
본 발명의 제2태양은, 본 발명의 제4의 목적을 달성하기 위해 다음과 같은 특징을 갖는다. 1칩 또는 1패키지로서 구성되는 마이크로프로세서는, 외부로 독출할 수 없는 고유의 비밀키를 내부에 유지한다. 독출기능을 제공하는 버스 인터페이스부는, 미리 비밀키에 대응하는 마이크로프로세서에 고유의 공개키를 이용하여 암호화된 코드 암호화키를 마이크로프로세서 외부의 메모리로부터 독출한다. 제1 복호화 기능을 제공하는 키 복호화부는, 독출한 코드 암호화키를 마이크로프로세서의 비밀키를 이용하여 복호화한다. 또, 버스 인터페이스부는 각각이 다른 코드 암호화키에 의해 암호화된 복수의 프로그램을 외부의 메모리로부터 독출한다. 제2 복호화 기능을 제공하는 코드 복호화부는 독출된 복수의 프로그램을 복호화한다. 명령 실행부는 복호화된 복수의 프로그램을 실행한다.
복수의 프로그램중에서 어떤 프로그램의 실행이 인터럽트되는 경우에, 난수 발생기구는 임시키(일시적인 키)로서 난수를 발생한다. 문맥정보 암호화/복호화부는, 생성된 난수를 이용하여 인터럽트되는 프로그램의 실행상태를 지시하는 정보를 암호화함으로써 얻어지는 제1의 값과, 인터럽트되는 프로그램의 코드 암호화키를 이용하여 이 난수를 암호화함으로써 얻어지는 제2의 값 및, 마이크로프로세서의 비밀키를 이용하여 이 난수를 암호화함으로써 얻어지는 제3의 값을 문맥정보로서 외부의 메모리에 기록한다.
인터럽트된 프로그램의 실행을 재개할 때는, 문맥정보 암호화/복호화부는 외부의 메모리로부터 상기 문맥정보를 독출하고, 비밀키를 이용하여 문맥정보에 포함된 제3의 값의 난수를 복호화하며, 복호화된 난수를 이용하여 문맥정보에 포함된 실행상태 정보를 복호화한다. 그와 동시에, 재개될 예정의 프로그램의 코드 암호화키를 이용하여 문맥정보에 포함된 제2의 값의 난수를 복호화한다. 코드 암호화키를 이용하여 제2의 값을 복호화함으로써 얻어지는 난수와, 비밀키를 이용하여 제3의 값을 복호화함으로써 얻어지는 임시키를 비교하고, 그들이 일치하는 경우에만 프로그램의 실행을 재개한다.
이와 같이, 인터럽트된 시점까지의 실행상태를 지시하는 문맥정보를 저장의 각 경우에 생성되는 난수를 이용하여 암호화하고, 마이크로프로세서에 고유의 비밀키에 의한 서명을 첨부함으로써, 문맥정보를 안전하게 외부 메모리에 저장할 수 있다.
본 발명의 제3의 태양은, 상기 제1 내지 제3 및 제6의 목적을 달성하기 위해 다음과 같은 특징을 갖는다. 1칩 또는 1패키지로서 구성되는 마이크로프로세서는, 프로그램마다 다른 암호화키를 이용하여 암호화된 복수의 프로그램을 마이크로프로세서 외부의 메모리로부터 독출하여 실행한다. 이 마이크로프로세서는, 외부로 독출할 수 없는 내부 메모리(예컨대, 레지스터)를 갖추고, 각 프로그램으로부터 참조되는 데이터(즉 처리대상으로 되는 데이터)를 위한 암호화 속성과 암호화 속성을 특정하는 정보를 레지스터에 저장한다. 문맥정보 암호화/복호화부는 레지스터에 저장된 암호화 속성을 특정하는 정보와 관련이 있고, 마이크로프로세서에 고유의 서명을 포함하는 관련 정보를 외부의 메모리에 기록한다. 보호테이블 관리부는 프로그램이 참조하는 데이터의 어드레스에 기초하여 외부의 메모리로부터 관련 정보를 독출한다. 검증부는, 비밀키를 이용하여 독출한 관련 정보에 포함된 서명을 검증하고, 그 서명이 마이크로프로세서에 고유의 서명과 일치하는 경우에만 암호화 속성을 특정하는 정보와 독출한 관련 정보에 기초하여 프로그램이 데이터를 참조하는 것을 허가한다.
이 구성에서는, 내부 레지스터에 저장되어야 할 정보에 서명을 첨부하여 외부 메모리에 저장해 두고, 필요한 부분만을 마이크로프로세서로 독출한다. 독출시에 서명이 검증되므로, 치환 등에 대한 안전성을 확보할 수 있다. 처리하는 프로그램의 수가 증가하여 암호화 속성의 종류가 증가되더라도, 마이크로프로세서 내부의 메모리 영역을 확장시킬 필요가 없어 비용을 절감할 수 있다.
본 발명의 제1의 태양에 따르면, 서로 다른 실행코드 암호화키를 이용하여 암호화된 복수의 프로그램을 외부 메모리로부터 독출하는 독출부와, 상기 독출부에 의해 독출된 복수의 프로그램을 각각의 복호화키를 이용하여 복호화하는 복호화부, 상기 복호화부에 의해 복호화된 복수의 프로그램을 실행하는 실행부, 실행이 인터럽트되는 하나의 프로그램에 대한 문맥정보를 외부 메모리 또는 상기 마이크로프로세서 내부에 설치된 문맥정보 메모리에 격납하는 문맥정보 격납부 및, 상기 외부 메모리 또는 상기 문맥정보 메모리로부터 상기 문맥정보를 독출하고, 상기 문맥정보로부터 상기 하나의 프로그램의 실행상태를 복구함으로써, 상기 하나의 프로그램의 실행을 재개하는 재시작부를 구비하여 구성되고, 상기 문맥 정보가 상기 하나의 프로그램의 실행상태를 지시하는 정보와 상기 하나의 프로그램의 실행코드 암호화키를 포함하고 있는 것을 특징으로 하는 외부로부터 독출할 수 없는 고유의 비밀키와 이 고유의 비밀키에 대응하는 공개키를 갖는 마이크로프로세서를 제공할 수 있다.
(실시예)
이하, 도 1 및 도 2를 참조하여 본 발명에 따른 변조방지 마이크로프로세서의 제1실시예를 상세히 설명한다.
이 제1실시예는, 대상 시스템(target system)의 사용자로부터 프로그램 명령(실행 코드)의 비밀 및 공개키(비대칭키) 암호체계를 이용하여 암호화된 형태로 제공되는 문맥정보(실행상태)를 보호하기 위한 마이크로프로세서에 관한 것이다.
도 1은 대상 시스템의 마이크로프로세서(2101)가 버스(2102)를 매개로 해서 메인 메모리(2103)에 연결되어 있는 대상 시스템을 나타낸다.
도 1에 나타낸 바와 같이, 이 실시예에서는, 마이크로프로세서(2101)는 후술되는 레지스터 파일(2111), 명령 실행부(2112), 명령 버퍼(2113), 공개키 복호화기능 실행부(2114), 비밀키 레지스터(2115), 공통키 복호화기능 실행부(2116), 공통키 레지스터(2117), BIU(Bus Interface Unit: 버스 인터페이스부)(2118), 레지스터 버퍼(2119), 공개키 레지스터(2120), 암호화기능 실행부(2121), 복호화기능 실행부(2122) 및 전공통키 레지스터(previous common key register; 2123)를 갖추고 있다.
먼저, 이하의 설명에서 사용되는 항목에 대해 설명하고, 일반적인 운영체제(operating system: OS) 및 응용 프로그램의 연산에 대해 간단히 설명한다. 프로그램은 데이터의 집합과 어떤 특정의 목적을 위해 기록된 일련의 기계어 명령이다. OS는 시스템의 리소스(resource: 자원)를 관리하기 위한 프로그램이고, 응용 프로그램은 OS의 리소스 관리하에 동작되는 프로그램이다. 이 실시예는 복수의 응용 프로그램이 OS의 관리하에 의사 병렬(quasi parallel)로 동작될 수 있도록 다중작업 시스템을 상정(想定)하고 있다. 의사 병렬로 동작되는 이들 프로그램의 각각은 프로세스(process)라고 부른다. 동일한 목적을 위해 처리를 실행하는 처리의 집합을 작업(task)이라고 부르는 경우도 있다.
응용 프로그램의 명령과 데이터는 보통 2차 메모리에 파일로 저장되어 있다. 그들은 OS의 로더(loader)에 의해 메모리에 프로세스로서 배열되어 있다. 프로그램의 실행은 종종 입출력 등에 의해 발생되는 프로세서의 예외(또는 인터럽션) 처리에 의해 인터럽트된다. 예외 처리를 수행하는 프로그램을 예외 핸들러(exception handler)라고 부른다. 예외 핸들러는 보통 OS에 의해 공급된다. OS는 하드웨어로부터의 예외 요구를 처리하고, 응용 프로그램의 연산을 인터럽트하며, 임의의 타이밍에서 다른 응용 프로그램의 연산을 재개 또는 시작할 수 있다. 처리의 인터럽션은, 예외 핸들러의 실행 후에 절환 처리없이 원래의 처리의 실행이 재개되는 일시적인 경우와 처리 절환을 필요로 하는 경우를 포함한다. 전자의 예는 간단한 타이머 증가를 포함하고, 후자의 예는 페이지 예외에 의한 가상 메모리 처리를 포함한다.
이 실시예의 목적은, 대상 데이터의 메인 메모리를 자유롭게 독출하여 OS 프로그램이나 응용 프로그램을 자유롭게 변경할 수 있는 대상 데이터의 사용자로부터 프로그램 명령(실행코드) 및 실행 상태를 보호하고자 하는 것이다.
이 목적을 달성하기 위한 기본적인 특징은, 프로세서 내부의 정보저장에 대한 억세스 제어 및 이하에 리스트되는 정보에 기초를 둔 암호화이다.
(1) 프로그램 작성자가 공통키(Kx)를 선택한다. 응용 프로그램은 이 키를 이용하여 비밀키 암호체계에 의해 암호화된다.
(2) 고유의 공개키(Kp) 및 고유의 비밀키(Ks)의 쌍을 프로세서 내부에 제공한다. 공개키는 명령을 이용하여 프로그램에 의해 독출될 수 있다.
(3) 프로그램의 공통키(Kx)인 암호화키 정보는 프로세서의 공개키(Kp)를 이용하여 암호화된다.
[평문 프로그램의 실행]
이 프로세서는, 메인 메모리에 위치하고 있는 공존하는 평문 명령과 암호화 명령을 갖는 프로그램을 실행할 수 있다. 여기서는, 평문 프로그램의 실행을 위한 CPU 내부의 연산에 대해 도 1 및 도 2에 나타낸 메모리 구조를 참조하여 설명한다.
도 2는 프로그램이 메인 메모리의 영역(2202∼2204)에 위치하고 있는 전체메모리 공간(2201)을 나타낸다. 여기서, 영역(2202, 2204)은 평문 영역이고, 영역(2203)은 암호화된 영역이다. 영역(2205)은 영역(2203)을 복호화하는데 사용되는 키정보를 저장한다.
프로그램의 실행은, 제어가 점프를 위한 명령에 의해 OS로부터 프로그램 등의 선두(top; X)로 이동함에 따라 개시된다. 명령 실행부(2112)는 점프를 위한 명령을 X까지 실행하고, 그 명령의 어드레스를 BIU(2118)로 출력한다. 어드레스 X의 내용은 버스(2102)를 통해 독출되어 BIU(2118)로부터 명령 버퍼(2113)로 보내지고, 명령이 실행되는 명령 실행부(2112)로 보내진다. 그 연산결과는 레지스터 파일(2111)에서 초래된다. 연산대상이 메인 메모리(2103)의 어드레스에 대해 독출/기록될 때, 그 어드레스값은 BIU(2118)로 보내지고, 그 어드레스는 BIU(2118)로부터 버스(2102)로 출력되며, 메모리에 대해 데이터 독출/기록이 수행된다.
명령 버퍼(2113)는 2개 이상의 명령을 저장하기 위한 용량을 갖고, 명령 버퍼(2113)의 사이즈(size: 크기)에 대응하는 명령이 일괄하여 메인 메모리(2103)로부터 독출된다.
[암호화된 명령의 실행]
다음에는 암호화된 명령을 실행하는 경우에 대해 설명한다. 이 실시예의 프로세서는 평문 명령의 실행과 암호화된 명령의 실행을 포함하는 2가지 상태를 가지고 있고, 이들 상태를 제어하기 위해 2가지 형태의 명령이 제공된다. 하나는 평문 명령의 실행으로부터 암호화된 명령의 실행으로의 천이를 이루기 위한 암호화실행 시작명령이고, 다른 하나는 역천이를 이루기 위한 평문 복귀명령이다.
[암호화실행 시작명령]
암호화실행 시작명령은 다음과 같은 연상기호 "execnc"에 의해 표시되고, 하나의 오퍼랜드(operand)를 가지고 있다.
execenc keyaddr
여기서, "keyaddr"은 다음의 명령을 복호화하는데 사용되는 키정보가 저장되는 어드레스를 나타낸다.
[키정보]
여기서는 키정보 및 프로그램 암호화에 대해 설명하기로 한다. 암호화된 영역(2203)은 일련의 암호화된 명령으로 이루어져 있다. 이들 명령은 선인출 큐 사이즈(prefetch queue size)의 단위로 블록으로 세분되고, DES(Data Encryption Standard: 데이터 암호화 표준) 알고리즘 등의 비밀키 알고리즘에 의해 암호화된다. 이 암호화에 사용되는 키는 이후 Kx로 나타내기로 한다. 비밀키 알고리즘을 사용하고 있기 때문에, 복호화시에도 동일한 키(Kx)를 사용한다.
이 Kx가 메인 메모리에 평문으로 위치되어 있는 경우에는, 대상 시스템의 OS를 조작할 수 있는 사용자는 이것을 용이하게 독출하여 암호화된 프로그램을 분석할 수 있다. 이를 방지하기 위해, 프로세서의 공개키(Kp)를 이용하여 Kx를 암호화함으로써 얻어지는 EKp[Kx]를 메모리의 영역(2205)에 위치시킬 수도 있다. 이 영역의 선두 어드레스(top address)를 "keyaddr"로 나타낸다.
누군가가 공개키(Kp)에 대응하는 Ks를 알고 있는 이상, EKp[Kx]로부터 Kx를 복호화하는 것은 암호학적으로(계산학적으로) 불가능하다. 따라서, 프로그램의 비밀은 대상 시스템의 사용자가 Ks를 알고 있지 않은 한 사용자에게 결코 누설시켜서는 안된다. 이 Ks는 외부로부터 독출할 수 없는 형태로 프로세서의 내부에 저장되어 있다. 프로세서는 사용자가 이것에 관해 아는 것을 허가하지 않고 Kx를 내부적으로 복호화할 수 있으며, 또한 Kx를 이용하여 암호화된 프로그램을 복호화하고 이것을 실행할 수 있다.
다음에는 암호화 실행 시작명령 및 암호화된 명령의 후속의 실행에 대해 설명한다. 영역(2207)으로의 점프명령의 실행에 의해, 제어는 어드레스 "start"의 암호화 실행 시작명령으로 이동한다. 암호화 실행 시작명령의 오퍼랜드 "keyaddr"로 나타낸 어드레스에서, 지정된 영역(2205)의 내용이 데이터로서 프로세서의 명령 실행부(2112)로 독출된다. 명령 실행부(2112)는 이 데이터 EKp[Kx]를 공개키 복호화 기능 실행부(2114)로 보낸다. 공개키 복호화 기능 실행부(2114)는 비밀키 레지스터(2115)에 저장되어 있는 프로세서에 고유의 비밀키(Ks)를 이용하여 EKp[Kx]를 복호화함으로써 Kx를 취출한다. 그 후, 프로세서는 암호화된 명령 실행상태로 들어간다.
여기서는 프로세서 패키지가 비밀키 레지스터(2115) 및 공통키 레지스터(2117)에 저장되어 있는 내용을 프로그램이나 프로세서 칩의 디버거에 의해 외부로 독출할 수 없도록 제조되어 있는 것으로 가정한다.
암호화 실행 시작명령을 실행함으로써, 후속의 명령을 복호화하는데 사용되는 키가 공통키 레지스터(2117)에 저장되고, 프로세서는 암호화된 명령 실행상태로 들어간다. 프로세서가 암호화된 명령 실행상태에 있을 때, 메인 메모리(2103)로부터 독출한 명령은 BIU(2118)로부터 공통키 복호화 기능 실행부(2116)로 보내지고, 공통키 레지스터(2117)에 저장된 키정보를 이용하여 복호화되며, 명령 버퍼(2113)에 저장된다.
이 실시예에서는, 암호화 실행 시작명령 다음의 영역(2204)에 저장되어 있는 키(Kx)를 이용하여 암호화된 프로그램이 복호화되고, 명령 버퍼(2113)에 저장되어 실행된다. 여기서, 독출은 명령 버퍼(2113)의 사이즈의 단위로 수행된다. 도 2는, 명령 버퍼(2113)의 사이즈가 64비트이고, 각각 16비트 사이즈의 4개의 명령이 일괄하여 명령 버퍼(2113)로 독출되는 경우를 예로서 나타내고 있다.
[평문 복귀명령]
암호화된 명령 실행상태의 프로세서는 평문 복귀명령의 실행에 의해 평문 명령 실행상태로 복귀된다.
평문 복귀명령은, 아무런 오퍼랜드도 가지고 있지 않으며, 다음의 연상기호에 의해 표시된다.
exitenc
이 명령의 실행에 의해, 메인 메모리(2103)로부터의 명령의 독출은 공통키 복호화 기능 실행부(2116)를 통과하지 않는 경로를 통해 수행되고, 프로세서는 평문 명령의 실행으로 복귀한다.
주의해야 할 것은, 암호화된 명령의 실행중에 암호화 실행 시작명령이 다시실행되는 경우에는, 후속의 명령을 다른 키를 이용하여 복호화하고 실행하도록 명령 복호화키를 변경해야 한다는 점이다.
[문맥 격납(context saving) 및 이에 대한 공격]
다음에는 다중작업 환경에서 응용 프로그램의 비밀을 보호하기 위한 실행상태의 안전 격납에 대해 설명한다.
이 프로세서의 레지스터 파일(2111)은 32개의 범용 레지스터(R0∼R31)를 갖추고 있다. R31은 프로그램 카운터로서 이용된다. 범용 레지스터의 내용은 레지스터 파일(2111)에 저장된다. 상술한 바와 같이 암호화된 프로그램의 실행중에 예외가 발생한 경우에는, 레지스터 파일(2111)의 내용은 레지스터 버퍼(2119)로 옮겨지고, 레지스터 파일(2111)의 내용은 소정의 값 또는 난수에 의해 초기화된다. 이 때, 암호화된 프로그램의 복호화를 위해 사용되는 공통키의 값은 전공통키 레지스터(2123)에 저장되어 있다. 이들 2가지 형태의 초기화가 완료된 경우에만, 제어가 예외 핸들러로 이동하고, 예외 핸들러의 명령이 실행된다. 예외 핸들러의 명령은 암호화되지 않은 것으로 가정한다.
이 레지스터 파일 초기화기능에 의해, 이 실시예의 프로세서에서는 제어가 암호화된 프로그램의 실행중에 발생하는 예외로서 예외 핸들러로 이동하는 경우에 있어서도, 암호화된 프로그램에 의해 처리되는 레지스터값의 예외 핸들러 프로그램에 의한 독출이 방지된다. 그와 동시에, 레지스터 파일(2111)의 내용은 레지스터 버퍼(2119)에 격납되고, 암호화된 프로그램의 재개를 가능하게 하기 위해 후술하는 바와 같이 레지스터 버퍼 내용을 복구하고 그들을 메모리에 저장하기 위한 기능이 있다.
이제, 레지스터 버퍼(2119)에 저장된 레지스터 내용은 예외 핸들러의 암호화되지 않은 프로그램으로부터 직접 독출할 수 없다. 예외 핸들러의 암호화되지 않은 프로그램은 레지스터 버퍼(2119)에 대해 다음의 2가지 조작을 행하는 것이 허가될 뿐이다.
(1) 레지스터 버퍼 내용을 복구하고, 원래의 암호화된 프로그램의 실행을 재개하는 것.
(2) 레지스터 버퍼 내용을 암호화하여 메모리에 저장하고, OS 프로그램이나 다른 암호화된 프로그램을 실행하는 것.
(1)의 경우, 카운터의 증가 등의 예외 핸들러 처리가 끝난 때에는, 예외 핸들러가 "cont"(계속) 명령을 낸다. 이 "cont" 명령이 실행될 때, 레지스터 버퍼(2119) 및 전공통키 레지스터(2123)의 내용이 레지스터 파일(2111)에서 각각 복구된다. 프로그램 카운터는, 레지스터 파일(2111)에 포함되어 있고, 암호화된 프로그램의 실행이 인터럽트된 시점으로 되돌아가는 제어를 설정함으로써 암호화된 프로그램의 실행이 재개되도록 한다. 재개 후의 암호화된 프로그램의 복호화에 대해서는, 전공통키 레지스터(2123)로부터 복구된 값을 사용한다. 레지스터 버퍼(2119)의 내용과 마찬가지로, 프로그램은 전공통키 레지스터(2123)를 명확하게 재기록할 수 없다.
(2)의 경우는, 예외 핸들러의 실행의 타이밍에서 처리 절환이 발생하는 경우에 대응한다. 이 경우, 프로세서의 예외 핸들러나 작업 분배기(task dispatcher)는 레지스터 버퍼(2119)의 내용을 메모리에 격납하기 위한 "savereg"(save register) 명령을 낸다. 이 "savereg" 명령은, 레지스터 버퍼 내용이 격납되는 어드레스를 가리키는 하나의 오퍼랜드 "dest"를 가지고 있으며, 다음의 연상기호에 의해 표시된다.
savereg dest
"savereg" 명령이 내려진 때에는, 레지스터 버퍼(2119)와 전공통키 레지스터(2123)의 내용은 공개키 레지스터(2120)에 저장된 프로세서의 공개키(Kp)를 이용하여 암호화 기능 실행부(2121)에 의해 암호화되고, BIU(2118)를 통해 "dest"에 의해 지정된 메인 메모리(2103)의 어드레스에 격납된다. 메인 메모리(2103)는 프로세서의 외부에 있어 사용자에 의해 억세스될 가능성이 있지만, 이들 내용이 프로세서의 공개키에 의해 암호화되어 있어 프로세서의 비밀키를 알고 있지 않은 사용자는 레지스터 버퍼 내용을 알 수 없다.
레지스터 버퍼 내용이 격납된 후에, OS는 상술한 방법에 의해 다른 암호화된 프로그램을 동작시킨다. 레지스터 버퍼 내용을 격납하지 않고 다른 암호화된 프로그램이 동작되는 경우에는, 다른 암호화된 프로그램의 실행이 인터럽트된 때에 레지스터 버퍼 내용을 암호화된 프로그램의 내용으로 재기록할 수는 있지만, 원래의 암호화된 프로그램의 레지스터 버퍼 내용이 소실됨에 따라 원래의 암호화된 프로그램을 재개하는 것이 불가능하게 된다.
여기서는 레지스터 버퍼의 수를 1개로 가정하고 있지만, 다중 예외를 처리할 수 있도록 복수의 레지스터 버퍼를 설치하는 것도 가능하다.
[복구수순]
다음에는 격납된 실행상태를 복구하는 수순에 대해 설명한다.
인터럽트된 응용 프로그램의 재개시에, OS의 분배기는 "rcvrreg"(recover register) 명령을 낸다. 이 "rcvrreg" 명령은, 실행상태가 격납되는 어드레스를 가리키는 하나의 오퍼랜드 "addr"를 가지고 있으며, 다음의 연상기호에 의해 표시된다.
rcvrreg addr
"rcvrreg" 명령이 내려진 때에는, BIU(2118)에 의해 "addr"에 의해 지정된 메모리의 어드레스로부터 암호화된 실행상태 정보가 취출되고, 복호화 기능 실행부(2122)에 의해 프로세서의 비밀키(Ks)를 이용하여 복호화되며, 레지스터 정보는 레지스터 파일(2111)에서 복구되고, 프로그램 암호화키는 공통키 레지스터(2117)에서 복구된다. 복구가 완료된 때에는, 인터럽트된 프로그램의 실행을 프로그램 카운터에 의해 지시되는 포인터로부터 재개한다. 이 때, 실행상태 정보로부터 복구된 키(Kx)는 암호화된 프로그램의 복호화를 위해 사용된다.
예외에 의한 암호화된 프로그램의 인터럽션에 관하여 실행상태의 격납 및 복구의 상세(詳細)는 상술한 바와 같다. 전술한 바와 같이, 암호화된 프로그램은 대상 시스템의 OS를 조작할 수 있는 사용자로부터의 공격(attack)에 대해 안전하다.
다음에는 실행상태에 대한 2가지 형태의 공격에 대한 상술한 체계(scheme)의 안전성에 대해 설명하기로 한다.
[실행상태에 대한 공격]
응용 프로그램 실행의 처리에서 발생되고 있는 실행상태에 대한 공격에는 2가지 형태가 있다. 하나는 공격자(attacker)에 의한 격납된 실행상태의 훔쳐보기(peeping)이고, 다른 하나는 공격자에 의한 실행상태의 소망하는 값으로의 재기록이다.
여기서는, 실행상태로의 불법 억세스를 표현하기 위한 다음의 2가지 항목에 대해 정의하기로 한다. 먼저, 실행상태를 발생시키는 프로그램은 그 실행상태에 대한 원래의 프로그램이라 부르기로 한다. 원래의 프로그램은 레지스터에 실행상태를 복구함으로써 재개될 수 있다. 한편, 원래의 프로그램이나 평문 프로그램과 다른 암호화키에 의해 암호화된 프로그램인, 실행상태를 발생시키는 프로그램 이외의 프로그램은 다른 프로그램이라 부르기로 한다.
어떤 원래의 프로그램에 의해 발생되는 실행상태에 대한 불법 억세스나 공격은, 원래의 프로그램의 암호화키를 알고 있지 않은 제3자에 의해 프로세서의 조작으로부터 독립적으로 어떤 방법에 의해 메모리의 실행상태를 직접 분석하는 동작이나, 또는 동일한 프로세서 상에서 운영되는 다른 프로그램을 사용하는 제3자에 의해 실행상태를 분석하거나 실행상태를 소망하는 값으로 재기록하는 동작으로 정의된다.
이 실시예의 마이크로프로세서에서는, 프로세서 외부의 메모리나 다른 프로그램으로의 억세스를 이용하는 불법 억세스를 방지하기 위해 다음의 3가지 형태에 의해 실행상태를 보호한다.
먼저, 이 실시예에서는, 암호화된 프로그램의 실행이 인터럽트된 때에 레지스터 정보가 레지스터 버퍼(2119)에 격납된다. 이때, 레지스터 버퍼(2119)와 전공통키 레지스터(2123)는 "rcvrreg" 명령이나 "savereg" 명령을 이용하는 것 이외의 어떤 방법에 의해 억세스될 수 없고, 따라서 다른 프로그램은 그 내용을 자유롭게 독출할 수 없다.
종래의 프로세서에서는, 예외 발생시의 레지스터 내용은 예외 핸들러 프로그램에 의해 자유롭게 독출할 수 있다. 이 실시예의 마이크로프로세서에서는, 다른 프로그램으로부터의 독출을 방지하기 위해 레지스터 내용을 레지스터 버퍼(2119)에 격납하고, 시스템의 사용자에 의해 메모리에 격납된 실행상태의 훔쳐보기를 방지하기 위해 프로세서의 공개키를 이용하여 그들을 암호화함으로써 레지스터 버퍼 내용을 격납하기 위한 명령을 제공한다.
제2의 공격방법은, 다른 프로그램이 암호화된 실행상태를 독출하도록 원래의 프로그램으로서 공격자에게 알려진 어떤 다른 프로그램의 명령을 동일한 메모리 어드레스에 위치시킴으로써 실행상태에 포함된 레지스터의 값을 독출하는 방법을 포함하고 있다.
이 실시예의 마이크로프로세서에서는, 암호화된 실행상태는 프로그램 암호화키를 포함하고 있고, 이 키는 재개시에 암호화된 프로그램을 복호화하는데 사용된다. 이 기구로 인하여, 원래의 프로그램 이외의 다른 프로그램이 실행상태를 독출하려고 하는 경우에도, 키가 매치하지 않아 프로그램을 정확히 복호화할 수 없고, 공격자의 의도에 따라 프로그램을 실행할 수 없게 된다. 따라서, 이 실시예의 마이크로프로세서에서는, 제2의 공격방법이 불가능하게 된다.
이 효과는, 단순히 프로세서의 공개키에 의해 실행상태 자체를 암호화함으로써 실현할 수 없지만, 원래의 프로그램의 복호화키와 실행상태를 통합하여 암호화함으로써 실현할 수 있다.
주의해야 할 것은, 바람직하게는 이 효과를 극대화하기 위해 레지스터(R0∼R30)의 값과 공통키(Kx)를 공개키를 이용한 암호화시에 동일한 암호블럭에 저장해야 한다는 점이다.
[데이터 보호]
이 실시예의 마이크로프로세서에서는, 데이터의 암호화는 설명하고 있지 않지만, 당업자라면 제2실시예에서 설명될 가상 메모리를 지원하기 위한 마이크로프로세서에서의 데이터 암호화와 마찬가지로 이 실시예의 마이크로프로세서에 데이터 암호화 기능을 부가하는 것이 가능하다는 것을 명백히 알 수 있을 것이다.
이하, 도 3 내지 도 14를 참조하여 본 발명에 따른 변조방지 마이크로프로세서의 제2실시예에 대해 상세히 설명한다.
이 실시예에서는, 본 발명에 따른 마이크로프로세서가 널리 사용되고 있는 인텔사의 펜티엄 프로(Pentium Pro) 마이크로프로세서에 기초를 둔 아키텍처를 이용하는 경우를 예로 들어 설명하지만, 본 발명은 이 특정의 아키텍처에 한정되는 것은 아니다. 이하의 설명에서는, 펜티엄 프로 마이크로프로세서 아키텍처 특유의 특징에 주목하고, 다른 아키텍처로의 응용을 예로 들어 설명하기로 한다.
주의해야 할 것은, 펜티엄 프로 아키텍처는 물리 어드레스, 선형 어드레스 및 논리 어드레스를 포함하는 어드레스 공간의 3가지 형태의 어드레스를 구분하지만, 이 실시예에서는 펜티엄의 용어에서의 선형 어드레스를 논리 어드레스라고도 한다는 점이다.
이하의 설명에서는, 특별히 언급하지 않는 한 보호는 응용 프로그램의 비밀의 보호(즉 암호화에 의한 보호)를 의미한다. 따라서, 통상 사용되는 보호의 개념, 즉 어떤 응용 프로그램의 동작에 의해 다른 응용 프로그램의 동작이 방해되지 않는 것과는 명확히 구별된다. 다만, 본 발명에 있어서는, 본 발명에 따른 응용 프로그램의 비밀의 보호와 병렬로, 통상의 의미에서의 동작보호기구가 OS에 의해 당연히 제공되고 있는 것으로 가정한다(다만, 후자에 관해서는 본 발명과 직접 관계가 없으므로 설명은 생략한다).
또, 이하의 설명에서는, 프로세서에 의해 실행가능한 기계어 명령은 명령이라 하고, 복수의 명령은 일괄하여 실행코드나 명령 스트림이라 한다. 명령 스트림을 암호화하는데 사용되는 키는 실행코드 암호화키라고 한다.
또한, 이하의 설명에서는, 비밀보호기구를 OS의 관리하에 응용 프로그램의 비밀을 보호하는 것으로 설명하고 있지만, 이 기구는 OS 자신을 변경이나 분석으로부터 보호하기 위한 기구로서 이용할 수도 있다.
도 3은 이 실시예에 따른 마이크로프로세서의 기본 구성을 나타내고, 도 4는 도 3에 나타낸 마이크로프로세서의 상세한 구성을 나타낸다.
마이크로프로세서(101)는, 프로세서 코어(111), 명령 TLB(Table Lookup Buffer)(121), 예외 처리부(131), 데이터 TLB(Table Lookup Buffer)(141) 및 2차 캐시(152)를 갖추고 있다. 프로세서 코어(111)는 버스 인터페이스부(112), 코드·데이터 암호화/복호화 처리부(113), 1차 캐시(114) 및 명령 실행부(115)를 갖추고 있다.
명령 실행부(115)는, 명령 인출/디코드부(214), 명령 테이블(215), 명령실행 절환부(216) 및 명령실행 완료부(217)를 더 갖추고 있다.
예외 처리부(131)는 레지스터 파일(253), 문맥정보 암호화/복호화부(254), 예외 처리부(255), 비밀보호위반 검출부(256) 및 실행코드 암호화키·서명 검증부(257)를 더 갖추고 있다.
명령 TLB(121)는 페이지 테이블 버퍼(230), 예외코드 복호화키 테이블 버퍼(231) 및 키 복호화부(232)를 더 갖추고 있다. 데이터 TLB(141)는 보호 테이블 관리부(241)를 더 갖추고 있다.
마이크로프로세서(101)는, 이 마이크로프로세서에 고유의 공개키(Kp)와 비밀키(Ks)를 저장하기 위한 키저장영역(241)을 갖추고 있다. 이제, 어떤 프로그램 공급자로부터 소망하는 실행 프로그램(A)을 구매하여 이를 실행하는 경우를 생각해 보자. 프로그램 공급자는 실행 프로그램(A)을 공급하기 전에 공통 실행코드 암호화키를 이용하여 프로그램(A)을 암호화하고(EKcode[A]), 마이크로프로세서(101)의 공개키(Kp)를 이용해 암호화에 이용한 공통키를 암호화하여(EKp[Kcode]) 마이크로프로세서(101)로 보낸다. 마이크로프로세서(101)는 이 실행 프로그램(A)뿐만 아니라 복수의 다른 암호화 프로그램을 의사 병렬방법으로(즉 인터럽션을 허가함으로써) 처리하는 다중작업 프로세서이다. 또, 마이크로프로세서(101)는 암호화 프로그램뿐만 아니라 평문 프로그램도 당연히 실행한다.
마이크로프로세서(101)는 버스 인터페이스부(독출기능 실행부; 112)를 매개로 해서 프로그램마다 다른 실행코드 암호화키를 이용하여 암호화된 복수의 프로그램을 마이크로프로세서(101) 외부의 메인 메모리(281)로부터 독출한다. 실행코드 복호화부(212)는 독출된 복수의 프로그램을 각각 대응하는 복호화키를 이용하여 복호화하고, 명령 실행부(115)는 복호화된 복수의 프로그램을 실행한다.
어떤 프로그램의 실행을 인터럽트하는 경우에, 예외 처리부(131)의 문맥정보 암호화/복호화부(254)는 인터럽트되는 프로그램의 인터럽트된 시점까지의 실행상태를 지시하는 정보와 이 프로그램의 코드 암호화키를 마이크로프로세서(101)의 공개키를 이용하여 암호화하고, 암호화된 정보를 문맥정보로서 메인 메모리(281)에 기록한다.
인터럽트된 프로그램을 재개하는 경우에는, 실행코드 암호화키·서명 검증부(257)는 암호화된 문맥정보를 마이크로프로세서(101)의 비밀키를 이용하여 복호화하고, 복호화된 문맥정보에 포함된 실행코드 암호화키(즉 재개 예정의 프로그램의 암호화키)가 인터럽트된 프로그램의 원래의 실행코드 암호화키와 일치하는지의 여부를 검증하여 그들이 일치하는 경우에만 프로그램의 실행을 재개한다.
여기서, 마이크로프로세서(101)의 상세한 구성 및 기능을 설명하기 전에, 먼저 마이크로프로세서(101)에 의한 평문 명령의 실행과 암호화된 프로그램의 실행에서의 처리의 흐름을 약술한다.
마이크로프로세서(101)가 평문 명령을 실행할 때는, 명령 인출/디코드부(214)가 L1 명령 캐시(213)로부터 프로그램 카운터(도시하지 않음)에 의해 지시된 어드레스의 내용을 독출하려고 한다. 지정된 어드레스의 내용이 캐시되어 있는 경우에는, 그 명령을 L1 명령 캐시(213)로부터 독출하여 명령 테이블(215)로 보내 실행한다. 명령 테이블(215)은 복수의 명령을 병렬로 실행할 수 있으며, 실행을 수행하는데 필요한 데이터의 독출을 명령 실행 절환부(216)에 요구하여 데이터를 수신한다. 명령이 병렬로 실행되어 그 실행결과가 확정되면, 그 실행결과는 명령 실행 완료부(217)로 보내진다. 명령 실행 완료부(217)는, 연산대상이 마이크로프로세서(101) 내부의 레지스터일 때는 실행결과를 레지스터 파일(253)에 기록하고, 연산대상이 메모리일 때에는 L1 데이터 캐시(218)에 기록한다.
L1 데이터 캐시(218)의 내용은 버스 인터페이스부(112)의 제어하에 있는 L2 캐시(152)에 의해 다시 한번 캐시되고, 메인 메모리(281)에 기록된다. 여기서는, 가상 메모리기구가 사용되고 있고, 논리적인 메모리 어드레스와 물리적인 메모리 어드레스의 대응관계가 도 5에 나타낸 페이지 테이블에 의해 정의되어 있다.
페이지 테이블은 물리적인 메모리상에 배치되는 데이터 구조이다. 데이터 TLB(141)는 실제로 논리 어드레스로부터 물리 어드레스로의 변환을 수행하고, 그와 동시에 데이터 캐시를 관리한다. 데이터 TLB(141)는 마이크로프로세서(101) 내부의 어떤 레지스터가 나타내는 테이블의 선두 어드레스에 기초하여 테이블의 필요한 부분을 독출하고, 논리 어드레스를 물리 어드레스로 변환하기 위한 작업을 수행한다. 이 때, 메모리상의 페이지 테이블의 전부가 데이터 TLB(141)로 독출되는 것이 아니라, 억세스되는 논리 어드레스에 따라 필요한 부분만이 페이지 테이블 버퍼(234)로 독출된다.
캐시동작의 기본은, 프로그램의 명령이 암호화되어 있는지의 여부에 관계없이 일정하다. 즉, 페이지 테이블의 일부가 명령 TLB(121)로 독출되고, 그 정의에 따라 어드레스 변환이 수행된다. 버스 인터페이스부(112)는 메인 메모리(281) 또는 L2 캐시(152)로부터 명령을 독출하고, 이들 명령은 L1 명령 캐시(213)에 저장된다. L1 명령 캐시(213)로의 명령의 독출은, 복수의 단어로 구성되는 라인의 단위로 수행되고, 단어 단위의 독출보다도 빠른 억세스가 행해진다.
또, 실행되는 명령의 연산 처리대상인 데이터에 대해서도, 물리적인 메모리상에 있는 동일한 페이지 테이블을 이용하여 어드레스 변환이 수행되지만, 변환의 실행은 상술한 바와 같이 데이터 TLB(141)에서 수행된다.
여기까지의 조작은, 일반적인 캐시 메모리 조작과 기본적으로 동일하다.
다음에는 암호화된 프로그램을 실행하는 경우의 동작을 설명한다. 이 실시예에서는, 비밀의 보호를 받는 실행코드는 모두 암호화되어 있다는 것을 전제로 하고, 암호화되어 있는 실행코드를 보호된 코드라고도 한다. 더욱이, 동일한 암호화키에 의한 보호의 범위를 보호 도메인이라고 부른다. 즉, 동일한 암호화키에 의해 보호되는 코드의 집합은 동일한 도메인에 속하고, 다른 암호화키에 의해 보호되는 코드는 다른 보호 도메인에 속한다.
먼저, 메인 메모리(281)상에는 비밀키 방식의 블록 암호 알고리즘에 의해 암호화된 프로그램의 실행코드가 저장되어 있다. 프로그램 공급자로부터 송신된 암호화 프로그램을 로딩하는 방법을 이하에 설명한다.
실행코드의 암호 블록 사이즈는, 블록 사이즈의 2의 멱(power)승배가 캐시 메모리에 대해 독출/기록하기 위한 단위인 라인 사이즈와 일치하면, 어떤 값이어도 좋다. 다만, 블록 길이가 명령 길이와 일치할 정도로 블록 사이즈가 작은 경우에는, 서브루틴의 선두 부분 등의 명령의 예측가능한 부분과 암호화 데이터의 대응관계를 기록함으로써 간단히 명령을 분석해 버릴 가능성이 있다. 이 때문에, 이 실시예에서는 블록을 인터리브(interleave)하여 블록중의 데이터 사이에 의존성을 갖게 하고, 암호화된 블록에 복수의 명령어나 오퍼랜드의 정보를 포함시킨다. 이와 같이 해서, 명령과 암호화 블록의 대응관계를 설정하기 곤란하게 한다.
도 7a 및 도 7b는 이 실시예에 사용될 수 있는 인터리빙의 예를 나타낸다. 이 예에서는, 캐시의 라인 사이즈를 32바이트, 블록 사이즈를 64비트(즉, 8바이트)로 하고 있다. 도 7a에 나타낸 바와 같이, 인터리브전에는 1단어는 4바이트로 구성되는 바, 단어 A는 A0∼A3의 4바이트로 이루어진다. 1라인은 A∼H의 8단어로 구성되어 있다. 이것을 64비트의 블록 사이즈에 대응하는 8바이트의 단위로 되도록 인터리브하면, 도 7b에 나타낸 바와 같이, 단어 0 및 단어 1에 대응하는 최초의 블록에 A0, B0, …, H0가 배치되고, 다음의 블록에 A1, B1, …, H1이 배치된다.
인터리브되는 영역의 길이를 더 길게 설정할수록 공격은 곤란하게 되지만, 라인 사이즈를 넘어 인터리브를 거는 것은 어떤 캐시 라인의 복호화/암호화가 다른 라인의 독출/기록에 의존하는 것으로 되어, 처리의 복잡화와 속도저하를 초래하게 된다. 인터리브를 실시하는 범위는 캐시 라인 사이즈의 범위내에 설정되는 것이 바람직하다.
여기서는, 캐시 라인에 포함된 복수의 블록의 데이터에 의존성을 갖게 하기 위해 블록의 데이터를 인터리브하는 방법을 취하고 있지만, 데이터 블록간에 의존성을 갖게 하기 위한 다른 방법, 예컨대 블록 암호의 CBC(Cipher Block Chaining)모드 등을 사용해도 좋다.
암호화된 실행코드의 복호화키(Kcode)(비밀키 알고리즘에서는 암호화키와 복호화키가 동일하기 때문에, 이하에서는 복호에 이용하는 경우에도 암호화키라고 하는 낱말을 사용한다)는 페이지 테이블에 기초하여 결정된다. 도 5 및 도 6은 논리 어드레스로부터 물리 어드레스로의 변환의 테이블 구조를 나타낸다.
프로그램 카운터의 논리 어드레스(301)는 어떤 값을 지시하고, 그 상위비트를 구성하는 디렉토리(302)와 테이블(303)에 의해 페이지 엔트리(307-j)가 지정된다. 페이지 엔트리(307-j)는 키 엔트리 ID(307-j-k)를 포함하고, 이 ID에 기초하여 키 테이블(309)내에서 이 페이지의 복호화에 사용되는 키 엔트리(309-m)가 결정된다. 키 테이블(309)의 물리 어드레스는 마이크로프로세서 내부의 키 테이블 제어 레지스터(308)에 의해 지정된다.
이 구성에서는, 페이지 엔트리에 직접 키정보를 설정하지 않고 키 엔트리의 ID를 설정함으로써, 사이즈가 큰 키정보를 복수의 페이지에서 공유하여 사이즈가 제한된 명령 TLB(121)상의 메모리 영역을 절약할 수 있다.
더욱 상세하게는, 페이지 테이블과 키 테이블 정보는 다음과 같이 명령 TLB(121)에 저장된다. 메모리로의 억세스에 필요한 부분만이 페이지 테이블(306, 307, 311)로부터 페이지 테이블 버퍼(230)로, 키 테이블(309)로부터 실행코드 복호화키 테이블 버퍼(231)로 독출된다.
메인 메모리에 저장되는 상태에서는, 키 테이블(309)의 요소인 키 오브젝트(key object; 309-m)의 기준 카운터는 이 키 오브젝트로 언급되는 페이지 테이블의 수를 지시한다. 키 오브젝트가 실행코드 복호화키 테이블 버퍼(231)로 독출되는 상태에서는, 이 기준 카운터는 이 키 오브젝트로 언급되고 페이지 테이블 버퍼(230)로 독출되는 페이지 테이블의 수를 지시한다. 이 기준 카운터는 실행코드 복호화키 테이블 버퍼(231)로부터 어떤 불필요한 키 오브젝트를 삭제할 때에 판단을 위해 사용된다.
이 실시예의 특징의 하나는, 키 테이블의 엔트리는 고정길이를 갖지만, 각각의 테이블에 사용되는 키의 길이는 암호 분석능력의 향상에 대응할 수 있도록 가변길이로 하고, 키 테이블의 키 사이즈 영역에서 지정된다는 점이다. 이것은, 마이크로프로세서(101)에 고유의 비밀키(Ks)는 고정되어 있지만, 프로그램의 암호화 및 복호화에 이용되는 Kcode의 길이는 키 엔트리의 지정에 의해 변화될 수 있다는 것을 암시한다. 가변길이의 키의 위치를 지정하기 위해, 키 엔트리(309-m)에는 키 엔트리를 가리키는 필드(309-m-4)가 있고, 키 오브젝트(310)의 어드레스를 지시하고 있다.
키 오브젝트 영역(310)에는, 실행코드의 암호화키(Kcode)가 공개키 알고리즘에 의해 마이크로프로세서(101)의 공개키(Kp)를 이용하여 암호화된 EKp[Kcode]의 형태로 저장되어 있다. 공개키 알고리즘으로 데이터를 안전하게 암호화하기 위해서는, 큰 용장성이 필요하기 때문에, 암호화된 데이터의 길이는 원래의 데이터 길이보다 길어진다. 여기서는, Ks와 Kp의 길이를 1024비트로 설정하고, Kcode의 길이를 64비트로 하고 패딩에 의해 256비트의 길이로 하여, E[Kcode]를 1024비트의 길이로 암호화하여 키 오브젝트 영역(310)에 저장한다. Kcode가 길어 1024비트로 저장할 수 없는 경우에는, 복수의 1024비트 사이즈의 블록으로 분할하여 저장한다.
도 8은 코드 복호화의 정보 흐름을 요약하여 나타낸 것이다. 프로그램 카운터(501)는 논리 어드레스 공간(502)의 암호화된 코드 영역(502)의 어드레스 "addr"를 지시하고 있다. 논리 어드레스 "addr"는 명령 TLB(121)로 독출된 페이지 테이블(307)에 기초하여 물리 어드레스 "Addr'"로 변환된다. 그와 동시에, 암호화된 코드 복호화키 E[Kcode]가 키 테이블(309)로부터 취출되고, 복호화 기능 실행부(506)에 있어서 CPU가 지닌 비밀키(Ks)를 이용하여 복호화되어 현코드 복호화키 기억수단(507)에 저장된다. 코드 암호화를 위한 공통키(Kcode)는 프로그램 공급자에 의해 마이크로프로세서(101)의 공개키(Kp)를 이용하여 암호화되고, Kcode를 이용하여 암호화된 프로그램과 함께 공급되므로, 마이크로프로세서(101)의 비밀키(Ks)를 알고 있지 않은 사용자는 Kcode를 알 수 없다.
프로그램의 실행코드를 Kcode를 이용하여 암호화하여 출하한 후에는, 프로그램 공급자는 그 비밀이 제3자에게 누설되지 않도록 Kcode를 안전하게 유지 및 관리한다.
전체 키 테이블(511)과 전체 페이지 테이블(512)은 물리적인 메모리(510)에 배치되고, 각각의 물리 어드레스가 키 테이블 레지스터(508) 및 CR3 레지스터(509)에 의해 지정되고 있다. 이들 전체 테이블의 내용은, 필요한 부분만이 버스 인터페이스부(112)를 매개로 해서 명령 TLB(121)로 캐시된다.
이제, 명령 TLB(121)에 의해 변환된 물리 어드레스 "Addr'"에 대응하는 내용(503)이 버스 인터페이스부(112)에 의해 독출되면, 이 페이지는 암호화되어 있으므로, 코드 복호화 기능 실행부(212)에서 복호화된다. 독출은 상기 캐시 라인 사이즈의 단위로 수행되고, 블록 단위로 복호화한 후에는 상술한 인터리브의 역처리가 수행된다. 복호화된 결과는 L1 명령 캐시(213)에 저장되고, 명령으로서 실행된다.
여기서는, 암호화된 프로그램을 로딩하는 방법 및 암호화된 프로그램의 재배치에 대해 설명한다. 메모리로의 프로그램의 로딩에 대해서는, 프로그램을 로딩하기 위한 어드레스의 변화를 처리하기 위해 프로그램 로더가 프로그램의 실행코드에 포함된 어드레스값을 변화시키는 방법이 있지만, 이 방법은 암호화된 프로그램에는 적용할 수 없다. 그렇지만, 점프 테이블이라 불리는 테이블이나 IAT(Import Address Table)를 이용하여 실행코드를 직접 재기록하는 일없이 재배치를 실현하는 방법을 이용함으로써, 암호화된 프로그램의 재배치가 가능하게 된다.
로딩 수순 및 일반적인 프로그램의 재배치에 대한 보다 상세한 설명은, 예컨대 「L. W. Allen et al., "Program Loading in JSF/T", USENIX Winter, 1991」에 개시되어 있고, 로딩 방법 및 암호화된 프로그램의 재배치 등에 대해서는 본 출원인에 의한 일본 특원평 2000-35898에 개시되어 있다.
프로그램의 암호화된 실행코드를 복호화하고 그들을 프로세서 내부의 캐시 메모리로 독출하여 실행하기 위한 상술한 방법에 의해 프로세서 외부의 메모리에 배치된 실행코드를 보호하는 것이 가능하게 된다.
그렇지만, 평문으로 암호화되어 있는 실행코드는 프로세서의 내측에 존재할 수 있다. 그들을 프로세서의 외측으로부터 직접 독출하는 것은 불가능하다고 해도, 평문 프로그램이 동일한 프로세서에서 동작되는 다른 프로그램에 의해 독출되어 분석될 가능성은 있다.
이 실시예에서는, 비밀키(241)와 명령 TLB(121)의 키 복호화부(232)를 이용하여 처리하는 키 복호화는 L1 데이터 캐시(218)로의 데이터 독출시에 수행되지 않는다. 암호화 플래그(307-j-E)가 페이지 테이블에서 "1"로 설정되어 있는 암호화된 페이지에 대해 데이터 독출이 수행될 때는, 복호화되지 않은 원래의 데이터나 소정 값 "0"의 데이터가 독출되거나, 그렇지 않으면 보통은 복호화된 데이터가 독출될 수 없도록 예외가 발생한다. 주의해야 할 것은, 페이지 테이블의 암호화 플래그(307-j-E)가 재기록될 때, 대응하는 명령 캐시의 복호화된 내용이 무효로 된다는 점이다.
이 기구에 의해, 다른 프로그램(자신의 프로그램을 포함함)에 대해서는 암호화된 프로그램의 실행코드를 데이터로서 독출하고, 그들을 프로세서의 기능을 이용하여 복호화하는 것이 불가능하게 된다.
또, 다른 프로그램은 명령 캐시내의 데이터를 명확하게 독출할 수 없고, 이에 따라 실행코드의 안전성을 보증할 수 있게 된다. 데이터의 안전성에 대해서는 후술하기로 한다.
이와 같이 암호화된 실행코드를 실행할 수 있기 때문에, 이 실시예의 마이크로프로세서에서는 암호화 알고리즘과 파라미터를 적절히 선택함으로써 실행코드 암호화키(Kcode)의 값을 알고 있지 않은 제3자가 실행코드를 분해하여 프로그램의 조작을 분석하는 것을 암호학적으로 불가능하게 할 수 있다.
따라서, 사용자는 실행코드 암호화키(Kcode)의 참의 값을 알 수 없으므로, 암호화된 프로그램의 일부를 변경함으로써 사용자가 그 응용 프로그램이 처리되는 내용의 불법 복사를 행하는 등 사용자의 의도에 따른 변경도 암호학적으로 불가능하게 할 수 있다.
다음에는 이 실시예의 마이크로프로세서의 다른 특징, 즉 다중작업 환경하에서의 프로그램 실행을 인터럽트할 때의 문맥의 암호화, 서명 및 검증에 관한 특징에 대해 설명한다.
다중작업 환경하에서의 프로그램의 실행은 예외에 의해 종종 인터럽트된다. 보통, 실행이 인터럽트된 때에는, 프로세서의 상태는 일단 메모리상에 격납되고, 후에 그 프로그램의 실행을 재개할 때에 원래의 상태가 복구된다. 이와 같이 해서, 복수의 프로그램에 의한 처리를 의사 병렬방법으로 실행하여 인터럽션 처리를 받아들이는 것이 가능하게 된다. 이 인터럽션시의 상태정보는 문맥정보(context information)라 한다. 문맥정보에는 응용 프로그램이 사용하는 레지스터 정보가 포함되고, 그것에 더하여 응용 프로그램이 명확하게 사용하지 않는 레지스터의 정보가 포함되는 경우가 있다.
종래의 프로세서에서는, 어떤 프로그램의 실행중에 인터럽션이 발생하면, 응용 프로그램의 레지스터 상태가 유지된 채 OS의 실행코드로 제어가 이동되므로, OS는 그 프로그램의 레지스터 상태를 점검하여 어떠한 명령을 실행하고 있었는지를 추정하거나, 평문으로 유지된 문맥정보를 실행의 인터럽션중에 변경함으로써, 그 프로그램의 실행 재개후의 프로그램의 조작을 변화시킬 수 있었다.
그래서, 이 실시예에서는 보호된 코드의 실행중에 인터럽션이 발생한 때에, 그 직전에 실행하고 있던 문맥을 암호화하여 보존하고, 모든 응용 레지스터를 암호화 또는 초기화함과 더불어, 문맥정보에 프로세서에 의해 만들어진 서명을 첨부한다. 인터럽션으로부터의 복구시에 서명을 검증하고, 그 서명이 올바른 서명인지 아닌지를 점검한다. 서명의 부정합을 검출한 경우에는 복구를 중지하여 사용자에 의한 문맥정보의 불법 변경을 방지할 수 있다. 이 때, 암호화의 대상으로 되는 레지스터는 도 9에 나타낸 사용자 레지스터(701∼720)이다.
펜티엄 프로 아키텍처에서는, 처리의 문맥정보의 메모리상으로의 격납 및 그 복구를 하드웨어적으로 지원하기 위한 기구가 있다. 이 상태를 격납하기 위한 영역은 TSS(Task State Segment: 작업상태 세그먼트)라 한다. 이하에서는, 이 기구에 본 발명을 적용한 경우를 예로 들어 설명하지만, 본 발명은 이 펜티엄 프로 아키텍처에 한정되지 않고, 일반의 프로세서 아키텍처에도 적용가능하다.
다음의 경우에 예외 발생과 더불어 문맥정보의 격납이 발생한다. 예외가 발생하면, IDT(Interrupt Descriptive Table: 인터럽트 설명 테이블)라 불리는 예외 처리를 기술하는 테이블로부터 인터럽션 원인에 대응하는 엔트리가 독출되고, 거기에 기술된 처리가 실행된다. 엔트리가 TSS를 나타내는 것일 때는, 지시된 TSS에 격납되어 있던 문맥정보가 프로세서에 복구된다. 한편, 그 때까지 실행되고 있던 프로세서의 문맥정보는 그 때의 작업 레지스터(725)에 의해 지정된 TSS 영역에 격납된다.
이 자동적인 문맥 격납기구를 사용하면, 프로그램 카운터나 스택 포인터를 포함하는 모든 응용 프로그램의 상태를 격납하고, 복구시에 서명을 검증함으로써 변경의 유무를 검출할 수 있다. 그러나, 자동적인 문맥의 격납을 행하는 경우, 문맥 절환을 위해 큰 오버헤드(overhead)가 생기는 외에, TSS를 사용하지 않는 인터럽션 처리를 수행할 수 없다는 등의 문제를 발생시킨다.
인터럽션 처리에 의한 오버헤드를 작게 하거나, 혹은 기존 프로그램과의 호환성을 유지하기 위해서는, 자동적인 문맥 격납기구를 사용하지 않는 것이 바람직하지만, 이 경우에는 프로그램 카운터는 스택(stack)상에 격납되어 버려 검증의 대상으로는 할 수 없기 때문에, 악의 있는 OS에 의한 변경의 대상으로도 될 수 있다. 이들 2가지 경우는 목적에 따라 적절한 방법으로 분할하여 사용되는 것이 바람직하다. 그래서, 이 실시예의 마이크로프로세서에서는 보호된(암호화된) 실행코드에 대해서는, 안전성을 중시하여 자동적인 문맥격납을 채용한다. 자동적으로 격납하는 레지스터는 반드시 모든 레지스터가 아니라도 좋다.
이 실시예에서의 문맥 격납과 복구처리는 다음과 같은 3가지의 주요한 특징을 갖는다.
(1) 격납된 문맥의 내용은, 문맥을 생성한 마이크로프로세서 자체와 문맥을 생성한 프로그램의 암호화키(Kcode)를 알고 있는 사람에 의해서만 복호화될 수 있다.
(2) 어떤 실행코드 암호화키(X)에 의해 보호된 프로그램이 인터럽트되고, 그 문맥이 격납된 경우, 그 재개 처리는 암호화되지 않은 프로그램이나 다른 실행코드 암호화키(Y)에 의해 암호화된 프로그램의 재개에 적용할 수는 없다. 즉, 인터럽션으로부터 복구시켜야 할 프로그램이 재개시에 다른 프로그램으로 대체되는 일은 없다.
(3) 변경된 문맥의 복구를 금지한다. 즉, 격납되어 있던 문맥이 변경된 경우, 그 문맥은 복구되지 않는다.
상기의 특징 (1)에 의해, 프로그램 공급자에 의한 문맥정보의 분석을 가능하게 하면서 문맥정보의 안전성을 유지하는 것이 가능하게 된다. 프로그램 공급자가 문맥정보를 분석하는 권한을 갖고 있는 것은, 사용자에 의해 사용되는 조건에 따라 발생한 문제(trouble)의 원인을 분석하여 프로그램의 품질을 유지하기 위해서도 중요하기 때문이다.
상기의 특징 (2)는, 예컨대 공격자가 프로그램(A)의 실행에 의해 발생된 문맥을 다른 암호화된 프로그램(B)에 적용하고, 문맥에 격납된 알려진 상태로부터 프로그램(B)을 재개함으로써 프로그램(B)에 포함된 데이터나 코드의 비밀을 분석하거나 프로그램(B)의 조작을 변경하기 위한 것이다. 또, 이 기능은 후술하는 데이터 보호시에 복수의 응용 프로그램이 서로 독립하여 각각 배타적으로 암호화 데이터를 유지하기 위한 전제로 된다.
상기의 특징 (3)에 의해, 프로그램의 재개시를 이용한 문맥정보의 변경을 엄밀하게 배제할 수 있다.
이러한 기능을 갖게 하는 이유는, 단순히 프로세서의 비밀 정보에 기초하여 문맥정보를 암호화하는 것만으로는, 비밀정보를 공격자의 의도에 따른 문맥정보의 변경으로부터 보호할 수는 있어도, 문맥이 불규칙하게 변경되어 랜덤하게 에러가 생긴 상태로부터 프로그램이 재개될 가능성을 배제할 수 없기 때문이다.
이하에서는, 상기 3가지의 특징을 짜 넣은 문맥 격납과 검증방법에 대해 좀더 상세히 설명한다.
<문맥 격납처리>
도 10은 이 실시예의 문맥 격납 포맷을 개념적으로 나타낸 도면이다. 보호된 프로그램의 실행중에 하드웨어, 또는 소프트웨어에 관련된 원인에 의해 인터럽션이 발생한 것으로 가정한다. 인터럽션에 대응하는 IDT 엔트리가 TSS를 지시하는 경우에는, 그 시점까지의 프로그램의 실행상태가 암호화되고, 문맥정보로서 (그 TSS가 아니라) 현재의 작업 레지스터(725)가 지시하는 TSS에 격납된다. 그리고, IDT 엔트리가 지시하는 TSS에 격납된 실행상태가 프로세서로 복구된다. IDT 엔트리가 TSS를 지시하고 있지 않는 경우, 현재의 레지스터의 암호화 또는 초기화만이 수행되고, TSS의 격납은 행하여지지 않는다. 물론, 그 경우에 프로그램의 재개는 불가능하게 된다. 그렇지만, OS의 조작의 계속을 위하여, 레지스터의 암호화 또는 초기화의 대상으로부터, 플래그 레지스터의 일부와 작업 레지스터를 포함하는 시스템 레지스터는 제외한다.
도 10에 나타낸 문맥은 실제로는 그 내용이 인터리브되고, 블록마다 암호화되어 메모리상에 저장된다. 먼저 격납되는 정보의 항목에 대해 설명한다. 선두에는 각기 권한이 부여된 모드에 대응하는 스택 포인터와 사용자 레지스터(802∼825)가 배치되고, 그 다음에 TSS의 사이즈와 암호화의 유무를 지시하는 1워드(826)가 배치된다. 이것은, 프로세서가 격납되어 있는 TSS가 암호화된 것인지의 여부를 지시한다. TSS가 암호화된 경우라도, 이 영역은 암호화되지 않고 평문으로 유지된다.
이어서, 데이터의 보호를 위해 추가된 데이터 암호화 제어 레지스터(CY0∼CY3)의 영역(827∼830)과, 그 사이즈를 블록길이에 맞추기 위한 패딩(padding; 831)이 배치된다. 최후로, 문맥을 암호화하는데 사용되는 키(Kr)를 실행코드 암호화키(Kcode)를 이용하여 비밀키 알고리즘에 의해 암호화한 값 EKcode[Kr](832), 문맥을 암호화하는데 사용되는 키(Kr)를 프로세서의 공개키(Kp)를 이용하여 암호화한 값 EKp[Kr](833) 및 이들 전체에 대한 프로세서의 비밀키(Ks)에 의한 서명 SKs[message](834)가 배치된다. 또, 작업간의 호출 관계를 유지하는 전회의 작업과의 링크영역(801)은 OS에 의한 작업 스케줄링(task scheduling)을 가능하게 하기 위해 평문으로 격납된다.
이들 실행코드 암호화나 서명 발생은, 도 4에 나타낸 예외 처리부(131)의 문맥정보 암호화/복호화부(254)에 의해 수행되고, 실행코드의 처리대상인 데이터의 암호화와는 독립한 기능에 기초를 두고 있다. 문맥정보가 TSS에 격납될 때에는, 별도의 데이터 암호화기능에 의해 TSS의 어드레스에 어떤 암호화가 지정되어 있었다고 해도, 그 지정은 무시되고, 문맥의 암호화가 행해진 그대로의 상태로 격납된다. 이것은, 데이터 암호화 기능의 암호화 속성이 각각의 보호된(암호화된) 프로그램에 고유의 것이기 때문에, 어떤 프로그램의 재개를 그 기능에 의존할 수 없기 때문이다.
문맥의 암호화에 있어서는, 먼저 평문으로 기록되는 TSS 사이즈 영역(826)의 워드가 값 "0"으로 치환된다. 그리고, 도 7a 및 도 7b를 참조하여 설명한 것과 마찬가지의 인터리브가 실시되고, 문맥이 암호화된다. 이 때, 패딩(831)은 암호화 블록 사이즈에 따라 적절한 인터리브를 가능하게 하는 사이즈로 설정된다.
여기서, 레지스터값을 프로세서의 공개키(Kp) 또는 실행코드 암호화키(Kcode)에 의해 암호화하지 않는 이유는, 사용자에 의한 문맥의 복호화를 금지하면서 프로그램 공급자와 프로세서에 의한 암호화된 문맥의 분석을 가능하게 하기 위함이다.
프로그램 공급자는 실행코드 암호화키(Kcode)를 알고 있으므로, Kcode를 사용하여 EKcode[Kr](832)을 복호화함으로써 문맥의 암호화키(Kr)를 취출할 수 있다. 또, 마이크로프로세서(101)는 내부에 지닌 비밀키(Ks)를 이용하여 EKp[Kr](833)을 복호화함으로써 문맥의 암호화키(Kr)를 취출할 수 있다. 즉, 프로그램 공급자는 사용자의 마이크로프로세서의 비밀키를 알 필요없이 문맥정보를 복호화함으로써 문제를 분석할 수 있고, 마이크로프로세서(101) 자체는 내부에 지닌 비밀키(Ks)를 이용하여 문맥정보를 복호화함으로써 실행을 재개할 수 있다. 어느 키도 갖고 있지 않은 사용자는 격납된 문맥정보를 복호화할 수 없다. 또, 마이크로프로세서(101)의 비밀키(Ks)를 알고 있지 않은 사용자는 문맥정보와 상기 EKcode[Kr], EKp[Kr]에 대한 서명 SKs[message]을 위조할 수도 없다.
프로그램 공급자와 마이크로프로세서에 의한 서로 독립한 문맥정보의 복호화를 가능하게 하기 위해, 직접 Kcode를 이용하여 문맥정보를 암호화하는 방법도 생각할 수 있다. 그렇지만, 레지스터의 상태가 미리 알려져 있는 경우, 실행코드 암호화키(Kcode)에 대해 알려진 평문 공격이 행해질 우려가 있다. 즉, 데이터를 암호화하기 위한 키의 값이 고정되어 있으면, 다음과 같은 문제가 있다. 사용자에 의한 데이터 입력을 독출하고, 그것을 일시적으로 작업용 메모리에 암호화하여 기록하는 프로그램을 실행하고 있었다고 가정해 보자. 암호화되어 작업 메모리에 기록되는 데이터는 메모리를 감시함으로써 알 수 있으므로, 사용자는 입력값을 변화시켜 복수회 입력을 반복하여 그것에 대응하는 암호화된 데이터를 입수할 수 있다. 이것은, 암호분석 이론에서의 「선택 평문공격」이 가능하다는 것을 의미한다.
알려진 평문공격이 비밀키 알고리즘에 치명적인 것은 아니지만, 아직까지 이것을 회피하는데 바람직한 것은 없다. 이 때문에, 예외 처리부(131)의 난수 발생기구(252)에 의해, 문맥 격납의 각 경우에 난수(Kr)를 생성하고, 문맥정보 암호화/복호화부(254)로 공급한다. 문맥정보 암호화/복호화부(254)는 난수(Kr)를 이용하여 비밀키 알고리즘에 의해 문맥을 암호화한다. 그리고, 난수(Kr)를 실행코드 암호화키(Kcode)를 이용하여 동일한 비밀키 알고리즘에 의해 암호화한 값 EKcode[Kr](832)으로서 첨부한다. 값 EKp[Kr](833)은 마이크로프로세서의 공개키(Kp)를 이용하여 공개키 알고리즘에 의해 난수(Kr)를 암호화함으로써 얻어진다.
여기서, 난수는 난수 발생기구(252)에 의해 생성된다. 암호화되어 있는 것이 프로그램인 경우에는, 통상은 프로그램 코드에는 변화가 없고, 그 연산의 분석을 하지 않는 한 대응하는 평문의 코드가 부정하게 입수되는 일은 없다. 이 경우, 암호를 분석하기 위해서는 "암호문 단독 공격(ciphertext-only attack)"을 행할 필요가 있고, 암호화키를 찾는 것은 대단히 곤란하다. 그렇지만, 사용자에 의해 입력된 데이터를 암호화하여 메모리에 저장하는 경우에는, 사용자가 입력 데이터를 자유롭게 선택할 수 있다. 이 때문에, 암호화키에 대해 "암호문 단독 공격"보다 훨씬 효과적인 "선택 평문 공격(chosen-plaintext attack)"을 하는 것이 가능하게 된다.
선택 평문 공격에 대해서는, 보호되어야 할 평문에 "솔트(salt)"라 불리는 난수를 부가하여 검색 공간을 크게 한다고 하는 대책을 채용하는 것이 가능하게 된다. 그렇지만, 모든 데이터에 "솔트"의 난수를 짜 넣은 형태로 메모리에 격납하는 것을, 응용 프로그래밍의 레벨에서 실장하는 것은 대단히 번잡하고, 프로그래밍 효율과 성능의 저하를 초래하게 된다.
이 때문에, 난수 발생기구(252)는 문맥 격납의 각 경우에 그 문맥을 암호화하기 위한 난수(암호화키)를 발생시킨다. 또, 암호화키를 임의로 선택할 수 있기 때문에, 프로세서간 또는 프로세서와 장치간의 안전한 통신을 고속화할 수 있다는 효과도 생긴다. 이것은, 메모리 억세스시에 하드웨어에 의해 데이터를 암호화하는 속도는 소프트웨어에 의해 데이터를 암호화하는 속도에 비해 일반적으로 훨씬 빠르기 때문이다.
이에 대해, 데이터 영역의 암호화키의 값이 미리 결정된 값, 예컨대 실행코드 암호화키와 동일한 값에 제한되어 있으면, 다른 암호화키에 의해 암호화된 다른 프로그램이나 장치와의 암호화된 데이터의 공유에 프로세서의 데이터 암호화기능을 사용할 수 없고, 프로세서에 설치된 하드웨어 암호화기능의 고속성을 이용할 수 없기 때문이다.
주의해야 할 것은, 재개시에 행해지는 암호화된 난수 EKcode[Kr](832)의 복호화 및 서명(834)의 발생은, 마이크로프로세서(101)에 의해서만 수행된다고 하는 조건을 만족하고 있으면, 어떠한 알고리즘과 비밀 정보에 기초해도 좋다는 점이다. 상기의 예에서는, 마이크로프로세서(101)에 고유의 비밀키(Ks)(이것은 실행코드 암호화키(Kcode)의 복호화에도 사용된다)를 사용하고 있지만, 각각 다른 값을 사용해도 상관없다.
또, 격납된 문맥에는 암호화의 유무를 지시하는 플래그가 있고, 암호화된 문맥정보와 암호화되지 않은 문맥정보가 용도에 따라 공존할 수 있다. TSS 사이즈와 암호화의 유무를 지시하는 플래그는 평문으로 저장되어 있으므로, 과거의 프로그램과의 호환성을 유지하는 것이 용이하다.
<인터럽트된 프로그램을 재개하기 위한 처리>
문맥을 복구하여 처리를 재개시킬 때, OS는 격납된 TSS를 지시하는 TSS 기술자(descriptor: 記述子)로의 점프 또는 호출명령을 내린다.
이제 도 4의 블록도로 돌아가면, 예외 처리부(131)의 실행코드 암호화키·서명 검증부(257)는 최초로 프로세서의 비밀키(Ks)를 이용하여 서명 SKs[message](834)를 검증하고, 검증결과를 예외 처리부(255)로 보낸다. 검증결과가 실패인 경우는, 예외 처리부(255)는 프로그램의 실행의 재개를 중지하고, 예외를 발생시킨다. 이 검증에 의해, 문맥정보가 확실히 비밀키를 갖는 정당한 마이크로프로세서(101)에 의해 생성된 것이고, 변경을 받지 않은 것임을 확인할 수 있다.
서명의 검증이 성공한 경우에는, 문맥정보 암호화/복호화부(254)는 비밀키(Ks)를 이용하여 문맥 암호화키 EKp[Kr](833)를 복호화하여 난수(Kr)를 취출한다. 한편, 프로그램 카운터(EIP; 809)에 대응하는 실행코드 암호화키(Kcode)가 페이지 테이블 버퍼(230)로부터 취출되어 현코드 암호화키 기억수단(251)으로 보내진다. 문맥정보 암호화/복호화부(254)는 실행코드 암호화키(Kcode)를 이용하여 EKcode[Kr]를 복호화하고, 그 결과를 실행코드 암호화키·서명 검증부(257)로 보낸다. 실행코드 암호화키·서명 검증부(257)는 EKcode[Kr](832)의 복호화 결과가 마이크로프로세서의 비밀키(Ks)에 의한 복호화 결과와 일치하는지의 여부를 검증한다. 이 검증에 의해, 이 문맥정보가 비밀키(Kcode)를 이용하여 암호화된 실행코드의 실행에 의해 생성된 것임을 확인할 수 있다.
문맥정보에 대해, 이 실행코드 암호화키에 관한 검증을 행하지 않은 경우에는, 사용자가 적당한 비밀키(Ka)를 이용하여 암호화한 코드를 생성하고, 그것을 실행하여 얻은 문맥정보를, 다른 비밀키(Kb)에 의해 암호화한 코드에 적용하는 공격이 가능하게 되어 버린다. 상기의 검증은 이 공격을 배제하고, 보호된 코드의 문맥정보의 안전성을 보증하고 있다.
이 목적은, 문맥정보에 비밀 실행코드 암호화키(Kcode)를 부가하는 것에 의해서도 달성할 수 있지만, 이 실시예에서는 문맥정보를 암호화하는데 사용된 비밀의 난수(Kr)를 프로그램 공급자가 선택한 실행코드 암호화키(Kcode)를 이용하여 암호화한 값 EKcode[Kr]을 검증에 사용함으로써, 문맥정보를 격납하는데 필요한 메모리의 양을 삭감하여 문맥절환의 고속화와 메모리 절약의 효과를 달성하고 있다. 이것은 또한, 프로그램 작성자로의 문맥정보의 피드백도 가능하게 한다.
실행코드 암호화키·서명 검증부(257)에 의해 실행코드 암호화키의 검증과 서명의 검증이 성공한 경우에는, 문맥이 레지스터 파일(253)로 복구되고, 프로그램 카운터의 값도 복구되므로, 제어가 문맥을 생성한 실행 인터럽션시의 어드레스로 복귀된다.
어느 하나의 검증이 실패하여 예외 처리부(255)가 예외를 발생시킨 경우는, 예외의 발생 어드레스는 점프 또는 호출 명령이 내려진 어드레스를 지시한다. 또, TSS의 불법행위를 지시하는 값이 IDT 테이블의 인터럽션 원인의 필드에 저장되고, 점프처의 TSS의 어드레스가 인터럽션 원인으로 되는 어드레스를 저장하는 레지스터에 저장된다. 이에 따라, OS는 문맥절환 실패의 원인을 알 수 있다.
재개 처리를 고속화하기 위해, 문맥정보 암호화/복호화부(254)에 의해 암호화된 실행상태의 레지스터 파일(253)로의 공급과, 실행코드 암호화키·서명 검증부(257)에 의한 검증처리를 병렬로 행하고, 검증이 실패한 때는 이후의 처리를 정지하는 구성으로 해도 좋다.
난수를 이용한 이 암호화 방식의 안전성은, 사용하는 난수 계열의 예측불가능성에 의존하지만, 예측이 곤란한 난수를 하드웨어에 의해 생성하는 방법은, 예컨대 오노데라 등에 의한 일본 특허 제2980576호에 개시되어 있다.
프로그램 공급자에 의한 문맥정보의 분석은, 사용자가 사용조건에 따라 발생한 프로그램의 문제의 원인을 분석함으로써 프로그램의 품질을 향상시키는데 중요하다. 이 실시예에서는, 이 점을 감안하여 문맥의 안전성과 프로그램 공급자에 의한 문맥정보의 분석 능력을 양립시키는 방식을 설명하고 있지만, 이 방식에 의해 문맥 격납의 오버헤드가 증가하는 것도 사실이다.
또, 마이크로프로세서의 서명에 의한 문맥정보의 검증은, 임의로 선택한 값과 암호화키의 조합을 이용하여 부정한 문맥정보에서 보호된 코드의 실행을 방지하고 있지만, 이 부가적인 보호도 역시 오버헤드를 증가시키고 있다.
따라서, 프로그램 공급자에 의한 문맥정보 분석의 필요성이나, 부정한 문맥정보에 의한 프로그램 재개를 배제하기 위한 기구에 대한 필요성이 없는 경우에는, 실행코드 암호화키를 특정하기 위한 정보를 포함하는 문맥정보를 프로세서가 지닌 비밀키를 이용하여 직접 암호화해도 좋다. 이것만으로 문맥의 의도적인 변경은 암호학적으로 불가능하고, 또한 다른 암호화키를 이용하여 암호화된 프로그램에 문맥정보가 적용되는 것을 방지할 수 있다.
여기서 문맥 격납 포맷에 대해 상세히 설명한다. 연산과의 관계에 대해서는 후술하기로 한다.
도 10에 있어서, "R"비트(825-1)는 문맥이 재개가능한지의 여부를 지시하는 비트이다. 이 비트가 "1"로 설정되어 있는 경우, 상기 복구수순에 의해 문맥에 격납된 상태를 복구하여 실행을 재개할 수 있지만, 값이 "0"으로 설정되어 있는 경우에는 재개할 수 없다. 이것은, 암호화된 프로그램의 실행중에 불법행위가 검출된 문맥의 재개를 방지함으로써, 재개가능한 문맥을 바른 상태의 것에 한정할 수 있다고 하는 효과를 갖는다.
"U"비트(825-2)는 TSS가 사용자 TSS인지 시스템 TSS인지를 지시하는 플래그이다. 이 비트가 "0"으로 설정되어 있는 경우는 격납된 TSS가 시스템 TSS이고, 이 비트가 "1"로 설정되어 있는 경우는 격납된 TSS가 사용자 TSS이다. 위의 예에서 설명한 예외 엔트리로부터의 권한의 변경을 수반하는 작업 절환이나, 작업 게이트 호출을 통해 격납, 복구되는 TSS는 시스템 TSS이다.
시스템 TSS와 사용자 TSS의 차이는, TSS의 복구시에 현재 실행중의 프로그램의 TSS 격납장소를 지시하는 작업 레지스터가 갱신되는지 갱신되지 않는지에 있다. 시스템 TSS의 복구에서는, 현재 실행중의 프로그램의 작업 레지스터가 새로 복구되는 TSS의 전회의 작업과의 링크영역(801)에 격납되고, 새로운 TSS의 세그먼트 셀렉터가 작업 레지스터로 읽어 들여진다. 한편, 사용자 TSS의 복구에서는, 작업 레지스터의 값의 갱신은 행하여지지 않는다. 사용자 TSS는, 프로그램의 레지스터 상태의 격납 및 복구만을 목적으로 하고 있고, 권한이 부여된 모드의 변경은 수반하지 않는다.
예외는 응용 프로그램으로부터의 시스템 호출을 위해 사용되는 소프트웨어 인터럽트를 포함한다. 시스템 호출을 위한 소프트웨어 인터럽트의 경우에는, 파라미터 교환을 위해 범용 레지스터가 종종 사용되고, 문맥정보 암호화가 파라미터 교환을 방해할 수 있는 경우일 수 있다.
소프트웨어 인터럽트는 응용 프로그램 자체에 의해 발생되고, 그에 따라 소프트웨어 인터럽트의 발생전에 비밀을 지닌 레지스터의 정보를 파괴하는 응용이 가능하게 된다. 그러한 조건의 추정하에, 소프트웨어 인터럽트의 경우에만 레지스터의 암호화가 수행되지 않는 방식을 사용하는 것이 가능하게 된다. 물론, 그러한 경우에는 응용 프로그램 작성자는 이 사실을 고려에 넣어 프로그램의 비밀이 보호될 수 있도록 프로그램을 설계하지 않으면 안된다.
다음에는 평문 프로그램 디버깅 기능의 억제에 대해 설명한다.
프로세서는, 하나의 명령이 실행될 때마다 인터럽션을 발생시키는 단계 실행기능과, 특정의 어드레스에 대한 메모리 억세스가 이루어질 때마다 예외를 발생시키는 디버깅 기능을 갖추고 있다. 이들 기능은, 프로그램의 개발에 유용한 것이지만, 비밀 보호를 위해 암호화된 프로그램의 안전성을 해칠 수도 있다. 따라서, 이 실시예의 마이크로프로세서에서는, 암호화된 프로그램의 실행중에는 그러한 디버깅 기능을 억제하고 있다.
명령 TLB(121)는 현재 실행되는 코드가 보호되는지의 여부(암호화되는지의 여부)를 판단할 수 있다. 보호된 코드의 실행중에는, 디버그 레지스터 기능과 단계 실행기능을 포함하는 2개의 디버깅 기능을 금지시켜 디버그 플래그 또는 디버그 레지스터로부터 암호화된 프로그램 분석의 침입을 방지한다.
디버그 레지스터 기능은, 메모리 억세스 범위와 실행코드 또는 데이터의 독출/기록 등의 억세스 형태를, 대응하는 메모리 억세스가 발생할 때마다 인터럽션이 일어나도록 프로세서에 구비된 디버그 레지스터에 미리 설정하는 기능이다. 이 실시예에서는, 보호된 코드의 실행중에는 디버깅을 목적으로 한 인터럽션이 일어나지 않도록 디버거 레지스터에 설정한 내용을 무시한다. 그렇지만, 디버그 비트가 페이지 테이블에 설정되어 있는 경우에는 이 규칙으로부터 배제된다는 점에 주의해야 한다. 페이지 테이블의 디버그 비트에 대해서는 후술하기로 한다.
보호되지 않는 코드(평문 코드)의 실행중에는 프로세서의 EFLAGS 레지스터의 단계 실행비트가 설정되어 있으면 하나의 명령이 실행될 때마다 인터럽션이 일어나지만, 보호된 코드의 실행중에는 인터럽션이 일어나지 않도록 이 비트를 무시한다.
이 실시예에서는, 분석을 방지하기 위한 실행코드의 암호화에 부가하여, 이들 기능에 의해 디버그 레지스터 또는 디버그 플래그를 이용한 프로그램의 동적 분석을 방지함으로써 사용자에 의한 프로그램의 분석을 곤란하게 한다.
<데이터 보호>
다음에는 실행코드의 처리대상 데이터의 보호에 대해 설명한다.
이 실시예에서는, 데이터를 보호하기 위한 암호화 속성은 마이크로프로세서(101)의 내부에 설치된 4개의 레지스터(CY0∼CY3)에 정의된다. 도 9에 나타낸 영역(171∼720)이 이것에 해당한다. 도 9에서는, 레지스터(CY0∼CY2)의 상세한 설명을 생략하고, 레지스터(CY3)의 상세한 설명만을 나타내고 있다.
암호화 속성의 각 요소를, CY3 레지스터(717)를 예로 들어 설명한다. 암호화되는 영역의 선두를 지시하는 논리 어드레스의 상위 비트가 기본 어드레스(717-1)에 지정된다. 영역의 사이즈는 사이즈 영역(717-4)에 지정된다. 사이즈는 캐시 라인의 단위로 지정되기 때문에, 하위의 비트에는 무효부분이 있다. 데이터의 암호화키는 영역(717-5)에 지정된다. 여기서는, 비밀키 알고리즘을 사용하고 있으므로, 복호화키에도 영역(717-5)을 사용한다. 암호화키의 값이 "0"으로 지정된 때, 그 레지스터에 의해 지시된 영역은 암호화되어 있지 않다는 것을 암시한다.
영역의 지정은, CY0가 가장 높은 우선권을 갖고, 이하 CY1∼CY3의 순서로 우선권이 주어진다. 예컨대, CY0과 CY1에 의해 지정된 영역이 겹친 경우, 그 영역에서는 CY0의 속성이 CY1의 속성보다 우선권이 주어진다. 또, 페이지 테이블의 정의는 처리대상 데이터보다 실행코드로서의 메모리 억세스의 경우에 가장 높은 우선권이 주어진다.
디버그 비트(717-4)는, 디버그 상태에서의 데이터 조작을 암호화 상태에서 수행할 것인지 평문 상태에서 수행할 것인지를 선택할 때에 사용된다. 디버그 비트의 상세한 설명은 후술하기로 한다.
도 12는 실행코드의 처리대상인 데이터의 암호화/복호화의 정보 흐름을 나타낸다. 여기서는, 코드가 보호된 상태, 즉 코드가 암호화된 상태에서 실행되고 있을 때만, 데이터 보호가 이루어진다. 그렇지만, 후술하는 디버그 상태에서 코드가 실행되고 있는 경우는 이 규칙으로부터 제외된다는 점에 주의해야 한다. 코드가 보호되고 있을 때, 데이터 암호화 제어 레지스터(암호화 속성 레지스터 또는 데이터 보호 속성 레지스터라고도 한다; CY0∼CY3)의 내용은 도 4에 나타낸 레지스터 파일(253)로부터 데이터 TLB(141) 내에 설치된 데이터 암호화키 테이블(236)로 독출된다.
어떤 명령이 논리 어드레스 "Addr"에 데이터를 기록할 때, 데이터 TLB(141)는 데이터 암호화키 테이블(236; 도 4 참조)을 점검함으로써 논리 어드레스 "Addr"이 CY0∼CY3의 범위에 포함되어 있는지의 여부를 판단한다. 판단결과, 암호화 속성이 지정되어 있으면, 데이터 TLB(141)는 L1 데이터 캐시(218)로부터 메모리로의 대응하는 캐시 라인의 메모리 기록시에 메모리 내용을 지정된 암호화키에 의해 암호화하도록 코드 암호화기능 실행부(212)에 명령을 내린다.
마찬가지로, 독출의 경우에도, 대상 어드레스가 암호화 속성을 갖고 있으면, 데이터 TLB(141)는 대응하는 L1 데이터 캐시(218)의 캐시 라인의 독출시에 데이터를 지정된 암호화키에 의해 복호화하도록 데이터 복호화기능 실행부(219)에 명령을 내린다.
이 실시예에서는, 데이터 암호화를 위한 데이터 암호화 속성을 전부 마이크로프로세서(101) 내부의 레지스터에 배치하고, 실행의 인터럽션시에 레지스터의 내용을 문맥정보로서 마이크로프로세서(101) 외부의 메모리(예컨대, 도 4의 메인 메모리(281))에 안전한 형태로 격납함으로써, 데이터 암호화 속성을 OS의 권한도 포함하는 불법 재기록으로부터 보호하고 있다.
데이터 암호화/복호화는, 문맥의 암호화와 관련하여 앞에 설명한 인터리브를 받은 캐시 라인의 단위로 수행된다. 이 때문에, L1 캐시(114)상의 데이터를 1비트 재기록하는 것만으로도, 메모리상에서는 캐시 라인의 다른 비트가 재기록되게 된다. 데이터의 독출/기록의 실행은 캐시 라인의 단위로 일괄하여 수행되기 때문에, 오버헤드의 증가는 그다지 커지지 않지만, 암호화된 메모리영역의 데이터에 대한 독출/기록은 캐시 라인 사이즈 이하의 단위로는 수행되지 않는다는 점에 주의가 필요하다.
상기에서는, 이 실시예에서의 암호화에 의해 데이터를 보호하는 방법에 대해 설명했다. 이 방법에 의해, 메인 메모리에 대해 암호화키와 응용 프로그램에 의해 지정된 메모리 범위를 이용하여 프로세서 내부에 그들을 암호화하고, 응용 프로그램의 관점에서 그들을 평문 데이터로서 독출/기록함으로써 암호화된 데이터를 처리하는 것이 가능하게 된다.
다음에는, 이들 데이터를 독출하는 암호화된 프로그램 이외의 프로그램(다른 프로그램이라고도 한다)에 의해 프로세서 내부의 캐시 메모리에 평문으로 저장된데이터의 독출을 방지하기 위한 2가지 기구에 대해 설명한다.
먼저, 프로그램은 암호화키에 의해 식별된다. 이 식별은 프로세서 내부에서 현재 실행되는 명령을 복호화할 때에 사용되는 키 오브젝트 식별자(key object identifier)를 이용하여 행한다. 여기서는, 이 식별을 위해 키 자신의 값을 사용할 수도 있지만, 실행코드 복호화키의 값이 복호화전의 1024비트나 하드웨어 사이즈의 증가를 필요로 하는 복호화후의 128비트의 상당히 큰 사이즈를 갖기 때문에, 10비트의 총길이만을 갖는 키 오브젝트 식별자를 사용한다.
복호화된 실행코드를 저장하는 L1 명령 캐시(213)는 캐시 라인에 대응하여 속성 메모리를 갖는다. 복호화된 실행코드가 코드 복호화기능 실행부(212)에 의해 L1 명령 캐시(213)에 저장된 때, 키 오브젝트 식별자는 속성 메모리에 기록된다.
또, 메모리로부터 암호화된 데이터를 독출하여 복호화하는 경우에는, 데이터 보호 속성 레지스터(CY0∼CY3)의 내용은 레지스터 파일(253)로부터 데이터 TLB(141)의 보호테이블 관리기능 실행부(233)로 독출된다. 이 때, 현재 실행되는 명령에 대응하는 키 오브젝트 식별자도 현코드 복호화키 기억수단(251)으로부터 동시에 독출되어 보호테이블 관리기능 실행부(233)에 유지된다.
명령 캐시의 경우와 마찬가지로, 데이터 캐시(218)는 캐시 라인에 대응하여 속성 메모리를 갖는다. 메모리로부터 독출한 데이터가 데이터 복호화기능 실행부(219)에 의해 복호화되어 L1 데이터 캐시(218)에 저장된 때, 키 오브젝트 식별자가 보호테이블 관리기능 실행부(233)로부터 속성 메모리로 기록된다.
어떤 명령이 실행되어 데이터 참조(data referring)가 수행된 때에는, 데이터 캐시의 속성에 기록된 키 오브젝트 식별자와 명령 캐시의 그 명령의 키 오브젝트가 비밀보호위반 검출부(256)에 의해 비교된다. 그들이 일치하지 않는 경우에는, 비밀보호 위반의 예외가 발생하여 데이터 참조가 실패한다. 데이터 캐시의 속성이 평문을 지시하는 경우에는, 데이터 참조가 항시 성공한다.
주의해야 할 것은, 명령과 데이터의 속성이 일치하지 않을 때는, 예외를 발생시키는 대신에, 이 데이터 캐시의 내용을 폐기하고 메모리로부터 데이터를 다시 한번 독출하는 것도 가능하다는 점이다.
예컨대, 실행코드 암호화키뿐만 아니라 데이터 보호 속성 레지스터(CY0∼CY3)가 다른 프로그램-1과 프로그램-2를 생각해 보자. 프로그램-1에 의해 참조되어 캐시에 기록된 암호화된 데이터가 프로그램-2에 의해 참조되는 경우, 프로그램-2는 다른 데이터를 독출하게 된다. 이 조작은 비밀을 보호할 목적에 따른 것이다.
두 프로그램이 동일한 데이터 암호화키를 갖고, 동일한 어드레스에서의 데이터가 이들 두 프로그램에 의해 참조되는 경우에는, 데이터가 그들 사이에서 공유될 수 있도록 동일한 데이터를 독출한다.
이렇게 해서, 이 실시예에서는 실행되는 명령과 그들이 원래 속하는 프로그램을 지시하는 데이터의 속성을 유지하기 위한 기능을 제공하고, 명령 실행에 의한 데이터 참조시에 그들이 일치하는지 하지 않는지를 알기 위해 이들 속성을 비교함으로써, 어떤 프로그램-1에 의해 발생된 데이터가 다른 프로그램-2에 의해 참조되는 것을 보호할 수 있다.
<엔트리 게이트>
이 실시예에서는, 보호되고 있지 않은 코드로부터 보호된 코드로 제어가 이동할 수 있는 경우는, 다음의 2가지 경우로 한정된다.
(1) 재개 어드레스와 일치하는 실행코드 암호화키를 이용하여 암호화된 문맥(즉, 난수를 갖는 문맥)이 재개되는 경우와,
(2) 연속한 코드의 실행 또는 점프나 호출 명령 등에 의해, 보호되지 않은 코드로부터 보호된 코드의 엔트리 게이트 명령("egate" 명령)으로 제어가 이동한 경우
이다.
이 한정은, 공격자가 코드를 임의의 장소로부터 실행함으로써 코드 조각(code fragment)의 정보를 얻는 것을 방지하기 위한 것이다. 상기 (1)의 수순에 대해서는, 문맥의 복구와 관련하여 이미 설명했다. 즉, 인터럽션 전에 실행하고 있던 코드의 실행코드 암호화키와 매칭하는 문맥정보가 포함되어 있고, 마이크로프로세서(101)에 의해 주어진 올바른 서명이 부가되어 있는 것이 검증된 경우에, 보호된 코드의 실행으로 제어가 이동한다.
상기 (2)의 수순은, 보호되지 않은 코드로부터 보호된 코드로 제어를 이동시키는 경우에는, 제어의 초기에 엔트리 게이트("egate") 명령이라 불리는 특수한 명령을 실행하지 않으면, 보호된 코드의 실행으로 이행할 수 없다고 하는 처리이다.
도 11은 엔트리 게이트 명령에 기초하여 보호 도메인(protection domain)을 절환하기 위한 수순을 나타낸다. 마이크로프로세서(101)는 현코드 암호화키 기억수단(251; 도 4 참조)에 현재 실행중의 코드의 암호화키를 유지하고 있다. 먼저, 명령의 실행과 더불어 이 키의 값이 변화되었는지의 여부를 판단한다(단계 601). 키값의 변화가 검출된 경우(단계 601에서 NO)에는, 변화와 더불어 실행되고 있는 명령이 엔트리 게이트("egate") 명령인지의 여부를 점검한다(단계 602). 엔트리 게이트 명령이라고 하는 것은, 그것이 적정한 명령이고, 변화된 코드로 제어를 이동시켜도 상관없음을 의미한다. 따라서, 엔트리 게이트 명령이라고 판단된 경우(단계 602에서 YES)에는, 그 명령을 실행한다.
한편, 엔트리 게이트 명령이 아니라고 판단된 경우(단계 602에서 NO)에는, 인터럽트된 명령이 부적정한 명령이라는 것을 의미한다. 이 경우, 직전에 실행되고 있던 명령이 암호화(보호)된 명령인지의 여부를 판단한다(단계 603). 보호되어 있지 않은 명령이라면, 그대로 예외 처리를 발생시킬 수 있지만, 보호되어 있는 명령인 경우, 일단 그 명령을 보호하면서 예외 처리를 수행하지 않으면 안된다.
따라서, 보호되어 있지 않은 명령이라고 판단된 경우(단계 603에서 NO)에는, 그대로 예외 처리를 수행하지만, 보호된 명령이라고 판단된 경우(단계 603에서 YES)에는, 보호 상태를 유지하면서 재개가 불가능한 예외 처리를 발생시킨다.
이러한 제어의 이동의 제한에 의해, 평문 코드로부터 엔트리 게이트 명령이 배치된 장소 이외의 코드로의 제어의 직접 이동이 금지된다. 문맥을 복구시킨다고 하는 것은, 이미 그 프로그램이 엔트리 게이트를 통해 한번 실행된 상태를 복구시키는 것이다. 따라서, 보호된 프로그램을 실행하기 위해서는, 반드시 엔트리 게이트를 통과하지 않으면 안된다. 프로그램중에서 엔트리 게이트를 배치하는 장소를 최소한으로 억제함으로써, 각종의 어드레스로부터 프로그램을 실행하여 프로그램의 구조를 추측하는 공격을 방지하는 효과가 있다.
더욱이, 이 엔트리 게이트에서는, 데이터 보호 속성 레지스터의 초기화를 수행한다. 엔트리 게이트를 실행하면, 도 9에 나타낸 데이터 보호 속성 레지스터 CY0∼CY3(717∼720)의 키 영역(CY3에서는 영역(717-5))에 난수(Kr)가 로드(load)된다. 암호화대상 선두 어드레스를 "0"으로 설정하고, 사이즈를 메모리의 상한까지 설정하며, 논리 어드레스 공간의 전부를 암호화 대상으로 설정한다. 실행코드에 디버그 속성이 설정되어 있지 않으면, 디버그 비트(CY3에서는 717-3)는 비디버깅(non-debugging)으로 설정한다.
바꾸어 말하면, 암호화 코드의 실행 시작의 타이밍에서는, 엔트리 게이트 실행시에 결정된 난수(Kr)를 이용하여 모든 메모리 억세스가 암호화되게 된다. 또, 전술한 바와 같이 실행코드 암호화 제어는, 페이지 테이블의 정의가 우선된다. 이 난수(Kr)는 문맥의 암호화에 사용된 난수와는 독립적으로 생성된다.
이 기구에 의해, 새로 실행되는 보호된 프로그램은 모든 메모리 억세스의 시작시에 불규칙하게 결정된 키에 의해 항상 암호화되는 설정으로 된다.
물론, 이 상태에서는 메모리 영역의 전체가 암호화된 상태이므로, 메모리를 통해 시스템 호출의 파라미터를 제공하거나, 다른 프로그램과 데이터를 교환할 수 없다. 이 때문에, 프로그램은 순차 필요한 메모리 영역을 평문으로 변환하여 억세스할 수 있도록 데이터 보호 속성 레지스터를 설정하여 자신의 처리환경을 조정함으로써 처리를 진행한다. 우선도가 낮은 레지스터(CY3)는 최초의 난수로 암호화되는 설정인 채로 해 두고, 그 외의 레지스터에 평문 억세스의 설정으로서 암호화키를 "0"으로 설정하면, 불필요한 영역을 평문으로서 억세스하여 암호화에 의해 비밀로 유지해야 할 데이터를 잘못하여 평문의 영역에 기록해 버리는 위험을 저감하는 것이 가능하게 된다.
데이터 보호 속성 레지스터 이외의 레지스터의 내용은, 엔트리 게이트에서의 초기화에 있어서도 암호화시키지 않고, 스택이나 파라미터의 위치를 지정하기 위한 포인터를 저장할 수 있다. 그렇지만, 레지스터에 부정한 값(불법의 값)을 설정하여 엔트리 게이트를 호출하는 것에 의해, 프로그램의 비밀이 도둑맞지 않도록 엔트리 게이트를 통해 실행되는 프로그램의 처리에 주의를 기울일 필요가 있다.
프로그래밍적으로는 제한되어 효율이 나빠지지만, 안전성을 중시하면 엔트리 게이트에서는 데이터 보호 속성 레지스터 이외의 범용 레지스터도 포함하여 플래그, 프로그램 카운터 이외의 모든 레지스터를 초기화하는 구성으로 해도 좋다. 이 경우에도, 스택 등의 파라미터는 프로그램 카운터의 상대 어드레스, 또는 절대 어드레스에 의해 지정된 메모리 영역을 통해 교환하는 것이 가능하다. 그렇지만, 여기서도 문맥 격납의 경우와 마찬가지로, OS 조작의 계속을 위해, 레지스터의 암호화 또는 초기화의 대상으로부터, 플래그 레지스터의 일부와 작업 레지스터를 포함하는 시스템 레지스터는 제외한다는 점에 주의해야 한다.
이와 같이, 이 실시예의 마이크로프로세서(101)에서는, 평문상태의 프로그램으로부터 보호된 프로그램으로의 이동시에 최초로 실행하는 명령을 엔트리 게이트 명령으로 제한하고, 데이터 보호 속성 레지스터를 포함하는 레지스터를 엔트리 게이트 명령의 실행에 의해 초기화함으로써, 보호된 실행코드의 단편적인 실행을 방지하고, 특히 데이터 보호상태의 부정한 설정을 방지하고 있다.
다음에는 보호된 프로그램의 실행 제어에 대해 설명한다. 먼저, 보호 도메인 내에 폐쇄된 호출 및 분기에 대해 설명한다. 보호 도메인 내의 호출은 통상의 프로그램에 대한 호출과 완전히 동일하다. 도 13에 보호 도메인 내의 호출 및 분기를 개념적으로 나타낸다.
보호 도메인의 코드(1101)의 실행은, 보호 도메인 밖의 스레드(thread; 1121)가 보호 도메인의 "egate"(엔트리 게이트) 명령으로 분기함으로써 시작된다. "egate" 명령의 실행에 의해 모든 레지스터가 초기화되고, 그 후 프로그램의 실행에 의해 순차적으로 데이터 보호 속성이 설정된다. "jmp xxx" 명령에 의해 보호 도메인내의 분기처 "xxx"(1111)로 제어가 이동하고(처리 1122), 어드레스 "ppp"(1112)에 위치한 "call yyy" 명령이 실행된다(처리 1123). 호출원의 어드레스 "ppp"(1112)가 스택 메모리(1102)로 푸시되고, 호출처 "yyy"(1113)로 제어가 이동한다. 호출처에서의 처리가 완료되고 "ret" 명령이 실행되면, 스택의 복귀 어드레스 "ppp"(1112)로 제어가 이동한다. 실행코드 암호화키가 동일한 상태로 있는 한은 실행제어에 제한은 없다.
다음에는 보호 도메인으로부터 비보호 도메인으로의 호출 및 분기에 대해 설명한다. 이 제어의 이동에 관해서는, 프로그램 작성자에 의해 의도되지 않은 보호 도메인으로부터 비보호 도메인으로의 이동을 회피하고 데이터 보호 상태를 보호하기 위해, 특수한 명령의 실행 및 이하에 설명하는 사용자 TSS의 조작을 수행한다.
도 14는 보호 도메인으로부터 비보호 도메인으로의 호출 및 분기를 개념적으로 나타낸다. 여기서, 각각의 도메인에는 보호 도메인의 실행코드(1201)와 비보호 도메인의 실행코드(1202)가 배치되어 있다. 또, 사용자 TSS 영역(1203)과 비보호 도메인과의 파라미터 교환영역(1204)이 설치되어 있다.
실행은, 스레드(1221)가 "egate" 명령을 실행하는 것으로 시작된다. 보호 도메인의 프로그램은 비보호 도메인의 코드를 호출하기 전에, 미리 정해진 파라미터 영역(1204)에 사용자 TSS 영역(1203)의 어드레스를 격납해 둔다. 그리고, "ecall" 명령을 실행함으로써 비보호 도메인의 코드가 호출된다. "ecall" 명령은 2개의 오퍼랜드를 가지고 있다. 하나는 호출처의 어드레스이고, 다른 하나는 실행상태의 격납처이다. "ecall" 명령은, 호출시의 레지스터 상태(정확하게는 프로그램 카운터가 "ecall" 명령이 내려진 후의 상태에 있을 때의 레지스터 상태)를 오퍼랜드 "uTSS"에 의해 지정된 영역에, 이제까지 설명한 암호화된 TSS와 마찬가지의 포맷으로 격납한다. 이하, 이 영역을 사용자 TSS라고 부른다.
사용자 TSS와 시스템 TSS의 차이는, 도 10에 나타낸 사용자 레지스터에 있어서, U플래그가 TSS상의 영역(825-2)에 설정되어 있는 점이다. 조작의 차이에 대해서는 후술하기로 한다. 사용자 TSS의 메모리로의 격납에 있어서도, 문맥정보의 시스템 TSS로의 격납과 마찬가지로, 사용자에 의해 데이터 보호 속성 레지스터(CY0∼CY3)에 정의된 데이터 보호 속성은 적용되지 않는다.
호출처의 비보호 도메인의 코드에서는, "ecall" 명령의 실행에 의해 레지스터가 초기화되기 때문에, 파라미터를 교환할 수 없다. 이 때문에, 미리 정해진 어드레스 "param"(1203)으로부터 파라미터를 취득되고, 필요한 처리를 수행한다. 비보호 도메인 내에서는 프로그래밍에 제한은 없다. 도 14의 예에서는, 서브루틴 "qqq"(1213)를 호출하고 있다(처리 1225). 예컨대 "exx"로부터 "qqq"의 호출까지의 사이에 스택 포인터의 설정이나 파라미터의 스택으로의 복사를 하기 위한 어댑터 코드(adaptor code)를 배치함으로써, 서브루틴 "qqq"가 갖는 호출 의미(semantic)에 보호 도메인으로부터의 호출을 적응시킬 수 있다. 처리 결과는 메모리상의 파라미터 영역(1204)을 통해 호출원으로 보내진다(처리 1226). 서브루틴의 처리가 완료되면, 호출원의 보호 도메인으로 제어를 복귀시키기 위해, "sret" 명령을 내린다(처리 1227).
"sret" 명령도, 오퍼랜드를 가지고 있지 않은 "ret" 명령과는 달리, 사용자 TSS를 지정하기 위한 오퍼랜드를 1개 가지고 있다. 여기서는, 파라미터 영역 "param"(1204)에 저장된 포인터를 통해 간접적으로 사용자 TSS(1203)를 복구정보로서 지정하고 있다. "sret" 명령에 의한 사용자 TSS의 복구가, 시스템 TSS의 복구와 크게 다른 점은, 사용자 TSS를 복구해도 작업 레지스터는 전혀 영향을 받지 않는다는 점이다. 사용자 TSS의 작업 링크의 필드는 무시된다. "sret" 명령의 오퍼랜드에 U 플래그(825-2)가 "0"으로 설정된 시스템 TSS가 지정된 경우에는, 복구는 실패한다.
복구의 실행시에는, 이미 설명한 실행상태의 복호화 및 실행코드 암호화키와 서명의 검증이 수행되고, 위반이 검출된 경우, 비밀보호 위반의 예외가 발생한다. 검증이 성공하면, 호출원의 "ecall" 명령의 다음의 명령으로부터 실행이 재개된다. 이 어드레스는 사용자 TSS 내에서 암호화되어 서명되어 있으므로, 이 어드레스를 위조한다고 하는 것은 암호학적으로 불가능하다. 프로그램 카운터를 제외한 모든 레지스터는 호출전의 상태로 복귀되어 버리므로, 보호 도메인의 코드는 서브루틴 "exx"의 실행 결과를 파라미터 영역(1204)으로부터 취득한다.
보호 도메인의 처리가 완료되어 제어를 비보호 도메인으로 이동시킬 때는, "ejmp" 명령을 사용한다. "ejmp" 명령은 "ecall" 명령과는 달리 상태의 격납은 행하지 않는다. 만일 "ecall"과 "ejmp" 이외의 "jmp"나 "call" 명령에 의해 보호 도메인으로부터 비보호 도메인으로 제어가 이동한 경우, 비밀보호 위반의 예외가 발생하여 암호화된 문맥정보가 시스템의 TSS 영역(작업 레지스터에 의해 지시된 영역)에 격납된다. 주의해야 할 것은, 이 때 문맥정보는 재개불가능하게 표시된다는 점이다. 또 주의해야 할 것은, "ejmp" 명령의 점핑처로서 보호 도메인의 어드레스를 지정해도 위반으로는 되지 않는다는 점이다.
이상이 보호 도메인으로부터 비보호 도메인으로의 호출에 대한 수순과 그 수순에 사용되는 새로 부가된 명령이다.
응용 프로그램에 의한 사용자 TSS의 복구시에, 권한을 가진 OS에 의해 사용자 TSS를 치환하기 위한 공격이 완전히 불가능하게 된다. 그렇지만, 이러한 경우에 교환가능한 TSS 정보는, 보호 도메인의 실행코드 암호화키가 올바르게 관리되고 있는 한, 반드시 "egate"를 통해 실행이 개시되고, 인터럽션 또는 사용자에 의한 명시적인 실행상태의 격납에 의해 격납된 문맥정보뿐이다. 이 문맥정보의 교환에 의해, 응용 프로그램의 비밀이 누설될 가능성은 아주 적고, 공격자가 어떠한 문맥정보 교환을 행하면 응용 프로그램의 비밀을 취득할 수 있는지를 추측하는 것은 대단히 곤란하게 된다.
상술한 보호 도메인으로부터 비보호 도메인으로의 호출에 대한 수순은, 호출처에서 최초로 실행되는 명령이 피호출측의 "egate" 명령인 경우에, 보호 도메인 사이에서 제어를 이동시키기 위한 수순에 적용하는 것도 가능하다.
이 경우, 이들 보호 도메인 사이의 파라미터의 교환영역을 미리 이들 보호 도메인 사이에서 인증키 교환을 수행함으로써 공유된 암호화키를 이용하여 암호화해 두면, 보호 도메인 사이의 호출을 안전하게 행할 수 있다.
상술한 바와 같이, 본 발명의 마이크로프로세서에 따르면, 다중작업 환경하에 있어서 암호화를 이용하여 실행코드와 이 실행코드의 처리대상 데이터를 보호함으로써 OS나 제3자에 의한 불법 분석을 방지하는 것이 가능하게 된다.
또, 암호화된 데이터를 격납하는 경우에 암호화 속성의 불법 재기록을 방지하는 것이 가능하게 된다.
또, 고정된 키보다 임의의 난수(Kr)를 처리대상 데이터에 대한 암호화키로서 사용함으로써, 암호화된 데이터를 불법 공격으로부터 보호하는 것이 가능하게 된다.
또, 평문 상태에서 디버깅을 수행하는 것이 가능하게 되어, 에러를 발견했을 때 그 에러를 실행코드 암호화키를 알고 있는 프로그램 공급자에게 피드백시킬 수 있다.
또, 마이크로프로세서의 서명을 첨부함으로써 암호화 속성 정보 등의 필요한 정보를 외부 메모리에 격납해 두고, 필요한 부분만을 마이크로프로세서 내부의 레지스터로 읽어들이며, 읽어들일 때에 서명의 검증을 행하도록 함으로써, 마이크로프로세서 내의 메모리의 증가를 방지하여 마이크로프로세서의 비용을 억제하는 것이 가능하게 된다. 이 방식에서는, 읽어들일 때에 치환에 대한 안전성도 보증할 수 있다.
또한, 전술한 것 이외에, 본 발명의 요지를 이탈하지 않는 범위내에서 여러 가지로 변형하여 실시할 수 있음은 물론이다.
이상 설명한 바와 같이 본 발명에 의하면, 다중작업 프로그램 실행환경하의 실행코드 및 처리 대상 데이터의 불법 치환을 방지할 수 있는 마이크로프로세서를 제공할 수 있다.

Claims (20)

  1. 외부로 독출할 수 없는 고유의 비밀키와 이 고유의 비밀키에 대응하는 고유의 공개키를 갖는 마이크로프로세서에 있어서,
    서로 다른 실행코드 암호화키를 이용하여 암호화된 복수의 프로그램을 외부 메모리로부터 독출하는 독출부와,
    상기 독출부에 의해 독출된 복수의 프로그램을 각각의 복호화키를 이용하여 복호화하는 복호화부,
    상기 복호화부에 의해 복호화된 복수의 프로그램을 실행하는 실행부,
    실행이 인터럽트되는 하나의 프로그램에 대한 문맥정보를 외부 메모리 또는 상기 마이크로프로세서 내부에 설치된 문맥정보 메모리에 격납하는 문맥정보 격납부 및,
    상기 외부 메모리 또는 상기 문맥정보 메모리로부터 상기 문맥정보를 독출하고, 상기 문맥정보로부터 상기 하나의 프로그램의 실행상태를 복구함으로써, 상기 하나의 프로그램의 실행을 재개하는 재시작부를 구비하여 구성되고,
    상기 문맥 정보가 상기 하나의 프로그램의 실행상태를 지시하는 정보 및 상기 하나의 프로그램의 실행코드 암호화키를 포함하고 있는 것을 특징으로 하는 마이크로프로세서.
  2. 제1항에 있어서, 상기 문맥정보 격납부는, 상기 문맥정보를 상기 공개키를이용하여 암호화하고, 암호화된 문맥정보를 상기 외부 메모리에 격납하며,
    상기 재시작부는, 상기 외부 메모리로부터 암호화된 문맥정보를 독출하고, 상기 암호화된 문맥정보를 상기 비밀키를 이용하여 복호화하며, 복호화된 문맥정보로부터 상기 하나의 프로그램의 실행상태를 복구함으로써, 상기 하나의 프로그램의 실행을 재개하는 것을 특징으로 하는 마이크로프로세서.
  3. 제2항에 있어서, 상기 재시작부는, 상기 복호화된 문맥정보에 포함된 복호화된 실행코드 암호화키가 상기 하나의 프로그램의 실행코드 암호화키와 일치하는 경우에만 상기 하나의 프로그램의 실행을 재개하는 것을 특징으로 하는 마이크로프로세서.
  4. 제2항에 있어서, 상기 재시작부는, 상기 복호화된 문맥정보에 포함된 복호화된 실행코드 암호화키를 상기 하나의 프로그램을 복호화하기 위한 복호화키로서 사용하는 것을 특징으로 하는 마이크로프로세서.
  5. 제1항에 있어서, 상기 문맥정보 격납부는, 상기 문맥정보를 상기 하나의 프로그램이 인터럽트된 후에 실행되는 다른 프로그램에 의해 독출할 수 없는 문맥정보 메모리에 평문(plaintext)으로 격납하고,
    상기 재시작부는, 상기 문맥정보 메모리로부터 문맥정보를 독출하고, 그 문맥정보로부터 상기 하나의 프로그램의 실행상태를 복구함으로써, 상기 하나의 프로그램의 실행을 재개하는 것을 특징으로 하는 마이크로프로세서.
  6. 제5항에 있어서, 상기 재시작부는, 상기 다른 프로그램에 의한 소정의 명령의 실행에 응답하여 상기 하나의 프로그램의 실행을 재개하는 것을 특징으로 하는 마이크로프로세서.
  7. 제6항에 있어서, 상기 문맥정보 격납부는, 상기 하나의 프로그램의 실행을 인터럽트한 때에 상기 문맥정보를 상기 문맥정보 메모리에 격납하고, 상기 문맥정보 메모리 내의 문맥정보를 상기 공개키를 이용하여 암호화하며, 상기 다른 프로그램에 의한 소정의 다른 명령의 실행에 응답하여 상기 암호화된 문맥정보를 상기 외부 메모리에 저장하는 것을 특징으로 하는 마이크로프로세서.
  8. 제5항에 있어서, 상기 문맥정보 격납부는, 상기 하나의 프로그램의 실행을 인터럽트한 때에 상기 문맥정보를 상기 문맥정보 메모리에 격납하고, 상기 문맥정보 메모리 내의 문맥정보를 상기 공개키를 이용하여 암호화하며, 상기 암호화된 문맥정보를 상기 다른 프로그램에 의해 지정된 상기 외부 메모리의 어드레스에 저장하는 것을 특징으로 하는 마이크로프로세서.
  9. 제1항에 있어서, 상기 문맥정보 격납부는, 임시키로서 난수를 발생시키고, 상기 문맥정보를 암호화하며, 암호화된 문맥정보를 상기 외부 메모리에 격납하고,
    상기 암호화된 문맥정보는, 상기 임시키를 이용하여 상기 하나의 프로그램의 실행상태를 지시하는 정보를 암호화함으로써 얻어지는 제1의 값과, 상기 공개키를 이용하여 상기 임시키를 암호화함으로써 얻어지는 제2의 값을 포함하고 있으며,
    상기 재시작부는, 상기 외부 메모리로부터 상기 암호화된 문맥정보를 독출하고, 상기 비밀키를 이용하여 상기 암호화된 문맥정보에 포함된 제2의 값으로부터 임시키를 복호화하며, 복호화된 임시키를 이용하여 상기 암호화된 문맥정보에 포함된 상기 제1의 값으로부터 실행상태를 지시하는 정보를 복호화하고, 복호화된 문맥정보로부터 상기 하나의 프로그램의 실행상태를 복구함으로써 상기 하나의 프로그램의 실행을 재개하는 것을 특징으로 하는 마이크로프로세서.
  10. 제9항에 있어서, 상기 문맥정보 격납부는, 상기 하나의 프로그램의 실행코드 암호화키를 이용하여 상기 임시키를 암호화함으로써 얻어지는 제3의 값도 포함하고 있는 암호화된 문맥정보를 저장하는 것을 특징으로 하는 마이크로프로세서.
  11. 제10항에 있어서, 상기 재시작부는, 상기 비밀키를 이용하여 상기 암호화된 문맥정보에 포함된 제2의 값으로부터 제1의 임시키를 복호화하고, 상기 하나의 프로그램의 실행코드 암호화키를 이용하여 상기 암호화된 문맥정보에 포함된 제3의 값으로부터 제2의 임시키를 복호화하는 사이에 복호화된 제1의 임시키를 이용하여 상기 암호화된 문맥정보에 포함된 상기 제1의 값으로부터 실행상태를 지시하는 정보를 복호화하며, 상기 복호화된 제1의 임시키가 상기 복호화된 제2의 임시키와 일치하는 경우에만 상기 하나의 프로그램의 실행을 재개하는 것을 특징으로 하는 마이크로프로세서.
  12. 제1항에 있어서, 현재 실행되는 프로그램의 실행상태를 저장하는 실행상태 기억부와,
    상기 하나의 프로그램이 인터럽트된 후 다른 프로그램의 실행을 시작하기 전에 상기 실행상태 기억부의 내용을 소정의 값으로 초기화하거나, 혹은 상기 실행상태 기억부의 내용을 암호화하는 실행상태 초기화부를 더 구비하여 구성된 것을 특징으로 하는 마이크로프로세서.
  13. 제1항에 있어서, 미리 공개키를 이용하여 암호화한 각 프로그램의 실행코드 암호화키를 외부 메모리로부터 독출하는 키독출부와,
    비밀키를 이용하여 상기 키독출부에 의해 독출된 실행코드 암호화키를 복호화하는 키복호화부를 더 구비하여 구성되고,
    상기 복호화부가 상기 실행코드 암호화키를 복호화키로 이용하여 각 프로그램을 복호화하는 것을 특징으로 하는 마이크로프로세서.
  14. 제1항에 있어서, 현재 실행되는 프로그램의 실행상태 및 현재 실행되는 프로그램에 의해 처리되는 데이터의 암호화 속성을 저장하는 실행상태 기억부와,
    상기 실행상태 기억부에 저장된 암호화 속성에 따라 현재 실행되는 프로그램에 의해 처리되는 데이터를 암호화하는 데이터 암호화부를 더 구비하여 구성된 것을 특징으로 하는 마이크로프로세서.
  15. 제1항에 있어서, 현재 실행되는 프로그램의 실행상태, 현재 실행되는 프로그램에 의해 처리되는 데이터의 암호화 속성 및 이 암호화 속성을 지정하기 위한 암호화 속성 지정정보를 저장하는 실행상태 기억부와,
    상기 암호화 속성 지정정보와 관련되고 상기 비밀키를 이용하여 얻어지는 서명을 포함하고 있는 관련정보를 상기 외부 메모리에 기록하는 관련정보 기록부,
    현재 실행되는 프로그램에 의해 참조되는 데이터의 어드레스에 따라 상기 외부 메모리로부터 관련정보를 독출하는 관련정보 독출부,
    공개키를 이용하여 상기 관련정보에 포함된 서명을 검증하고, 상기 관련정보에 포함된 서명이 상기 마이크로프로세서의 원래의 서명과 일치하는 경우에만 상기 관련정보 및 상기 암호화 속성 지정정보에 따라 데이터 참조를 위해 사용되어야 할 암호화키 및 알고리즘을 결정함으로써 현재 실행되는 프로그램에 의한 데이터 참조를 허가하는 데이터 참조 허가부 및,
    상기 실행상태 기억부에 저장된 상기 암호화 속성에 따라 현재 실행되는 프로그램에 의해 참조되는 데이터를 암호화하는 데이터 암호화부를 더 구비하여 구성된 것을 특징으로 하는 마이크로프로세서.
  16. 제1항에 있어서, 복수의 프로그램에 대한 평문 명령 및 평문 데이터를 캐시라인의 단위로 캐시하고, 각 캐시 라인에 대해 명령이 각 캐시 라인에 캐시되어 있는 각 프로그램 또는 실행이 각 캐시 라인에서 평문 데이터의 캐싱을 발생시킨 각 프로그램을 복호화하는데 사용되는 복호화키를 독자적으로 식별하는 암호화키 식별자를 지시하는 속성영역을 갖추고 있는 캐시 메모리와,
    하나의 캐시 라인에 대한 암호화 속성에 의해 지시되는 복호화키 식별자가 다른 캐시 라인에 대한 암호화 속성에 의해 지시되는 복호화키 식별자와 일치하는 경우에만 상기 다른 캐시 라인에 캐시된 하나의 데이터에 대해 상기 하나의 캐시 라인에 저장된 하나의 캐시된 프로그램의 실행에 의해 발생되는 데이터 참조를 허가하는 캐시 억세스 제어부를 더 구비하여 구성된 것을 특징으로 하는 마이크로프로세서.
  17. 제16항에 있어서, 상기 데이터 참조가 허가되지 않은 경우에는, 상기 외부 메모리로부터 상기 다른 캐시 라인으로 새로운 데이터를 캐시하는 것을 특징으로 하는 마이크로프로세서.
  18. 제16항에 있어서, 상기 데이터 참조가 허가되지 않은 경우에는, 상기 하나의 캐시된 프로그램을 보호 예외에 의해 인터럽트하는 것을 특징으로 하는 마이크로프로세서.
  19. 제1항에 있어서, 상기 실행부는, 평문 프로그램을 실행하고, 소정의 어드레스나 어드레스 영역에서의 프로그램의 실행 또는 소정의 어드레스나 어드레스 영역에서의 데이터로의 데이터 참조가 평문 프로그램의 실행중에 발생하는 경우에 예외를 발생시키는 디버깅 기능을 갖추고 있으며,
    상기 디버깅기능은 암호화된 프로그램의 실행중에 무효화되는 것을 특징으로 하는 마이크로프로세서.
  20. 제1항에 있어서, 상기 마이크로프로세서의 구성요소가 1칩 또는 1패키지내에 포함되어 있는 것을 특징으로 하는 마이크로프로세서.
KR10-2001-0007300A 2000-02-14 2001-02-14 변조방지 마이크로프로세서 KR100375158B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2000-035898 2000-02-14
JP2000035898A JP3801833B2 (ja) 2000-02-14 2000-02-14 マイクロプロセッサ
JP2000-135010 2000-05-08
JP2000135010A JP4226760B2 (ja) 2000-05-08 2000-05-08 マイクロプロセッサ、これを用いたマルチタスク実行方法、およびマルチレッド実行方法

Publications (2)

Publication Number Publication Date
KR20010082631A KR20010082631A (ko) 2001-08-30
KR100375158B1 true KR100375158B1 (ko) 2003-03-08

Family

ID=26585335

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020010007301A KR100362219B1 (ko) 2000-02-14 2001-02-14 변조방지 프로세서를 이용하여 프로그램을 분배하기 위한방법 및 시스템
KR10-2001-0007300A KR100375158B1 (ko) 2000-02-14 2001-02-14 변조방지 마이크로프로세서

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020010007301A KR100362219B1 (ko) 2000-02-14 2001-02-14 변조방지 프로세서를 이용하여 프로그램을 분배하기 위한방법 및 시스템

Country Status (5)

Country Link
US (3) US7270193B2 (ko)
EP (2) EP1126356B1 (ko)
KR (2) KR100362219B1 (ko)
CN (2) CN1220121C (ko)
DE (1) DE60135695D1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030075018A (ko) * 2002-03-15 2003-09-22 주식회사 셈틀로미디어 변조 방지용 소프트웨어 파일 생성 장치와 그 소프트웨어파일의 자가 무결성 검증 방법 및 클라이언트-서버환경에서의 소프트웨어 파일의 자가 무결성 검증 방법
KR101405915B1 (ko) 2007-04-26 2014-06-12 삼성전자주식회사 데이터의 암호화 저장 방법 및 암호화된 데이터의 판독방법
US9418327B1 (en) 2016-01-29 2016-08-16 International Business Machines Corporation Security key system

Families Citing this family (205)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7996670B1 (en) * 1999-07-08 2011-08-09 Broadcom Corporation Classification engine in a cryptography acceleration chip
US7270193B2 (en) 2000-02-14 2007-09-18 Kabushiki Kaisha Toshiba Method and system for distributing programs using tamper resistant processor
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
US6986052B1 (en) 2000-06-30 2006-01-10 Intel Corporation Method and apparatus for secure execution using a secure memory partition
FR2817067B1 (fr) * 2000-11-21 2003-02-21 Cyber Comm Procede et dispositif d'authentification de documents electroniques au moyen d'une signature numerique
US20020114457A1 (en) * 2001-01-26 2002-08-22 Takahiro Sato LSI having interpreter function and information recording/reproducing apparatus using the same
US7260820B1 (en) 2001-04-26 2007-08-21 Vm Ware, Inc. Undefeatable transformation for virtual machine I/O operations
US7428636B1 (en) * 2001-04-26 2008-09-23 Vmware, Inc. Selective encryption system and method for I/O operations
TWI270270B (en) * 2001-05-14 2007-01-01 Ntt Docomo Inc System for managing program
US20050097342A1 (en) * 2001-05-21 2005-05-05 Cyberscan Technology, Inc. Trusted watchdog method and apparatus for securing program execution
US7979740B2 (en) * 2001-05-21 2011-07-12 Mudalla Technology, Inc. Gaming machine having game play suspension and resumption features using biometrically-based authentication and method of operating same
US7051332B2 (en) * 2001-05-21 2006-05-23 Cyberscan Technology, Inc. Controller having a restart engine configured to initiate a controller restart cycle upon receipt of a timeout signal from a watchdog timer
US7237121B2 (en) * 2001-09-17 2007-06-26 Texas Instruments Incorporated Secure bootloader for securing digital devices
US7181530B1 (en) * 2001-07-27 2007-02-20 Cisco Technology, Inc. Rogue AP detection
JP2003051819A (ja) * 2001-08-08 2003-02-21 Toshiba Corp マイクロプロセッサ
JP4226816B2 (ja) * 2001-09-28 2009-02-18 株式会社東芝 マイクロプロセッサ
RU2298824C2 (ru) * 2001-09-28 2007-05-10 Хай Денсити Дивайсез Ас Способ и устройство для шифрования/дешифрования данных в запоминающем устройстве большой емкости
CA2473122A1 (en) * 2001-11-12 2003-03-20 Network Research Lab Limited Method and device for protecting information against unauthorised use
US20030115471A1 (en) * 2001-12-19 2003-06-19 Skeba Kirk W. Method and apparatus for building operational radio firmware using incrementally certified modules
KR100458515B1 (ko) * 2001-12-21 2004-12-03 한국전자통신연구원 무선 인터넷을 통한 이동 단말용 응용프로그램 설치시스템 및 그 방법
US7305567B1 (en) * 2002-03-01 2007-12-04 Cavium Networks, In. Decoupled architecture for data ciphering operations
US7900054B2 (en) * 2002-03-25 2011-03-01 Intel Corporation Security protocols for processor-based systems
JP2003330365A (ja) * 2002-05-09 2003-11-19 Toshiba Corp コンテンツ配布/受信方法
CN1296790C (zh) 2002-06-05 2007-01-24 富士通株式会社 存储器管理单元、代码验证装置以及代码译码装置
US7392415B2 (en) * 2002-06-26 2008-06-24 Intel Corporation Sleep protection
JP4073913B2 (ja) * 2002-07-09 2008-04-09 富士通株式会社 開放型汎用耐攻撃cpu及びその応用システム
JP2004054834A (ja) 2002-07-24 2004-02-19 Matsushita Electric Ind Co Ltd プログラム開発方法、プログラム開発支援装置およびプログラム実装方法
US20040017918A1 (en) * 2002-07-24 2004-01-29 Christophe Nicolas Process for point-to-point secured transmission of data and electronic module for implementing the process
EP1429224A1 (en) * 2002-12-10 2004-06-16 Texas Instruments Incorporated Firmware run-time authentication
JP4099039B2 (ja) 2002-11-15 2008-06-11 松下電器産業株式会社 プログラム更新方法
US7137109B2 (en) * 2002-12-17 2006-11-14 Hewlett-Packard Development Company, L.P. System and method for managing access to a controlled space in a simulator environment
US7434043B2 (en) 2002-12-18 2008-10-07 Broadcom Corporation Cryptography accelerator data routing unit
US7568110B2 (en) 2002-12-18 2009-07-28 Broadcom Corporation Cryptography accelerator interface decoupling from cryptography processing cores
US20040123123A1 (en) * 2002-12-18 2004-06-24 Buer Mark L. Methods and apparatus for accessing security association information in a cryptography accelerator
US20040123120A1 (en) * 2002-12-18 2004-06-24 Broadcom Corporation Cryptography accelerator input interface data handling
US7512811B2 (en) * 2003-01-14 2009-03-31 Canon Kabushiki Kaisha Encryption/decryption method for data limited in value range, apparatus and program therefor
JP3880933B2 (ja) * 2003-01-21 2007-02-14 株式会社東芝 耐タンパマイクロプロセッサ及びキャッシュメモリ搭載プロセッサによるデータアクセス制御方法
US8225290B2 (en) * 2003-02-11 2012-07-17 V. i. Laboratories, Inc. Systems and methods for regulating execution of computer software
US7370319B2 (en) * 2003-02-11 2008-05-06 V.I. Laboratories, Inc. System and method for regulating execution of computer software
US7539876B2 (en) * 2003-04-18 2009-05-26 Via Technologies, Inc. Apparatus and method for generating a cryptographic key schedule in a microprocessor
US7844053B2 (en) * 2003-04-18 2010-11-30 Ip-First, Llc Microprocessor apparatus and method for performing block cipher cryptographic functions
US7392400B2 (en) * 2003-04-18 2008-06-24 Via Technologies, Inc. Microprocessor apparatus and method for optimizing block cipher cryptographic functions
US7529368B2 (en) * 2003-04-18 2009-05-05 Via Technologies, Inc. Apparatus and method for performing transparent output feedback mode cryptographic functions
US7529367B2 (en) * 2003-04-18 2009-05-05 Via Technologies, Inc. Apparatus and method for performing transparent cipher feedback mode cryptographic functions
US7532722B2 (en) * 2003-04-18 2009-05-12 Ip-First, Llc Apparatus and method for performing transparent block cipher cryptographic functions
US8060755B2 (en) * 2003-04-18 2011-11-15 Via Technologies, Inc Apparatus and method for providing user-generated key schedule in a microprocessor cryptographic engine
US7502943B2 (en) * 2003-04-18 2009-03-10 Via Technologies, Inc. Microprocessor apparatus and method for providing configurable cryptographic block cipher round results
US7536560B2 (en) * 2003-04-18 2009-05-19 Via Technologies, Inc. Microprocessor apparatus and method for providing configurable cryptographic key size
US7321910B2 (en) * 2003-04-18 2008-01-22 Ip-First, Llc Microprocessor apparatus and method for performing block cipher cryptographic functions
US7542566B2 (en) * 2003-04-18 2009-06-02 Ip-First, Llc Apparatus and method for performing transparent cipher block chaining mode cryptographic functions
US7925891B2 (en) * 2003-04-18 2011-04-12 Via Technologies, Inc. Apparatus and method for employing cryptographic functions to generate a message digest
US7519833B2 (en) * 2003-04-18 2009-04-14 Via Technologies, Inc. Microprocessor apparatus and method for enabling configurable data block size in a cryptographic engine
US7900055B2 (en) * 2003-04-18 2011-03-01 Via Technologies, Inc. Microprocessor apparatus and method for employing configurable block cipher cryptographic algorithms
GB2403562A (en) * 2003-07-04 2005-01-05 Hewlett Packard Development Co Secure processing environment in which executable code for services is only received by a secure loading process through the service request interface
US7366302B2 (en) * 2003-08-25 2008-04-29 Sony Corporation Apparatus and method for an iterative cryptographic block
US7533276B2 (en) 2003-08-26 2009-05-12 Panasonic Corporation Program execution device
JP4263976B2 (ja) * 2003-09-24 2009-05-13 株式会社東芝 オンチップマルチコア型耐タンパプロセッサ
US7681046B1 (en) 2003-09-26 2010-03-16 Andrew Morgan System with secure cryptographic capabilities using a hardware specific digital secret
TWI274280B (en) * 2003-09-29 2007-02-21 Via Tech Inc Microprocessor apparatus and method for employing configurable block cipher cryptographic algorithms
TWI247241B (en) * 2003-09-29 2006-01-11 Ip First Llc Microprocessor apparatus and method for performing block cipher cryptographic functions
US7694151B1 (en) * 2003-11-20 2010-04-06 Johnson Richard C Architecture, system, and method for operating on encrypted and/or hidden information
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
TWI274281B (en) * 2003-12-04 2007-02-21 Ip First Llc Apparatus and method for performing transparent block cipher cryptographic functions
JP4282472B2 (ja) * 2003-12-26 2009-06-24 株式会社東芝 マイクロプロセッサ
CN1661958B (zh) * 2004-03-15 2010-04-28 威盛电子股份有限公司 区块密码功能的微处理器及方法
US20070245419A1 (en) * 2004-04-29 2007-10-18 Padraig Omahony Intrusion detection during program execution in a computer
US9219729B2 (en) * 2004-05-19 2015-12-22 Philip Drope Multimedia network system with content importation, content exportation, and integrated content management
JP2005346182A (ja) * 2004-05-31 2005-12-15 Fujitsu Ltd 情報処理装置、耐タンパ方法、耐タンパプログラム
US20050276413A1 (en) * 2004-06-14 2005-12-15 Raja Neogi Method and apparatus to manage heterogeneous cryptographic operations
JP4559794B2 (ja) * 2004-06-24 2010-10-13 株式会社東芝 マイクロプロセッサ
CN100354787C (zh) * 2004-06-24 2007-12-12 株式会社东芝 微处理器
CN100353276C (zh) * 2004-06-24 2007-12-05 株式会社东芝 微处理器
JP4612461B2 (ja) * 2004-06-24 2011-01-12 株式会社東芝 マイクロプロセッサ
JP4447977B2 (ja) 2004-06-30 2010-04-07 富士通マイクロエレクトロニクス株式会社 セキュアプロセッサ、およびセキュアプロセッサ用プログラム。
JP4490192B2 (ja) * 2004-07-02 2010-06-23 株式会社エヌ・ティ・ティ・ドコモ マルチタスク実行システム
JP4204522B2 (ja) * 2004-07-07 2009-01-07 株式会社東芝 マイクロプロセッサ
JP2006023957A (ja) * 2004-07-07 2006-01-26 Sony Corp 半導体集積回路及び情報処理装置
US20060136717A1 (en) 2004-12-20 2006-06-22 Mark Buer System and method for authentication via a proximate device
US8295484B2 (en) * 2004-12-21 2012-10-23 Broadcom Corporation System and method for securing data from a remote input device
JP2006202017A (ja) * 2005-01-20 2006-08-03 Sharp Corp 情報処理装置、情報記憶装置、情報処理装置の機能拡張システム、情報処理装置の機能拡張方法及び機能削除方法、並びに情報処理装置の機能拡張プログラム及び機能削除プログラム
EP1717723A1 (en) * 2005-04-29 2006-11-02 ST Incard S.r.l. Improved virtual machine or hardware processor for IC-card portable electronic devices
JP2006311462A (ja) * 2005-05-02 2006-11-09 Toshiba Corp コンテンツ検索装置及びその方法
US20060259828A1 (en) 2005-05-16 2006-11-16 Texas Instruments Incorporated Systems and methods for controlling access to secure debugging and profiling features of a computer system
US9633213B2 (en) * 2005-05-16 2017-04-25 Texas Instruments Incorporated Secure emulation logic between page attribute table and test interface
JP4886682B2 (ja) * 2005-05-26 2012-02-29 パナソニック株式会社 データ処理装置
US7571298B2 (en) * 2005-06-30 2009-08-04 Intel Corporation Systems and methods for host virtual memory reconstitution
US7669242B2 (en) * 2005-06-30 2010-02-23 Intel Corporation Agent presence monitor configured to execute in a secure environment
US7953980B2 (en) * 2005-06-30 2011-05-31 Intel Corporation Signed manifest for run-time verification of software program identity and integrity
US8839450B2 (en) 2007-08-02 2014-09-16 Intel Corporation Secure vault service for software components within an execution environment
US20070006307A1 (en) * 2005-06-30 2007-01-04 Hahn Scott D Systems, apparatuses and methods for a host software presence check from an isolated partition
EP1752937A1 (en) 2005-07-29 2007-02-14 Research In Motion Limited System and method for encrypted smart card PIN entry
JP2007058588A (ja) * 2005-08-24 2007-03-08 Toshiba Corp プログラム保護機能を持つプロセッサ
US8171268B2 (en) * 2005-09-19 2012-05-01 Intel Corporation Technique for context state management to reduce save and restore operations between a memory and a processor using in-use vectors
US20070067590A1 (en) * 2005-09-22 2007-03-22 Uday Savagaonkar Providing protected access to critical memory regions
US7496727B1 (en) 2005-12-06 2009-02-24 Transmeta Corporation Secure memory access system and method
US20070168680A1 (en) * 2006-01-13 2007-07-19 Lockheed Martin Corporation Anti-tamper system
US7681047B2 (en) * 2006-04-18 2010-03-16 International Business Machines Corporation Decryption of data in storage systems
US7428306B2 (en) * 2006-04-18 2008-09-23 International Business Machines Corporation Encryption apparatus and method for providing an encrypted file system
US8095802B2 (en) * 2006-09-12 2012-01-10 International Business Machines Corporation System and method for securely saving a program context to a shared memory
US8190917B2 (en) 2006-09-12 2012-05-29 International Business Machines Corporation System and method for securely saving and restoring a context of a secure program loader
US7945789B2 (en) * 2006-09-12 2011-05-17 International Business Machines Corporation System and method for securely restoring a program context from a shared memory
US7660769B2 (en) 2006-09-12 2010-02-09 International Business Machines Corporation System and method for digital content player with secure processing vault
US8583938B2 (en) * 2006-09-20 2013-11-12 Kam Fu Chan From polymorphic executable to polymorphic operating system
US7882318B2 (en) * 2006-09-29 2011-02-01 Intel Corporation Tamper protection of software agents operating in a vitual technology environment methods and apparatuses
US7802050B2 (en) * 2006-09-29 2010-09-21 Intel Corporation Monitoring a target agent execution pattern on a VT-enabled system
US20080141382A1 (en) * 2006-12-12 2008-06-12 Lockheed Martin Corporation Anti-tamper device
US8495383B2 (en) * 2006-12-14 2013-07-23 Nokia Corporation Method for the secure storing of program state data in an electronic device
US8245307B1 (en) * 2006-12-18 2012-08-14 Nvidia Corporation Providing secure access to a secret
US20080148061A1 (en) * 2006-12-19 2008-06-19 Hongxia Jin Method for effective tamper resistance
US20080155273A1 (en) * 2006-12-21 2008-06-26 Texas Instruments, Inc. Automatic Bus Encryption And Decryption
US7949130B2 (en) * 2006-12-28 2011-05-24 Intel Corporation Architecture and instruction set for implementing advanced encryption standard (AES)
US20080229117A1 (en) * 2007-03-07 2008-09-18 Shin Kang G Apparatus for preventing digital piracy
EP1978466A1 (en) * 2007-04-05 2008-10-08 STMicroelectronics (Research & Development) Limited Integrated circuit and method for secure execution of software
US20100088528A1 (en) * 2007-05-03 2010-04-08 Radu Sion Method and apparatus for tamper-proof wirte-once-read-many computer storage
EP2015561A1 (fr) * 2007-07-10 2009-01-14 Nagracard S.A. Procédé d'envoi d'un code exécutable à un dispositif de réception et procédé d'exécution de ce code
US8312518B1 (en) * 2007-09-27 2012-11-13 Avaya Inc. Island of trust in a service-oriented environment
JP5201716B2 (ja) * 2007-09-28 2013-06-05 東芝ソリューション株式会社 暗号モジュール配信システム、暗号管理サーバ装置、暗号処理装置、クライアント装置、暗号管理プログラム、暗号処理プログラム、およびクライアントプログラム
US8560634B2 (en) 2007-10-17 2013-10-15 Dispersive Networks, Inc. Apparatus, systems and methods utilizing dispersive networking
US8539098B2 (en) 2007-10-17 2013-09-17 Dispersive Networks, Inc. Multiplexed client server (MCS) communications and systems
US8099718B2 (en) * 2007-11-13 2012-01-17 Intel Corporation Method and system for whitelisting software components
JP4976991B2 (ja) * 2007-11-22 2012-07-18 株式会社東芝 情報処理装置、プログラム検証方法及びプログラム
US8819839B2 (en) * 2008-05-24 2014-08-26 Via Technologies, Inc. Microprocessor having a secure execution mode with provisions for monitoring, indicating, and managing security levels
US8370641B2 (en) * 2008-05-24 2013-02-05 Via Technologies, Inc. Initialization of a microprocessor providing for execution of secure code
US8175265B2 (en) 2008-09-02 2012-05-08 Apple Inc. Systems and methods for implementing block cipher algorithms on attacker-controlled systems
US8745411B2 (en) * 2008-11-07 2014-06-03 Broadcom Corporation Protecting external volatile memories using low latency encryption/decryption
JP5322620B2 (ja) 2008-12-18 2013-10-23 株式会社東芝 情報処理装置、プログラム開発システム、プログラム検証方法及びプログラム
US8364601B2 (en) * 2008-12-31 2013-01-29 Intel Corporation Methods and systems to directly render an image and correlate corresponding user input in a secure memory domain
US9298894B2 (en) 2009-06-26 2016-03-29 International Business Machines Corporation Cache structure for a computer system providing support for secure objects
US8578175B2 (en) 2011-02-23 2013-11-05 International Business Machines Corporation Secure object having protected region, integrity tree, and unprotected region
US9846789B2 (en) 2011-09-06 2017-12-19 International Business Machines Corporation Protecting application programs from malicious software or malware
US8954752B2 (en) 2011-02-23 2015-02-10 International Business Machines Corporation Building and distributing secure object software
US8819446B2 (en) * 2009-06-26 2014-08-26 International Business Machines Corporation Support for secure objects in a computer system
US9954875B2 (en) 2009-06-26 2018-04-24 International Business Machines Corporation Protecting from unintentional malware download
WO2011096073A1 (ja) * 2010-02-08 2011-08-11 Ogawa Mutsumi メモリ管理方法
JP5377748B2 (ja) 2010-02-18 2013-12-25 株式会社東芝 プログラム
DE102010010851A1 (de) * 2010-03-10 2011-09-15 Giesecke & Devrient Gmbh Ausspähungsschutz bei der Ausführung einer Operationssequenz in einem tragbaren Datenträger
US8370648B1 (en) * 2010-03-15 2013-02-05 Emc International Company Writing and reading encrypted data using time-based encryption keys
US20110258430A1 (en) * 2010-04-15 2011-10-20 Nokia Corporation Method and apparatus for applying execution context criteria for execution context sharing
TWI497344B (zh) * 2010-05-17 2015-08-21 Via Tech Inc 微處理器及產生不可預測之鑰的方法
US9911008B2 (en) 2010-05-25 2018-03-06 Via Technologies, Inc. Microprocessor with on-the-fly switching of decryption keys
US8683225B2 (en) 2010-05-25 2014-03-25 Via Technologies, Inc. Microprocessor that facilitates task switching between encrypted and unencrypted programs
US9798898B2 (en) 2010-05-25 2017-10-24 Via Technologies, Inc. Microprocessor with secure execution mode and store key instructions
US9967092B2 (en) 2010-05-25 2018-05-08 Via Technologies, Inc. Key expansion logic using decryption key primitives
US9892283B2 (en) 2010-05-25 2018-02-13 Via Technologies, Inc. Decryption of encrypted instructions using keys selected on basis of instruction fetch address
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 株式会社東芝 情報処理装置、情報処理プログラム
JP2012080295A (ja) * 2010-09-30 2012-04-19 Toshiba Corp 情報記憶装置、情報記憶方法、及び電子機器
JP2012084071A (ja) 2010-10-14 2012-04-26 Toshiba Corp デジタルコンテンツの保護方法、復号方法、再生装置、記憶媒体、暗号装置
US8955110B1 (en) 2011-01-14 2015-02-10 Robert W. Twitchell, Jr. IP jamming systems utilizing virtual dispersive networking
US8941659B1 (en) 2011-01-28 2015-01-27 Rescon Ltd Medical symptoms tracking apparatus, methods and systems
US9864853B2 (en) 2011-02-23 2018-01-09 International Business Machines Corporation Enhanced security mechanism for authentication of users of a system
US8839001B2 (en) * 2011-07-06 2014-09-16 The Boeing Company Infinite key memory transaction unit
US8661527B2 (en) 2011-08-31 2014-02-25 Kabushiki Kaisha Toshiba Authenticator, authenticatee and authentication method
US9166953B2 (en) * 2011-10-31 2015-10-20 Nokia Technologies Oy Method and apparatus for providing identity based encryption in distributed computations
US20130108038A1 (en) * 2011-11-01 2013-05-02 Apple Inc. System and method for a collatz based hash function
JP5275432B2 (ja) 2011-11-11 2013-08-28 株式会社東芝 ストレージメディア、ホスト装置、メモリ装置、及びシステム
CN102509048A (zh) * 2011-11-14 2012-06-20 西安电子科技大学 防止操作系统中断流程被非法转移的方法
JP5112555B1 (ja) 2011-12-02 2013-01-09 株式会社東芝 メモリカード、ストレージメディア、及びコントローラ
JP5100884B1 (ja) 2011-12-02 2012-12-19 株式会社東芝 メモリ装置
JP5204291B1 (ja) 2011-12-02 2013-06-05 株式会社東芝 ホスト装置、装置、システム
JP5204290B1 (ja) 2011-12-02 2013-06-05 株式会社東芝 ホスト装置、システム、及び装置
CN102521037B (zh) * 2011-12-05 2013-12-25 晶门科技(深圳)有限公司 使用双上下文存储的密码学算法协处理器及数据流处理方法
JP5275482B2 (ja) 2012-01-16 2013-08-28 株式会社東芝 ストレージメディア、ホスト装置、メモリ装置、及びシステム
US8954755B2 (en) 2012-01-23 2015-02-10 International Business Machines Corporation Memory address translation-based data encryption with integrated encryption engine
EP2653992A1 (en) 2012-04-17 2013-10-23 Itron, Inc. Microcontroller configured for external memory decryption
JP6201298B2 (ja) * 2012-11-14 2017-09-27 オムロン株式会社 コントローラおよびプログラム
US9183161B2 (en) * 2012-12-28 2015-11-10 Intel Corporation Apparatus and method for page walk extension for enhanced security checks
US9201811B2 (en) 2013-02-14 2015-12-01 Kabushiki Kaisha Toshiba Device and authentication method therefor
US8984294B2 (en) 2013-02-15 2015-03-17 Kabushiki Kaisha Toshiba System of authenticating an individual memory device via reading data including prohibited data and readable data
US11044076B2 (en) * 2013-02-25 2021-06-22 Hecusys, LLC Encrypted data processing
US9280490B2 (en) * 2013-04-17 2016-03-08 Laurence H. Cooke Secure computing
US9846656B2 (en) 2013-04-17 2017-12-19 Laurence H. Cooke Secure computing
US9547767B2 (en) * 2013-11-13 2017-01-17 Via Technologies, Inc. Event-based apparatus and method for securing bios in a trusted computing system during execution
US10055588B2 (en) * 2013-11-13 2018-08-21 Via Technologies, Inc. Event-based apparatus and method for securing BIOS in a trusted computing system during execution
US9223965B2 (en) 2013-12-10 2015-12-29 International Business Machines Corporation Secure generation and management of a virtual card on a mobile device
US9235692B2 (en) 2013-12-13 2016-01-12 International Business Machines Corporation Secure application debugging
TWI712915B (zh) * 2014-06-12 2020-12-11 美商密碼研究公司 執行一密碼編譯操作之方法,以及電腦可讀非暫時性儲存媒體
US9954849B2 (en) * 2014-06-27 2018-04-24 Oath (Americas) Inc. Systems and methods for managing secure sharing of online advertising data
EP3183685A1 (en) * 2014-08-20 2017-06-28 Intel Corporation Encrypted code execution
US9967319B2 (en) * 2014-10-07 2018-05-08 Microsoft Technology Licensing, Llc Security context management in multi-tenant environments
GB2531770A (en) * 2014-10-30 2016-05-04 Ibm Confidential Extracting System Internal Data
US9418246B2 (en) * 2014-12-15 2016-08-16 Freescale Semiconductor, Inc. Decryption systems and related methods for on-the-fly decryption within integrated circuits
US9729319B2 (en) * 2014-12-15 2017-08-08 Nxp Usa, Inc. Key management for on-the-fly hardware decryption within integrated circuits
JP2016181836A (ja) * 2015-03-24 2016-10-13 キヤノン株式会社 情報処理装置、暗号装置、情報処理装置の制御方法、およびプログラム
US10311229B1 (en) * 2015-05-18 2019-06-04 Amazon Technologies, Inc. Mitigating timing side-channel attacks by obscuring alternatives in code
US10868665B1 (en) * 2015-05-18 2020-12-15 Amazon Technologies, Inc. Mitigating timing side-channel attacks by obscuring accesses to sensitive data
CN105530088A (zh) * 2015-09-01 2016-04-27 北京中电华大电子设计有限责任公司 一种安全的java卡密钥存储方法
US10297003B2 (en) * 2015-09-21 2019-05-21 Qualcomm Incorporated Efficient saving and restoring of context information for context switches
US9449189B1 (en) * 2015-11-03 2016-09-20 International Business Machines Corporation Protection of state data in computer system code
US10210040B2 (en) 2016-01-28 2019-02-19 Nxp Usa, Inc. Multi-dimensional parity checker (MDPC) systems and related methods for external memories
JP6629999B2 (ja) * 2016-04-12 2020-01-15 ガードノックス・サイバー・テクノロジーズ・リミテッドGuardKnox Cyber Technologies Ltd. セキュアロックダウンを実装するように構成された関連装置を有する特別にプログラムされたコンピューティングシステムおよびその使用方法
KR101855905B1 (ko) * 2016-07-15 2018-06-19 주식회사 마크애니 영상 반출 처리 서버, 영상 반출 웹 서버 및 영상 반출 관리 시스템, 및 암호화 영상에 대한 무결성 검증 방법
DE102016009439A1 (de) * 2016-08-03 2018-02-08 Giesecke+Devrient Mobile Security Gmbh Individuelles Verschlüsseln von Steuerbefehlen
CN107066331B (zh) * 2016-12-20 2021-05-18 华为技术有限公司 一种基于TrustZone的资源分配方法及设备
DE102017212618B3 (de) * 2017-07-21 2018-12-13 Bundesdruckerei Gmbh Hardwaresystem mit Blockchain
FR3069935A1 (fr) * 2017-08-01 2019-02-08 Maxim Integrated Products, Inc. Dispositifs et procedes de protection de propriete intellectuelle de logiciel pour des plates-formes integrees
KR20190075363A (ko) * 2017-12-21 2019-07-01 삼성전자주식회사 반도체 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 모듈
GB2572579B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Speculative side-channel hint instruction
US11113424B2 (en) 2019-05-07 2021-09-07 Motorola Solutions, Inc. Device, system and method for installing encrypted data
JP7249968B2 (ja) * 2020-03-09 2023-03-31 株式会社東芝 情報処理装置およびストレージ
US11502832B2 (en) 2020-06-04 2022-11-15 PUFsecurity Corporation Electronic device capable of protecting confidential data
KR102512342B1 (ko) * 2021-02-23 2023-03-22 엘아이지넥스원 주식회사 캐시 메모리에 비밀키를 저장하여 암복호화를 처리하는 점검 대상 점검 방법 및 그를 위한 장치
US20220414270A1 (en) * 2021-06-24 2022-12-29 International Business Machines Corporation Encrypted data processing design including cleartext register files
US11868275B2 (en) 2021-06-24 2024-01-09 International Business Machines Corporation Encrypted data processing design including local buffers

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4168396A (en) 1977-10-31 1979-09-18 Best Robert M Microprocessor for executing enciphered programs
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
US4847902A (en) 1984-02-10 1989-07-11 Prime Computer, Inc. Digital computer system for executing encrypted programs
GB2163577B (en) * 1984-08-23 1988-01-13 Nat Res Dev Software protection device
US4757533A (en) * 1985-09-11 1988-07-12 Computer Security Corporation Security system for microcomputers
US5123045A (en) 1989-08-18 1992-06-16 Massachusetts Institute Of Technology Comprehensive software protection system
JPH0770629B2 (ja) 1990-03-20 1995-07-31 株式会社東芝 不揮発性半導体記憶装置の製造方法
JPH0520197A (ja) 1991-07-09 1993-01-29 Hitachi Ltd 記憶管理システム及びマイクロプロセツサ
US5224166A (en) 1992-08-11 1993-06-29 International Business Machines Corporation System for seamless processing of encrypted and non-encrypted data and instructions
US5495411A (en) 1993-12-22 1996-02-27 Ananda; Mohan Secure software rental system using continuous asynchronous password verification
US5666411A (en) 1994-01-13 1997-09-09 Mccarty; Johnnie C. System for computer software protection
US6473860B1 (en) * 1994-04-07 2002-10-29 Hark C. Chan Information distribution and processing system
US5805706A (en) 1996-04-17 1998-09-08 Intel Corporation Apparatus and method for re-encrypting data without unsecured exposure of its non-encrypted format
US5701343A (en) 1994-12-01 1997-12-23 Nippon Telegraph & Telephone Corporation Method and system for digital information protection
CN100501754C (zh) * 1995-02-13 2009-06-17 英特特拉斯特技术公司 用于安全交易管理和电子权利保护的系统和方法
US6246767B1 (en) * 1995-04-03 2001-06-12 Scientific-Atlanta, Inc. Source authentication of download information in a conditional access system
JPH08305558A (ja) 1995-04-27 1996-11-22 Casio Comput Co Ltd 暗号化プログラム演算装置
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
US5894516A (en) 1996-07-10 1999-04-13 Ncr Corporation Broadcast software distribution
US5825878A (en) 1996-09-20 1998-10-20 Vlsi Technology, Inc. Secure memory management unit for microprocessor
JP2980576B2 (ja) 1997-09-12 1999-11-22 株式会社東芝 物理乱数発生装置及び方法並びに物理乱数記録媒体
US6429879B1 (en) * 1997-09-30 2002-08-06 Compaq Computer Corporation Customization schemes for content presentation in a device with converged functionality
US6003117A (en) 1997-10-08 1999-12-14 Vlsi Technology, Inc. Secure memory management unit which utilizes a system processor to perform page swapping
US6237137B1 (en) 1997-10-15 2001-05-22 Dell Usa, L.P. Method and system for preventing unauthorized access to a computer program
US6330549B1 (en) * 1997-10-30 2001-12-11 Xerox Corporation Protected shareware
JPH11282667A (ja) 1998-03-31 1999-10-15 Nakamichi Corp 多重鍵方式の暗号処理機能を有するマイクロプロセッサ
JP3713141B2 (ja) * 1998-05-19 2005-11-02 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの不正実行防止方法
US6385727B1 (en) * 1998-09-25 2002-05-07 Hughes Electronics Corporation Apparatus for providing a secure processing environment
AU743775B2 (en) 1998-09-25 2002-02-07 Hughes Electronics Corporation An apparatus for providing a secure processing environment
US6567915B1 (en) * 1998-10-23 2003-05-20 Microsoft Corporation Integrated circuit card with identity authentication table and authorization tables defining access rights based on Boolean expressions of authenticated identities
US6836847B1 (en) * 1999-03-05 2004-12-28 The Johns Hokins University Software protection for single and multiple microprocessor systems
US6691226B1 (en) * 1999-03-16 2004-02-10 Western Digital Ventures, Inc. Computer system with disk drive having private key validation means for enabling features
US6651171B1 (en) * 1999-04-06 2003-11-18 Microsoft Corporation Secure execution of program code
US6468160B2 (en) * 1999-04-08 2002-10-22 Nintendo Of America, Inc. Security system for video game system with hard disk drive and internet access capability
AU5910800A (en) * 1999-06-30 2001-01-31 Accenture Llp A system, method and article of manufacture for tracking software sale transactions of an internet-based retailer for reporting to a software publisher
US7270193B2 (en) 2000-02-14 2007-09-18 Kabushiki Kaisha Toshiba Method and system for distributing programs using tamper resistant processor
JP4153653B2 (ja) 2000-10-31 2008-09-24 株式会社東芝 マイクロプロセッサおよびデータ保護方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030075018A (ko) * 2002-03-15 2003-09-22 주식회사 셈틀로미디어 변조 방지용 소프트웨어 파일 생성 장치와 그 소프트웨어파일의 자가 무결성 검증 방법 및 클라이언트-서버환경에서의 소프트웨어 파일의 자가 무결성 검증 방법
KR101405915B1 (ko) 2007-04-26 2014-06-12 삼성전자주식회사 데이터의 암호화 저장 방법 및 암호화된 데이터의 판독방법
US9418327B1 (en) 2016-01-29 2016-08-16 International Business Machines Corporation Security key system

Also Published As

Publication number Publication date
KR20010082632A (ko) 2001-08-30
US6983374B2 (en) 2006-01-03
EP1126356A2 (en) 2001-08-22
CN1309351A (zh) 2001-08-22
US20050166069A1 (en) 2005-07-28
CN1220121C (zh) 2005-09-21
US20010018736A1 (en) 2001-08-30
EP1126356B1 (en) 2008-09-10
US7270193B2 (en) 2007-09-18
US7353404B2 (en) 2008-04-01
EP1126355A1 (en) 2001-08-22
EP1126356A3 (en) 2003-01-08
KR100362219B1 (ko) 2002-11-23
KR20010082631A (ko) 2001-08-30
CN1189819C (zh) 2005-02-16
DE60135695D1 (de) 2008-10-23
US20010014157A1 (en) 2001-08-16
CN1309355A (zh) 2001-08-22

Similar Documents

Publication Publication Date Title
KR100375158B1 (ko) 변조방지 마이크로프로세서
JP4226760B2 (ja) マイクロプロセッサ、これを用いたマルチタスク実行方法、およびマルチレッド実行方法
US7673152B2 (en) Microprocessor with program and data protection function under multi-task environment
Lie et al. Implementing an untrusted operating system on trusted hardware
JP4989543B2 (ja) メモリドメインを基にしたデータ処理システム内のセキュリティ制御
KR100491991B1 (ko) 내부 메모리형 내탬퍼 프로세서 및 비밀보호방법
JP4074057B2 (ja) 耐タンパプロセッサにおける暗号化データ領域のプロセス間共有方法
KR100550593B1 (ko) 마이크로프로세서
US7721114B2 (en) Method for using shared library in tamper resistant microprocessor
JP4226816B2 (ja) マイクロプロセッサ
JP4498735B2 (ja) オペレーティングシステムおよびカスタマイズされた制御プログラムとインタフェースする安全なマシンプラットフォーム
US7111285B2 (en) Method and system for protecting software applications against static and dynamic software piracy techniques
JP3880933B2 (ja) 耐タンパマイクロプロセッサ及びキャッシュメモリ搭載プロセッサによるデータアクセス制御方法
JP3801833B2 (ja) マイクロプロセッサ
US9756048B2 (en) System and methods for executing encrypted managed programs
US20080060072A1 (en) Information processing system, information processing method, information processing program, computer readable medium and computer data signal
US7603566B2 (en) Authenticated process switching on a microprocessor
JP4643702B2 (ja) マイクロプロセッサ
JP4375980B2 (ja) マルチタスク実行システム及びマルチタスク実行方法
JP2004272594A (ja) データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム
Platte A security architecture for microprocessors

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120130

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20130201

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee