KR20230158569A - 집적회로에서 프로그램을 보호하는 방법 - Google Patents

집적회로에서 프로그램을 보호하는 방법 Download PDF

Info

Publication number
KR20230158569A
KR20230158569A KR1020237035585A KR20237035585A KR20230158569A KR 20230158569 A KR20230158569 A KR 20230158569A KR 1020237035585 A KR1020237035585 A KR 1020237035585A KR 20237035585 A KR20237035585 A KR 20237035585A KR 20230158569 A KR20230158569 A KR 20230158569A
Authority
KR
South Korea
Prior art keywords
opcodes
opcode
program
fictitious
original
Prior art date
Application number
KR1020237035585A
Other languages
English (en)
Inventor
다비드 비질란트
쟝 로크 쿨롱
제로메 바슈어
Original Assignee
탈레스 Dis 프랑스 Sas
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 탈레스 Dis 프랑스 Sas filed Critical 탈레스 Dis 프랑스 Sas
Publication of KR20230158569A publication Critical patent/KR20230158569A/ko

Links

Classifications

    • 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/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/75Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information by inhibiting the analysis of circuitry or operation

Landscapes

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

Abstract

본 발명은 집적 회로 제품의 프로그램을 보호하는 방법에 관한 것으로, 상기 방법은:
상기 프로그램의 하나 이상의 원본 op코드를 각각 대체하기 위해 하나 이상의 op코드 블록을 생성하는 단계(205a, 205b) - 상기 op코드 블록은 소정 수치(D)의 허구 op코드와 해당 원본 op코드를 포함하며, 상기 허구 op코드는 그 결과의 고려없이, 그리고 상기 프로그램의 예상 결과에 영향없이 실행될 것이며, 상기 op코드 블록 내 원본 op코드의 상기 수치(D) 및 위치(P)는 상기 집적 회로 제품의 난수 또는 의사 난수 생성기에 의해 무작위적으로 결정됨; 그리고
상기 하나 이상의 op코드 블록을 실행하는 단계(206)를 포함한다.

Description

집적회로에서 프로그램을 보호하는 방법
본 발명은 프로그램을 실행하도록 적응되고 공격받기 쉬운 집적 회로 제품의 프로그램을 보호하는 방법에 관한 것이다. 본 발명은 또한 상기 방법을 사용하는 집적 회로에 관한 것이다.
물리적 공격에 대한 시스템 저항력을 높여야 하는 요구가 지속적으로 존재한다. 부채널 공격 및 결함 공격과 같은 공격은 일반적으로 목표에 도달하기 위해 동일한 프로세스를 엄청나게 많이 실행해야 한다.
일부 공격 유형은 예를 들어 레이저 공격을 설정 및 재현하거나, 상관 공격에 대한 여러 실행을 통해 이벤트를 동기화하거나, 타이밍 공격의 타이밍 지속 시간을 측정하기 위해 예측 가능한 타이밍 실행을 활용할 수 있다. 컴퓨터의 모든 논리 연산을 실행하는 데는 시간이 걸리며, 시간은 입력에 따라 달라질 수 있다. 공격자는 각 작업의 시간을 정확하게 측정하여 입력을 거꾸로 작업할 수 있다.
오늘날 예측 가능한 타이밍 실행을 수정하기 위한 여러 가지 역습 솔루션이 존재한다. 예를 들어, 랜덤 클럭 스틸러 솔루션은 클럭 펄스를 제거(또는 스틸)하는 것을 제안한다. 클럭 지터 솔루션은 클럭 주파수를 지속적으로 수정하는 것을 제안한다. 소프트웨어에 의한 무작위 지연 삽입 솔루션은 민감한 코드를 보호해야 할 때 처리 유닛이 예측할 수 없는 수의 명령어를 실행하는 기능을 제안한다.
그러나 이러한 기존 솔루션은 만족스럽지 못하며 단점도 있다. 예를 들어, 랜덤 클럭 스틸러(Random Clock Stealer)와 클럭 지터(Clock Jitter)는 코드 실행의 전부에 또는 상당 부분에, 심지어 민감하지 않은 코드 부분에도 적용된다. 따라서 코드를 실행하는 제품의 성능에 미치는 영향이 높다. 랜덤 클럭 스틸러가 클럭을 멈추면 특징적인 시그니처와 함께 전력 소비가 감소한다. 이는 대응 효율성을 제한한다.
소프트웨어에 의한 랜덤 지연 삽입(Random-delay-inserted-by-software)은 코드에 기능을 추가하여 코드 크기를 늘리는 것을 의미한다. 랜덤 지연은 호출해야 하는 전용 함수에서 구현된다. 호출 및 반환 메커니즘에는 상당한 수의 클럭 주기가 소요된다. 랜덤 지연 기능을 삽입하는 데 드는 타이밍 비용이 높다.
따라서, 이러한 역습 방법은 만족스러울 정도로 효율적이지 않으며, 따라서 추가적인 대안적이고 유리한 해결책이 이들 이전의 역습 방법을 보완하여 구현되는 것이 해당 기술 분야에서 바람직할 것이다.
본 발명은 위에서 언급한 악의적인 공격을 효율적인 방식으로 피하거나 적어도 더 어렵게 만드는 것을 목표로 한다.
본 발명은 집적 회로 제품의 프로그램을 보호하는 방법을 제안하며, 이 방법은:
상기 프로그램의 하나 이상의 원본 op코드를 각각 대체하기 위해 하나 이상의 op코드 블록을 생성하는 단계(205a, 205b) - 상기 op코드 블록은 소정 수치(D)의 허구 op코드와 해당 원본 op코드를 포함하며, 상기 허구 op코드는 그 결과의 고려없이, 그리고 상기 프로그램의 예상 결과에 영향없이 실행될 것이며, 상기 op코드 블록 내 원본 op코드의 상기 수치(D) 및 위치(P)는 상기 집적 회로 제품의 난수 또는 의사 난수 생성기에 의해 무작위적으로 결정됨; 그리고
상기 하나 이상의 op코드 블록을 실행하는 단계(206)를 포함한다.
따라서, 본 발명에서는 집적 회로 제품의 프로세서가 프로그램(예를 들어 민감한 데이터를 처리하는 암호화 프로그램)의 원본 명령어(예를 들어 OR, AND, XOR과 같은 op코드)을 실행할 때, 그 연산 또는 반환 값(가령, 이러한 허구 명령어의 결과가 프로세서의 가비지 레지스터에 저장되는지 않는지)의 고려없이, 그리고 프로그램의 예상 결과에 영향미침없이, 실행되는 기타 명령어(가령, 허구 op코드들)의 실행을 집적 회로 제품의 프로세스가 트리거할 수 있다.
결과적으로, 프로그램의 하나의 원본(또는 실제) op코드에 대해, 이 원본 op코드와 하나 이상의 허구(또는 가짜) op코드를 포함하는 대체 op코드 블록이 생성되고 실행된다. 모든 op코드 블록에 대한 허구 op코드의 수는 난수 생성기를 사용하여 무작위적으로 지정된다. 그리고 모든 op코드 블록에서 원본 op코드를 실행하는 위치(또는 순서)도 무작위적으로 지정된다.
따라서, 본 발명은 공격자가 프로그램의 정규 실행 패턴을 분석하고 보안 위반을 발견하는 것을 방지하기 위해 프로그램의 원본 op코드의 실행 타이밍을 마스킹(또는 숨기기)할 수 있다.
본 발명은 또한 허구의 op코드 수와 원본 op코드의 실행 위치의 무작위화 덕분에 프로그램이 실행될 때마다 원본 op코드의 실행 타이밍이 다르기 때문에 동일한 프로그램의 실행 패턴을 동적으로 변경할 수 있다.
제안된 솔루션은 제품 기능에 영향을 미치지 않을 것이다. 허구 op코드의 성능 소비는 정규 op코드 실행의 경우와 유사하다. 이 방법은 하드웨어(즉, 프로세서 설계)에 의해 구현되지만 소프트웨어(즉, 함수 호출)에 의해 구현되지 않으므로, 본 발명은 제품 성능에 큰 영향을 미치지 않는다.
이 솔루션은 위에서 언급한 기존 대응책과 더욱 호환된다.
따라서, 본 발명에 따른 방법을 사용하면 간단하고 효율적인 방법으로 악의적인 공격의 위험을 줄일 수 있다. 적어도 악의적인 공격자가 수행하기에 공격이 더 복잡하다.
일 예에서, 상기 생성된 허구 op코드 중 적어도 일부는 상기 집적 회로 제품에 미리 저장된 허구의 op코드 목록에서 선택된다.
이를 통해 프로세서는, 예를 들어 디코드 단계동안, 개발자가 프로그램의 어셈블리 코드에 허구 op코드를 수동으로 추가하지 않으면서도 허구 op코드를 자동으로 생성할 수 있다.
일 예에서, 생성된 허구의 op코드 중 적어도 일부는 원본 op코드의 복사본이다.
이 선택적 특징은 구현하기 간단하며, 프로그램의 실제 op코드의 실행 타이밍을 숨기는 동일한 목적을 달성할 수도 있다.
일 예에서, 생성된 허구의 op코드(미리 저장된 목록에서 선택된 것 또는 원본 op코드로부터 복사된 것)와 연관된 피연산자는 난수 또는 의사 난수 생성기에 의해 생성될 수 있다. 대안적으로, 이들이 미리 저장된 목록으로부터 프로세서에 의해 순차적으로 또는 무작위적으로 선택될 수도 있다.
이러한 허구의 피연산자는 허구의 op코드에서 사용되도록 만들어진다. 허구의 피연산자와 op코드를 사용하는 목적은 공격자가 민감한 명령어(op코드 및 데이터)의 실행 타이밍을 거의 예측할 수 없는 방식으로 집적 회로 카드가 민감한 프로그램(또는 적어도 프로그램의 민감한 부분)을 실행할 수 있도록 하는 것이다.
앞서 언급한 것처럼, 허구 op코드의 계산 결과는 실제 op코드의 정상적인(또는 예상되는) 결과에 영향을 주지 않기 위해 가비지 레지스터에 저장되거나 저장되지 않을 수 있다.
일 예에서, 방법은 집적 회로 제품에 미리 저장된 목표 op코드의 목록으로부터 대체될 하나 이상의 원본 op코드를 식별하는 단계를 더 포함한다.
이를 통해 프로세서는 프로그램의 일부(예: 민감한 부분)에 대해서만 어셈블리 코드를 수정할 수 있다. 따라서, 이 방법은 큰 성능 소모를 요구하지 않는 장점이 있다.
본 발명은 또한 본 발명에 따른 집적 회로 제품에서 프로그램을 보호하는 방법을 구현하는 프로세서에 관한 것이다.
본 발명은 또한 본 발명에 따른 프로세서를 포함하는 집적 회로 제품에 관한 것이다.
전술한 목적 및 관련된 목적을 달성하기 위해, 하나 이상의 실시예는 이하에 완전히 설명되고 특히 청구범위에서 지적되는 특징을 포함한다.
다음의 설명과 첨부된 도면은 특정 예시적인 측면을 상세히 설명하고 실시예의 원리가 채용될 수 있는 다양한 방식 중 일부만을 나타낸다. 다른 이점 및 신규한 특징은 도면과 함께 고려될 때 다음의 상세한 설명으로부터 명백해질 것이며, 개시된 실시예는 이러한 모든 측면 및 그 등가물을 포함하도록 의도된다.
도 1은 본 발명의 실시예에 따른 집적 회로 제품과 같은 컴퓨팅 장치의 하드웨어 구조를 개략적으로 나타낸다.
도 2는 본 발명의 실시예에 따른 방법의 흐름도를 개략적으로 나타낸다.
도 3은 본 발명의 실시예에 따른 명령어 블록 내의 명령어에 대한 실행 순서의 다이어그램을 개략적으로 나타낸다.
서로 다른 도면에서도 동일한 요소에는 동일한 참조번호를 부여하였다. 명확성을 위해, 본 발명의 이해에 유용한 요소 및 단계만이 도면에 도시되어 설명될 것이다.
도 1을 참조하면, 집적 회로 또는 스마트 카드와 같은 컴퓨팅 장치는 원본 명령어의 실행 타이밍을 예측불가하게 만들기 위해 랜덤 허구 명령어를 추가함으로써 민감한 프로그램 또는 적어도 프로그램의 민감한 부분의 원본 명령어를 컴퓨팅 장치, 특히 그 CPU로 하여금 수정하게 하여, 물리적 공격(예: 레이저 오류 공격, 부채널 공격, 상관 공격 및 타이밍 공격)으로부터 보호받도록 구성될 수 있다.
본 발명의 일 실시예에서, 컴퓨터 장치(100)는 캐시(102)를 포함하는 CPU(또는 프로세서)(101)를 포함할 수 있다.
캐시(102)는 컴파일러(110)가 프로그램(109)으로부터 변환하는 명령어를 저장하기 위해 코드 캐시(103) 및 데이터 캐시(104)를 포함할 수 있다. 프로세서(101)는 코드 캐시(103)를 사용하여, 현재 실행 중인 응용프로그램에 기초하여, 실행 전에 명령어(동작 코드 또는 op코드)을 저장하고, 데이터 캐시(104)를 사용하여, 적용 가능한 경우, 각 op코드에 대한 데이터 인수(피연산자)를 저장할 수 있다. 프로세서(101)는 명령어 파이프라인 기능을 사용하여 명령어(통상적으로 op코드와 피연산자를 포함함)를 페치하고 이를 코드 캐시(103)에 저장할 수 있다.
컴퓨팅 장치(100)는 또한 RAM(105) 및 ROM(읽기 전용 메모리)(106)을 포함할 수 있다. 또한, 컴퓨팅 장치(200)는 메모리(107)(예를 들어, 하드 디스크 또는 기타 영구 저장소)에 운영 체제 모듈(108) 및 프로그램(109)과, 컴파일러(110)를 저장할 수 있다. 컴파일러(110)는 프로그램(109)을 명령어 목록으로 변환하여 CPU(101)가 명령어를 처리할 수 있도록 한다.
컴파일러(110)는 명령어 목록을 생성한다(예: 프로그램(209)의 코드를 명령어로 변환하여). 명령어는 캐시(102)에 저장되어 CPU(101)가 명령어를 순차적으로 페치하여 실행할 수 있다.
명령어 중 적어도 일부를 실행하기 전에, CPU(101)는 하드웨어 계층에서(예를 들어, CPU 명령어 디코드 모듈을 통해) 새로운 명령어(예를 들어, 허구 op코드)를 생성하여, 아래에서 추가로 설명되는 바와 같이 프로그램(109)의 원본 명령어(예를 들어, 원본 op코드)를 자동으로 수정한다. 운영 체제 모듈(108)은 운영 체제와 관련하여 당업계에 공지된 바와 같이 컴퓨터 장치의 전체 동작을 제어한다.
취약한 코드(109)는 전술한 바와 같은 공격에 취약한 임의의 소프트웨어 애플리케이션 또는 코드 구성요소일 수 있다.
당업자는 다른 유형의 컴퓨팅 장치가 본 발명에 따라 수행되도록 적응될 수 있다는 것을 이해할 것이다. 예를 들어, 컴퓨팅 장치(100)는 대안적으로 이동 전화(또는 다른 이동 단말기), PDA, Motorola 또는 다른 유형의 프로세서를 사용하는 APPLE(R) 컴퓨터, RISC(Reduced Instruction Set Computer), 또는 기타 다른 유형의 컴퓨터 또는 데이터 처리 시스템일 수 있다. 본 명세서에 개시된 장치 및 방법은 고정 크기(RISC 기반 시스템) 및 가변 크기(CISC 기반 시스템) 명령어 세트를 모두 사용하는 장치에 이점을 줄 수 있다.
도 2를 더 참조하면, 본 발명은 공격(특히 타이밍 공격)으로부터 취약한 코드(또는 프로그램)(109)를 보호하기 위한 예시적인 방법(200)을 제공한다. 처음에, 사용자 또는 자동화된 프로세스(예를 들어, 다른 프로그램)는 컴퓨팅 장치(100)(구체적으로, 프로세서(101))에게 프로그램(109)을 실행하도록 지시한다. 프로그램을 실행하라는 지시를 받으면, 컴파일러(110)는 프로그램(109)을 명령어 목록으로 변환한다. CPU(101)는 명령어를 순차적으로 페치하기 시작하고, 페치한 명령어를 코드 캐시(103)에 저장하고, 페치된 데이터를 데이터 캐시(104)에 저장한다.
현재 예에서, CPU(101)가 페치된 명령어 I(즉, 프로그램의 원본 명령어)를 실행(201)할 때, CPU(101)는 CPU(101)(예를 들어, CPU(101)의 사전 결정된 레지스터 또는 CPU의 다른 내부 메모리)에 기-저장된 목표 명령어들의 목록에 명령어 I(예를 들어, OR와 같은 op코드)가 존재하는지 여부를 식별한다(202). 이 목표 명령어 목록은 타이밍 공격과 같은 공격으로부터 보호되어야 하는 합리적인 명령어(예: mov, store, xor, 등)를 CPU(101)에 표시하는 데 사용된다.
CPU(101)에 이러한 목표 명령어 목록을 미리 저장하면 전체 프로그램이 아닌 프로그램(109)의 하나 이상의 중요한 부분에만 본 발명의 방법을 적용할 수 있다. 따라서 성능과 보호 사이에서 더 나은 균형을 이룰 수 있다.
변형예에서는 목표 명령어 목록이 생략될 수 있다는 것을 당업자라면 쉽게 이해할 수 있다는 점에 유의해야 한다. 이 경우, CPU(101)는 프로그램의 모든 명령어에 본 발명의 보호 방법을 적용할 수 있다. 이는 전체 프로그램 보호가 중요한 경우 유용할 수 있다. 다른 예에서, 개발자는 프로그램의 민감한 부분을 수동으로 식별하고, (컴파일러가 새 방법을 구현하기 위해 생성된, 가령, secure_mov, secure_store, secure_xor 등과 같은) 특정 명령어를 사용하여 허구 명령어를 추가하도록 CPU(101)에 지시할 수 있다. 따라서 이러한 선택적이고 대안적인 특징은 본 발명의 구현을 위한 소정의 유연성을 제공할 수 있다.
선택적 단계 202 이후, 명령어 I가 미리 저장된 목표 명령어 목록에서 CPU(101)에 의해 식별되지 않으면, CPU(101)는 명령어 I를 실행한다(203). 즉, 명령어는 민감하지 않다고 판단되었기 때문에 CPU(101)의 어떠한 보호 조치 없이 실행된다.
그렇지 않고, 명령어 I가 미리 저장된 목표 명령어 목록에서 CPU(101)에 의해 식별되면, CPU(101)는 현재 예에서, CPU(101)에(예를 들어, CPU의 미리 정해진 레지스터에) 미리 저장된 허구 명령어 목록이 존재하는지 결정할 수 있다(204). 또는, 미리 저장된 허구 명령어 목록이 비어 있는지 여부를 CPU가 판단할 수 있다(204).
허구 명령어 목록이 존재하거나 비어 있지 않다고 결정되면(204), CPU(101)는 현재 예에서 목록으로부터 D개의 허구 명령어(예: XOR, AND, OR와 같은 op코드)를 선택하여, 선택된 허구 명령어와 명령어 I로 구성된 명령어 블록을 생성할 수 있다(205a). 이 명령어 블록은 원본 명령어 I를 대체한다.
따라서, CPU(101)는 공격을 방지하고자 명령어 I의 실행 타이밍을 숨기기 위해 명령어 I만을 실행하는 대신 생성된 명령어 블록을 실행할 것이다(206).
이 예에서, 숫자 D는 예를 들어 CPU(101)의 레지스터 또는 숫자 D를 결정하여 CPU에 전송하는 외부 저장 장치(예를 들어 주변 장치)에 구현되는 난수 또는 의사 난수 생성기에 의해 결정될 수 있다. 따라서, 보호될 각각의 원본 명령어 I에 대해 CPU(101)에 의해 사용되는 허구 명령어의 수는 상이할 수 있다. 숫자 D는 성능 소비를 제어하기 위해 제한된 범위 내에 있도록 CPU(101)에 의해 정의될 수 있다.
CPU(101)에 의한 허구 명령어의 선택은 랜덤 방식일 수 있다.
허구 명령어와 함께 사용되는 데이터(허구 데이터라고도 함)는 난수 또는 의사 난수 생성기에 의해 생성될 수도 있다.
명령어 블록 내 허구 명령어의 위치 0, …, P-1, P+1, …, D-1 중에서 원본 명령어 I를 실행하기 위한 위치 P(또는 0과 D 사이의 클럭 사이클)도 난수 또는 의사 난수 생성기에 의해 무작위적으로 결정될 수 있다. 즉, 원본 명령어 I는 P번째 클럭 사이클 동안 한 번에 실제(또는 예상) 데이터(예: 프로그램(109)에 의해 지정된 피연산자)와 함께 CPU(101)에 의해 실행된다. 추가된 허구 명령어는 0번째, …, P-1번째, P+1번째, …, D-1번째 클럭 사이클 동안 각각 D회 가짜(또는 허구) 데이터(예: 난수 생성기에 의해 생성된 피연산자)와 함께 CPU(101)에 의해 실행된다.
위에서 언급한 숫자 D, 위치 P 및 기타 매개 변수의 무작위화를 통해, CPU가 단순히 명령어 I 대신 명령어 블록을 실행할 때 실제 명령어 I의 실행 타이밍을 예측하는 것이 매우 어렵고 심지어 불가능할 수도 있다. .
한편, 본 발명은 CPU의 명령어 디코딩 거동을 수정함으로써 하드웨어 수준에서 구현되므로 기존 소프트웨어 수준의 대응 솔루션에 비해 더 높은 컴퓨팅 성능을 허용한다. 또한, 본 발명의 솔루션은 프로그램(109) 자체에 대한 어떠한 수정도 요구하지 않는다. 허구 명령어는 CPU(101)의 디코딩 단계에서 추가된다.
CPU(101)가 미리 결정된 허구 명령어 목록이 존재하지 않거나 비어 있다고 결정하는 경우(204), CPU(101)는 여전히 원본 명령어 I의 복사본을 직접 허구 명령어로 사용하여 허구 명령어의 개수 D를 생성할 수 있다(205b). 허구 명령어 I 중 실제 명령어 I의 실행 위치(또는 순서) P는 무작위적으로 결정될 수 있다. 허구 피연산자가 이러한 허구 명령어와 함께 사용될 수 있다. 허구 명령어의 결과는 CPU(101)에 의해 고려되지 않으며, 심지어 저장되지도 않는다.
그런 다음 CPU(101)는 D+1개의 명령어 I로 구성된 명령어 블록을 실행한다(206). 여기서 원본 명령어 I는 P번째 클럭 사이클 동안 한 번에 예상 데이터와 함께 CPU(101)에 의해 실행된다. 추가된 허구 명령어(원본 명령어 I와 동일)는 0번째, …, P-1번째, P+1번째, …, D-1번째 클럭 사이클 동안 각각 D회 가짜(또는 허구) 데이터(예: 난수 생성기에 의해 생성된 피연산자)와 함께 CPU(101)에 의해 실행된다.
당업자는 일 변형에서 본 발명의 방법이 미리 저장된 허구 명령어 목록의 존재를 체크하는 단계(204)를 생략할 수 있다는 것을 쉽게 이해할 수 있다는 점에 유의해야 한다. 이 경우, CPU(101)는 명령어 I가 보호되어야 한다고 결정한 후 명령어 I를 미리 결정된 허구 명령어(원본 명령어 I와 동일하거나 다를 수 있음)로 자동으로 대체할 수 있다.
이제 우리는 도 3을 참조하여, 개략도는 원본 명령어를 대체하기 위해 CPU(101)에 의해 생성된 명령어 블록 내의 명령어에 대한 실행 순서/타이밍을 예시한다.
원본 명령어 I를 보호하기 위해 추가되는 허구 명령어의 개수 D와 원본 명령어 I의 실행 위치 P는 난수 또는 의사 난수 생성기에 의해 결정될 수 있다. 지속시간 D는 정의된 제한된 범위 내에 있을 수 있다. 위치 P는 0부터 D-1까지의 범위에 있다. 실제 명령어 I는 P 클럭 사이클에서 실행된다. 클럭 사이클 0, .., P-1, P+1, ..,D 동안 허구 명령어는 각각 난수 또는 의사 난수 데이터로 실행될 수 있다. 이러한 허구 명령어의 결과는 가비지 레지스터에 저장되거나 저장되지 않는다.
위의 상세한 설명에서, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 보여주는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있도록 충분히 상세하게 설명된다. 그러므로, 상기 상세한 설명은 제한적인 의미로 받아들여져서는 안 되며, 본 발명의 범위는 청구범위에 부여된 등가물 전체와 함께 적절하게 해석된 첨부된 청구범위에 의해서만 정의된다.

Claims (7)

  1. 집적 회로 제품의 프로그램을 보호하기 위한 방법에 있어서,
    상기 프로그램의 하나 이상의 원본 op코드를 각각 대체하기 위해 하나 이상의 op코드 블록을 생성하는 단계(205a, 205b) - 상기 op코드 블록은 소정 수치(D)의 허구 op코드와 해당 원본 op코드를 포함하며, 상기 허구 op코드는 그 결과의 고려없이, 그리고 상기 프로그램의 예상 결과에 영향없이 실행될 것이며, 상기 op코드 블록 내 원본 op코드의 상기 수치(D) 및 위치(P)는 상기 집적 회로 제품의 난수 또는 의사 난수 생성기에 의해 무작위적으로 결정됨; 그리고
    상기 하나 이상의 op코드 블록을 실행하는 단계(206)를 포함하는, 방법.
  2. 제1항에 있어서, 상기 생성된 허구 op코드 중 적어도 일부는 상기 집적 회로 제품에 미리 저장된 허구 op코드 목록으로부터 선택되는(205a), 방법.
  3. 제1항에 있어서, 상기 생성된 허구 op코드의 적어도 일부는 원본 op코드의 복사본(205b)인, 방법.
  4. 제1항에 있어서,
    상기 집적 회로 제품에 미리 저장된 목표 op코드의 목록으로부터 대체될 상기 하나 이상의 원본 op코드를 식별하는 단계(204)를 더 포함하는, 방법.
  5. 제1항에 있어서, 상기 허구 op코드와 연관된 피연산자는 상기 난수 또는 의사 난수 생성기에 의해 생성되는, 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 따른 프로그램을 보호하기 위한 방법을 구현하는 프로세서.
  7. 제6항에 따른 프로세서를 포함하는 집적 회로 제품.
KR1020237035585A 2021-04-19 2022-04-15 집적회로에서 프로그램을 보호하는 방법 KR20230158569A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP21305512.2 2021-04-19
EP21305512.2A EP4080386A1 (en) 2021-04-19 2021-04-19 Method to protect program in integrated circuit
PCT/EP2022/060195 WO2022223490A1 (en) 2021-04-19 2022-04-15 Method to protect program in integrated circuit

Publications (1)

Publication Number Publication Date
KR20230158569A true KR20230158569A (ko) 2023-11-20

Family

ID=76796913

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237035585A KR20230158569A (ko) 2021-04-19 2022-04-15 집적회로에서 프로그램을 보호하는 방법

Country Status (4)

Country Link
EP (2) EP4080386A1 (ko)
JP (1) JP2024514909A (ko)
KR (1) KR20230158569A (ko)
WO (1) WO2022223490A1 (ko)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6643775B1 (en) * 1997-12-05 2003-11-04 Jamama, Llc Use of code obfuscation to inhibit generation of non-use-restricted versions of copy protected software applications
WO2006115219A1 (ja) * 2005-04-21 2006-11-02 Matsushita Electric Industrial Co., Ltd. プログラム難読化装置及び難読化方法
US7664937B2 (en) * 2007-03-01 2010-02-16 Microsoft Corporation Self-checking code for tamper-resistance based on code overlapping
US9760736B2 (en) * 2015-09-29 2017-09-12 International Business Machines Corporation CPU obfuscation for cloud applications

