KR101632658B1 - 명령어 레벨의 소프트웨어 암호화를 위한 방법 및 디바이스 - Google Patents

명령어 레벨의 소프트웨어 암호화를 위한 방법 및 디바이스 Download PDF

Info

Publication number
KR101632658B1
KR101632658B1 KR1020090123199A KR20090123199A KR101632658B1 KR 101632658 B1 KR101632658 B1 KR 101632658B1 KR 1020090123199 A KR1020090123199 A KR 1020090123199A KR 20090123199 A KR20090123199 A KR 20090123199A KR 101632658 B1 KR101632658 B1 KR 101632658B1
Authority
KR
South Korea
Prior art keywords
instruction
encrypted
subsequent
instructions
computer code
Prior art date
Application number
KR1020090123199A
Other languages
English (en)
Other versions
KR20100069588A (ko
Inventor
스테판 온노
모하메드 카루미
안토이느 몬시프로
Original Assignee
톰슨 라이센싱
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 톰슨 라이센싱 filed Critical 톰슨 라이센싱
Publication of KR20100069588A publication Critical patent/KR20100069588A/ko
Application granted granted Critical
Publication of KR101632658B1 publication Critical patent/KR101632658B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0637Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • 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/2107File encryption
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L2924/00Indexing scheme for arrangements or methods for connecting or disconnecting semiconductor or solid-state bodies as covered by H01L24/00
    • H01L2924/30Technical effects
    • H01L2924/301Electrical effects
    • H01L2924/30107Inductance

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명은 실행하는 동안에 명령어별로 복호화될 컴파일된 컴퓨터 코드 명령어를 암호화하는 방법에 관한 것이다. 컴퓨터 코드 명령어는 연쇄화(chaining) 모드를 이용해서 암호화되어, 암호화된 명령어({Instr. 8})가 명령어(I8)의 값, 선행하는 명령어(I5,I7)의 값 및 의사-난수에 의존한다. 명령어가 하나 초과의 선행하는 명령어(I5,I7)로부터 도달될 수 있음이 발생할 수 있음에 따라, 선행하는 명령어(I5,I7) 중 적어도 하나가 암호화된 명령어를 복호화하는 동안에 이용하기 위해 난수 보상기와 연관되어, 암호화된 명령어의 복호화는 선행하는 명령어가 무엇이었는지와 무관하게 동일한 결과를 낳는다. 또한 암호화 디바이스, 복호화 디바이스 및 방법, 암호화된 컴파일된 컴퓨터 코드 명령어를 저장하는 디지털 지원(support) 매체가 제공된다.

Description

명령어 레벨의 소프트웨어 암호화를 위한 방법 및 디바이스{METHODS AND DEVICES FOR INSTRUCTION LEVEL SOFTWARE ENCRYPTION}
본 발명은 일반적으로 소프트웨어에 관한 것이고, 특히 소프트웨어의 암호화 및 그것의 복호화 및 프로세서 내에서의 실행에 관한 것이다.
이 부분은 아래에서 설명 및/또는 주장되는 본 발명의 다양한 측면과 관계있 는 해당 기술의 다양한 측면을 독자에게 소개하도록 의도된다. 본 논의는 본 발명의 다양한 측면에 대한 더 나은 이해를 촉진시키기 위해 독자에게 배경 정보를 제공하는데 있어서 유익하다고 여겨진다. 이로써, 이러한 진술이 이러한 관점에서 읽혀져야 하며, 종래 기술의 승인으로서 읽혀져서는 안 된다는 것이 이해된다.
암호화에 의해 소프트웨어 코드를 보호하는 것 및 명령어가 실행될 때 명령어별로 소프트웨어 코드를 복호화하는 것이 해당 기술 예컨대, US5386469 및 US6345359에서 오랫동안 알려져 왔다. 이러한 시스템의 단점은 해커가 무엇이 발생하는지를 보기 위해 명령어를 변경하는 것이 비교적 쉽다는 것이다.
이러한 단점을 극복하기 위해, US 2005/108507은 코드의 기본 블록을 스크램블링하고, 서명을 생성함으로써 무결성을 보장할 것을 제안한다. 이러한 해결책의 단점은 무결성에 대해 신경쓰지 않는 해킹된 시스템 상에서, 이 시스템을 해킹하려고 시도할 때 명령어를 대체하는 것이 여전히 가능하다는 것이다.
따라서, 종래 기술의 단점 중 적어도 일부를 극복하는 소프트웨어 암호화 해결책에 대한 요구가 존재한다는 것이 인식된다. 본 발명은 그러한 해결책을 제공한다.
제1 측면에서, 본 발명은 실행하는 동안에 명령어별로 복호화되도록 의도된 컴파일된 컴퓨터 코드 명령어의 암호화된 세트를 획득하기 위해 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법에 대한 것이다. 컴파일된 컴퓨터 코드 명령어의 세트는 복수의 브랜치 명령어 및 라벨 명령어를 포함하며, 컴파일된 컴퓨터 코드 명령어의 세트의 실행이 복수의 브랜치 명령어 각각으로부터 라벨 명령어로 곧장 계속될 수 있다. 라벨 명령어는 연쇄화된 암호화 함수를 이용해서 암호화되어, 암호화된 라벨 명령어가 적어도 라벨 명령어의 값, 및 복수의 브랜치 명령어 중에서 선택된 하나의 값에 의존한다; 복수의 브랜치 명령어 중 선택된 하나 이외의 적어도 하나의 브랜치 명령어 각각이 암호화된 라벨 명령어의 복호화를 조정하기 위해 이용될 보상기 값과 연관되어, 라벨 명령어 직전에 복수의 브랜치 명령어 중 어느 것이 실행되었는지와 무관하게, 암호화된 라벨 명령어의 복호화가 실행하는 동안에 동일한 결과를 낳는다.
제1의 바람직한 실시예에서, 라벨 명령어의 암호화는 라벨 명령어와 연관된 의사-난수에 추가적으로 의존한다.
제2의 바람직한 실시예에서, 의사-난수는 그것이 생성되는 명령어의 오프셋 및 코드 키의 함수로서 생성된다.
제3의 바람직한 실시예에서, 라벨 명령어의 값 및 복수의 브랜치 명령어 중 선택된 하나의 값은 각각의 오피(OP)코드 부분의 값이다.
제4의 바람직한 실시예에서, 암호화는 라벨 명령어의 값과, 복수의 브랜치 명령어 중 선택된 하나의 값을 배타적 OR(XOR) 연산해서 수행된다.
제2 측면에서, 본 발명은 연쇄화된 암호화 함수를 이용해서 암호화된 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 방법에 대한 것이다. 컴파일된 컴퓨터 코드 명령어를 실행하는 동안에, 실행된 함수를 위한 보상기 값 및 후속적인 암호화된 함수가 획득되며, 후속적인 암호화된 함수는 컴파일된 컴퓨터 코드 명령어를 실행하는 동안에 실행된 함수를 뒤따른다; 후속적인 암호화된 함수를 위한 의사-난수가 획득된다; 그리고 연쇄화된 암호화 함수에 대응하는 복호화 함수를 이용해서 후속적인 암호화된 명령어가 복호화되는데, 복호화 함수는 적어도 후속적인 암호화된 명령어, 실행된 함수, 의사-난수, 및 보상기 값으로부터 후속적인 함수를 생성한다.
제1의 바람직한 실시예에서, 후속적인 암호화된 함수의 오프셋 및 코드 키의 함수로서 의사-난수가 생성된다.
제2의 바람직한 실시예에서, 암호화된 함수는, 만약 있다면, 암호화된 오피(OP)코드 및 암호화되지 않은 파라미터를 포함하고, 실행된 함수의 오피코드 부분들 및 후속적인 암호화된 함수만이 복호화에 이용된다.
제3의 바람직한 실시예에서, 복호화는 후속적인 암호화된 명령어의 값, 실행된 함수, 의사-난수, 및 보상기 값을 XOR연산해서 수행된다.
제3 측면에서, 본 발명은 실행하는 동안에 명령어별로 복호화되도록 의도된 컴파일된 컴퓨터 코드 명령어의 암호화된 세트를 획득하기 위해 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 디바이스에 대한 것이다. 컴파일된 컴퓨터 코드 명령어의 세트는 복수의 분기 명령어 및 라벨 명령어를 포함하고, 컴파일된 컴퓨터 코드 명령어의 세트의 실행이 복수의 브랜치 명령어 각각으로부터 라벨 명령어로 곧장 계속될 수 있다. 상기 디바이스는 하나의 프로세서를 포함하는데, 이 프로세서는, 암호화된 라벨 명령어가 적어도 라벨 명령어의 값, 및 복수의 브랜치 명령어 중에서 선택된 하나의 값에 의존하도록, 연쇄화된 암호화 함수를 이용해서 라벨 명령어를 암호화하도록; 그리고 라벨 명령어 직전에 복수의 브랜치 명령어 중 어느 것이 실행되었는지와 무관하게, 암호화된 라벨 명령어의 복호화가 실행하는 동안에 동일한 결과를 낳도록, 복수의 브랜치 명령어 중 선택된 하나 이외의 적어도 하나의 브랜치 명령어 각각을 암호화된 라벨 명령어의 복호화를 조정하기 위해 이용될 보상기 값과 연관시키도록, 적응되어 있다.
제4 측면에서, 본 발명은 연쇄화된 암호화 함수를 이용해서 암호화된 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 디바이스에 대한 것이다. 상기 디바이스는 하나의 프로세서를 포함하는데, 상기 프로세서는, 컴파일된 컴퓨터 코드 명령어를 실행하는 동안에, 실행된 함수를 위한 보상기 값을 획득하도록; 컴파일된 컴퓨터 코드 명령어를 실행하는 동안에 실행된 함수를 뒤따르는 후속적인 암호화된 함수를 획득하도록; 후속적인 암호화된 함수를 위한 의사-난수를 획득하도록; 및 연쇄화된 암호화 함수에 대응하는 그리고 적어도 후속적인 암호화된 명령어, 실행된 함수, 의사-난수, 및 보상기 값으로부터 후속적인 함수를 생성하는, 복호화 함수를 이용해서 후속적인 암호화된 명령어를 복호화하도록 적응되어 있다.
제5 측면에서, 본 발명은 컴퓨터 상에서 실행될 때, 본 발명의 제2 측면에 따른 방법을 수행하는 컴퓨터 코드 명령어를 포함하는, 디지털 지원 매체에 대한 것이다.
본 발명의 바람직한 특색이, 첨부 도면을 참조해서, 비-제한적인 예를 통해, 이제 설명될 것이다.
본 발명에 의하면, 종래 기술의 단점 중 적어도 일부를 극복하는 소프트웨어 암호화 해결책을 얻을 수 있다.
본 발명은 컴파일된 소프트웨어 코드 명령어의, 암호화, 그리고 후속적으로 복호화에 의해 소프트웨어를 보호할 것을 제안한다. 본 설명의 목적상, 하이-레벨 코드 명령어가 다음 중 하나로 구성된다:
- 기본 블록 즉, 순서대로 항상 실행되는 기계-레벨 명령어의 세트. 기본 블록이 점프 또는 유사한 명령어를 포함하는 경우, 그것은 마지막 기계-레벨 명령어이다. 이는 그 다음 기계-레벨 명령어가 보통, 코드가 실행될 때 결정되기 때문이다.
- 라벨로서, 이는 점프 명령어의 목적지라고 말할 수 있다. 기본 블록이 라벨을 포함하는 경우, 그것은 항상 제1 명령어로 나타난다.
도 1은 본 발명의 바람직한 실시예에 따른 일반적인 연쇄화 모드 암호화 도식(scheme)을 예시한다. 명령어는 보통, 그것을 난수 및 이전 명령어와 XOR 연산해서 암호화된다. 도 1에 주어진 예에서, 세 개의 명령어만이 암호화되나, 이것은 더 큰(또는 더 적은) 수로 일반화될 수 있다는 것이 이해될 것이다.
암호화될 명령어 - Instr 1, Instr 2, 및 Instr 3 - 는 왼쪽으로부터 제1 열에 나타난다. 제2 열은 의사-난수를 포함하는데, 이 난수는 바람직하게는 각 명령어에 대해 상이하다. 의사-난수는 비밀 키를 이용해서 스트림 암호문(102)에 의해 제공되는 의사-스트림의 부분들이며, 비밀 키는 바람직하게는 각 컴파일된 코드에 대해 고유하다. 스트림 암호문은 잘 알려진 암호 원시함수(cryptographic primitive)이다; RC4 및 살사(Salsa)가 두 개의 비-제한적 예이다. 블록 암호문이 또한 이용될 수 있는데, 그것이 예컨대 카운터 모드 내의 AES(AES-CTR)과 같이, 스트림 암호문으로서 효과적으로 작용하는 방식으로, 이용될 수 있다.
제3 열은 이전 명령어를 갖지 않는 제1 열을 제외하고, 이전의 암호화되지 않은 명령어의 값을 포함하며, 따라서 초기화 벡터 Ⅳ(104)가 그 대신 이용된다. 제4 열은 결과적인 암호화된 함수를 포함한다.
알 수 있는 바와 같이, 제1 명령어는 제1 의사-난수 및 초기화 벡터 Ⅳ와 XOR 연산해서 제1 암호화된 명령어({Instr. 1})를 생성한다. 그러나, 제2 명령어는 그것을 제2 의사-난수 및 제1 명령어와 XOR 연산해서 암호화되어 제2 암호화된 명 령어({Instr. 2})를 생성한다. 추가적인 명령어가 동일한 방식으로 즉, 의사-난수 및 이전 명령어와 XOR 연산해서 암호화된다.
당업자는 도 1에 설명된 연쇄화 모드가 기본 블록의 암호화에 잘 듣는다는 것을 인식할 것이다. 그러나, 그 이상으로는 이용될 수 없는데, 그 이유는 예컨대 점프에 의해 복수의 장소로부터 도달될 수 있는 명령어가 서로 상이한 다수의 선행하는 명령어를 갖는 것이 발생할 수 있기 때문이다. 이는 보통, 오직 하나의 경우에 즉, 후속적인 명령어가 '올바른' 선행하는 명령어로부터 도달될 때 올바른 암호화를 야기한다.
그러나, 본 발명은 전체 코드를 체인화하는 것을 가능하게 만든다. 이를 위해, 적어도 일부의 - 가능하게는 모든 - 명령어가 난수 보상기와 연관되는데, 이 보상기는 뒤따르는 명령어의 암호화 및 복호화에 이용된다. 이러한 난수 보상기는 선행하는 명령어가 어느 것인지와 무관하게 명령어가 올바르게 복호화되는 것을 보장하는데, 이는 뒤에서 설명하는 바와 같다. 난수 보상기가 보통, 무작위가 아니라, 의사-난수를 보상하는 값이라는 점이 명료함을 위해 아마 지적되어야 한다.
예컨대, 명령어(I14)가 두 개의 가능한 선행하는 명령어(I13 및 I7)를 갖는다고 가정하자. 각 선행하는 명령어는 난수 보상기(C13 및 C7)와 각각 연관된다.
난수 보상기 없이, 명령어(I13)로부터 연쇄화를 갖는 명령어(I14)의 암호화는 다음을 제공한다:
Figure 112009076674755-pat00001
Figure 112009076674755-pat00002
는 XOR 연산을 의미하고 중괄호는 암호화된 명령어를 의미한다.
유사하게, 명령어(I7)로부터 연쇄화를 갖는 명령어(I14)의 암호화는 다음을 제공한다:
Figure 112009076674755-pat00003
{I14}는 이때 두 개의 가능한 값을 갖는데 이는 I7 및 I13 이 상이한 경우이다(이는 종종 그러하다). {I14}을 위한 동일한 암호화 값을 얻기 위해, 난수 보상기(C13 및 C7)가 이용된다. 수학식은 다음과 같다:
Figure 112009076674755-pat00004
두 개의 수학식이 동일한 결과를 낳는다는 것을 보장하기 위해, 오른쪽이 동일해야 하는데 즉,
Figure 112009076674755-pat00005
가 되어야 하며, 이는 다음과 같이 단순화될 수 있다:
Figure 112009076674755-pat00006
이는
Figure 112009076674755-pat00007
인 경우에 동일한 암호화 결과가 획득된다는 것을 의미한다.
난수 보상기가 유리하게는 이진 코드가 제공된 랜덤 정정 표(RCT)에 저장되는데, 바람직하게는 그것의 헤더에서 암호화되어 있다.
코드의 복호화가 바람직하게는, 코드의 실행 직전에 수행된다. 프로세 서(420)가 적절한 의사-난수를 생성해서, 입력으로서 비밀 키를 갖는 스트림 암호문(202)을 이용해서 각 명령어를 복호화할 수 있다. 난수 보상기를 가지고, 명령어(I7)로부터 명령어(I14)를 복호화하는 것이 다음을 제공한다:
Figure 112009076674755-pat00008
그리고 명령어(I13)로부터 다음을 제공한다:
Figure 112009076674755-pat00009
두 개의 수학식은 따라서 동일한 복호화 결과 즉 I14를 낳는다.
도 2는 명령어가 본 발명의 바람직한 방법에 따라 어떻게 암호화되는지를 더 상세하게 예시한다. 소프트웨어 코드를 컴파일하는 동안에, 컴파일러가 점프를 수행하는 명령어에 대한 정보를 제공한다. 이 정보는 컴파일된 코드를 암호화하기 위해 이용된다.
도 1에서와 같이, 명령어(Instr. 2)가 그것을 이전 명령어(Instr. 1) 및 의사-난수와 XOR 연산해서 암호화되는데, 이는 암호화된 명령어({Instr. 2})를 제공한다.
그러나, 도 2는 의사-난수의 생성에 대해 추가적인 상세사항을 제공한다. 의사-난수는 스트림 암호문(202)(이는, 도 1에서와 같이, 바람직하게는 RC4, 살사 또는 AES-CTR)에 의해 생성된다. 입력으로서, 스트림 암호문(202)은 코드 키 및 명령어 오프셋(206)을 이용한다. RCT(204)는 또한 입력으로서 명령어 오프셋(206)을 이용하며 난수 보상기(C1)를 제공한다. Instr. 2의 암호화가 정정을 필요로 하지 않는 경우에(이는 Instr. 2가 라벨이 아닌 경우임), 바람직하게는, 명령어 오프셋(206)과 연관된 RCT(204) 내에 어떠한 정보도 존재하지 않을 것이다.
명령어 오프셋(206)은 스트림 암호문(202)에 정보를 제공해서 동일한 난수가 매번 명령어에 대해 생성된다는 것을 보장한다. 당업자는 다음을 인식할 것인데, 그러한 명령어 오프셋은 코드 블록이 미리정해진 순서로 생성됨에 따라 도 1에서 요구되지 않은 반면에, 도 2는 코드에서의 점프를 허용하며; 즉, 실행될 n번째 명령어가 코드에서 반드시 n번째 명령어일 필요는 없다는 것을 인식할 것이다.
임의의 점프 명령어의 난수 보상기를 0으로 설정하고 이후 필요한 경우 반복해서, 코드의 완전한 체인화를 가능하게 하도록 정정되어야 하는 명령어의 난수 보상기를 계산하는 것이 가능하다는 것이 인식될 것이다.
도 3은 본 발명의 바람직한 실시예를 이용해서 암호화된 점프를 갖는 코드의 예를 예시한다. 알 수 있는 바와 같이, 최종 명령어(I8)가 두 개의 상이한 명령어(I5, I7)로부터 도달될 수 있다. 암호화된 명령어({Instr. 8})가 선행하는 명령어와 무관하게 동일하다는 것을 확실하게 하기 위해,
Figure 112009076674755-pat00010
이라는 것이 확실해진다. 단순화의 이유로, 명령어를 암호화하는데 이용된 난수(Ri)가 도 3에 도시되지 않는다.
C7이 설정되는 경우, C5
Figure 112009076674755-pat00011
로서 계산된다. 다른 한편, C5가 설정되는 경우, C7
Figure 112009076674755-pat00012
로서 계산된다. 이미 언급된 바와 같이, 어떤 난수 보상기가 설 정되는 지는 보통, 문제가 되지 않는다; 중요한 것은 모든 가능한 선행하는 명령어로부터 도달하는 명령어를 복호화하는 것이 가능하다는 것이다.
랜덤 변경기(random modifier)의 값이 이후, 이전에 설명된 RCT 표에 저장된다.
도 4는 본 발명의 바람직한 실시예에 따른 코드 암호화 및 복호화 시스템(400)을 예시한다. 시스템(400)은 컴파일된 이진 코드 "Code"를 수신 및 암호화하도록 적응된 암호화 디바이스(410)를 포함한다. 암호화 디바이스(410)는 이전에 설명된 바와 같은 이진 코드를 스크램블링하도록 적응된다. 암호화 디바이스(410)는 스크램블링된 코드({Code}Kc)가 의도되는 프로세서(420)의 공개 키(Kpub)를 저장하고, 비밀 코드 키(Kc)를 생성하는데, 이 비밀 코드 키는 바람직하게는 매번 바뀐다(즉, 코드마다 상이하다). 공개키(Kpub)는 의도된 디바이스 또는 다수의 디바이스에 고유할 수 있다. 비밀키(Kc)는 랜덤 스트림을 생성하기 위해 스트림 암호문에 의해 이용된다. 비밀키(Kc)를 안전하게 송신하기 위해, 그것은 공개키(Kpub)를 이용해서 암호화되는데, 이는 암호화된 비밀키({Kc}Kpub)를 야기한다. {Kc}Kpub에는 바람직하게는 그 헤더 내에, 이진 코드가 제공된다.
암호화 디바이스(410)는 하나 이상의 프로세서(미도시; 이후 "프로세서"라 함) 또는 더 큰 디바이스의 일부에 구현될 수 있는데, 더 큰 디바이스는 또한 코드를 컴파일하도록 적응된 컴파일러를 포함할 수 있으며 적어도 하나의 통신 유닛 및 하나의 메모리를 더 포함한다. 암호화 디바이스(410)는 컴파일된 코드를 분석해서 필요한 정보 예컨대, 라벨을 발견해서 암호화를 수행하도록 적응된다.
암호화 디바이스(410)는 동일한 채널을 통해 또는 별개의 채널을 통해, 스크램블링된 코드({Code}Kc) 및 암호화된 비밀키({Kc}Kpub)를 프로세서(420)로 보내도록 더 적응된다. 스크램블링된 코드({Code}Kc)는, 암호화된 비밀키({Kc}Kpub)를 가지고 또는 이 비밀키 없이, 디지털 지원 매체(430), 이를테면 예컨대 CD-ROM, 또는 임의의 적합한 디지털 배포망(예컨대, 인터넷, 랜, UMTS) 상에서 배포될 수 있다는 것이 인식될 것이다.
프로세서(420)는 이진 코드 헤더로부터 암호화된 비밀키({Kc}Kpub)를 추출한다. 프로세서(420)는 바람직하게는, 공개키에 대응하는 개인키(Kpriv)를 이용해서 {Kc}Kpub를 해독하도록 적응된 크립토(crypto)-프로세서(421)를 포함한다. 개인키(Kpriv)는 바람직하게는 안전한 (부정조작이 불가능한) 위치에 저장된다. 크립토-프로세서는 또한 이진 코드를 획득하기 위해 비밀키(Kc)를이용해서 스크램블링된 코드({Code}Kc)를 복호화하도록 적응되는데, 명령어가 디스크램블링됨에 따라, 캐시(423)에 전송되는데, 캐시로부터 명령어는 실행을 위해 제2 프로세서(CPU, 424) 에 추가로 전달된다. 프로세서(420)는 RCT를 저장하도록 적응된 메모리(RAM, 422)를 더 포함한다.
시스템 및 방법이 평범한 프로세서를 이용해서 구현될 수 있으나, 더 안전하 기 때문에, 소위 크립토-프로세서를 이용하는 것이 유리하다는 것이 인식될 것이다.
이전의 설명에서, 명령어가 암호화된다는 것이 언급되었다. 당업자는 명령어의 길이가 소위 오피코드와 연관된 변수의 개수에 의존해서 변할 수 있다는 것을 인식할 것이다.
제1 변형예에 따르면, 각 명령어의 오피코드만이 암호화되고 변수를 암호화되지 않은 채로 남겨둔다.
제2 변형예에 따르면, 암호화에 이용된 의사-난수는 가장 긴 명령어의 길이만큼 길다. 이 경우, 오피코드가 먼저 복호화되는데, 이는 오피코드에 링크된 변수 길이에 대한 지식을 얻기 위해서이다. 이후, 제2 과정(pass)에서, 변수가 복호화된다. 제2 변형예를 이용해서 명령어를 연쇄화하기 위해, 이전 명령어가 더 긴 경우, 이전 명령어가 현재 명령어의 길이로 절단되나, 이전 명령어가 더 짧은 경우(또는 동일한 길이인 경우), 어떠한 절단도 요구되지 않는다.
당업자는 다음을 인식할 것인데, 명령어의 암호화에 이용된 의사-난수를 명령어 그 자체와 또는 선행하는 명령어와 연관하는 것이 가능하며, 이는 단지 난수 보상기가 해당 명령어 이전에 어떠한 명령어가 실행되는지와 무관하게 동일한 복호화된 값을 획득하도록 계산되는 경우이다.
설명 및 (적당한 경우) 청구항 및 도면 내에 개시된 각 특색은 독립적으로 또는 임의의 적당한 조합으로 제공될 수 있다. 하드웨어로 구현되는 것으로 설명된 특색이 또한 소프트웨어로 구현될 수 있으며, 그 반대일 수 있다.
청구항 내에 나타나는 참조 번호는 단지 예이며, 청구범위에 대한 임의의 제한 효과를 갖지 않는다.
본 발명은 일반적으로 소프트웨어에 이용가능하고, 특히 소프트웨어의 암호화 및 그것의 복호화 및 프로세서 내에서의 실행에 이용가능하다.
도 1은 본 발명의 바람직한 실시예에 따른 일반적인 연쇄화 모드 암호화 도식을 예시하는 도면.
도 2는 명령어가 본 발명의 바람직한 실시예에 따라 어떻게 암호화되는지를 더 상세하게 예시하는 도면.
도 3은 본 발명의 바람직한 실시예를 이용해서 암호화된 점프를 갖는 코드의 예를 예시하는 도면.
도 4는 본 발명의 바람직한 실시예에 따른 코드 암호화 및 복호화 시스템을 예시하는 도면.

Claims (12)

  1. 실행하는 동안에 명령어별로 복호화되도록 의도된 컴파일된 컴퓨터 코드 명령어의 암호화된 세트를 획득하기 위해 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법으로서,
    컴파일된 컴퓨터 코드 명령어의 세트는 복수의 분기 명령어(I5, I7) 및 후속적인 명령어(I8)를 포함하고, 컴파일된 컴퓨터 코드 명령어의 세트의 실행이 복수의 분기 명령어(I5, I7) 각각으로부터 후속적인 명령어(I8)로 곧장 계속될 수 있는, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법에 있어서, 디바이스(410)에서,
    연쇄화된 암호화 함수를 이용해서 후속적인 명령어(I8)를 암호화하는 단계로서, 암호화된 후속적인 명령어({Instr. 8})가 적어도 후속적인 명령어(I8)의 값, 및 복수의 분기 명령어(I5, I7) 중에서 선택된 하나의 값에 의존하도록, 암호화하는 단계; 및
    복수의 분기 명령어 중 선택된 하나 이외의 적어도 하나의 분기 명령어(I5, I7) 각각을 암호화된 후속적인 명령어({Instr. 8})의 복호화를 조정하도록 이용될 보상기 값(C5, C7)과 연관시키는 단계로서, 후속적인 명령어(I8) 직전에 복수의 분기 명령어(I5, I7) 중 어느 것이 실행되었는지와 무관하게, 암호화된 후속적인 명령어({Instr. 8})의 복호화가 실행하는 동안에 동일한 결과를 낳도록, 연관시키는 단계
    를 포함하는, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법.
  2. 제1 항에 있어서,
    후속적인 명령어(I8)의 암호화는 후속적인 명령어(I8)와 연관된 의사-난수에 추가적으로 의존하는, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법.
  3. 제2 항에 있어서,
    의사-난수가 생성되는 명령어의 오프셋 및 코드 키의 함수로서 의사-난수를 생성하는 단계를 더 포함하는, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법.
  4. 제1 항에 있어서,
    후속적인 명령어(I8)의 값 및 복수의 분기 명령어(I5, I7) 중 선택된 하나의 값이 각각의 오피코드(opcode) 부분의 값인, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법.
  5. 제1 항에 있어서,
    암호화는 후속적인 명령어(I8)의 값과, 복수의 분기 명령어(I5, I7) 중 선택된 하나의 값을 XOR연산해서 수행되는, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법.
  6. 연쇄화된 암호화 함수를 이용해서 암호화된 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 방법으로서,
    컴파일된 컴퓨터 코드 명령어를 실행하는 동안에, 디바이스(420)에서,
    실행된 명령어(I5, I7)를 위한 보상기 값(C5, C7)을 획득하는 단계;
    후속적인 암호화된 명령어({Instr. 8})를 획득하는 단계로서, 후속적인 암호화된 명령어는 컴파일된 컴퓨터 코드 명령어를 실행하는 동안에 실행된 명령어(I5, I7)를 뒤따르는, 후속적인 암호화된 명령어 획득 단계;
    후속적인 암호화된 명령어({Instr. 8})를 위한 의사-난수를 획득하는 단계; 및
    연쇄화된 암호화 함수에 대응하는 복호화 함수를 이용해서 후속적인 암호화된 명령어(I8)를 복호화하는 단계로서, 복호화 함수는 적어도 후속적인 암호화된 명령어({Instr. 8}), 실행된 함수, 의사-난수, 및 보상기 값(C5, C7)으로부터 후속적인 명령어(I8)를 생성하는, 복호화 단계
    를 포함하는, 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 방법.
  7. 제6 항에 있어서,
    후속적인 암호화된 명령어({Instr. 8})의 오프셋 및 코드 키의 함수로서 의사-난수를 생성하는 단계를 더 포함하는, 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 방법.
  8. 제6 항에 있어서,
    암호화된 명령어는, 만약 있다면, 암호화된 오피코드 및 암호화되지 않은 파라미터를 포함하고, 실행된 명령어(I5, I7)의 오피코드 부분들 및 후속적인 암호화된 명령어({Instr. 8})만이 복호화를 위해 이용되는, 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 방법.
  9. 제6 항에 있어서,
    복호화는 후속적인 암호화된 명령어({Instr. 8})의 값, 실행된 명령어, 의사-난수, 및 보상기 값(C5, C7)을 XOR연산해서 수행되는, 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 방법.
  10. 실행하는 동안에 명령어별로 복호화되도록 의도된 컴파일된 컴퓨터 코드 명령어의 암호화된 세트를 획득하기 위해 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 디바이스(410)로서,
    컴파일된 컴퓨터 코드 명령어의 세트는 복수의 분기 명령어(I5, I7) 및 후속적인 명령어(I8)를 포함하고, 컴파일된 컴퓨터 코드 명령어의 세트의 실행이 복수의 분기 명령어(I5, I7) 각각으로부터 후속적인 명령어(I8)로 곧장 계속될 수 있는, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 디바이스(410)에 있어서,
    프로세서로서,
    암호화된 후속적인 명령어({Instr. 8})가 적어도 후속적인 명령어(I8)의 값, 및 복수의 분기 명령어(I5, I7) 중에서 선택된 하나의 값에 의존하도록, 연쇄화된 암호화 함수를 이용해서 후속적인 명령어(I8)를 암호화하도록; 그리고
    후속적인 명령어(I8) 직전에 복수의 분기 명령어(I5, I7) 중 어느 것이 실행되었는지와 무관하게, 암호화된 후속적인 명령어({Instr. 8})의 복호화가 실행하는 동안에 동일한 결과를 낳도록, 복수의 분기 명령어 중 선택된 하나 이외의 적어도 하나의 분기 명령어(I5, I7) 각각을 암호화된 후속적인 명령어({Instr. 8})의 복호화를 조정하도록 이용될 보상기 값(C5, C7)과 연관시키도록:
    적응된 프로세서를
    포함하는, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 디바이스.
  11. 연쇄화된 암호화 함수를 이용해서 암호화된 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 디바이스(420)로서,
    상기 디바이스(420)는 하나의 프로세서(421)를 포함하는데, 프로세서(421)는, 컴파일된 컴퓨터 코드 명령어를 실행하는 동안에,
    실행된 명령어(I5, I7)를 위한 보상기 값(C5, C7)을 획득하도록;
    컴파일된 컴퓨터 코드 명령어를 실행하는 동안에 실행된 명령어(I5, I7)를 뒤따르는 후속적인 암호화된 명령어({Instr. 8})를 획득하도록;
    후속적인 암호화된 명령어({Instr. 8})를 위한 의사-난수를 획득하도록; 그리고
    연쇄화된 암호화 함수에 대응하는 그리고 적어도 후속적인 암호화된 명령어({Instr. 8}), 실행된 함수, 의사-난수, 및 보상기 값(C5, C7)으로부터 후속적인 명령어(I8)를 생성하는, 복호화 함수를 이용해서 후속적인 암호화된 명령어(I8)를 복호화하도록:
    적응된, 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 디바이스.
  12. 컴퓨터 프로그램이 저장된 기록 매체로서,
    컴퓨터 프로그램은, 컴퓨터상에서 실행될 때, 제6 항 내지 제9 항 중 어느 한 항에 따른 방법을 수행하는 컴퓨터 코드 명령어를 포함하는, 컴퓨터 프로그램이 저장된 기록 매체.
KR1020090123199A 2008-12-15 2009-12-11 명령어 레벨의 소프트웨어 암호화를 위한 방법 및 디바이스 KR101632658B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP08305946.9 2008-12-15
EP08305946A EP2196937A1 (en) 2008-12-15 2008-12-15 Methods and devices for instruction level software encryption

Publications (2)

Publication Number Publication Date
KR20100069588A KR20100069588A (ko) 2010-06-24
KR101632658B1 true KR101632658B1 (ko) 2016-06-22

Family

ID=40627567

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090123199A KR101632658B1 (ko) 2008-12-15 2009-12-11 명령어 레벨의 소프트웨어 암호화를 위한 방법 및 디바이스

Country Status (7)

Country Link
US (1) US8341426B2 (ko)
EP (2) EP2196937A1 (ko)
JP (1) JP5184489B2 (ko)
KR (1) KR101632658B1 (ko)
CN (1) CN101751243B (ko)
AT (1) ATE520091T1 (ko)
TW (1) TWI478050B (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5616528B2 (ja) * 2010-07-22 2014-10-29 ナグラビジョン エス アー ソフトウェアの完全性を保証するためのプロセッサにより実施される方法
US8745408B2 (en) * 2011-04-08 2014-06-03 Infineon Technologies Ag Instruction encryption/decryption arrangement and method with iterative encryption/decryption key update
EP2856377B1 (en) 2012-06-01 2017-09-27 Intel Corporation Identification and execution of subsets of a plurality of instructions in a more secure execution environment
US8812873B2 (en) 2012-09-26 2014-08-19 Intel Corporation Secure execution of a computer program using binary translators
US9311493B2 (en) * 2013-07-30 2016-04-12 Battelle Memorial Institute System for processing an encrypted instruction stream in hardware
EP2884692B1 (en) * 2013-12-13 2020-05-20 Nxp B.V. Updating software on a secure element
US9547758B2 (en) 2014-05-19 2017-01-17 Nxp B.V. Program cable obfuscation based upon recently executed program code
EP2978159A1 (en) 2014-07-21 2016-01-27 Nxp B.V. Nonce generation for encryption and decryption
DE102015201430A1 (de) * 2015-01-28 2016-07-28 Ihp Gmbh - Innovations For High Performance Microelectronics / Leibniz-Institut Für Innovative Mikroelektronik Intrinsische Authentifizierung von Programcode
CN104917610B (zh) * 2015-06-15 2018-03-06 上海交通大学 基于量子真随机数的通信中继服务器安全系统及方法
FR3047100B1 (fr) * 2016-01-26 2018-03-02 Commissariat A L'energie Atomique Et Aux Energies Alternatives Methode de chiffrement d'un flot d'instructions et execution d'un flot d'instructions ainsi chiffre.
TWI760546B (zh) * 2017-08-23 2022-04-11 安地卡及巴布達商區塊鏈控股有限公司 用於高安全性高速資料加密及傳輸的電腦實施系統與方法
EP3614293A1 (en) * 2018-08-24 2020-02-26 Nagravision S.A. Securing data stored in a memory of an iot device during a low power mode
CN109394095B (zh) 2018-10-23 2020-09-15 珠海市一微半导体有限公司 一种机器人运动地毯偏移的控制方法、芯片及清洁机器人
CN109698504A (zh) * 2019-03-08 2019-04-30 张文韬 潮流计算结果分析方法及系统
EP4002165A1 (en) * 2020-11-18 2022-05-25 Thales DIS France SA Code flow protection with error propagation
US11409846B2 (en) 2021-01-14 2022-08-09 Safelishare, Inc. User controlled trusted and isolated computing environments
US20220342655A1 (en) * 2021-04-22 2022-10-27 STMicroelectronics (Grand Ouest) SAS Microcontroller, computer program product, and method for adding an additional function to a computer program

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005050116A (ja) * 2003-07-28 2005-02-24 Matsushita Electric Ind Co Ltd 命令実行装置およびその方法
JP2006227777A (ja) * 2005-02-16 2006-08-31 Renesas Technology Corp データ処理装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4562305A (en) * 1982-12-22 1985-12-31 International Business Machines Corporation Software cryptographic apparatus and method
US5386469A (en) 1993-08-05 1995-01-31 Zilog, Inc. Firmware encryption for microprocessor/microcomputer
US5675645A (en) * 1995-04-18 1997-10-07 Ricoh Company, Ltd. Method and apparatus for securing executable programs against copying
JPH1055273A (ja) * 1996-06-05 1998-02-24 Matsushita Electric Ind Co Ltd ソフトウェア保護装置
US6061449A (en) * 1997-10-10 2000-05-09 General Instrument Corporation Secure processor with external memory using block chaining and block re-ordering
US6345359B1 (en) 1997-11-14 2002-02-05 Raytheon Company In-line decryption for protecting embedded software
US6333983B1 (en) * 1997-12-16 2001-12-25 International Business Machines Corporation Method and apparatus for performing strong encryption or decryption data using special encryption functions
US6971022B1 (en) * 1999-06-15 2005-11-29 Matsushita Electric Industrial Co., Ltd. Cryptographic apparatus for performing cryptography on a specified area of content data
DE50010164D1 (de) * 2000-05-22 2005-06-02 Infineon Technologies Ag Sicherheits-Datenverarbeitungseinheit sowie dazugehöriges Verfahren
JP4098478B2 (ja) * 2001-01-31 2008-06-11 株式会社東芝 マイクロプロセッサ
JP2004246637A (ja) * 2003-02-14 2004-09-02 Fainaaku Kk 固有情報化プロセッサ、これを備えた処理装置および記憶装置、関連するプログラム実行方法、およびコンピュータプログラム
US7996671B2 (en) 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US8495367B2 (en) * 2007-02-22 2013-07-23 International Business Machines Corporation Nondestructive interception of secure data in transit
US8538012B2 (en) * 2007-03-14 2013-09-17 Intel Corporation Performing AES encryption or decryption in multiple modes with a single instruction
JP2009169489A (ja) * 2008-01-11 2009-07-30 Oki Electric Ind Co Ltd 暗号化方法、復号化方法、暗号化装置、復号化装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005050116A (ja) * 2003-07-28 2005-02-24 Matsushita Electric Ind Co Ltd 命令実行装置およびその方法
JP2006227777A (ja) * 2005-02-16 2006-08-31 Renesas Technology Corp データ処理装置

Also Published As

Publication number Publication date
CN101751243B (zh) 2015-02-18
EP2196937A1 (en) 2010-06-16
CN101751243A (zh) 2010-06-23
TWI478050B (zh) 2015-03-21
JP2010140473A (ja) 2010-06-24
US20100153745A1 (en) 2010-06-17
US8341426B2 (en) 2012-12-25
EP2196938A1 (en) 2010-06-16
ATE520091T1 (de) 2011-08-15
JP5184489B2 (ja) 2013-04-17
EP2196938B1 (en) 2011-08-10
KR20100069588A (ko) 2010-06-24
TW201023031A (en) 2010-06-16

Similar Documents

Publication Publication Date Title
KR101632658B1 (ko) 명령어 레벨의 소프트웨어 암호화를 위한 방법 및 디바이스
US9515818B2 (en) Multi-block cryptographic operation
US8416947B2 (en) Block cipher using multiplication over a finite field of even characteristic
KR101847492B1 (ko) 데이터 암호화 장치 및 방법, 데이터 복호화 장치 및 방법
JP5779434B2 (ja) セキュリティ装置及びセキュリティシステム
JP6880017B2 (ja) 信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス
US20060023875A1 (en) Enhanced stream cipher combining function
KR20100069610A (ko) 연쇄화된 암호화 모드를 위한 방법 및 디바이스
KR20100017844A (ko) 데이터를 보호할 때 적용되는 프로그램 가능한 프로세싱 단계들을 정의하기위한 시스템 및 방법
KR101815175B1 (ko) 데이터 암호화 장치 및 방법, 데이터 복호화 장치 및 방법
KR20100005203A (ko) 간단하고 효율적인 원패스 인증 암호화 방법
EP2629225A1 (en) System, devices and methods for collaborative execution of a software application comprising at least one encrypted instruction
KR20170097509A (ko) 화이트 박스 암호화 기반의 연산 방법 및 그 방법을 수행하는 보안 단말
KR101914453B1 (ko) 암호화 장치 및 방법
JP5992651B2 (ja) 暗号化方法、プログラム、および、システム
JP6167721B2 (ja) 暗号化装置、復号装置、暗号化方法、復号方法及びプログラム
JP6631989B2 (ja) 暗号化装置、制御方法、及びプログラム
JP2018514816A (ja) 変形鍵を用いる高速aes
KR101971001B1 (ko) 화이트박스 암호가 적용된 블록 암호 기반의 난수 생성 방법 및 장치
KR101915808B1 (ko) 난독화를 이용하는 암호문 복호화
JP5268413B2 (ja) 開示制限処理装置及びデータ処理システム及びプログラム
Strenzke Botan's implementation of the McEliece PKC
Lee LG INNOTEK

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant