KR19980081644A - 정보처리장치, 방법 및 기록매체 - Google Patents

정보처리장치, 방법 및 기록매체 Download PDF

Info

Publication number
KR19980081644A
KR19980081644A KR1019980014447A KR19980014447A KR19980081644A KR 19980081644 A KR19980081644 A KR 19980081644A KR 1019980014447 A KR1019980014447 A KR 1019980014447A KR 19980014447 A KR19980014447 A KR 19980014447A KR 19980081644 A KR19980081644 A KR 19980081644A
Authority
KR
South Korea
Prior art keywords
program
key
signature
public key
encrypted
Prior art date
Application number
KR1019980014447A
Other languages
English (en)
Inventor
다께우찌아끼까즈
난바신지
Original Assignee
이데이노브유끼
소니가부시끼가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 이데이노브유끼, 소니가부시끼가이샤 filed Critical 이데이노브유끼
Publication of KR19980081644A publication Critical patent/KR19980081644A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • 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/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • G06F21/126Interacting with the operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/007Encryption, En-/decode, En-/decipher, En-/decypher, Scramble, (De-)compress
    • G06F2211/008Public Key, Asymmetric Key, Asymmetric Encryption
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2115Third party

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

프로그램 실행환경에서, 비밀키-A를 사용하여 암호화된 응용 프로그램이 복호부(82)에 공급되고, 공개키-B, 공개키-B에 대응하는 비밀키-B를 사용하여 암호화된 암호화 공개키-A(비밀키-A에 대응하는)가 복호부(84)에 공급된다. 복호부(84)는 공개키-B를 사용하여 암호화 공개키-A를 복호하고 그 결과의 공개키-A를 복호부(82)에 공급한다. 복호부(82)는 복호부(84)에서 공급된 공개키를 사용하여 암호화된 응용프로그램을 복호하고 복호결과로서의 Java바이트코드를 Java가상기계(83)에 공급한다. Java가상기계(83)는 복호부(82)에서 공급된 Java바이트코드를 해석하여 실행한다. 그 결과, 정당한 소프트웨어 개발자에 의해 개발된 프로그램만이 어떤 프로그램 실행환경에서 실행될 수 있도록 하는 것이 가능하게 된다.

Description

정보처리장치, 방법 및 기록매체
본 발명은 정보처리장치, 방법 및 기록매체에 관한 것이다. 특히, 본 발명은 정당한 프로그램개발자에 의해 개발된 프로그램만이 특정 프로그램 실행환경에서 실행되도록 하는 정보처리장치, 방법 및 기록매체에 관한 것이다.
최근 급속히 퍼지고 있는 인터넷에 적합하기 때문에, Java(미국의 Sun Microsystem사의 상표)는 많은 관심을 끌고 있다. Java라는 말은 오브젝트지향언어인 Java언어, Java언어로 쓰여진 프로그램(이하 Java프로그램이라고 적의 칭한다)의 실행에 적합한 프로세서 아키텍쳐를 정의하는 가상기계(이하 Java가상기계로 적의 칭한다), Java에 관계된 다른 요소의 각각을 의미하거나 또는 그들의 총칭적인 말로서 사용된다.
가상기계라는 말은 단일의 컴퓨터가 다수의 컴퓨터가 있는 것처럼 가상적으로 행할 수 있도록 사용되는 가상기계라기보다는 언어처리시스템을 설치하는데 가정되는 가상기계를 의미한다.
컴퓨터에 설치된 OS(operating system)상에서 동작하도록 Java가상기계는 실제(현실)의 컴퓨터상에 설치된다. 한편, Java프로그램은 Java가상기계의 명령세트로 구성된 2진코드로 컴파일된다. 2진코드는 Java가상기계가 동작할 수 있는 어떤 하드웨어에 의해 실행될 수 있다. 그러므로, 컴파일된 Java프로그램은 Java가상기계가 동작하는 한 여러 가지 플랫폼에서 실행될 수 있다.
Java가상기계가 설치되면 어느 기계상에서 Java프로그램이 실행될 수 있다는 사실 및 다른 근거에 의거하여, Java가상기계는 많은 사용자에게 확산될 수 있고 많은 응용프로그램이 개발되어 많은 사용자에게 배포(유료이든지 무료이든지에 상관없이)될 수 있다.
상기 환경하에서, Java가상기계와 같은 프로그램실행환경을 개발하고 배포하는 자가 제 3자에 의해 개발되어 이러한 프로그램 실행환경에서 실행되는 응용프로그램의 배포를 제한하기를 원하는 예를 들면, 전자가 계약을 체결한 자에게만 응용프로그램의 배포를 허가하기를 원하는 경우가 발생한다.
한편, Java가상기계에서, Java컴파일러로 Java프로그램을 컴파일하여 얻어진 바이트코드(Java코드)로 불려지는 중간코드가 해석되고 실행된다. Java바이트코드는 그들을 컴파일하여 비교적 쉽게 이해될 수 있고, 리버스 엔지니어링이 쉽게 실행되도록 한다. 그러므로, 제 3자에 의한 모방 및 변형을 방지하는 것이 필요하다.
도 1은 프로그램실행시스템의 제 1기능적 구성예를 나타내는 블록도이다.
도 2는 프로그램실행시스템의 제 5기능적 구성예를 나타내는 블록도이다.
도 3은 소프트웨어 개발자 서버(31)의 처리를 나타내는 플로우챠트이다.
도 4는 프로그램실행시스템의 제 3기능적 구성예를 나타내는 블록도이다.
도 5는 소프트웨어 개발자 서버(31)의 처리를 나타내는 플로우챠트이다.
도 6은 컴퓨터(1)의 자원과 컴퓨터에 장착된 Java가상기계(11)의 자원과의 상관을 나타낸다.
도 7은 Java가상기계(11)의 처리를 나타낸다.
도 8 및 도 9a, 9b는 Java가상기계(11)의 처리를 나타낸다.
도 10은 본 발명에 따른 프로그램 제공시스템의 실시의 구성예를 나타내는 블록도이다.
도 11은 도 10에 나타낸 소프트웨어 개발자 서버(31)의 구성예를 나타내는 블록도이다.
도 12는 도 10에 나타낸 프로그램 인증기관 서버(32)의 구성예를 나타내는 블록도이다.
도 13은 도 10에 나타낸 사용자단말(33)의 구성예를 나타내는 블록도이다.
도 14는 암호화/복호화 시스템의 구성예를 나타내는 블록도이다.
도 15는 디지털서명을 사용하여 암호화/복호화 시스템의 구성예를 나타내는 블록도이다.
도 16은 소프트웨어 개발자 서버(31)의 처리를 나타내는 플로우챠트이다.
도 17은 프로그램 인증기관 서버(32)의 처리를 나타내는 플로우챠트이다.
도 18은 프로그램 실행시스템의 제 2기능적 구성예를 나타내는 블록도이다.
도 19는 프로그램 인증기관 서버(32)의 처리를 나타내는 플로우챠트이다.
도 20은 로더의 기능적 구성예를 나타내는 블록도이다.
도 21은 프로그램 실행시스템의 제 4기능적 구성예를 나타내는 블록도이다.
도 22는 소프트웨어 개발자 서버(31)의 구성예를 나타내는 블록도이다.
* 도면의 주요부분에 대한 부호설명
1. 컴퓨터 2. 중앙연산처리장치
3. 레지스터 4. 메모리
11. Java가상기계 13. 레지스터
14. 메모리 21. Java가상기계
31. 소프트웨어 개발자 서버 32. 프로그램 인증기관 서버
33. 사용자단말 34. 네트워크
35. 기록매체 41. CPU
42. ROM 43. RAM
44. 입력부 45. 출력부
46. 보조기억장치 47. 통신제어부
51. CPU 52. ROM
53. RAM 54. 입력부
55. 출력부 56. 보조기억장치
57. 통신제어부 61. CPU
62. ROM 63. RAM
64. 입력부 65. 출력부
66. 보조기억장치 67. 통신제어부
71. 암호화부 72. 복호부
81. 입력부 82. 복호부
83. Java가상기계 84. 복호부
91. 다이제스트작성기 92. 암호화기
93. 복호화기 94. 다이제스트작성기
95. 서명확인기 101. 입력부
102. 메시지 다이제스트 시스템 103. 서명확인부
104. 가상기계입력제어부 111. 입력부
112. 메시지 다이제스트 시스템 113. 서명확인부
114. 실행시스템 121,122. 암호화기
131,132. 복호부
본 발명의 제 1구성에 따르는 정보처리장치는 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하는 제 1키복호화수단과 제 1키복호화수단에 의해 복호화하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하는 프로그램복호화수단과, 프로그램 복호화수단에서 출력된 프로그램을 실행하는 실행수단을 포함한다.
본 발명의 제 2구성에 따르는 정보처리방법은 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하고, 복호화를 통하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하고, 복호화하여 얻은 프로그램을 실행하는 단계를 포함한다.
본 발명의 제 3구성에 따르는 기록매체는 컴퓨터가 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하고, 복호화를 통하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하고, 복호화하여 얻은 프로그램을 실행하도록 하는 프로그램이 기록되어 있는 기록매체이다.
본 발명의 제 4구성에 따르는 정보처리장치는 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 프로그램을 암호화하는 암호화수단을 포함한다.
본 발명의 제 5구성에 따르는 정보처리방법은 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 프로그램을 암호화하는 단계를 포함한다.
본 발명의 제 6구성에 따르는 기록매체는 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 암호화되는 프로그램이 기록되는 기록매체이다.
본 발명의 제 7구성에 따르는 정보처리장치는 프로그램을 실행하는 실행수단과, 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하는 키복호화수단과, 키복호화수단에 의한 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하는 확인수단과, 확인수단에 의해 정당한 것으로 확인되고 서명이 부가되고 있는 프로그램을 실행수단에 공급하는 공급수단을 포함한다.
본 발명의 제 8구성에 따르는 정보처리방법은 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하고, 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하고, 정당한 것으로 확인될때에만 프로그램을 실행하는 단계를 포함한다.
본 발명의 제 9구성에 따르는 기록매체는 컴퓨터가 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하고, 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하고, 정당한 것으로 확인될때에만 프로그램을 실행하도록 하는 프로그램이 기록되어 있는 기록매체이다.
본 발명의 제 10구성에 따르는 정보처리장치는 본 발명의 제 7구성에 따르는 정보처리장치에서 서명이 정당한 것으로 확인되도록 프로그램을 처리하는 처리수단을 포함한다.
본 발명의 제 11구성에 따르는 정보처리방법은 본 발명의 제 7구성에 따르는 정보처리장치에서 서명이 정당한 것으로 확인되도록 프로그램을 처리하는 단계를 포함한다.
본 발명의 제 12구성에 따르는 기록매체는 본 발명의 제 7구성에 따르는 정보처리장치에서 서명이 정당한 것으로 확인되도록 처리되는 프로그램이 기록되어 있다.
본 발명의 제 1구성에 따르는 정보처리장치에서, 제 1키복호화수단은 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하고, 프로그램복호화수단은 제 1키복호화수단에 의해 복호화하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화한다. 실행수단은 프로그램 복호화수단에서 출력된 프로그램을 실행한다.
본 발명의 제 2구성에 따르는 정보처리방법에서, 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전이 제 2키를 사용하여 복호화되고, 복호화를 통하여 얻은 제 1키를 사용하여 프로그램의 암호화버전이 복호화되고, 복호화하여 얻은 프로그램이 실행된다.
본 발명의 제 3구성에 따르는 기록매체상에, 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하고, 복호화를 통하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하고, 복호화하여 얻은 프로그램을 컴퓨터가 실행하도록 하는 프로그램이 기록된다.
본 발명의 제 4구성에 따르는 정보처리장치에서, 암호화수단은 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 프로그램을 암호화한다.
본 발명의 제 5구성에 따르는 정보처리방법에서 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 프로그램이 암호화된다.
본 발명의 제 6구성에 따르는 기록매체에서, 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 암호화되는 프로그램이 기록된다.
본 발명의 제 7구성에 따르는 정보처리장치에서, 키복호화수단은 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하고, 확인수단은 키복호화수단에 의한 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인한다. 공급수단은 확인수단에 의해 정당한 것으로 확인되고 서명이 부가되고 있는 프로그램을 실행수단에 공급한다.
본 발명의 제 8구성에 따르는 정보처리방법에서, 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼이 제 2키를 사용하여 복호화되고, 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하고, 정당한 것으로 확인될때에만 프로그램이 실행된다.
본 발명의 제 9구성에 따르는 기록매체에서, 컴퓨터가 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하고, 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하고, 정당한 것으로 확인될때에만 프로그램을 실행하도록 하는 프로그램이 기록되어 있다.
본 발명의 제 10구성에 따르는 정보처리장치에서, 처리수단은 본 발명의 제 7구성에 따르는 정보처리장치에서 서명이 정당한 것으로 확인되도록 프로그램을 처리한다.
본 발명의 제 11구성에 따르는 정보처리방법에서, 본 발명의 제 7구성에 따르는 정보처리장치에서 서명이 정당한 것으로 확인되도록 프로그램이 처리된다.
본 발명의 제 12구성에 따르는 기록매체에서, 본 발명의 제 7구성에 따르는 정보처리장치에서 서명이 정당한 것으로 확인되도록 처리되는 프로그램이 기록되어 있다.
본 발명의 실시예에 대하여 아래에 설명한다. 그전에, 청구항에서 서술된 본 발명의 각각의 수단과 다음의 실시예의 성분사이의 관계를 명확히 하기 위하여, 각각의 수단은 괄호내에 대응하는 실시예의 성분(단지 일예임)이 뒤에 오는 것과 같은 방법으로 본 발명의 특징을 아래에 기술한다.
본 발명의 제 1구성에 따르는 정보처리장치는 프로그램을 실행하기 위한 처리를 행하는 정보처리장치이며, 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하는 제 1키복호화수단(예를 들면, 도 1에 나타낸 복호부(84)와 도 2에 나타낸 복호부(131))와, 제 1키복호화수단에 의해 복호화하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하는 프로그램복호화수단(예를 들면, 도 1에 나타낸 복호부(82)와 도 2에 나타낸 복호부(132))과, 프로그램 복호화수단에서 출력된 프로그램을 실행하는 실행수단(예를 들면, 도 1 및 2에 나타낸 Java 가상기계(83))을 포함한다.
상기 정보처리장치는 제 2키가 암호화된 경우에 제 2키의 암호화버젼을 제 3키를 사용하여 복호화하는 제 2키복호화수단(예를 들면, 도 2에 나타낸 복호부(84))을 더 포함한다.
본 발명의 제 4구성에 따르는 정보처리장치는 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 프로그램을 암호화하는 암호화수단(예를 들면, 도 3에 나타낸 프로그램 처리단계(S7)을 실행하는 도 11에 나타낸 CPU(41))을 포함한다.
본 발명의 제 7구성에 따르는 정보처리장치는 프로그램을 실행하는 정보처리장치이며, 프로그램을 실행하는 실행수단(예를 들면, 도 4에 나타낸 Java 가상기계(83))과, 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하는 키복호화수단(예를 들면, 도 4에 나타낸 복호부(84))과, 키복호화수단에 의한 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하는 확인수단(예를 들면, 도 4에 나타낸 서명확인부(103))과, 확인수단에 의해 정당한 것으로 확인되고 서명이 부가되고 있는 프로그램을 실행수단에 공급하는 공급수단(예를 들면, 도 4에 나타낸 가상기계입력제어부(104))을 포함한다.
본 발명의 제 10구성에 따르는 정보처리장치는 프로그램을 실행하는 정보처리장치이며, 본 발명의 제 7구성에 따르는 정보처리장치에서, 서명이 정당한 것으로 확인되도록 프로그램을 처리하는 처리수단(예를 들면, 도 16에서 나타낸 프로그램처리단계(S22, S23)를 실행하는 도 11에 나타낸 CPU(41))을 포함한다.
물론, 위의 기재는 각 수단이 뒤따르는 구성요소에 한정되는 것을 의미하는 것은 아니다.
다음의 실시예는 본 발명이 Java 가상기계에 적용되는 경우에 관한 것이지만, 본 발명은 Java 가상기계와 같은 가상기계에 더하여 실제의 기계 자체에도 적용될 수 있다.
Java는 예를 들면 Nikkei Business Publication사에서 발행된 Nikkei Electronics 1996. 3. 25(no. 658) 및 1996. 6. 17(no. 664)에 상세히 서술되어 있고, 여기서 간단히 설명한다.
Java 가상기계는 추상화된 실행기계이고, 실제의 컴퓨터에 의해 실행되는 실제의 프로그램이다. 실제의 컴퓨터와 같이, Java 가상기계는 프로그램 카운터, 스택레지스터, 범용레지스터, 스택 또는 힙으로서의 메모리 및 다른 자원을 가지고, 이들 자원은 실제의 컴퓨터의 자원에 매핑된다.
실제의 컴퓨터(1)가 중앙처리장치(2), 중앙처리장치(2)에 내장되는 레지스터(3), 메모리(4), 도 6에 나타낸 것같은 다른 자원을 가진다. Java 가상기계(11)가 컴퓨터(1)에 설치될때, 실제의 컴퓨터(1)의 자원은 Java 가상기계(11)에 매핑된다. 도 6에 나타낸 실시예에서, Java 가상기계(11)는 레지스터(13), 메모리(14) 및 다른 자원을 가진다. 레지스터(13)는 레지스터(3)에 매핑되고 메모리(14)의 어드레스(200)는 메모리(4)의 어드레스(100)에 매핑된다.
실제의 컴퓨터(1)에서, 중앙처리장치(2)에 대한 명령이 그 자원상의 조작으로서 실행된다. 유사하게, Java 가상기계(11)에서, 그 자원상에 조작으로서 실행되는 명령이 정의된다. Java언어는 Java 가상기계(11)에 명령을 기술하는 언어이다. Java 가상기계(11)에서, Java컴파일러로 Java언어로 기술된 소스프로그램이 컴파일하여 얻어진 Java바이트코드는 해석되고 실행된다.
즉, 도 7에 나타낸 것같이, Java언어로 기술된 소스프로그램인 Java언어프로그램이 Java컴파일러(21)에 의해 Java바이트코드로 컴파일된다. Java바이트코드는 Java가상기계(11)에 입력되고, 실제의 컴퓨터(1)(중앙처리부(2))에 의해 해석될 수 있는 기계어코드로 변환된다. 특히, 예를 들면 도 8에 나타내는 것같이, Java바이트코드로 기술되고 숫자 125를 레지스터13에 설정이라는 것을 의미하는 move #125, register 13의 명령(Java바이트코드명령)이 Java가상기계(11)에 입력되고, Java가상기계(11)는 이것을 기계어코드로 기술된 move #125, register 3의 명령(기계어명령)으로 변환한다.
컴퓨터(1에서, 수치125는 기계어코드로 쓰여진 명령의 실행결과로서 도 9a에 나타낸 것같이 컴퓨터(1)의 레지스터(3)에 설정된다.
상기 서술한 것같이, Java가상기계(11)의 레지스터(13)는 컴퓨터(1)의 레지스터(3)에 매핑된다. 그러므로, 컴퓨터(1)의 레지스터(3)에서 설정수치 125는 도 9b에 나타내는 것같이 Java가상기계로부터 볼 때 레지스터(13)에서 설정수치125를 의미한다.
상기와 같은 방법으로, Java가상기계에 입력된 Java바이트코드는 컴퓨터(1)에 대한 기계어코드로 변환되고 Java가상기계(11)의 자원으로 매핑된 컴퓨터(1)의 자원상에 조작된 것으로서 실행된다. Java가상기계(11)에서 볼 때, 상기 조작은 Java가상기계(11)의 자원상의 조작에 대응하고, 앞의 조작의 실행은 Java바이트코드명령의 실행을 의미한다.
그러므로, 상기 서술한 것같이, 실제의 컴퓨터상에서 Java가상기계를 조작함으로써, 컴파일된 Java프로그램은 CPU(cental processing unit) 및 컴퓨터에서 사용되는 OS에 상관없이 실행될 수 있다.
Java바이트코드를 기계어코드로 변환하여 후자를 실행하는 기술의 예는 기계어코드로 명령을 번역하고 기계어코드를 실행하는 것이 Basic언어 프로그램을 실행하는 경우처럼 하나씩 실행되는 번역형식이다. 다른 예는 명령을 기계어코드로 번역하고 기계어코드의 실행이 전체적으로 실행되는 JIT(just in time) 컴파일러 형식이다.
Basic언어 프로그램을 실행하는데 사용되는 인터프리터형식은 Java 바이트 코드를 번역하는데 사용되는 것과 후자의 방식에서 중간코드(Java 바이트 코드)가 번역되는 반면 전자의 방식에서 소스코드가 번역되는 점에서 다르다. 그러나, 이들 2개 방식은 이 실시예에서 분류되지 않는다(그렇게 하는 것이 필요하지 않다)
도 10은 본 발명에 따른 프로그램 제공시스템(시스템이라는 말은 논리적으로 서로 상관있는 다수의 장치의 집합을 의미하고, 장치가 단일 샤시에 물리적으로 장착되었는지 아닌지에 무관하다)의 일 실시의 구성예를 나타낸다.
이 프로그램 제공시스템에서, 소프트웨어 개발자는 프로그램 인증기관에 의해 인증되지 않은 응용프로그램을 배포할 때, 사용자의 사용자단말(33)상에 응용프로그램의 실행이 제한된다.
예를 들면, 소프트웨어 개발자가 프로그램 인증기관 또는 프로그램 인증기관에 프로그램의 인증을 의뢰한 자에 의해 개발된 프로그램 실행환경으로서 Java가상기계상에서 동작하는 응용프로그램을 개발하거자 그 배포를 원할때, 소프트웨어 개발자는 프로그램 인증기관과 이러한 효과를 이루기위해 라이슨스 계약을 한다. 라이슨스계약이 이루어지면, 프로그램 인증기관은 인증으로서 소프트웨어개발자에게 응용프로그램의 암호화 또는 그것에 서명을 더하는 것에 사용하는 키를 전달한다.
특히, 이 실시예에서, 응용프로그램의 암호화 또는 그것에 서명을 더하는 것은 RSA방식(MIT의 3명의 연구자에 의해 고안되고; RSA는 이들 이름의 첫글자에서 나온 것이다)에 의해 대표되는 공개키 암호화방식에 따라서 실행된다. 이 경우에서, 공개키 암호화방식에 따르는 암호화에 사용되는 비밀키-A와 비밀키-A를 사용하는 암호화의 결과를 디코드하기 위해 사용되는 공개키-A의 한 세트는 소프트웨어 개발자에게 전달된다.
소프트웨어 개발자의 소프트웨어 개발자 서버(31)와 프로그램 인증기관의 프로그램 인증기관 서버(32)는 인터넷, 공중회선, CATV 네트워크, 지상파 네트워크, 위성네트워크 등의 네트워크(34)를 통하여 서로 통신할 수 있다. 비밀키-A 및 공개키-A는 예를 들면 네트워크(34)를 통하여 전달된다.
비밀키-A 및 공개키-A는 프로그램 인증기관에 의해 준비된다기 보다는 소프트웨어 개발자 자체에 의해 준비되고 계약이 체결된 소프트웨어 개발자에게 전달된다.
비밀키-A 및 공개키-A가 주어진 후, 소프트웨어 개발자는 공개키-A를 소프트웨어 개발자 서버(31)로부터 프로그램 인증기관 서버(32)로 예를 들면 네트워크(34)를 통하여 전달한다.
소프트웨어 개발자 서버(31)에서 공개키-A를 수신하면, 프로그램 인증기관 서버(32)는 이것을 암호화하여 암호화된 공개키-A(이후 적의 암호화 공개키라고 한다) 를 소프트웨어 개발자 서버(31)에 네트워크를 통하여 전달한다.
프로그램 인증기관 서버(32)에서, 공개키-A는 공개키 암호화방식에 따라서 암호화된다. 즉, 프로그램 인증기관 서버(32)에서, 암호화에 사용되는 비밀키-B와 비밀키-B를 사용하여 암호화의 결과를 복호하기 위해 사용되는 공개키-B의 한 세트가 준비되고 공개키-A는 비밀키-B를 이용하여 암호화된다.
한편, 소프트웨어 개발자 서버(31)에서, 프로그램 인증기관 서버(32)에서 송신된 암호화 공개키-A는 수신되고 응용프로그램의 암호화 또는 이것에 서명을 부가하는 것이 비밀키-A를 사용하여 실행된다. 암호화되거나 서명이 가해지는 응용프로그램은 암호화된 공개키-A와 상관있도록 기억된다.
사용자단말(33)로부터 네트워크(34)를 통하여 응용프로그램의 요구를 받으면, 예를 들면 소프트웨어 개발자 서버(31)는 응용프로그램(상기 서술한 것같이 암호화되거나 서명이 부가된)을 사용자단말(33)에 네트워크(34)를 통하여 대응하는 암호화 공개키-A와 함께 송신한다.
프로그램 인증기관 또는 프로그램 인증기관에 프로그램을 인증하도록 요구하는 자에 의해 개발되는 프로그램 실행환경으로서 Java가상기계는 다음에 설명하는 것같이 사용자단말에 설치된다. 프로그램 인증기관(32)은 프로그램 인증기관에 의해 설치되고 있는 Java가상기계를 포함하는 Java프로그램 실행환경으로서 프로그램 실행시스템(즉, 컴퓨터(사용자단말(33))가 프로그램 실행환경으로서 동작하도록 하는 프로그램)을 저장한다. 사용자단말을 조작하여 프로그램 실행시스템을 보내도록 사용자가 프로그램 인증기관 서버(32)에 요구할 때, 프로그램 인증기관 서버(32)는 예를 들면 프로그램 실행시스템을 네트워크(34)를 통하여 사용자단말에 보낸다. 이러한 방법으로, 프로그램 인증기관에 의해 설치된 프로그램 실행시스템이 사용자단말(33)에 설치된다.
프로그램 인증기관 서버(32)는 프로그램 실행시스템과 함께 공개키-B를 사용자단말에 보낸다. 수신된 공개키-B는 사용자단말(33)에 저장된다.
사용자단말(33)에서 프로그램 실행시스템이 설치되는 Java가상기계와 같이, 소프트웨어 개발자 서버(31)에서 송신되는 응용프로그램은 프로그램 인증기관에 의해 인증될때에만 정상으로 실행된다.
즉, 사용자단말(33)에서, 소프트웨어 개발자 서버(31)에서 송신된 암호화 공개키-A는 프로그램 인증기관 서버(32)에서 송신된 공개키-B를 사용하여 공개키-A로 복호화된다. 더욱이, 사용자단말(33)에서, 소프트웨어 개발자 서버(31)에서 송신된 암호화 응용프로그램은 이렇게 얻어진 공개키-A를 사용하여 복호된다. 복호된 응용프로그램은 Java가상기계에서 실행된다. 또는 소프트웨어 개발자 서버(31)에서 송신되는 응용프로그램에 더해진 서명의 정당성이 공개키-A를 사용하여 확인된다. 서명의 정당성이 확인될 때에만 Java가상기계상에서 응용프로그램이 실행된다.
그러므로, 공개키-B를 사용하여 복호되는 키가 암호화된 공개키-A즉, 정당한 것이 아니면, 공개키-A는 복호결과로서 얻어질수 없다. 이러한 복호결과를 사용하여 응용프로그램이 복호되어도, Java가상기계상에 정상으로 처리되고 있는 응용프로그램이 얻어질수 없다; 즉, Java가상기계는 정확하게 동작할 수 없다.
유사하게, 공개키-A가 아닌 키를 사용하여 서명이 확인될 때, 서명의 정당성은 부정된다. 응용프로그램은 Java가상기계에서 또한 실행될 수 없다.
상기 서술한 것같이, 소프트웨어 개발자 서버(31)에서 송신되는 응용프로그램이 프로그램 인증기관에 의해 인증되지 않는 경우, Java가상기계와 같이 사용자단말(33)에서 (적어도 정상으로)실행될 수 없다.
그 결과, 프로그램 실행환경으로서 Java가상기계를 개발하고 배포한 자가 제 3자에 의해 개발되고 Java가상기계상에서 실행되고 있는 응용프로그램의 인가받지 않은 배포를 제한할 수 있다. 예를 들면, 전자는 응용프로그램의 배포를 오직 계약이 체결된 소프트웨어 개발자에게만 허가할 수 있다.
상기 예에서, 공개키-A, 비밀키-A, 암호화된 공개키-A를 얻은 후, 소프트웨어 개발자는 사용자단말(33)에서 설치된 Java가상기계상에서 실행될 수 있는 응용프로그램을 자유롭게 배포할 수 있다. 그러므로, 각각의 새롭게 개발된 응용프로그램을 프로그램 인증기관 서버(32)에 송신하는 번거로운 일을 필요로 하지 않고 인증되게 한다.
그러나, 프로그램 인증기관이 소프트웨어 개발자에 의해 공개키-A, 비밀키-A, 암호화 공개키-A의 사용을 여러 프로그램에 제한하기를 원하는 경우가 발생한다. 이것은 예를 들면, 공개키-A를 암호화하기 위해 사용되는 비밀키-B를 프로그램 인증기관이 변경함으로써 이루어 질수 있다(이 경우, 프로그램 인증기관은 새로운 비밀키에 대응하는 공개키를 사용자에게 배포할 필요가 있다). 또한, 상기 목적은 상기와 같이 변경하지 않고 다음과 같은 방법으로 달성될 수 있다. 프로그램 인증기관이 각각의 소프트웨어 개발자에게 독특한 공개키-A 및 비밀키 -A를 할당하면, 암호화된 공개키 또는 서명을 참조하여 특정한 응용프로그램을 배포하는 소프트웨어 개발자를 식별할 수 있다. 예를 들면, 프로그램 인증기관은 응용프로그램을 라이슨스 계약에 기술된 수를 초과하는 수를 배포한 소프트웨어 개발자를 쉽게 식별할 수 있고 공개키-A와 비밀키-A 및 암호화된 공개키-A의 사용이 상기 수의 프로그램에 제한되는 효과를 준다.
예를 들면, CD(compact disc)-ROM 또는 자기디스크와 같은 기록매체(35)상에 기록하고 메일로 보내거나 카운터에서 판매함으로써 사용자에게 응용프로그램을 배포할 수 있다. 이러한 경우라도, 상기 서술한 예에서와같이, 응용프로그램이 프로그램 인증기관에 의해 인증되지 않으면 이러한 응용프로그램은 Java가상기계와같은 사용자단말(33)에서 실행될 수 없다.
상기 예에서 데이터(공개키-A와 비밀키-A 및 암호화된 공개키-A)가 소프트웨어 개발자와 프로그램 인증기관사이에서 네트워크(34)를 통하여 교환되어도, 예를 들면 데이터가 기록되는 기록매체(도시생략)를 메일로 보냄으로써 데이터교환이 또한 행해진다.
유사하게, 프로그램 인증기관은 예를 들면 CD-ROM 또는 자기디스크와 같은 기록매체(36)상에 기록하고 메일로 보내거나 카운터에서 판매함으로써 사용자에게 프로그램 실행시스템 및 공개키-B를 공급할 수 있다.
또한, 도 10의 실시예에서 소프트웨어 개발자, 프로그램 인증기관 서버(32) 및 사용자단말(33)이 각각 하나씩 설치되어 있어도 각각 복수로 제공될 수 있다.
도 11은 도 10에 나타낸 소프트웨어 개발자 서버(31)의 구성예를 나타낸다.
CPU(41)는 보조기억장치(46)에 저장(기록)되어 있는 오퍼레이팅 시스템의 제어하에서 보조기억장치(46)에 저장된 프로그램을 실행함으로써 여러 가지 종류의 처리를 실행한다. ROM(read-only memory)(42)는 IPL(initial program loading) 프로그램 및 다른 프로그램을 저장한다. RAM(random access memory)(43)는 CPU(41)에 의해 실행되는 프로그램 및 CPU(41)의 동작에 필요한 데이터를 저장한다. 예를 들면 키보드 또는 마우스인 입력부(44)는 소망의 커맨드 또는 데이터 등을 입력함으로써 조작된다. 예를 들면 디스플레이장치 또는 프린터인 출력부는 필요한 정보를 디스플레이하거나 또는 프린트한다. 예를 들면 하드디스크인 보조기억장치(46)는 CPU(41)의 실행결과 및 다른 필요한 데이터 뿐만 아니라 오퍼레이팅 시스템 및 CPU(41)에 의해 실행되는 다른 프로그램을 저장한다. 통신제어부(47)는 네트워크(34)를 거쳐서 실행되는 통신을 제어한다.
도 12는 도 10에 나타낸 프로그램 인증기관 서버(32)의 구성예를 나타내고 도 13은 도 10에 나타낸 사용자단말(33)의 구성에를 나타낸다.
프로그램 인증기관 서버(32)는 CPU(51)내지 통신제어부(57)로 구성되고 사용자단말은 CPU(61) 내지 통신제어부(67)로 구성된다. 상기 구성요소는 도 11의 CPU(41) 내지 통신제어부(47)와 동일한 방법으로 구성되므로, 그 설명은 생략한다.
다음, 공개키-A 또는 응용프로그램의 암호화/복호화의 하나의 방법으로서 상기 공개키 암호화방식에 따르는 암호화/복호화를 설명한다.
도 14는 공개키 암호화방식에 따르는 암호화/복호화 시스템의 구성예를 나타낸다.
암호화의 대상으로서 평문이 암호화기(70)에 입력된다. 암호화기(70)는 비밀키라고 불려지고 각각의 사람에게 독특한 암호화키를 사용하여 평문을 암호문으로 암호화한다.
한편, 암호화기(71)에 의해 발생된 암호문이 복호화기(72)에 입력된다. 복호화기(72)는 암호문을 원래의 평문으로 공개키로 불려지는 복호화키를 사용하여 복호화하여 일반에게 공개한다.
암호화기(71)처럼, 소프트웨어 개발자 서버(31)는 비밀키-A를 사용하여 응용프로그램으로서 Java바이트코드를 암호화한다. 또한, 암호화기(71)와 같이 프로그램 인증기관 서버(32)는 소프트웨어 개발자 서버(31)로부터 송신된 공개키-A를 비밀키-B를 사용하여 암호화한다.
한편, 복호화기(72)와 같이, 사용자단말(33)은 공개키-B를 사용하여 암호화 공개키-A를 복호화하고 그렇게 복호화된 공개키-A를 사용하여 암호화된 응용프로그램을 또한 복호화한다.
암호화/복호화방법은 공개키 암호화방식에만 한정되는 것이 아니라, DES(data encryption standard)방식(IBM사에 의해 개발되고, 미국정부의 표준으로서 실제로 사용되고 있는)에 의해 대표되는 공통키 암호화방식이외의 방식이 또한 사용될 수 있다. 공통키 암호화방식에서, 당사자이외의 어떤 자에게도 공개되지 않은 공통키를 사용하여 암호화/복호화가 실행된다. 공개키 암호화방식에서, 암호에 대한 비밀키는 복호에 대한 공개키와 다르다(역으로, 공개키 및 비밀키는 각각 암호화 및 복호화에 대하여 사용될 수 있다). 대조적으로, 공통키 암호화방식에서, 동일, 공통키가 암호화 및 복호화 모두에 사용될 수 있다. 그러므로, 당사자 이외의 자로부터 공통키가 비밀을 유지하는 것이 필요하다.
다음, 응용프로그램에 서명(디지털 서명)을 가하는 하나의 방법으로서 공개키 암호화방식에 따르는 서명부가방법을 서술한다.
도 15는 서명을 작성/확인하는 공개키 암호화방식에 따르는 암호화/복호화 시스템의 구성예를 나타낸다.
암호화의 서브젝트로서 평문이 다이제스트 작성기(91)에 입력되고, MD5(MD : MessageDigest) 또는 SHA-1 (SHA : secure hash algorithm)과 같은 알고리듬에 따르는 수신된 평문의 다이제스트를 작성한다. 메시지 다이제스트 클래스는 SHA-1 또는 MD5와 같은 암호화 보호 메시지 다이제스트의 기능성을 제공하도록 설계된 엔진클래스이다. 암호화 보호 메시지 다이제스트는 임의의 크기의 입력(바이트 어레이)을 취하여, 다이제스트라고 불리우는 고정된 크기의 출력을 작성한다. 다이제스트는 다음의 성질을 가진다. 동일한 다이제스트를 작성할 수 있는 다른 입력문자열을 발견하기 위해 계산적으로 실행불가능해야 한다. 다이제스트는 이것을 작성하기 위해 사용되고 있는 입력에 대하여 어느 것도 폭로할 수 없다. 메시지 다이제스트는 데이터의 독특하고 신뢰할만한 식별자를 작성하기 위해 사용된다. 그들은 때때로 데이터의 디지털지문이라고 불려진다.
다이제스트는 평문의 기계적 축약문에 상당하고 다른 다이제스트는 입력으로서 다른 평문에 대하여 작성된다. 다이제스트는 예를 들면 해싱기능을 사용하여 평문을 변환하여 작성된다.
그런데, 어느 한정된 숫자적 범위(레코드수 또는 배열의 접미사에 상당하는)에 데이터베이스를 탐색하기 위해 사용된 키워드가 취해질수 있는 범위의 세트를 매핑하는 방법이 해싱으로 불려진다. 이 매핑의 변형기능이 해싱기능이다.
다이제스트 작성기(91)에 의해 작성된 다이제스트는 암호화기(92)에 공급된다. 암호화기(92)는 예를 들면 도 14에 나타낸 암호화기(71)와 같이 비밀키를 사용하여 다이제스트를 암호화하고 디지털 서명으로서 암호화된 다이제스트를 출력한다. 디지털 서명은 원래의 평문에 부가되고 그 결과의 서명 부가된 평문이 출력된다.
한편, 서명부가된 평문의 일부로서 디지털서명이 복호화기(93)에 입력되고 나머지 부분으로서 문은 다이제스트 작성기(94)에 입력된다. 복호화기(93)는 디지털 서명을 예를 들면 도 14에 나타낸 복호화기(72)와 같이 공개키를 사용하여 다이제스트로 복호한다. 이렇게 얻어진 다이제스트는 서명확인기(95)에 공급된다.
다이제스트 작성기(91)와 같이, 다이제스트 작성기(94)는 수신된 평문의 다이제스트를 작성하고 이것을 서명확인기(95)에 공급한다.
서명확인기(95)는 서명(디지털구조)의 정당성을 판단한다, 즉, 서명을 확인한다. 특히, 서명확인기(95)는 복호화기(93)이 출력인 다이제스트가 다이제스트 작성기(94)의 출력인 다이제스트와 일치하는지 아닌지를 확인한다. 2개의 다이제스트가 서로 일치하지 않으면, 서명의 정당성은 평문이 왜곡되거나 복호화기(93)에서 사용된 공개키가 정확하지 않은 판단으로 부정된다.
한편, 복호화기(93)의 출력인 다이제스트가 다이제스트 작성기(94)의 출력인 다이제스트와 일치하면, 서명의 정당성은 평문이 왜곡되지 않거나 복호화기(93)에서 사용된 공개키가 정확한 판단으로 확인된다.
서명확인기(95)는 서명부가 평문을 구성하는 평문이 또한 공급된다. 서명확인기(95)는 서명의 정당성이 확인될 때 평문을 출력한다.
응용프로그램의 서명이 소프트웨어 개발자(31)에서 응용프로그램에 더해지는 경우, 서명(디지털서명)은 응용프로그램의 다이제스트를 작성함으로써 작성되고 상기 서술한 방법으로 비밀키-A를 사용하여 다이제스트를 암호화한다. 한편, 사용자단말(33)에서, 서명은 공개키-A를 사용하여 다이제스트로 디코드되고 다이제스트는 응용프로그램에서 작성된다. 서명의 정당성은 2개의 다이제스트가 서로 일치하는지를 판단하여 체크된다.
서명은 그것을 부가하는 자(이 예에서는 소프트웨어 개발자)를 식별하기 위한 역할을 한다. 서명이 더해진 응용프로그램의 소스가 그 서명으로부터 쉽게 결정될 수 있다. 예를 들면, 응용프로그램이 버그 등을 가지는 경우, 버그를 가지는 이러한 응용프로그램을 배포하는 소프트웨어 개발자는 쉽게 발견될 수 있다.
또한, 서명이 더해진 응용 프로그램이 왜곡되거나 컴퓨터 바이러스라고 불려지는 것에 의해 감염되면, 응용프로그램에서 작성된 다이제스트가 서명을 디코딩하여 얻어진 다이제스트와 일치하지 않으므로 서명의 정당성이 부정된다. 그러므로, 왜곡되거나 바이러스에 의해 감염된 응용프로그램이 사용자단말(33)에서 실행되는 것이 방지된다.
서명을 작성하기 위해 사용된 비밀키-A는 제 3자(이 예에서, 소프트웨어 개발자 및 프로그램 인증기관 이외의 것)로부터 비밀이 유지되어야 하고 응용프로그램을 번역하고자 할지라도 제 3자가 서명작성방법을 발견하는 것이 어렵다.
서명작성/체크방법은 상기의 공개키암호화방식을 사용하는 것에 한정되는 것은 아니다.
다음, 소프트웨어 개발자 서버(31), 프로그램 인증기관 서버(32) 및 비밀키-A를 사용하는 암호화를 통하여 응용프로그램의 인증이 실행되는 경우에서 사용자 단말(33)에 의해 실행되는 처리에 대하여 서술한다.
먼저, 소프트웨어 개발자 서버(31)의 처리를 도 3 및 도 16의 플로우챠트를 참조하여 서술한다.
소프트웨어 개발자는 프로그램 인증기관과 라이슨스 계약을 맺고, 예를 들면, 프로그램 인증기관에 그것을 발행하기를 요구함으로써 공개키-A, 비밀키-A를 얻는다. 소프트웨어 개발자 서버(31)에서, 먼저, 도 16에 나타낸 단계(S1)에서, 통신제어부(47)는 공개키-A를 네트워크를 통하여 프로그램 인증기관 서버(32)에 송신하여 프로그램 인증기관에 의해 인증되게 한다. 그러면 처리는 단계(S2)로 가고, CPU(41)인증된 공개키-A로서 암호화 공개키-A가 가 프로그램 인증기관 서버(32)에서 송신되었는지 아닌지를 판단한다. 인증된 공개키-A가 아직 송신되지 않은 것으로 판단되면 처리는 단계(S2)로 되돌아간다.
단계(S2)에서 인증된 공개키-A가 수신된 것으로 판단되면, 처리는 단계(S3)로 가고, 통신제어부(47)는 암호화 공개키-A를 받는다. 그러면 처리는 단계(S4)로 가고, 통신제어부(47)에 의해 수신된 암호화 공개키-A는 보조기억장치로 전송되어 거기에 저장된다. 그러면 처리는 종료된다.
그 다음, 소프트웨어 개발자는 Java가상기계에서 실행되는 응용프로그램을 개발하고 예를 들면 보조기억장치(46)에 저장(기록)된다. 소프트웨어 개발자 서버(31)에서, 도 3에 나타낸 단계(S6)에서, CPU(41)는 보조기억장치(46)에 저장된 응용프로그램을 Java컴파일러 프로그램에 따른 Java바이트코드로 컴파일한다. Java바이트코드는 또한 보조기억장치(46)에 공급되어 거기에 저장된다.
그러면 처리는 단계(S7)으로 가고, CPU(41)는 예를 들면 예도 14와 관련하여 상기 서술된 방법으로 비밀키-A를 사용하여 단계(S6)에서 컴파일에 의해 얻어진 Java바이트코드를 암호화하여 암호화바이트코드를 작성한다. 단계(S8)에서, 암호화바이트코드는 보조기억장치(46)에 저장되어 암호화 공개키-A와 상관되게 한다. 그러면 처리는 종료한다.
다음, 프로그램 인증기관 서버(32)의 처리를 도 17의 플로우챠트를 참조하여 서술한다.
예를 들면, 프로그램 인증기관은 프로그램실행환경으로서 Java가상기계를 개발하는 자이거나 파티 대신에 행동하도록 요구되는 기구이다. 예를 들면, 프로그램 인증기관 서버(32)는 인증된 파티의 응용프로그램의 인증으로서 공개키-A를 인증하는 인증처리를 실행한다.
특히, 다음과 같은 방법으로 실행된다. 먼저, 단계(S11)에서, 프로그램 인증기관 서버(32)의 CPU(51)는 예를 들면 네트워크를 통하여 소프트웨어 개발자 서버(31)로부터 인증의 대상으로서 공개키-A가 송신되었는지 아닌지를 판단한다. 공개키-A가 송신되지 않았다고 판단되면, 처리는 단계(S11)로 복귀한다. 공개키-A가 송신되었다고 단계(S11)에서 판단되면, 처리는 단계(S12)로 가고, CPU(51)는 수신된 공개키-A가 계약이 체결된 즉, 통상, 소프트웨어 개발자로부터의 것인지를 판단한다.
프로그램인증기관이 소프트웨어 개발자와 소프트웨어 개발자가 예를 들면 Java가상기계상에서 실행되는 응용프로그램을 개발하고 배포할 수 있게 허가하는 라이슨스 계약을 체결할 때, 소프트웨어 개발자에게 예를 들면 ID와 패스워드를 발행한다. 계약 체결시에 발행된 ID 및 패스워드는 인증의 서브젝트로서 공개키와 함께 계약이 체결된 즉, 정규의 소프트웨어 개발자에게 전달된다. 단계(S12)에서, 공개키-A가 통상의 소프트웨어 개발자로부터의 것인지 아닌지의 판단이 이들 ID와 패스워드에 의거하여 만들어진다.
단계(S12)에서 공개키-A가 통상의 소프트웨어 개발자로부터의 것이 아니라고 판단되면, 즉, 공개키-A가 라이슨스 계약이 이루어지지 않은 소프트웨어 개발자로부터 송신될 때, 처리는 단계(S13)으로 가고, 통신제어부(57)는 소프트웨어 개발자에게 메시지를 송신하여 라이슨스계약이 만들어지지 않으면 공개키-A가 인증될 수 없는 효과를 준다.
한편, 공개키-A가 통상의 소프트웨어 개발자로부터 인 것으로 판단되면, 처리는 단계(S14)로 가고, CPU(51)는 수신된 공개키-A를 암호화 공개키-A로 암호화한다. 공개키-A는 이렇게 인증된다.
처리는 단계(S15)로 가고, 통신제어부(57)는 암호화 공개키-A를 공개키-A의 인증결과로서 네트워크(34)를 통하여 공개키-A(이 예에서, 소프트웨어 발자서버(31))를 송신하는 소프트웨어 개발자에 송신한다. 그러면, 처리는 종료한다.
도 1은 사용자단말(33)에서 응용프로그램을 실행하는 프로그램 실행환경으로서 프로그램 실행시스템의 기능적 구성예를 나타낸다.
입력부(81)는 공개키-B뿐만 아니라 암호화 바이트코드(암호화 Java코드)와 암호화 공개키-A를 받아들이고, 복호부(82)에 암호화 바이트코드를 공급하고, 복호부(84)에 암호화 공개키-A 및 공개키-A를 공급한다. 복호부(82)는 도 14의 복호화기(72)로서 동작한다. 특히, 복호부(82)는 복호화기(84)로부터 출력된 공개키-A를 사용하여 입력부(81)에서 원래의 Java 바이트 코드로 공급된 암호화 바이트코드를 복호한다. 복호부(82)로부터 얻어진 Java 바이트 코드는 Java가상기계(83)로 공급된다. Java가상기계(83)는 복호부(82)로부터 공급된 Java 바이트 코드에 의해 정의된 처리를 실행한다. 복호부(82)와 같이, 복호부(84)는 도 14의 복호화기(72)처럼 동작한다. 특히, 복호부(84)는 공개키-A로 입력부(81)로부터 또한 공급된 공개키 -B를 사용하여 입력부(81)에서 공급된 암호화 공개키-A를 복호하고, 그 결과의 공개키-A를 복호부(82)에 공급한다.
상기 구성된 프로그램 실행 시스템에서, 먼저 입력부(81)는 공개키-B뿐만 아니라 암호화 바이트코드 및 암호화 공개키-A를 얻는다. 예를 들면, 암호화 바이트 코드 및 암호화 공개키-A가 미리 소프트웨어 개발자 서버(31)로부터 네트워크를 통하여 전송되고 보조기억장치(66)에 파일로서 저장되는 경우 또는 암호화 바이트 코드 및 암호화 공개키-A가 파일로서 기록되는 기록매체가 사용자단말(33)에 설정되는 경우, 입력부(81)는 이들 파일을 열고 암호화 바이트 코드 및 암호화 공개키-A를 독출한다.
소프트웨어 개발자 서버(31)가 네트워크(34)로서 인터넷에 연결되는 경우를 고려한다. 암호화 바이트 코드 및 암호화 공개키-A가 이러한 소프트웨어 개발자 서버(31)에 있어서 URL(uniform resource locator)과 상관있는 경우, 입력부(64)를 조작함으로써 사용자가 URL을 특정할 때 소프트웨어 개발자 서버(31)로부터 네트워크를 통하여 전송되는 암호화 바이트 코드 및 암호화 공개키-A를 입력부(81)가 수신한다.
소프트웨어 개발자 서버(31)가 지상파에 의해 또는 네크워크(34)로서 위성회선을 통하여 암호화 바이트 코드 및 암호화 공개키-A를 디지털 방송하고 있는 다른 경우를 고려한다. 이 경우에서, 입력부(81)는 방송되고 있는 암호화 바이트 코드 및 암호화 공개키-A를 수신한다.
유사한 방법으로, 입력부(81)는 프로그램 인증기관에서 발행된 공개키-B를 얻는다.
암호화 바이트 코드, 암호화 공개키-A, 암호화 공개키-B중에서, 입력부(81)는 암호화 바이트 코드를 복호부(82)에 공급하고 암호화 공개키-A 및 암호화 공개키-B를 복호부(84)에 공급한다.
복호부(84)는 공개키-A로 입력부(81)로부터 또한 공급된 공개키-B를 사용하여 입력부(81)로부터 공급된 암호화 공개키-A를 복호하고, 이 결과의 공개키-A를 복호부(82)에 공급한다. 복호부(82)는 복호부(82)에서 공급된 공개키-A를 사용하여 입력부(81)에서 공급된 암호화 바이트 코드를 복호화하여 복호결과로서의 Java바이트코드를 Java가상기계(83)에 공급한다. Java가상기계(83)는 복호부(82)에서 공급된 Java바이트코드를 번역하여 실행한다.
상기 서술한 것같이, 복호부(84)는 프로그램 인증기관 서버(32)에서 암호화에 사용된 비밀키-B(와 쌍이 되는)에 대응하는 공개키-B를 이용하여 공개키-A로 암호화 공개키-A를 복호한다. 그러면, 복호부(82)는 복호를 통하여 복호부(84)에 의해 얻어지고 소프트웨어 개발자 서버(31)에서 암호화에 사용된 비밀키-B에 대응하는 공개키-A를 사용하여 암호화 바이트 코드를 복호한다. 복호결과로서의 Java 바이트 코드는 Java가상기계(83)에 입력된다.
그러므로, 공개키-B를 사용하여 복호화되는 키가 프로그램 인증기관에서 발행된 소위 정당한 암호화 공개키-A가 아니면 정당한 공개키-A가 얻어질수 없다(정당한 공개키-A가 우연히 복호부(84)에서 출력되고 있을 확률이 남아있고, 그 확률은 거의 0과 같다). 예를 들면, 이것은 비암호화 공개키-A, 프로그램 인증기관 서버(32)에서 사용된 것과 다른 알고리듬에 따라서 암호화된 암호화키-A, 통상의 경우에 사용되어야 하는 비밀키-B를 사용하지 않고 프로그램 인증기관에서 사용된 것과 동일 알고리듬에 따라서 암호화된 공개키-A의 입력이 작성하는 경우에 대응한다. 그러므로, 암호화된 바이트코드가 이러한 복호화결과를 사용하여 복호화될지라도, Java가상기계(83)에서 정상으로 실행될 수 있는 응용프로그램을 얻을수 없고; Java가상기계(83)는 정확하게 동작하지 않는다. 그 결과, Java 가상기계(83)에서 동작하지만 프로그램 인증기관에 의해 인증되지 않은 Java바이트코드를 Java 가상기계(83)가 설치되어 있는 사용자단말을 가지는 사용자에게 배포하는 것을 제한할 수 있게 된다.
상기와 같은 방법으로, 프로그램 인증기관과 계약을 맺은 소프트웨어 개발자만이 Java 가상기계(83)가 설치되어 있는 사용자단말을 가지는 사용자에게 Java 가상기계(83)에서 동작하는 Java바이트코드를 배포할 수 있도록 할 수 있게 된다.
복호부(82)만이 Java가상기계(83)에 Java바이트코드를 입력할 수 있도록 하는 조치를 취하는 것이 필요하다. 또한, 복호부(82)만이 공개키-A를 복호부(82)에 입력할 수 있도록 하는 조치를 취하는 것이 바람직하다.
어떤 입력을 수신하면, 도 1에 나타낸 각각의 복호부(82, 84)는 입력에 대하여 복호화처리를 실시하고 처리결과를 출력한다. 그러므로,
공개키-B, 비밀키-A를 사용하여 암호화되지 않은 Java바이트코드 또는 비밀키-B를 사용하여 암호화되지 않은 공개키-A이외의 키가 입력되어 이러한 키로 얻어진 복호화결과 또는 Java바이트코드가 Java가상기계(83)에 입력될 때, 통상 Java가상기계(83)는 폭주한다. 이것을 고려하여, 복호부(82)의 출력이 정당(정상)의 Java바이트코드인지 아닌지가 확인되고, 복호부(83)의 출력이 정당한 Java코드일 때, Java가상기계(83)가 Java바이트코드를 해석하고 실행하는 과정이 가능하다. 예를 들면, Java바이트코드의 헤드에 위치하는 32바이트의 데이터가 magic이라고 불리우는 통상의 값(16진수로 CAFEBEBE)을 가질 때 복호부(82)의 출력이 정당한 Java바이트코드라는 판단으로 Java가상기계(83)는 해석되고 Java가상기계를 실행할 수 있다. 그래서, Java가상기계(83)가 폭주하는 것이 방지된다.
그런데, Java가상기계(83)상에서 응용프로그램의 실행을 제한하는 관점에서는 도 1의 복호부(82, 84)의 복호화 알고리듬이나 공개키-A, B가 계약을 하고 있는 자 이외의 자에게 알려져도 암호화 알고리듬이나 암호화에 사용되는 비밀키-A, B가 알려져 있지 않으면 아무런 문제도 없다. 즉 암호문의 복호화방법이 알려져도 정상으로 실행가능한 Java바이트코드를 Java가상기계(83)에 공급하기 위하여 복호부(82)에 주어지는 암호화 바이트코드의 작성방법이나 복호부(84)에 주어지는 암호화 공개키-A의 작성방법이 알려지지 않으면 Java가상기계(83)상에서 응용프로그램을 실행하는 것이 제한될 수 있다. 그러나, 암호문의 복호화방법을 알고 있으면, 암호화 바이트 코드에서 원래의 Java바이트코드를 얻을수 있다. 그것을 역컴파일하여 Java바이트코드의 내용이 비교적 쉽게 이해될 수 있으므로, 리버스 엔지니어링(reverse engineering)을 쉽게 할 수 있다.
이러한 리버스 엔지니어링을 방지하기 위하여, 암호문의 복호화방법은 비밀이 유지될 수 있다. 예를 들면, 암호화 바이트코드를 복호화하기 위해 사용되는 공개키-A를 암호화하여 얻어진 암호화 공개키-A를 복호화하기 위해 사용되는 공개키-B는 항상 공개되지만, 비밀이 유지될 수 있다. 도 18은 공개키-B가 비밀이 유지되는 프로그램 실행시스템의 구성예를 나타낸다. 도 1에서 대응하는 구성요소를 가지는 도 18의 구성요소에는 동일의 도면부호가 붙여지고 그 설명은 적의 생략한다.
이 실시예에서, 예를 들면 공개키-B가 단일 위치에 위치하거나 Java가상기계(83)를 포함하는 프로그램실행시스템을 구성하는 프로그램의 다수의 위치에 분산되어 있다. 복호부(84)는 이러한 공개키-B를 사용하여 암호문을 복호한다. 그러므로, 이 경우에서, 공개키-B는 프로그램 실행시스템에서 누출되지 않고 암호문이 불법으로 복호되고 리버스 엔지니어링이 실행되는 것이 방지될 수 있다(또는 리버스 엔지니어링의 발생확률이 감소될 수 있다).
다음, 응용프로그램의 인증이 비밀키-A를 사용하여 작성된 서명의 부가를 통하여 실행되는 경우의 소프트웨어 개발자(31) 및 사용자단말(33)에 의해 실행되는 처리에 대하여 설명한다. 이 경우, 프로그램 인증기관 서버(32)는 응용프로그램이 암호화되는 상기 서술한 경우에서 실행되는 처리와 유사한 처리를 실행하므로, 그 설명은 생략한다.
먼저, 소프트웨어 개발자 서버(31)의 처리에 대하여 도 5의 플로우챠트를 참조하여 설명한다. 도 16의 플로우챠트와 관련하여 상기 서술한 처리는 소프트웨어 개발자 서버(31)에서 이미 실행되는 반면, 프로그램 인증기관 서버로부터 암호화 공개키-A가 얻어진 것으로 가정한다. Java가상기계상에서 실행되는 응용프로그램은 개발되어 보조기억장치(46)에 저장되는 것으로 또한 가정한다.
소프트웨어 개발자 서버(31)에서, 도 3의 단계(S6)의 경우처럼, CPU(41)는 보조기억장치(46)에 저장되어 있는 응용프로그램을 Java컴파일러 프로그램(단계(S21))에 따르는 Java바이트코드로 컴파일한다. Java바이트코드는 또한 보조기억장치(46)에 공급되어 거기에 저장된다.
그러면, 처리는 단계(S22)로 이하에 순차 진행하고, 단계(S21)에서 컴파일에 의해 얻어진 Java바이트코드가 정당한 것으로 인증하는 서명(디지털 서명)이 Java바이트코드에 부가된다.
특히, 단계(S22)에서, CPU(44)는 예를 들면 도 15의 다이제스트 작성기(91)가 한 것과 동일한 방법으로 Java바이트코드의 다이제스트를 작성한다. 그러면 처리는 단계(S23)으로 진행하고, CPU(41)는 비밀키-A를 사용하여 암호화하고, 도 15의 암호화기(92)가 한것과 동일한 방법으로 단계(S22)에서 작성된 다이제스트를 암호화하는 반면, 디지털 서명이 작성한다. 그러면, 처리는 단계(S24)로 진행하고, 디지털 서명이 Java바이트코드에 부가된다.(이 경우 디지털 서명이 부가된 Java바이트코드는 이하 서명부가 바이트 코드라고 적의 부른다) 단계(S24)에서, 서명부가 바이트코드는 보조기억장치(46)에 저장되어 암호화 공개키-A와 서로 상관이 있다. 그러면 처리는 종료한다.
도 4는 응용프로그램의 정당성을 확인하고 사용자 단말(33)에서 정당한 것만 실행하는 프로그램 실행환경으로서 프로그램 실행시스템의 기능적 구성예를 나타낸다. 도 1에 대응하는 구성요소를 가지는 도 4의 구성요소는 이하에서 동일 도면부호를 사용하여 주어지고 그 설명은 적의 생략한다.
입력부(101)는 도 1의 입력부(81)와 동일한 방법으로 기본적으로 입력을 받아들인다. 입력부(101)는 후자와 암호화바이트코드 대신에 서명부가 바이트코드(서명(디지털 서명)이 부가된 Java바이트코드)를 수신하는 점에서 다르다. 입력부(101)는 서명부가 바이트코드를 서명과 Java바이트 코드로 분리하여 그것을 출력한다. 이 서명은 서명확인부(103)에 공급되고 Java바이트코드는 메시지 다이제스트 시스템(102) 및 가상기계입력제어부(104) 에 공급된다.
메시지 다이제스트 시스템(102)는 도 15의 다이제스트 작성기(94)에서 실행되는 처리와 유사한 처리를 실행한다. 즉, 메시지 다이제스트 시스템(102)은 Java바이트코드에서 다이제스트를 작성하고 이것을 서명확인부(103)에 공급한다. 서명확인부(103)는 도 15의 복호화기(93) 및 서명확인기(95)에 상당하고, 입력부(101)에서 공급된 서명의 정당성을 확인한다.
특히, 서명확인부(103)는 입력부(101)에서의 서명 및 메시지다이제스트 시스템(102)에서의 다이제스트뿐만 아니라 복호부(84)에서의 공개키-A를 수신한다. 서명확인부(103)는 수신된 공개키-A를 사용하여 서명을 다이제스트로 복호하고, 이렇게 얻어진 다이제스트와 메시지 다이제스트 시스템(102)에서 공급된 다이제스트를 비교하여 서명의 정당성을 확인한다. 또한, 서명확인부(103)는 확인결과에 따라서 가상기계입력제어부(104)를 제어한다.
가상기계입력제어부(104)는 서명확인부(103)의 제어하에서 입력부(101)에서 공급된 Java바이트코드의 Java가상기계(83)로의 공급을 제어한다.
상기 구성된 프로그램 실행시스템에서, 먼저, 입력부(101)는 도 1의 입력부(81)와 동일한 방법으로 공개키-B뿐만 아니라 서명부가 바이트 코드 및 암호화 공개키-A를 얻는다. 그러면, 입력부(101)는 서명부가 바이트코드을 서명 및 Java바이트코드로 분리하고, 이 서명을 서명확인부(103)에 공급하고 Java바이트코드를 메시지 다이제스트 시스템(102) 및 가상기계 입력제어부(104)에 공급한다. 또한, 입력부(101)는 암호화 공개키-A 및 공개키-B를 복호부(84)에 공급한다. 도 1와 관련하여 상기 서술한 것같이, 복호부(84)는 암호화 공개키-A를 공개키-A로 공개키-B를 사용하여 복호하고 얻어진 공개키-A를 서명확인부(103)에 공급한다.
한편, 메시지 다이제스트 시스템(102)는 입력부(101)에서 공급된 Java바이트코드로부터 다이제스트를 작성하고 이 다이제스트를 서명확인부(103)에 공급한다. 서명확인부(103)는 입력부(101)에서 공급된 서명을 다이제스트로 복호부(84)에서 공급된 공개키-A를 사용하여 복호한다. 또한, 서명확인부(103)는 복호하여 얻어진 다이제스트와 메시지 다이제스트 시스템(102)에서 공급된 다이제스트를 비교하고 2개의 다이제스트가 서로 일치하는지 아닌지에 기초하여 입력부(101)에서 공급된 서명의 정당성을 판단한다.
서명의 정당성이 확인되면, 즉, 서명을 복호하여 얻어진 다이제스트가 메시지 다이제스트 시스템(102)에서 공급된 다이제스트와 일치하면, 서명확인부(103)는 입력부(101)에서 공급된 Java바이트코드가 Java가상기계(83)의 출력이 되도록 가상기계 입력제어부(104)를 제어한다. 가상기계입력제어부(104)는 서명확인부(103)의 제어하에서 입력부(101)에서 공급된 Java바이트코드를 Java가상기계(83)에 공급한다.
그러므로, 이 경우에서, Java가상기계(83)는 가상기계입력제어부(104)를 거쳐서 입력부(101)에서 공급된 Java바이트코드를 해석하고 실행한다.
한편, 서명의 정당성이 확인되지 않으면, 즉, 서명을 복호하여 얻어진 다이제스트가 메시지 다이제스트 시스템(102)에서 공급된 다이제스트와 일치하지 않으면, 서명확인부(103)는 입력부(101)에서 공급된 Java바이트코드가 Java가상기계(83)의 출력이 되지 않도록 가상기계 입력제어부(104)를 제어한다.
이 경우, 가상기계입력제어부(104)는 입력부(101)에서 공급된 Java바이트코드를 Java가상기계(83)에 출력하지 않는다. 그러므로, Java가상기계(83)는 어떠한 동작도 실행하지 않는다.
상기 서술한 것같이, 응용프로그램을 인증하기 위해 서명이 부가되는 경우에서도 또한, Java가상기계(83)가 설치되는 사용자 단말(33)을 가지는 사용자에게 Java가상기계(83)에서 실행되지만 프로그램 인증기관에 의해 인증되지 않은 Java바이트코드의 배포를 제한할 수 있게 된다. 즉, 프로그램 인증기관과 계약을을 맺은 소프트웨어 개발자만이 Java가상기계(83)가 설치되는 사용자 단말(33)을 가지는 사용자에게 Java가상기계(83)에서 실행되는 Java바이트코드를 배포할 수 있도록 하는 것이 가능하게 된다. Java가상기계(83)의 개발자는 Java가상기계(83)에서 실행되는 Java바이트코드를 배포하기를 원하는 소프트웨어 개발자로부터 Java가상기계(83)의 사용에 대하여 라이슨스요금을 받을수 있다.
상기 서술한 것같이, 서명을 부가하는 경우에도, 예를 들면 서명부가된 Java바이트코드의 왜곡된 버전의 Java가상기계(83)상에서의 실행을 제한하는 것이 또한 가능하게 된다.
도 4의 실시예에서, 가상기계 입력제어부(104)만이 Java바이트코드를 Java가상기계(83)에 입력하도록 하는 조치를 취하는 것이 필요하다. 또한, 복호부(84)만이 공개키-A를 서명확인부(103)에 입력하도록 하는 조치를 취하는 것이 필요하다.
Java바이트코드가 암호화되는 경우와 다르게 서명이 Java바이트코드에 부가되는 경우에서 Java바이트코드 자체가 존재하는 것에 유의한다. 그러므로, 서명의 정당성을 확인하지 않는 프로그램 실행시스템에서(예를 들면, 입력부(101)의 출력으로서 Java바이트코드가 Java가상기계(83)에 직접 입력되는 프로그램 실행시스템에서), Java바이트코드는 어떠한 제한없이 해석되고 실행된다.
역으로, Java바이트 코드에 서명이 부가되는 경우, Java가상기계의 개발자 및 판매자, 사용자단말에 설치된 것으로 Java가상기계를 판매하는 판매자등은 도 4에 나타낸 것같이 프로그램 실행시스템을 구성할 수 있다. Java바이트코드의 실행을 제한하기를 원하지 않는 자는 서명이 정당성이 확인되지 않는 프로그램 실행시스템을 구성할 수 있다.
도 10의 실시예에서, 프로그램 인증기관은 소프트웨어(즉, 사용자단말이 프로그램 실행시스템으로서 기능하도록 하는 프로그램)로서 프로그램 실행시스템을 사용자에게 사용자단말(33)에 그래도 설치될 수 있는 방법으로 제공한다. 이 프로그램 실행시스템은 소프트웨어 개발자에 의해 제공되는 응용프로그램과 같이 암호화되거나 거기에 서명이 부가되는 방법으로 제공될 수 있다.
예를 들면, 프로그램 인증기관이 사용자에게 서명이 부가된 프로그램 실행시스템을 제공하면, 프로그램 인증기관 서버는 도 19의 플로우챠트에 따르는 처리를 실행한다.
이 경우, 프로그램 인증기관 서버(32)는 먼저, 단계(S31)에서, 프로그램 실행시스템으로서 프로그램을 사용자단말(33)의 CPU(61)에 의해 실행될 수 있는 코드(이하, 적의 실행코드라 칭한다)로 컴파일한다. 단계(S32)에서, CPU(51)는 예를 들면 도 15와 관련하여 서술된 방법으로 단계(S31)에서 컴파일에 의해 얻어진 실행코드로부터 다이제스트를 작성한다. 그러면 처리는 단계(S33)으로 가고, 예를 들면 공개키-A를 암호화하기 위해 사용된 비밀키-B를 사용하여 단계(S32)에서 작성된 다이제스트를 암호화하고 서명(디지털서명)을 작성한다. 단계(S34)에서, 디지털서명이 실행코드에 부가되고(디지털 서명이 부가된 실행코드를 이하 서명부가된 실행코드로 적의 칭한다), 서명부가된 바이트코드는 서명을 작성하기 위해 사용된 비밀키-B와 쌍을 이루는 공개키-B와 상관있도록 보조기억장치(56)에 저장된다.
도 20은 사용자 단말에 서명이 부가된 상기 유형의 프로그램실행시스템(서명부가 실행시스템)을 설치하기위한 로더(프로그램 실행시스템 설치장치)의 기능적 구성예의 일예를 나타낸다.
이 실시예에서, 로더는 입력부(111), 메시지 다이제스트 시스템(112), 서명확인부(113) 및 실행시스템(114)로 구성된다. 입력부(111), 메시지 다이제스트 시스템(112), 서명확인부(113)는 도 4의 입력부(101), 메시지 다이제스트 시스템(102), 서명확인부(103)과 각각 동일한 방법으로 구성된다. 실행시스템(114)은 CPU(61)를 포함하는 사용자단말의 그들 부분에 대응하고 실행코드를 해석하여 실행한다.
상기 구성의 로더에서, 입력부(111)는 서명부가 실행코드 및 공개키-B를 얻는다. 그러면, 입력부(111)는 서명부가 실행코드을 서명 및 실행코드로 분리하고, 이 서명을 서명확인부(113)에 공급하고 실행코드를 메시지 다이제스트 시스템(11) 및 실행시스템(114)에 공급한다. 또한, 입력부(111)는 공개키-B를 서명확인부(113)에 공급한다.
메시지 다이제스트 시스템(112)는 입력부(111)에서 공급된 Java바이트코드로부터 다이제스트를 작성하고 이 작성된 다이제스트를 서명확인부(113)에 공급한다. 서명확인부(113)는 입력부(111)에서 공급된 서명을 다이제스트로 입력부(111)에서 공급된 공개키-B를 사용하여 복호한다. 또한, 서명확인부(113)는 복호하여 얻어진 다이제스트와 메시지 다이제스트 시스템(112)에서 공급된 다이제스트를 비교하고 2개의 다이제스트가 서로 일치하는지 아닌지에 기초하여 입력부(111)에서 공급된 서명의 정당성을 판단한다.
서명의 정당성이 확인되면, 즉, 서명을 복호하여 얻어진 다이제스트가 메시지 다이제스트 시스템(112)에서 공급된 다이제스트와 일치하면, 서명확인부(113)는 입력부(111)에서 공급된 Java바이트코드를 해석하고 실행하도록 실행시스템(114)을 제어한다. 이 경우에서, 실행시스템(114)은 서명확인부(113)의 제어하에서 입력부(111)에서 공급된 실행코드를 해석하고 실행한다.
한편, 서명의 정당성이 확인되지 않으면, 즉, 서명을 복호하여 얻어진 다이제스트가 메시지 다이제스트 시스템(112)에서 공급된 다이제스트와 일치하지 않으면, 서명확인부(113)는 입력부(111)에서 공급된 Java바이트코드가 무시되도록 실행시스템(114)을 제어한다. 이 경우에서, 실행시스템(114)은 서명확인부(113)의 제어하에서 입력부(111)에서 공급된 실행코드를 무시하고 어떠한 처리도 실행하지 않는다.
상기 서술한 것같이, 서명이 프로그램 실행시스템에 부가되는 경우, 변형등이 방지된다.
상기 서술한 것같이, 프로그램 실행시스템상에서 리버스 엔지니어링이 방지될 수 있는 어떠한 경우에서 프로그램 실행시스템은 암호화될 수 있다.
프로그램 실행시스템에 부가된 서명의 정당성이 확인되면, 실행시스템(114)은 상기 서술한 것같이 입력부(111)에서 공급된 실행코드를 해석하고 실행한다. 그 결과, 예를 들면, 도 4의 경우에 설치된 프로그램 실행시스템과 유사한 프로그램 실행시스템이 도 21에 나타낸 것같이 사용자단말(33)에 설치된다. 그러나, 이 경우, 공개키-B는 입력부(101)보다는 도 20의 로더의 입력부(111)에서 복호부(84)에 공급된다.
그런데, 응용프로그램 또는 RSA방식과 같은 공개키 암호화방식에 따르는 프로그램 실행시스템의 프로그램과 같은 비교적 많은 정보량을 가지는 프로그램을 암호화 또는 암호화된 버전을 복호화하기 위해 상당한 양의 시간이 필요하다. 대조적으로, DES방식과 같은 공통키 암호화방식에 따르는 암호화/복호화는 비교적 짧은 시간에 처리될 많은 양의 정보를 가지는 프로그램조차도 할 수 있다. 한편, 공개키는 암호화에 사용되는 비밀키와 다르기 때문에 복호화에 사용되는 공개키가 상기 서술한 것같이 일반에게 공개되는 것으로 간주되어도 RSA방식은 아무런 문제도 발생하지 않는다. 그러나, DES방식에서, 공통키가 암호화 및 복호화에 사용되기 때문에, 당사자 이외의 사람에게 알려지지 않도록 공통키를 엄중히 관리하는 것이 필요하다.
상기를 고려하여, 키관리를 용이하게 할 뿐만 아니라 짧은 시간에 실행될 수 있는 암호화 및 복호화를 가능하게 하는 기술이 사용될 수 있다. 특히, DES방식은 응용프로그램과 같은 비교적 많은 정보량을 가지는 프로그램을 암호화하기 위해 사용되고, DES방식 암호화에 사용되는 공통키가 RSA방식에 따라서 암호화된다(DES방식과 RSA방식이 서로 조합된 암호화기술을 이하 조합방식이라고 칭한다).
도 22는 조합방식에 따라서 암호화가 실행되는 경우에서 소프트웨어 개발자 서버(31)의 기능적 구성예를 나타낸다.
Java컴파일러로 응용프로그램을 컴파일하여 얻어진 Java바이트코드는 암호화기(121)에 입력된다. Java바이트코드에 더하여, 공통키가 암호화기(121)에 입력된다. 암호화기(121)에서, 예를 들면 DES방식에 따르는 공통키를 사용하여 Java바이트코드가 암호화된 바이트코드(암호문)로 암호화된다.
암호화기(121)에 입력되는 공통키는 또한 암호화기(122)에 입력된다. 예를 들면 RSA방식에 따라서 암호화가 실행되는 암호화기(122)는 비밀키-A를 사용하여 공통키를 암호화한다.
이 경우, 소프트웨어 개발자는 사용자에게 한 세트의 암호화 바이트코드, 비밀키-A를 사용하여 암호화된 공통키(이하 암호화된 공통키라고 적의 칭한다), 프로그램 인증기관에서 얻은 암호화된 공개키-A를 배포한다.
도 2는 조합방식에 따라서 응용프로그램의 암호화가 실행되는 경우 사용자단말(33)에서 실행되는 프로그램 실행시스템의 기능적 구성예의 일예를 나타낸다. 도 1의 프로그램 실행시스템에서 대응하는 구성요소를 가지는 도 2에서의 구성요소는 이하 동일 도면부호가 주어지고 그 설명은 적의 생략한다.
복호부(131)는 예를 들면 RSA방식에 따르는 암호화된 공개키를 복호하고, 복호결과로서의 공통키를 복호부(132)에 공급한다. 복호부(1320는 예를 들면 DES방식에 따라서 암호화된 바이트코드를 복호한다.
상기 구성의 프로그램 실행시스템에서, 입력부(81)는 암호화 바이트코드(암호화Java바이트코드), 암호화 공통키, 암호화 공개키-A, 공개키-B를 얻는다. 그러면, 입력부(81)는 암호화 공개키-A, 공개키-B를 복호부(84)에 공급하고 암호화된 공통키를 복호부(131)에 공급하고 암호화 바이트코드를 복호부(132)에 공급한다.
상기 서술한 것같이, 복호부(84)는 암호화 공개키-A를 공개키-B를 사용하여 공개키-A로 복호하고 그 결과의 공개키-A를 복호부(131)에 공급한다. 복호부(131)는 입력부(81)에서 공급된 암호화 공통키를 복호부(84)에서 공급된 공개키-A를 사용하여 복호하고, 그 결과의 공통키를 복호부(132)에 공급한다. 복호부(132)는 입력부(81)로부터 공급된 암호화 바이트코드를 복호부(131)에서 공급된 공통키를 사용하여 Java바이트코드로 복호하고 그 결과의 Java바이트코드를 Java가상기계(83)에 공급한다.
상기 서술한 조합방식은 키관리를 간단하게 하고 암호화 및 복호화의 처리속도를 증가시킬수 있다.
조합방식은 응용프로그램의 암호화의 경우뿐만 아니라 프로그램실행시스템의 프로그램(실행코드)을 암호화하는 경우 및 그외의 경우에도 적용될 수 있다.
본 발명은 상기 서술한 인터프리터형 및 JIT컴파일러 유형의 두개의 Java가상기계뿐만 아니라 Java가상기계이외의 가상기계에도 적용될 수 있다. 본 발명은 프로그램 실행시스템의 입력이 C언어 또는 C++언어의 처리시스템의 경우처럼 기계코드를 통하여 만들어진 경우, Basic어의 처리시스템의 경우에서 처럼 소스코드를 통하여 프로그램 실행시스템의 입력이 만들어진 경우에도 적용될 수 있다.
도 1 및 4의 실시예에서 단일의 프로그램 실행시스템에 제공되었지만, 프로그램 실행시스템은 다수의 사용자단말(33)에 설치될 수 있다. 다음과 같은 예로 실행될 수 있다. 다수의 입력부(81 또는 101)가 제공될 때, 암호문 또는 서명부가 바이트코드는 다수의 경로에서 입력될 수 있다. 다수의 복호부(82 및/또는 84)가 설치될 때, 다수의 복호화 알고리듬에 다라서 복호화될 수 있다. 다수의 Java가상기계(83)가 설치될 때, 다수의 Java바이트코드포맷을 지지할 수 있다. 또한, 다수의 메시지 다이제스트시스템(102)과 다수의 서명확인부(103)가 제공되는 경우, 다수의 기술에 따라서 가해진 다수의 서명을 각각 확인할 수 있다.
상기 실시예에서 암호화 또는 서명작성이 단일 키를 사용하여 실행되었지만, 다수의 키를 사용하여 실행될 수 있다. 예를 들면, 암호화동작은 다수의 키를 사용하여 순차 실행될 수 있고 서명은 키와 같은 수로 작성될 수 있다.
상기 실시예에서, Java바이트코드는 Java Application, Java Applet, Java Benas, Java Class Library와 같은 다수의 형태일 수 있다.
본 발명의 제 1구성에 따르는 정보처리장치와 본 발명의 제 2구성에 따르는 정보처리방법에서, 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전이 제 2키를 사용하여 복호화되고, 복호화하여 얻은 제 1키를 사용하여 프로그램의 암호화버전이 복호화된다. 복호화하여 얻어진 프로그램이 그러면 실행된다. 본 발명의 제 3구성에 따르는 기록매체에서, 컴퓨터가 프로그램의 암호화버전을 복호하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하고, 복호화하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하고, 복호화하여 얻어진 프로그램을 실행하도록 하는 프로그램이 기록된다. 그러므로, 제 1키 및 프로그램이 복호될때에만 프로그램을 실행하는 가능하게 된다.
본 발명의 제 4구성에 따르는 정보처리장치와 본 발명의 제 5구성에 따르는 정보처리방법에서, 프로그램은 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호되는 암호문으로 암호화된다. 본 발명의 제 6구성에 따르는 기록매체에서, 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 코드로 복호되는 암호문으로 암호화된 프로그램이 기록된다. 그러므로, 본 발명의 제 1구성에 따르는 정보처리장치에 의해 실행될 수 있는 암호화프로그램을 제공할 수 있게 된다.
본 발명의 제 7구성에 따르는 정보처리장치와 본 발명의 제 8구성에 따르는 정보처리방법에서, 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼이 제 2키를 사용하여 복호화되고, 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지가 확인된다. 정당한 것으로 확인될때에만 프로그램이 실행된다. 본 발명의 제 9구성에 따르는 기록매체에서, 컴퓨터가 프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼이 제 2키를 사용하여 복호화하고, 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하고, 정당한 것으로 확인될때에만 프로그램을 실행하도록 하는 프로그램이 기록된다. 그러므로, 서명이 프로그램에 기록될때에만 프로그램의 실행을 가능하게 하도록 한다.
본 발명의 제 10구성에 따르는 정보처리장치와 본 발명의 제 11구성에 따르는 정보처리방법에서, 본 발명의 제 7구성에 따르는 정보처리장치에서 서명이 정당한 것으로 확인되도록 프로그램이 처리된다. 본 발명의 제 12구성에 따르는 기록매체에서, 본 발명의 제 7구성에 따르는 정보처리장치에서 서명이 정당한 것으로 확인되도록 처리되는 프로그램이 기록된다. 그러므로, 본 발명의 제 7구성에 따르는 정보처리장치에 의해 실행가능하도록 처리되는 프로그램을 제공할 수 있다.

Claims (15)

  1. 프로그램을 실행하는 처리를 행하는 정보처리장치에 있어서,
    프로그램의 암호화버전을 복호화하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하는 제 1키복호화수단,
    제 1키복호화수단에 의해 복호화하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하는 프로그램복호화수단과,
    프로그램 복호화수단에서 출력된 프로그램을 실행하는 실행수단과
    를 갖춘 것을 특징으로 하는 정보처리장치
  2. 제 1항에 있어서,
    제 2키가 암호화된 경우에 제 2키의 암호화버젼을 제 3키를 사용하여 복호화하는 제 2키복호화수단을 더 포함하는 것을 특징으로 하는 정보처리장치.
  3. 제 2항에 있어서,
    제 1키는 공통키 암호화방식에 따르는 프로그램을 암호화하기 위해 사용되는 공통키이고,
    제 2키는 공통키 암호화방식에 따르는 제 1키를 암호화하기 위해 사용되는 비밀키에 대응하는 공개키이고,
    제 3키는 공통키 암호화방식에 따르는 제 2키를 암호화하기 위해 사용되는 비밀키에 대응하는 공개키인 것을 특징으로 하는 정보처리장치.
  4. 제 1항에 있어서,
    프로그램복호화수단은 다수의 제 1키를 사용하여 프로그램의 암호화버전을 복호화하는 것을 특징으로 하는 정보처리장치.
  5. 프로그램을 실행하는 처리를 행하는 정보처리방법에 있어서,
    프로그램의 암호화버전을 복호화하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하고,
    복호화를 통하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하고,
    복호화하여 얻은 프로그램을 실행하는 단계를 포함하여 이루어진 것을 특징으로 하는 정보처리방법.
  6. 프로그램이 기록되는 기록매체에 있어서,
    프로그램의 암호화버전을 복호화하기 위해 필요한 제 1키의 암호화버전을 제 2키를 사용하여 복호화하고,
    복호화를 통하여 얻은 제 1키를 사용하여 프로그램의 암호화버전을 복호화하고,
    복호화하여 얻은 프로그램을 컴퓨터가 실행하도록 하는 프로그램이 기록되어 있는 것을 특징으로 하는 기록매체.
  7. 제 1항에 있어서,
    프로그램을 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 암호화하는 암호화수단을 포함하여 프로그램을 실행하는 것을 특징으로 하는 정보처리장치.
  8. 제 1항에 있어서,
    프로그램을 정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 암호화하는 단계를 포함하여 프로그램을 실행하는 것을 특징으로 하는 정보처리방법.
  9. 제 1항에 있어서,
    정보처리장치에 의해 실행될 수 있는 코드로 복호화되는 암호문으로 암호화되는 프로그램이 기록되어 있는 것을 특징으로 하는 기록매체.
  10. 프로그램을 실행하는 처리를 행하는 정보처리장치에 있어서,
    프로그램을 실행하는 실행수단과,
    프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하는 키복호화수단과,
    키복호화수단에 의한 복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하는 확인수단과,
    확인수단에 의해 정당한 것으로 확인되고 서명이 부가되고 있는 프로그램을 실행수단에 공급하는 공급수단을 포함하는 것을 특징으로 하는 정보처리장치.
  11. 프로그램을 실행하는 처리를 행하는 정보처리방법에 있어서,
    프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하고,
    복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하고,
    정당한 것으로 확인될때에만 프로그램을 실행하는 단계를 포함하는 것을 특징으로 하는 정보처리방법.
  12. 컴퓨터가
    프로그램에 부가되고 있는 서명을 확인하는데 사용되는 제 1키의 암호화버젼을 제 2키를 사용하여 복호화하고,
    복호화를 통하여 얻어지고 있는 제 1키를 사용하여 프로그램에 부가되고 있는 서명이 정당한 것인지 아닌지를 확인하고,
    정당한 것으로 확인될때에만 프로그램을 실행하도록 하는 프로그램이 기록되어 있는 것을 특징으로 하는 기록매체.
  13. 제 10항에 있어서,
    정보처리장치에서 서명이 정당한 것으로 확인되도록 프로그램을 처리하는 처리수단을 포함하는 것을 특징으로 하는 정보처리장치.
  14. 제 10항에 있어서,
    정보처리장치에서 서명이 정당한 것으로 확인되도록 프로그램을 처리하는 단계를 포함하는 것을 특징으로 하는 정보처리장치.
  15. 제 10항에 있어서,
    정보처리장치에서 서명이 정당한 것으로 확인되도록 처리된 프로그램이 기록되어 있는 것을 특징으로 하는 기록매체.
KR1019980014447A 1997-04-30 1998-04-23 정보처리장치, 방법 및 기록매체 KR19980081644A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP97-112182 1997-04-30
JP9112182A JPH10301773A (ja) 1997-04-30 1997-04-30 情報処理装置および情報処理方法、並びに記録媒体

Publications (1)

Publication Number Publication Date
KR19980081644A true KR19980081644A (ko) 1998-11-25

Family

ID=14580316

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980014447A KR19980081644A (ko) 1997-04-30 1998-04-23 정보처리장치, 방법 및 기록매체

Country Status (7)

Country Link
US (1) US6647495B1 (ko)
EP (1) EP0875814B1 (ko)
JP (1) JPH10301773A (ko)
KR (1) KR19980081644A (ko)
CN (1) CN1130627C (ko)
DE (1) DE69837303T2 (ko)
TW (1) TW405096B (ko)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0825506B1 (en) 1996-08-20 2013-03-06 Invensys Systems, Inc. Methods and apparatus for remote process control
JP3995338B2 (ja) * 1998-05-27 2007-10-24 富士通株式会社 ネットワーク接続制御方法及びシステム
GB2343022B (en) * 1998-10-19 2003-01-08 Ibm Encrypting of java methods
FI990461A0 (fi) * 1999-03-03 1999-03-03 Nokia Mobile Phones Ltd Menetelmä ohjelmiston lataamiseksi palvelimelta päätelaitteeseen
TW518497B (en) 1999-03-30 2003-01-21 Sony Corp Information processing system
US6449720B1 (en) * 1999-05-17 2002-09-10 Wave Systems Corp. Public cryptographic control unit and system therefor
US7089530B1 (en) 1999-05-17 2006-08-08 Invensys Systems, Inc. Process control configuration system with connection validation and configuration
AU5025600A (en) 1999-05-17 2000-12-05 Foxboro Company, The Process control configuration system with parameterized objects
US6788980B1 (en) 1999-06-11 2004-09-07 Invensys Systems, Inc. Methods and apparatus for control using control devices that provide a virtual machine environment and that communicate via an IP network
US7865442B1 (en) * 1999-10-15 2011-01-04 Invensys Systems, Inc. Distributing and billing software according to customer use of program modules
US7117371B1 (en) * 2000-06-28 2006-10-03 Microsoft Corporation Shared names
GB0024918D0 (en) * 2000-10-11 2000-11-22 Sealedmedia Ltd Method of providing java tamperproofing
EP1235145A3 (en) * 2001-01-19 2006-10-04 Matsushita Electric Industrial Co., Ltd. Information terminal device and program executed thereon
EP1225499A3 (en) * 2001-01-19 2004-03-24 Matsushita Electric Industrial Co., Ltd. Data processor for processing data with a digital signature
JP2004530185A (ja) * 2001-02-01 2004-09-30 エイビーエヌ アムロ サービスィズ カンパニー,インコーポレイテッド 自動ライセンス設備のためのシステムおよび方法
ES2256457T3 (es) * 2001-04-19 2006-07-16 Ntt Docomo, Inc. Sistema de comunicacion entre terminales.
KR20030050300A (ko) * 2001-12-18 2003-06-25 (주)쉘컴정보통신 공개키 기반 소프트웨어 암호화 기법을 이용한 컴퓨터변조 방지 방법
US20030115471A1 (en) * 2001-12-19 2003-06-19 Skeba Kirk W. Method and apparatus for building operational radio firmware using incrementally certified modules
US7069442B2 (en) * 2002-03-29 2006-06-27 Intel Corporation System and method for execution of a secured environment initialization instruction
US6782477B2 (en) 2002-04-16 2004-08-24 Song Computer Entertainment America Inc. Method and system for using tamperproof hardware to provide copy protection and online security
US7930537B2 (en) * 2002-08-13 2011-04-19 Nokia Corporation Architecture for encrypted application installation
WO2004023313A1 (en) * 2002-09-04 2004-03-18 Fraunhofer Crcg, Inc. Protecting mobile code against malicious hosts cross references to related applications
AU2003303882A1 (en) * 2003-02-03 2004-08-30 Nokia Corporation Architecture for encrypted application installation
US8041957B2 (en) * 2003-04-08 2011-10-18 Qualcomm Incorporated Associating software with hardware using cryptography
CN100451983C (zh) * 2003-06-27 2009-01-14 迪斯尼实业公司 下一代媒体播放器的双虚拟机以及信任平台
TW200502758A (en) * 2003-07-07 2005-01-16 Yuen Foong Paper Co Ltd Portable secure information accessing system and method thereof
TWI235303B (en) * 2003-07-22 2005-07-01 Yuen Foong Paper Co Ltd Digital content management system, method and application method thereof
US7516331B2 (en) 2003-11-26 2009-04-07 International Business Machines Corporation Tamper-resistant trusted java virtual machine and method of using the same
US7590867B2 (en) * 2004-06-24 2009-09-15 Intel Corporation Method and apparatus for providing secure virtualization of a trusted platform module
JP2006203564A (ja) * 2005-01-20 2006-08-03 Nara Institute Of Science & Technology マイクロプロセッサ、ノード端末、コンピュータシステム及びプログラム実行証明方法
US8838974B2 (en) * 2005-07-15 2014-09-16 The Mathworks, Inc. System and method for verifying the integrity of read-only components in deployed mixed-mode applications
US7921303B2 (en) 2005-11-18 2011-04-05 Qualcomm Incorporated Mobile security system and method
US20070240194A1 (en) * 2006-03-28 2007-10-11 Hargrave Bentley J Scoped permissions for software application deployment
JP4240047B2 (ja) * 2006-04-10 2009-03-18 ソニー株式会社 電子機器、コンテンツ記録方法及びそのプログラム
CN101226569A (zh) * 2007-01-19 2008-07-23 国际商业机器公司 在虚拟机中验证代码模块的方法及装置
DE102007045743A1 (de) * 2007-09-25 2009-04-02 Siemens Ag Verfahren und System zum Schutz gegen einen Zugriff auf einen Maschinencode eines Gerätes
EP2252957A1 (en) * 2008-03-04 2010-11-24 Apple Inc. Managing code entitlements for software developers in secure operating environments
US8594814B2 (en) 2008-06-20 2013-11-26 Invensys Systems, Inc. Systems and methods for immersive interaction with actual and/or simulated facilities for process, environmental and industrial control
JP5268694B2 (ja) * 2009-02-13 2013-08-21 京セラドキュメントソリューションズ株式会社 ライセンス管理システム、画像形成装置およびライセンス管理方法
CN101872404B (zh) * 2009-04-21 2011-12-07 普天信息技术研究院有限公司 一种保护Java软件程序的方法
US8127060B2 (en) 2009-05-29 2012-02-28 Invensys Systems, Inc Methods and apparatus for control configuration with control objects that are fieldbus protocol-aware
US8463964B2 (en) 2009-05-29 2013-06-11 Invensys Systems, Inc. Methods and apparatus for control configuration with enhanced change-tracking
JP5550439B2 (ja) 2010-05-06 2014-07-16 キヤノン株式会社 アプリケーションのインストール方法
CN101945010B (zh) * 2010-09-19 2013-07-10 中国联合网络通信集团有限公司 业务许可的处理方法、设备和系统
US8646050B2 (en) * 2011-01-18 2014-02-04 Apple Inc. System and method for supporting JIT in a secure system with randomly allocated memory ranges
US9152801B2 (en) * 2012-06-28 2015-10-06 Steven W. Cooke Cryptographic system of symmetric-key encryption using large permutation vector keys
EP3073403B1 (en) * 2014-02-06 2019-01-09 Sony Corporation Information processing device, information processing method, program, and server
CN104318133A (zh) * 2014-10-28 2015-01-28 艾普工华科技(武汉)有限公司 基于图片加密License的处理方法及装置
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
US10896032B2 (en) * 2018-11-02 2021-01-19 Accenture Global Solutions, Limited System and method for certifying and deploying instruction code

Family Cites Families (14)

* 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
EP0121853A3 (en) * 1983-04-04 1988-01-13 BURROUGHS CORPORATION (a Delaware corporation) Data processing system having public encryption and private decryption keys
CA1238427A (en) * 1984-12-18 1988-06-21 Jonathan Oseas Code protection using cryptography
US5224160A (en) * 1987-02-23 1993-06-29 Siemens Nixdorf Informationssysteme Ag Process for securing and for checking the integrity of the secured programs
US4924378A (en) * 1988-06-13 1990-05-08 Prime Computer, Inc. License mangagement system and license storage key
US4926475A (en) * 1988-11-30 1990-05-15 Motorola, Inc. Data encryption key failure monitor
US5050212A (en) * 1990-06-20 1991-09-17 Apple Computer, Inc. Method and apparatus for verifying the integrity of a file stored separately from a computer
CA2162125C (en) * 1993-05-05 2005-09-20 Zunquan Liu A repertoire of mappings for a cryptosystem
US5343527A (en) * 1993-10-27 1994-08-30 International Business Machines Corporation Hybrid encryption method and system for protecting reusable software components
JPH07295800A (ja) * 1994-04-22 1995-11-10 Advance Co Ltd ソフトウエアプロテクト方式
US5724425A (en) * 1994-06-10 1998-03-03 Sun Microsystems, Inc. Method and apparatus for enhancing software security and distributing software
JPH0822390A (ja) * 1994-07-05 1996-01-23 Advance Co Ltd ソフトウエア防衛方式
US5557765A (en) * 1994-08-11 1996-09-17 Trusted Information Systems, Inc. System and method for data recovery
DE69534757T2 (de) * 1994-09-15 2006-08-31 International Business Machines Corp. System und Verfahren zur sicheren Speicherung und Verteilung von Daten unter Verwendung digitaler Unterschriften

Also Published As

Publication number Publication date
EP0875814A3 (en) 2004-05-26
TW405096B (en) 2000-09-11
DE69837303T2 (de) 2007-11-29
DE69837303D1 (de) 2007-04-26
EP0875814A2 (en) 1998-11-04
JPH10301773A (ja) 1998-11-13
CN1130627C (zh) 2003-12-10
EP0875814B1 (en) 2007-03-14
CN1208193A (zh) 1999-02-17
US6647495B1 (en) 2003-11-11

Similar Documents

Publication Publication Date Title
KR19980081644A (ko) 정보처리장치, 방법 및 기록매체
US6820200B2 (en) Information processing apparatus and method and recording medium
US6108420A (en) Method and system for networked installation of uniquely customized, authenticable, and traceable software application
EP1168141B1 (en) A secure and open computer platform
US5991399A (en) Method for securely distributing a conditional use private key to a trusted entity on a remote system
US7545931B2 (en) Protection of application secrets
JP4113274B2 (ja) 認証装置および方法
US6327652B1 (en) Loading and identifying a digital rights management operating system
US20060195689A1 (en) Authenticated and confidential communication between software components executing in un-trusted environments
KR101010040B1 (ko) 파일의 암호화·복호화 방법, 장치, 프로그램 및 이프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
US7526649B2 (en) Session key exchange
US20060064756A1 (en) Digital rights management system based on hardware identification
US20060064488A1 (en) Electronic software distribution method and system using a digital rights management method based on hardware identification
JPH10171648A (ja) アプリケーションを認証する装置
MXPA04001597A (es) Enlace de una licencia digital a un usuario y enlace del usuario a multiples dispositivos de computo en un sistema de administracion digital de derechos (drm).
KR20040076834A (ko) 위임된 폐지 권한으로부터의 폐지 리스트에 기초한 디지탈권한 관리(drm) 시스템에서의 인증서의 폐지 및 다른주체들의 배제
US8284942B2 (en) Persisting private/public key pairs in password-encrypted files for transportation to local cryptographic store
JP2010514000A (ja) 電子装置にプログラム状態データをセキュアに記憶するための方法
US20070277037A1 (en) Software component authentication via encrypted embedded self-signatures
US8392723B2 (en) Information processing apparatus and computer readable medium for preventing unauthorized operation of a program
US11743055B2 (en) Storing data on target data processing devices
KR100367094B1 (ko) 컴퓨터 프로그램 온라인 유통 방법
KR100897075B1 (ko) 배포 cd를 사용하는 장치에 서명 그룹의 다이렉트 증명개인 키들을 전달하는 방법
WO2002010907A2 (en) Method of revoking_authorizations for software components
Anati et al. Innovative Technology for CPU Based Attestation and Sealing

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application