KR20200105481A - 퍼블릭 컴퓨터에서 암호화된 데이터로 작동하는 코드를 안전하게 실행하는 기술 - Google Patents

퍼블릭 컴퓨터에서 암호화된 데이터로 작동하는 코드를 안전하게 실행하는 기술 Download PDF

Info

Publication number
KR20200105481A
KR20200105481A KR1020207019453A KR20207019453A KR20200105481A KR 20200105481 A KR20200105481 A KR 20200105481A KR 1020207019453 A KR1020207019453 A KR 1020207019453A KR 20207019453 A KR20207019453 A KR 20207019453A KR 20200105481 A KR20200105481 A KR 20200105481A
Authority
KR
South Korea
Prior art keywords
bit
gate
gates
data
reversible
Prior art date
Application number
KR1020207019453A
Other languages
English (en)
Other versions
KR102664551B1 (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 KR20200105481A publication Critical patent/KR20200105481A/ko
Application granted granted Critical
Publication of KR102664551B1 publication Critical patent/KR102664551B1/ko

Links

Images

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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • 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
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N10/00Quantum computing, i.e. information processing based on quantum-mechanical phenomena
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/01Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • 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
    • 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
    • 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/0631Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
    • 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/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • 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/2125Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/16Obfuscation or hiding, e.g. involving white box

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Condensed Matter Physics & Semiconductors (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Storage Device Security (AREA)

Abstract

퍼블릭 리소스상에서 암호화된 데이터의 안전한 처리를 위한 기술은, 복호화를 위한 제1 세그먼트, 복호화된 데이터상에서 작동하기 위한 제2 세그먼트 및 결과 데이터를 암호화하기 위한 제3 세그먼트를 포함하는 가역적 q-비트 게이트 시퀀스를 나타내는 제1 데이터를 수신하는 단계를 포함한다. 제2 데이터는 입력 N-비트 워드의 적어도 하나의 공유 비트상에서 동작하는 2개의 게이트의 제1 시퀀스를 동일한 출력 N-비트 워드를 생성하는 하나 이상의 게이트의 상이한 제2 시퀀스로 대체하기 위한 규칙을 나타낸다. 제2 데이터는 다음을 전파하는데 사용된다: 제1 세그먼트로부터 제2 세그먼트까지의 거리 또는 그 이후의 게이트; 및, 제3 세그먼트로부터 제2 세그먼트까지의 거리 또는 그 이전의 게이트. 이것은 가역성 게이트의 난독화된 시퀀스를 생성한다. 난독화된 게이트 시퀀스를 기반으로 난독화된 명령어는 퍼블릭 리소스로 전송된다.

Description

퍼블릭 컴퓨터에서 암호화된 데이터로 작동하는 코드를 안전하게 실행하는 기술
[0001] 클라우드 데이터 스토리지 및 클라우드 컴퓨팅과 같은 강력한 퍼블릭 리소스(public resource)를 사용하여 데이터를 암호화하고 암호화된 데이터를 저장함으로써 데이터를 퍼블릭(public)으로부터 기밀로 유지하는 것이 편리할 때가 있다. 그러나 저장된 데이터의 양이 매우 많은 경우, 예를 들어 테라비트(Terabit, Tb, 1 Tb = 1012 비트) 단위인 경우, 암호화된 데이터의 많은 부분이 처리를 위해 로컬 보안 프로세서(local secure processor)로 반환되어야 하는 경우 일부 효율성이 손실된다. 마찬가지로, 작업에 엄청난 양의 컴퓨팅 리소스가 포함되는 경우(상대적으로 적은 데이터에서도) 비교적 제한된 컴퓨팅 성능의 안전한 컴퓨터 보다는 클라우드 프로세서와 같은 강력한 퍼블릭 리소스에서 실행하는 것이 유리하다. 그러나 데이터를 복호화하기 위해 강력한 퍼블릭 리소스의 프로세서는 암호화 방법을 노출하고 이면의 데이터를 드러낸다.
요약
[0002] 보안되지는 않지만 강력한 퍼블릭 리소스에서 암호화된 데이터를 안전하게 처리하기 위한 기술이 제공된다.
[0003] 제1 세트의 구체예들에서, 제1(예를 들어, 로컬 및 보안) 프로세서상에서 실행되는 방법은 복호화된 데이터(decrypted data)를 생성하기 위해 순열 암호화된(permutation encrypted data) 데이터를 복호화하기 위한 제1 세그먼트, 하나 이상의 결과의 복호화된 데이터(resulting decrypted data)를 생성하기 위해 복호화된 데이터에 대해 동작하기 위한 제2 세그먼트, 및 순열 암호화된 결과 데이터(permutation encrypted resulting data)를 생성하기 위해 순열 암호화를 사용하여 결과의 복호화된 데이터를 암호화하기 위한 제3 세그먼트를 포함하는 가역적 q-비트 게이트의 시퀀스를 나타내는 제1 데이터를 수신하는 단계를 포함한다. 이 방법은 또한 입력 N-비트 워드의 적어도 하나의 공유 비트상에서 동작하는 2개의 q-비트 게이트의 제1 시퀀스를 동일한 출력 N-비트 워드를 생성하는 하나 이상의 q-비트 게이트의 상이한 제2 시퀀스로 교체하기 위한 규칙을 나타내는 컴퓨터 판독 가능 매체 제2 데이터에 저장하는 단계를 포함한다. 또한, 방법은 가역적(reversible) q-비트 게이트의 난독화된(obfuscated) 시퀀스를 생성하기 위해 제1 세그먼트로부터 게이트 거리의 수 J로의 적어도 하나의 q-비트 게이트를 제2 세그먼트 또는 그 이후에 대한 q-비트 게이트 내로 및 제3 세그먼트로부터 게이트 거리의 수 K로의 적어도 하나의 q-비트 게이트를 제2 세그먼트 또는 이전의 q-비트 게이트 내로 전파하기 위하여 제2 데이터를 사용하는 단계를 포함한다. 방법은 가역화된 q-비트 게이트의 난독화된 시퀀스에 기반한 난독화된 명령을 실행을 위하여 제2 프로세서(예를 들어, 비보안(unsecured) 또는 클라우드 프로세서 또는 상이한 액세스를 가지는 프로세서 파티션)에 보내는 것을 더 포함한다.
[0004] 제1 세트의 일부 구체예들에서, 방법은 또한 각 코드 명령을 제2 프로세서에 의해 실행가능한 형태로 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트에 연관시키는 제3 데이터를 컴퓨터 판독 가능한 매체 상에 저장하는 단계를 포함한다. 이들 구체예들에서, 방법은 또한 가역적 q-비트 게이트의 난독화된 시퀀스를 제2 프로세서에 의해 실행 가능한 형태로 난독화된 코드 명령으로 변환하기 위하여 제3 데이터를 사용하는 단계를 포함한다. 그 다음, 난독화된 명령을 전송하는 것은 난독화 코드 명령(instruction)을 제2 프로세서에 의해 실행 가능한 형태로 전송하는 것을 포함한다.
[0005] 제1 세트의 일부 구체예들, 방법은 또한 제2 프로세서에 의해 실행 가능한 형태의 각각의 코드 명령을 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트에 연관시키는(relating) 제3 데이터를 컴퓨터 판독 가능 매체 상에 저장하는 단계를 포함한다. 이들 구체예들에서, 제1 데이터를 수신하는 단계는 다음의 단계들을 포함한다: 암호화된 데이터에서 동작(operating)하여 하나 이상의 결과의 복호화된 데이터를 생성하기 위해 제2 프로세서에 의해 실행 가능한 형태로 코드 명령을 수신하는 단계; 및 암호화된 데이터에서 동작하여 하나 이상의 결과의 복호화된 데이터를 생성하기 위하여 제2 프로세서에서 실행 가능한 코드 명령을 하나 이상의 결과의 복호화된 데이터를 생성하기 위하여 암호화된 데이터 상에서 동작하기 위한 가역적 q-비트 게이트 시퀀스로 변환하는 단계.
[0006] 제1 세트의 일부 구체예들에서, 방법은 또한 컴퓨터 판독 가능 매체에 출력 N-비트 워드를 생성하기 위해 입력 N-비트 워드 상에서 동작하는 가역적 q-비트 게이트의 하나 이상의 시퀀스 각각을 동일한 출력 N-비트 워드를 생성하는 하나 이상의 k-비트 게이트(3 < k ≤ N)로 대체하기 위한 규칙을 가리키는 융합 데이터를 저장하는 단계를 포함한다. 이들 구체예들에서, 방법은 가역적 q-비트 게이트의 난독화된 시퀀스의 하나 이상의 가역적 q-비트 게이트의 특정 시퀀스를 그 특정 시퀀스를 대체하는 k-비트 게이트로 대체하는 위한 융합데이터를 사용하는 단계를 포함한다.
[0007] 이들 구체예들의 일부에서, 방법은 또한 제2 프로세서에 의해 동작 가능한 폼의 각각의 코드 명령을 N-비트 워드 상에서 동작하는 하나 이상의 가역적 q-비트 게이트로 연관시키는 제3 데이터를 컴퓨터 판독 가능한 매체에 저장하는 단계를 포함한다. 이들 구체예들에서, 방법은 컴퓨터 판독 가능 매체 상에, 하나 이상의 k-비트 게이트 각각을 제2 프로세서에 대한 하나 이상의 코드 명령과 관련시키는 융합 코드 데이터를 저장하는 단계를 더 포함한다. 이들 구체예들에서, 방법은 다음 단계를 더 포함한다: k-비트 게이트를 난독화된 코드 명령의 적어도 일부로 변환하기 위해 융합 코드 데이터(fusion code data)를 사용하는 단계; 및 제3 데이터를 사용하여 가역적 q-비트 게이트의 난독화된 시퀀스의 임의의 나머지 가역적 q-비트 게이트로 변환하는 단계. 이들 구체예들에서, 난독화 명령을 전송하는 단계는 난독화 코드 명령을 제2 프로세서에 의해 실행 가능한 형태로 전송하는 단계를 더 포함한다.
[0008] 제1 세트의 일부 구체예들에서, J 및 K 각각은 N보다 크다.
[0009] 제1 세트의 일부 구체예들에서, 각각의 가역적 q-비트 게이트는 단일 타겟 비트(single target bit) 및 q-1 제어 비트들에서의 값과 q-1 제어 비트들로 입력되는 값들에 기초하여 단일대상 비트에 대한 값을 결정하는 q-1 제어 비트들(q-1 control bit)을 포함하는 제어 비트이다.
[0010] 제1 세트의 일부 구체예들에서, q ∈ {1, 2, 3})이다.
[0011] 제1 세트의 일부 구체예들에서, 제2 프로세서는 제1 프로세서와 상이하다. 제1 세트의 일부 구체예들에서, 제2 프로세서로의 액세스는 제1 프로세서로의 액세스와 상이하다.
[0012] 다른 세트의 구체예들에서, 컴퓨터 판독 가능 매체 또는 시스템은 상기 방법의 하나 이상의 단계를 수행하도록 구성된다.
[0013] 또 다른 양태, 특징 및 장점은 본 발명을 수행하기 위해 고려되는 최상의 모드를 포함하여 다수의 특정 구체예 및 구현들에 대한 간단한 설명으로써 다음의 상세한 설명으로부터 명백하다. 다른 구체에들은 또한 다른 및 상이한 특징 및 이점을 가질 수 있으며, 그의 몇몇 세부 사항은 모두 본 발명의 사상 및 범위를 벗어나지 않고 다양한 명백한 측면에서 수정될 수 있다. 따라서, 도면 및 설명은 본질적으로 예시적인 것으로 간주되며 제한적인 것으로 간주되지 않아야 한다.
[0014] 구체예들은 유사한 참조 번호가 유사한 요소를 지칭하고 다음과 같이 첨부 도면의 도면에서 제한이 아닌 예로서 예시된다.
[0015] 도 1은 퍼블릭 리소스에 저장된 암호화된 데이터를 사용하기 위한 예시적인 시스템을 도시하는 블록도(block diagram)이다.
[0016] 도 2a는 일 구체예에 따른, N-비트 워드상에서 동작하는 예시적인 3 비트 게이트를 도시하는 블록도이다.
[0017] 도 2b는 일 구체예에 따른, N 비트 워드상에서 동작하는 예시적인 한 쌍의 3-비트 게이트를 도시하는 블록도이다.
[0018] 도 2c는 일 구체예에 따른, 도2b에서 3-비트 게이트에 의해 생성된 결과와 동일한 결과를 생성하는 일련의 3-비트 게이트들의 예를 도시하는 블록도이다.
[0019] 도 2d는 일 구체예에 따른, 퍼블릭 리소스상에 저장된 퍼블릭 리소스 암호화 데이터(public resource encrypted data) 상에서 안전하게 처리하기 위한 예시적인 시스템을 나타내는 블록도이다.
[0020] 도 3은 일 구체예에 따른, 퍼블릭 리소스에 저장된 퍼블릭 리소스 암호화 데이터상에서 안전하게 처리하기 위한 예시적인 방법을 나타내는 흐름도이다.
[0021] 도 4a 내지 도 4c는 일 구체예에 따른, 특정 입력 워드 x가 주어진 특정 출력 워드 y를 생성하기 위해 7-비트 워드상에서 동작하는 일련의 게이트로서 난독화되는 예시적인 프로그램을 도시하는 블록도이다.
[0022] 도 5는 일 구체예에 따른, 도 3의 방법의 단계에서 사용되는 것과 같이 도 1의 방법의 단계에서 사용되는 것과 같이, 제2의 3-비트 게이트를 지나 제1의 3-비트 게이트를 전파하기 위한 예시적인 방법을 도시하는 흐름도이다.
[0023] 도 6은 일 구체예에 따른, 3 비트 모두에서 충돌하는 예시적인 한 쌍의 3-비트 게이트를 도시하는 블록도이다.
[0024] 도 7은 일 구체예에 따른, 2 비트에서 충돌하는 예시적인 한 쌍의 3-비트 게이트를 도시하는 블록도이다.
[0025] 도 8은 일 구체예에 따른, 2 비트에서 충돌하는 예시적인 한 쌍의 3-비트 게이트를 도시하는 블록도이다.
[0026] 도 9는 일 구체예에 따른, 3-비트 게이트가 2 비트에서 충돌할 때 디브리 게이트(debris gate)를 생성하는데 유용한 예시적인 브레이딩 순열(permutation)을 나타내는 블록도이다.
[0027] 도 10은 일 구체예에 따른, 3-비트 게이트가 2 비트에서 충돌할 때 생성되는 디브리 게이트 예시적인 세트를 도시하는 블록도이다.
[0028] 도 11은 일 구체예에 따른, 3-비트 게이트가 2 비트에서 충돌할 때 디브리 게이트를 생성하는데 유용한 테이블을 구축하기 위한 예시적인 조건을 도시하는 블록도이다.
[0029] 도 12는 일 구체예에 따른, 3-비트 게이트가 2 비트에서 충돌할 때 일부 디브리 게이트를 결정하기 위해 분해된(decomposed) 예시적인 4-비트 연산자(operator)를 도시하는 블록도이다.
[0030] 도 13a는 일 구체예에 따른, 3-비트 게이트가 2 비트에서 충돌할 때 디브리 게이트 c, d, e 및 f의 예시적인 세트를 나타내는 블록도이다.
[0031] 도 13b는 일 구체예에 따른, 3-비트 게이트가 2 비트에서 충돌할 때 디브리 게이트 c, d, e 및 f에 대한 예시적인 진리표(truth table) 세트를 도시하는 표이다.
[0032] 도 14는 일 구체예에 따른, 3-비트 게이트가 1 비트에서 충돌할 때 스왑 게이트를 도입하는 8 가지 예시적인 방법을 도시하는 블록도이다.
[0033] 도 15는 일 구체예에 따른, 3-비트 게이트가 1 비트에서 충돌할 때 사소한(nontrivial) 디브리 게이트를 생성하는 예시적인 단계 세트를 도시하는 블록도이다.
[0034] 도 16 내지 도 17은 일 구체예에 따른, 게이트를 충돌시킴으로써 프로그램을 더 난독화하기 위한 중간 암호화(encryption) 및 복호화(decryption) 단계의 도입을 나타내는 블록도이다.
[0035] 도 18은 일 구체예에 따른, 난독화된 프로그램을 생성하기 위한 3개의 예시적인 단계 세트를 도시하는 블록도이다.
[0036] 도 19는 일 구체예에 따른, 프로그램을 더 난독화하기 위해 3-비트 게이트를 더 많은 비트의 복수의 게이트로 융합하는 예시적인 블록도이다.
[0037] 도 20은 일 구체예에 따른, 2-비트 곱셈 함수 f에 대한 3-비트 게이트 시퀀스의 예를 도시하는 블록도이다.
[0038] 도 21은 일 구체예에 따른, 도 20의 함수 f에 중간 암호화 및 복호화 블록의 삽입의 예를 도시하는 블록도이다.
[0039] 도 22는 일 구체예에 따른, 다중 중간 암호화로 2-비트 곱셈 함수 f를 난독화하기 위한 예시적인 단계들을 도시하는 블록도이다.
[0040] 도 23a 내지 도 23c는 일 구체예에 따른, 암호화/복호화 게이트의 함수 코드(function code)로의 이동 거리의 예를 도시하는 블록도이다.
[0041] 도 24a 내지 도 24c는 일 구체예에 따른, 3-비트 게이트 대신 사용되는 예시적인 제어 게이트를 도시하는 블록도이다.
[0042] 도 24d는 일 구체예에 따른, 융합 또는 충돌로 인한 예시적인 6-비트 제어 게이트를 도시하는 블록도이다.
[0043] 도 25는 일 구체예에 따른, 3-비트 게이트 대신에 사용되는 제어 게이트의 예시적인 간략화된 개략도(schematic representation)를 도시하는 블록도이다.
[0044] 도 26은 일 구체예에 따른, 도 3의 방법의 단계에서 사용되는 것과 같이, 제2 제어 q-비트 게이트를 지나 제1 제어 q-비트 게이트를 전파하기 위한 예시적인 방법을 도시하는 흐름도이다.
[0045] 도 27a 내지 도 27d는 일 구체예에 따른, 제어 게이트와 공유 타겟(shared target) 또는 제어 비트와의 충돌의 예를 도시하는 블록도이다.
[0046] 도 28a 및 도 28b는 일 구체예에 따른, 상이한 비중첩(non-overlapping) 제어 비트와 제어 게이트의 충돌의 예를 도시하는 블록도이다.
[0047] 도 29a 내지 도 29d는 일 구체예에 따른, 하나의 게이트의 헤드(head)의 하나의 비트가 다른 게이트의 테일(tail)의 하나의 비트와 중첩되는 제어 게이트의 예시적인 충돌을 도시하는 블록도이다.
[0048] 도 30a 내지 도 30d는 일 구체예에 따른, 양 게이트의 헤드의 하나의 비트가 다른 게이트의 테일에서 하나의 비트와 중첩되는 제어 게이트의 예시적인 충돌을 도시하는 블록도이다.
[0049] 도 31은 일 구체예에 따른, 간단한 함수를 위한 난독화된 프로그램을 생성하기 위한 예시적인 단계 세트를 도시하는 블록도이다.
[0050] 도 32는 본 발명의 구체예가 구현될 수 있는 예시적인 컴퓨터 시스템을 도시하는 블록도이다.
[0051] 도 33은 본 발명의 구체예가 구현될 수 있는 예시적인 칩셋(chip set)을 도시하는 블록도이다.
예를 들어 클라우드와 같은 퍼블릭 리소스에서 우수한 처리 능력, 효율성 또는 복원력(resilience), 또는 일부 조합을 이용하기 위해 퍼블릭 리소스에서 암호화된 데이터를 안전하게 처리하기 위한 방법 및 시스템이 설명된다. 다음의 설명에서, 설명의 목적으로, 본 발명의 철저한 이해를 제공하기 위해 다수의 특정 세부 사항이 설명된다. 그러나, 본 발명이 이들 특정 세부 사항 없이도 실시될 수 있다는 것이 당업자에게 명백할 것이다. 다른 경우에, 잘 알려진 구조 및 장치는 본 발명을 불필요하게 모호하게 하는 것을 피하기 위해 블록도 형태로 도시된다.
[0053] 넓은 범위를 나타내는 수치 범위 및 파라미터가 근사치임에도 불구하고, 특정 비제한적 예에서 제시된 수치는 가능한 한 정확하게 보고된다. 그러나 모든 수치에는 본질적으로 이 문서 작성 당시의 각 테스트 측정에서 발견된 표준 편차로 인해 발생하는 특정 오류가 포함되어 있다. 또한, 문맥에서 달리 명확하지 않으면, 본 명세서에 제시된 수치는 최소 유효 숫자로 주어진 내포된 정밀도를 갖는다. 따라서 값 1.1은 1.05에서 1.15 사이의 값을 내포한다. "약(about)"이라는 용어는 주어진 값을 중심으로 더 넓은 범위를 나타내기 위해 사용되며, 달리 문맥으로부터 명확하지 않는 한, "약 1.1"과 같이 최소 유효 자릿수(least significant digit) 주위의 더 넓은 범위는 1.0 내지 1.2의 범위를 의미한다. 최소 유효 자릿수가 명확하지 않은 경우 "약"이라는 용어는 2의 배율(factor)을 의미한다. 예를 들어 "약 X"는 0.5X ~ 2X 범위의 값을 의미하고, 약 100은 50 ~ 200의 범위의 값을 의미한다. 또한, 여기에 개시된 모든 범위는 그 안에 포함된 임의의 및 모든 하위 범위를 포괄하는 것으로 이해되어야 한다. 예를 들어, "10 미만"의 범위는 최소값 0(포함)과 최대값 10 사이의 임의의 또는 모든 하위범위들을 포함한다. 즉, 0보다 크거나 같은 최소값 및 10보다 작거나 같은 최대값을 가지는 임의의 또는 모든 범위, 예를 들어 1 내지 4와 같은 하위 범위들을 포함한다.
[0054] 본 발명의 일부 구체예는 특정 예시적인 기능 및 예시적인 3-비트 게이트 및 한 쌍의 3 비트 게이트를 대체하기 위한 예시적인 옵션과 관련하여 아래에 설명된다. 그러나, 본 발명은 이러한 맥락으로 제한되지 않는다. 다른 구체예들에서, 본 명세서에 설명된 방법들을 따르는 다른 기능들 및 q-비트 게이트 및 대체(replacement) 전략이 사용된다.
1. 개요
[0055] 도 1은 퍼블릭 리소스에 저장된 암호화된 데이터를 사용하기 위한 예시적인 시스템을 나타내는 블록도이다. 암호화된 데이터(140)는 하나 이상의 비보안 저장 장치(188)에 저장된다. 예시된 구체예들에서, 암호화된 데이터(140)는 순열 암호화(permutation encryption)를 사용하여 암호화된다. 순열 암호화에서, 순열 키(permutation key)라고 하는 규정된 방식으로 평문(plaintext)에서 비트의 위치 및 값을 암호문(ciphertext)의 위치 및 값으로 변경함으로써 평문 N-비트 워드(plaintext N-bit word)가 암호문 N-비트 워드(ciphertext N-bit word)로 변경된다. 암호문은 순열 암호화 데이터(140)이다. 각각의 N-비트 평문 워드는 N-비트 암호문 워드로 보내진다(directed). 어떤 두 개의 상이한 N-비트 평문 워드도 동일한 N-비트 암호문 워드로 끝나지 않는다. 순열 키를 알면 암호문을 평문으로 다시 변환하여 계산에 사용할 수 있다. 가능한 순열의 수는 2N!이므로, 각 N-비트 암호문에서 비트 수 N이 클수록 암호화된 데이터(140)는 더 안전하다.
[0056] 하나 이상의 비보안 서버(182)는 직접 또는 비보안 통신 네트워크(180)를 통해 비보안 저장 장치(188)에 액세스 할 수 있다. 순열 키에 대한 액세스가 없으면, 네트워크(180)의 이들 서버(182) 및 장치는 평문에 액세스 할 수 없다. 보안 컴퓨팅 시스템(110)은 또한 예를 들어 방화벽(도시되지 않음)과 같은 당업계에 알려진 임의의 방법을 통해 비보안 저장 장치(188)에 액세스 할 수 있다. 보안 컴퓨터 시스템(110)은 암호화된 데이터(140)에서 암호문에 대응하는 평문의 허가된(authorized) 사용자의 물리적 및 통신 제어를 받는다. 데이터(112)에 하나 이상의 순열 암호화 파라미터를 포함하는 순열 키는 보안 컴퓨터 시스템(110)의 사용자에게 알려져 있다.
[0057] 암호화된 데이터가 하나 이상의 비보안 서버(182)에서의 프로세싱에 사용된다면 더 많은 계산 능력 또는 효율이 있을 수 있지만, 현재 방법은 데이터(112)를 포함하는 순열 키를 비보안 서버(182) 또는 네트워크(180) 상에서 동작하는 임의의 프로세스에 공개하는 것을 피하는 것으로 알려져 있지 않다. 따라서, 암호화된 데이터(140)의 사용자는 일반적으로 보안 시스템(110)상의 적어도 임시 로컬 저장을 위해 네트워크(180)를 통해 비보안 저장 장치(188)로부터 암호화된 데이터(140)의 일부 또는 전부를 검색하도록 제한된다. 이 검색(retrieval) 프로세스는 암호화된 데이터 검색/저장 모듈(115)에 의해 수행되고 검색할 암호화된 데이터를 식별하는 것을 처리한다. 검색 기준이 암호문으로 저장된 정보에 의존하는 경우, 기능 수행에 필요하지 않은 많은 데이터가 로컬로 전송 및 저장된다.
[0058] 평문에서 수행될 기능은 평문 함수 프로그램 모듈(113)에 의해 표현된다. 다른 모듈(114)은 암호문을 복호화(모듈(116) 사용)하고, 평문에 대해 조작(모듈(113) 사용)하고, 모듈(118)을 사용하여 결과를 암호화하는 프로세스를 수행한다. 모듈(116) 및 모듈(118)은 모두 암호화 파라미터(112)에 의존한다. 모듈(115)은 그 결과를 비보안 저장 장치(188)에 다시 저장한다. 저장 위치가 암호문으로서 저장된 정보에 의존한다면, 모듈(113)의 평문 함수에 의해 변경되지 않은 많은 데이터가 네트워크(180)를 통해 전송되고 비보안 장치(188)에 저장된다. 예를 들어, "123"으로 시작하는 사회 보장 번호(SSN)를 가진 사람을 검색하려면 SSN을 복호화해야 데이터를 조작할 것인지 결정할 수 있다. 비보안 장치에서는 이를 수행할 수 없으므로 모든 데이터를 로컬 장치로 가져와서 적어도 모든 SSN을 복호화한 다음 다운로드한 데이터의 작은 하위 집합인 원하는 데이터를 조작해야 한다.
[0059] 여기서 다음과 같은 사항이 관찰된다: 1) 순열 암호화는 하나 이상의 q-비트 게이트 시퀀스(q ∈ {1, 2, 3})에 의해 구현될 수 있으며; 2) 입력들을 일대일로 출력들에 매핑하는 함수(function)들은 또한 하나 이상의 q-비트 게이트들의 시퀀스에 의해 구현될 수 있고(예시 목적을 위해, 함수 프로그램 모듈(113)은 그러한 전단사 함수(bijective function)를 구현한다고 가정됨); 및 3) 동일한 입력에 대해 동일한 출력을 생성하는 q-비트 게이트 세트가 두 개 이상 있기 때문에 복호화, 평문 함수 및 암호화 q-비트 게이트는 복호화, 평문 함수 및 암호화 동작(operation)에 직접 대응하지 않는 게이트의 차이 시퀀스(difference sequence)로 대체될 수 있다. 따라서 이러한 동작은 난독화된다. 그러한 동작들을 노출하지 않는 게이트의 상이한 시퀀스를 구현하기 위한 난독화 코드가 생성될 수 있다. 따라서, 난독화 코드(obfuscated code)는 비보안 서버(182)에서의 동작을 위해 전송될 수 있다. 이러한 코드는 순열 키를 공개하지 않고 비보안 서버(182) 및 비보안 장치(188)의 컴퓨팅 파워 또는 효율 또는 복원력을 이용할 수 있다. 일련의 게이트는 본 명세서 및 실시예에서 회로(circuit)라고도 한다. 따라서, 데이터에 대해 의도된 기능을 수행하는 프로그램은 계산의 회로 모델에서와 같이 게이트에 대한 설명으로 변환된다. 그래서 논리 게이트(logic gate)는 3-비트 토폴리 게이트(Tofolli gate)와 같은 q-비트 가역 게이트로 표현된다.
[0060] 도 2a는 일 구체예에 따른, N-비트 워드상에서 동작하는 예시적인 3-비트 게이트(201)를 도시하는 블록도이다. 비트 X 203x, 비트 Y 203y 및 비트 Z 203z로 나타내어지는, 제로로 분리되거나 그에 뒤따르는 입력 N-비트 워드(202a)로부터의 3개의 비트 위치들 또는 타원으로 표시되는 더 많은 비트 위치들은 가역적 3-비트 게이트(201)로 넘겨진다. 결과는 동일한 3 비트 위치에서 출력 N-비트 워드(202b)로 전달된다. 그러나 이 세 위치의 내용이 순열화(permutation) 되었을 수도 있다. 예를 들어, N-비트 워드(202a)의 3개의 위치 X, Y, Z에서 8개의 값 A, B, C(예를 들어, 000, 001, 010, 011, 100, 101, 110, 111)는 N-비트 워드(202b)에서의 8개의 값 A', B', C'(예를 들어, 각각 110, 111, 100, 101, 000, 001, 011, 010)의 순열로 변경된다. 다른 3-비트 게이트에서는 8개 값의 다른 순열이 생성된다. 임의의 3개 위치(X, Y, Z)에 대해 23! = 40,320개의 가능한 3-비트 게이트들이 있다. 실시예에서, 3-비트 게이트는 도 2a와 유사하게 표현되어 게이트가 작동할 수 있는 비트 위치에 대응하는 라인 상에 실선 도트(solid dot)를 가진다.
[0061] 도 2b는 일 구체예에 따른, N-비트 워드상에서 동작하는 예시적인 한 쌍의 3-비트 게이트(204a, 204b)를 도시하는 블록도이다. 도면은 입력 N-비트 워드(202c), 3-비트 게이트(204a), 3-비트 게이트(204b) 및 출력 N-비트 워드(202d)를 도시한다. 연속된 12개의 비트 위치는 수평선으로 표시되고 타원으로 표시되는 0개 이상의 다른 비트 위치가 선행된다. 예를 들어, 평문 함수와 관련된 3-비트 게이트로부터의 복호화와 관련된 3-비트 게이트를 난독화시키기 위해 3-비트 게이트(204a)를 3-비트 게이트(204b)를 지나서 이동시키는 것이 바람직한 경우, 게이트는 이동한다고 말한다. 2개의 게이트(204a 및 204b)가 적어도 하나의 비트를 공유하면, 이동은 게이트로 하여금 "디브리(debris)"게이트라 불리는 하나 이상의 상이한 게이트 세트를 생성하게 하고, 원래 게이트(204a 및 204b)로는 인식되지 않는다. 이 경우 게이트는 "충돌(collide)"한다고 말한다. 이러한 "충돌(collision)"을 해결하는 방법을 결정하기 위한 규칙은 아래에서 일반적인 용어와 실시예에 더 자세히 설명되어 있다. 일반적으로 충돌은 총 3-비트 게이트 총수에 추가하는 것을 비용으로 해결할 수 있다. 이 넓은 개념은 도 2c에 의해 표현된다.
[0062] 도 2c는 일 구체예에 따른, 도 2b의 2개의 3-비트 게이트(204a 및 204b)에 의해 생성된 결과와 동등한 결과를 생성하는 예시적인 일련의 3-비트 게이트를 도시하는 블록도이다. 이것은 특정 3-비트 게이트(204a 및 204b)에 적용되는 실제 솔루션이 아니라, 게이트(204a 및 204b)가 솔루션에서 소비되고 4개의 다른 "디브리" 3-비트 게이트(202c, 204d, 204e 및 204f)에 의해 대체된다.
[0063] 본원에서 사용된 바와 같이, 게이트 Ga는 게이트 Gb를 지나서 이동했다고 말한다. 예를 들어, 전방 이동(forward movement)에서, 왼쪽의 게이트 Ga가 오른쪽의 게이트 Gb를 지나서 이동될 때, 게이트 Ga 및 Gb가 하나 또는 두 개의 공통 비트 라인에 작용할 때마다 충돌이 발생해야 한다. 게이트 Ga 및 Gb가 비트 라인을 공유하지 않는 경우, 게이트 Gb를 지나는 게이트 Ga의 움직임(motion)은 순서를 교환(swap)함으로써 달성된다. 3-비트 라인을 모두 공유하는 경우에는 먼저 단일 게이트로 병합되며 이 게이트는 게이트 Ga에 대한 의도된 움직임을 계속한다. 충돌에서, 원래의 게이트 Ga 및 Gb는 동일한 비트 시퀀스의 디브리 게이트로 대체되고, 디브리 게이트의 수는 공유되는 비트 라인의 수에 의존한다: 2개의 비트 라인이 공유될 때 최대 4개의 디브리 게이트, 및 하나의 비트 라인만 공유될 때 최대 7개의 디브리 게이트. 우리는 게이트 Ga의 “자손(descendant)”을 게이트 Gb를 지나는 게이트 Ga의 움직임으로 인한 가장 오른쪽의 게이트라고 하며, 충돌로 인한 가장 오른쪽에 있는 디브리 게이트를 포함한다. 원래 의도가 게이트 Ga를 다른 게이트를 지나 게이트 Gb의 오른쪽으로 이동하려는 경우, 충돌에서 게이트 Ga의 자손 또는 다른 디브리 게이트는 게이트를 지나 원래 게이트 Gb의 오른쪽으로, 예를 들어 Gc로 즉시 이동해야 한다. 우측으로의 추가적인 움직임이 의도되는 경우, 게이트 Ga 또는 그 자손 중 적어도 하나가 우측에 미리 정해진 수의 게이트를 지나갈 때까지 프로세스가 반복된다. 우측의 게이트 Gb가 게이트 Ga를 지나 좌측 또는 그 이상으로 이동될 때, 후방 이동(backward movement)에서, 전술한 것과 동일한 절차를 따르지만, 움직임의 방향은 반전된다.
[0064] 다양한 구체예들에서, 이동 게이트의 개념은 평문 함수와 관련된 지난 게이트 복호화 또는 암호화와 관련된 게이트를 이동시킴으로써 코드를 난독화하기 위해 아말감화(amalgamation) 프로세스에서 사용된다.
[0065] 도 2d는 일 구체예에 따른, 퍼블릭 리소스 상에 저장된 퍼블릭 리소스 암호화된 데이터를 안전하게 처리하기 위한 예시적인 시스템을 나타내는 블록도이다. 네트워크(180), 비보안 저장 장치(188); 순열 암호화 데이터(140), 순열 암호화 파라미터 데이터(112), 평문 함수 프로그램 모듈(113), 모듈(114), 및 검색/복원 암호화 데이터 모듈(115)은 도 1에 대해 전술한 바와 같다.
[0066] 보안 컴퓨터 시스템(210)은 시스템(210)이 이제 표(230), 모듈(232), 모듈(233), 모듈(234), 모듈(235), 모듈(236) 및 모듈(250)을 포함하기 때문에 시스템(110)과 다르다. 표(230)는 비보안 서버(282)에 의해 실행될 형태로 각각의 소스 코드 또는 객체(object) 코드 명령을 소스 또는 객체 코드 명령과 같은 하나 이상의 입력 N-비트 워드부터 동일한 하나 이상의 출력 N-비트 워드를 생성하는 하나 이상의 q-비트 게이트의 시퀀스와 연관시킨다.
[0067] 도 4a 내지 도 4c는 일 구체예에 따른, 특정 입력 워드 x가 주어진 특정 출력 워드 y를 생성하기 위해 7비트 워드 상에서 동작하는 일련의 게이트로서 난독화되는 예시적인 프로그램을 도시하는 블록도이다. 도 4a에서, 복호화 모듈 E-1, 함수 모듈 f 및 암호화 모듈 E1을 포함하는 프로그램 P는 다수의 비트(예를 들어, 7비트)로 구성된 워드에 작용한다. 데이터베이스에서 암호화된 모든 데이터는 3-비트 Toffoli 게이트와 같은 가역 논리 게이트를 사용하여 구성된 순열에 기반한 체계를 사용하여 암호화된다. 가역적 컴퓨팅은 전체 회로의 결과가 n-비트 입력 x(여기서 n과 N이 상호 교환적으로 사용됨)를 취하는 순열인지 확인하고 n-비트 출력 y = P(x)를 반환한다. 여기서 P(x)는 2n의 가능한 n-비트 입력 x의 공간에 작용하는 순열이다. 2n-차원 비트 공간에서의 순열은 가역적 q-비트 게이트를 사용하는 간단한 순열로부터 생성된다. 평문 데이터 x'을 암호문 x로 암호화하는 프로그램 E(x)는 가역적 게이트를 사용하여 표현되기 때문에, 프로그램에서 역순으로 읽어지는 게이트들의 각각의 역을 사용하여 계산을 역으로 함으로써 데이터를 복호화하는 프로그램 E-1을 얻을 수 있다. 이 역 연산은 순열의 역수 x'= E-1(x)를 산출하여 데이터를 복호화한다. 또한, 평문 데이터 x'에 대해 의도된 작업을 수행하는 프로그램 f는 계산의 회로 모델에서와 같이 게이트의 설명으로 변환되거나 중앙 처리 장치(CPU) 또는 필드 프로그래밍 가능 게이트 어레이를 위한 컴파일러에 의해 생성된다. 논리 게이트는 그러면 q-비트 가역 게이트로 표현된다. 일부 구체예들에서, 최종 회로, 예를 들어, 아말감화/난독화된 E-1 ·f·E는 FPGA로 프로그래밍된다. 이 구현은 입력 데이터에 대한 회로의 동작이 하드웨어로 구현되기 때문에 더 빠르게 실행된다는 이점이 있다. 다른 구체예들에서, E 및 E-1은 이러한 방식들이 가역 게이트들에 의해 형성되는 한, AES(Advanced Encryption Standard)와 같은 다른 암호화 방식들을 사용하여 정의된다.
[0068] 도 4b에 도시된 바와 같이, 가역적 프로그램(P)은 3단계의 프로그램, 즉 데이터를 복호화하기 위한 모듈 E-1, 의도된 작업을 수행하기 위한 모듈 f 및 데이터를 다시 암호화하기 위한 모듈 E1을 파이핑함으로써 구성된다. 각각의 모듈은 가역적 q-비트 게이트로 표현되었기 때문에, 결합된 프로그램 P는 전체적으로 가역적 q-비트 게이트로 구성된다. 결합된 가역적 프로그램은 n-비트 암호문 단어 x를 입력으로 사용하고 암호문 단어 y=P(x)를 출력하는 순열화인데, 여기서 P(x)는 도 4b에 도시된 바와 같이 2n의 가능한 N-비트 입력 x의 공간상에 작용하는 순열이다.
[0069] 일부 구체예들에서, 객체 코드는 하나 이상의 q-비트 게이트와 연관시키는 것이 바람직하다. 객체 코드는 감소된 수의 명령을 포함하는 경향이 있으므로, 표의 총 엔트리 수가 상위 레벨의 컴파운드 소스 코드 명령과 관련된 표에 대한 것보다 적을 수 있기 때문이다. 또한, 객체 코드는 프로세싱 칩 레지스터의 레벨에서 동작하는 경향이 있으므로, N-비트는 레지스터의 비트 수에 쉽게 매칭될 수 있어 매핑을 단순화한다. 소스 코드는 임의의 언어로 작성된 다음 보안되지 않은 서버에 적합한 기존 컴파일러를 사용하여 컴파일하여 q-비트 게이트 시퀀스에 매핑되는 객체 코드를 생성할 수 있다.
[0070] 3-비트 가역 게이트(3-bit reversible gate)에 대한 전체 프로그램(또는 순열) P에 대한 설명은 고유하지 않다. 입력 x에 대해 동일한 최종 결과 P(x)를 생성하는 다른 3-비트 게이트 시퀀스가 있지만 기계의 중간 상태는 모두 다르다. 도 4c는 일 구체예에 따른, 임의의 프로그램 P(x)에 대해 달성될 수 있는 예시적인 상이한 중간 상태를 도시하는 블록도이다. 도시된 구체예들에서, 원래 프로그램 P는 m 1 q-비트 게이트 Ga (1)의 시퀀스를 생성하는데 각각은 3비트 지정(x , x , x )에 따라 작용하고, 아래 첨자 i, j, k는 각각 각 α에 대한 워드에서 n비트의 상이한 하나를 나타내며, 각 위 첨자 x는 표시된 비트의 값을 나타낸다. m p q-비트 게이트 Gb (p)의 다른 프로그램 P (p) (x)가 있으며, 각각은 지정된 (x i'β , x j'β , x k'β )에 따라 작용하고, β = 1, …m p 이며, 주어진 동일한 입력 x에 대해 동일한 출력 y를 생성한다. 도 4c는 p =2 및 3에 대해 2개의 대안적 프로그램을 도시하지만 다른 것들 또한 허용된다.
[0071] 하나의 프로그램 P ( p )가 주어지면 원래 프로그램 P (1)이 무엇인지 알 수 없다. 원래 프로그램 P ( 1 )과 게이트 시퀀스를 거의 공유하지 않는 프로그램 P ( o )를 선택하면 데이터 복호화 또는 암호화와 관련된 단계를 결정할 수 없는 난독화된 프로그램 P ( o )가 제공된다. 따라서, 난독화된 프로그램 P ( o )는 퍼블릭 스토리지에 저장된 암호문의 암호 복호화 키를 제공하지 않고 공유의 퍼블릭 컴퓨터에서 실행될 수 있다. P ( o )를 생성하는 새로운 게이트 시퀀스를 찾기 위해, 3개의 세그먼트 E-1, f, 및 E1은 유리하게는 더 이상 그들을 구별할 수 없도록 아말감화 된다. 아말감화는 한 세그먼트에서 다른 세그먼트와의 경계를 가로 질러 게이트를 이동시키는 것을 포함한다. 그러나 단순히 게이트를 옮기는 것만으로는 충분하지 않다. 게이트는 다른 세그먼트의 많은 부분으로 깊숙이 침투하기 위해 서로를 통과한다.
[0072] 실행을 위해 서버로 전송되는 것은 프로그램 P ( o )이다. 클라우드 서비스 제공자는 요청된 계산을 수행하고, 암호화된 데이터베이스에서 데이터를 읽고, 암호화된 데이터를 출력할 수 있다. 그러나 클라우드 제공자는 계산 전체에서 수행되는 작업을 식별할 수 없다. 최종 출력은 동일하지만 중간 단계는 계산의 대부분 또는 모든 단계에서 다른 결과를 생성하기 때문이다. 예를 들어, 클라이언트는 부울 식(Boolean expression), 쿼리를 만족하는 모든 항목을 데이터베이스에서 검색하고자 한다. 서버는 난독화된 코드를 실행하여 암호화된 데이터베이스에서 읽고 성공적인 쿼리를 암호화된 출력 파일에 기록하며, 이 파일은 클라이언트로 다시 전송된다. 그런 다음 클라이언트는 보안 컴퓨터에서 답변을 복호화한다.
[0073] 아래에서 더 상세히 설명되는 일부 구체예들에서, 몇 개의 q-비트 게이트들이 하나의 k-비트 게이트(3 <k ≤ N)에 융합된다. 그러한 구체예들에서, 표(230)는 각각의 소스 코드 또는 객체 코드 명령을 그 소스 또는 객체 코드 명령과 동일한 하나 이상의 N-비트 워드 입력으로부터 하나 이상의 동일한 출력 N-비트 워드를 생성하는 하나 이상의 k-비트 게이트와 연관시키는 엔트리 또는 명령을 포함한다. 이들 구체예들 중 일부에서, 표(230)는 또한 각각의 k-비트 게이트를 하나 이상의 q-비트 게이트의 시퀀스와 연관시키는 엔트리를 포함한다. 따라서, 그 q-비트 게이트 시퀀스가 관찰되면, 대응하는 k-비트 게이트가 원하는 대로 대체될 수 있다. 예를 들어, 표(230)는 일련의 q-비트 게이트를 k-비트 게이트로 변환하기 위한 규칙 또는 명령을 포함하며, 이는 과도한 실험없이 당업자에게 간단한 프로세스이다. 일부 구체예들에서, q-비트 게이트는 k-비트 게이트가 생성될 때까지 계속해서 결합된다.
[0074] 모듈(232)은 소스 코드 또는 객체 코드를 q-비트 가역 게이트의 시퀀스로 변환하도록 구성된다. 모듈(232)은 표(230)의 데이터 중 적어도 일부를 사용하고 각각의 q-비트 게이트를 복호화 또는 평문 함수 또는 암호화에 속하는 것으로 라벨링(labeling)한다. 일부 구체예들에서, 아래에서 더 상세히 설명되는 바와 같이, 모듈(232)은 평문 함수를 일련의 세그먼트들로 나누고, 암호화 프로세스는 각각의 세그먼트 후에 추가되고 대응하는 복호화 프로세스는 다음 세그먼트 전에 추가된다. 평문 함수의 이러한 분할은 소스/객체 코드를 q-비트 게이트 시퀀스로 변환하기 전 또는 후에 수행될 수 있다. 이들 세그먼트화된 평문 함수 구체예 중 일부에서, 각각의 q-비트 게이트는 평문 함수 또는 암호화/복호화 프로세스와 연관된 것으로 라벨링된다. 일부 구체예들에서, 암호화 q-비트 게이트는 그것들을 복호화 q-비트 게이트와 구별하기 위해 라벨링된다. 모듈(232)의 출력은 모듈(114)과 동등한 q-비트 가역 게이트 시퀀스를 포함하는 모듈(233)이다. 일부 구체예들에서, 복호화 프로세스 또는 암호화 프로세스 또는 둘 모두는 q-비트 게이트의 관점에서 정의된다(예를 들어, 순열 암호화 파라미터(112)는 암호화를 수행하는 일련의 q-비트 게이트 또는 암호화를 수행하는 일련의 q-비트 게이트 또는 둘 모두를 포함한다). 이들 구체예들에서, 모듈(232)은 임의의 소스 또는 객체 암호 복호화 코드 또는 암호화 코드 또는 양자 모두를 q-비트 게이트로 변환할 필요가 없다. 일부 구체예들에서, 암호화는 복호화를 수행하는 q-비트 게이트의 순서를 반대로 함으로써 간단히 달성되며, 파라미터(112)는 복호화 또는 암호화를 위해 하나의 계열만을 포함한다.
[0075] 모듈(234)은 하나 이상의 암호화 또는 복호화 프로세스로부터 q-비트 게이트를 평문 함수 세그먼트의 q-비트 게이트 사이의 위치로 또는 그 이상으로 이동시키도록 구성된다. 이것을 본원에서 아말감화 프로세스라고 한다. 일부 구체예들에서, 아말감화 프로세스는 3단계로 구성된다. 제1 단계에서, 복호화 세그먼트에 포함된 게이트는 평문 함수 세그먼트에 포함된 게이트를 지나 앞으로 전달되어, 제1 단계 아말감화 세그먼트를 생성한다. 제2 단계에서, 암호화 세그먼트에 포함된 게이트는 제1 단계로부터 생성된 게이트를 지나서 뒤로 전파되어 제2 단계의 아말감화 게이트 시퀀스를 생성한다. 제3 단계에서, 이 시퀀스의 다수의 q-비트 게이트가 k-비트 게이트(k> 3)에 융합된다. 게이트 전파는 전파가 각각 전방인지 후방인지에 따라 오른쪽 또는 왼쪽에 위치한 게이트를 지나는 게이트의 움직임으로 구성된다.
[0076] 단계 1은 복호화 게이트에서 가장 오른쪽 게이트(예: Gz)를 J 게이트를 지나 전방으로 평문 함수 세그먼트 또는 그 이상으로 전파하는 것으로 시작한다. J를 전파 거리(propagation distance)라고 한다. 위에서 정의한 것처럼 J 게이트를 지나는 움직임은 Gz 자손("이동" 게이트 Gz 또는 가장 먼 충돌 디브리 게이트)이 원래의 J 게이트를 지나 Gz의 오른쪽으로 이동했음을 의미한다. 프로세스는 평문 함수 세그먼트 또는 그 이후의 J'게이트를 지나 복호화 세그먼트(예를 들어, Gy)에서 제2 최우측 오른쪽 게이트를 전파함으로써 계속된다. 이 전파에서, 제2 최우측 게이트(Gy)는 또한 제1 최우측 게이트(Gz)의 전파로부터 남은 디브리 게이트를 지나간다. 남은 게이트는 각각 J보다 작거나 같거나 클 수 있는 타겟 J'에 대해 1로 계산된다. J보다 작거나 같은 것의 장점은 적은 계산으로 효율적으로 난독화를 달성하는 것이다. J보다 큰 것의 장점은 더 완전한 난독화이다. 일부 구체예들에서, J'은 난독화 과정을 역전시키는 것을 더욱 어렵게 하기 위해 J의 값에 대해 변하도록 무작위로 선택된다. 복호화 세그먼트의 모든 게이트가 적어도 도중에 세그먼트 내로 또는 그 이상으로 전파될 때까지 프로세스가 반복되어, 평문 함수 세그먼트와 복호화 세그먼트의 아말감화를 초래한다.
[0077] 단계 2에서, 암호화 세그먼트는 복호화 및 평문 함수 세그먼트의 이전의 아말감화로 인한 게이트 시퀀스와 합병된다. 이 프로세스는 단계 1에서 설명한 것과 유사하지만 역방향이다. 그것은 복호화-평문 함수 아말감화 세그먼트에서 K 게이트를 지나 뒤로 이동하는 암호화 세그먼트에 포함된 가장 왼쪽 게이트(예: Ga)로 시작한다. 위에서 정의한 것처럼 K 게이트를 지나는 움직임은 Ga 자손("이동하는" 게이트 Ga 또는 가장 먼 충돌 디브리 게이트)이 원래의 K 게이트를 지나 Ga의 왼쪽으로 이동했음을 의미한다. 그것은 K'게이트를 지나 왼쪽으로 암호화 세그먼트에서 가장 왼쪽에서 두번째 게이트(예를 들어, Gb)의 움직임을 계속하며, 여기에는 또한 가장 왼쪽 게이트(Ga)의 전파로부터 남은 게이트를 지나서 왼쪽으로 이동하는 것도 포함된다. 각각의 남은 게이트는 K보다 작거나 같거나 더 클 수 있는 타겟 K'에 대해 1로 카운트된다. J' 및 J에 대해 상기와 같이, K보다 같거나 작다는 것의 이점은 더 작은 계산으로 효율적으로 난독화를 달성하는 것이다. K보다 큰 것의 장점은 더 완전한 난독화이다. 일부 구체예들에서, K'은 난독화 과정을 역전시키는 것을 더욱 어렵게 하기 위해 K의 값에 대해 변하도록 무작위로 선택된다. 단계 2는 암호화 세그먼트의 모든 게이트가 적어도 도중에 아말감화된 복호화/함수(decryption/function) 게이트로 전파될 때 종료된다.
[0078] 일부 구체예들에서, 방법은 오른쪽의 가장 좌측 게이트를 좌측으로 가져 오는 것과(R → L) 좌측의 가장 오른쪽 게이트를 우측으로 가져 오는 것(L → R)을 번갈아하도록 수정된다. 여러 q-비트 게이트를 k-비트 게이트로 결합하기 위한 선택적 단계 3이 아래에 더 상세히 설명된다.
[0079] 자동화된 전파 및 충돌 절차는 도 5 및 도 26을 참조하여 아래에서 더 상세히 설명되며, 실시예에서 더욱 상세히 설명된다. 모듈(234)의 출력은 모듈(114)과 동등한 난독화된 시퀀스의 q-비트 가역 게이트(및 0개 이상의 k-비트 게이트)를 포함하는 모듈(235)이지만, 원래의 복호화 또는 최종 암호화 프로세스를 추론하는 것은 비현실적이며, 따라서 데이터(112)의 암호화 파라미터 값을 결정하는 것은 비현실적이다.
[0080] 모듈(236)은 q-비트 가역 게이트의 난독화된 시퀀스를 난독화된 소스 코드 또는 객체 코드로 변환하도록 구성된다. 모듈(236)은 표(230)의 데이터 중 적어도 일부를 사용한다. 일부 구체예들에서, 아래에서 더 상세히 설명되는 바와 같이, 모듈(236)은 먼저 간단한(straightforward) 계산 또는 표(230)에 저장된 연관(association)들에 기초하여 적어도 일부 q-비트 게이트들을 k-비트 게이트로 융합한다. k-비트 게이트는 k-비트 게이트와 소스 코드 또는 객체 코드 명령 사이에서 표(230)에 저장되거나 코딩된 연관을 사용하여 소스 코드 또는 객체 코드로 변환된다. 일부 구체예들에서, k-비트 게이트를 하나 이상의 소스 또는 객체 코드 명령어로 변환하는 것은 규칙 또는 하나 이상의 명령어에 기초한 과도한 실험없이 당업자에게 간단하다. 모듈(236)의 출력은 모듈(114)과 동등한 난독화된 소스 또는 객체 코드를 포함하는 모듈(250)이다. 이 모듈(250)은 도시된 바와 같이, 이들 서버(282)의 전력 또는 효율 또는 복원력을 이용하여 암호화된 데이터(140)상에서 동작하도록 비보안 서버(282)에 안전하게 전송될 수 있다.
[0081] 프로세스, 장비 및 데이터 구조가 도 1 및 도2d에 예시의 목적으로 특정 배열에서 일체의 블록으로 도시되어 있지만 다른 구체예들에서는 하나 이상의 프로세스 또는 데이터 구조 또는 그 일부가 상이한 방식으로, 동일하거나 상이한 호스트 상에, 하나 이상의 데이터베이스에 배열되거나 또는 생략되거나, 또는 하나 이상의 상이한 프로세스 또는 데이터 구조가 동일하거나 상이한 호스트 상에 포함된다.
[0082] 도 3은 일 구체예에 따른, 퍼블릭 리소스 상에 저장된 암호화된 데이터를 퍼블릭 리소스 상에서 안전하게 처리하기 위한 예시적인 방법(300)을 도시하는 흐름도이다. 단계들이 도3에서 및 후속 흐름도 도 5 및 도 26에서 예시의 목적으로 특정한 순서로 통합된 단계들로 그려져 있지만, 다른 구체예들에서는 하나 이상의 단계들 또는 그 부분들이 상이한 순서로 수행되거나 시간적으로 직렬 또는 병렬로 중첩되거나 또는 생략되거나 또는 하나 이상의 추가적 단계들이 더해지거나 또는 방법이 일부 조합으로 변경된다.
[0083] 단계 301에서, 표(230)가 생성된다. 이것은 수동 또는 자동으로 수행될 수 있지만, 완료되면 결과는 컴퓨터 판독 가능 매체 상에 표(230)로서 저장된다. 표(230)의 엔트리는 적어도 각각의 소스 코드 또는 객체 코드 명령을 하나 이상의 q-비트 게이트와 연관시킨다. 일부 구체예들에서, 소스 코드 또는 객체 코드는 FPGA(Field Programmable Gate Array)에 대한 명령어이다. 일부 구체예들에서, 소스/오브젝트 코드로부터 q-비트 게이트의 시퀀스로 후방으로 보다는 전방으로 가면서 상이한 다른 연관들이 사용된다. 예를 들어 전방으로 RISP(a reduced instruction set processor)에서 각 객체 코드 명령이 가장 적은 q-비트 게이트로 변환되면, 후방으로 가면서 각 q-비트 게이트는 단일 q-비트 게이트를 실행하기 위해서 SHIFT 기능과 같은 가장 효율적 RISP 명령으로 변환된다.
[0084] 융합을 사용하는 일부 구체예들에서, 하나 이상의 소스 코드 또는 객체 코드 명령어 각각으로부터 k-비트 게이트(3<k≤N)로 변환하기 위해 엔트리가 표(230)에 포함된다. q-비트 또는 k-비트 게이트를 소스/오브젝트 코드 명령으로 변환하는 것은 과도한 실험없이 당업자에게 간단하다. 가장 비효율적인 방법으로, 그것은 각각 (23) 및 (2k) 명령어를 전달할 것을 요구한다. 융합을 사용하지 않는 구체예들에서, k-비트 게이트들을 포함하는 이들 엔트리들은 표(230)에서 생략될 수 있다.
[0085] 단계(303)에서, 암호화된 데이터 구조(140)로부터 입력 암호문을 검색하고 결과 암호문을 데이터 구조(140)에 저장하기 위한 명령이 모듈(115)에 대해 생성된다. 이는 예를 들어, SQL 쿼리에 기초하여 수동 또는 자동으로 수행될 수 있다.
[0086] 단계(305)에서, 암호문을 복호화하고, 평문 함수를 적용하고, 결과 평문을 암호화하여 저장을 위한 결과 암호문을 생성하기 위한 명령이 모듈(114)에 대해 생성된다. 일부 구체예들에서, 단계(305)는 기능을 여러 기능 세그먼트로 나누고 각 세그먼트 뒤에 새로운 암호화 명령어를 추가하고 다음 세그먼트 앞에 대응하는 복호화 명령어를 추가하는 단계를 포함한다. 객체 코드와 q-비트 게이트 사이에서 왔다 갔다 하며 변환하는 일부 구체예들에서, 단계(305)는 단계(307)에서 q-비트 게이트로 변환된 객체 코드를 생성하기 위해 기능(세그먼트), 및 선택적으로 선행 복호화 및 후속 암호화 세그먼트를 수행하는 소스 코드를 컴파일하는 단계를 포함한다.
[0087] 단계(307)에서, 표(230)는 단계(305)에서 생성된 명령을 q-비트 게이트 시퀀스로 변환하는데 사용된다. 일부 구체예들에서, 표가 사용되지 않고, 대신 숙련된 프로그래머에 의해 생성될 수 있는 게이트 컴파일러가 소스/오브젝트 코드를 q-비트 게이트로 변환하도록 동작된다. 일부 구체예들에서, 컴파일러와 표(230)의 조합이 사용된다. 일부 구체예들에서, FPGA의 컴파일러가 사용되거나 게이트가 FPGA에서 구현되거나 또는 둘 다이다. 일부 구체예들에서, 단계(307)는 모듈(232)에 의해 수행된다. 단계(307)의 출력은 q-비트 게이트의 모듈(233)이다.
[0088] 단계(309)에서, 평문 함수에 대응하는 q-비트 게이트가 여러 세그먼트로 분할되고, 세그먼트 사이에 암호화 및 복호화 게이트가 추가된다. 일부 구체예들에서, 단계(309)는 각각의 세그먼트에 포함할 다수의 게이트를 결정하는 단계를 포함하고, 후술하는 바와 같이 단계(311)에 대해 결정된 전파(propagation) 깊이와 관련된다. 침투 깊이(예: J, J', K 또는 K' 또는 일부 조합)는 깊이가 클수록 충돌이 많고 충돌이 많을수록 더 많은 게이트가 생성되므로 트레이드 오프로서 결정된다. 난독화를 증가시키려면 깊이를 증가시키는 것이 바람직하지만 결과 게이트가 너무 많으면 결과 코드가 너무 길고 비효율적이다. 세그먼트의 수를 결정하기 위해, 충돌로 인한 과도한 수의 게이트를 발생시키지 않으면서 기능의 충분한 난독화를 달성하는 것이 유리하다. 단일 세그먼트는 최대 난독화를 달성하지만 복호화 및 암호화 세그먼트의 모든 게이트가 함수 세그먼트(function segment)를 가로 질러 이동하면 기하 급수적으로 큰 일련의 게이트가 된다. 함수를 너무 많은 세그먼트로 나누면(즉, 함수 세그먼트의 각 게이트마다 하나씩) 난독화가 약해진다. 적절한 균형은 세그먼트의 수가 N-비트 워드의 비트 수의 오더(order)(
Figure pct00001
( ) 심볼로 표시됨)일 때이다. 그러나 최적의 세그먼트 수는 함수 유형에 따라 다르다. 예를 들어, 함수가 많은 게이트를 갖는 것이 일반적이지만(예: 곱하기,
Figure pct00002
(N2)), 항상 그렇지는 않다. 어떤 함수는 더 작은 게이트를 가질 수 있으며(예를 들어
Figure pct00003
(N), 덧셈과 같이), 이러한 경우 기하 급수적 증가 없이 상당히 좋은 아말감화를 얻기 위해 F(x)를 세그먼트로 나눌 필요가 없다. 사실, 이것이 F(x)를
Figure pct00004
(N) 게이트의 각 세그먼트로 분할하는 것이 제안된 이유이다. 그러면, 회로 길이의 기하 급수적 증가없이 아말감화를 로컬로 수행할 수 있다.
Figure pct00005
(N2) 게이트가 있는 F(x) 함수의 경우 약
Figure pct00006
(N) 세그먼트를 사용하고자 할 것이다. 세그먼트 당 이 게이트 수를 결정하는 예제는 실시예에 설명되어 있다. 난독화를 역전시키는 것을 더욱 혼란스럽게 하기 위해, 세그먼트 길이 및 침투 깊이 중 하나 또는 둘 모두에 임의의 요소를 추가하는 것이 유리하다.
[0089] 이 평문 함수의 분할이 단계(305)에서 소스/객체 코드 레벨에서 수행되었다면, 단계(309)는 생략된다. 예를 들어, 단계(307 및 309)는 도 2 D의 모듈(232)에 의해 수행된다. 일부 구체예들에서, (소스/객체 코드 레벨로 작성된 암호화/복호화 세그먼트를 사용하는 대신) q-비트 게이트의 시퀀스로서 이미 쓰여진 암호화/복호화 세그먼트가 사용된다.
[0090] 단계(311)에서, 복호화에 관련된 q-비트 게이트는 평문 함수 또는 그 현재 세그먼트에 관련된 q-비트 게이트를 지나 전달된다. 평문 함수로 이동하는 거리는 획득한 침투와 충돌로 인한 게이트 수의 증가 간의 트레이드 오프를 기반으로 한다. 복호화 q-비트 게이트를 평문 함수(세그먼트)로 또는 그 이상으로 이동시키기 위해 거리 J(예를 들어, J개의 게이트 수)가 정의된다. 이 거리를 결정하는 예제 방법은 실시예에 설명되어 있다. 기존의 가역적 q-비트 게이트와의 충돌은 아래에 설명된 일반적인 가역적 3-비트 게이트에 대해 도 5를 참조하여, 제어 게이트에 대해 도 26을 참조하여 특정 절차를 사용하여 해결된다. 이는 실시예에 더욱 상세하게 제공된다.
[0091] 단계(313)에서, 암호화에 관련된 q-비트 게이트는 평문 함수 또는 그 현재 세그먼트에 관련된 q-비트 게이트를 지나 뒤로 전파된다. 평문 함수로 이동하기 위한 침투 거리는 획득된 깊이와 각 충돌에 대한 게이트 수의 증가 사이의 트레이드 오프에 기초한다. 암호화 q-비트 게이트를 평문 함수(세그먼트)로 또는 그 이상으로 이동시키기 위해 거리 K(예를 들어, K 개의 게이트 수)가 정의된다. 이 거리를 결정하는 예시적인 방법은 K= J와 함께 실시예에 기술되어 있다. 기존의 q-비트 게이트와의 충돌은 일반적인 가역 3-비트 게이트는 도 5를 참조하여, 제어 게이트에 대해서는 도 26을 참조하여 아래에 설명된 특정 절차를 사용하여 해결되며, 실시예에 더욱 자세히 제공된다.
[0092] 일부 구체예들에서, 다른 그룹들이 사용된다. 예를 들어, 복호화 및 함수 세그먼트는 하나의 그룹(그룹 A)으로 일괄 처리가 된 다음 게이트들이 암호화 세그먼트(그룹 B)에서 그룹 A로 이동하여 그룹 C가 된다.
[0093] 단계(315)에서 q-비트 게이트의 다른 복호화-평문 함수 세그먼트-암호화 시퀀스가 존재하는지가 결정된다. 그렇다면, 모듈(235)의 난독화된 q-비트 시퀀스가 생성되었다. 그리고, 제어는 단계(311)로 되돌아 간다. 그렇지 않으면, 제어는 단계(317)로 넘어 간다. 예를 들어, 단계 311, 313 및 315에 의해 기술된 루프는 도 2d의 모듈(234)에 의해 수행된다.
[0094] 단계(317)에서, 난독화된 q-비트 게이트 모듈(235)의 일련의 q-비트 게이트는 하나 이상의 k-비트 게이트로 대체된다(결합된다). q-비트 게이트를 k> 3인 k-비트 게이트에 융합하는 것은 비교적 간단하다. 예를 들어, 프로그램은 q-비트 게이트 시퀀스가 주어지면 k-비트 게이트를 생성한다. 이들 구체예들에서, 표(230)는 소스/객체 코드 명령을 q-비트 게이트(양자의 방법)에 관련시키고 k-비트 게이트를 소스/객체 명령(하나의 방법)에 관련시킨다. 일부 구체예들에서, 융합은 사용되지 않으며, 단계(317)는 생략된다.
[0095] 단계(321)에서, 난독화된 코드의 q-비트 게이트 및 k-비트 게이트는 표(230)를 사용하여 소스 코드 또는 객체 코드로 변환되어 난독화된 소스/객체 코드 모듈(250)을 생성한다. 예를 들어, 단계(317 및 321)가 도 2d에서 모듈(236)에 의해 수행된다. 일부 구체예들에서, 모듈(236)은 비보안 서버에서 구현될 수 있는데, 단, 모듈(235)에서 게이트 시퀀스를 전송하기 전에 융합이 발생한다. 그것은 클라우드에서 사용할 수 있는 계산 능력을 활용할 것이다.
[0096] 단계(323)에서, 난독화된 코드(250) 및 데이터 검색 및 결과 저장 모듈(115)이 비보안 서버(182)로 전송된다. 단계(325)에서, 비보안 서버는 검색/저장 모듈(115) 및 난독화된 코드(250)를 실행하게 된다. 예를 들어, 이들 모듈을 실행하기 위한 명령이 비보안 서버에 메시지로 전송된다.
2. 예시적 구체예들
2.1 일반적 3-비트 게이트
[0097] 도 5는 일 구체예에 따른, 도 3의 방법의 단계(311) 또는 단계(313)에서 사용되는 것과 같이, 제2의 3-비트 게이트를 지나 제1의 3-비트 게이트를 전파하기 위한 예시적인 방법(500)을 도시하는 흐름도이다. 여기서, 3 비트 b1, b2, b3에 작용하는 게이트 g가 3비트 b1, b2, b3에 대해서만 사소하지 않은 동작으로 n-비트 스트링에 작용하는 G로 표기된다는 표기법이 사용된다. n-비트 워드 x에 작용하는 3개의 게이트 프로그램 P는 P(x) = G 3(G 2(G 3 (x))) 또는 대안적으로 P= G G 2·G 1으로 표현될 수 있다. 따라서, 보다 일반적으로 m개의 3비트 게이트에 대해, P= G m ·G m -1 ·G m -2 ... G 3 ·G 2 ·G 1이다. 또한 프로그램 P는 정렬된 라인 l의 리스트로 생각할 수 있다.
Figure pct00007
그렇게 함으로써, 프로그램 P는 일련의 명령이 되고, 각 명령은 라인 번호 l에 의해 주어진 순서 번호와 x il , x jl , x kl 에 의해 표시된 비트의 트리플 및 지정된 3 비트에 대한 순열 g l 을 갖는다. 각 줄마다 n(n-1)(n-2)x8!의 가능한 명령이 있고, 그 일부는 동일한 결과로 이어진다(3비트를 재정렬하고 해당 순열 g를 선택할 수 있기 때문에). 다른 명령의 수를 얻기 위해 이 퇴화(degeneracy)를 제거하는 한 가지 방법은 x il <x jl <x kl 을 선택하여
Figure pct00008
의 비퇴화 명령을 주는 것인데, 여기서
Figure pct00009
이며 한 번에 a개로부터 b개를 선택하는 조합의 수라고 읽는다.
[0098] 충돌 룰(COLLISION RULES). 게이트 동작을 설명하기 위해 두 개의 연속 게이트가 3비트의 서로 다른 세트에 작용하여 G G l -1 = G l -1· G l 과 같이 교환법칙이 성립할 때의 간단한 경우를 생각해 보자. 프로그램 라인 측면에서 두 개의 연속 게이트가 공통 비트를 공유하지 않는 경우, 즉 {x il , x jl , x kl }∩{x i(l+1) , x j(l+1) , x k(l+1) }= 0이라면 명령 목록에서 l l + 1 행을 교환할 수 있다. 연속 게이트가 충돌할 때, 즉 연속 게이트가 1, 2 또는 3 비트를 공유할 때까지만 연속 게이트의 교환(commutation)을 계속할 수 있다.
[0099] 충돌 확률은 다음과 같이 추정할 수 있다. 게이트의 랜덤 분포에 대해, 두 개의 연속 게이트가 공통으로 0, 1, 2 또는 3 비트를 가지며, p 0, p 1, p 2, p 3으로 지정된 확률은 다음의 번호가 매겨지지 않은 방정식들로 주어진다.
Figure pct00010
Figure pct00011
Figure pct00012
Figure pct00013
큰 n에 대해, p 1
Figure pct00014
9/n, p 2
Figure pct00015
18/n 2, p 3
Figure pct00016
6/n 3, 및 p 0 = 1 - p 1 - p 2 - p 3
Figure pct00017
1-9/n이다. l 게이트를 통해 게이트들을 교환할 수 있는 확률은 p 0 l = (1-9/n) l
Figure pct00018
Figure pct00019
이며 또는 동등하게, 충돌에 의지하지 않는 평균 침투(penetration) 깊이는 대략 l 0 = n/9이다.
[0100] n-비트 워드를 충분히 암호화하려면 n게이트 이상의 오더(order)가 필요하다. 따라서 충돌없는 침투 깊이는 프로그램의 암호화 세그먼트의 일부(fraction)이다. 따라서, 일반적으로 복호화 또는 암호화 세그먼트를 난독화하기에 불충분하다. 따라서, 인접한 세그먼트로 게이트를 더 푸시하기 위해, 충돌을 처리하는 방법, 예를 들어 충돌 이전의 정보를 충돌 게이트 쌍을 지나 복수의 게이트로 믹스(mix)하는 접근법을 포함해야 한다. 도 5의 딘계들은 일반적인 3-비트 게이트에 대해 충돌 게이트를 지나 정보를 이동시키는 접근법을 설명한다. 여기서 충돌하는 2개의 게이트는 제1의 3-비트 게이트 및 제2의 3-비트 게이트 또는 게이트 Ga 및 Gb로 지칭된다.
[0101] 단계(501)에서, 제1의 3-비트 게이트 및 제2의 3-비트 게이트가 공유하는 비트 위치의 수가 결정된다. 공유 비트 위치가 없다면, 제어는 단계(503)로 넘어 간다. 단계(503)에서, 제1의 3-비트 게이트는 충돌없이 제2의 3-비트 게이트를 지나서 이동할 수 있고 추가 게이트는 생성되지 않는다. 그 후 제어는 단계(551)로 넘어 간다.
[0102] 단계(551)에서, 제1 게이트가 충분히 멀리 전파되었는지, 예를 들어 목표 개수의 게이트(예를 들어, J 또는 K)에 의해 표시된 다수의 게이트가 전파되었는지 여부가 결정된다. 단계(551)는 지금까지 전파된 거리를 증가시키는 단계(예를 들어, 전파된 거리에 1을 더함)를 포함한다. 전파된 거리가 목표 게이트 수보다 작으면, 제어는 단계(553)로 진행하고; 그렇지 않으면 프로세스가 종료된다.
[0103] 단계(553)에서 다음 제1 게이트 및 다음 제2 게이트가 결정된다. 예를 들어, 2-비트 충돌에서 Ga를 지나 Gb를 이동시키기 위해 Gf를 통해 다수의 게이트 Gc를 생성한 후, “Ga가 J(또는 K) 게이트들을 지나갔는가?”라고 질문한다. 2개의 공유 비트와의 충돌에서, GaGb를 지나 이동할 때, Ga는 자손 게이트 Gf에 의해 대체되고, 그 후 회로의 다음 게이트로 지나갈 수 있다. 유사하게 하나의 공유 비트와의 충돌의 경우, 이러한 충돌에는 7개의 디브리 게이트(예: Gc, Gd, Ge, Gf, Gg, Gh, Gi)가 있다. 이 경우, 자손 게이트 Gi는 추가 이동을 위해 Ga를 대체한다. 물론, 침투가 반대 방향으로 가고 있다면(GbGa를 지나서 이동하는 경우), 두 유형의 충돌(2 비트 공유 및 1 비트 공유) 모두에서 Gb를 대체하는 것은 자손 게이트 Gc이다. 그 다음, 제어는 단계(501)로 되돌아 가서 다음 제1 게이트 및 제2 게이트에 의해 공유되는 비트 위치의 수를 확인한다.
[0104] 단계(501)에서 3개의 비트 위치 모두가 공유되는 것으로 결정되면, 제어는 단계(511)로 넘어 간다. 단계(511)에서, 2개의 3-비트 게이트는 동일한 결과를 달성하는 다른 3-비트 게이트로 대체(결합)될 수 있다. 도 6은 일 구체예에 따른, 3비트 모두에서 충돌하는 예시적인 한 쌍의 3-비트 게이트를 도시하는 블록도이다. 결과는 단일 3-비트 게이트이다. 이 경우 충돌 후에 3-비트 게이트의 수가 감소한다. 그러나 전파 거리는 여전히 1씩 증가한다. 결과의 3-비트 게이트를 동일한 비트에서 작동하는 2개의 3-비트 게이트로 디콘볼브(deconvolve)하는 방법이 8!개 있음을 주목하라. 따라서 가능성의 나무가 생성되기 때문에 이러한 충돌에서 발생하는 아말감화를 취소하는 것은 어렵다. 그 다음에, 제어는 단계(551)로 넘어 가고, 그리고 따라서, 전술한 바와 같다.
[0105] 단계(501)에서 2개의 비트 위치가 공유되는 것으로 판정되면, 제어는 단계(521)로 넘어 간다. 게이트 GaGb를 난독화하지 않는 GcGd로 변경하는 간단한 방법이 있다. 그 중 하나는 두 게이트 사이의 두 비트에 게이지 변환을 삽입하는 것이다. 도 7은 일 구체예에 따른, 2비트에서 충돌하는 예시적인 한 쌍의 3-비트 게이트(Gg1 및 Gg2)를 도시하는 블록도이다. 이 절차는 1) 회로의 토폴로지를 변경하지 않으며, 2) 이전 게이트 시퀀스의 Ga, Ga1 쌍이 취소되므로(Ga는 Ga1를 곱한 것으로 나타남) 그것은 2개의 게이트 사이의 단계만 영향을 주기 때문에 효과적이지 않다. 대신에, 단계(521 내지 541)에 도시된 프로세스는 더 큰 난독화를 제공한다.
[0106] 단계(521)에서, 프로세스는 2개의 3-비트 게이트(각각 제1 및 제2에 대해 GaGb로 지정됨)를 Gc, Gd, Ge, Gf로 지정된 4개의 3-비트 게이트 및 BkBl로 지정된 2개의 브레이딩(braiding) 게이트로 대체하기 시작한다. 브레이딩 게이트는 5비트 게이트이지만 일단 결정되면 쉽게 결정되는 2개 이상의 3-비트 게이트로 변환될 수 있고 아래에 제공된다. 대체 게이트는 식(1)에서와 같이 배열되고 도 8에 도시된다.
Gb·Ga = Gf·Bl·Ge·Gd·Bk·Gc (1)
도 8은 일 구체예에 따른, 2비트에서 충돌하는 예시적인 한 쌍의 3-비트 게이트를 도시하는 블록도이다.
[0107] 단계(523)에서, 도 9에 도시된 6가지 유형의 브레이딩 순열 중 BlBk를 선택한다. 도 9는 일 구체예에 따른, 3-비트 게이트가 2비트에서 충돌할 때 디브리 게이트를 생성하는데 유용한 예시적인 브레이딩 순열을 나타내는 블록도이다. B0, B1B2는 자체의 역(inverse)이지만 B3, B4B5의 경우에는 해당되지 않는다. BkBl은 이 6가지와 그 역 중에서 임의로 선택할 수 있다. 편의상, 충돌 디브리를 결정하기 위해, 도 8에서 Bl = Bk 1(위첨자 -1은 게이트를 역방향으로 통과하는 것을 나타냄)과 같이 되도록 k 및 l을 선택할 수 있는데, 이 경우 순열을 GdGe를 지나서 이동한 결과 게이트 Gd' 및 Ge'에 대한 3개의 가능한 구성만이 있다. 도 10은 Bl = Bk 1을 선택하는 구체예에 따른, 3-비트 게이트가 2비트에서 충돌할 때 생성되는 디브리 게이트 세트의 예를 도시하는 블록도이다.
[0108] 단계(525)에서, 2개의 경계 3-비트 게이트(GcGf)는 각각 840 세트의 게이트를 갖는 6개의 미리 결정된 표의 특정 표로부터 랜덤하게 선택된다. 일단 브레이딩 게이트(Bk)가 선택되면, 게이트(Gc, Gd, Ge, Gf)를 결정하기 위해, 미리 구성된 테이블에서 랜덤하게 게이트(Gc, Gf)를 선택함으로써 시작한다. 이 랜덤한 선택은 결과 게이트에서 원래 게이트를 리버스 엔지니어링하지 못하게 하는 이점이 있다. 6개의 이러한 표가 있으며 각각 8!/(2! 4!)=840개의 고유한 3-비트 가역 게이트 유형을 포함한다. 이 표의 목적은 가능한 게이트 세트(Gc, Gd, Ge, Gf)를 비등가 게이트로 제한하고 게이트 GdGe에 대한 검색을 용이하게 하는 것이다. 6개의 미리 정해진 표 각각에서 게이트가 멤버십을 준수하는 조건은 다음과 같다. 도 11은 일 구체예에 따른, 3-비트 게이트가 2비트에서 충돌할 때 디브리 게이트를 생성하는데 유용한 표를 선택하기 위한 예시적인 조건을 도시하는 블록도이다.
[0109] 표 1 내지 3은 모든 i, j = 1, ... , 840에 대해 GciGcj· g가 되도록 비트 x 2, x 3 , x 4에 작용하는 게이트들 {Gci}를 포함한다. 표 1에 대해, g는 비트 x 4에서의 순열과 비트 x 2 및 x3에 작용하는 2-비트 게이트의 곱이다. 표 2에서, g는 비트 x 3에서의 순열과 비트 x 2x 4에 작용하는 2-비트 게이트의 곱이다. 표 3에서, g는 비트 x 2에서의 순열과 비트 x 3x 4에 작용하는 2-비트 게이트의 곱이다. 표 4 내지 6은 Gfig·Gfj(i , j = 1, ..., 840)가 되도록 비트 x 1, x 2, x 3에 작용하는 게이트들 {Gfi}를 포함한다. 표 4에서, g는 비트 x 1에서의 순열과 비트 x 2x 3에 작용하는 2-비트 게이트의 곱이다. 표 5에서, g는 비트 x 2에서의 순열과 비트 x 1x 3에 작용하는 2-비트 게이트의 곱이다. 표 6에서, g는 비트 x 3에서의 순열과 비트 x 1x 2에 작용하는 2-비트 게이트의 곱이다. 표는 어떤 방식으로든 생성될 수 있다. 예를 들어, 일부 구체예들에서, 표는 시행 착오에 의해, 즉 모든 3-비트 게이트(8! 게이트)를 통해 실행되고, 각 게이트에 대해 2-비트 게이트(4! = 24개 가능성)와 1-비트 게이트(2! = 2개 가능성)의 곱과 동등한 모든 것을 제거함으로써 생성된다. 따라서 전반적으로 각 표에 대해 8! x 4! x 2!=1,935,360개 경우를 확인해야 한다. 그것은 분명 현재 프로세서에서 가능하다(예: 각 표에 대해 1시간 미만 소요될 것이다).
[0110] 브레이딩 게이트 유형 선택과 선택된 표 사이의 대응 관계는 다음과 같다. B0 B1의 경우 게이트 Gc는 표 1에서 무작위로 선택되고 게이트 Gf는 표 4에서 무작위로 선택된다. B2B3의 경우 게이트 Gc는 표 2에서 무작위로 선택되고 게이트 Gf는 표 5에서 무작위로 선택된다. B4B5의 경우 게이트 Gc는 표 3에서 무작위로 선택되고 게이트 Gfat는 표 6에서 무작위로 선택된다.
[0111] 단계(527)에서, 나머지 2개의 3-비트 게이트(GdGe)는 방정식 2의 해를 구하도록 선택된다.
Ge·Gd = O =Bk·Gf -1 ·Gb·Ga·Gc -1 ·Bk -1 (2)
단지 2개의 중첩되는 비트만을 갖는 곱 Ge·GdO로 지정된 4-비트 연산자(operator) 게이트에 대응한다는 점에 유의한다. 도 12는 일 구체예에 따른, 3-비트 게이트가 2비트에서 충돌할 때 일부 디브리 게이트(GdGe)를 결정하기 위해 분해된 예시적인 4-비트 연산자(O)를 도시하는 블록도이다. 단계(527)에서, 방정식 2의 해를 찾을 수 있는지가 결정된다. 그렇지 않다면, 제어는 단계(525)로 되돌아 가서 상이한 2개의 경계 게이트(GcGf)를 무작위로 선택하고, 단계(527)에서 시도를 반복하여 나머지 게이트(GdGe)에 대해 해를 구한다. 해가 발견되면 제어는 단계(541)로 넘어간다. 많은 쌍의 게이트 GdGe가 종종 발견된다. 경험적으로, 임의의 게이트 GaGb 2500개에서 시작하여 1.25%는 하나의 해를(Gc, Gd, Ge, Gf), 31.80%는 2-10개의 해를, 49.16%는 11-100개의 해를, 11.76%는 101-1000개의 해를, 그리고 6.04%는 1000개 이상의 해를 가짐을 발견하였다. 게이지 대칭 Gb·Ga = Gb·g·g 1·Ga로 인해 모든 (8!)2쌍의 GaGb 게이트가 테스트될 필요는 없다. 여기서 g는 GaGb에 의해 공유된 비트들에 작용하는 2-비트 순열 및 Ga 또는 Gb로부터 비공유 비트에 작용하는 1-비트 순열을 포함하는 게이트이다.
[0112] 단계(521 내지 527)의 동작을 추가로 설명하기 위해, 도 13a의 게이트 Ga 및 Gb를 고려한다. 도 13a는 일 구체예에 따른, 3-비트 게이트 Ga 및 Gb가 2비트에서 충돌할 때 예시적인 디브리 게이트 Gc, Gd, Ge 및 Gf 세트를 도시하는 블록도이다. 게이트 Ga 내지 Gf에 대한 대응하는 진리표가 도 13b에 제공되며 이들의 첨자에 의해 라벨링이 된다. 도 13b는 일 구체예에 따른, 특정 3-비트 게이트 Ga 및 Gb가 2비트에서 충돌할 때 디브리 게이트 Gc, Gd, Ge 및 Gf에 대한 예시적인 진리표 세트를 나타내는 표이다.
[0113] 단계 541에서, 여기에 설명된 바와 같이, 단계 521이 2개의 공유 비트 위치에 기초하여 단계 501로부터 입력되었는지 여부가 결정된다. 그렇다면, 충돌이 해결되고 제어는 전술한 단계 551로 넘어가서, 추가적인 전파가 바람직한지 여부를 확인한다. 그렇지 않으면, 제어는 후술되는 단계(542)로 넘어간다.
[0114] 단계(501)에서 오직 하나의 비트 위치 만이 공유되는 것으로 결정되면, 제어는 단계(531)로 넘어가고 따라서 2개의 공유 비트 위치를 갖는 게이트에 대한 상기 해를 이용한다. 단계(531)에서, 스왑 게이트(S1)가 제1 게이트(Ga) 앞에 추가되어 2비트가 제2 게이트(Gb)와 공유되도록 한다. 스왑 게이트는 값을 변경하지 않고 두 비트의 위치를 바꾸는 2-비트 게이트이며, 1비트의 값이나 위치를 변경하지 않는 퇴화(degenerate) 3-비트 게이트로 구현할 수 있다. 역 스왑 게이트(S1-1 )는 게이트(Ga) 이후 및 게이트(Gb) 전에 추가된다. S1-1 = S1임에 주의하라. 결과 게이트는 방정식 3a에 의해 주어진다.
Gb·Ga = Gb·S1-1·S1·Ga = Gb·S1-1· Ga'·S1 = Gb·S2·Ga'·S1 (3a)
Ga'은 Ga에 기초한 게이트이지만 스왑 게이트 S1의 결과로서 Gb와 겹치는 2개의 비트를 갖는다. Ga'은 게이트 Ga 전에 S1을 이동시킴으로써 형성된다. 하나의 SWAP 게이트는 회로의 내부 부분에 머무르며 S2로 명명된다; 다른 하나는 바깥 부분으로 이동하고 S1으로 명명된다. 그러나 둘 다 동일한 두 비트를 교환(swap)한다. Ga'은 게이트 정의에서 비트를 교환하여 Ga에서 얻을 수 있다. 선택한 게이트의 경우 교환되는 비트와 교환 방법에 따라 SWAP 삽입을 수행하는 4가지 방법이 있다. 따라서 총 8가지 방법으로 충돌을 진행할 수 있다.
[0115] 도 14는 일 구체예에 따른, 3-비트 게이트가 하나의 비트에서 충돌할 때 스왑 게이트를 도입하는 8가지 예시적인 방법을 도시하는 블록도이다. 예시된 구체예에서, 게이트 Ga는 비트 x 1, x 2, x 3에 작용하고 게이트 Gb는 비트 x 3, x 4, x 5에 작용하므로, 하나의 비트 x 3에 충돌이 있다(비트는 서로 인접할 필요는 없다). 다음에서, 하나의 게이트 Ga가 선택되고 그 첫번째 비트가 게이트 Gb의 두 번째 비트와 스왑될 때 첫번째 방법 만이 더 발전된다. 이 프로세스는 다른 7가지 방법에 쉽게 적용할 수 있다. 도 15는 일 구체예에 따른, 3-비트 게이트가 하나의 비트에서 충돌할 때 사소하지 않은 디브리 게이트를 생성하는 예시적인 단계 세트를 도시하는 블록도이다. 도 14에 도시된 첫번째 옵션은 제1 및 제4 비트를 스왑하는 교환하는 S1=S2를 사용하는 예시된 사례에 대해 도 15에 도시된 단계 1의 결과를 생성한다.
[0116] 단계(533)에서, Ga'과 역 스왑 게이트(S2) 사이에 또 다른 한 쌍의 스왑 게이트(S3 및 S4=S3-1)가 추가된다. 2개의 스왑 게이트는 2개의 충돌 비트를 스왑(swap) 및 언스왑(un-swap)한다. 결과는 방정식 3b로 표현된다.
Gb·Ga = Gb·S2·S4·S3·Ga'·S1 (3b)
이 단계는 도 15의 단계 2로서 도시된 구체예에 대해 도시되어 있다. 두 개 중 첫번째, S3은 Ga'과 병합(merge)되어 Ga''을 형성하고 두번째, S4는 역 스왑 게이트 S2와 병합되어 Gp를 형성한다.
Gb·Ga = Gb·Gp·G a ”·S1 (3c)
여기서 Ga”= S3·Ga' 및 Gp = S2 S4
결과는 각각 2 비트 위치를 공유하는 3개의 게이트 Ga”, Gp 및 Gb를 포함한다. 이 단계는 도 15의 단계 3으로서 도시된 구체예에 대해 도시되어 있다.
[0117] 그러면 제어는 단계(521)로 진행하여 방정식 4a 및 4b를 제공하기 위해 2비트 충돌에 대해 전술한 바와 같이 인공적으로 생성된 게이트(Gp) 및 원래 게이트(Gb)를 4개의 게이트 및 2개의 브레이딩 게이트로 대체한다.
Gb·Ga = Gb·Gp·G a ”·S1
= Gf·A·Gc·Ga”·S1 (4a)
여기서 A = Bl·Ge·Gd·Bk (4b)
이 단계는 도 15의 단계 4로서 도시된 구체예에 대해 도시되어 있다.
[0118] 그러나 이번에는 단계(527)에서 해 Gf·A·Gc Gf가 발견되고 제어가 단계(541)로 넘어 가면 테스트에 대한 답은 “아니오”이며 원래 게이트 Ga와 Gb는 두 위치를 공유하지 않았다. 그리고 제어는 단계(542)로 넘어 간다.
[0119] 단계(542)에서, 2비트 충돌이 원래의 1-비트 충돌, 예를 들어 Gp 및 Gb에 의해 생성된 첫번째 충돌인지 여부가 결정된다. 그렇다면, 제어는 단계(543)로 넘어 간다.
[0120] 단계(543)에서, 제1의 해결된(resolved) 2 비트 충돌로 인한 제1 게이트(Gc)는 스왑 게이트(S3)와 스왑된 원래 게이트(Ga')를 병합하는 데서 남은 게이트(Ga”)와 충돌하게 된다. 결과는 방정식 5a 및 5b를 제공하기 위해 2개의 비트 충돌에 대해 전술한 바와 같이 4개의 더 많은 게이트 및 2개의 브레이딩 게이트이다. 편의상 게이트 Ga에 의해 도입된 정보의 가장 깊은 침투를 반영하기 위해 외부(outer)의 게이트를 Gf' 대신에 Ga'”라고 한다.
Gb·Ga = Gf·A·Gc·Ga"·S1
= Gf·A·Ga'"·BlGeGdBkGc'·S1 = Gf·A·Ga'"·B·Gc'·S1 (5a)
여기서 B = BlGeGdBk' (5b)
이 단계는 도 15의 단계 5로서 도시된 구체예에 대해 도시된다.
[0121] 단계(542)에서, 2-비트 충돌이 원래의 1-비트 충돌에 의해 생성된 첫번째 2-비트 충돌이 아닌 것으로 판정되면, 제어는 단계(545)로 진행하여 단계(543)의 결과 방정식 5a를 처리한다.
[0122] 단계(545)에서, 나머지 스왑 게이트(S1)는 충돌이 단계(543)의 충돌로 인해 외부 게이트(Gf)에 영향을 줄 때까지(방정식 6) 게이트 A·Ga'"·B·Gc'와 충돌한다. 3비트 게이트(Gc')와 2비트 스왑 게이트(S1)의 충돌은 Gc'와 2-비트 중첩을 가지는 퇴화 3-비트 게이트(G1)로 취급될 수 있어서 2-비트 충돌 방법이 사용될 수 있다. 이러한 종류의 충돌에 대한 결과는 간단하다: 스왑 게이트(S1)는 3-비트 게이트를 "통과하여 이동하여(moves through)" 문자 그대로 비트 라인을 스왑한다. 스왑 게이트 S1은 게이트를 통과하여 이동하여 게이트 Gf에 도달할 때까지 각각 수정한다. 구성에 의해, 게이트 S1 및 Gf는 2개의 비트 라인을 공유한다. 따라서, S1은 Gf에 흡수되어 후자를 Gf'으로 바꾸어 Gf'과 같은 비트 라인에 작용한다.
Gb·Ga = Gf A'·Ga""·BGc'' (6)
순열 A 및 B, A' 및 B' 모두에 대해, 2-비트 충돌의 구현 동안에 만들어진 무작위 선택에 따라 그들의 2개의 3-비트 게이트의 3개의 가능한 구성이 있다(도 15에 삽입된 예시적으로 도시한 예에 도시된)는 것에 주목한다. 이 프로세스의 최종 결과는 원래 게이트 Ga 및 Gb와 동등한 7개의 3-비트 게이트 시퀀스를 설정하는 것이다.
[0123] 그 후, 제어는 전술한 단계(551)로 넘어가서 추가적인 전파가 바람직한지 여부를 확인한다.
[0124] 일부 구체예들에서, 암호화된 데이터상에서 동작하는 난독화된 코드는 난독화될 필요가 없는 전체 프로그램의 일부이다. 이들 일부 구체예들의 일부에서, 난독화 코드는 난독화되지 않은 명령들 사이에 내장된다(embedded).
[0125] 다중의 암호화(MULTIPLE ENCRYPTION). 전술한 단계(309)에서, 충돌 게이트들 전에, 함수 f를 나타내는 게이트들에 걸쳐 복호화 및 암호화 게이트들이 간헐적으로 또는 주기적으로 추가된다. 3-비트 게이트를 사용하여 이 단계와 결과적인 난독화에 대해 여기서 설명한다. n(
Figure pct00020
(n))으로 표현된 게이트(게이트 Ga에 대해 비트 i a ,j a , k a 에 일반적으로 작용)의 오더로 암호화가 수행되는 경우, 다음 방법이 유리하다. 도 16에 도시된 바와 같이, 함수 f를 곱으로서 f = f p ·f p 1 f 2 ·f와 같이 분해한다. 도 16 및 도 17은 일 구체예에 따른, 게이트를 충돌시킴으로써 프로그램을 더 난독화하기 위한 중간 암호화 및 복호화 단계의 도입을 나타내는 블록도이다. 주기적으로 암호화를 도입하기 위해 f에 n g 게이트가 있으면 함수 f r (이 때, r = 1, …p-1) 각각은 n g /p 게이트를 갖도록 선택되고, f p 는 나머지 모든 게이트를 포함한다. 그러면 방정식 7로 주어진 주기적 암호화를 표현한다.
E'·f·E-1 = (E'·f p ·E p -1 -1)…(E r ·f r ·E r -1 -1)…(E2 ·f 2 ·E1 -1)·(E1 ·f 1 ·E-1) (7)
도 17에 도시한 것과 같다. 여기서, 각 r = 1, ... p - 1에 대해 상이한 암호화/복호화 순열을 자유롭게 선택할 수 있다.
[0126] 각 블록(E r ·f r ·E r -1 -1) 자체는 데이터를 복호화하고 계산하고 암호화하는 계산의 예이다. 이들 각 블록이 난독화되면 그들의 곱도 그러하다. 각 블록이 난독화된다는 것은 각 블록의 출력을 보더라도 암호화/복호화 조각 또는 계산 fr을 유추할 수 없음을 의미한다.
[0127] 블록(E r ·f r ·E r -1 -1)을 난독화하는 여러가지 방법이 있는데, 이 때 E r -1 -1 및 E r 은 각각 a n게이트를 포함한다. 여기서 a는 상수
Figure pct00021
(1)(a= 3 또는 4는 많은 보안 목적에 충분함)이며 fr은 b n ~ n g /p 게이트를 포함한다고 가정한다. 도 18은 일 구체예에 따른, 난독화된 프로그램을 생성하기 위한 3개의 예시적인 단계 세트를 도시하는 블록도이다. 도 18은 표현 E r ·f r ·Er-1 -1을 난독화된 회로 Cr로 아말감화시키는 단계를 도시한다: (i) Er-1 1f r 을 블록 A r 에 병합하고 그 블록 A r 을 통해 블록 B r 로서 E r 로부터 게이트를 이동시키는 단계(도 3의 단계(313)에 해당); (ii) f r 및 E r 을 블록 A r 에 병합하고, 그 블록 A r 을 통해 블록 B r 로서 Er-1 1로부터 게이트를 이동시키는 단계 도 3의 단계(311)에 해당); 또는 (iii) A r 로서 부터 f r 을 통해 블록 B r 로서 E r 로부터 게이트를 이동시키고, 아말감화된 블록 A r '을 결과로 얻은 다음 그 블록 A r '을 통해 블록 B r '로서 Er-1 1로부터 게이트를 이동시키는 단계(도 3의 단계(311 및 313 둘 다)에 해당).
[0128] 여기에서 (i) 도 23a을 참조하여 도 23c까지 상세한 구도를 설명한다. 도 23a에서 도 23c까지는 일 구체예에 따른, 암호화/복호화 게이트의 함수 코드로의 이동의 예시적인 거리를 설명하는 블록도이다. 이 설명을 다른 체계로 확장하는 것은 간단하다.
[0129] 체계(scheme)(i)에 따라, 시스템은 E r 에서 a n 게이트와 (f E r -1 -1)에서 (a + b) n 게이트로 E r ·(f r ·E r -1 -1)로서 재구성될 수 있다. 난독화는 (f r ·E r -1 -1)의 아말감화에 의해 이루어지고, 그것을 사이드 A r ,및 E r 의 아말감화에 의하면 사이드 B r 이라고 부른다. 게이트의 수 또는 A r 의 길이는 방정식 8a에서 주어진다.
l(A r ) = (a + b) n. (8a)
[0130] 이 예에서, 도 23a에 도시된 바와 같이 Gb r 로 라벨링이 된 B r 의 각 게이트는 다음과 같이 A r 로 푸시(push) 된다(i = 1, 2, . . . , an). A r B r 사이의 인터페이스에 가장 가까운 B r 의 게이트를 보면, 그것은 반복의 첫번째 단계에서 게이트 Gb 1이고, 그것을 A r 회로의 시작(인터페이스로부터 A r 로의 반대쪽, 예를 들어 이동이 A r 의 첫번째 게이트에 영향을 미칠 때까지)까지 A r 로 푸시한다. 결과(모든 충돌 후)는 한 쪽에서는 회로 A r (1)이고, 다른 쪽에서는 게이트 Gb 2, . . . , Gb an 을 포함하는 회로 B r (1)이다. 게이트 Gb 1A r 의 먼 쪽으로 푸시됨에 따라, 사이드 A r 의 사이즈 l(A r )을 사이즈 l(A r (1)) of A r (1)까지 증가시키는 게이트 충돌이 있다.
[0131] 길이 증가 l(A r (1))―l(A r )은 다음과 같이 추정된다. 위에서 도출된 충돌이 없는 침투 깊이는 l 0 = n/9이므로
Figure pct00022
Figure pct00023
충돌이 있을 것이다. 각 충돌은 (d1) 게이트를 회로에 추가한다. 여기서 1비트 충돌의 경우 δ= 6이고 2비트 충돌의 경우 δ = 3이다(두 개의 충돌 게이트가 단일 게이트로 병합되므로 3비트 충돌의 경우(δ = 0). 위에서 유도된 것처럼 p 1이 오더 n의 팩터(factor) 만큼 p 2보다 크고 p 2가 n의 팩터만큼 p 3보다 크기 때문에 1비트 충돌이 더 가능성이 많은 것일 수 있다. 따라서, 충분히 큰 n에 대해, 사이드 A r 의 길이는 방정식 8b에 의해 주어진 바와 같이 증가된다.
l(A r (1))―l(A r ) = Δl
Figure pct00024
(δ-1) (8b)
K가 회로 길이 l(A r)보다 큰 값으로 사전 설정되면 충돌 게이트가 전체 회로를 통해 이동하여 회로의 전체 길이가 l(A r (1))로 증가한다. 이는 전체 길이 l(A r (m))이 m번째 게이트의 K와 같거나 커질 때까지 다른 게이트들에 대해 반복된다. 그 후, 남은 비이동 게이트는 고정 길이 K로만 이동된다. 이 절차에서, 회로의 길이는 레지스터 N(=n)의 크기에 따라 기하 급수적으로 증가하지 않는 것이 확실하다.
[0132] Gb 1을 전파한 후 게이트 Gb 2를 가져 와서 A r (1)로 푸시하지만 Gb 1에서 한 것처럼 끝까지 끝까지 푸시하지는 않는다. 여기서, 도 23b에 도시된 바와 같이 A r (1)의 끝으로부터의 거리 K= Δl≡
Figure pct00025
(δ-1)을 정지시킨다. 이러한 방식으로, 게이트 Gb 2는 게이트 Gb 1이 첫번째 단계에서 A r 을 통해 푸시된 것과 동일한 수의 게이트를 통해 A r (1)으로 푸시된다. 결과는 방정식 8c를 만족하는 길이를 갖는 회로 A r (2)이다.
l(A r (2))―l(A r (1)) = Δl
Figure pct00026
(δ-1) (8c).
프로세스는 B의 모든 게이트에 걸쳐 반복한다. 게이트 Gb i 를 회로 A r ( i-1 )로 푸시하고, 그 끝으로부터 거리 (i 1) Δl를 멈추고 방정식 8d를 만족시키는 길이를 가진 회로 A r ( i )를 얻는다.
l(A r ( i ))―l(A r ( i -1)) = Δl≡
Figure pct00027
(δ-1) (8d).
[0133] 단계(313)에서의 절차의 끝에서, 도 23c에 도시된 바와 같이 B r 내부의 모든 a n 게이트를 측면 Ar로 밀어 넣고, 2개의 회로를 회로 C r 로 아말감화한다. 아말감화된 회로의 최종 길이는 식 8d의 재귀(recursion)로부터 얻어지고 결과는 식 8e가 된다.
l(A r ( an )) = l(A r ) + an Δl (8e)
사이드 B r 의 게이트 목록이 사이드 A로 비워 지거나, 또는 동등하게 l(B r ( an ))=0이므로 아말감화된 회로 C r 의 전체 길이는 방정식 8e에 의해 주어진다. 상기 정의된 것과 같이, 및 방정식 8b 또는 8c 또는 8d로부터 Dl 의 정의와 같이, A r 의 길이에 대해 (a+b)n을 대입하면 방정식 8f와 같이 현재 세그먼트에 대한 아말감화된 회로 C r 을 얻는다.
l(C r ) = (a+b){1 +9a(d-1)}n (8f)
충돌된 Gb들의 최종 정지점의 위치들이 서로 Δl = K만큼 이격되어 있기 때문에 B r 의 게이트는 아말감화된 회로 C를 따라 균일하게 뿌려진다.
[0134] 도 3의 루프(311 내지 315)에서, 위의 아말감화는 모든 세그먼트(r =1, . . . p)에 대해 수행된다. 이 표기법은 E0 -1 = E-1 및 E p = E'임을 주목하여 첫번째 복호화 및 마지막 암호화로 확장된다. 이제 전체적으로 E'·f·E-1과 동등한 난독화된 회로의 길이를 계산할 수 있다. 각각의 (E r ·f r ·E r -1 -1) 블록은 방정식 8f에 의해 주어진 길이의 난독화된 회로 C r 을 생성하는 것을 볼 수 있다. f는 n g 게이트를 가지며 각 f r b n ~ n g /p 게이트를 포함한다고 가정하는 것을 상기하라. 그래서
Figure pct00028
Figure pct00029
블록이 있다. 따라서 전체 난독화 회로의 길이 l(난독화)은 방정식 8f에 팩터
Figure pct00030
를 곱한 C r 길이이다.
[0135] 원래 회로의 암호화 및 복호화 부분의 크기는 an이고 원래 함수 f의 크기는 n g 이므로 원래 회로의 전체 길이는 2an+n g 이다. 회로의 길이가 확장되는 확장 팩터 Z는 방정식 9a에 의해 주어진다.
Z =
Figure pct00031
(9a)
n g >> 2an을 가정하여 이 후자의 용어는 식 (2an+n g )에서 무시될 수 있으며 나머지 항 n g 는 약분되어 없어진다. 따라서 식 9a는 식 9b로 간단히 된다.
Z =
Figure pct00032
(9b)
a ~ 3, b ~ 1, 및 d -1 ~ 5의 대표적인 값의 경우, 확장 팩터는 z ~ 544이다. 따라서, 이 예시적인 구체예에서, E'·f·E-1의 단일의 구별할 수 없는 3-비트 가역 게이트 세트로의 아말감화는 약 500의 오버헤드 팩터를 발생시킨다. 이 오버 헤드는 높지만 최근에 제안된 다른 동형 방법론(homomorphic methodology)보다 훨씬 적다. 많은 중요한 응용 분야에서 500의 오버헤드 팩터는 합리적이고 수용 가능하다.
[0136] 융합(FUSION). 전술한 단계(317)에서, 다중의 3비트 게이트가 하나 이상의 k-비트 게이트로 결합된다(k>3). 게이트 충돌 규칙을 사용한 후, 복수의 3-비트 게이트를 하나 이상의 더 큰 k-비트 게이트 각각에 결합함으로써 회로를 더 난독화할 수 있다. k 비트 라인의 앙상블에 작용하는 여러 개의 3-비트 게이트의 곱을 효율적으로 결정하여 가능한 2 k 입력 상태에 대한 순열 연산을 생성할 수 있다. 그러나, 2 k 입력에 대한 순열을 k-라인 세트에 작용하는 3-비트 게이트에 의해 생성된 더 작은 순열의 곱으로 인수분해(factoring)하는 역의 문제는 어려운 문제이다. 여기서, 3-비트 게이트를 곱하여 내부 구성 요소를 결정하기 어려운 k-비트 게이트를 형성하는 예시적인 프로세스를 "게이트 융합(gate fusion)"프로세스라고 한다.
[0137] 서로 융합되는 다중의 3-비트 게이트 수집은 다른 방식으로 수집될 수 있다. 한 가지 예는 다음과 같이 진행되는 어크리션(accretion)이다. 회로의 어딘가에서 3-비트 게이트를 선택하여 게이트 클러스터를 시작(또는 시딩(seeding))한다. 다음으로, 이 게이트를 가져와서 그것과 적어도 하나의 비트를 공유하는 첫번째 이웃을 왼쪽 또는 오른쪽으로 검색한다. 이 두번째 게이트는 클러스터에 추가된다. 클러스터에서 두 게이트가 사용하는 비트 라인의 수는 최대 5개로, 첫번째 게이트의 초기 3비트 라인 및 첫번째 게이트에서 사용되지 않지만 두번째 게이트에서 사용되는 최대 2-비트 라인이다. 클러스터 성장시키는 과정(어크리션)은 클러스터에 이미 있는 게이트의 왼쪽 또는 오른쪽에 적어도 그것들과 하나의 비트를 공유하는 세번째 게이트를 찾음으로써 계속된다. 세 번째 게이트가 추가된 클러스터는 이제 최대 7비트 라인에 스팬(span) 한다. 클러스터가 k 비트 라인에 스팬 할 때까지 프로세스가 반복된다. 융합 프로세스의 예가 도 19에 제공된다.
[0138] 도 19는 일 구체예에 따른, 프로그램을 더 난독화하기 위해 3-비트 게이트를 더 많은 비트의 다수의 게이트로 융합하는 예를 도시하는 블록도이다. 도 19는 15개의 인접한 3-비트 게이트가 3개의 인접한 게이트 A, B 및 C로 융합되는 것을 보여주며, 여기서 A는 9-비트 게이트이고, B 및 C는 8-비트 게이트이다. k-비트 게이트 클러스터에서 최소 3-비트 게이트 수는 h min=(k―1)/2이다. 클러스터에서 모든 기본 3-비트 게이트의 곱은 k 비트의 2k 상태 공간에 작용하는 순열 P이다. 이 곱은 z = 0, . . . , 2 k ―1에 대해 2kP(z) 목록으로 계산되어 저장될 수 있다.
[0139] 순열 P를 기본 3-비트 순열의 곱으로 되돌리거나(Reverting) 또는 인수분해하는 것은 어려운 문제이다. k-비트 순열 P를 생성하기 위해 곱하는 3-비트 게이트의 모든 가능한 조합을 철저히 검색하려면 식 10에 의해 주어진 적어도 S 수의 단계가 필요하다.
S =
Figure pct00033
(10)
여기서 k는 홀수이다. 예를 들어, k=11 비트의 경우, 예를 들어, 5킬로바이트 미만의 메모리를 사용하여 각각 최대 11비트를 갖는 211 워드리스트를 갖는 순열 P를 저장할 수 있다. (3-비트 게이트를 융합하면 다중 게이트의 사전 처리된 동작을 서버에 전달하여 다중의 3-비트 게이트의 결과를 메모리에 저장한다는 이점이 있다.) 그러나 순열 P를 인수분해하려면 상당한 계산 노력이 필요하다. 원래의 3-비트 구성 요소로 순열을 철저히 인수분해하려면 오더 1032 단계가 필요하다. k = 21 비트의 경우, 7메가바이트 미만의 메모리를 사용하여 순열 P를 저장할 수 있지만 P를 인수분해하는 기본 3-비트 게이트를 철저하게 검색하려면 최대 1071 단계가 필요하다.
[0140] 또한 2k 상태에서의 k-비트 게이트 또는 순열은 3-비트 연산의 곱으로 다른 인수분해를 가질 수 있음에 유의한다. 인수분해를 발견하더라도 난독화를 되돌리는 데 진전을 보인 것은 아니다. 위의 체계에서 사용된 정확한 것과 다른 순열을 발견하면 실제로 계산을 더 모호하게 한다.
[0141] 곱셈 예제(MULTIPLICATION EXAMPLE). 두 개의 숫자 x와 y를 곱하여 결과 x·y를 생성하는 함수 f를 고려한다. 가역 게이트로 이 기능을 구현하려면 앤실라(ancilla) 비트를 사용해야 한다. 도 20은 일 구체예에 따른, 2-비트 곱셈 함수 f에 대한 3-비트 게이트 시퀀스의 예시를 나타내는 블록도이다. 2-비트 곱셈 회로는 6개의 Toffoli T와 4개의 R,
Figure pct00034
3-비트 가역 게이트를 사용하는 제어된 리플 가산기를 기반으로 한다. 인셋(inset)은 R 및
Figure pct00035
게이트가 CNOT 및 Toffoli 게이트로 분해되는 것을 보여준다. 도 20은 5개의 앤실라 비트를 사용한다. x와 y가 입력으로 사용되면, 앤실라 비트는 0으로 설정되고 회로는 출력 x, xy로 생성되고 하나의 앤실라 비트는 0으로 설정된다.
[0142] 데이터와 계산을 암호화하기 위해 암호화 기능 E와 E'에는 각각 약 30개의 3-비트 가역 게이트가 포함되어 있다. 함수 f는 부분 함수 f1, f2 및 f3의 3개의 블록으로 분해되며, 각각은 f를 정의하는 회로의 서브 세트이며, 연속적인 부분 함수 쌍 사이에 암호화 및 복호화 블록, 즉 f 1f 2 사이에 E1 및 f 2f 3 사이에 E1-1을 삽입한다. 도 21은 일 구체예에 따른, 도 20의 함수 f에 대한 중간 암호화 및 복호화 블록의 삽입의 예를 나타내는 블록도이다.
[0143] 그런 다음 블록을 아말감화한다. 도22. 마지막 단계는 인접한 3-비트 게이트 세트를 k-비트 게이트로 융합하는 것으로 구성되며, 충돌을 되돌릴 수 없을 정도로 큰 k를 갖는다. 도 22는 일 구체예에 따른, 도 21의 다중 중간 암호화로 2-비트 곱셈 함수 f를 난독화하기 위한 예시적인 단계들을 도시하는 블록도이다. 블록 A 1=f E1B 1 = E1을 아말감화하여 회로 C1을 생성한다. 유사하게, 아말감화하여 B 2=E2 A 2=f E1 1을, 및 B 3=E1로 A 3=f E2 1을 차단하고 각각 C 2C 3를 생성한다. 회로 C 3·C 2·C 1 = P를 결합하여 난독화된 회로가 생성된다.
2.2 제어 게이트(Control gates)
[0144] 일부 구체예들에서, q-1 제어 비트를 갖는 CNOT 게이트와 같은 제어 게이트가 사용된다. 여기서 q ∈ {1,2,3, …}이다. 본원에서 사용되는 용어 제어 게이트는 헤드 비트 또는 간단히 게이트의 헤드라고도 하는 단일 대상 비트의 값이 0개 이상의 제어 비트의 값의 함수인 게이트를 의미한다. 테일 비트라고하며 총칭하여 게이트 테일이라고 한다. 테일 비트는 제어 비트에 대한 이진 입력을 기반으로 헤드 비트에 적용되는 논리를 나타낸다. 테일 비트에 대한 이진 입력은 변경되지 않지만 단순히 다음 게이트로 전달된다. 제어 q-비트 게이트를 사용하면 더 간단한 충돌 규칙 세트의 이점이 있다. 가역적 3-비트 게이트 세트로 나타낼 수 있는 모든 표현은 제어 게이트만으로 구성된 게이트 세트로 다시 캐스팅할 수 있다. 따라서, 도 3의 전체 방법(300)의 단계(301)에서 일부 구체예들에서, 각각의 소스/객체 코드 명령은 표에서 하나 이상의 제어 게이트와 관련된다. 대부분의 기본 기능을 제어 게이트로 작성하는 방법은 잘 알려져 있다.
[0145] 도 24a 내지 도 24는 일 구체예에 따른, 일반적인 가역적 3-비트 게이트 대신에 사용되는 예시적인 제어 q-비트 게이트를 도시하는 블록도이다. 단일 타겟 비트는 내부에 수직 십자형이 있는 원으로 표시된다. 제어 비트는 "참" 유형 로직(속이 찬 원) 또는 "거짓" 유형 로직(열린 원)일 수 있다. 거짓 유형 로직은 해당 비트의 값이 0인 경우에만 제어가 활성화됨을 나타낸다. 가장 간단한 제어 게이트는 NOT 게이트(도 24a 참조)이며, 이는 하나의 비트에만 작용하며(x 1x 1'), 타겟 비트의 상태를 반전(flip)시킨다.(여기서 아포스트로피는 비트 값의 부정을 나타낸다.) NOT 게이트에는 제어 비트가 없다. CNOT는 도 24b에 도시된 바와 같이 하나의 제어 비트 및 하나의 타겟 비트를 갖는 제어 게이트이다. "참" 유형 로직의 경우 x 1x 1(출력은 입력과 동일하며, 그것은 모든 테일 비트에 적용), 및 x 2x 1
Figure pct00036
x 2이고, 한편, "거짓" 유형 로직의 경우 모든 테일 비트에 그러하듯 x1→x1 및 x 2x 1'
Figure pct00037
x 2이다.
Figure pct00038
기호는 배타적 OR(XOR) 연산을 나타낸다. x1 또는 x2 중 하나만 참인 경우 x 1
Figure pct00039
x 2 표현식은 참이다. Toffoli 게이트는 테일에 2개의 제어 비트 및 헤드에 1개의 타겟 비트를 가지며, 도 24c에 도시된 4가지 종류로 제공된다. 예를 들어, 하나의 다양성에서, 두 제어 비트 모두가 "참" 유형 로직인 경우, 모든 테일 비트의 경우와 같이 x 1x 1x 2x 2이고, x 3x 3
Figure pct00040
x 1·x 2, 즉 x3는 x1과 x2의 곱으로 XOR된다. 제어 비트가 거짓 유형 로직인 경우 해당 비트의 값은 XOR에서 부정되고 연산들을 곱한다. 가역 제어 게이트는 XOR 기능을 사용하여 새 헤드 비트 값을 정의한다. 다른 모든 로직 연산은 한 세트의 XOR 제어 게이트에서 게이트를 조합하여 얻을 수 있다.
[0146] 도 24d는 일 구체예에 따른, 융합 또는 게이트 충돌로 인한 게이트와 같은 예시적인 6-비트 제어 게이트를 도시하는 블록도이다. 예시된 사례에서, 6-비트 제어 게이트는 5-개의 테일 비트(3개의 "참" 및 2개의 "거짓")를 갖는다. 헤드 비트에서 실행되는 로직은 속이 빈 원으로 표시된 것과 같이 부정된(negated) 테일 비트에 도달하는 값의 곱으로 헤드 비트에 입력된 값의 XOR이다. 이하, 이 섹션 2.2에서, 제어-타겟 유형의 게이트는 문맥상 명백하지 않으면 게이트로만 지칭될 것이다. 도 25는 일 실시예에 따른, 일반적인 3-비트 게이트 대신에 사용되는 제어 게이트의 예시적인 간략화된 개략도를 도시하는 블록도이다. 도 25는 테일의 모든 제어 비트가 박스로 대체된 제어 게이트의 단순화된 그래픽 표현을 소개한다. 때때로, 하나 이상의 제어 비트가 박스 밖으로 당겨져서 게이트 충돌을 구별하기 위해 명시적으로 도시된다.
[0147] 각각의 제어 게이트 g는 헤드(제어된 비트 어드레스) 및 테일을 포함하는 리스트에 의해 라벨링될 수 있으며, 그것은 간략화를 위해 이하에서 비드(bead)라고 하는 관련 논리 로직을 갖는 비트 어드레스의 리스트이다. 각 비드 b는 제어 비트 어드레스 i(b)를 포함하는 쌍(i(b),σ(b))에 해당하며 제어가 부정되는지(열린 원에 해당하는 σ(b)=1) 그렇지 않은지(채워진 원에 해당하는 σ(b)=0) 여부에 대응한다. 예를 들어, [3, [(1, 0), (2, 0)]]은 부정이 없이 비트 1 및 2에 의해 제어되는 비트 3에 작용하는 Toffoli 게이트이다: x 1x 1, x 2x 2, 및 x 3x 3
Figure pct00041
x 1·x 2. 다른 예로, [2, [(1, 1)]]은 비트 1이 거짓인 경우 비트 2에 작용하는 CNOT이므로 비트 1의 값이 부정된다: x 1x 1, x 2x 2
Figure pct00042
x 1'. 비트 1에 대한 NOT 게이트는 빈 꼬리가 있는, 즉, 테일 비트가 없는 [1, []]로 단순하게 표시된다. 게이트 g의 헤드 및 테일을 나타내기 위해 h(g) 및 t(g)를 도입하여, 비드 b(bt(g))의 비트 어드레스 및 제어의 유형을 다시 (i(b),σ(b))로 각각 나타낸다. 제어된 비트에 대한 게이트 g의 로직 함수를 식 11과 같이 쓸 수 있다.
Figure pct00043
(11)
[0148] 충돌(COLLISIONS). 도 26은 일 구체예에 따른, 도 3의 방법(300)의 단계에서 사용되는 것과 같은 제2 제어 q-비트 게이트를 지나 제1 제어 q-비트 게이트를 전파하기 위한 예시적인 방법(2600)을 도시하는 흐름도이다. 양자 회로(quantum circuits)를 최적화할 때 제어 게이트를 결합하기 위한 이전의 규칙과 달리, 방법(2600)에서 구현된 이러한 규칙은 모든 제어 비트가 참 유형(true type) 로직일 필요는 없다. 이 방법은, 예를 들어, 도 3의 방법(300)의 단계(311) 또는 단계(313) 동안 또는 둘 다에서 서로를 지나 이동될 2개의 인접한 게이트 Ga 및 Gb로 시작한다.
[0149] 도 27a 내지 도 27d는 일 구체예에 따른, 공유 타겟 또는 제어 비트와 제어 게이트의 충돌의 예를 나타내는 블록도이다. 도 28a 및 도 28b는 일 구체예에 따른, 상이한 비중첩 제어 비트와 제어 게이트의 충돌의 예를 나타내는 블록도이다. 도 29a 내지 도 29d는 일 구체예에 따른, 하나의 게이트의 헤드의 하나의 비트가 다른 게이트의 테일의 하나의 비트와 중첩되는 경우 제어 게이트의 예시적인 충돌을 도시하는 블록도이다. 이러한 유형의 충돌을 일방향 충돌(one-headed collision)이라고 한다. 도 30a 내지 도 30d는 일 구체예에 따른, 양 게이트의 헤드의 하나의 비트가 다른 게이트의 테일에서 하나의 비트와 중첩되는 제어 게이트의 예시적인 충돌을 나타내는 블록도이다. 이러한 유형의 충돌을 양방향 충돌(two-headed collision)이라고 한다. 도면에서 X 및 Y는 충돌에 참여하지 않는 2개의 충돌 게이트 Ga 및 Gb의 제어 비트에 대한 부울 함수(Boolean function)를 나타내고; 이들은 다른 게이트의 어떤 제어된 비트와도 중첩되지 않는 제어 비트이다. 제어된 비트만 그 값을 변경할 수 있음을 상기하라.
[0150] 단계(2601)에서, 2개의 게이트 Ga 및 Gb가 동일한 지, 즉 동일한 비트 및 동일한 타겟 비트에 작용하는 동일한 테일을 갖는지 여부가 결정된다. 이것은 도 27a에 도시되어 있다. 두 테일 모두 X로 표시되어 있으며 꼬리가 동일하다는 것을 나타낸다. 이것은 다른 충돌에 의해 생성된 디브리 게이트의 결과로 발생할 수 있다. 논리적으로 이것은 항상 두 번째 게이트가 첫 번째 게이트의 동작을 취소하게 한다. 그리고 어떤 작용의 전체적 결과는 전혀 동작이 없는 것이다. 따라서, 단계(2601)에서 2개의 게이트가 동일하다고 결정되면, 단계(2603)에서, 도 27a에 도시된 바와 같이 양 게이트 모두 회로에서 제거된다. 이러한 종류의 충돌은 도 27a의 예와 같이 게이트 수를 감소시키며, 이를 단순화(simplification)라고 한다. 그 후 제어는 단계(2651)로 넘어간다.
[0151] 일부 구체예들에서, 단계(2601)는 하나의 테일 비트를 제외하고 동일한 헤드 비트 및 테일 비트를 갖는 인접 게이트에 대해서와 같이 단순화를 위한 하나 이상의 다른 조건이 발생하는지를 결정하는 단계를 포함한다. 이러한 상황은 도 27b, 도 27c 및 도 27d에 도시되어 있다. 도 27b 및 도 27d는 제1 게이트 Ga가 참 로직 타입(도 27b) 또는 거짓 로직 타입(도 27d)의 추가 테일 비트를 갖는다는 것을 제외하면 제1 게이트 Ga가 제2 게이트 Gb와 동일하다는 것을 보여준다. 어느 경우에도 모두 충돌(단순화) 규칙은 두 게이트 Ga와 Gb가 동일한 헤드 비트와 동일한 공통 테일 비트(X)를 갖는 단일의 단순화된 게이트 Gs에 의해 대체되지만, 제1 게이트의 추가 비트는 반대의 로직 유형으로서 Gs의 테일에 포함된다는 것이다. 도 27c는 두 개의 게이트 Ga 및 Gb가 하나의 테일 비트에서의 로직 타입을 제외하고는 동일함을 도시한다. 이 상황에서 충돌(단순화) 규칙은 두 게이트 Ga 및 Gb가 동일한 헤드 비트와 동일한 공통 비트(X)를 갖지만 다른 테일 비트는 없는 단일 단순화된 게이트 Gs로 대체된다는 것이다. 원래의 두 게이트에서 상충되는 로직 유형을 가지는 테일 비트는 단순화된 게이트 Gs의 테일로부터 제거된다.
[0152] 단계(2651)에서, 결과 게이트가 아래에 더 상세히 설명되는 바와 같이, 모든 게이트가 이동될 수 있도록 인접한 게이트 내로, 예를 들어 J 또는 K 게이트와 같은 명령 목록을 통해 충분히 멀리 침투했는지 여부가 결정된다. 그렇지 않다면, 다음 제1 게이트 Ga 및 제2 게이트 Gb가 선택되고 제어는 단계(2601)로 되돌아간다. 대신에 충분한 게이트에 의해 충분한 침투가 있었으면, 제어는 단계(2653)으로 넘어가고, 일부 구체예들에서, 다른 단순화를 위해 게이트의 결과 시퀀스(일명, 명령어 목록 또는 "회로")를 스위핑(sweeping)한다. 그 후 프로세스는 종료되고, 제어는 도 3의 방법(300)에서 단계(313) 또는 단계(315)로 되돌아간다.
[0153] 단계(2601)에서 2 개의 게이트 g1 및 g2(예를 들어, Ga 및 Gb)가 동일하지 않다고 결정되면, 제어는 단계(2611)로 진행한다. 단계(2611)에서, 제1 게이트(Ga)의 목표 비트와 공유되는 제2 게이트(Gb)의 임의의 제어 비트가 있는지 여부가 결정된다. 이러한 상황이 적어도 하나의 일방향 충돌을 나타내는 도 29b 및 도 29d, 테일에서의 쌍방향 충돌을 나타내는 도 30a, 도 30b, 도 30c 및 도 30에 도시되어 있다. 그렇다면, 단계(2613)에서, 제1 게이트 Ga에 제2 게이트의 목표 비트와 공유되는 임의의 제어 비트가 있는지 여부가 결정된다. 그렇지 않으면, 도 29b 및 도 29d에서와 같이 테일에서 단 하나의 일방향 충돌이 있고 제어는 단계(2621)로 넘어간다.
[0154] 단계(2621)에서, 게이트는 제1 게이트에서의 헤드와 테일에서의 일방향 충돌에 대한 규칙을 사용하여 충돌된다. 이것은 충돌하는 테일 비트에서 참 유형 로직(채워진 원)에 대해 도 29b에 도시된 바와 같이 또는 충돌하는 테일 비트에서 거짓 유형 로직에 대해 도시된 바와 같이 디브리 게이트 Gc를 생성한다. 어느 경우이든, 충돌 규칙은 디브리 게이트 Gc가 식 11에 의해 표현된 로직에 대해 충돌하는 비트 및 제2 게이트 Gb의 헤드를 제외하고 결합된 테일을 가진다는 것을 보여준다. 단계(2641)에서, 원래의 2개의 게이트 Ga 및 Gb가 Gb, Gc, Ga의 순서로 3개의 게이트로 대체(치환)된다. 그 후, 제어는 전술한 단계(2651) 및 이후로 진행되고; 그리고 결과는 Gb, Gc, Ga의 3 게이트 순서가 된다.
[0155] 단계(2613)에서, 제2 게이트(Gb)의 타겟 비트와 공유되는 제1 게이트(Ga)에 임의의 제어 비트가 있다고 결정되면, 테일에서 양방향 충돌이 있다. 이러한 양방향 사례는 도 30a, 도 30b, 도 30c 및 30d를 포함한다. 제어는 단계(2615)로 넘어 가고, 여기서 게이트는 양방향 충돌 규칙을 사용하여 충돌된다. 이것은 두 개의 충돌 테일 비트에서 참 유형 로직(채워진 원)에 대해 도 30a에 도시된 바와 같이; 또는 충돌하는 테일 비트들에서 참 유형 로직 및 거짓 유형 로직에 대해 도 30b에 도시된 것과 같이; 또는 충돌하는 테일 비트들에서 거짓 유형 로직 및 참 유형 로직에 대해 도 30c에 도시된 것과 같이; 충돌하는 테일 비트들 모두에서 거짓 유형 로직(열린 원)에 대해 도 30d에 도시된 것과 같이; 2개의 디브리 게이트 Gc 및 Gd를 생성한다. 어떤 경우에도, 충돌 규칙은 식 11에 의해 표현된 제어 게이트 로직에 대해, 1) 디브리 게이트 Gc는 제1 게이트 Ga의 헤드 비트 및 제1 게이트 Ga의 테일과 제2 게이트 Gb의 비-충돌 테일을 결합하는 테일 비트를 갖는다는 것; 및 2) 디브리 게이트 Gd는 제2 게이트 Gb의 헤드 비트 및 제2 게이트 Gb의 테일과 제1 게이트 Ga의 비충돌 테일 비트를 결합하는 테일 비트들을 가진다는 것을 보여준다.
[0156] 단계(2617)에서, 원래의 2개의 게이트 Ga 및 Gb가 Gb, Gc, Gd, Ga의 순서로 4개의 게이트로 대체(치환)된다. 그 후, 제어는 전술한 단계(2651) 및 그 이후로 진행된다.
[0157] 단계(2611)에서, 제1 게이트 Ga의 타겟 비트와 공유되는 제2 게이트 Gb의 제어 비트가 없다고 결정되면, 제어는 단계(2631)로 넘어간다. 이러한 상황은 테일과 헤드 충돌이 없음을 나타내는 도 28a, 도 28b에, 및 테일과 최대 일방향 충돌을 나타내는 도 29a 및 도 29c에 도시되어 있다. 그렇다면, 제어는 단계(2631)로 넘어 간다.
[0158] 단계(2631)에서, 제1 게이트 Ga의 임의의 제어 비트가 제2 게이트 Gb의 타겟 비트와 공유되는지가 결정된다. 그렇지 않은 경우, 헤드와 테일의 충돌이 없다. 그리고 제어는 단계(2633)으로 넘어간다. 이 상황이 도 28a 및 도 28b에 도시되어 있다. 단계(2633)에서, 두 개의 게이트가 소통(commute)하기 때문에 제1 게이트는 제2 게이트를 지나서 이동된다. 이어서, 제어는 전술한 바와 같이 단계(2651) 및 이후로 진행된다.
[0159] 단계(2631)에서 제1 게이트 Ga의 임의의 제어 비트가 제2 게이트 Gb의 타겟 비트와 공유되는 것으로 결정되면, 제어는 단계(2635)로 진행한다. 이 상황에서, 도 29a 및 도 29c에 도시된 바와 같이, 제1 게이트 Ga의 테일과 제2 게이트 Gb의 일방향 충돌이 존재한다. 단계(2635)에서, 제2 게이트 Gb의 헤드와 테일의 일방향 충돌에 대한 규칙을 사용하여 충돌된다. 이것은 충돌하는 테일 비트에서 참 유형 로직(채워진 원)에 대하여 도 29a에 도시된 바와 같이 또는 충돌하는 테일 비트에서 거짓 유형 로직에 대하여 도 29c에 도시된 바와 같이 하나의 디브리 게이트 Gc를 생성한다. 어느 경우이든, 충돌 규칙은 디브리 게이트 Gc가 식 11에 의해 표현된 로직에 대한 충돌 비트 및 제1 게이트 Ga의 헤드를 제외한 결합된 테일을 갖는 것을 나타낸다.
[0160] 단계(2641)에서, 원래의 2개의 게이트 Ga 및 Gb가 Gb, Gc, Ga의 순서로 3개의 게이트로 대체(치환)된다. 그 후, 제어는 전술한 단계(2651) 및 이후로 진행되고 결과는 그리고 Gb, Gc, Ga의 3-게이트 순서이다.
[0161] 위에서 설명한 충돌 규칙은 다음과 같이 수학적으로 표현할 수 있다. 게이트 Ga 및 Gb의 충돌에 참여하지 않는 부울 함수 X 및 Y를 구성하는 테일 비드 세트로 t X t Y 을 정의한다. 이들은 방정식 12a 및 12b로 나타낼 수 있다.
Figure pct00044
(12a)
Figure pct00045
(12b)
이 곱은 방정식 13으로 쓸 수 있다.
Figure pct00046
(13)
그러나 모순이 포함된 경우 즉, i(b 1) = i(b 2)인(동일한 비트 라인이지만 σ(b 1) ≠σ(b 2)(반대 부정)) b 1, b 2t X t Y 비드들이 있으면 이 식은 단순화될 수 있다.
이 경우 x'x 유형의 모순이 있으며, 항상 0(거짓)이다. 따라서 식 14에서와 같이 XY를 다시 작성할 수 있다.
Figure pct00047
(13)
모순이 발생하는 경우를 확인하여 충돌을 구성할 때 테일에 XY가 있는 게이트를 제거할 수 있다. 이러한 경우 디브리 게이트가 사라지기 때문이다.
[0162] 또 다른 단순화는 두 개의 게이트를 하나로 결합할 수 있는 경우이다. h(Ga) = h(Gb)인 2개의 게이트(헤드에 대한 동일한 비트 라인) 및 테일 t(Ga) 및 t(Gb)를 고려하자. t(Ga, Gb) ≡t(Ga)∩t(Gb)가 2개의 테일의 교집합을 나타내고, t (Ga, Gb) ≡(t(Ga) ∪ t(Gb)) \ (t(Ga) ∩t(Gb))가 2개의 테일의 외부에 남은 비트들을 나타낸다고 하자. 다음과 같은 단순화가 가능하다.
[0163] | t (Ga, Gb)| = 0이면 두 게이트는 모두 동일한 비드를 가지므로 항등식을 곱한다(동일한 제어 라인을 가진 모든 제어된 게이트는 인볼루션(involution) 또는 자기-역(self-inverse)이다). 이 경우 두 개의 게이트를 회로에서 제거할 수 있다. 이 단순화는 도 27a에 도시되어 있고 단계(2601 및 2603)에서 구현된다.
[0164] 만일 | t (Ga, Gb)|=1이면 두 게이트는 하나를 제외하고 모두 동일한 비드를 가진다. 그래서 비드가 하나이면 하나의 게이트에서 b* ∈ t (Ga, Gb)이고 다른 게이트에서는 그렇지 않은 것으로 나타나는 하나의 비드가 있다. 방정식 15 및 방정식 17을 사용하여 2개의 게이트를 하나로 결합할 수 있다.
Figure pct00048
(15)
Figure pct00049
(16)
Figure pct00050
(17)
다른 말로 하면, 결합된 비드의 테일은 공통 비드에 더하여 동일한 비드 어드레스를 가지나 비드 b*의 부정된 σ를 가지는 비드 b$ = (i(b*), σ'(b*))를 포함한다. 이 단순화는 도 27b 및 도 27d에 도시되어 있고 단계(2653) 및 일부 구체예들에서는 단계(2601 및 2603)에 구현되어 있다.
[0165] | t (Ga, Gb)| = 2이면 2개의 비드 b 1, b 2 t (g1, g2)는 상이한 게이트에 있고 i(b 1) = i(b 2)와 같이 되며 그러면 두 게이트는 결합될 수 있다. 차집합이 2개의 비드를 포함하므로 이들 비드가 동일한 비트 라인에 작용하면 그들은 σ(b 1) ≠σ(b 2)를 가져야 한다(그렇지 않으면 그들은 동일한 비드일 것이나 차집합에 있지 않을 것이다)는 것을 주목하라. 두 개의 게이트는 방정식 18 내지 방정식 20을 사용하여 하나로 결합될 수 있다.
Figure pct00051
(18)
Figure pct00052
(19)
Figure pct00053
(20)
여기서 i(b 1)=i(b 2), 및 σ(b 1)≠σ(b 2)이므로, 그러면 x i( b 1)
Figure pct00054
x i( b2 )=0 및 σ(b 1)
Figure pct00055
σ(b 1)=1이라는 것에 주목한다. 따라서 두 개의 비드 b 1b 2를 제거하여 두 개의 게이트를 단일 게이트로 결합할 수 있다. 단일 게이트는 더 짧은 테일 t(Ga, Gb)를 갖는다. 이 단순화는 도 27c에 도시되어 있다.
[0166] 일부 충돌은 테일이 더 긴 디브리를 포함한 디브리 게이트들을 생성한다. 물론, 크기>3인 디브리 게이트는 크기가 3비트 이하인 여러 제어 q-비트 게이트로 리캐스팅(recasting) 될 수 있다. 하나는 q1 다른 하나는 q2 비트를 가지는 2개의 게이트가 충돌하는 것을 고려하자. 두 개의 게이트가 소통하지 않으면 충돌로 인해 디브리가 남을 것이다. 디브리를 구성하는 게이트(들)의 비트 수에 대한 상한을 찾을 수 있다.
[0167] 먼저 한 게이트(Ga)의 헤드 또는 타겟이 다른 게이트(Gb)의 제어에 충돌하지만 반대로는 그렇지 않은 경우를 고려하자. 이 경우, 디브리는 분명히 Ga의 헤드(1 비트)와 부울 함수 XY의 게이트를 가지게 되며, Ga의 헤드에 부딪힌 Gb의 제어 비트는 제외된다. XY의 최대 비트 수는 q 1―1+q 2―2이다. 따라서 디브리의 최대 비트 수는 q max=q 1+q 2-2이다. 이것은 꼬리에 대한 하나의 헤드 충돌이며 다양한 q-비트 제어 게이트에 대해 도 29a 내지 도 29d에 도시되어 있다.
[0168] 충돌이 한 게이트의 헤드가 다른 게이트의 제어에 충돌하는 것과 그 반대인 경우, 디브리의 비트 수는 부울 함수 XY의 비트 수의 합, 즉 q 1-2+q2-2(각 게이트에서 충돌과 관련된 2 비트를 뺀 값) 더하기 2개의 공통 비트이다. 따라서 다시 q max=q 1+q 2-2를 얻는다.
[0169] 회로에 1 비트 및 2 비트 게이트만 있는 경우(q 1, q 2 ≤ 2), 디브리는 최대 q 1+q 2-2≤2-비트 게이트를 가질 것이다. 따라서 충돌로 인해 더 큰 게이트가 생성되지 않는다(게이트 수는 변경될 수 있지만). 그러나 하나 이상의 3-비트보다 더 게이트를 가지는 순간 충돌로 인해 4-비트 게이트 등이 발생할 수 있다.
[0170] 위의 충돌 규칙을 사용하면 q-비트 제어 게이트 목록으로 변환된 명령 세트를 난독 처리할 수 있다. LEFT 또는 L 파트, MIDDLE 또는 M 파트, RIGHT 또는 R 파트의 세 부분으로 구성된 회로를 고려하자. 동종(homomorphic) 암호화와 같은 특정 응용 프로그램의 경우 회로를 세 부분으로 분할하는 자연스러운 방법이 있다: L=E1, 이진 문자열을 해독하는 회로; M=f, 적용하고자 하는 기능을 구현하는 회로; R=E, 이 회로는 상태를 암호화한다(동일한 키를 사용하는 경우). 다른 예는 키를 변경하기 위해 하나의 암호화 회로를 다른 암호화 회로로 교체하려는 경우, 자연스러운 선택은 L=E1, M=Ψ(중간 회로 없음 또는 빈 게이트 세트), 및 R=E′새로운 암호화 방식이다. 마지막으로, 위의 두 가지 예와 같은 우선 순위 구조가 없는 주어진 회로에 대해, 간단히 두 개의 컷으로 회로를 분할하고 세 개의 결과 부분을 L, M 및 R로 정의할 수 있다.
[0171] 회로를 난독화하는 예시적인 절차는 전술한 제어 q-비트 게이트 충돌 규칙에 의존하여 설명된다. 다음에서 L, M 및 R을 게이트 목록으로 생각할 수 있으며 대괄호 []는 목록의 구분 기호로 사용된다(Python 프로그래밍 언어에서와 같이).
1. L의 가장 오른쪽 게이트(gL이라고 함)를 꺼내고 L'을 이 게이트가 없는 목록 L로 정의한다. 마찬가지로 R의 가장 왼쪽 게이트(gR이라고 함)를 꺼내고 R′을 이 게이트가 없는 목록 R로 정의한다.
2. (i) 왼쪽에서 오른쪽으로 gL을 M + [gR]로 밀어 넣거나 (ii) 오른쪽에서 왼쪽으로 gR을 [gL] +M으로 밀어넣을 것인지 무작위로 선택한다(50% / 50% 확률로). 다음으로 선택한 선택이 오른쪽에서 왼쪽으로 미는 것으로 가정한다(다른 경우는 유추함).
3. 목록 sideA=[gL]+M 및 sideB=[gR]을 초기화한다.
4. 목록 sideA가 비어있지 않고 목록 sideB의 크기와 sideA의 크기에 길이가 규정된 크기 K보다 작은 경우(예: K 게이트) 다음과 같이 한다: sideA의 가장 오른쪽 게이트와 side B의 가장 왼쪽 게이트를 꺼내고; 그것들을 충돌시키고 그들이 파괴(annihilate)하지 않으면 디브리를 목록 sideB에 둔다(디브리를 왼쪽에 추가). while-루프의 두 가지 조건 중 하나가 위반될 때까지 이 단계를 반복한다.
5. 회로의 새로운 MIDDLE 부분인 M'= sideA + sideB를 조립한다.
6. L과 R이 모두 비어 있지 않은 한 업데이트된 삼중항(triplet) L′→L, M′→M, R′→R에 대해 위의 단계를 반복한다; 비어있다면, 회로 Cobf =L+M+R을 반환한다.
[0172] 난독화된 회로 Cobf를 사용하여 난독화된 소스 또는 객체 코드 250을 생성한다. 이 난독화 절차는 서브 루틴 알고리즘 2와 함께 난독화하기 위해 알고리즘 1의 의사 코드(pseudocode)를 사용하여 오른쪽으로 밀어내고 알고리즘 3은 왼쪽으로 밀어내어 구현할 수 있다.
Figure pct00056
Figure pct00057
[0173] 도 31은 일 구체예에 따른, 간단한 기능을 위한 난독화된 프로그램을 생성하기 위한 예시적인 단계 세트를 도시하는 블록도이다. 이 예시적인 회로에서, L 및 R은 각각 3개의 게이트로 구성되고, M은 1개의 게이트만으로 구성된다. 워드 크기는 5비트이다(n=N=5). 이 간단한 예는 L= E1이 복호화 회로이고, R= E가 암호화 회로이고, 함수 f가 M의 단일 게이트(이 경우 CNOT)에 해당하는 경우를 생각할 수 있다. 암호화 회로와 복호화 회로는 서로의 역상이다.
[0174] 제1 단계(도 31의 3101)에서, 게이트 "c"는 게이트 "d"와 충돌하고(1-헤드 충돌, 도 29b 참조), 게이트 "d"의 좌측으로 이동하고 디브리 게이트 “c'”를 남긴다. 게이트 "c"는 게이트 "c-1"과 충돌하여 둘 다 소거(cancelling out)한다(도 27a 참조).
제2 단계(3102)에서, 게이트 "b-1"은 게이트 “c' “일방향 충돌, 도 29b 참조)와 충돌하여 게이트 “c' “의 오른쪽으로 이동하고 디브리 게이트 “b'”를 남긴다. 게이트 “b-1"은 게이트 "d"를 지나서 디브리를 남기지 않고(도 28a 참조) 게이트 "d"의 오른쪽으로 이동한다. 게이트 “b-1”은 게이트 “b”와 충돌하여 모두 소거한다(도 27a). 단계 3(3103)에서, 게이트 "a"는 게이트 “b'“를 지나서 디브리를 남기지 않고 게이트 “b'“의 오른쪽으로 이동한다. 유사하게, 게이트 "a"는 게이트 “c'”를 지나서 디브리를 남기지 않고(도 28a) 게이트 “c'”의 오른쪽으로 이동한다. 게이트 "a"는 게이트 "d"(일방향 충돌, 도 29d 참조)와 충돌하여 게이트 "d"의 왼쪽으로 이동하여 디브리 게이트 “a'”를 남긴다. 단계 4(3104)에서, 인접 게이트 “c'” 및 “a'”는 단일 게이트 "e"로 단순화된다(도 27c 참조). 단계 5(3105)에서, 인접 게이트 “b'” 및 “e”는 단일 게이트 "f"로 단순화된다(도 27b 참조).
[0175] 일부 구체예들에서, 일반적인 가역적 3-비트 게이트에 대해 언급된 바와 같이, 암호화된 데이터상에서 동작하는 난독화된 코드는 난독화될 필요가 없는 전체 프로그램의 일부이다. 이들 구체예들의 일부에서, 난독화 코드는 난독화되지 않은 명령어들 사이에 내장된다(embedded).
3. 계산 하드웨어 개요(Computational Hardware Overview)
[0176] 도 32는 본 발명의 구체예가 구현될 수 있는 컴퓨터 시스템(3200)을 도시하는 블록도이다. 컴퓨터 시스템(3200)은 컴퓨터 시스템(3200)의 다른 내부 및 외부 구성 요소 사이에 정보를 전달하기 위한 버스(3210)와 같은 통신 메커니즘을 포함한다. 정보는 측정 가능한 현상, 일반적으로 전기 전압의 물리적 신호로 표현되지만 다른 구체예들에서는 자기, 전자기, 압력, 화학, 분자 원자 및 양자 상호 작용과 같은 현상을 포함한다. 예를 들어, 북쪽 및 남쪽 자기장 또는 0이 아닌 전압은 2 진수(비트)의 두 상태 (0, 1)을 나타낸다. 다른 현상은 더 높은 밑(base)의 자리수(digit)를 나타낼 수 있다. 측정 전 다수의 동시 양자 상태의 중첩은 양자 비트(qubit)를 나타낸다. 하나 이상의 자리수 시퀀스는 숫자 또는 문자의 코드를 나타내는데 사용되는 디지털 데이터를 구성한다. 일부 구체예들에서, 아날로그 데이터라고 하는 정보는 특정 범위 내에서 측정 가능한 값의 거의 연속적인 값으로 표현된다. 컴퓨터 시스템(3200) 또는 그 일부는 본원에 설명된 하나 이상의 방법의 하나 이상의 단계를 수행하기 위한 수단을 구성한다.
[0177] 이진수의 시퀀스는 숫자 또는 문자의 코드를 나타내는 데 사용되는 디지털 데이터를 구성한다. 버스(3210)는 많은 병렬 정보 도체를 포함하므로, 정보는 버스(3210)에 연결된 장치들 사이에서 빠르게 전송된다. 정보를 처리하기 위한 하나 이상의 프로세서(3202)는 버스(3210)와 결합된다. 프로세서(3202)는 정보에 대한 일련의 동작을 수행한다. 일련의 동작은 버스(3210)로부터 정보를 가져오고 버스(3210)에 정보를 배치하는 것을 포함한다. 일련의 동작은 또한 전형적으로 2개 이상의 정보 단위를 비교하고, 정보 단위의 위치를 이동시키고, 가산 또는 곱셈에 의해 2개 이상의 정보 단위를 결합하는 단계를 포함한다. 프로세서(3202)에 의해 실행될 일련의 동작은 컴퓨터 명령을 구성한다.
[0178] 컴퓨터 시스템(3200)은 또한 버스(3210)에 연결된 메모리 (3204)를 포함한다. 랜덤 액세스 메모리(RAM) 또는 다른 동적 저장 장치와 같은 메모리(3204)는 컴퓨터 명령을 포함하는 정보를 저장한다. 동적 메모리는 컴퓨터 시스템(3200)에 의해 저장된 정보가 변경될 수 있게 한다. RAM은 메모리 어드레스라 불리는 위치에 저장된 정보 단위가 인접 어드레스에서의 정보와 독립적으로 저장되고 검색될 수 있게 한다. 메모리(3204)는 또한 컴퓨터 명령의 실행 동안 임시 값을 저장하기 위해 프로세서(3202)에 의해 사용된다. 컴퓨터 시스템(3200)은 또한 명령을 포함하여 컴퓨터 시스템(3200)에 의해 변경되지 않는 정적 정보를 저장하기 위해 버스(3210)에 연결된 ROM(Read Only Memory)(3206) 또는 다른 정적 저장 장치를 포함한다. 버스(3210)에는 또한 컴퓨터 시스템 (3200)이 꺼지거나 그렇지 않으면 전력이 손실될 때도 지속되는 명령을 포함하는 정보를 저장하기 위한 자기 디스크 또는 광 디스크와 같은 비휘발성(non-volatile)(지속적) 저장 장치(3208)가 결합되어 있다.
[0179] 명령을 포함하는 정보는 인간 사용자에 의해 조작되는 영숫자 키를 포함하는 키보드 또는 센서와 같은 외부 입력 장치(3212)로부터 프로세서에 의해 사용하기 위해 버스(3210)에 제공된다. 센서는 그 근방의 조건을 검출하고 그 검출을 컴퓨터 시스템(3200)에서 정보를 나타내는데 사용되는 신호와 호환 가능한 신호로 변환한다. 버스(3210)에 결합되어 인간과 주로 상호 작용하기 위해 사용되는 다른 외부 장치는 이미지를 제시하기 위한 음극선관(CRT) 또는 액정 디스플레이(LCD)와 같은 디스플레이 장치(3214) 및 디스플레이(3214) 상에 제시된 작은 커서 이미지의 위치를 제어하고 디스플레이(3414) 상에 제시된 그래픽 요소와 관련된 명령을 발행하기 위한 마우스 또는 트랙볼 또는 커서 방향 키와 같은 포인팅 장치(3216)를 포함한다.
[0180] 도시된 구체예에서, 주문형 집적 회로(IC)(3220)와 같은 특수 목적 하드웨어가 버스(3210)에 결합된다. 특수 목적 하드웨어는 프로세서(3202)에 의해 수행되지 않은 동작을 특수 목적을 위해 충분히 빠르게 수행하도록 구성된다. 애플리케이션 특정 IC의 예는 디스플레이(3214)를 위한 이미지를 생성하기 위한 그래픽 가속기 카드, 네트워크를 통해 전송된 메시지를 암호화 및 복호화를 위한 암호화 보드, 음성 인식 및 하드웨어에서 보다 효율적으로 구현되는 복잡한 작업 순서를 반복적으로 수행하기 위한 로봇 팔 및 의료 스캐닝 장비와 같은 특수 외부 장치에 대한 인터페이스를 포함한다.
[0181] 컴퓨터 시스템(3200)은 또한 버스(3210)에 연결된 통신 인터페이스(3270)의 하나 이상의 인스턴스(instance)를 포함한다. 통신 인터페이스(3270)는 프린터, 스캐너 및 외부 디스크와 같은 자체 프로세서로 작동하는 다양한 외부 장치에 양방향 통신 연결을 제공한다. 일반적으로, 커플링은 로컬 네트워크(3280)에 연결된 네트워크 링크(3277)와 자체 프로세서를 갖는 다양한 외부 장치가 연결된다. 예를 들어, 통신 인터페이스(3270)는 개인용 컴퓨터상의 병렬 포트 또는 직렬 포트 또는 범용 직렬 버스(USB) 포트일 수 있다. 일부 구체예들에서, 통신 인터페이스(3270)는 ISDN(Integrated Services Digital Network) 카드 또는 DSL(Digital Subscriber Line) 카드 또는 해당 유형의 전화선에 정보 통신 연결을 제공하는 전화 모뎀이다. 일부 구체예들에서, 통신 인터페이스(3270)는 버스(3210)상의 신호를 동축 케이블상의 신호 또는 광섬유 케이블상의 통신 연결을 위한 광 신호로 변환하는 케이블 모뎀이다. 다른 예로서, 통신 인터페이스(3270)는 이더넷과 같은 호환가능한 LAN에 데이터 통신 연결을 제공하기 위한 근거리 통신망(LAN) 카드일 수 있다. 무선 링크도 구현될 수 있다. 무선, 광학 및 적외선을 포함한 음파 및 전자기파와 같은 반송파는 와이어 또는 케이블이 없는 공간을 통과한다. 신호에는 진폭, 주파수, 위상, 분극 또는 반송파의 기타 물리적 특성의 인공 변형이 포함된다. 무선 링크의 경우, 통신 인터페이스(3270)는 디지털 데이터와 같은 정보 스트림을 운반하는 적외선 및 광학 신호를 포함하는 전기, 음향 또는 전자기 신호를 송수신한다.
[0182] 컴퓨터 판독 가능 매체(computer-readable medium)라는 용어는 본원에서 실행 명령을 포함하여 프로세서(3202)에 정보를 제공하는데 참여하는 임의의 매체를 지칭하기 위해 사용된다. 이러한 매체는 비휘발성 매체, 휘발성 매체 및 전송 매체를 포함하지만 이에 제한되지 않는 많은 형태를 취할 수 있다. 비휘발성 매체는 예를 들어 저장 장치(3208)와 같은 광학 또는 자기 디스크를 포함한다. 휘발성 매체는 예를 들어 동적 메모리(3204)를 포함한다. 전송 매체는, 예를 들어 동축 케이블, 구리 와이어, 광섬유 케이블, 및 무선, 광학 및 적외선을 포함하는 음파 및 전자기파와 같은 와이어 또는 케이블이 없는 공간을 통과하는 파동을 포함한다. 컴퓨터 판독 가능 저장 매체(computer-readable storage medium)라는 용어는 전송 매체를 제외하고 프로세서(3202)에 정보를 제공하는데 참여하는 임의의 매체를 지칭하기 위해 본 명세서에서 사용된다.
[0183] 컴퓨터 판독 가능 매체의 일반적인 형태는 예를 들어 플로피 디스크, 플렉시블 디스크, 하드 디스크, 자기 테이프, 또는 임의의 다른 자기 매체, 콤팩트 디스크 ROM(CD-ROM), 디지털 비디오 디스크(DVD), 또는 또는 기타 광학 매체, 펀치 카드, 종이 테이프 또는 구멍 패턴이 있는 물리적 매체, RAM, 프로그램 가능 ROM(PROM), 소거 가능 PROM(EPROM), FLASH-EPROM, 플로팅 어레이 플래시 메모리, SDRAM 또는 기타 메모리 칩 또는 카트리지, 반송파 또는 컴퓨터가 읽을 수 있는 기타 매체를 포함한다. 비일시적(non-transitory) 컴퓨터 판독 가능 저장 매체라는 용어는 본 명세서에서 반송파 및 다른 신호를 제외하고 정보를 프로세서(3202)에 제공하는데 참여하는 임의의 매체를 지칭하기 위해 사용된다.
[0184] 하나 이상의 유형의 매체로 인코딩된 로직은 컴퓨터 판독 가능한 저장 매체 및 ASIC 3220과 같은 특수 목적 하드웨어상의 하나 또는 둘 다의 프로세서 명령을 포함한다.
[0185] 네트워크 링크(3277)는 일반적으로 하나 이상의 네트워크를 통해 정보를 사용하거나 처리하는 다른 장치로 정보 통신을 제공한다. 예를 들어, 네트워크 링크(3228)는 로컬 네트워크(3280)를 통해 호스트 컴퓨터(3228) 또는 ISP(Internet Service Provider, 인터넷 서비스 제공 업체)에 의해 운영되는 장비(3284)로의 연결을 제공할 수 있다. ISP 장비(3284)는 이제 일반적으로 인터넷(3290)으로 지칭되는 네트워크의 공개적인 전세계 패킷 교환 통신 네트워크를 통해 데이터 통신 서비스를 제공한다. 인터넷에 연결된 서버(3292)라는 컴퓨터는 인터넷을 통해 수신된 정보에 응답하여 서비스를 제공한다. 예를 들어, 서버(3292)는 디스플레이(3214)에서 프리젠테이션을 위한 비디오 데이터를 나타내는 정보를 제공한다. 어떤 상황에서는 호스트(3282), 로컬 네트워크(3280), 인터넷 서비스 제공 업체(3284), 인터넷(3290) 및 서버(3292)의 조합으로 표시되는 리소스를 "클라우드"라고 한다.
[0186] 본 발명은 본 명세서에 설명된 기술을 구현하기 위한 컴퓨터 시스템(3200)의 사용에 관한 것이다. 본 발명의 일 구체예에 따르면, 이러한 기술들은 프로세서(3202)가 메모리(3204)에 포함된 하나 이상의 명령의 하나 이상의 시퀀스를 실행하는 것에 응답하여 컴퓨터 시스템(3200)에 의해 수행된다. 소프트웨어 및 프로그램 코드라고도 하는 이러한 명령은 저장 장치(3208)와 같은 다른 컴퓨터 판독 가능 매체로부터 메모리(3204)로 읽어들일 수 있다. 메모리(3204)에 포함된 명령 시퀀스의 실행은 프로세서(3202)가 본 명세서에 설명된 방법 단계를 수행하게 한다. 대안적인 구체예들에서, 애플리케이션 특정 집적 회로(3220)와 같은 하드웨어가 본 발명을 구현하기 위해 소프트웨어 대신에 또는 소프트웨어와 함께 사용될 수 있다. 따라서, 본 발명의 구체예들은 하드웨어 및 소프트웨어의 임의의 특정 조합으로 제한되지 않는다.
[0187] 통신 인터페이스(3270)를 통해 네트워크 링크(3277) 및 다른 네트워크를 통해 전송된 신호는 컴퓨터 시스템(3200)으로부터 및 그것으로 정보를 운반한다. 컴퓨터 시스템(3200)은 네트워크 링크(3277) 및 통신 인터페이스(3270)를 통해 네트워크(3280, 3290)를 통해 프로그램 코드를 포함한 정보를 송수신할 수 있다. 인터넷(3290)을 사용하는 예에서, 서버(3292)는 인터넷(3290), ISP 장비(3284), 로컬 네트워크(3280) 및 통신 인터페이스(3270)를 통해 컴퓨터(3200)로부터 전송된 메시지에 의해 요청된 특정 애플리케이션에 대한 프로그램 코드를 전송한다. 수신된 코드는 수신될 때 프로세서(3202)에 의해 실행될 수 있거나, 추후 실행을 위해 저장 장치(3208) 또는 다른 비휘발성 저장 장치, 또는 둘 모두에 저장될 수 있다. 이러한 방식으로, 컴퓨터 시스템(3200)은 반송파상의 신호 형태의 응용 프로그램 코드를 얻을 수 있다.
[0188] 다양한 형태의 컴퓨터 판독 가능 매체가 하나 이상의 명령 또는 데이터 시퀀스 또는 둘 다를 실행하기 위해 프로세서(3202)에 전달하는 데 관여할 수 있다. 예를 들어, 명령 및 데이터는 초기에 호스트(3228)와 같은 원격 컴퓨터의 자기 디스크 상에 운반될 수 있다. 원격 컴퓨터는 명령어와 데이터를 동적 메모리에 로드(load)하고 모뎀을 사용하여 전화선을 통해 명령어와 데이터를 보낸다. 컴퓨터 시스템(3200)에 로컬인 모뎀은 전화선을 통해 명령 및 데이터를 수신하고, 적외선 송신기를 사용하여 명령 및 데이터를 네트워크 링크(3278)로서 기능하는 반송파상의 신호로 변환한다. 통신 인터페이스(3270)로서 기능하는 적외선 검출기는 적외선 신호로 운반된 명령 및 데이터를 수신하고 명령 및 데이터를 나타내는 정보를 버스(3210)에 배치한다. 버스(3210)는 프로세서(3202)가 명령과 함께 전송된 데이터 중 일부를 사용하여 명령을 검색하고 실행하는 정보를 메모리(3204)로 전달한다. 메모리(3204)에 수신된 명령 및 데이터는 프로세서(3202)에 의한 실행 전 또는 후에 저장 장치(3208)에 선택적으로 저장될 수 있다.
[0189] 도 33은 본 발명의 구체예들이 구현될 수 있는 칩셋(3300)을 도시한다. 칩셋(3300)은 본 명세서에 설명된 방법의 하나 이상의 단계를 수행하도록 프로그래밍되고, 예를 들어, 도 32와 관련하여 설명된 하나 이상의 물리적 패키지(예를 들어, 칩)에 통합된 프로세서 및 메모리 구성 요소를 포함한다. 예로서, 물리적 패키지는 물리적 강도, 크기 보존, 및/또는 전기적 상호작용의 제한과 같은 하나 이상의 특성을 제공하기 위해 구조 어셈블리(예를 들어, 베이스 보드) 상에 하나 이상의 재료, 구성 요소 및/또는 와이어의 배열을 포함한다. 특정 구체예들에서, 칩셋은 단일 칩으로 구현될 수 있는 것으로 고려된다. 칩셋(3300) 또는 그 일부는 본 명세서에 기술된 방법의 하나 이상의 단계를 수행하기 위한 수단을 구성한다.
[0190] 일 구체예에서, 칩셋(3300)은 칩셋(3300)의 구성 요소들 사이에 정보를 전달하기 위한 버스(3301)와 같은 통신 메커니즘을 포함한다. 프로세서(3303)는 예를 들어, 메모리(3305)에 저장된 명령 및 처리 정보를 실행하기 위해 버스(3301)에 연결된다. 프로세서(3303)는 각각의 코어가 독립적으로 수행되도록 구성된 하나 이상의 프로세싱 코어를 포함할 수 있다. 멀티-코어 프로세서는 단일 물리적 패키지 내에서 멀티 프로세싱을 가능하게 한다. 멀티-코어 프로세서의 예는 2개, 4개, 8개 또는 더 많은 수의 프로세싱 코어를 포함한다. 대안적으로 또는 추가로, 프로세서(3303)는 버스(3301)를 통해 나란히 구성된 하나 이상의 마이크로 프로세서를 포함하여 명령, 파이프라이닝(pipelining) 및 멀티스레딩(multithreading)을 독립적으로 실행할 수 있다. 프로세서(3303)는 또한 하나 이상의 디지털 신호 프로세서(DSP)(3307) 또는 하나 이상의 주문형 집적 회로(ASIC)(3309)와 같은 특정 처리 기능 및 작업을 수행하기 위해 하나 이상의 전문화된 구성 요소를 동반할 수 있다. DSP(3307)는 일반적으로 프로세서(3303)와 독립적으로 실제 신호(예를 들어, 사운드)를 실시간으로 처리하도록 구성된다. 유사하게, ASIC(3309)는 범용 프로세서에 의해 쉽게 수행되지 않는 특수 기능을 수행하도록 구성될 수 있다. 본 명세서에 기술된 발명의 기능을 수행하는데 도움을 주는 다른 특수 구성 요소는 하나 이상의 FPGA(Field Programmable Gate Array)(도시되지 않음), 하나 이상의 제어기(도시되지 않음), 또는 하나 이상의 다른 특수 목적 컴퓨터 칩을 포함한다.
[0191] 프로세서(3303) 및 수반되는 컴포넌트는 버스(3301)를 통해 메모리(3305)에 연결된다. 메모리(3305)는 동적 메모리(예를 들어, RAM, 자기 디스크, 쓰기 가능한 광 디스크 등) 및 실행될 때 본 명세서에 기술된 방법의 하나 이상의 단계를 수행하는 실행 가능한 명령어를 저장하기 위한 정적 메모리(예를 들어, ROM, CD-ROM 등)를 모두 포함한다. 메모리(3305)는 또한 본 명세서에 설명된 방법의 하나 이상의 단계의 실행과 관련되거나 그것에 의해 생성된 데이터를 저장한다.
4. 변경, 편차 및 수정(Alterations, deviations and modifications)
[0192] 전술한 명세서에서, 본 발명은 특정 구체예들을 참조하여 설명되었다. 그러나, 본 발명의 사상 및 범위를 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미가 아니라 예시적인 것으로 간주되어야 한다. 본 명세서 및 청구범위 전체에서, 문맥상 달리 요구되지 않는 한, "포함하다(comprise)"라는 단어 및 "포함하다(comprises)" 및 "포함하는(comprising)"과 같은 그 변형은 언급된 항목, 요소 또는 단계 또는 항목의 그룹의 포함, 임의의 다른 항목을 제외하지 않는 요소 또는 단계, 항목, 단계 또는 항목, 요소 또는 단계의 그룹을 의미하는 것으로 이해될 것이다. 또한, 부정 관사 "a" 또는 "an"은 관사에 의해 수식되는 항목, 요소 또는 단계 중 하나 이상을 나타내는 것을 의미한다.
5. 참고문헌
[1] R. L. Rivest, L. Adleman, and M. L. Dertouzos, On data bank and privacy homomorphisms (1978).
[2] E. F. Brickell and Y. Yacobi, On privacy homomorphisms, Workshop on Theory and Applications of Cryptographic Techniques, 117-25 (1987).
[3] C. Gentry, Fully homomorphic encryption using ideal lattices. ACM Symposium on Theory of Computation (STOC), 169-178 (2009).
[4] K. Lauter, Can homomorphic encryption be practical. Proceedings of the 3rd ACM workshop on cloud computing security, 113-124 (2011).
[5] C. B. Gentry, Bootstrappable Homomorphic Encryption Method, Computer Program and Apparatus. US Patent 8,515,058 B1 (August 20, 2013).
[6] C. B. Gentry and S. Halevi, Efficient Implementation of Fully Homomorphic Encryption. US Patent 8,565,435 B2 (October 22, 2013).
[7] C. B. Gentry, Fully Homomorphic Encryption Method Based on a Bootstrappable Encryption Scheme, Computer and Apparatus. US Patent 8,630,422 B2 (January 14, 2014).
[8] C. B. Gentry, S. Halevi, N. P. Smart, Homomorphic Evaluation Including Key Switching, Modulus Switching, and Dynamical Noise Management. US Patent 9,281,941 B2 (March 8, 2016).
[9] C. B. Gentry, S. Halevi, N. P. Smart, Homomorphic Evaluation Including Key Switching, Modulus Switching, and Dynamical Noise Management. US Patent 9,608,817 B2 (March 28, 2017).
[10] C. B. Gentry, S. Halevi, N. P. Smart, Homomorphic Evaluation Including Key Switching, Modulus Switching, and Dynamical Noise Management. US Patent 9,621,346 B2 (April 11, 2017).
[11] J. J. Loftus, M. Naehrig, J.W. Bos, K. E. Lauter, Managed Secure Computations on Encrypted Data. US Patent 9,306,738 B2 (April 5, 2016).
[12] M. Tamayo-Rios, Method for Fully Homomorphic Encryption Using Multivariate Cryptography. US Patent 9,313,028 B2 (April 12, 2016).
[13] A. Kipnis and E. Hibshoosh, Method and System for Homomorphicly Ramdomizing an Input. US Patent 9,350,543 B2 (May 24, 2016).
[14] G. Saldamli, Homomorphic Encryption in Computing Systems and Environments. US Patent 9,436,835 B1 (September 16, 2016).
[15] D. Coppersmith and E. Grossman, Generators for certain alternating groups with applications to cryptography. SIAM J. Appl. Math. 29 (4), 624-627 (1975).
[16] A. Parent, M. Roeteller, and M. Mosca, Improved Reversible and Circuits for
Karatsuba-Based Integer Multiplication. arXiv:1706.03419 (2017).
[17] S. Cuccaro, T. G. Drapper, S. A. Kutin, and D. P. Moulton, A New Quantum Ripple-Carry Addition Circuit. arXiv:quant-ph/0410184 (2004).
[18] K. Iwama, Y. Kambayashi, and S. Yamashita, Transformation Rules for Designing CNOT-based Quantum Circuits, DAC2002, pp 419-424 (New Orleans, Louisiana, USA, 2002).

Claims (30)

  1. 다음의 단계들을 포함하는 제1 프로세서 상에서 동작하는 방법:
    복호화된 데이터를 생성하기 위해 순열 암호화 데이터를 복호화하는 제1 세그먼트, 하나 이상의 결과의 복호화된 데이터를 생성하기 위해 복호화된 데이터 상에 동작하기 위한 제2 세그먼트, 순열 암호화된 결과 데이터를 생성하기 위해 순열 암호화를 사용하여 결과의 복호화된 데이터를 암호화하기 위한 제3 세그먼트를 포함하는 가역적 q-비트 게이트의 시퀀스를 나타내는 제1 데이터를 수신하는 단계;
    컴퓨터-판독 가능 매체상에 입력 N-비트 워드의 적어도 하나의 공유 비트 상에 동작하는 2개의 q-비트 게이트의 제1 시퀀스를 동일한 출력 N-비트 워드를 생성하는 하나 이상의 q-비트 게이트의 상이한 제2 시퀀스로 대체하는 규칙을 나타내는 제2 데이터를 저장하는 단계;
    상기 제2 데이터를 사용하여 상기 제1 세그먼트로부터의 적어도 하나의 q-비트 게이트를 상기 제2 세그먼트에 대한 q-비트 게이트로 게이트 거리의 수 J까지 또는 그 이상, 및 상기 제3 세그먼트로부터의 적어도 하나의 q-비트 게이트를 가역적 q-비트 게이트의 난독화된 시퀀스를 생성하기 위해 상기 제2 세그먼트에 대한 q-비트 게이트로 게이트 거리의 수 K까지 또는 이전으로 전파하는 단계; 및
    가역적 q-비트 게이트의 상기 난독화된 시퀀스에 기반한 난독화된 명령을 실행을 위하여 제2 프로세서로 전송하는 단계.
  2. 제1항에 있어서, 상기 방법이,
    상이한 상기 제2 프로세서에 의해 실행가능한 형태로 각 코드 명령을 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트로 관련시키는 제3 데이터를 컴퓨터-판독 가능 매체에 저장하는 단계; 및
    상기 제3 데이터를 사용하여 가역적 q-비트 게이트의 상기 난독화된 시퀀스를 상기 제2 프로세서에 의해 실행 가능한 형태로 난독화된 코드 명령으로 변환하는 단계;
    를 더 포함하고,
    상기 난독화된 명령을 전송하는 단계가 상기 제2 프로세서에 의해 실행 가능한 형태로 난독화된 코드 명령을 전송하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  3. 제1항에 있어서, 상기 방법이,
    상기 제2 프로세서에 의해 실행 가능한 형태의 각각의 코드 명령을 N-비트 워드상에 동작하는 하나 이상의 가역적 q-비트 게이트에 관련시키는 제3 데이터를 컴퓨터-판독 가능 매체 상에 저장하는 단계;
    를 더 포함하고;
    상기 제1 데이터를 수신하는 단계가,
    암호화된 데이터상에 동작하여 하나 이상의 결과의 복호화된 데이터를 생성하기 위해 상기 제2 프로세서에 의해 실행 가능한 형태의 코드 명령을 수신하는 단계; 및 암호화된 데이터상에 동작하여 하나 이상의 결과의 복호화된 데이터를 생성하기 위해 상기 제2 프로세서에 의해 실행 가능한 형태로 코드 명령을 하나 이상의 결과의 복호화된 데이터를 생성하기 위해 암호화된 데이터상에 동작하기 위한 가역적 q-비트 게이트의 시퀀스로 변환하기 위하여 상기 제3 데이터를 사용하는 단계;
    를 더 포함하는 것을 특징으로 하는 방법.
  4. 제1항에 있어서, 상기 방법이,
    입력 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트 시퀀스 각각을 동일한 출력 N-비트 워드를 생성하는 하나 이상의 가역적 k-비트 게이트(3<k≤N)로 대체하여 출력 N-비트 워드를 생성하는 규칙을 나타내는 융합 데이터를 컴퓨터-판독 가능 매체상에 저장하는 단계; 및
    난독화된 가역적 q-비트 게이트 시퀀스 중 하나 이상의 가역적 q-비트 게이트의 특정 시퀀스를 상기 특정 시퀀스를 대체할 수 있는 k-비트 게이트로 대체하기 위해 융합 데이터를 이용하는 단계;
    를 더 포함하는 것을 특징으로 하는 방법.
  5. 제4항에 있어서, 상기 방법이,
    상기 상이한 제2 프로세서에 의해 실행 가능한 형태의 각각의 코드 명령을 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트에 관련시키는 제3 데이터를 컴퓨터-판독 가능 매체상에 저장하는 단계;
    상기 하나 이상의 k-비트 게이트 각각을 상기 상이한 제2 프로세서에 대한 하나 이상의 코드 명령과 관련시키는 융합 코드 데이터를 컴퓨터-판독 가능한 매체상에 저장하는 단계;
    상기 k-비트 게이트를 난독화된 코드 명령의 적어도 일부로 변환시키기 위해 상기 융합 코드 데이터를 사용하는 단계; 및
    가역적 q-비트 게이트의 상기 난독화된 시퀀스의 임의의 남은 가역적 q-비트 게이트를 난독화된 코드 명령의 임의의 남은 부분으로 변환시키기 위해 상기 제3 데이터를 사용하는 단계;
    를 더 포함하고,
    상기 난독화된 명령을 전송하는 단계가 난독화된 코드 명령을 상기 제2 프로세서에 의해 실행 가능한 형태로 전송하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  6. 제1항에 있어서, J>N 및 K>N인 것을 특징으로 하는 방법.
  7. 제1항에 있어서, 각각의 가역적 q-비트 게이트가 단일 타겟 비트 및 q-1 제어 비트의 값들 및 상기 q-1 제어 비트에 대한 입력 값들에 기반하여 상기 단일 타겟 비트에 대한 값을 결정하는 상기 q-1 제어 비트들을 포함하는 제어 게이트인 것을 특징으로 하는 방법.
  8. 제1항에 있어서, q ∈ {1, 2, 3})인 것을 특징으로 하는 방법.
  9. 제1항에 있어서, 상기 제2 프로세서가 상기 제1 프로세서와 다른 것을 특징으로 하는 방법.
  10. 제1항에 있어서, 상기 제2 프로세서에 대한 액세스가 상기 제1 프로세서에 대한 액세스와 다른 것을 특징으로 하는 방법.
  11. 하나 이상의 일련의 명령어를 가지는 비일시적 컴퓨터-판독 가능 매체로서, 하나 이상의 프로세서의 제1 세트에 의한 하나 이상의 명령 시퀀스의 실행이 하나 이상의 프로세서의 상기 제1 세트가 다음의 단계들을 수행하게 하는 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체:
    복호화된 데이터를 생성하기 위해 순열 암호화된 데이터를 복호화하기 위한 제1 세그먼트, 하나 이상의 결과의 복호화된 데이터를 생성하기 위해 상기 복호화된 데이터상에서 동작하기 위한 제2 세그먼트, 및 순열 암호화된 결과의 데이터를 생성하기 위해 순열 암호화를 사용하는 상기 결과의 복호화된 데이터를 암호화하기 위한 제3 세그먼트를 포함하는 가역적 q-비트 게이트의 시퀀스를 나타내는 제1 데이터를 수신하는 단계;
    입력 N-비트 워드의 적어도 하나의 공유 비트상에서 동작하는 2개의 가역적 q-비트 게이트의 제1 시퀀스를 동일한 출력 N-비트 워드를 생성하는 하나 이상의 가역적 q-비트 게이트의 상이한 제2 시퀀스로 대체하기 위한 규칙을 나타내는 제2 데이터를 저장하는 단계;
    상기 제2 데이터를 사용하여 적어도 하나의 q-비트 게이트를 상기 제1 세그먼트로부터 상기 제2 세그먼트에 대한 상기 q-비트 게이트로 게이트 거리의 수 J로 또는 그 이상으로, 및 적어도 하나의 q-비트 게이트를 상기 제3 세그먼트로부터 상기 제2 세그먼트에 대한 q-비트 게이트로 게이트 거리의 수 K 또는 이전으로 전파하여 가역적 q-비트 게이트의 난독화된 시퀀스를 생성하는 단계; 및
    상기 가역적 q-비트 게이트의 난독화된 시퀀스에 기반을 둔 난독화된 명령을 실행을 위하여 하나 이상의 프로세서의 제2 세트로 전송하는 단계;.
  12. 제11항에 있어서, 상기 단계들이,
    상이한 제2 프로세서에 의해 실행 가능한 형태의 각각의 코드 명령을 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트에 관련시키는 제3 데이터를 컴퓨터-판독 가능 매체에 저장하는 단계; 및
    상기 제3 데이터를 사용하여 가역적 q-비트 게이트의 상기 난독화된 시퀀스를 상기 제2 프로세서에 의해 실행 가능한 형태로 난독화된 코드 명령으로 변환하는 단계;
    를 더 포함하고,
    상기 난독화된 명령을 전송하는 단계가 하나 이상의 프로세서의 제2 세트에 의해 실행 가능한 형태로 난독화된 코드 명령을 전송하는 단계를 더 포함하는 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  13. 제11항에 있어서, 상기 단계들이 하나 이상의 프로세서의 상기 제2 세트에 의해 실행 가능한 형태의 각 코드 명령을 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트에 관련시키는 제3 데이터를 컴퓨터 판독 가능 매체상에 저장하는 단계를 더 포함하고,
    상기 제1 데이터를 수신하는 단계가,
    암호화된 데이터에 동작하기 위해 하나 이상의 프로세서의 상기 제2 세트에 의해 실행가능한 형태의 코드 명령을 수신하여 하나 이상의 결과의 복호화된 데이터를 생성하는 단계; 및
    하나 이상의 결과의 복호화된 데이터를 생성하기 위하여 암호화된 데이터상에서 동작하기 위한 하나 이상의 프로세서의 상기 제2 세트에 의해 실행 가능한 형태의 코드 명령을 하나 이상의 결과의 복호화된 데이터를 생성하기 위하여 상기 암호화된 데이터에 동작하기 위한 가역적 q-비트 게이트의 상기 시퀀스로 변환하기 위하여 상기 제3 데이터를 사용하는 단계;
    를 더 포함하는 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  14. 제11항에 있어서, 상기 단계들이,
    입력 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트 시퀀스 각각을 동일한 출력 N-비트 워드를 생성하는 하나 이상의 k-비트 게이트(3 < k ≤ N)로 대체하여 출력 N-비트 워드를 생성하는 규칙을 나타내는 융합 데이터를 컴퓨터-판독 가능 매체상에 저장하는 단계; 및
    가역적 q-비트 게이트의 상기 난독화된 시퀀스의 하나 이상의 가역적 q-비트 게이트의 특정 시퀀스를 상기 특정 시퀀스를 대체할 수 있는 k-비트 게이트로 대체하기 위해 상기 융합 데이터를 이용하는 단계;
    를 더 포함하는 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  15. 제14항에 있어서, 상기 단계들이,
    하나 이상의 프로세서의 상기 제2 세트에 의해 실행 가능한 형태의 각각의 코드 명령을 N-비트 워드상에 동작하는 하나 이상의 가역적 q-비트 게이트와 관련시키는 제3 데이터를 컴퓨터-판독 가능 매체에 저장하는 단계;
    상기 하나 이상의 k-비트 게이트 각각을 하나 이상의 프로세서의 상기 상이한 제2 세트에 대한 하나 이상의 코드 명령들과 관련시키는 융합 코드 데이터를 컴퓨터-판독 가능 매체에 저장하는 단계;
    상기 융합 코드 데이터를 사용하여 상기 k-비트 게이트를 난독화된 코드 명령의 적어도 일부로 변환하는 단계; 및
    상기 제3 데이터를 사용하여 가역적 q-비트 게이트의 상기 난독화된 시퀀스의 임의의 남은 가역적 q-비트 게이트를 상기 난독화된 코드 명령의 임의의 남은 부분으로 변환시키는 단계;
    를 더 포함하고,
    상기 난독화된 명령을 전송하는 단계가 하나 이상의 프로세서의 상기 제2 세트에 의해 실행 가능한 형태로 난독화된 코드 명령을 전송하는 단계를 더 포함하는 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  16. 제11항에 있어서, J>N 및 K>N인 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  17. 제11항에 있어서, 각각의 가역적 q-비트 게이트가 단일 타겟 비트 및 q-1 제어 비트를 포함하는 제어 게이트이고, 상기 q-1 제어 비트는 상기 q-1 제어 비트의 값들 및 상기 q-1 제어 비트에 입력되는 값들에 기초하여 상기 단일 타겟 비트에 대한 값을 결정하는 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  18. 제11항에 있어서, q ∈ {1, 2, 3})인 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  19. 제11항에 있어서, 하나 이상의 프로세서의 상기 제2 세트가 하나 이상의 프로세서의 상기 제1 세트와 다른 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  20. 제11항에 있어서, 하나 이상의 프로세서들의 상기 제2 세트에 대한 액세스가 하나 이상의 프로세서들의 상기 제1 세트에 대한 액세스와 다른 것을 특징으로 하는 비일시적 컴퓨터-판독 가능 매체.
  21. 적어도 하나의 프로세서의 제1 세트; 및
    명령의 하나 이상의 시퀀스를 포함하는 적어도 하나의 메모리;
    를 포함하는 시스템으로,
    적어도 하나의 프로세서가 수비된 상기 적어도 하나의 메모리 및 상기 하나 이상의 명령의 시퀀스가 한 장치로 하여금 적어도 하기 단계들을 수행하게 하도록 수성되는 것을 특징으로 하는 시스템:
    복호화된 데이터를 생성하기 위해 순열 암호된 데이터를 복호화하기 위한 제1 세그먼트, 하나 이상의 결과의 복호화된 데이터를 생성하기 위해 복호화된 데이터에 작동하기 위한 제2 세그먼트, 및 순열 암호화된 결과 데이터를 생성하기 위해 순열 암호화를 사용하여 결과의 복호화된 데이터를 암호화하기 위한 제3 세그먼트를 포함하는 가역적 q-비트 게이트의 시퀀스를 나타내는 제1 데이터를 수신하는 단계;
    입력 N-비트 워드의 적어도 하나의 공유 비트상에서 동작하는 2개의 q-비트 게이트의 제1 시퀀스를 동일한 출력 N-비트 워드를 생성하는 하나 이상의 q-비트 게이트의 상이한 제2 시퀀스로 대체하는 규칙을 나타내는 제2 데이터를 컴퓨터-판독 가능 매체상에 저장하는 단계;
    상기 제2 데이터를 사용하여 상기 제1 세그먼트로부터의 적어도 하나의 q-비트 게이트를 상기 제2 세그먼트에 대한 q-비트 게이트로 게이트 거리의 수 J 또는 그 이상으로 및 상기 제3 세그먼트로부터의 적어도 하나의 q-비트 게이트를 상기 제2 세그먼트에 대한 q-비트 게이트로 게이트 거리의 수 K 또는 이전으로 전파하여 가역적 q-비트 게이트의 난독화된 시퀀스를 생성하는 단계; 및
    상기 가역적 q-비트 게이트의 난독화된 시퀀스에 기초한 난독화된 명령을 실행을 위하여 적어도 하나의 프로세서의 제2 세트로 전송하는 단계.
  22. 제21항에 있어서, 상기 단계들이,
    적어도 하나의 프로세서의 상기 제2 세트에 의해 실행 가능한 형태의 각각의 코드 명령을 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트와 연관시키는 제3 데이터를 컴퓨터-판독 가능 매체상에 저장하는 단계; 및
    상기 제3 데이터를 사용하여 상기 가역성 q-비트 게이트의 난독화된 시퀀스를 상기 적어도 하나의 프로세서의 제2 세트에 의해 실행 가능한 형태로 난독화된 코드 명령으로 변환하는 단계;
    를 더 포함하고,
    상기 난독화된 명령을 전송하는 단계가 상기 적어도 하나의 프로세서의 제2 세트에 의해 실행 가능한 형태로 난독화된 코드 명령을 전송하는 단계를 더 포함하는 것을 특징으로 하는 시스템.
  23. 제21항에 있어서, 상기 단계들이 상기 적어도 하나의 프로세서의 제2 세트에 의해 실행가능한 형태의 각각의 코드 명령을 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트에 관련시키는 제3 데이터를 컴퓨터-판독 가능 매체에 저장하는 단계를 더 포함하고,
    상기 제1 데이터를 수신하는 단계가,
    하나 이상의 결과의 복호화된 데이터를 생성하기 위해 상기 암호화된 데이터를 동작하기 위한 상기 적어도 하나의 프로세서의 제2 세트에 의해 실행 가능한 형태의 코드 명령을 수신하는 단계; 및,
    하나 이상의 결과의 복호화된 데이터를 생성하기 위해 상기 암호화된 데이터 상에 작동하는 상기 적어도 하나의 프로세서의 제2 세트에 의해 실행가능한 형태의 코드 명령을 하나 이상의 결과의 복호화된 데이터를 생성하기 위해 상기 암호화된 데이터상에 작동하기 위한 상기 가역적 q-비트 게이트의 시퀀스로 변환하기 위하여 상기 제3 데이터를 사용하는 단계;
    를 더 포함하는 것을 특징으로 하는 시스템.
  24. 제21항에 있어서, 상기 단계들이,
    출력 N-비트 워드를 생성하기 위한 입력 N-비트 워드상에서 동작하는 하나 이상의 가역적 q-비트 게이트 시퀀스 각각을 동일한 출력 N-비트 워드를 생성하는 하나 이상의 k-비트 게이트(3 < k ≤ N)로 대체하는 규칙을 나타내는 융합 데이터를 컴퓨터-판독 가능 매체에 저장하는 단계; 및
    q-비트 게이트의 상기 난독화된 시퀀스의 하나 이상의 q-비트 게이트의 특정 시퀀스를 상기 특정 시퀀스를 대체할 수 있는 k-비트 게이트로 대체하기 위하여 상기 융합 데이터를 사용하는 단계;
    를 더 포함하는 것을 특징으로 하는 시스템.
  25. 제24항에 있어서, 상기 단계들이
    적어도 하나의 프로세서의 상기 제2 세트에 의해 실행 가능한 형태의 각각의 코드 명령을 N-비트 워드상에서 작동하는 하나 이상의 가역적 q-비트 게이트에 관련시키는 제3 데이터를 컴퓨터-판독 가능 매체상에 저장하는 단계;
    상기 하나 이상의 k-비트 게이트 각각을 상기 적어도 하나의 프로세서의 제2 세트에 대한 하나 이상의 코드 명령과 관련시키는 융합 코드 데이터를 컴퓨터-판독 가능 매체상에 저장하는 단계;
    융합 코드 데이터를 사용하여 상기 k-비트 게이트를 난독화된 코드 명령의 적어도 일부로 변환하는 단계; 및
    상기 제3 데이터를 사용하여 가역적 q-비트 게이트의 상기 난독화된 시퀀스의 임의의 남아 있는 가역적 q-비트 게이트를 상기 난독화된 코드 명령의 임의의 남아 있는 부분으로 변환하는 단계;
    를 더 포함하며,
    상기 난독화된 명령을 전송하는 단계가 상기 적어도 하나의 프로세서의 제2 세트에 의해 실행 가능한 형태로 난독화된 코드 명령을 전송하는 단계를 더 포함하는 것을 특징으로 하는 시스템.
  26. 제21항에 있어서, J>N 및 K>N인 것을 특징으로 하는 시스템.
  27. 제21항에 있어서, 각각의 가역적 q-비트 게이트가 단일 타겟 비트 및 q-1 제어 비트를 포함하는 제어 게이트이며, 상기 q-1 제어 비트는 상기 q-1 제어 비트의 값 및 상기 q-1 제어 비트에 대한 입력 값에 기초하여 상기 단일 타겟 비트에 대한 값을 결정하는 것을 특징으로 하는 시스템.
  28. 제21항에 있어서, q ∈ {1, 2, 3})인 것을 특징으로 하는 시스템.
  29. 제21항에 있어서, 상기 적어도 하나의 프로세서의 제2 세트가 상기 적어도 하나의 프로세서의 제1 세트와 다른 것을 특징으로 하는 시스템.
  30. 제21항에 있어서, 상기 적어도 하나의 프로세서의 제2 세트에 대한 액세스가 상기 적어도 하나의 프로세서의 제1 세트에 대한 액세스와 다른 것을 특징으로 하는 시스템.
KR1020207019453A 2017-12-18 2018-12-17 퍼블릭 컴퓨터에서 암호화된 데이터로 작동하는 코드를 안전하게 실행하는 기술 KR102664551B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762607185P 2017-12-18 2017-12-18
US62/607,185 2017-12-18
PCT/US2018/066019 WO2019126044A1 (en) 2017-12-18 2018-12-17 Techniques for securely executing code that operates on encrypted data on a public computer

Publications (2)

Publication Number Publication Date
KR20200105481A true KR20200105481A (ko) 2020-09-07
KR102664551B1 KR102664551B1 (ko) 2024-05-09

Family

ID=66995109

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207019453A KR102664551B1 (ko) 2017-12-18 2018-12-17 퍼블릭 컴퓨터에서 암호화된 데이터로 작동하는 코드를 안전하게 실행하는 기술

Country Status (8)

Country Link
US (1) US11461435B2 (ko)
EP (1) EP3729304A4 (ko)
JP (1) JP7177849B2 (ko)
KR (1) KR102664551B1 (ko)
CN (1) CN111801670A (ko)
IL (1) IL275052B2 (ko)
SG (1) SG11202004674VA (ko)
WO (1) WO2019126044A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3304363B1 (en) * 2015-06-08 2021-07-21 Microsoft Technology Licensing, LLC System for reversible circuit compilation with space constraint, method and program
US20230315821A1 (en) * 2020-08-27 2023-10-05 Ntt Research Inc. Obfuscation of executable instruction sets for enhanced security

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016200747A1 (en) * 2015-06-08 2016-12-15 Microsoft Technology Licensing, Llc System for reversible circuit compilation with space constraint, method and program

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9825644D0 (en) * 1998-11-23 1999-01-13 British Telecomm A cipher
US6665796B1 (en) * 1999-08-18 2003-12-16 Sun Microsystems, Inc. Microprocessor instruction result obfuscation
US6757831B1 (en) * 1999-08-18 2004-06-29 Sun Microsystems, Inc. Logic block used to check instruction buffer configuration
JP5105408B2 (ja) * 2007-05-23 2012-12-26 独立行政法人科学技術振興機構 量子プログラム秘匿化装置及び量子プログラム秘匿化方法
GB2453367A (en) * 2007-10-04 2009-04-08 Univ Newcastle Cryptographic processing using isomorphic mappings of Galois fields
US8732468B2 (en) * 2009-03-09 2014-05-20 The Regents Of The University Of Michigan Protecting hardware circuit design by secret sharing
JP4783451B2 (ja) * 2009-08-07 2011-09-28 富士通セミコンダクター株式会社 セキュアプロセッサ
US8630422B2 (en) 2009-11-10 2014-01-14 International Business Machines Corporation Fully homomorphic encryption method based on a bootstrappable encryption scheme, computer program and apparatus
US8515058B1 (en) 2009-11-10 2013-08-20 The Board Of Trustees Of The Leland Stanford Junior University Bootstrappable homomorphic encryption method, computer program and apparatus
JP2011130120A (ja) 2009-12-16 2011-06-30 Sony Corp 量子公開鍵暗号システム、鍵生成装置、暗号化装置、復号装置、鍵生成方法、暗号化方法、及び復号方法
CN101776934B (zh) * 2010-01-28 2013-04-24 华东交通大学 进位产生和传递函数发生器及可逆最优加法线路设计方法
US8861716B2 (en) * 2010-03-30 2014-10-14 International Business Machines Corporation Efficient homomorphic encryption scheme for bilinear forms
US8903083B2 (en) 2010-08-16 2014-12-02 International Business Machines Corporation Fast evaluation of many polynomials with small coefficients on the same point
US8897449B1 (en) * 2011-09-12 2014-11-25 Quantum Valley Investment Fund LP Quantum computing on encrypted data
US9436835B1 (en) 2012-01-05 2016-09-06 Gokay Saldamli Homomorphic encryption in computing systems and environments
US9281941B2 (en) 2012-02-17 2016-03-08 International Business Machines Corporation Homomorphic evaluation including key switching, modulus switching, and dynamic noise management
WO2013142983A1 (en) 2012-03-30 2013-10-03 Irdeto Canada Corporation Securing accessible systems using cross-linking
US9313028B2 (en) 2012-06-12 2016-04-12 Kryptnostic Method for fully homomorphic encryption using multivariate cryptography
US9350543B2 (en) 2012-07-26 2016-05-24 Cisco Technology, Inc. Method and system for homomorphicly randomizing an input
US9306738B2 (en) 2012-12-21 2016-04-05 Microsoft Technology Licensing, Llc Managed secure computations on encrypted data
CN105009505A (zh) 2013-08-09 2015-10-28 汤姆逊许可公司 基于矩阵因子分解和岭回归的隐私保护推荐的方法和系统
US9264048B2 (en) 2013-12-18 2016-02-16 Intel Corporation Secret operations using reconfigurable logics
US10110566B2 (en) 2015-07-21 2018-10-23 Baffle, Inc. Systems and processes for executing private programs on untrusted computers
US10664249B2 (en) * 2015-11-20 2020-05-26 Microsoft Technology Licensing, Llc Verified compilation of reversible circuits

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016200747A1 (en) * 2015-06-08 2016-12-15 Microsoft Technology Licensing, Llc System for reversible circuit compilation with space constraint, method and program

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
비특허문헌1 *

Also Published As

Publication number Publication date
IL275052B2 (en) 2024-05-01
EP3729304A1 (en) 2020-10-28
US11461435B2 (en) 2022-10-04
CN111801670A (zh) 2020-10-20
JP7177849B2 (ja) 2022-11-24
EP3729304A4 (en) 2021-08-18
JP2021507438A (ja) 2021-02-22
IL275052B1 (en) 2024-01-01
KR102664551B1 (ko) 2024-05-09
WO2019126044A1 (en) 2019-06-27
US20200394287A1 (en) 2020-12-17
IL275052A (en) 2020-07-30
SG11202004674VA (en) 2020-06-29

Similar Documents

Publication Publication Date Title
Gill et al. Quantum computing: A taxonomy, systematic review and future directions
Maslov et al. Shorter stabilizer circuits via Bruhat decomposition and quantum circuit transformations
Hassanpour et al. Efficient controlled quantum secure direct communication based on GHZ-like states
Çetin et al. Depth optimized efficient homomorphic sorting
Jayapandian et al. Secure and efficient online data storage and sharing over cloud environment using probabilistic with homomorphic encryption
Anandkumar et al. Securing e-Health application of cloud computing using hyperchaotic image encryption framework
Zanin et al. Gray code permutation algorithm for high-dimensional data encryption
Baksi et al. Quantum implementation and resource estimates for rectangle and knot
KR102664551B1 (ko) 퍼블릭 컴퓨터에서 암호화된 데이터로 작동하는 코드를 안전하게 실행하는 기술
JP2020515093A (ja) 符号化加算のための計算デバイス
Lee et al. Efficient implementation of lightweight hash functions on GPU and quantum computers for IoT applications
Lamba et al. Quantum computing technology (QCT)-a data security threat
CN113722739B (zh) 梯度提升树模型的生成方法、装置、电子设备和存储介质
Schlieper In-place implementation of Quantum-Gimli
Jang et al. Improved quantum analysis of SPECK and lowmc
EP4170959B1 (en) A method of constructing a semi-public key system in qap-based homomorphic encryption
JP6182123B2 (ja) 量子演算方法
Zamdzhiev An abstract approach towards quantum secret sharing
US20240037249A1 (en) Boolean function control gates for securely executing on a public computer code that operates on encrypted data
O’Regan Introduction to algorithms
Ariffin et al. Immune systems approaches for cryptographic algorithm
Song et al. Grover on SPEEDY
Kuznetsov et al. Stream Symmetric Cipher “Strumok”
Pan et al. Universal quantum obfuscation for quantum non-linear functions
WO2023077167A1 (en) Encrypting data based on linear 3-bit gates and non-linear gates

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant