(19) 대한민국특허청(KR)
(12) 등록특허공보(B1)
(45) 공고일자 2016년06월22일
(11) 등록번호 10-1632658
(24) 등록일자 2016년06월16일
(51) 국제특허분류(Int. Cl.)
G06F 9/30 (2006.01) G06F 9/06 (2006.01)
(21) 출원번호 10-2009-0123199
(22) 출원일자 2009년12월11일
심사청구일자 2014년12월10일
(65) 공개번호 10-2010-0069588
(43) 공개일자 2010년06월24일
(30) 우선권주장
08305946.9 2008년12월15일
유럽특허청(EPO)(EP)
(56) 선행기술조사문헌
JP10055273 A*
JP2006227777 A*
JP2005050116 A*
KR1020080084752 A*
*는 심사관에 의하여 인용된 문헌
(73) 특허권자
톰슨 라이센싱
프랑스 92130 이씨레뮬리노 루 잔다르크 1-5
(72) 발명자
온노 스테판
프랑스, 세인트-그레고이르 35760, 알뤼 클라우드
데부시 6
카루미 모하메드
프랑스, 레네 35200, 뤼 두 구베르뉴 제네럴 펠릭
스 에부 8
몬시프로 안토이느
프랑스, 레네 35000, 애비뉴 아리스티데 브리언 1
(74) 대리인
문경진, 김학수
전체 청구항 수 : 총 12 항 심사관 : 유진태
(54) 발명의 명칭 명령어 레벨의 소프트웨어 암호화를 위한 방법 및 디바이스
(57) 요 약
본 발명은 실행하는 동안에 명령어별로 복호화될 컴파일된 컴퓨터 코드 명령어를 암호화하는 방법에 관한
것이다. 컴퓨터 코드 명령어는 연쇄화(chaining) 모드를 이용해서 암호화되어, 암호화된 명령어({Instr. 8})가
명령어(I8)의 값, 선행하는 명령어(I5,I7)의 값 및 의사-난수에 의존한다. 명령어가 하나 초과의 선행하는 명령어
(I5,I7)로부터 도달될 수 있음이 발생할 수 있음에 따라, 선행하는 명령어(I5,I7) 중 적어도 하나가 암호화된 명
령어를 복호화하는 동안에 이용하기 위해 난수 보상기와 연관되어, 암호화된 명령어의 복호화는 선행하는 명령어
가 무엇이었는지와 무관하게 동일한 결과를 낳는다. 또한 암호화 디바이스, 복호화 디바이스 및 방법, 암호화된
컴파일된 컴퓨터 코드 명령어를 저장하는 디지털 지원(support) 매체가 제공된다.
대 표 도 - 도3
등록특허 10-1632658
- 1 -
명 세 서
청구범위
청구항 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)에서,
등록특허 10-1632658
- 2 -
실행된 명령어(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)과 연관시키도록:
적응된 프로세서를
포함하는, 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 디바이스.
등록특허 10-1632658
- 3 -
청구항 11
연쇄화된 암호화 함수를 이용해서 암호화된 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 디바이스(420)로
서,
상기 디바이스(420)는 하나의 프로세서(421)를 포함하는데, 프로세서(421)는, 컴파일된 컴퓨터 코드 명령어를
실행하는 동안에,
실행된 명령어(I5, I7)를 위한 보상기 값(C5, C7)을 획득하도록;
컴파일된 컴퓨터 코드 명령어를 실행하는 동안에 실행된 명령어(I5, I7)를 뒤따르는 후속적인 암호화된 명령어
({Instr. 8})를 획득하도록;
후속적인 암호화된 명령어({Instr. 8})를 위한 의사-난수를 획득하도록; 그리고
연쇄화된 암호화 함수에 대응하는 그리고 적어도 후속적인 암호화된 명령어({Instr. 8}), 실행된 함수, 의사-난
수, 및 보상기 값(C5, C7)으로부터 후속적인 명령어(I8)를 생성하는, 복호화 함수를 이용해서 후속적인 암호화된
명령어(I8)를 복호화하도록:
적응된, 컴파일된 컴퓨터 코드 명령어의 세트를 복호화하는 디바이스.
청구항 12
컴퓨터 프로그램이 저장된 기록 매체로서,
컴퓨터 프로그램은, 컴퓨터상에서 실행될 때, 제6 항 내지 제9 항 중 어느 한 항에 따른 방법을 수행하는 컴퓨
터 코드 명령어를 포함하는, 컴퓨터 프로그램이 저장된 기록 매체.
발명의 설명
발명의 상세한 설명
기 술 분 야
본 발명은 일반적으로 소프트웨어에 관한 것이고, 특히 소프트웨어의 암호화 및 그것의 복호화 및 프로세서 내[0001]
에서의 실행에 관한 것이다.
배 경 기 술
이 부분은 아래에서 설명 및/또는 주장되는 본 발명의 다양한 측면과 관계있 는 해당 기술의 다양한 측면을 독[0002]
자에게 소개하도록 의도된다. 본 논의는 본 발명의 다양한 측면에 대한 더 나은 이해를 촉진시키기 위해 독자
에게 배경 정보를 제공하는데 있어서 유익하다고 여겨진다. 이로써, 이러한 진술이 이러한 관점에서 읽혀져야
하며, 종래 기술의 승인으로서 읽혀져서는 안 된다는 것이 이해된다.
암호화에 의해 소프트웨어 코드를 보호하는 것 및 명령어가 실행될 때 명령어별로 소프트웨어 코드를 복호화하[0003]
는 것이 해당 기술 예컨대, US5386469 및 US6345359에서 오랫동안 알려져 왔다. 이러한 시스템의 단점은 해커가
무엇이 발생하는지를 보기 위해 명령어를 변경하는 것이 비교적 쉽다는 것이다.
이러한 단점을 극복하기 위해, US 2005/108507은 코드의 기본 블록을 스크램블링하고, 서명을 생성함으로써 무[0004]
결성을 보장할 것을 제안한다. 이러한 해결책의 단점은 무결성에 대해 신경쓰지 않는 해킹된 시스템 상에서, 이
시스템을 해킹하려고 시도할 때 명령어를 대체하는 것이 여전히 가능하다는 것이다.
발명의 내용
해결 하고자하는 과제
따라서, 종래 기술의 단점 중 적어도 일부를 극복하는 소프트웨어 암호화 해결책에 대한 요구가 존재한다는 것[0005]
이 인식된다. 본 발명은 그러한 해결책을 제공한다.
등록특허 10-1632658
- 4 -
과제 해결수단
제1 측면에서, 본 발명은 실행하는 동안에 명령어별로 복호화되도록 의도된 컴파일된 컴퓨터 코드 명령어의 암[0006]
호화된 세트를 획득하기 위해 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 방법에 대한 것이다. 컴파일된
컴퓨터 코드 명령어의 세트는 복수의 브랜치 명령어 및 라벨 명령어를 포함하며, 컴파일된 컴퓨터 코드 명령어
의 세트의 실행이 복수의 브랜치 명령어 각각으로부터 라벨 명령어로 곧장 계속될 수 있다. 라벨 명령어는 연쇄
화된 암호화 함수를 이용해서 암호화되어, 암호화된 라벨 명령어가 적어도 라벨 명령어의 값, 및 복수의 브랜치
명령어 중에서 선택된 하나의 값에 의존한다; 복수의 브랜치 명령어 중 선택된 하나 이외의 적어도 하나의 브랜
치 명령어 각각이 암호화된 라벨 명령어의 복호화를 조정하기 위해 이용될 보상기 값과 연관되어, 라벨 명령어
직전에 복수의 브랜치 명령어 중 어느 것이 실행되었는지와 무관하게, 암호화된 라벨 명령어의 복호화가 실행하
는 동안에 동일한 결과를 낳는다.
제1의 바람직한 실시예에서, 라벨 명령어의 암호화는 라벨 명령어와 연관된 의사-난수에 추가적으로 의존한다.[0007]
제2의 바람직한 실시예에서, 의사-난수는 그것이 생성되는 명령어의 오프셋 및 코드 키의 함수로서 생성된다.[0008]
제3의 바람직한 실시예에서, 라벨 명령어의 값 및 복수의 브랜치 명령어 중 선택된 하나의 값은 각각의 오피[0009]
(OP)코드 부분의 값이다.
제4의 바람직한 실시예에서, 암호화는 라벨 명령어의 값과, 복수의 브랜치 명령어 중 선택된 하나의 값을 배타[0010]
적 OR(XOR) 연산해서 수행된다.
제2 측면에서, 본 발명은 연쇄화된 암호화 함수를 이용해서 암호화된 컴파일된 컴퓨터 코드 명령어의 세트를 복[0011]
호화하는 방법에 대한 것이다. 컴파일된 컴퓨터 코드 명령어를 실행하는 동안에, 실행된 함수를 위한 보상기 값
및 후속적인 암호화된 함수가 획득되며, 후속적인 암호화된 함수는 컴파일된 컴퓨터 코드 명령어를 실행하는 동
안에 실행된 함수를 뒤따른다; 후속적인 암호화된 함수를 위한 의사-난수가 획득된다; 그리고 연쇄화된 암호화
함수에 대응하는 복호화 함수를 이용해서 후속적인 암호화된 명령어가 복호화되는데, 복호화 함수는 적어도 후
속적인 암호화된 명령어, 실행된 함수, 의사-난수, 및 보상기 값으로부터 후속적인 함수를 생성한다.
제1의 바람직한 실시예에서, 후속적인 암호화된 함수의 오프셋 및 코드 키의 함수로서 의사-난수가 생성된다. [0012]
제2의 바람직한 실시예에서, 암호화된 함수는, 만약 있다면, 암호화된 오피(OP)코드 및 암호화되지 않은 파라미[0013]
터를 포함하고, 실행된 함수의 오피코드 부분들 및 후속적인 암호화된 함수만이 복호화에 이용된다.
제3의 바람직한 실시예에서, 복호화는 후속적인 암호화된 명령어의 값, 실행된 함수, 의사-난수, 및 보상기 값[0014]
을 XOR연산해서 수행된다.
제3 측면에서, 본 발명은 실행하는 동안에 명령어별로 복호화되도록 의도된 컴파일된 컴퓨터 코드 명령어의 암[0015]
호화된 세트를 획득하기 위해 컴파일된 컴퓨터 코드 명령어의 세트를 암호화하는 디바이스에 대한 것이다. 컴파
일된 컴퓨터 코드 명령어의 세트는 복수의 분기 명령어 및 라벨 명령어를 포함하고, 컴파일된 컴퓨터 코드 명령
어의 세트의 실행이 복수의 브랜치 명령어 각각으로부터 라벨 명령어로 곧장 계속될 수 있다. 상기 디바이스는
하나의 프로세서를 포함하는데, 이 프로세서는, 암호화된 라벨 명령어가 적어도 라벨 명령어의 값, 및 복수의
브랜치 명령어 중에서 선택된 하나의 값에 의존하도록, 연쇄화된 암호화 함수를 이용해서 라벨 명령어를 암호화
하도록; 그리고 라벨 명령어 직전에 복수의 브랜치 명령어 중 어느 것이 실행되었는지와 무관하게, 암호화된 라
벨 명령어의 복호화가 실행하는 동안에 동일한 결과를 낳도록, 복수의 브랜치 명령어 중 선택된 하나 이외의 적
어도 하나의 브랜치 명령어 각각을 암호화된 라벨 명령어의 복호화를 조정하기 위해 이용될 보상기 값과 연관시
키도록, 적응되어 있다.
제4 측면에서, 본 발명은 연쇄화된 암호화 함수를 이용해서 암호화된 컴파일된 컴퓨터 코드 명령어의 세트를 복[0016]
호화하는 디바이스에 대한 것이다. 상기 디바이스는 하나의 프로세서를 포함하는데, 상기 프로세서는, 컴파일된
컴퓨터 코드 명령어를 실행하는 동안에, 실행된 함수를 위한 보상기 값을 획득하도록; 컴파일된 컴퓨터 코드 명
령어를 실행하는 동안에 실행된 함수를 뒤따르는 후속적인 암호화된 함수를 획득하도록; 후속적인 암호화된 함
수를 위한 의사-난수를 획득하도록; 및 연쇄화된 암호화 함수에 대응하는 그리고 적어도 후속적인 암호화된 명
령어, 실행된 함수, 의사-난수, 및 보상기 값으로부터 후속적인 함수를 생성하는, 복호화 함수를 이용해서 후속
적인 암호화된 명령어를 복호화하도록 적응되어 있다.
제5 측면에서, 본 발명은 컴퓨터 상에서 실행될 때, 본 발명의 제2 측면에 따른 방법을 수행하는 컴퓨터 코드[0017]
등록특허 10-1632658
- 5 -
명령어를 포함하는, 디지털 지원 매체에 대한 것이다.
본 발명의 바람직한 특색이, 첨부 도면을 참조해서, 비-제한적인 예를 통해, 이제 설명될 것이다.[0018]
효 과
본 발명에 의하면, 종래 기술의 단점 중 적어도 일부를 극복하는 소프트웨어 암호화 해결책을 얻을 수 있다.[0019]
발명의 실시를 위한 구체적인 내용
본 발명은 컴파일된 소프트웨어 코드 명령어의, 암호화, 그리고 후속적으로 복호화에 의해 소프트웨어를 보호[0020]
할 것을 제안한다. 본 설명의 목적상, 하이-레벨 코드 명령어가 다음 중 하나로 구성된다:
- 기본 블록 즉, 순서대로 항상 실행되는 기계-레벨 명령어의 세트. 기본 블록이 점프 또는 유사한 명령어를[0021]
포함하는 경우, 그것은 마지막 기계-레벨 명령어이다. 이는 그 다음 기계-레벨 명령어가 보통, 코드가 실행될
때 결정되기 때문이다.
- 라벨로서, 이는 점프 명령어의 목적지라고 말할 수 있다. 기본 블록이 라벨을 포함하는 경우, 그것은 항상[0022]
제1 명령어로 나타난다.
도 1은 본 발명의 바람직한 실시예에 따른 일반적인 연쇄화 모드 암호화 도식(scheme)을 예시한다. 명령어는[0023]
보통, 그것을 난수 및 이전 명령어와 XOR 연산해서 암호화된다. 도 1에 주어진 예에서, 세 개의 명령어만이 암
호화되나, 이것은 더 큰(또는 더 적은) 수로 일반화될 수 있다는 것이 이해될 것이다.
암호화될 명령어 - Instr 1, Instr 2, 및 Instr 3 - 는 왼쪽으로부터 제1 열에 나타난다. 제2 열은 의사-난수를[0024]
포함하는데, 이 난수는 바람직하게는 각 명령어에 대해 상이하다. 의사-난수는 비밀 키를 이용해서 스트림 암호
문(102)에 의해 제공되는 의사-스트림의 부분들이며, 비밀 키는 바람직하게는 각 컴파일된 코드에 대해 고유하
다. 스트림 암호문은 잘 알려진 암호 원시함수(cryptographic primitive)이다; RC4 및 살사(Salsa)가 두 개의
비-제한적 예이다. 블록 암호문이 또한 이용될 수 있는데, 그것이 예컨대 카운터 모드 내의 AES(AES-CTR)과 같
이, 스트림 암호문으로서 효과적으로 작용하는 방식으로, 이용될 수 있다.
제3 열은 이전 명령어를 갖지 않는 제1 열을 제외하고, 이전의 암호화되지 않은 명령어의 값을 포함하며, 따라[0025]
서 초기화 벡터 Ⅳ(104)가 그 대신 이용된다. 제4 열은 결과적인 암호화된 함수를 포함한다.
알 수 있는 바와 같이, 제1 명령어는 제1 의사-난수 및 초기화 벡터 Ⅳ와 XOR 연산해서 제1 암호화된 명령어[0026]
({Instr. 1})를 생성한다. 그러나, 제2 명령어는 그것을 제2 의사-난수 및 제1 명령어와 XOR 연산해서 암호화되
어 제2 암호화된 명령어({Instr. 2})를 생성한다. 추가적인 명령어가 동일한 방식으로 즉, 의사-난수 및 이전
명령어와 XOR 연산해서 암호화된다.
당업자는 도 1에 설명된 연쇄화 모드가 기본 블록의 암호화에 잘 듣는다는 것을 인식할 것이다. 그러나, 그 이[0027]
상으로는 이용될 수 없는데, 그 이유는 예컨대 점프에 의해 복수의 장소로부터 도달될 수 있는 명령어가 서로
상이한 다수의 선행하는 명령어를 갖는 것이 발생할 수 있기 때문이다. 이는 보통, 오직 하나의 경우에 즉, 후
속적인 명령어가 '올바른' 선행하는 명령어로부터 도달될 때 올바른 암호화를 야기한다.
그러나, 본 발명은 전체 코드를 체인화하는 것을 가능하게 만든다. 이를 위해, 적어도 일부의 - 가능하게는 모[0028]
든 - 명령어가 난수 보상기와 연관되는데, 이 보상기는 뒤따르는 명령어의 암호화 및 복호화에 이용된다. 이러
한 난수 보상기는 선행하는 명령어가 어느 것인지와 무관하게 명령어가 올바르게 복호화되는 것을 보장하는데,
이는 뒤에서 설명하는 바와 같다. 난수 보상기가 보통, 무작위가 아니라, 의사-난수를 보상하는 값이라는 점이
명료함을 위해 아마 지적되어야 한다.
예컨대, 명령어(I14)가 두 개의 가능한 선행하는 명령어(I13 및 I7)를 갖는다고 가정하자. 각 선행하는 명령어는[0029]
난수 보상기(C13 및 C7)와 각각 연관된다.
난수 보상기 없이, 명령어(I13)로부터 연쇄화를 갖는 명령어(I14)의 암호화는 다음을 제공한다:[0030]
[0031]
는 XOR 연산을 의미하고 중괄호는 암호화된 명령어를 의미한다.[0032]
등록특허 10-1632658
- 6 -
유사하게, 명령어(I7)로부터 연쇄화를 갖는 명령어(I14)의 암호화는 다음을 제공한다:[0033]
[0034]
{I14}는 이때 두 개의 가능한 값을 갖는데 이는 I7 및 I13 이 상이한 경우이다(이는 종종 그러하다). {I14}을 위한[0035]
동일한 암호화 값을 얻기 위해, 난수 보상기(C13 및 C7)가 이용된다. 수학식은 다음과 같다:
[0036]
두 개의 수학식이 동일한 결과를 낳는다는 것을 보장하기 위해, 오른쪽이 동일해야 하는데 즉,[0037]
[0038]
가 되어야 하며, 이는 다음과 같이 단순화될 수 있다:[0039]
[0040]
이는 인 경우에 동일한 암호화 결과가 획득된다는 것을 의미한다.[0041]
난수 보상기가 유리하게는 이진 코드가 제공된 랜덤 정정 표(RCT)에 저장되는데, 바람직하게는 그것의 헤더에서[0042]
암호화되어 있다.
코드의 복호화가 바람직하게는, 코드의 실행 직전에 수행된다. 프로세서(420)가 적절한 의사-난수를 생성해서,[0043]
입력으로서 비밀 키를 갖는 스트림 암호문(202)을 이용해서 각 명령어를 복호화할 수 있다. 난수 보상기를 가지
고, 명령어(I7)로부터 명령어(I14)를 복호화하는 것이 다음을 제공한다:
[0044]
그리고 명령어(I13)로부터 다음을 제공한다:[0045]
[0046]
두 개의 수학식은 따라서 동일한 복호화 결과 즉 I14를 낳는다.[0047]
도 2는 명령어가 본 발명의 바람직한 방법에 따라 어떻게 암호화되는지를 더 상세하게 예시한다. 소프트웨어 코[0048]
드를 컴파일하는 동안에, 컴파일러가 점프를 수행하는 명령어에 대한 정보를 제공한다. 이 정보는 컴파일된 코
드를 암호화하기 위해 이용된다.
도 1에서와 같이, 명령어(Instr. 2)가 그것을 이전 명령어(Instr. 1) 및 의사-난수와 XOR 연산해서 암호화되는[0049]
데, 이는 암호화된 명령어({Instr. 2})를 제공한다.
그러나, 도 2는 의사-난수의 생성에 대해 추가적인 상세사항을 제공한다. 의사-난수는 스트림[0050]
암호문(202)(이는, 도 1에서와 같이, 바람직하게는 RC4, 살사 또는 AES-CTR)에 의해 생성된다. 입력으로서, 스
트림 암호문(202)은 코드 키 및 명령어 오프셋(206)을 이용한다. RCT(204)는 또한 입력으로서 명령어 오프셋
(206)을 이용하며 난수 보상기(C1)를 제공한다. Instr. 2의 암호화가 정정을 필요로 하지 않는 경우에(이는
Instr. 2가 라벨이 아닌 경우임), 바람직하게는, 명령어 오프셋(206)과 연관된 RCT(204) 내에 어떠한 정보도 존
재하지 않을 것이다.
명령어 오프셋(206)은 스트림 암호문(202)에 정보를 제공해서 동일한 난수가 매번 명령어에 대해 생성된다는 것[0051]
을 보장한다. 당업자는 다음을 인식할 것인데, 그러한 명령어 오프셋은 코드 블록이 미리정해진 순서로 생성됨
에 따라 도 1에서 요구되지 않은 반면에, 도 2는 코드에서의 점프를 허용하며; 즉, 실행될 n번째 명령어가 코드
에서 반드시 n번째 명령어일 필요는 없다는 것을 인식할 것이다.
임의의 점프 명령어의 난수 보상기를 0으로 설정하고 이후 필요한 경우 반복해서, 코드의 완전한 체인화를 가능[0052]
하게 하도록 정정되어야 하는 명령어의 난수 보상기를 계산하는 것이 가능하다는 것이 인식될 것이다.
도 3은 본 발명의 바람직한 실시예를 이용해서 암호화된 점프를 갖는 코드의 예를 예시한다. 알 수 있는 바와[0053]
등록특허 10-1632658
- 7 -
같이, 최종 명령어(I8)가 두 개의 상이한 명령어(I5, I7)로부터 도달될 수 있다. 암호화된 명령어({Instr. 8})가
선행하는 명령어와 무관하게 동일하다는 것을 확실하게 하기 위해, 이라는 것이 확실해진다. 단순화
의 이유로, 명령어를 암호화하는데 이용된 난수(Ri)가 도 3에 도시되지 않는다.
C7이 설정되는 경우, C5가 로서 계산된다. 다른 한편, C5가 설정되는 경우, C7가 로서 계산된다.[0054]
이미 언급된 바와 같이, 어떤 난수 보상기가 설정되는 지는 보통, 문제가 되지 않는다; 중요한 것은 모든 가능
한 선행하는 명령어로부터 도달하는 명령어를 복호화하는 것이 가능하다는 것이다.
랜덤 변경기(random modifier)의 값이 이후, 이전에 설명된 RCT 표에 저장된다.[0055]
도 4는 본 발명의 바람직한 실시예에 따른 코드 암호화 및 복호화 시스템(400)을 예시한다. 시스템(400)은 컴파[0056]
일된 이진 코드 "Code"를 수신 및 암호화하도록 적응된 암호화 디바이스(410)를 포함한다. 암호화 디바이스
(410)는 이전에 설명된 바와 같은 이진 코드를 스크램블링하도록 적응된다. 암호화 디바이스(410)는 스크램블링
된 코드({Code}Kc)가 의도되는 프로세서(420)의 공개 키(Kpub)를 저장하고, 비밀 코드 키(Kc)를 생성하는데, 이
비밀 코드 키는 바람직하게는 매번 바뀐다(즉, 코드마다 상이하다). 공개키(Kpub)는 의도된 디바이스 또는 다수
의 디바이스에 고유할 수 있다. 비밀키(Kc)는 랜덤 스트림을 생성하기 위해 스트림 암호문에 의해 이용된다. 비
밀키(Kc)를 안전하게 송신하기 위해, 그것은 공개키(Kpub)를 이용해서 암호화되는데, 이는 암호화된 비밀키
({Kc}Kpub)를 야기한다. {Kc}Kpub에는 바람직하게는 그 헤더 내에, 이진 코드가 제공된다.
암호화 디바이스(410)는 하나 이상의 프로세서(미도시; 이후 "프로세서"라 함) 또는 더 큰 디바이스의 일부에[0057]
구현될 수 있는데, 더 큰 디바이스는 또한 코드를 컴파일하도록 적응된 컴파일러를 포함할 수 있으며 적어도 하
나의 통신 유닛 및 하나의 메모리를 더 포함한다. 암호화 디바이스(410)는 컴파일된 코드를 분석해서 필요한 정
보 예컨대, 라벨을 발견해서 암호화를 수행하도록 적응된다.
암호화 디바이스(410)는 동일한 채널을 통해 또는 별개의 채널을 통해, 스크램블링된 코드({Code}Kc) 및 암호화[0058]
된 비밀키({Kc}Kpub)를 프로세서(420)로 보내도록 더 적응된다. 스크램블링된 코드({Code}Kc)는, 암호화된 비밀키
({Kc}Kpub)를 가지고 또는 이 비밀키 없이, 디지털 지원 매체(430), 이를테면 예컨대 CD-ROM, 또는 임의의 적합
한 디지털 배포망(예컨대, 인터넷, 랜, UMTS) 상에서 배포될 수 있다는 것이 인식될 것이다.
프로세서(420)는 이진 코드 헤더로부터 암호화된 비밀키({Kc}Kpub)를 추출한다. 프로세서(420)는 바람직하게는,[0059]
공개키에 대응하는 개인키(Kpriv)를 이용해서 {Kc}Kpub를 해독하도록 적응된 크립토(crypto)-프로세서(421)를 포함
한다. 개인키(Kpriv)는 바람직하게는 안전한 (부정조작이 불가능한) 위치에 저장된다. 크립토-프로세서는 또한 이
진 코드를 획득하기 위해 비밀키(Kc)를이용해서 스크램블링된 코드({Code}Kc)를 복호화하도록 적응되는데, 명령
어가 디스크램블링됨에 따라, 캐시(423)에 전송되는데, 캐시로부터 명령어는 실행을 위해 제2 프로세서(CPU,
424) 에 추가로 전달된다. 프로세서(420)는 RCT를 저장하도록 적응된 메모리(RAM, 422)를 더 포함한다.
시스템 및 방법이 평범한 프로세서를 이용해서 구현될 수 있으나, 더 안전하기 때문에, 소위 크립토-프로세서를[0060]
이용하는 것이 유리하다는 것이 인식될 것이다.
이전의 설명에서, 명령어가 암호화된다는 것이 언급되었다. 당업자는 명령어의 길이가 소위 오피코드와 연관된[0061]
변수의 개수에 의존해서 변할 수 있다는 것을 인식할 것이다.
제1 변형예에 따르면, 각 명령어의 오피코드만이 암호화되고 변수를 암호화되지 않은 채로 남겨둔다.[0062]
제2 변형예에 따르면, 암호화에 이용된 의사-난수는 가장 긴 명령어의 길이만큼 길다. 이 경우, 오피코드가 먼[0063]
저 복호화되는데, 이는 오피코드에 링크된 변수 길이에 대한 지식을 얻기 위해서이다. 이후, 제2 과정(pass)에
서, 변수가 복호화된다. 제2 변형예를 이용해서 명령어를 연쇄화하기 위해, 이전 명령어가 더 긴 경우, 이전 명
령어가 현재 명령어의 길이로 절단되나, 이전 명령어가 더 짧은 경우(또는 동일한 길이인 경우), 어떠한 절단도
요구되지 않는다.
당업자는 다음을 인식할 것인데, 명령어의 암호화에 이용된 의사-난수를 명령어 그 자체와 또는 선행하는 명령[0064]
어와 연관하는 것이 가능하며, 이는 단지 난수 보상기가 해당 명령어 이전에 어떠한 명령어가 실행되는지와 무
등록특허 10-1632658
- 8 -
관하게 동일한 복호화된 값을 획득하도록 계산되는 경우이다.
설명 및 (적당한 경우) 청구항 및 도면 내에 개시된 각 특색은 독립적으로 또는 임의의 적당한 조합으로 제공될[0065]
수 있다. 하드웨어로 구현되는 것으로 설명된 특색이 또한 소프트웨어로 구현될 수 있으며, 그 반대일 수 있다.
청구항 내에 나타나는 참조 번호는 단지 예이며, 청구범위에 대한 임의의 제한 효과를 갖지 않는다.[0066]
산업이용 가능성
본 발명은 일반적으로 소프트웨어에 이용가능하고, 특히 소프트웨어의 암호화 및 그것의 복호화 및 프로세서[0067]
내에서의 실행에 이용가능하다.
도면의 간단한 설명
도 1은 본 발명의 바람직한 실시예에 따른 일반적인 연쇄화 모드 암호화 도식을 예시하는 도면.[0068]
도 2는 명령어가 본 발명의 바람직한 실시예에 따라 어떻게 암호화되는지를 더 상세하게 예시하는 도면.[0069]
도 3은 본 발명의 바람직한 실시예를 이용해서 암호화된 점프를 갖는 코드의 예를 예시하는 도면.[0070]
도 4는 본 발명의 바람직한 실시예에 따른 코드 암호화 및 복호화 시스템을 예시하는 도면.[0071]
도면
도면1
도면2
등록특허 10-1632658
- 9 -
도면3
도면4
등록특허 10-1632658
- 10 -
명령어 레벨의 소프트웨어 암호화를 위한 방법 및 디바이스(METHODS AND DEVICES FOR INSTRUCTION LEVEL SOFTWARE ENCRYPTION)
2018. 2. 27. 07:29