Also Published As

Publication number Publication date
EP4327216A1 (en) 2024-02-28
EP4080386A1 (en) 2022-10-26
WO2022223490A1 (en) 2022-10-27
JP2024514909A (ja) 2024-04-03

Similar Documents

Publication Publication Date Title
Kocher et al. Spectre attacks: Exploiting speculative execution
Van Bulck et al. Nemesis: Studying microarchitectural timing leaks in rudimentary CPU interrupt logic
EP3682362B1 (en) Call path dependent authentication
US9767284B2 (en) Continuous run-time validation of program execution: a practical approach
US7134003B2 (en) Variable cycle instruction execution in variable or maximum fixed cycle mode to disguise execution path
Irazoqui et al. MASCAT: Stopping microarchitectural attacks before execution
Corliss et al. Using DISE to protect return addresses from attack
US11947663B2 (en) Control flow protection based on phantom addressing
US11307856B2 (en) Branch target variant of branch-with-link instruction
KR20230158569A (ko) 집적회로에서 프로그램을 보호하는 방법
Kumar et al. Protection against buffer overflow attacks through runtime memory layout randomization
Provelengios et al. A hardware monitor to protect Linux system calls
Zhang et al. RAGuard: An Efficient and User-Transparent Hardware Mechanism against ROP Attacks
Arnautov et al. Controlfreak: Signature chaining to counter control flow attacks
Shao et al. Security protection and checking in embedded system integration against buffer overflow attacks
de Oliviera et al. Reverse branch target buffer poisoning
de Clercq Hardware-supported software and control flow integrity
Wichelmann et al. Obelix: Mitigating Side-Channels through Dynamic Obfuscation
Yavarzadeh et al. Pathfinder: High-Resolution Control-Flow Attacks Exploiting the Conditional Branch Predictor
Buckwell et al. Execution at RISC: Stealth JOP Attacks on RISC-V Applications
Cui et al. QuanShield: Protecting against Side-Channels Attacks using Self-Destructing Enclaves
Van Cleemput Compiler strategies for mitigating timing side channel attacks
Murase Eliminating Cell Broadband Engine TM DMA Buffer Overflows
JP2010282651A (ja) データ処理システムにおける処理動作マスキング
GB2396229A (en) Processor to register writing masking by writing to normal register or to a trash register