KR102315831B1 - 비신뢰 컴퓨터들 상에서 프라이빗 프로그램을 실행하기 위한 시스템 및 프로세스 - Google Patents

비신뢰 컴퓨터들 상에서 프라이빗 프로그램을 실행하기 위한 시스템 및 프로세스 Download PDF

Info

Publication number
KR102315831B1
KR102315831B1 KR1020187005125A KR20187005125A KR102315831B1 KR 102315831 B1 KR102315831 B1 KR 102315831B1 KR 1020187005125 A KR1020187005125 A KR 1020187005125A KR 20187005125 A KR20187005125 A KR 20187005125A KR 102315831 B1 KR102315831 B1 KR 102315831B1
Authority
KR
South Korea
Prior art keywords
computer
delete delete
instructions
operations
obfuscated
Prior art date
Application number
KR1020187005125A
Other languages
English (en)
Other versions
KR20180084732A (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 KR20180084732A publication Critical patent/KR20180084732A/ko
Application granted granted Critical
Publication of KR102315831B1 publication Critical patent/KR102315831B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0407Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the identity of one or more communicating identities is hidden
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0428Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • 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/008Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols involving homomorphic encryption
    • 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/04Masking or blinding
    • H04L2209/046Masking or blinding of operations, operands or results of the operations
    • 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/12Details relating to cryptographic hardware or logic circuitry
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/18Network architectures or network communication protocols for network security using different networks or channels, e.g. using out of band channels

Landscapes

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

Abstract

본 발명은 비신뢰 컴퓨터들 상에서 프라이빗 컴퓨터 프로그램을 실행하기 위한 방법들을 제공한다. 본 발명은 또한 본 발명의 방법들에 의해 생산되는 제품들 및 본 발명의 방법들을 수행하기 위해 사용되는 장치들을 제공한다.

Description

비신뢰 컴퓨터들 상에서 프라이빗 프로그램을 실행하기 위한 시스템 및 프로세스
관련 출원에 대한 상호 참조
본 출원은 2015년 7월 21일자로 출원된 미국 특허 출원 제14/804,713호에 대한 우선권을 주장하며, 그 개시내용은 본 출원에 전체적으로 참조로 포함된다.
기술분야
개시된 발명은 컴퓨팅 보안의 분야에 관한 것이다.
원격 컴퓨터 프로그램 실행의 보안은 사용자들이 컴퓨터들의 큰 네트워크들에 제한없이 액세스하도록 허용하는, 특히 클라우드 네트워크들 및 확장된 엔터프라이즈 네트워크들의 최근의 급증과의 지속적인 전투이다. 다수의 컴퓨터들 상에서의 프로그램 실행의 결합된 파워 및 속도는 이로우나, 프라잉 아이즈(prying eyes)의 대상이 될 수 있다. 일부 또는 모든 원격 컴퓨터들이 악의적 사용자 또는 공격자의 통제 하에 있을 수 있고, 이는 중요한 기밀 정보를 손상시킨다.
따라서, 실행중인 프로그램 및 데이터가 비신뢰 컴퓨터(들)에 대해 완전한 액세스를 갖는 공격자로부터 프라비잇하게 유지되도록, 비신뢰 컴퓨터 또는 복수의 컴퓨터들 상에서 프로그램을 실행하는 방법 또는 시스템에 대한 요구가 있다. 본 발명은 이들 및 다른 중요한 요구들에 대한 것이다.
본 발명은 컴퓨터 프로그램을 실행하기 위한 방법들을 제공하고, 이 방법은 적어도 하나의 다른 컴퓨터에 연결된 신뢰 컴퓨터 상에 있는 컴퓨터 프로그램을 일련의 연산들로 나누는 단계; 각각의 연산의 결과를 컴퓨팅하고 그 결과를 또 다른 컴퓨터에 포워딩하도록 동작하는 수반 명령어들(accompanying instructions)과 함께 일련의 연산들 중의 각각의 연산을 적어도 하나의 다른 컴퓨터에 송신하는 단계; 및 신뢰 컴퓨터에서, 컴퓨터 프로그램의 컴퓨팅된 결과를 수신하는 단계를 포함한다.
본 발명은 또한 컴퓨터 프로그램을 실행하기 위한 시스템들을 제공한다. 시스템은 적어도 하나의 다른 컴퓨터에 통신가능하게 연결된 적어도 하나의 신뢰 컴퓨터를 포함할 수 있다. 적어도 하나의 신뢰 컴퓨터 중의 제1 신뢰 컴퓨터는, 실행 동안 시스템이 프로그램 실행 프로세스를 포함하는 연산들을 수행하도록 야기하는, 저장된 컴퓨터 명령어들을 가질 수 있다. 프로세스는 제1 신뢰 컴퓨터 상의 컴퓨터 프로그램을 일련의 연산들로 나누는 단계, 각각의 연산의 결과를 컴퓨팅하고 그 결과를 또 다른 컴퓨터에 포워딩하도록 동작하는 수반 명령어들과 함께 일련의 연산들 중의 각각의 연산을 적어도 하나의 다른 컴퓨터에 송신하는 단계, 및 제1 신뢰 컴퓨터에서, 컴퓨터 프로그램의 컴퓨팅된 결과를 수신하는 단계를 포함할 수 있다.
일반적인 설명 및 후속하는 상세한 설명은 단지 예시적이고 설명하기 위한 것이며, 첨부된 청구항들에서 정의되는 대로 본 발명을 제한하는 것이 아니다. 본 발명의 다른 양태들은 본 명세서에 제공된 대로의 본 발명의 상세한 설명의 견지에서 본 기술분야의 통상의 기술자에게 명백할 것이다.
후속하는 상세한 설명 뿐만 아니라 발명의 내용은 첨부된 도면들과 함께 읽을 때 더 이해된다. 본 발명을 예시하는 목적으로, 본 발명의 예시적 실시예들이 도면들에 도시되지만, 본 발명은 개시된 특정한 방법들, 구성 요소들, 및 디바이스들에 제한되지 않는다. 또한, 도면들은 반드시 일정한 비율로 그려진 것은 아니다.
도 1은 네트워킹된 컴퓨터들에 걸쳐 프로그램을 파쇄(shredding)하는 것에 관한 본 발명의 실시예를 예시한다.
도 2는 스플릿 디바이스 드라이버 연산에 관한 본 발명의 실시예를 예시한다.
도 3은 코드 및 데이터의 파쇄를 위한 대칭키(symmetric-key) 암호화 및 복호화 연산들에 관한 본 발명의 실시예를 예시한다.
도 4는 파쇄들을 난독화(obfuscating)하는 것에 관한 본 발명의 실시예를 예시한다.
도 5는 회로 게이트 연산을 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 6은 또 다른 회로 게이트 연산을 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 7은 부가적인 난독화 층을 갖는 회로 게이트 연산을 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 8은 컴퓨터들의 네트워크 상에서 게이트 연산들의 임의의 회로를 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 9는 부가된 암호화로 연산을 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 10은 일반적인 디바이스 드라이버 연산을 예시한다.
도 11은 스플릿 디바이스 드라이버 연산에 관한 본 발명의 실시예를 예시한다.
도 12는 수학 연산(mathematical operation)을 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 13은 또 다른 수학 연산을 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 14는 전이 암호화 함수(transition encryption function)를 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 15는 또 다른 전이 암호화 함수를 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 16은 암호화된 비교 연산을 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 17은 또 다른 암호화된 비교 연산을 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 18은 수학적 난독화 전이 함수를 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
도 19는 또 다른 수학적 난독화 전이 함수를 파쇄하는 것에 관한 본 발명의 실시예를 예시한다.
본 발명은 본 개시내용의 일부를 형성하는 첨부 도면들 및 예시들과 관련하여 취해진 후속하는 상세한 설명을 참조하여 더 쉽게 이해될 수 있다. 본 발명은 본 명세서에 설명 및/또는 도시되는 특정 디바이스들, 방법들, 응용들, 조건들, 또는 파라미터들에 한정되지 않으며, 본 명세서에서 사용되는 용어는 단지 예로서 구체적인 실시예들을 설명하기 위한 목적이며 청구된 발명을 제한하려는 의도는 아니라는 것을 이해할 것이다. 또한, 첨부된 청구항들을 포함하는 본 명세서에서 사용된 대로, 단수 형태들 "a," "an," 및 "the"는 복수를 포함하고, 특정 수치에 대한 언급은 문맥이 명확히 달리 지시하지 않으면 적어도 그 특정 값을 포함한다. 본 명세서에서 사용될 때의 "복수"라는 용어는 '하나보다 많은'을 의미한다. 값들의 범위가 표현될 때, 또 다른 실시예는 하나의 특정 값에서부터 및/또는 다른 특정 값까지를 포함한다. 유사하게, 값들이 선행사 "약"의 사용에 의해 근사치로서 표현될 때, 특정 값은 또 다른 실시예를 형성한다는 것이 이해될 것이다. 모든 범위들은 포괄적이며 조합가능하다.
명료성을 위해, 별개의 실시예들과 관련하여 본 명세서에 설명되는 본 발명의 특정 특징들은 또한 단일 실시예와 조합하여 제공될 수 있음이 이해될 것이다. 역으로, 간결함을 위해, 단일 실시예와 관련하여 설명되는 본 발명의 다양한 특징들은 또한 개별적으로 또는 임의의 하위조합으로 제공될 수 있다. 또한, 범위들로 기재된 값의 언급은 그 범위 내의 각각의 모든 값을 포함한다.
본 명세서에 개시된 솔루션은 적어도 하나의 다른 컴퓨터에 네트워킹된 신뢰 컴퓨터 상에서 컴퓨터 프로그램을 실행하는 방법 및 그 방법을 수행할 수 있는 시스템을 포함한다. 방법은 컴퓨터 프로그램을 일련의 연산들로 나누는 단계; 일련의 연산들 중의 각각의 연산을 적어도 하나의 다른 컴퓨터에 송신하는 단계 - 각각의 연산은 연산을 수신한 각각의 컴퓨터에게 연산을 계산한 다음 이후 그 계산의 결과를 또 다른 컴퓨터에 포워딩하도록 지시하는 수반 명령어들을 가지고 있음 -; 및 신뢰 컴퓨터에서 컴퓨터 프로그램의 결과를 수신하는 단계를 포함한다. 이 방법으로 부가된 보안을 위해 암호화 및 난독화(obfuscation)가 사용될 수 있다.
신뢰 컴퓨터는 공격자에 의해 위태롭게 되지 않는 것으로 알려진 컴퓨터이고, 적어도 하나의 다른 컴퓨터는 컴퓨터 리소스들 또는 다른 리소스들을 제공하기 위해 필요할 수 있다. 제한하지 않는 예로서, 적어도 하나의 다른 컴퓨터는 신뢰 또는 비신뢰인, 엔터프라이즈 네트워크의 일부, 클라우드의 일부, 모바일 디바이스, 일반적으로 복수의 컴퓨터들의 부분, 또는 신뢰 컴퓨터에 통신가능하게 연결되는 임의의 다른 컴퓨터 또는 컴퓨터들의 세트일 수 있으나, 신뢰 컴퓨터는 포함하지 않는다. 또한 제한하지 않는 예로서, 적어도 하나의 다른 컴퓨터는 복수의 컴퓨터들로부터 무작위로 선택될 수 있다. "클라우드"와 관련하여, 클라우드는 신뢰 또는 비신뢰일 수 있거나, 다수의 관리 도메인들(administrative domains)을 포괄하거나, 다수의 상업적으로 구별되는 인프라 구조들(commercially distinct infrastructures)을 포괄하거나, 또는 본 기술분야에서 알려진 임의의 조합으로 또는 다른 컨텍스트에 있을 수 있다. 컴퓨터들은 유선 연결(전기적 또는 광학적), 무선 연결, 및/또는 컴퓨터들이 데이터를 통신하도록 허용하는 임의의 유형의 연결로 함께 네트워킹될 수 있다. 컴퓨터는 또한 가상 머신 또는 가상 머신들의 그룹을 포함할 수 있다.
컴퓨터 프로그램을 일련의 연산들로 나누는 단계 및 일련의 연산들 중의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 컴퓨터에 송신하는 단계는 "파쇄하는 단계"로서 지칭될 수 있고, 각각의 연산은 "파쇄본(shred)"으로 불린다. 파쇄 프로세스는 프로그램을 파쇄본들의 모음으로 변환하고, 여기서 각각의 파쇄본은 적어도 하나의 컴퓨터 상에서 프로그램의 일부를 실행하고 다른 파쇄본들과 통신하여, 파쇄본들의 앙상블이 컴퓨터 프로그램을 실행하도록 한다. 실시예에서, 파쇄 프로세스는 컴퓨터들에 대한 무작위 선택을 이용하여 네트워킹된 컴퓨터들 상에 파쇄본들을 배치하여, 각각의 컴퓨터가 그 파쇄본에 지정된 부분 컴퓨팅을 수행하고 이후 컴퓨팅의 나머지를 다음 컴퓨터에 포워딩하도록 한다. 각각의 컴퓨터는 단지 그것이 파쇄본을 받은 곳, 파쇄본 내에서 컴퓨팅할 대상, 및 그 파쇄본의 결과들을 포워딩할 곳만을 안다. 네트워킹된 컴퓨터들의 수가 충분히 크다면, 가능한 공격자가 파쇄된 컴퓨팅들을 종합하기 위하여 모든 컴퓨터들을 동시에 모니터링할 수 없을 것이다.
도 1은 파쇄 프로세스의 실시예를 이용하여 신뢰 컴퓨터들 및 클라우드 컴퓨터들 상에서 실행되는 예시 프로그램을 도시한다. 프로그램(100)은 4개의 부분을 포함한다: 입력, 함수 'f', 함수 'g', 및 출력. 신뢰 컴퓨터 상에서 실행되는 파쇄기 프로그램은 4개의 부분을 발견하기 위해 이 프로그램에 대해 2진 실행파일(binary executable)을 분석하고, 따라서 역시 2진 실행파일 형식인 4개의 파쇄본을 생성한다. 입력 및 출력 연산들은 신뢰 컴퓨터 1(TC1)(110) 및 신뢰 컴퓨터 4(TC4)(140) 상에서 각각 실행된다. TC1(110) 및 TC4(140)는 그것들이 필요한 입력 및 출력 디바이스들에 연결되기 때문에 파쇄기에 의해 선택된다. 함수들 'f' 및 'g'는 컴퓨팅상으로 비싸고 그러므로 클라우드 컴퓨터 2(CC2)(120) 및 클라우드 컴퓨터 3(CC3)(130) 상에서 각각 실행된다. CC2(120) 및 CC3(130)은 이용가능한 머신들의 풀에서 파쇄기에 의해 무작위로 선택되었다. TC1(110)은 입력을 수신하고 입력을 변수 'x'에 할당하며, 이후 CC2(120)에 포워딩한다. CC2(120)는 변수 'x'를 수신하고 함수 "f(x)"를 컴퓨팅하여 결과를 변수 'y'에 할당하고, 이후 CC3(130)에 포워딩한다. CC3(130)은 변수 'y'를 수신하고 함수 "g(x)"를 컴퓨팅하여 결과를 변수 'z'에 할당하고, 이후 TC4(140)에 포워딩한다. TC4(140)는 변수 'z'를 수신하고 그것을 출력한다.
도 1에서 볼 수 있는 바와 같이, 일련의 연산들 중 일부는 신뢰 컴퓨터로부터 입력 및/또는 출력(I/O) 상호 작용을 필요로 할 수 있다. 파쇄본을 실행하는 컴퓨터 상에서, I/O 디바이스, 또는 신뢰 I/O(보안을 위해, 오직 신뢰 컴퓨터들만이 I/O 디바이스들로부터의 플레인(plain) 데이터를 봐야함)의 결핍을 처리하기 위해, 특수 "스플릿(split)" 디바이스 드라이버들이 구현될 수 있다. 스플릿 디바이스 드라이버는 실제로 2개의 드라이버로, 각각의 컴퓨터 상에 1개씩이고, 각각의 드라이버는 일반 디바이스 드라이버의 작업량의 절반을 수행한다. 드라이버의 두 절반들 모두가 사용자 프로세스들로서 실행하기 때문에, 파쇄본을 실행하는 컴퓨터 및 신뢰 컴퓨터 둘 모두 상에서 운영 시스템들을 수정할 필요가 없다. 다음은 스플릿 디바이스 드라이버가 어떻게 구현되고 사용될 수 있는지를 예시하는 예시 실시예들이다.
실시예에서, 특정 컴퓨터 상에서의 연산, 또는 파쇄본의 결과의 컴퓨팅 동안, 연산이 제1 신뢰 컴퓨터에 연결된 디바이스로부터의 입력을 필요로 하면, 특정 컴퓨터는: 특정 컴퓨터 상의 프로그램 드라이버에서 입력 요청을 생성하고; 입력 요청을 프로그램 드라이버로부터 네트워크 드라이버에 전달하고; 입력 요청을 네트워크 드라이버를 통해 제1 신뢰 컴퓨터에 송신하고; 네트워크 드라이버에서 제1 신뢰 컴퓨터로부터 디바이스의 응답을 수신하고; 컴퓨팅에서의 사용을 위해 응답을 네트워크 드라이버로부터 프로그램 드라이버에 전달할 수 있다. 수신된 응답은 부가된 보안을 위해 암호화될 수 있다.
실시예에서, 특정 컴퓨터 상에서의 연산, 또는 파쇄본의 결과의 컴퓨팅 동안, 연산이 제1 신뢰 컴퓨터에 연결된 디바이스로부터의 입력을 필요로 하면, 제1 신뢰 컴퓨터는: 제1 신뢰 컴퓨터 상의 네트워크 드라이버에서, 디바이스로부터의 입력에 대한 요청을 특정 컴퓨터로부터 수신하고; 요청을 네트워크 드라이버로부터 디바이스에 대한 입력 드라이버에 전달하고; 디바이스로부터의 응답을 입력 드라이버로부터 네트워크 드라이버에 전달하고; 응답을 네트워크 드라이버를 통해 특정 컴퓨터에 송신할 수 있다. 부가된 보안을 위해 응답을 입력 드라이버로부터 네트워크 드라이버에 전달하기 전에 제1 신뢰 컴퓨터는 디바이스로부터의 응답을 암호화할 수 있다.
실시예에서, 특정 컴퓨터 상에서의 연산의 결과의 컴퓨팅 동안, 연산이 제1 신뢰 컴퓨터에 연결된 디바이스로부터의 출력을 필요로 하면, 특정 컴퓨터는: 특정 컴퓨터 상의 프로그램 드라이버에서 출력 요청을 생성하고; 출력 요청을 프로그램 드라이버로부터 네트워크 드라이버에 전달하고; 출력 요청을 네트워크 드라이버를 통해 제1 신뢰 컴퓨터에 송신하고; 네트워크 드라이버에서 디바이스의 상태를 제1 신뢰 컴퓨터로부터 수신하고; 컴퓨팅에서의 사용을 위해 상태를 네트워크 드라이버로부터 프로그램 드라이버에 전달할 수 있다. 출력 요청은 암호화된 데이터를 포함할 수 있다.
실시예에서, 특정 컴퓨터 상에서의 연산의 결과의 컴퓨팅 동안, 연산이 제1 신뢰 컴퓨터에 연결된 디바이스로부터의 출력을 필요로 하면, 제1 신뢰 컴퓨터는: 제1 신뢰 컴퓨터 상의 네트워크 드라이버에서, 디바이스로의 출력에 대한 요청을 특정 컴퓨터로부터 수신하고; 요청을 네트워크 드라이버로부터 디바이스에 대한 출력 드라이버에 전달하고; 디바이스로부터의 상태를 출력 드라이버로부터 네트워크 드라이버에 전달하고; 상태를 네트워크 드라이버를 통해 특정 컴퓨터에 송신할 수 있다. 요청은 암호화된 데이터를 포함할 수 있고, 요청을 네트워크 드라이버로부터 출력 드라이버에 전달하기 전에 제1 신뢰 컴퓨터는 그 데이터를 복호화할 필요가 있을 수 있다.
실시예에서, 특정 컴퓨터 상에서의 연산의 결과의 컴퓨팅 동안, 연산이 제1 신뢰 컴퓨터에 연결된 디바이스로부터의 입력을 필요로 하면, 그 입력을 모으기 위한 방법은: 특정 컴퓨터 상의 프로그램 드라이버에서 입력 요청을 생성하는 단계; 입력 요청을 프로그램 드라이버로부터 제1 네트워크 드라이버에 전달하는 단계; 입력 요청을 제1 네트워크 드라이버를 통해 제1 신뢰 컴퓨터에 송신하는 단계; 제1 신뢰 컴퓨터 상의 제2 네트워크 드라이버에서, 특정 컴퓨터로부터의 입력 요청을 수신하는 단계; 입력 요청을 제2 네트워크 드라이버로부터 디바이스에 대한 입력 드라이버에 전달하는 단계; 디바이스로부터의 응답을 입력 드라이버로부터 제2 네트워크 드라이버에 전달하는 단계; 응답을 제2 네트워크 드라이버를 통해 특정 컴퓨터에 송신하는 단계; 제1 네트워크 드라이버에서 디바이스의 응답을 제1 신뢰 컴퓨터로부터 수신하는 단계; 및 컴퓨팅에서의 사용을 위해 응답을 제1 네트워크 드라이버로부터 프로그램 드라이버에 전달하는 단계를 포함할 수 있다. 부가된 보안을 위해, 방법은 응답을 입력 드라이버로부터 제2 네트워크 드라이버에 전달하기 전에 디바이스로부터의 응답을 암호화하는 단계를 더 포함할 수 있다. 그러므로, 제1 신뢰 컴퓨터로부터 수신된 응답은 암호화될 수 있다.
실시예에서, 특정 컴퓨터 상에서의 연산의 결과의 컴퓨팅 동안, 연산이 제1 신뢰 컴퓨터에 연결된 디바이스로부터의 출력을 필요로 하면, 그 출력을 수행하기 위한 방법은: 특정 컴퓨터 상의 프로그램 드라이버에서 출력 요청을 생성하는 단계; 출력 요청을 프로그램 드라이버로부터 제1 네트워크 드라이버에 전달하는 단계; 출력 요청을 제1 네트워크 드라이버를 통해 제1 신뢰 컴퓨터에 송신하는 단계; 제1 신뢰 컴퓨터 상의 제2 네트워크 드라이버에서, 특정 컴퓨터로부터 출력 요청을 수신하는 단계; 출력 요청을 제2 네트워크 드라이버로부터 디바이스에 대한 출력 드라이버에 전달하는 단계; 디바이스로부터의 상태를 출력 드라이버로부터 제2 네트워크 드라이버에 전달하는 단계; 상태를 제2 네트워크 드라이버를 통해 특정 컴퓨터에 송신하는 단계; 제1 네트워크 드라이버에서 제1 신뢰 컴퓨터로부터 상태를 수신하는 단계; 및 컴퓨팅에서의 사용을 위해 상태를 제1 네트워크 드라이버로부터 프로그램 드라이버에 전달하는 단계를 포함할 수 있다. 부가된 보안을 위해, 출력 요청은 암호화된 데이터를 포함할 수 있고, 이후 그것은 출력 요청을 제2 네트워크 드라이버로부터 출력 드라이버에 전달하기 전에 복호화될 필요가 있을 것이다.
부가된 보안을 위해 여러 수준들 상에서 암호화가 사용될 수 있다. 신뢰 컴퓨터와 적어도 하나의 다른 컴퓨터 간의 모든 네트워크 연결들은 암호화될 수 있다. 그러한 네트워크 암호화는 예를 들어, 전송 계층 보안(Transport Layer Security)(TLS) 또는 임의의 다른 적합한 암호화 방식을 사용하여 구현될 수 있다.
도 2는 스플릿 디바이스 드라이버들의 구현 및 연산의 높은 수준의 실시예를 도시하고, 이는, 분명히 도시되어 있지는 않지만, 네트워크 통신들에 대한 TLS 암호화를 수반할 수 있다. 클라우드 컴퓨터 1(CC1)(200) 상의 스플릿 디바이스 드라이버는 2개의 부분을 포함한다: 프로그램과 인터페이스하는 드라이버, 및 네트워크와 인터페이스하는 드라이버. 유사하게, 신뢰 컴퓨터 1(TC1)(210) 상의 스플릿 디바이스 드라이버는 2개의 부분을 포함한다: 네트워크와 인터페이스하는 드라이버인 네트워크 인터페이스 1(212), 및 입력 디바이스와 인터페이스하는 드라이버인 입력 디바이스 드라이버 1(214). CC1(200)은 스플릿 디바이스 드라이버 방식을 이용함으로써 "x=in()" 입력 연산을 실행한다. 입력 연산에 대하여, 프로그램과 인터페이스하는 드라이버는 입력 요청(202)을 생성한다. 이 입력 요청(202)은 TLS 암호화 및 TC1(210)로의 전송을 위해 네트워크와 인터페이스하는 드라이버에 전달된다. 네트워크 인터페이스 1(212)은 요청을 수신하고 이를 입력 디바이스 드라이버 1(214)에 전달한다. 입력 디바이스인 입력 디바이스 1(220)로부터 응답이 수신될 때, 응답은 입력 디바이스 드라이버 1(214)에 의해 네트워크 인터페이스 1(212)에 전달된다. 네트워크 인터페이스 1(212)은 TLS를 사용하여 응답을 암호화하고 응답(222)을 CC1(200)에 전송한다. CC1(200) 상의 네트워크 드라이버는 TLS 복호화된 응답(222)을 프로그램 인터페이스 드라이버에 포워딩하고, 결국 이를 대기 프로그램에 포워딩한다. 프로그램은 수신된 입력을 변수 'x'에 할당하고 실행을 계속한다. 또한 클라우드 컴퓨터 4(CC4)(230)와 신뢰 컴퓨터 4(TC4)(240) 사이의 스플릿 디바이스 드라이버들을 사용하여 어떻게 출력이 수행될 수 있는지가 도 2에 도시된다. 출력에 대한 스플릿 디바이스 드라이버들의 연산은 디바이스로부터 입력을 수신하는 것 대신, 컴퓨터들이 상태 메시지(252)를 수신한다는 것을 제외하고는 입력 연산과 유사하다.
일련의 연산들 중의 각각의 연산, 또는 각각의 파쇄본은 암호화될 수 있다. 각각의 파쇄본은 고급 암호화 표준(Advanced Encryption Standard)(AES) 갈루아 카운터 모드(Galois Counter Mode)(GCM) 또는 임의의 다른 적합한 방식과 같은 대칭키 암호화 방식을 사용하여 암호화될 수 있다. 대칭키 암호화는 각각의 파쇄본이 상이한 키를 사용하여 암호화되도록 적어도 하나의 다른 컴퓨터의 공유키(들)를 사용한다. 그러한 방식은 파쇄본이 의도된 다른 컴퓨터 상에서만 파쇄본의 복호화를 허용하지만, 임의의 다른 컴퓨터들로부터 프로그램의 나머지를 숨긴다.
일련의 연산들 중의 각각의 연산의 각각의 데이터 값은 암호화될 수 있다. 데이터 값들을 암호화하는 단계는 AES GCM과 같은 대칭키 방식, RSA와 같은 공개키 방식(public-key scheme), 또는 임의의 다른 적합한 방식을 사용하여 수행될 수 있다. 그러한 암호화는 신뢰 컴퓨터 및 적어도 하나의 다른 컴퓨터 둘 모두에서 수행된다. 대칭키 방식이 사용된다면, 사용된 비밀키(secret key)는 데이터의 송신기와 수신기 간의 링크의 공유키이다. 공개키 방식이 사용되면, 송신기는 암호화를 위해 수신기의 공개키를 사용하고, 수신기는 복호화를 위해 그것의 개인키(private key)를 사용한다. 그러한 방식들은 적어도 하나의 다른 컴퓨터가 컴퓨팅에 필요한 데이터를 복호화할 수 있게 하지만, 그로부터 다른 모든 데이터를 숨긴다.
도 3은 도 1의 예시적인 프로그램에서의 코드 및 데이터의 파쇄본들에 대한 대칭키 암호화 및 복호화 연산들의 실시예를 도시한다. 도 2와 같이, 도 3은 통신 패킷들의 TLS 암호화 및 복호화를 분명히 도시하지는 않는다. 프로그램의 컴퓨팅에 수반되는 4개의 컴퓨터들인 신뢰 컴퓨터 1(TC1)(310), 클라우드 컴퓨터 2(CC2)(320), 클라우드 컴퓨터 3(CC3)(330), 및 신뢰 컴퓨터 4(TC4)(340)는 각각 신뢰 컴퓨터 0(TC0)(300)에 알려진 비밀키들인 K1, K2, K3, 및 K4를 가지고 있다. 파쇄된 프로그램 코드는 파쇄 연산 동안 공유키들인 K1, K2, K3, 및 K4를 사용하여 TC0(300) 상에서 암호화된다. 예를 들어, TC0(300) 상의 "in'=Enc(K1,in)"문은 암호화된 코드 "in"을 생성하기 위해 키 K1을 사용하여 "in"에 대한 코드의 암호화를 표시한다. TC1(310) 상의 대응하는 복호화 연산은 "in=Dec(K1,in')"이고 이 복호화는 "in" 연산에 대한 코드를 생성한다. TC1(310)은 키 K1만을 알기 때문에 TC1(310)은 암호화된 프로그램의 임의의 다른 부분을 복호화할 수 없고, 키 K1을 사용하여 코드의 어떤 다른 부분을 복호화하려고 시도하는 것은 유효한 코드를 생성하지 않을 것이다. 이 암호화 및 복호화 프로세스는 컴퓨팅을 위해 파쇄본을 송신한 각각의 컴퓨터의 키들을 사용하여 모든 파쇄본들에 대해 반복되고, 이는 각각의 컴퓨터가 컴퓨팅할 파쇄본에만 액세스하도록 허용한다. 컴퓨터들 간의 통신 링크들은 또한 데이터의 송신기 및 수신기에만 알려진 공유키들을 가지고 있다. 이 경우에, 통신 링크들의 공유키들은 K12, K23, 및 K34이다. 예를 들어, 공유키 K12는 TC1(310)에 의해 입력 'x'를 암호문 'x''로 암호화하기 위해 사용되고, x'는 CC2(320) 상에서 'x'를 산출하기 위해 키 K12를 사용하여 복호화된다. 공격자가 네트워크를 통해 평문(plaintext)을 가로챌 수 없도록 보장하기 위해 이 프로세스는 컴퓨터에서 컴퓨터로 사용된다.
난독화는 부가적인 보안을 위해 사용되어야 하고, 난독화는 데이터 난독화, 코드 난독화, 또는 둘 모두를 포함할 수 있다. 다른 컴퓨터의 공격자로부터 원본 코드 및 데이터를 숨기기 위해, 난독화는 각각의 파쇄본 내에서 코드 및/또는 데이터를 수정하는 단계를 수반할 수 있다. 파쇄본 실행 동안 명령어들 및 데이터뿐만 아니라 파쇄본의 코드에 대한 완전한 가시성을 가지고 있는 공격자로부터 원본 프로그램의 로직을 숨기기 위해, 코드 난독화는 난독화 변환을 사용한다. 공격자가 해독화된 데이터 값을 복구하는 것이 어렵도록 파쇄된 코드가 난독화된 데이터 값들 상에서 실행되게 하기 위하여 데이터 난독화는 데이터를 변환하며; 블라인딩(blinding)은 데이터 난독화의 한 유형이다.
파쇄와 함께 난독화하는 것은 각각의 연산을 각각의 다른 컴퓨터에 송신하기 전에 일련의 연산들 중의 각각의 연산을 난독화하는 단계, 및 컴퓨터 프로그램의 수신된 컴퓨팅된 결과를 해독화하는 단계를 수반한다. 난독화의 방법은 파쇄의 수준에 따라 다르고, 파쇄는 적어도 4개의 상이한 수준들 상에서 수행될 수 있다: 게이트 수준, 하드웨어 단위 수준, 명령어 수준, 암호화 방식 수준, 및 프로그램이 단위들로 나누어지도록 허용하는 임의의 다른 방식.
도 4는 4개의 컴퓨터들에 걸쳐 프로그램 "z = a * x + y"을 난독화하는 것의 예를 도시한다. 난독화의 목적은 클라우드 컴퓨터 2(CC2)(410) 및 클라우드 컴퓨터 3(CC3)(420)에서 입력들 'a', 'x', 및 'y' 및 출력 'z'의 값들을 공격자들로부터 숨기는 것이다. 신뢰 컴퓨터 1(TC1)(400)은 입력들 'a', 'x', 및 'y'의 값들을 각각 난독화하기 위한 1회용 패드들(one-time pads)로서 사용되는 3개의 랜덤 값들 'r', 's', 및 't'를 도입한다. 난독화를 위해 사용되는 연산은 변수의 사용에 의존한다. 예를 들어, 변수들 'a'와 'x'가 곱해지고, 따라서 난독화 연산은 'a' 및 'x'에 그것들의 패드 값들인 'r' 및 's'를 곱하지만, 변수 'y'는 가수(addend)이고, 따라서 난독화 연산은 1회용 패드 't'를 더한다. CC2(410) 및 CC3(420)은 'b'' 및 'c''를 각각 컴퓨팅하기 위해 난독화된 값들 'a'', 'x'', 및 'y''를 사용하여 컴퓨팅을 수행한다. CC3(420)은 'r' 및 's'로 나눔으로써 'b''의 해독화를 수행하고, 신뢰 컴퓨터 4(TC4)(430)는 패드 't'를 뺌으로써 값 'c''의 해독화를 수행한다. 이러한 절차들은 공격자가 관련된 변수들의 실제 값을 절대로 볼 수 없다는 것을 보장한다.
게이트 수준 파쇄는 가장 미세한 수준의 파쇄이고 완벽한 비밀을 제공하는데, 왜냐하면 단일의 다른 컴퓨터를 관찰하는 공격자가 계산을 이해하거나 계산의 원본 입력들 또는 출력들을 복구하는 것이 불가능하기 때문이다. 그러나, 이는 가장 느린 수준의 파쇄이고 다른 컴퓨터들 상에서 I/O 연산들을 수행할 수 있는 능력을 제공하지 않는다. 이 수준에서, 프로그램은 AND, OR, NAND, NOR, 및 NOT 게이트들로 구성되는 회로로 나누어지고, 각각의 게이트 연산이 2개의 피연산자들을 갖는 것을 보장하기 위해 NOT 게이트들은 동일한 입력을 갖는 NAND 게이트들로 변환될 수 있다. 이러한 방식으로, 프로그램이 나누어지는 일련의 연산들은 회로 게이트 연산들이고, 각각의 회로 게이트 연산은 연산자, 제1 피연산자, 및 제2 피연산자를 가지고 있다.
실시예에서, 게이트 연산들의 회로에서 각각의 게이트는 2개의 다른 컴퓨터들에 걸쳐 난독화되고 파쇄된다. 각각의 게이트 연산에 대해, 프로세스는 신뢰 컴퓨터가 제1 피연산자를 제1 랜덤 값으로 난독화하고 제2 피연산자를 제2 랜덤 값으로 난독화하는 것을 수반한다. 이후, 난독화된 피연산자들은 제1 컴퓨터가 난독화된 피연산자들을 사용하여 복수의 연산들의 복수의 결과들을 컴퓨팅하고 복수의 결과들을 제2 컴퓨터에 송신하게 하는 명령어들과 함께 제1 컴퓨터에 송신된다. 신뢰 컴퓨터는 제2 컴퓨터에 명령어들을 송신하고, 명령어들은: 연산자, 제1 랜덤 값, 및 제2 랜덤 값에 기초하여 복수의 결과들 중의 결과를 선택하고; 선택된 결과를 제3 랜덤 값으로 난독화하고; 선택된 결과를 신뢰 컴퓨터 또는 다른 컴퓨터일 수 있는 상이한 컴퓨터에 송신하기 위한 것이다.
도 5는 2개의 다른 컴퓨터들, 즉 클라우드 컴퓨터 1(CC1)(510) 및 클라우드 컴퓨터 2(CC2)(520)에 걸쳐 게이트 컴퓨팅을 파쇄하는 것의 예시 실시예를 도시한다. 이 예에서, 게이트 연산 "g = a & b"가 실행될 현재 파쇄본이다. 도 4와 같이, 이 실시예는 1회용 패드들을 사용하지만, 랜덤 값들 'r', 's', 및 'u'을 함께 사용한다. 신뢰 컴퓨터(TC)(500)는 다음과 같이 "g = a & b"를 수행하기 위해 난독화된 프로그램을 생성한다. 먼저, TC(500)는 ‘a’ 및 ‘b’를 각각 난독화하기 위해 2개의 랜덤 비트들, 'r' 및 's'를 선택한다. 이것은 이후 "c = a ^ r" 및 "d = b ^ s"를 계산하고, '^' 연산자는 XOR 연산을 표시한다. TC(500)는 이후 'c' 및 'd'를 CC1(510)에 송신한다. CC1(510)은 4개의 임시 값들을 컴퓨팅한다: e1=c & d; e2=c & !d; e3=c | !d; 및 e4=c | d. CC1(510)은 이후 {e1, e2, e3, e4}를 CC2(520)에 송신한다. CC2(520)는 'r' 및 's'의 값들에 기초하여 후속하는 프로그램들 중 하나를 실행하고 결과를 난독화하기 위해 랜덤 비트 'u'를 사용한다: {r = 0, s = 0}이면, f = e1 ^ u이고; {r = 0, s = 1}이면, f = e2 ^ u이고; {r = 1, s = 0}이면, f = !e3 ^ u이고; 및 {r = 0, s = 0}이면, f = !e4 ^ u이다. CC2(520)는 이후 f를 TC(500)에 송신한다. TC(500)는 "g = f ^ u"를 컴퓨팅함으로써 결과를 해독화한다.
도 5의 예시적인 실시예에서, CC1(510) 및 CC2(520)이 컴퓨팅들을 수행하는 동안, TC(500)는 데이터를 난독화하기 위해 3개의 XOR 연산들을 컴퓨팅한다. CC1(510)은 4개의 일반적 연산들(generic operations)을 수행하고 CC2(520)는 정확한 연산(correct operation)을 선택하기 때문에 CC1(510)및 CC2(520) 중 어느 것도 입력 데이터, 출력 데이터, 또는 컴퓨팅을 알지 못한다. AND의 컴퓨팅 또는 컴퓨팅의 결과가 CC2(520)에서 밝혀지는 것으로 보임에도 불구하고, 세심한 검토(careful examination)는 컴퓨팅 및 데이터 모두가 숨겨져 있음을 보여준다. CC2(520)에서의 프로그램은 단순히 {e1, e2, e3, e4} 값들 중 하나의 패스스루(pass-through), 또는 부정(negation)이고, 단지 그것이 아는 'r', 's', 및 'u'의 랜덤 값들에 따라 파쇄기 프로그램에 의해 생성된다. 또한, 도 6이 도시하는 바와 같이, CC1(510)에서의 변수 이름들의 후속하는 순열이 CC2(520)가 "a OR b"를 컴퓨팅하는 것을 야기하기 때문에, CC2(520)는 그것이 AND 연산을 컴퓨팅하는지 또는 OR 연산을 컴퓨팅하는지를 알 수 없다: e4 = c & d; e3 = c & !d; e2 = c | !d; e1 = c | d. "g = a | b"를 계산하는 도 6은 CC2(620)에서 수행되는 컴퓨팅 외에 모든 점에 있어서 도 5와 동일하다.
유사하게, NAND 또는 NOR 연산은 CC2(520)에서 부가적인 NOT 연산을 부가함으로써 컴퓨팅될 수 있다. 상기 언급된 바와 같이, 단일 비트의 NOT 연산은 동일한 입력들로 NAND 연산을 사용할 수 있다. 입력을 숨기기 위해 랜덤 비트 'r'을 사용하고 출력을 숨기기 위해 또 다른 랜덤 비트 'u'를 사용하는 유사한 방법은 단일 비트를 저장하는 순서 회로(sequential circuit)를 난독화하기 위해 사용될 수 있다. 따라서, 임의의 회로는 TC(500) 상에 1회용 패드(입력들 및 출력들을 숨기기 위해 사용되는 비트들의 모든 랜덤 값들로 구성됨)를 도입하고 그 1회용 패드 하에서 회로를 실행하기 위해 2개의 파쇄본들을 생성함으로써 난독화될 수 있다. 이 방식은 2개의 파쇄본들이 공격자에게 동시에 보이지 않는 한 안전하다.
(1) CC2(520, 620)에서 보이는 값들 {e1, e2, e3, e4}가 CC1(510, 610)에서의 입력 변수들 'c' 및 'd'의 4개의 조합들에 대해 특정한 패턴을 갖고 있고 (2) AND 연산에 대한 값들 {e1, e2, e3, e4}의 패턴이 OR 연산에 대한 값들 {e1, e2, e3, e4}의 패턴과 상이하기 때문에, 도 5 및 도 6에서 예시된 1회용 패드 방법은 회로가 여러 번 사용되면 안전하지 않다. 4개의 값들 {e1, e2, e3, e4}를 모으고 분석하는 CC2(520, 620)에서의 공격자는 연산을 결정할 수 있다. 이것과 싸우기 위해, 부가적인 4개의 랜덤 비트들 't1', 't2', 't3', 및 't4'가 {e1, e2, e3, e4}의 값들을 난독화하기 위해 도입될 수 있다. 도 7은 이러한 새로운 비트들을 사용하여 컴퓨팅을 예시한다.
도 7은 도 5와 동일하지만, 부가된 난독화를 위해 {t1, t2, t3, t4}를 사용한다. 이 예에서, 신뢰 컴퓨터(TC)(700)는 'c' 및 'd'를 난독화하고 그것들을 도 5 및 도 6과 동일하게 {e1, e2, e3, e4}를 컴퓨팅하는 클라우드 컴퓨터 1(CC1)(710)에 송신한다. 그러나, {e1, e2, e3, e4}의 값들을 난독화하기 위해 e1은 이제 t1과 XOR되고, e2는 t2와 XOR되고, e3은 t3과 XOR되고, e4는 t4와 XOR된다. 일반적으로, 클라우드 컴퓨터 2(CC2)(720), 또는 제2 파쇄본을 프로세싱하는 컴퓨터는, 후속하는 표에서 보여진 바와 같이, 랜덤 비트들 'r', 's', 'u', 't1', 't2', 't3', 및 't4'의 값들뿐만 아니라 컴퓨팅되고 있는 연산에 의존하는, 특정한 'e' 값의 패스스루 또는 부정 중 어느 하나이다.
Figure 112018027165307-pct00001
도 7에서, 연산이 "g = a & b"이기 때문에 CC2(720)는 AND 열 아래의 계산들 중 하나를 선택한다. 이후, CC2(720)는 'f'를 TC(700)에 송신하고, 여기서 TC(700)은 최종 결과를 위해 그것을 해독화한다.
4개의 연산들(AND, NAND, OR, NOR)의 각각에 대한 {e1, e2, e3, e4}의 4개의 값들에 대한 분석은 ({t1, t2, t3, t4}의 16개의 값들에 대해) 정확히 동일한 16개의 패턴들이 4개의 연산의 각각에 대해 나타난다는 것을 보여준다. 그러므로, CC2(720)에서의 공격자는 연산을 결정하기 위해 이러한 패턴들을 사용할 수 없다. 그러나, CC2(720)에서 프로그램을 보는 공격자는 'r'과 's'의 값들이 동일한지 여부를 판단할 수 있기 때문에 정보의 약간의 유출이 있다. 2개의 입력 비트들의 AND, NAND, OR, 또는 NOR 연산을 난독화하기 위한 이 방식은 2개의 파쇄본들을 생성하기 위해 7개의 비트들(r, s, t1, t2, t3, t4, u)을 포함하는 랜덤 키를 사용한다. 제1 파쇄본은 항상 동일한 불 연산들(boolean operations)을 사용하고, 제2 파쇄본은 정확한 연산을 선택하고, 2개의 파쇄본들 간의 중간 값들의 통신은 난독화된다. 어떠한 임의의 회로를 난독화 및 컴퓨팅하기 위한 이 프로세스는 도 8에서 볼 수 있다. 도 8에서 각 직사각형은 컴퓨터를 나타낸다. 초기 입력은 "입력을 송신"으로 라벨링된 컴퓨터(800)로부터 "컴퓨팅 1"로 라벨링된 제1 컴퓨터(810)에 송신되고, 거기에서 제1 파쇄본이 연산들을 계산하고 연산들을 "선택 1"로 라벨링된 제2 컴퓨터(820)에 송신하고, 거기에서 제2 파쇄본이 정확한 연산을 선택한다. 이 프로세스는 회로의 결과가 컴퓨팅되고 "출력을 수신"으로 라벨링된 컴퓨터(850)에 송신될 때까지 계속된다(예를 들어, "컴퓨팅 2" 및 "선택 2"로 각각 라벨링된 컴퓨터들(830 및 840)에서, 그리고 이후 컴퓨팅 1(810) 또는 또 다른 선택된 컴퓨터에 되돌아감).
하드웨어 유닛 수준의 파쇄는 게이트 수준 파쇄보다 낮은 프라이버시를 제공하지만, 더 빠른 속도로 실행된다. 이 수준의 파쇄는 프로그램을 특정 함수들을 수행하는 하드웨어 유닛들의 연산들을 포함하는 회로로 나눈다. 예들은 일반 컴퓨터 내의 표준 하드웨어 유닛들인 정수 덧셈, 정수 곱셈, 정수 비교, 및 부동 소수점 곱셈을 포함한다. 이 방식으로, 일련의 연산들은 각각의 수학 연산이 연산자, 제1 피연산자, 및 제2 피연산자를 갖는 수학 연산들이다. 다른 컴퓨터에서의 공격자는 수행되고 있는 연산의 유형을 볼 수 있으나, 정확한 연산을 추측할 수는 없다. 예를 들어, 공격자는 정수 덧셈이 수행되고 있음을 볼 수 있지만, 피연산자들의 플레인 값들 또는 결과는 볼 수 없다. 결국, 게이트 수준 파쇄와 같이, 하드웨어 유닛 수준 파쇄는 다른 컴퓨터들 상에서 I/O 연산들을 수행할 수 있는 능력을 제공하지 않는다.
명령어 수준의 파쇄는 각각의 파쇄본이 명령어들의 서브세트를 실행하도록 프로그램을 명령어로 나눈다. 명령어들의 예들은 x86 머신 명령어들 및 자바 가상 머신(Java Virtual Machine)(JVM) 바이트 코드들을 포함한다. 하드웨어 유닛 수준의 파쇄와 같이, 이들 명령어들은 수학 연산들을 수반한다. 그러나, 하드웨어 유닛 수준의 파쇄와 달리, 명령어 수준의 파쇄는 전술한 스플릿 디바이스 드라이버들을 사용하여 I/O 연산들을 수행하는 프로그램들을 수용(accommodate)한다.
실시예에서, 프로그램이 나누어진 일련의 연산들 중의 각각의 수학 연산은 2개의 컴퓨터들에 걸쳐 난독화 및 파쇄된다. 각각의 수학 연산에 대해, 프로세스는 신뢰 컴퓨터가 제1 피연산자를 제1 랜덤 값으로 난독화하고 제2 피연산자를 제2 랜덤 값으로 난독화하는 것을 수반한다. 이후, 난독화된 피연산자들은 제1 컴퓨터가 연산자, 제1 난독화된 피연산자, 및 제2 난독화된 피연산자를 사용하여 연산의 제1 결과를 컴퓨팅하도록 하는 명령어들과 함께 제1 컴퓨터에 송신된다. 제1 컴퓨터는 또한 제2 컴퓨터로부터 값을 수신하고, 연산자, 제1 결과, 및 값을 사용하여 연산의 제2 결과를 컴퓨팅하고, 제2 결과를 신뢰 컴퓨터 또는 다른 컴퓨터일 수 있는 상이한 컴퓨터에 송신한다. 제2 컴퓨터는 피연산자들 및 최종 결과를 난독화하기 위해 사용되는 랜덤 값들을 알고, 제1 컴퓨터에 송신된 값을 계산하기 위해 이 지식을 사용한다. 덧셈 연산을 수반하는 일부 실시예들에서, 수신된 값은 제3 랜덤 값에서 제1 랜덤 값과 제2 랜덤 값의 합을 뺀 값이다. 이하에 설명되는 도 12는 하나의 그러한 실시예를 예시한다. 곱셈 연산을 수반하는 일부 실시예들에서, 수신된 값은 제3 랜덤 값을 제1 랜덤 값과 제2 랜덤 값의 곱으로 나눈 값이다. 이하에 설명되는 도 13은 하나의 그러한 실시예를 예시한다. 일부 실시예들은 연산을 곱셈적 난독화 방식으로부터 덧셈적 곱셈 방식으로 및 그와 반대로 전이하는 것을 필요로 할 수 있다. 이하에 설명되는 도 18은 곱셈적 난독화 방식으로부터 덧셈적 난독화 방식으로 전이하는 실시예를 예시하고, 또한 아래에 설명되는 도 19는 덧셈적 난독화 방식으로부터 곱셈적 난독화 방식으로 전이하는 실시예를 예시한다.
난독화에 필요한 랜덤 값들은 후속하는 방법에 의해 생성될 수 있다. 프로그램의 실행의 주기들은 주기 'i'에서 실행되는 명령어에 의해 정의되는 변수가 함수 "Key(i)"에 의해 블라인드되게 하기 위해 넘버링된다. 함수 "Key(i)"는 부동 소수점 계산들 동안 반올림 오차(round-off error)를 제한하기 위해 "너무 크거나 너무 작지" 않은 랜덤 부동 소수점 값을 생성한다. 컴퓨팅 동안 임의의 0으로 나누기(division by zero)를 방지하기 위해 랜덤 부동 소수점 값은 또한 0이 아닌 값이다. "Key" 함수는 난스(nonce) 'i'에 대한 랜덤 값을 생성하는 Salsa20과 같은 빠른 스트림 암호(fast stream cipher)를 사용하여 구현된다. 2개의 비밀 시드들이 스트림 암호를 위해 사용된다: 덧셈적 블라인드 값들을 생성하기 위한 하나의 시드, 및 곱셈적 블라인드 값들을 생성하기 위한 상이한 시드. 프로그램에서 각각의 명령어가 덧셈 또는 곱셈이고, 둘 다는 아니기 때문에, 실행의 결과는 2개의 시드들 중 하나를 사용하여 블라인드된다. 하나의 방식으로 블라인드된 명령어의 결과가 반대 방식의 연산에서 사용되면, 방식들을 변경하기 위해 변환 연산이 사용된다.
도 12 및 도 13에서 도시된 예들에서, TC들(1200, 1230, 1300, 및 1330) 및 CC3(1220 및 1320)은 2개의 시드들 모두를 알 것이고, CC2(1210 및 1310)는 어떠한 시드도 알지 못할 것이다. 도 18 및 도 19에서 도시된 예들에서, TC들(1800, 1840, 1900, 및 1940) 및 CC3(1820 및 1920)은 2개의 시드들 모두를 알 것이고, CC2(1810 및 1910)는 어떠한 시드도 알지 못할 것이며, CC4(1830 및 1930)는 곱셈적 시드만을 알 것이다.
암호화 방식 수준에서 수행되는 파쇄는 데이터 상에서 수행되는 연산들에 의존하는 동형 암호화 방식들을 사용하여 일련의 연산들 중의 각각의 연산의 각각의 데이터 값을 암호화한다. 덧셈 연산들은 Paillier와 같은 덧셈적 동형 암호화(Additive Homomorphic Encryption)(AHE) 방식을 사용하여 암호화되고, 곱셈 연산들은 El Gamal와 같은 곱셈적 동형 암호화(Multiplicative Homomorphic Encryption)(MHE) 방식을 사용하여 암호화된다. 하나의 방식으로 암호화되는 데이터가 비호환 연산(incompatible operation)을 사용하여 연산될 필요가 있을 때, AHE 데이터 값들을 MHE 데이터 값들로 변환하고 MHE 데이터 값들을 AHE 데이터 값들로 변환하기 위해 전이 암호화 함수들이 사용될 수 있다. 이들 전이 함수들은 부가된 보안을 위해 전이 암호화 함수를 일련의 연산들로 나누고 전이 암호화 함수의 각각의 연산을, 각각의 연산의 결과를 컴퓨팅하고 결과를 또 다른 컴퓨터에 포워딩하도록 동작하는 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신함으로써 파쇄될 수 있다. 이하에 설명되는 도 14는 Paillier에서 El Gamal으로의 파쇄된 전이 암호화 함수의 실시예를 도시하고, 또한 이하에 설명되는 도 15는 El Gamal에서 Paillier로의 파쇄된 전이 암호화 함수의 실시예를 도시한다. 또한 2개의 암호화된 정수들을 비교하는 것이 가능하다. 이하에 설명되는 도 16은 Paillier 암호화를 사용하는 파쇄된 비교 함수의 실시예를 도시하고, 또한 이하에 설명되는 도 17은 El Gamal 암호화를 사용하는 파쇄된 비교 함수의 실시예를 도시한다.
도 9는 El Gamal 및 Paillier 암호화 방식들을 사용하여 "z = a * x + b"를 실행하는 예시적인 실시예를 도시한다. 신뢰 컴퓨터 1(TC1)(900)은 El Gamal을 사용하여 'a' 및 'x' 값들을 암호화하고 Paillier를 사용하여 'b' 값을 암호화한다. "EG()" 함수는 El Gamal를 사용한 암호화를 지칭하고, "EP()" 함수들은 Paillier를 사용한 암호화를 지칭한다. 클라우드 컴퓨터 2(CC2)(910)는 'y''의 MHE 암호화된 값을 생성하기 위해 MHE-암호화된 값들 상에 곱셈 "a * x"를 컴퓨팅한다. CC2(910)는 이후 'y''의 El Gamal 암호화된 값을 'y'''의 Paillier 암호화된 값으로 변환하기 위해 클라우드 컴퓨터 3(CC3)(920)와 함께 파쇄된 전이 함수들 "GP1()", "GP2()", 및 "GP3()"를 사용하고, AHE 암호화된 값들을 곱함으로써 "b + y"를 더한다. 신뢰 컴퓨터 4(TC4)(930)는 이후 'z'의 Paillier 암호화된 값을 수신하고, 솔루션을 위해, 복호화 Paillier 함수 "DP()"를 사용하여 이를 복호화한다. 파쇄된 전이 함수들 "GP1()", "GP2()", 및 "GP3()"가 이하에 도 15와 관련하여 더 완전하게 설명된다.
전술한 바와 같이, 스플릿 디바이스 드라이버들은 다른 컴퓨터들 상에서 실행하는 파쇄본들에서 입력 및 출력 연산들을 가능하게 한다. 부가적인 보안층(security layer)으로서, 오직 신뢰 컴퓨터들만이 I/O 디바이스들로부터 플레인 데이터를 볼 수 있게 하기 위해, 파쇄본들이 I/O 디바이스들로부터의 암호화된 데이터 상에서만 연산하도록 허용하는 것이 바람직하다. 도 10은 단일 컴퓨터 상에서 동작하는 일반적인 디바이스 드라이버 상호작용의 예시적인 동작을 도시하는 반면, 대조적으로, 도 11은 신뢰 컴퓨터와 클라우드 컴퓨터 간의 스플릿 디바이스 드라이버 상호작용의 상세한 예시적인 동작을 도시한다.
도 10은 단일 컴퓨터 상에서 동작하는 일반적인 디바이스 드라이버 상호작용의 예시적인 동작을 도시한다. 도 10에 도시된, 예시적인 애플리케이션인 애플리케이션(1000)은 키보드인 키보드 하드웨어(1020)로부터의 입력을 요청하고, 그 입력을 콘솔 또는 스크린인 콘솔 하드웨어(1040)에 출력한다. 프로세스는 도 10에 라벨링된 8개의 단계들을 필요로 한다. 단계(1)에서, 애플리케이션은 컴퓨터의 커널(kernel) 내의 커널 키보드 디바이스 드라이버(Kernel Keyboard Device Driver)(KK)(1010)로부터의 문자를 요청한다. 단계(2)에서, KK(1010)는 키보드 하드웨어(1020)로부터 문자를 요청한다. 단계(3)에서, 키보드 하드웨어(1020)는 입력을 수신하고 문자와 함께 KK(1010)에 응답한다. 단계(4)에서, KK(1010)는 입력 연산을 완료하기 위해 애플리케이션에 문자를 전달한다. 단계(5)에서, 애플리케이션은 출력 연산을 시작하고 문자를 컴퓨터의 커널 내의 커널 콘솔 디바이스 드라이버(KC)(1030)에 송신한다. 단계(6)에서, KC(1030)는 문자를 콘솔 하드웨어(1040)에 송신한다. 단계(7)에서, 콘솔 하드웨어(1040)는 문자를 프린트하고 상태를 KC(1030)에 송신한다. 단계(8)에서, KC(1030)는 상태를 애플리케이션(1000)에 전달한다. 이 단계에서, 출력 연산이 이제 완료되고, 애플리케이션(1000)은 예를 들어, 콘솔 스크린에 프린트했다면, 에러 등의 출력의 상태를 인식한다.
도 11은 도 10과 동일한 함수들을 수행하는 신뢰 컴퓨터(TC)(1102) 및 클라우드 컴퓨터(CC)(1104) 간의 스플릿 디바이스 드라이버의 실시예의 동작을 도시한다: 파쇄본의 실행(1100)은 키보드 하드웨어(1160)로부터의 입력을 필요로 하고(단계(1 내지 12)) 이후 그 입력을 콘솔 하드웨어(1162)에 출력한다(단계(13 내지 24)). 보안 목적들을 위해 CC(1104)는 신뢰 컴퓨터로부터 입력을 얻고 신뢰 컴퓨터(여기서, TC(1102)임)에 출력해야 하기 때문에, 디바이스 드라이버들은 CC(1104) 및 TC(1102) 사이에서 스플릿된다.
도 11의 입력부는 다음과 같다. 단계(1)에서, 파쇄본의 실행(1100)은 사용자 모드인 사용자 모드 키보드 디바이스 드라이버(CCUMK)(1110) 내의 스플릿 키보드 디바이스 드라이버로부터 문자를 요청한다. 단계(2)에서, CCUMK(1110)는 문자를 요청하기 위해 커널 네트워크 디바이스 드라이버(CCKN)(1120)를 사용한다. 단계(3)에서, CCKN(1120)은 TC 상의 커널 네트워크 디바이스 드라이버(TCKN)(1130)와 통신한다. 단계(4)에서, TCKN(1130)은 사용자 모드 키보드 디바이스 드라이버(TCUMK)(1140)로부터 문자를 요청한다. 단계(5)에서, TCUMK(1140)는 커널 키보드 디바이스 드라이버(TCKK)(1150)로부터의 문자를 요청한다. 단계(6)에서, TCKK(1150)는 키보드 하드웨어(1160)로부터 문자를 요청한다. 단계(7)에서, 키보드 하드웨어(1160)는 입력을 수신하고 문자와 함께 TCKK(1150)에 응답한다. 단계(8)에서, TCKK(1150)는 문자를 TCUMK(1140)에 송신한다. 단계(9)에서, TCUMK(1140)는 수신된 문자를 암호화하고 그것을 TCKN(1130)에 송신한다. 단계(10)에서, TCKN(1130)은 암호화된 문자를 CCKN(1120)에 송신한다. 단계(11)에서, CCKN(1120)은 암호화된 문자를 CCUMK(1110)에 송신한다. 단계(12)에서, CCUMK(1110)는 입력 연산을 완료하기 위해 암호화된 문자를 파쇄본의 실행(1100)에 전달한다.
도 11의 출력부는 다음과 같고, 파쇄본의 실행(1100)은 단계(1 내지 12)의 프로세스로부터 암호화된 문자를 수신한 것으로 가정한다. 단계(13)에서, 파쇄본의 실행(1100)은 출력 연산을 시작하고, 암호화된 문자를 사용자 모드인 사용자 모드 콘솔 디바이스 드라이버(CCUMC)(1112) 내의 스플릿 콘솔 디바이스 드라이버에 송신한다. 단계(14)에서, CCUMC(1112)는 암호화된 문자를 송신하기 위해 CCKN(1120)을 사용한다. 단계(15)에서, CCKN(1120)은 TCKN(1130)과 통신한다. 단계(16)에서, TCKN(1130)은 암호화된 문자를 사용자 모드 콘솔 디바이스 드라이버(TCUMC)(1142)에 송신한다. 단계(17)에서, TCUMC(1142)는 문자를 복호화하고 플레인 문자를 커널 콘솔 디바이스 드라이버(TCKC)(1152)에 송신한다. 단계(18)에서, TCKC(1152)는 플레인 문자를 콘솔 하드웨어(1162)에 송신한다. 단계(19)에서, 콘솔 하드웨어(1162)는 문자를 프린트하고 상태를 TCKC(1152)에 송신한다. 단계(20)에서, TCKC(1152)는 상태를 TCUMC(1142)에 송신한다. 단계(21)에서, TCUMC(1142)는 상태를 TCKN(1130)에 송신한다. 단계(22)에서, TCKN(1130)은 상태를 CCKN(1120)에 송신한다. 단계(23)에서, CCKN(1120)은 상태를 CCUMC(1112)에 송신한다. 단계(24)에서, CCUMC(1112)는 상태를 파쇄본의 실행(1100)에 송신한다. 이 단계에서, 출력 연산이 이제 완료되고, 파쇄본의 실행(1100)은 예를 들어, 콘솔 스크린에 프린트했다면, 에러 등의 출력의 상태를 인식한다.
스플릿 드라이버들 외에, 도 10에서의 애플리케이션(1000)과 도 11에서의 파쇄본의 실행(1100) 간의 부가적인 차이는 파쇄본의 실행(1100)은 암호화된 데이터를 연산하기 때문에, 공격자에 의해 관찰되는 컴퓨터 - 여기서는 CC(1104) - 상에서 실행할 수 있다는 것이다. 데이터의 암호화 및 복호화에 대한 키는 오직 TC(1102) 상에서만 이용가능하고, TC(1102)는 TCUMK(1140) 및 TCUMC(1142)에서 키를 사용한다.
전술한 바와 같이, 코드 난독화는 원본 프로그램의 로직을 숨기기 위해 사용될 수 있고, 데이터 난독화와 관련하여 사용될 수 있다. 데이터 난독화는 도 12 및 도 13을 이용하여 더 잘 이해될 수 있고, 코드 난독화는 불투명 프리디케이트들(opaque predicates)을 포함하는 연산 코드 대체(opcode substitution), 함수 병합(function merging), 제어 흐름 평면화(control flow flattening), 및 디코이 코드(decoy code)를 포함할 수 있으나, 이에 한정되지는 않는다.
도 12는 데이터 난독화를 사용하여 합 "g = a + b"을 컴퓨팅하는 실시예를 예시한다. 신뢰 컴퓨터 1(TC1)(1200)은 'a' 및 'b'를 난독화하기 위해 2개의 난수들 'r' 및 's'를 각각 선택한다. TC1(1200)는 "a + r" 및 "b + s"를 컴퓨팅하고 결과들을 변수들 'c' 및 'd'에 각각 할당한다. TC1(1200)은 이후 (c, d)를 클라우드 컴퓨터 2(CC2)(1210)에 송신한다. CC2(1210)는 합 "e = c + d"를 컴퓨팅하고 클라우드 컴퓨터 3(CC3)(1220)으로부터의 블라인드를 요청한다. CC3(1220)은 랜덤 값들 'r' 및 's'에 관한 지식을 제공받고, 또한 최종 결과를 블라인드하기 위해 사용되는 제3 랜덤 값 'u'를 제공받는다. CC3(1220)은 "u - r - s"의 값을 컴퓨팅하고, 그것을 변수 'h'에 할당하고, 그것을 CC2(1210)에 송신한다. CC2(1210)는 CC3(1220)으로부터 값 'h'를 수신하고, "e + h"를 컴퓨팅하고, 결과를 변수 'f'에 할당하고, 이를 신뢰 컴퓨터 4(TC4)(1230)에 송신한다. TC4(1230)는 이후 "f - u"를 컴퓨팅함으로써 결과를 언블라인드(unblind)하고, 연산을 완료한다. 따라서, TC들(1200 및 1230)은 입력 데이터('a' 및 'b') 및 출력 데이터('g')를 난독화하기 위한 키들로서, 3개의 난수들 'r', 's', 및 'u'를 사용하는 한편, 2개의 클라우드 컴퓨터들(1210 및 1220)은 실제 합을 컴퓨팅한다. 어떤 클라우드 컴퓨터도 입력 또는 출력 데이터를 알지 못한다.
도 13은 데이터 난독화를 사용하여 곱 "g = a * b"를 컴퓨팅하는 실시예를 예시한다. 신뢰 컴퓨터 1(TC1)(1300)은 'a' 및 'b'를 각각 난독화하기 위해 2개의 난수들 'r' 및 's'를 선택한다. TC1(1300)은 "a * r" 및 "b * s"를 컴퓨팅하고 결과들을 변수들 'c' 및 'd'에 각각 할당한다. TC1(1300)은 이후 (c, d)를 클라우드 컴퓨터 2(CC2)(1310)에 송신한다. CC2(1310)는 곱 "e = c * d"를 컴퓨팅하고 클라우드 컴퓨터 3(CC3)(1320)으로부터의 블라인드를 요청한다. CC3(1320)은 랜덤 값들 'r' 및 's'에 관한 지식을 제공받고, 또한 최종 결과를 블라인드하기 위해 사용되는 제3 랜덤 값 'u'를 제공받는다. CC3(1320)은 "u / (r * s)"의 값을 컴퓨팅하고 그것을 변수 'h'에 할당하고, 이를 CC2(1310)에 송신한다. CC2(1310)는 CC3(1320)으로부터 값 'h'를 수신하고, "e * h"를 컴퓨팅하고, 결과를 변수 'f'에 할당하며, 이를 신뢰 컴퓨터 4(TC4)(1330)에 송신한다. TC4(1330)는 이후 "f / u"를 컴퓨팅함으로써 결과를 언블라인드하고, 연산을 완료한다. 따라서, TC들(1300 및 1330)은 입력 데이터('a' 및 'b') 및 출력 데이터('g')를 난독화하기 위한 키들로서, 3개의 난수들 'r', 's', 및 'u'를 사용하는 한편, 2개의 클라우드 컴퓨터들(1310 및 1320)은 실제 곱을 컴퓨팅한다. 어떤 클라우드 컴퓨터도 입력 또는 출력 데이터를 알지 못한다.
연산 코드 대체는 실제 연산 코드들에 대해 랜덤 연산 코드들을 대체하는 것을 수반하며, 파쇄본의 정적 분해(static disassembly)를 막는다. 연산 코드들을 포함하는 일련의 연산들로 나뉘는 프로그램에 대해, 프로그램 연산 코드들을 연산 코드들의 랜덤 순열에 매핑하는 대체 맵(substitution map)이 생성될 수 있다. 대체 맵은 이후 일련의 연산 코드들을 연산 코드들의 랜덤 순열로 변환하기 위해 사용될 수 있고, 각각의 다른 컴퓨터들에 의한 해독화에서의 사용을 위해 원격 컴퓨터로 송신될 수 있다. 해독화는 대체 맵을 보유하는 원격 컴퓨터에서, 다른 컴퓨터로부터 대체 맵의 일부에 대응하는 인덱스를 수신하고, 원격 컴퓨터로부터 다른 컴퓨터에 대체 맵의 일부를 송신함으로써 수행될 수 있다. 다른 컴퓨터는 대체 맵의 일부에 대응하는 인덱스를 원격 컴퓨터에 송신할 수 있고, 원격 컴퓨터로부터 대체 맵의 일부를 수신할 수 있고, 대체 맵을 사용하여, 연산 코드들의 랜덤 순열을 원본의 일련의 연산 코드들로 변환할 수 있다는 것이 대칭적으로 보여질 수 있다.
실시예에서, 대체 맵을 사용한 연산 코드 대체는 자바 프로그램과 함께 사용될 수 있다. 자바 바이트코드들은 256개의 연산 코드들을 가지고 있고, 그 중 51개의 연산 코드들(범위 203 내지 253)은 정의되지 않는다. 원본의 256개의 연산 코드들을 연산 코드들의 랜덤 순열에 매핑하기 위해 대체 맵이 도입된다. 대체 맵은 원격 컴퓨터뿐만 아니라 파쇄본을 생성하는 컴퓨터에도 알려지나, 치환된(permutated) 연산 코드들을 사용하여 파쇄본을 실행하는 다른 컴퓨터에는 알려지지 않는다. 사용하지 않는 연산 코드 253은 GET MAP 명령어로서 난독화된 프로그램들에 의해 사용된다. GET MAP 명령어는 피연산자로서 32비트 인덱스를 취하고, 이는 파쇄본을 실행하는 다른 컴퓨터에 의해 원격 컴퓨터에 송신된다. 원격 컴퓨터는 그 특정 파쇄본을 위해 사용될 대체 맵을 포함하는 256바이트 결과를 반환한다. GET MAP 명령어는 파쇄본 내의 사용자 특정 횟수뿐만 아니라 파쇄본의 초반에 삽입된다. 보안을 위해, 동일한 맵을 사용하는 코드의 큰 섹션에 대한 통계 분석을 막기 위해 많은 수의 GET MAP 명령어들이 있어야 한다. 성능 최적화를 위해, 루프들 내에 적은 수의 GET MAP 명령어들이 있어야 한다.
함수 병합은 비관련 함수들(unrelated functions)을 단일 함수로 결합한다. 비관련 함수들 각각은 파라미터들을 가지고 있고 단일 함수 내에서 그들 각각의 동작들을 유지한다. 그러한 방식을 구현하기 위해, 단일 함수는 수행할 동작을 선택하기 위해 모든 비관련 함수들의 파라미터들과 부가적인 파라미터를 취한다. 비관련 함수들의 수가 크면, 그룹당 단일의 병합된 함수가 있도록 다소 관련있는 함수들(somewhat-related functions)의 그룹들이 병합될 수 있다.
또한 chenxification으로 알려진 제어 흐름 평면화는 함수를 무한 루프로 변환한다. 루프를 종료하기 위해, 원본 함수의 동작과 동일한 동작을 수행하는 스위치 문(switch statement)이 부가된다.
디코이 코드는 공격자가 분석할 필요가 있을 코드의 양을 증가시키기 위해 사용된다. 이는 디코이 코드를 컴퓨터 프로그램에 삽입함으로써 행해질 수 있다. 디코이 코드는 다수의 마이너 돌연변이들(minor mutations)을 갖는 컴퓨터 프로그램의 원본 코드를 포함할 수 있다. 마이너 돌연변이들은 정적으로 검출할 수 없는 에러들을 생성하고, 마이너 돌연변이들의 수는 사용자 지정(user-specified)일 수 있다. 디코이 코드는 불투명 프리디케이트 방식의 일부일 수 있다. 그러한 방식은, 셋업 및 실행하기는 쉽지만 분석하기는 어려운 프리디케이트인, 불투명 프리디케이트에 의존하는 타겟 문(target statement)을 만듦으로써 함수의 정적 분석을 막는다. 불투명 프리디케이트들은 어레이 에일리어싱(array aliasing)을 이용할 수 있고, 세 가지 유형의 프리디케이트들이 있다: 항상 참(always true), 항상 거짓(always false), 및 때로는 참(sometimes true). 항상 참 프리디케이트들은 "if" 브랜치에서 원본 코드를 실행하고 "else" 브랜치에서 디코이 코드를 실행한다. 항상 거짓 프리디케이트들은 "if" 브랜치에서 디코이 코드를 실행하고 "else" 브랜치에서 원본 코드를 실행한다. 때때로 참 프리디케이트들은 2개의 브랜치들 상에서 원본 코드 및 원본 코드의 난독화된 버전을 실행한다.
전술한 바와 같이, 도 14 내지 도 17은 Paillier 및 El Gamal 암호화를 사용하는 실시예들을 예시한다. 도 14 내지 도 17에서의 실시예들에 대해, 달리 언급되지 않는 한 후속하는 가정들이 적용된다. 공개키 'n'을 사용한 Paillier에서의 메시지 'm'의 암호화는 EP(m) = (n+1)m rn mod n2으로 정의되고, 여기서 'r'은 공개키 'n'보다 작고 'n'에 대하여 서로소(relatively prime)인 무작위의 0이 아닌 정수이다. 개인키 (b, u)를 사용한 Paillier에서의 암호 'c'의 복호화는 DP(c) = u ((cb mod n2 - 1) / n) mod n으로 정의된다. 공개키 (n, g, q, h)를 사용한 El Gamal에서의 메시지 'm'의 암호화는 EG(m) = (gr mod n, m hr mod n)으로 정의되고, 여기서 'r'은 'n'보다 작은 무작위의 0이 아닌 정수이다. 개인키 'x'를 사용한 El Gamal에서의 암호 (e, c)의 복호화는 DG(e, c) = eq - x c mod n으로 정의된다.
도 14는 Paillier 암호화에서 El Gamal 암호화로의 파쇄된 전이 암호화 함수의 실시예를 도시한다. Paillier로부터의 암호문 'c'의 복호화 및 El Gamal로의 암호화는 다음과 같이 정의된다:
Figure 112018027165307-pct00002
함수 "PG(c)"는 후속하는 프로세스를 사용하여 "PG1(c)", "PG2(a, c)", 및 "PG3(w)"로 파쇄될 수 있다. 값들 b1 및 b2는 b1과 b2의 합이 b와 같도록(b1 + b2 = b) 무작위로 선택된다. 값들 u1 및 u2는 u1과 u2의 곱이 u mod n과 같도록(u1 * u2 = u mod n) 무작위로 선택된다. 함수들은 다음과 같이 정의된다:
Figure 112018027165307-pct00003
함수들을 결합하면 함수 "PG_shred(c)"가 산출된다:
Figure 112018027165307-pct00004
도 14에서, 신뢰 컴퓨터 1(TC1)(1400)은 메시지 'm'을 공개키 'pk'를 사용하여 Paillier 암호문 'c'로 암호화한 다음, 클라우드 컴퓨터 2(CC2)(1410)에 송신한다. CC2(1410)는 "PG1(c)"를 계산하고 결과를 'a'에 할당한 다음 'a' 및 'c'를 클라우드 컴퓨터 3(CC3)(1420)에 송신한다. CC3(1420)은 "PG2(a, c)"를 계산하고 결과를 (v, w)에 할당한 다음, CC2(1410)에 다시 송신한다. CC2(1410)는 "PG3(w)"를 계산하고 결과를 'z'에 할당한 다음, (v, z)를 신뢰 컴퓨터 4(TC4)(1430)에 송신한다. TC4(1430)는 이제 El Gamal 암호화에서, 암호문 (v, z)를 수신하고, 메시지 'm'을 밝히기 위해 비밀키 'sk'를 사용하여 그것을 복호화한다. CC2(1410) 및 CC3(1420) 중 어느 것도 무작위로 선택된 값들 'b1', 'b2', 'u1' 및 'u2'를 모두 알지 못한다. 도 14에서, 공개키 'pk'는 'n'을 대체할 것이고, 비밀키 'sk'는 'x'를 대체할 것이다.
도 15는 El Gamal에서 Paillier로의 파쇄된 전이 암호화 함수의 실시예를 도시한다. El Gamal로부터의 암호문 (e, c)의 복호화 및 Paillier로의 암호화는 다음과 같이 정의된다:
Figure 112018027165307-pct00005
함수 "GP(e,c)"는 후속하는 프로세스를 사용하여 "GP1(e)", "GP2(f)", 및 "GP3(v, c)"으로 파쇄될 수 있다. 값들 'x1' 및 'x2'는 'x1'과 'x2'의 곱이 "q - x"와 같도록(x1 * x2 = q - x) 무작위로 선택된다. 함수들은 다음과 같이 정의된다:
Figure 112018027165307-pct00006
함수들을 결합하면 함수 "GP_shred(e, c)"가 산출된다:
Figure 112018027165307-pct00007
도 15에서, 신뢰 컴퓨터 1(TC1)(1500)은 메시지 'm'을 공개키 'pk'를 사용하여 El Gamal 암호문 (e, c)로 암호화한 다음, 클라우드 컴퓨터 2(CC2)(1510)에 송신한다. CC2(1510)는 "GP1(e)"를 계산하고 결과를 'f'에 할당한 다음 'f'를 클라우드 컴퓨터 3(CC3)(1520)에 송신한다. CC3(1520)은 "GP2(f)"를 계산하고 결과를 'v'에 할당한 다음, CC2(1510)에 다시 송신한다. CC2(1510)는 "GP3(v, c)"를 계산하고 결과를 'z'에 할당한 다음, 'z'를 신뢰 컴퓨터 4(TC4)(1530)에 송신한다. TC4(1530)는 이제 Paillier 암호화에서, 암호문 'z'를 수신하고, 메시지 'm'을 밝히기 위해 그것을 비밀키 'sk'를 사용하여 복호화한다. CC2(1510) 및 CC3(1520) 중 어느 것도 무작위로 선택된 값들 'x1' 및 'x2'를 모두 알지 못한다. 도 15에서, 공개키 'pk'는 (n, g, q, h)를 대체할 것이고, 비밀키 'sk'는 (b, u)를 대체할 것이다.
도 16은 Paillier 암호화를 사용하는 파쇄된 비교 함수의 실시예를 도시한다. 2개의 정수들(둘 모두는 n/2보다 작고, 여기서 n은 공개키임)이 Paillier 방식에서 암호화되고, 이들 간의 순서 비교가 다음과 같이 정의될 수 있다:
Figure 112018027165307-pct00008
여기서 "EQ"는 "c1 = c2"를 의미하고, "GT"는 "c1 > c2"를 의미하고, "LT"는 "c1 < c2"를 의미한다. 'c'는 'c1'과 'c2' 간의 암호화된 차이이고 'd'는 'c1'과 'c2' 간의 복호화된 차이인 것에 유의하라. 함수 "CP(c1, c2)"는 후속하는 프로세스를 사용하여 "CP1(c1, c2)", "CP2(a, c)", 및 "CP3(b)"로 파쇄될 수 있다. 값들 b1 및 b2는 b1과 b2의 합이 b와 같도록(b1 + b2 = b) 무작위로 선택된다. 값들 u1 및 u2는 u1과 u2의 곱이 u mod n과 같도록(u1 * u2 = u mod n) 무작위로 선택된다. 함수들은 다음과 같이 정의된다:
Figure 112018027165307-pct00009
Figure 112018027165307-pct00010
함수들을 결합하면 함수 "CP_shred(c1, c2)"가 산출된다:
Figure 112018027165307-pct00011
도 16에서, 신뢰 컴퓨터 1(TC1)(1600)은 메시지 'm1'을 공개키 'pk'를 사용하여 Paillier 암호문 'c1'로 암호화하고 메시지 'm2'를 공개키 'pk'를 사용하여 Paillier 암호문 'c2'로 암호화한다. TC1(1600)은 이후 (c1, c2)를 클라우드 컴퓨터 2(CC2)(1610)에 송신한다. CC2(1610)는 "CP1(c1, c2)"를 계산하고 결과를 (a, c)에 할당한 다음, (a, c)를 클라우드 컴퓨터 3(CC3)(1620)에 송신한다. CC3(1620)은 "CP2(a, c)"를 계산하고 결과를 'b'에 할당한 다음, 클라우드 컴퓨터 4(CC4)(1630)에 송신한다. CC4(1630)는 "CP3(b)"를 계산하고 결과를 'z'에 할당한 다음, 'z'를 CC2(1610)에 송신한다. CC2(1610)는 'z'를 수신하고, "EQ", "GT", 또는 "LT"를 판단하기 위해 조건문들(conditionals)을 수행하고, 이는 이후 추가 계산들을 위해 사용될 수 있다. 어떤 클라우드 컴퓨터도 무작위로 선택된 값들 'b1', 'b2', 'u1' 및 'u2'을 모두 알 수 없다. 도 16에서, 공개키 'pk'는 'n'을 대체할 것이다.
도 17은 El Gamal 암호화를 사용하는 파쇄된 비교 함수의 실시예를 도시한다. 2개의 정수들(둘 모두는 n/2보다 작고, 여기서 n은 공개키임)이 El Gamal 방식에서 암호화되고, 이들 간의 순서 비교가 다음과 같이 정의될 수 있다:
Figure 112018027165307-pct00012
여기서 "GP()"는 도 15에서 정의된 El Gamal-to-Paillier 전이 함수이고 "CP()"는 도 16에서 정의된 Paillier 비교 함수이다. 함수 "CG((e1, c1), (e2, c2))"는 다음과 같이 파쇄될 수 있다:
Figure 112018027165307-pct00013
도 17에서, 신뢰 컴퓨터 1(TC1)(1700)은 메시지 'm1'을 공개키 'pk'를 사용하여 El Gamal 암호문 (e1, c1)로 암호화하고 메시지 'm2'를 공개키 'pk'를 사용하여 El Gamal 암호문 (e2, c2)로 암호화한다. TC1(1700)은 이후 (e1, c1) 및 (e2, c2)를 클라우드 컴퓨터 2(CC2)(1710)에 송신한다. CC2(1710)는 "GP1(e1)"을 계산하고 결과를 'f1' 및 "GP1(e2)"에 할당하고 결과를 'f2'에 할당한 다음, 'f1' 및 'f2'를 클라우드 컴퓨터 3(CC3)(1720)에 송신한다. CC3(1720)은 "GP2(f1)"을 계산하고 결과를 'v1' 및 "GP2(f2)"에 할당하고 결과를 'v2'에 할당한 다음, 'v1' 및 'v2'를 CC2(1710)에 다시 송신한다. CC2(1710)은 "GP3(v1, c1)"를 계산하고 결과를 'p1' 및 "GP3(v2, c2)"에 할당하고 결과를 'p2'에 할당한다. CC2(1710)는 "CP1(p1, p2)"를 계산하고 결과를 (a, c)에 할당한 다음, (a, c)를 클라우드 컴퓨터 3(CC3)(1720)에 송신한다. CC3(1720)은 "CP2(a, c)"를 계산하고 결과를 'b'에 할당하며, 이를 클라우드 컴퓨터 4(CC4)(1730)에 송신한다. CC4(1730)는 "CP3(b)"를 계산하고 결과를 'z'에 할당한 다음, 'z'를 CC2(1710)에 송신한다. CC2(1710)는 'z'를 수신하고 "EQ", "GT", 또는 "LT"를 결정하기 위해 조건문들을 수행하며, 이는 이후 추가 계산들을 위해 사용될 수 있다. 어떤 클라우드 컴퓨터도 무작위로 선택된 값들 모두를 알지 못한다. 도 17에서, 공개키 'pk'는 (n, g, q, h)를 대체할 것이다.
전술한 바와 같이, 수학 연산의 파쇄 및 난독화의 일부 실시예들은 연산을 곱셈적 난독화 방식으로부터 덧셈적 곱셈 방식으로 및 그와 반대로 전이하는 것을 필요로 할 수 있다. 도 18 및 도 19는 이들 전이 함수들의 두 예시적인 실시예들을 예시한다.
도 18은 곱셈적 난독화 방식으로부터 덧셈적 난독화 방식으로 전이하는 실시예를 예시한다. 이 예시적인 실시예에서, 프로그램은 난수 'r'을 사용한 'a'의 곱셈적 블라인드를 수행하지만, 난수 's'를 사용한 'a'의 덧셈적 블라인드를 필요로 한다. 전이 프로세스는 보안을 위해 파쇄된다. 먼저, 신뢰 컴퓨터 1(TC1)(1800) 및 신뢰 컴퓨터 5(TC5)(1840)는 'a'를 블라인드하기 위해, 2개의 난수들 'r' 및 's'를 선택한다. TC1(1800)은 "a * r"를 컴퓨팅하고 결과를 변수 'c'에 할당한 다음, 클라우드 컴퓨터 2(CC2)(1810)에 송신한다. CC2(1810)는 클라우드 컴퓨터 3(CC3)(1820)으로부터의 곱셈적에서 덧셈적으로의 블라인드(multiplicative to additive blinding)를 요청한다. CC3(1820)은 랜덤 값들 'r' 및 's'에 관한 지식을 제공받고, "r * s"를 컴퓨팅하고, 곱을 변수 'h'에 할당하고, 'h'를 CC2(1810)에 송신한다. CC2(1810)는 CC3(1820)으로부터 값 'h'를 수신하고, "c + h"를 컴퓨팅하며, 결과를 'e'에 할당하고, 이를 클라우드 컴퓨터 4(CC4)(1830)에 송신한다. CC4(1830)는 이후 "e / r"를 컴퓨팅함으로써 곱을 언블라인드하고, 이를 변수 'f'에 할당하고, 'f'를 TC5(1840)에 송신한다. 결국, TC5(1840)는 a의 덧셈적으로 블라인드된 값을 수신하고, 이는 "a + s"와 같다. 변수 'a'는 'f'에서 's'를 뺌으로써 복구될 수 있다.
도 19는 덧셈적 난독화 방식에서 곱셈적 난독화 방식으로 전이하는 실시예를 예시한다. 프로세스는 본질적으로 도 18에서 예시된 프로세스의 역 프로세스이다. 랜덤 시드들이 필요한 컴퓨터들보다 더 많은 컴퓨터들에 분산되는 것을 막기 위해, 화살표들은 도 18의 경로의 역 경로를 따른다는 것에 유의해야 한다. 이러한 방식으로 각각의 전이에 대해, TC들(1800, 1840, 1900, 및 1940) 및 CC3(1820 및 1920)만이 두 시드들을 알 것이고, CC2(1810 및 1910)는 어떠한 시드도 알지 못할 것이고, CC4(1830 및 1930)는 오직 곱셈적 시드만을 알 것이다.
도 19의 예시적인 실시예에서, 프로그램은 난수 's'를 사용한 'a'의 덧셈적 블라인드를 수행하지만, 난수 'r'을 사용한 'a'의 곱셈적 블라인드를 필요로 한다. 전이 프로세스는 보안을 위해 파쇄된다. 먼저, 신뢰 컴퓨터 1(TC1)(1900) 및 신뢰 컴퓨터 5(TC5)(1940)는 'a'를 블라인드하기 위해, 2개의 난수들 'r' 및 's'를 선택한다. TC5(1940)는 "a + s"를 컴퓨팅하고 결과를 변수 'c'에 할당한 다음, 이를 클라우드 컴퓨터 4(CC4)(1930)에 송신한다. CC4(1930)는 이후 "c * r"를 컴퓨팅함으로써 합을 블라인드하고, 이를 변수 'e'에 할당하며, 'e'를 클라우드 컴퓨터 2(CC2)(1910)에 송신한다. CC2(1910)는 클라우드 컴퓨터 3(CC3)(1920)으로부터의 덧셈적에서 곱셈적으로의 블라인드(additive to multiplicative blinding)를 요청한다. CC3(1920)은 랜덤 값들 'r' 및 's'의 지식을 제공받고, "r * s"를 컴퓨팅하고, 곱을 변수 'h'에 할당하고, 'h'를 CC2(1910)에 송신한다. CC2(1910)는 CC3(1920)으로부터 값 'h'를 수신하고, "e - h"를 컴퓨팅하고, 결과를 변수 'f'에 할당하고, 이를 TC1(1900)에 송신한다. 결국, TC1(1900)은 'a'의 곱셈적으로 블라인드된 값을 수신하고, 이는 "a * r"와 같다. 변수 'a'는 "f / r"를 컴퓨팅함으로써 복구될 수 있다.
도 18 및 도 19에 예시된 대로, 'a'의 플레인 값이 임의의 단일 클라우드 컴퓨터를 제어하는 공격자에 의해 컴퓨팅될 수 없게 하기 위해 하나의 블라인드 방식에서 또 다른 블라인드 방식으로의 변환의 파쇄가 사용된다. 파쇄된 변환 동안, 곱셈적 키 'r'은 CC4(1830 및 1930)에 노출되지만, 이 컴퓨터에서의 공격자는 'a'의 덧셈적으로 블라인드된 값만 본다. 유사하게, CC2(1810 및 1910)에서의 공격자는 'a'의 곱셈적으로 블라인드된 값을 보지만, 곱셈적 블라인드 키 'r'에 대한 액세스의 결핍이 'a'의 컴퓨팅을 방지한다. 두 키들 'r' 및 's'가 CC3(1820 및 1920)에 노출되지만, 이 컴퓨터는 오직 곱 "r * s"를 제공하고, CC3(1820 및 1920)에서의 공격자는 'a'의 덧셈적으로 블라인드된 값 및 곱셈적으로 블라인드된 값 중 어느 것도 보지 않는다.
상기 방법들 및 프로세스들(방법 I)은 개인 정보를 관찰하기 위해 실행 프로그램들, 메모리내 데이터(in-memory data), 및 디스크 상의 파일들을 기록 및 분석하는 단일의 다른 컴퓨터에 대한 루트 액세스(root access)를 갖는 공격자들(위협 수준 I)에 대하여 효과적이다. 그러나, 방법 I는 실행을 방해하기 위해 단일의 다른 컴퓨터 상의 실행 프로그램들, 메모리, 및 파일들을 수정할 수 있는 공격자(위협 수준 II)에 대하여는 효과적이지 않을 수 있다. 이를 처리하기 위해, 모든 파쇄본이 다수의 다른 컴퓨터들 상에서 실행되게 하기 위해 상기 방법들 및 프로세스들이 확장될 수 있다(방법 II). 다수의 다른 컴퓨터들로부터의 중간 데이터 결과들이 일관성을 위해 검사될 것이고, 불일치가 검출되면 컴퓨팅이 중단된다. 공격자가 특정 파쇄본을 실행하는 모든 다른 컴퓨터들에 대한 제어를 얻지 않는 한, 방법 II는 위협 수준 II에서의 공격자로부터의 공격을 막을 수 있다. 또한, 방법 I 및 방법 II 중 어느 것도 네트워크 내의 다른 컴퓨터들 모두를 제어하는 공격자(위협 수준 III)에 대하여는 효과적이지 않다. 단일 프로그램을 실행하기 위해 선택된 다른 컴퓨터들이 다수의 관리 도메인들 또는 다수의 상업적으로 구별되는 인프라 구조들을 포함하게 하기 위해 방법 II가 확장될 수 있다(방법 III). 예를 들어, Google, Amazon, 및/또는 Microsoft와 같은 상이한 퍼블릭 클라우드 제공자들(public cloud providers)로부터 다른 컴퓨터들이 선택될 수 있다. 공격자가 프로그램을 위해 선택된 도메인들 또는 인프라 구조들의 모두에 대한 제어를 얻지 못하는 한, 방법 III은 위협 수준 III에서의 공격자로부터의 공격들을 막을 수 있다.
상기 방법들 및 프로세스들에 의해 제공되는 프라이버시는 컴퓨팅 및 데이터의 파쇄에 기인한다. 난독화 및 암호화 연산들은 실행 레이턴시(execution latency)에 특정 오버헤드(overhead)를 더하지만, 성능 저하의 주 요인은 컴퓨터들 간의 네트워크의 통신 레이턴시 때문이다. 따라서, 관련된 다양한 컴퓨터들 사이에서 송신되는 메시지들의 크기뿐만 아니라 메시지들의 수를 최소화하는 것이 중요하다.
본 문서에서 인용되거나 설명되는 각각의 특허, 특허 출원, 및 공개 공보의 개시내용들은 본 명세서에 그 전문이 참조로 통합되어 있다.
본 기술분야의 통상의 기술자는 본 발명의 바람직한 실시예들에 대해 많은 변경들 및 수정들이 이루어질 수 있고 그러한 변경들 및 수정들이 본 발명의 사상으로부터 벗어나지 않으면서 이루어질 수 있다는 것을 이해할 것이다. 그러므로, 첨부된 청구범위는 본 발명의 진정한 사상 및 범위 내의 모든 변형 및 변경을 커버하는 것으로 의도된다.

Claims (121)

  1. 실행가능 컴퓨터 프로그램을 실행하기 위한 방법으로서,
    상기 컴퓨터 프로그램은 신뢰 컴퓨터(trusted computer)에 상주하고, 상기 신뢰 컴퓨터는 적어도 하나의 다른 컴퓨터에 연결되고, 상기 방법은:
    실행가능 컴퓨터 프로그램을 일련의 연산들(a series of operations)로 분할하는 단계 - 상기 연산들은 회로 게이트 연산들 또는 컴퓨터 산술 연산들을 포함하고, 상기 연산들 각각은 연산자, 제1 피연산자(operand), 및 제2 피연산자를 포함함 -;
    상기 제1 피연산자를 제1 랜덤 값으로 난독화하고 상기 제2 피연산자를 제2 랜덤 값으로 난독화함으로써 상기 일련의 연산들 중의 각각의 연산을 난독화(obfuscating)하는 단계;
    상기 실행가능 컴퓨터 프로그램의 원격 실행을 위해, 상기 난독화된 연산들을 수반 명령어들(accompanying instructions)과 함께 상기 적어도 하나의 다른 컴퓨터에 송신하는 단계를 포함하고, 상기 수반 명령어들은,
    상기 난독화된 연산들 각각의 각자의 결과를 컴퓨팅하고;
    상기 실행가능 컴퓨터 프로그램의 난독화된 컴퓨팅된 결과를 상기 신뢰 컴퓨터에 포워딩하도록 동작하며;
    상기 방법은,
    상기 신뢰 컴퓨터에서, 상기 실행가능 컴퓨터 프로그램의 상기 난독화된 컴퓨팅된 결과를 수신하는 단계; 및
    상기 실행가능 컴퓨터 프로그램의 상기 수신된 난독화된 컴퓨팅된 결과를 해독화(unobfuscating)하는 단계를 더 포함하는, 방법.
  2. 제1항에 있어서, 상기 연산들은 회로 게이트 연산들(circuit gate operations)이고, 상기 일련의 연산들 중의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신하는 단계는:
    상기 난독화된 피연산자들을 명령어들과 함께 제1 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    상기 난독화된 피연산자들을 사용하여 복수의 연산들의 복수의 결과들을 컴퓨팅하는 단계; 및
    상기 복수의 결과들을 제2 컴퓨터에 송신하는 단계
    를 포함함 -; 및
    명령어들을 상기 제2 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    상기 연산자, 상기 제1 랜덤 값 및 상기 제2 랜덤 값에 기초하여 상기 복수의 결과들 중의 결과를 선택하는 단계;
    상기 선택된 결과를 제3 랜덤 값으로 난독화하는 단계; 및
    상기 선택된 결과를 상이한 컴퓨터에 송신하는 단계
    를 포함함 -
    를 포함하는, 방법.
  3. 제1항에 있어서, 상기 연산들은 컴퓨터 산술 연산들이고, 상기 일련의 연산들 중의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신하는 단계는:
    상기 연산자 및 난독화된 피연산자들을 명령어들과 함께 제1 컴퓨터에 송신하는 단계
    를 포함하고, 상기 명령어들은,
    상기 연산자, 제1 난독화된 피연산자, 및 제2 난독화된 피연산자를 사용하여 연산의 제1 결과를 컴퓨팅하는 단계;
    제2 컴퓨터로부터 값을 수신하는 단계;
    상기 연산자, 상기 제1 결과, 및 상기 값을 사용하여 연산의 제2 결과를 컴퓨팅하는 단계; 및
    상기 제2 결과를 상이한 컴퓨터에 송신하는 단계
    를 포함하는, 방법.
  4. 제1항에 있어서, 상기 제1 피연산자의 난독화 방식은 상기 제2 피연산자의 난독화 방식과 일치하지 않는, 방법.
  5. 제4항에 있어서, 전이 난독화 함수(transition obfuscation function)는 제3 랜덤 값을 사용하여 상기 제1 피연산자의 난독화 방식을 상기 제2 피연산자의 난독화 방식으로 변환하기 위해 사용되는, 방법.
  6. 제5항에 있어서,
    상기 전이 난독화 함수를 일련의 연산들로 나누는 단계; 및
    상기 전이 난독화 함수의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신하는 단계 - 상기 수반 명령어들은 각각의 연산의 결과를 컴퓨팅하고, 상기 결과를 또 다른 컴퓨터에 포워딩하도록 동작함 -
    를 더 포함하는, 방법.
  7. 제6항에 있어서, 상기 전이 난독화 함수의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신하는 단계는:
    상기 제1 피연산자가 곱셈적으로(multiplicatively) 난독화된 경우:
    난독화된 피연산자를 명령어들과 함께 제1 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    제2 컴퓨터로부터 값을 수신하는 단계;
    제1 난독화된 피연산자 및 상기 값의 합을 컴퓨팅하는 단계; 및
    상기 합을 제3 컴퓨터에 송신하는 단계
    를 포함함 -; 및
    명령어들을 상기 제3 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    상기 합과 상기 제1 랜덤 값의 몫(quotient)을 컴퓨팅하는 단계; 및
    상기 몫을 상이한 컴퓨터에 송신하는 단계
    를 포함함 -
    를 포함하고;
    상기 제1 피연산자가 덧셈적으로(additively) 난독화된 경우:
    난독화된 피연산자를 명령어들과 함께 제3 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    상기 제1 난독화된 피연산자와 상기 제3 랜덤 값의 곱을 컴퓨팅하는 단계; 및
    상기 곱을 제1 컴퓨터에 송신하는 단계
    를 포함함 -; 및
    명령어들을 상기 제1 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    제2 컴퓨터로부터 값을 수신하는 단계;
    상기 곱과 상기 값 간의 차이를 컴퓨팅하는 단계; 및
    상기 차이를 상이한 컴퓨터에 송신하는 단계
    를 포함함 -
    를 포함하는, 방법.
  8. 제7항에 있어서, 상기 제2 컴퓨터로부터 수신되는 값은 상기 제1 랜덤 값과 상기 제3 랜덤 값의 곱인, 방법.
  9. 제1항에 있어서, 상기 난독화하는 단계는 코드 난독화, 데이터 난독화, 또는 둘 모두를 포함하는, 방법.
  10. 제1항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 클라우드의 일부인, 방법.
  11. 제10항에 있어서, 상기 클라우드는 비신뢰인, 방법.
  12. 제10항에 있어서, 상기 클라우드는 다수의 관리 도메인들(administrative domains)을 포괄하는, 방법.
  13. 제10항에 있어서, 상기 클라우드는 다수의 상업적으로 구별되는 인프라 구조들(commercially distinct infrastructures)을 포괄하는, 방법.
  14. 제1항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 엔터프라이즈 네트워크의 일부인, 방법.
  15. 제1항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 복수의 컴퓨터들 중에서 무작위로 선택되는, 방법.
  16. 제15항에 있어서, 상기 복수의 컴퓨터들 중의 각각의 컴퓨터는 비신뢰인, 방법.
  17. 제1항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 비신뢰인, 방법.
  18. 제1항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 신뢰 컴퓨터가 아닌, 방법.
  19. 제1항에 있어서, 상기 신뢰 컴퓨터는 하나 이상의 가상 머신을 포함하는, 방법.
  20. 제1항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 하나 이상의 가상 머신을 포함하는, 방법.
  21. 제1항에 있어서, 상기 다른 컴퓨터는 하나 이상의 가상 머신을 포함하는, 방법.
  22. 제1항에 있어서, 상기 일련의 연산들 중의 각각의 연산을 수반 명령어들과 함께 상기 적어도 하나의 다른 컴퓨터에 송신하는 단계는 각각의 연산을 컴퓨팅을 위해 다수의 컴퓨터들에 송신하는 단계를 포함하는, 방법.
  23. 시스템으로서,
    적어도 하나의 다른 컴퓨터에 통신가능하게 연결되는 적어도 하나의 신뢰 컴퓨터 - 상기 적어도 하나의 신뢰 컴퓨터 중의 제1 신뢰 컴퓨터는 실행 동안 상기 시스템이 연산들을 수행하는 것을 야기하는 저장된 컴퓨터 명령어들을 가짐 -
    를 포함하고, 상기 연산들은:
    실행가능 컴퓨터 프로그램을 일련의 연산들로 분할하는 단계 - 상기 연산들은 회로 게이트 연산들 또는 컴퓨터 산술 연산들을 포함하고, 상기 연산들 각각은 연산자, 제1 피연산자, 및 제2 피연산자를 포함하고, 상기 실행가능 컴퓨터 프로그램은 상기 제1 신뢰 컴퓨터 상에 있음 -;
    상기 제1 피연산자를 제1 랜덤 값으로 난독화하고 상기 제2 피연산자를 제2 랜덤 값으로 난독화함으로써 상기 일련의 연산들 중의 각각의 연산을 난독화하는 단계;
    상기 실행가능 컴퓨터 프로그램의 원격 실행을 위해, 상기 난독화된 연산들을 수반 명령어들과 함께 상기 적어도 하나의 다른 컴퓨터에 송신하는 단계 - 상기 수반 명령어들은,
    상기 난독화된 연산들 각각의 각자의 결과를 컴퓨팅하고;
    상기 실행가능 컴퓨터 프로그램의 난독화된 컴퓨팅된 결과를 상기 제1 신뢰 컴퓨터에 포워딩하도록 동작함 -;
    상기 제1 신뢰 컴퓨터에서, 상기 실행가능 컴퓨터 프로그램의 상기 난독화된 컴퓨팅된 결과를 수신하는 단계; 및
    상기 실행가능 컴퓨터 프로그램의 상기 수신된 난독화된 컴퓨팅된 결과를 해독화하는 단계를 포함하는, 시스템.
  24. 제23항에 있어서, 상기 일련의 연산들은 회로 게이트 연산들이고, 상기 일련의 연산들 중의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신하는 단계는:
    상기 난독화된 피연산자들을 명령어들과 함께 제1 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    상기 난독화된 피연산자들을 사용하여 복수의 연산들의 복수의 결과들을 컴퓨팅하는 단계; 및
    상기 복수의 결과들을 제2 컴퓨터에 송신하는 단계
    를 포함함 -; 및
    명령어들을 상기 제2 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    상기 연산자, 상기 제1 랜덤 값 및 상기 제2 랜덤 값에 기초하여 상기 복수의 결과들 중의 결과를 선택하는 단계;
    상기 선택된 결과를 제3 랜덤 값으로 난독화하는 단계; 및
    상기 선택된 결과를 상이한 컴퓨터에 송신하는 단계
    를 포함함 -
    를 포함하는, 시스템.
  25. 제23항에 있어서, 상기 일련의 연산들은 컴퓨터 산술 연산들인, 시스템.
  26. 제23항에 있어서, 상기 일련의 연산들 중의 각각의 연산은 하드웨어 유닛에 의해 수행되는 연산에 대응하는, 시스템.
  27. 제26항에 있어서, 상기 적어도 하나의 다른 컴퓨터 상에 정수 가산기(integer adder)를 더 포함하는, 시스템.
  28. 제26항에 있어서, 상기 적어도 하나의 다른 컴퓨터 상에 정수 승산기(integer multiplier)를 더 포함하는, 시스템.
  29. 제26항에 있어서, 상기 적어도 하나의 다른 컴퓨터 상에 정수 비교기를 더 포함하는, 시스템.
  30. 제26항에 있어서, 상기 적어도 하나의 다른 컴퓨터 상에 부동 소수점 승산기(floating point multiplier)를 더 포함하는, 시스템.
  31. 제25항에 있어서, 상기 일련의 연산들 중의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신하는 단계는:
    상기 연산자 및 난독화된 피연산자들을 명령어들과 함께 제1 컴퓨터에 송신하는 단계
    를 포함하고, 상기 명령어들은,
    상기 연산자, 제1 난독화된 피연산자, 및 제2 난독화된 피연산자를 사용하여 연산의 제1 결과를 컴퓨팅하는 단계;
    제2 컴퓨터로부터 값을 수신하는 단계;
    상기 연산자, 상기 제1 결과, 및 상기 값을 사용하여 연산의 제2 결과를 컴퓨팅하는 단계; 및
    상기 제2 결과를 상이한 컴퓨터에 송신하는 단계
    를 포함하는, 시스템.
  32. 제23항에 있어서, 상기 제1 피연산자의 난독화 방식은 상기 제2 피연산자의 난독화 방식과 일치하지 않는, 시스템.
  33. 제32항에 있어서, 전이 난독화 함수는 제3 랜덤 값을 사용하여 상기 제1 피연산자의 난독화 방식을 상기 제2 피연산자의 난독화 방식으로 변환하기 위해 사용되는, 시스템.
  34. 제33항에 있어서, 상기 적어도 하나의 신뢰 컴퓨터는 실행 동안 상기 시스템이 연산들을 수행하는 것을 야기하는 저장된 컴퓨터 명령어들을 갖고, 상기 연산들은:
    상기 전이 난독화 함수를 일련의 연산들로 나누는 단계; 및
    상기 전이 난독화 함수의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신하는 단계 - 상기 수반 명령어들은 각각의 연산의 결과를 컴퓨팅하고, 상기 결과를 또 다른 컴퓨터에 포워딩하도록 동작함 -
    를 더 포함하는, 시스템.
  35. 제34항에 있어서, 상기 전이 난독화 함수의 각각의 연산을 수반 명령어들과 함께 적어도 하나의 다른 컴퓨터에 송신하는 단계는:
    상기 제1 피연산자가 곱셈적으로 난독화된 경우:
    난독화된 피연산자를 명령어들과 함께 제1 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    제2 컴퓨터로부터 값을 수신하는 단계;
    제1 난독화된 피연산자 및 상기 값의 합을 컴퓨팅하는 단계; 및
    상기 합을 제3 컴퓨터에 송신하는 단계
    를 포함함 -; 및
    명령어들을 상기 제3 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    상기 합과 상기 제1 랜덤 값의 몫을 컴퓨팅하는 단계; 및
    상기 몫을 상이한 컴퓨터에 송신하는 단계
    를 포함함 -
    를 포함하고;
    상기 제1 피연산자가 덧셈적으로 난독화된 경우:
    난독화된 피연산자를 명령어들과 함께 제3 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    상기 제1 난독화된 피연산자와 상기 제3 랜덤 값의 곱을 컴퓨팅하는 단계; 및
    상기 곱을 제1 컴퓨터에 송신하는 단계
    를 포함함 -; 및
    명령어들을 상기 제1 컴퓨터에 송신하는 단계 - 상기 명령어들은,
    제2 컴퓨터로부터 값을 수신하는 단계;
    상기 곱과 상기 값 간의 차이를 컴퓨팅하는 단계; 및
    상기 차이를 상이한 컴퓨터에 송신하는 단계
    를 포함함 -
    를 포함하는, 시스템.
  36. 제35항에 있어서, 상기 제2 컴퓨터로부터 수신되는 값은 상기 제1 랜덤 값과 상기 제3 랜덤 값의 곱인, 시스템.
  37. 제23항에 있어서, 상기 난독화하는 단계는 코드 난독화, 데이터 난독화, 또는 둘 모두를 포함하는, 시스템.
  38. 제23항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 클라우드의 일부인, 시스템.
  39. 제38항에 있어서, 상기 클라우드는 비신뢰인, 시스템.
  40. 제38항에 있어서, 상기 클라우드는 다수의 관리 도메인들을 포괄하는, 시스템.
  41. 제38항에 있어서, 상기 클라우드는 다수의 상업적으로 구별되는 인프라 구조들을 포괄하는, 시스템.
  42. 제23항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 엔터프라이즈 네트워크의 일부인, 시스템.
  43. 제23항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 복수의 컴퓨터들 중에서 무작위로 선택되는, 시스템.
  44. 제43항에 있어서, 상기 복수의 컴퓨터들 중의 각각의 컴퓨터는 비신뢰인, 시스템.
  45. 제23항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 비신뢰인, 시스템.
  46. 제23항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 신뢰 컴퓨터가 아닌, 시스템.
  47. 제23항에 있어서, 상기 신뢰 컴퓨터는 하나 이상의 가상 머신을 포함하는, 시스템.
  48. 제23항에 있어서, 상기 적어도 하나의 다른 컴퓨터는 하나 이상의 가상 머신을 포함하는, 시스템.
  49. 제23항에 있어서, 상기 다른 컴퓨터는 하나 이상의 가상 머신을 포함하는, 시스템.
  50. 제23항에 있어서, 상기 일련의 연산들 중의 각각의 연산을 수반 명령어들과 함께 상기 적어도 하나의 다른 컴퓨터에 송신하는 단계는 각각의 연산을 컴퓨팅을 위해 다수의 컴퓨터들에 송신하는 단계를 포함하는, 시스템.
  51. 삭제
  52. 삭제
  53. 삭제
  54. 삭제
  55. 삭제
  56. 삭제
  57. 삭제
  58. 삭제
  59. 삭제
  60. 삭제
  61. 삭제
  62. 삭제
  63. 삭제
  64. 삭제
  65. 삭제
  66. 삭제
  67. 삭제
  68. 삭제
  69. 삭제
  70. 삭제
  71. 삭제
  72. 삭제
  73. 삭제
  74. 삭제
  75. 삭제
  76. 삭제
  77. 삭제
  78. 삭제
  79. 삭제
  80. 삭제
  81. 삭제
  82. 삭제
  83. 삭제
  84. 삭제
  85. 삭제
  86. 삭제
  87. 삭제
  88. 삭제
  89. 삭제
  90. 삭제
  91. 삭제
  92. 삭제
  93. 삭제
  94. 삭제
  95. 삭제
  96. 삭제
  97. 삭제
  98. 삭제
  99. 삭제
  100. 삭제
  101. 삭제
  102. 삭제
  103. 삭제
  104. 삭제
  105. 삭제
  106. 삭제
  107. 삭제
  108. 삭제
  109. 삭제
  110. 삭제
  111. 삭제
  112. 삭제
  113. 삭제
  114. 삭제
  115. 삭제
  116. 삭제
  117. 삭제
  118. 삭제
  119. 삭제
  120. 삭제
  121. 삭제
KR1020187005125A 2015-07-21 2016-07-20 비신뢰 컴퓨터들 상에서 프라이빗 프로그램을 실행하기 위한 시스템 및 프로세스 KR102315831B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/804,713 US10110566B2 (en) 2015-07-21 2015-07-21 Systems and processes for executing private programs on untrusted computers
US14/804,713 2015-07-21
PCT/US2016/043117 WO2017015357A1 (en) 2015-07-21 2016-07-20 Systems and processes for executing private programs on untrusted computers

Publications (2)

Publication Number Publication Date
KR20180084732A KR20180084732A (ko) 2018-07-25
KR102315831B1 true KR102315831B1 (ko) 2021-10-22

Family

ID=57834671

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187005125A KR102315831B1 (ko) 2015-07-21 2016-07-20 비신뢰 컴퓨터들 상에서 프라이빗 프로그램을 실행하기 위한 시스템 및 프로세스

Country Status (10)

Country Link
US (2) US10110566B2 (ko)
EP (1) EP3326345B1 (ko)
JP (1) JP6880017B2 (ko)
KR (1) KR102315831B1 (ko)
CN (1) CN108476198B (ko)
AU (1) AU2016297559B2 (ko)
CA (1) CA2998323C (ko)
DK (1) DK3326345T3 (ko)
IL (1) IL257040B (ko)
WO (1) WO2017015357A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10348503B2 (en) * 2016-12-12 2019-07-09 Sap Portals Israel Ltd. Client side actions validation
SG11202004674VA (en) * 2017-12-18 2020-06-29 University Of Central Florida Research Foundation Inc Techniques for securely executing code that operates on encrypted data on a public computer
US11232224B2 (en) 2018-03-15 2022-01-25 Servicenow, Inc. Database encryption
CN109446828B (zh) * 2018-11-07 2020-10-13 北京邮电大学 一种安全多方计算方法及装置
US11042634B2 (en) * 2018-12-21 2021-06-22 Fujitsu Limited Determining information leakage of computer-readable programs
WO2020240246A1 (en) * 2019-05-29 2020-12-03 Commissariat A L 'energie Atomique Et Aux Energies Alternatives A computer-implemented method for obfuscating a program code
US11973743B2 (en) 2019-12-13 2024-04-30 TripleBlind, Inc. Systems and methods for providing a systemic error in artificial intelligence algorithms
US11431688B2 (en) 2019-12-13 2022-08-30 TripleBlind, Inc. Systems and methods for providing a modified loss function in federated-split learning
US10924460B2 (en) * 2019-12-13 2021-02-16 TripleBlind, Inc. Systems and methods for dividing filters in neural networks for private data computations
US11853793B2 (en) 2020-10-09 2023-12-26 Samsung Electronics Co., Ltd. Methods and system for on-device AI model parameter run-time protection
EP4050471A1 (en) * 2021-02-26 2022-08-31 Zama SAS Encrypted scalar multiplication
WO2023007633A1 (ja) * 2021-07-28 2023-02-02 富士通株式会社 制御方法、制御プログラム、ノード、およびシステム
US20240004998A1 (en) * 2022-07-01 2024-01-04 Nxp B.V. Method for protecting a machine learning model from a side channel attack

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060259744A1 (en) 2005-05-11 2006-11-16 Wolfgang Matthes Method for information processing
US20120185946A1 (en) 2011-01-14 2012-07-19 Microsoft Corporation Secure computing in multi-tenant data centers

Family Cites Families (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6067620A (en) * 1996-07-30 2000-05-23 Holden; James M. Stand alone security device for computer networks
US6477648B1 (en) * 1997-03-23 2002-11-05 Novell, Inc. Trusted workstation in a networked client/server computing system
US6957341B2 (en) * 1998-05-14 2005-10-18 Purdue Research Foundation Method and system for secure computational outsourcing and disguise
US7430670B1 (en) 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
AU2001243365A1 (en) * 2000-03-02 2001-09-12 Alarity Corporation System and method for process protection
US7343619B2 (en) * 2002-03-16 2008-03-11 Trustedflow Systems, Inc. Trusted flow and operation control method
US7363620B2 (en) * 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US7353499B2 (en) * 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US8220058B2 (en) * 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
CN101491000B (zh) * 2006-07-12 2011-12-28 耶德托公司 用于混淆密码函数的方法和系统
US20090249492A1 (en) * 2006-09-21 2009-10-01 Hans Martin Boesgaard Sorensen Fabrication of computer executable program files from source code
US9411976B2 (en) * 2006-12-01 2016-08-09 Maidsafe Foundation Communication system and method
US9124650B2 (en) 2006-12-13 2015-09-01 Quickplay Media Inc. Digital rights management in a mobile environment
US8538012B2 (en) * 2007-03-14 2013-09-17 Intel Corporation Performing AES encryption or decryption in multiple modes with a single instruction
US8312518B1 (en) * 2007-09-27 2012-11-13 Avaya Inc. Island of trust in a service-oriented environment
US8762736B1 (en) * 2008-04-04 2014-06-24 Massachusetts Institute Of Technology One-time programs
US8209744B2 (en) * 2008-05-16 2012-06-26 Microsoft Corporation Mobile device assisted secure computer network communication
US8171306B2 (en) * 2008-11-05 2012-05-01 Microsoft Corporation Universal secure token for obfuscation and tamper resistance
WO2011037665A2 (en) * 2009-08-04 2011-03-31 Carnegie Mellon University Methods and apparatuses for user-verifiable trusted path in the presence of malware
US8347398B1 (en) * 2009-09-23 2013-01-01 Savvystuff Property Trust Selected text obfuscation and encryption in a local, network and cloud computing environment
US20110202765A1 (en) * 2010-02-17 2011-08-18 Microsoft Corporation Securely move virtual machines between host servers
US9703586B2 (en) * 2010-02-17 2017-07-11 Microsoft Technology Licensing, Llc Distribution control and tracking mechanism of virtual machine appliances
US8862895B2 (en) * 2010-04-27 2014-10-14 Fuji Xerox Co., Ltd. Systems and methods for communication, storage, retrieval, and computation of simple statistics and logical operations on encrypted data
US20110296164A1 (en) * 2010-05-28 2011-12-01 Mcafee, Inc. System and method for providing secure network services
WO2011150346A2 (en) * 2010-05-28 2011-12-01 Laurich Lawrence A Accelerator system for use with secure data storage
US9165137B2 (en) * 2010-08-18 2015-10-20 Security First Corp. Systems and methods for securing virtual machine computing environments
US8681973B2 (en) * 2010-09-15 2014-03-25 At&T Intellectual Property I, L.P. Methods, systems, and computer program products for performing homomorphic encryption and decryption on individual operations
US20120084562A1 (en) * 2010-10-04 2012-04-05 Ralph Rabert Farina Methods and systems for updating a secure boot device using cryptographically secured communications across unsecured networks
US8762964B2 (en) 2010-12-17 2014-06-24 Cisco Technology, Inc. Optimizing symbol manipulation language-based executable applications for distributed execution
US9647989B2 (en) 2011-04-27 2017-05-09 Symantec Corporation System and method of data interception and conversion in a proxy
US9077525B2 (en) * 2011-06-24 2015-07-07 Microsoft Technology Licensing, Llc User-controlled data encryption with obfuscated policy
US9203621B2 (en) * 2011-07-11 2015-12-01 Hewlett-Packard Development Company, L.P. Policy-based data management
US20130019092A1 (en) * 2011-07-14 2013-01-17 Barracuda Inc. System to Embed Enhanced Security / Privacy Functions Into a User Client
GB2497070B (en) * 2011-11-17 2015-11-25 Advanced Risc Mach Ltd Cryptographic support instructions
JP2015503280A (ja) * 2011-11-28 2015-01-29 ポルティコア エルティディ. 仮想化とクラウド・コンピューティングの安全確保と管理に適用される、安全未確保のコンピュータ環境で暗号化キーを確保する方法と装置。
US9208319B2 (en) * 2011-12-15 2015-12-08 Microsoft Technology Licensing, Llc Code base partitioning system
US8615656B2 (en) * 2012-01-09 2013-12-24 The Mitre Corporation Secure remote peripheral encryption tunnel
RU2620712C2 (ru) * 2012-01-09 2017-05-29 Конинклейке Филипс Н.В. Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
US9454666B2 (en) * 2012-03-26 2016-09-27 Irdeto B.V. Method for protecting data
EP2645618A1 (en) * 2012-03-30 2013-10-02 British Telecommunications Public Limited Company Method and system for network data access
EP2672673B1 (en) * 2012-06-07 2016-05-25 Alcatel Lucent Apparatus and method for secure data processing
EP2672672A1 (en) * 2012-06-07 2013-12-11 Alcatel-Lucent Secure data processing
US8656482B1 (en) * 2012-08-20 2014-02-18 Bitdefender IPR Management Ltd. Secure communication using a trusted virtual machine
US20140195804A1 (en) * 2012-10-12 2014-07-10 Safelylocked, Llc Techniques for secure data exchange
US9176838B2 (en) * 2012-10-19 2015-11-03 Intel Corporation Encrypted data inspection in a network environment
GB2508894A (en) * 2012-12-14 2014-06-18 Ibm Preventing a trusted boot device from being booted in a virtual machine
US9535715B2 (en) * 2012-12-14 2017-01-03 Microsoft Technology Licensing, Llc Booting from a trusted network image
US8909967B1 (en) * 2012-12-31 2014-12-09 Emc Corporation Technique for secure computation
US10063380B2 (en) * 2013-01-22 2018-08-28 Amazon Technologies, Inc. Secure interface for invoking privileged operations
US9503268B2 (en) * 2013-01-22 2016-11-22 Amazon Technologies, Inc. Securing results of privileged computing operations
US9055038B1 (en) * 2013-02-04 2015-06-09 Stealth Software Technologies, Inc. Apparatus, system, and method to garble programs
US9141823B2 (en) * 2013-03-15 2015-09-22 Veridicom, Sa De Cv Abstraction layer for default encryption with orthogonal encryption logic session object; and automated authentication, with a method for online litigation
US9104862B2 (en) * 2013-04-01 2015-08-11 Uniquesoft, Llc Secure computing device using new software versions
US10275593B2 (en) * 2013-04-01 2019-04-30 Uniquesoft, Llc Secure computing device using different central processing resources
US9361456B2 (en) * 2013-04-01 2016-06-07 Uniquesoft, Llc Secure computing device using a library of programs
US9424421B2 (en) 2013-05-03 2016-08-23 Visa International Service Association Security engine for a secure operating environment
US9558358B2 (en) * 2013-06-27 2017-01-31 Visa International Service Association Random number generator in a virtualized environment
CN105408913B (zh) * 2013-08-21 2019-03-15 英特尔公司 在云中隐私地处理数据
CN103559458B (zh) * 2013-10-09 2016-08-17 广州华迅网络科技有限公司 数据散列获取方法及其系统
US9235692B2 (en) * 2013-12-13 2016-01-12 International Business Machines Corporation Secure application debugging
EP3860041B1 (en) * 2014-06-18 2023-03-15 Visa International Service Association Efficient methods for authenticated communication
US9813245B2 (en) * 2014-08-29 2017-11-07 Visa International Service Association Methods for secure cryptogram generation
US9584517B1 (en) * 2014-09-03 2017-02-28 Amazon Technologies, Inc. Transforms within secure execution environments
CN104243166A (zh) * 2014-09-05 2014-12-24 深圳市中兴移动通信有限公司 录音加密方法和装置
US9735968B2 (en) * 2014-10-20 2017-08-15 Microsoft Technology Licensing, Llc Trust service for a client device
EP3234782A4 (en) * 2014-12-16 2018-10-17 Kyndi, Inc. Method and apparatus for randomizing computer instruction sets, memory registers and pointers
CN107251476A (zh) * 2015-02-13 2017-10-13 维萨国际服务协会 保密通信管理
US9596263B1 (en) * 2015-02-23 2017-03-14 Amazon Technolgies, Inc. Obfuscation and de-obfuscation of identifiers
US10484168B2 (en) * 2015-03-02 2019-11-19 Dell Products L.P. Methods and systems for obfuscating data and computations defined in a secure distributed transaction ledger
US9712503B1 (en) * 2015-03-23 2017-07-18 Amazon Technologies, Inc. Computing instance migration
US20160294794A1 (en) * 2015-04-04 2016-10-06 Aleksandar Mancic Security System For Data Communications Including Key Management And Privacy
EP3284003B1 (en) * 2015-04-14 2021-02-24 Gigavation, Inc. Paravirtualized security threat protection of a computer-driven system with networked devices
SG11201804478VA (en) * 2015-05-19 2018-06-28 Cryptomove Inc Security via data concealment
US20180089415A1 (en) * 2015-06-11 2018-03-29 International Business Machines Corporation User trusted device for detecting a virtualized environment
US9667606B2 (en) * 2015-07-01 2017-05-30 Cyphermatrix, Inc. Systems, methods and computer readable medium to implement secured computational infrastructure for cloud and data center environments

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060259744A1 (en) 2005-05-11 2006-11-16 Wolfgang Matthes Method for information processing
US20120185946A1 (en) 2011-01-14 2012-07-19 Microsoft Corporation Secure computing in multi-tenant data centers

Also Published As

Publication number Publication date
EP3326345A4 (en) 2019-03-27
CA2998323A1 (en) 2017-01-26
US20170026342A1 (en) 2017-01-26
US10110566B2 (en) 2018-10-23
DK3326345T3 (da) 2021-10-11
CN108476198B (zh) 2020-09-22
IL257040A (en) 2018-03-29
CA2998323C (en) 2022-06-07
EP3326345A1 (en) 2018-05-30
EP3326345B1 (en) 2021-10-06
JP6880017B2 (ja) 2021-06-02
AU2016297559B2 (en) 2020-09-03
IL257040B (en) 2020-02-27
JP2018522291A (ja) 2018-08-09
KR20180084732A (ko) 2018-07-25
CN108476198A (zh) 2018-08-31
AU2016297559A1 (en) 2018-03-15
WO2017015357A1 (en) 2017-01-26
US20190044915A1 (en) 2019-02-07
US10652216B2 (en) 2020-05-12

Similar Documents

Publication Publication Date Title
KR102315831B1 (ko) 비신뢰 컴퓨터들 상에서 프라이빗 프로그램을 실행하기 위한 시스템 및 프로세스
KR101669157B1 (ko) 데이터 보호장치 및 그 방법
US10367637B2 (en) Modular exponentiation with transparent side channel attack countermeasures
Kounavis et al. Encrypting the internet
Tsoutsos et al. The HEROIC framework: Encrypted computation without shared keys
US20150215117A1 (en) White box encryption apparatus and method
EP3698262B1 (en) Protecting modular inversion operation from external monitoring attacks
US20230239144A1 (en) Deterministic chaos-based quantum computer resistant data encryption for large scale wide area network solutions
WO2018043049A1 (ja) 暗号システム、暗号方法及び暗号プログラム
CN113326518A (zh) 一种数据处理方法及装置
KR100480998B1 (ko) 디지털 하드웨어 시스템 보안 장치 및 방법
CN111181906B (zh) 一种数据共享方法、装置、设备、系统及存储介质
CN110750326B (zh) 一种虚拟机的磁盘加解密方法以及系统
US11496287B2 (en) Privacy preserving fully homomorphic encryption with circuit verification
CN114124366A (zh) 一种可信芯片的密钥生成方法及相关设备
Muhammed et al. Comparative Analysis of AES, Blowfish, Twofish, Salsa20, and ChaCha20 for Image Encryption
Elrabaa et al. A protection and pay-per-use licensing scheme for on-cloud FPGA circuit IPs
Pal et al. Secured Information Transfer Power by Modified and Optimized RSA Cryptosystem
JP2009182375A (ja) 分散情報生成装置、秘密情報復元装置、分散情報生成方法、秘密情報復元方法およびプログラム
EP3010172A1 (en) System enabling licensed processing of encrypted information
Sudha et al. ES-MPICH2: Message passing interface with enhanced key agreement
Karstens Deniable Encryption
Kariapper Cryptography in the Cloud: Securing Data in Cloud with Encryption
KR20140119837A (ko) 인터넷서비스 등에 응용가능한 패턴암호와 이 암호를 이용한 시스템과 비즈니스방법

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right