KR20160113254A - 보안 영역의 호출을 위한 객체 지향 마샬링 기법 - Google Patents

보안 영역의 호출을 위한 객체 지향 마샬링 기법 Download PDF

Info

Publication number
KR20160113254A
KR20160113254A KR1020167023359A KR20167023359A KR20160113254A KR 20160113254 A KR20160113254 A KR 20160113254A KR 1020167023359 A KR1020167023359 A KR 1020167023359A KR 20167023359 A KR20167023359 A KR 20167023359A KR 20160113254 A KR20160113254 A KR 20160113254A
Authority
KR
South Korea
Prior art keywords
enclave
proxy
bridge
host application
interface
Prior art date
Application number
KR1020167023359A
Other languages
English (en)
Other versions
KR101833341B1 (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 KR20160113254A publication Critical patent/KR20160113254A/ko
Application granted granted Critical
Publication of KR101833341B1 publication Critical patent/KR101833341B1/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/60Protecting data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

시스템이 개시되고, 호스트 애플리케이션의 실행 시간에 호스트 애플리케이션 내의 엔클레이브 초기화 코드를 자동으로 실행하기 위한 프로세서를 포함한다. 엔클레이브 초기화 코드는 호스트 애플리케이션으로부터 분리된 보안 엔클레이브를 생성하기 위한 마샬링 코드를 포함한다. 마샬링 코드는 호스트 애플리케이션의 빌드 시간에 생성된다. 시스템은 또한 보안 엔클레이브를 저장하기 위한 전용 동적 랜덤 액세스 메모리(DRAM) 부분을 포함하는 DRAM을 포함한다. 다른 실시예가 설명되고 청구된다.

Description

보안 영역의 호출을 위한 객체 지향 마샬링 기법{OBJECT ORIENTED MARSHALING SCHEME FOR CALLS TO A SECURE REGION}
실시예는 보안 영역의 호출을 위한 객체 지향 마샬링에 관한 것이다.
보안 엔클레이브(secure enclave: SE)의 설정은 애플리케이션이 기밀 데이터를 처리하기 위한 안전하고 격리된 실행 환경(엔클레이브)을 제공하기 위한 기술이다. 엔클레이브는 그의 격리로 인해 단독으로는 완전한 애플리케이션일 수 없는데, 이는 그가 어떠한 시스템 애플리케이션 프로그래밍 인터페이스(API)에도 직접 액세스할 수 없기 때문이다. 대신, SE 기술을 이용하기 위해, 통상적으로 애플리케이션은 분할되며, 기밀 데이터 처리 로직은 엔클레이브 내에서 호스트되고, 비기밀 데이터 처리 로직은 엔클레이브 밖에서 호스트된다.
이동 운영 체제의 출현과 더불어, 개발자에게 인기 있는 객체 지향 프로그래밍(OOP) 언어(예로서, 자바(등록상표))에서 어떻게 SE 기술을 이용할 수 있게 할지에 대한 문제가 발생한다.
도 1은 본 발명의 일 실시예에 따른, 보안 데이터에 액세스하기 위한 시스템의 블록도이다.
도 2는 본 발명의 다른 실시예에 따른, 주석 프로세서를 호출하는 시스템의 블록도이다.
도 3은 본 발명의 일 실시예에 따른, 데이터 및 인터페이스 마샬링을 위한 시스템의 블록도이다.
도 4는 본 발명의 일 실시예에 따른, 단일 애플리케이션에 의해 호스트되는 2개의 엔클레이브를 포함하는 시스템의 블록도이다.
도 5는 본 발명의 일 실시예에 따른, 적층 가능한 채널 구성을 포함하는 시스템의 블록도이다.
도 6은 본 발명의 실시예에 따른 애플리케이션과 엔클레이브 간의 인터페이스를 인스턴스화하기 위한 방법의 흐름도이다.
도 7은 본 발명의 다른 실시예에 따른 시스템의 블록도이다.
도 8은 본 발명의 다른 실시예에 따른 시스템의 블록도이다.
비보안 호스트 애플리케이션에 의해 통신될 수 있는 하나 이상의 보안 엔클레이브의 인스턴스화에서 OOP 언어, 예로서 자바(등록상표) 및 다른 OOP 언어를 지원하기 위한 인터페이스 정의 언어(IDL)가 제안된다. IDL은 소프트웨어 판매자의 기존 코드에 대한 변경을 최소화하도록 의도되며, 비교적 간단하게 구현되는, 예로서 논리적으로 간단하고 코드 크기가 작은 저지연/고성능 특성을 갖는다. 추가적인 이점은 IDL이 논-SE-인에이블드 플랫폼(non-SE-enabled platform)과의 호환성을 위해 애플리케이션의 다른 부분에 보안 클래스(예로서, 엔클레이브 내에서 호스트될 클래스)를 붙이기 위한 접착 코드의 생성을 가능하게 한다는 것이다. 애플리케이션의 다른 부분에 보안 클래스를 붙이는 것은 소프트웨어 판매자(SV)에게 상이한 플랫폼에 대한 그의 애플리케이션의 다수의 버전을 유지해야 하는 것을 면제해 준다. 게다가, 일부 실시예에서, 사용자가 볼 수 있는 인터페이스가 존재하지 않고, 따라서 사용자 코드가 기본 마샬링/운반 및 그의 관련 코드로부터 효과적으로 분리될 수 있다.
본 발명의 실시예에 따르면, 마샬링 코드가 정적으로 생성 및 호출될 수 있다. 정적으로 생성 및 호출되는 마샬링 코드의 이점은 다른 코딩 기술에 비해 정적 마샬링 코드의 감소된 지연, 원격 사이트 상에서의 객체의 동적 생성에 비해 원격 사이트 상에서의 예상치 못한 코드 실행을 유발하기 위한 악성 클라이언트에 의한 공격의 감소된 기회, 다른 코딩 방법에 비해 정적 마샬링 코드의 감소된 크기, 및 마샬링될 수 있는("마샬링 가능한") 원격 인터페이스의 후손을 생성하기 위한 능력을 포함할 수 있다. 인터페이스 상속이 본 발명의 실시예에 의해 지원된다.
루트 객체 및 루트 인터페이스의 개념이 IDL 내에 도입되며, 이는 예로서 메모리의 전용 부분 내의 엔클레이브(또한 본 명세서에서 "서버", 예로서 메모리의 보안 부분)가 호스트 애플리케이션(예로서, 클라이언트)에 의해 (예로서, 수동적으로) 생성되는 것을 가능하게 한다. 또한, "랩퍼(wrapper)" 클래스가 마샬링을 우회하기 위해 주석 프로세서에 의해 자동으로 생성될 수 있으며(예로서, 주석 프로세서가 컴파일러에 의해 호출될 수 있으며), 이는 SE-인에이블드 애플리케이션이 애플리케이션 소스 코드의 변경 없이 논-SE-인에이블드 하드웨어 상에서 실행되는 것을 가능하게 할 수 있다.
본 발명의 실시예에서, 엔클레이브는 단일 객체, 예로서 대응하는 인터페이스, 예로서 루트 인터페이스를 노출하는 루트 객체로서 추상화된다. 루트 객체는 엔클레이브의 엔트리 포인트로서 사용된다. 루트 객체는 루트 인터페이스의 프록시/브리지와 함께 엔클레이브 초기화 코드에 의해 자동으로, 예로서 애플리케이션의 실행 시간에 생성될 수 있다. 구성에 따라, 루트 인터페이스는 프록시-브리지 쌍의 인스턴스화 없이 호출자에게 직접 전달될 수 있다. 랩퍼 클래스는 SE 애플리케이션이 프록시/브리지 쌍 없이 논-SE-인에이블드 하드웨어 상에서 보안 엔클레이브에 액세스하는 것을 가능하게 하기 위한 루트 인터페이스를 구현하는 루트 객체를 인스턴스화할 수 있다.
루트 객체가 인스턴스화되면, 예로서 객체/인터페이스를 루트 인터페이스의 임의의 메소드의 인수로서 전달함으로써 또는 루트 인터페이스의 임의의 메소드를 통해 객체/인터페이스를 반환함으로써 엔클레이브로/로부터 더 많은 객체/인터페이스가 전달될 수 있다. 인터페이스를 마샬링하기 위해(예로서, 애플리케이션 공간 내의 호출자를 엔클레이브 공간 내의 피호출자와 함께 허가하기 위해), 예로서 주석 프로세서에 의한 빌드 시간(build time)에 마샬링 코드가 생성된다. 일 실시예에서, 주석 프로세서는 컴파일러 플러그인 모듈일 수 있다.
예로서, 개발자는 주석 달린 인터페이스에 대한 프록시/브리지 클래스를 생성하기 위해 주석 프로세서에 의해 처리될 수 있는 소스내 주석(in-source annotation)을 이용하여 마샬링될 인터페이스를 지정할 수 있다. 프록시는 주석 달린 인터페이스의 구현이다. 프록시는 메소드가 호출될 때마다 운반의 파라미터를 패키징할 수 있다. 브리지는 프록시의 대응물이다. 브리지는 운반 계층으로부터 수신된 파라미터를 언팩킹하고, 주석 달린 인터페이스의 구현을 호출한다.
프록시/브리지 객체의 생성/파괴는 운반 계층에 의해 관리될 수 있다. 운반 계층은 채널 인터페이스로서 추상화될 수 있다. 운반 계층은 데이터 패키지의 전달을 담당하는 것은 물론, 프록시와 브리지의 매칭도 담당할 수 있다. 채널도 "마샬링 가능한데", 예로서 채널의 상이한 구현이 투명하게 적층될 수 있다. 채널 적층은 엔클레이브간 절차 호출에 유용할 수 있다.
본 명세서에서 사용되는 용어는 다음 용어를 포함한다.
a. 인터페이스 - 가상 메소드를 포함하지만 어떠한 데이터 멤버도 포함하지 않는 클래스.
b. 프록시 - 대응하는 인터페이스를 구현하는 생성된 클래스. 모든 메소드가 "마샬링 코드", 예로서 입력 파라미터를 브리지에 의해 "언마샬링"되는 데이터 패킷으로 패키징하기 위한 코드로서 구현된다. 메소드가 반환 값을 갖는 경우, 프록시 구현도 그의 호출자에게 반환하기 전에 (브리지에 의해 마샬링된) 반환 값을 "언마샬링"한다.
c. 브리지 - 프록시의 대응물. 브리지는 입력 파라미터를 언팩킹하고, 인터페이스 구현을 호출하며, 반환 값을 역으로 데이터 패킷으로 마샬링한다.
d. 루트 객체 - 엔클레이브가 초기화되고 있을 때 인스턴스화되는 객체. 루트 객체는 적어도 하나의 마샬링 가능 인터페이스(예로서, 루트 인터페이스)이며, 그에 대해 프록시 및 브리지는 또한 엔클레이브 초기화 코드에 의해 인스턴스화되고 짝짓기될 것이다.
e. 루트 클래스 - 루트 객체의 데이터 타입.
f. 루트 인터페이스 - 루트 클래스에 의해 구현되는 마샬링 가능 인터페이스. 그의 프록시 및 브리지는 엔클레이브 초기화 코드에 의해 인스턴스화/짝짓기된다.
g. 채널 - 운반 계층 추상화. 채널은 프록시와 브리지 사이에서 패킷을 이동시키기 위한 채널 인터페이스를 구현하는 클래스이다. 채널 인터페이스 자체도 마샬링 가능한데, 예로서 채널의 프록시가 다른 채널 위에 생성될 수 있다. 즉, 채널이 적층될 수 있으며, 이는 엔클레이브간 호출에 유용할 수 있다.
도 1은 본 발명의 일 실시예에 따른, 보안 데이터에 액세스하기 위한 시스템의 블록도이다. 시스템(100)은 채널(114/134)을 통해 결합되는 애플리케이션(110) 및 엔클레이브(130)를 포함한다. 일 실시예에서, 애플리케이션(110)은 신뢰되지 않는 공간이며, 엔클레이브(130)는 신뢰되는 공간이다.
일 실시예에서, 엔클레이브(130)는 (예로서, 루트 인터페이스와 관련된 프록시(118)를 업캐스팅(upcasting)함으로써) 루트 인터페이스를 구현하는 루트 객체(136)로서 추상화된다. 애플리케이션(110)은 엔클레이브(130)에 의해 노출된 임의의 능력을 이용하기 전에 엔클레이브(130)를 인스턴스화하고, 루트 인터페이스에 대한 프록시(118)를 생성한다. 엔클레이브 인스턴스화 동안, 루트 객체(136) 및 그의 브리지(140) 양자는 엔클레이브(130) 내에 생성되며, 따라서 애플리케이션(110)은 루트 인터페이스를 통해 엔클레이브(130)와 상호작용하기 시작할 수 있다.
동작에 있어서, 애플리케이션(110)은 엔클레이브 생성기(112)에 대한 호출을 통해 엔클레이브(130)를 출현시킨다. 엔클레이브 생성기(112)는 엔클레이브(130)를 로딩 및 초기화하기 위한 명령어를 캡슐화하는 (예로서, 애플리케이션(110)의 빌드 시간에 생성된) 자동 생성 기능이다. 엔클레이브 생성기(112)는 루트 인터페이스의 구현인 프록시(118)를 반환한다.
동일 애플리케이션 내의 다수의 엔클레이브의 로딩을 가능하게 하기 위해, 각각의 엔클레이브는 고유 명칭을 갖는다. 예로서, 개발자는 스트링에 의해 엔클레이브를 명명하는 것이 허용되며, 스트링으로부터 엔클레이브 생성기(112) 및 엔클레이브 이미지 파일 명칭 양자에 대한 명칭이 생성된다. (예로서, 자바(등록상표)와 같은 일부 언어에 대한) 일 실시예에서, 독립적인 기능이 허용되지 않으며, 따라서 엔클레이브 생성기(112)는 단일 정적 기능을 갖는 클래스로서 생성된다. 예로서, SomeEnclave라는 명칭의 엔클레이브가 주어질 경우, 엔클레이브 생성기(112)는 SomeEnclave_Creator.createEnclave()일 수 있다. 다른 실시예(예로서, C++와 같은 다른 언어)에서, 독립 기능이 허용된다.
엔클레이브 생성기(112)는 엔클레이브(130)의 초기화 코드를 로딩 및 호출할 수 있다. 예로서, 자바(등록상표)를 이용하는 일례에서, 시동 클래스가 클래스 로더에 의해 엔클레이브 글로벌 초기화의 일부로서 초기화될 수 있다. 점선(122)은 엔클레이브 생성기(112)를 시동 클래스(132)에 접속한다. C++를 이용하는 일례에서, 시동 클래스(132)는 초기화 프로세스의 일부로서 호출되는 생성자를 갖는 정적 객체를 포함한다.
엔클레이브(130)의 초기화가 마무리될 때, 엔클레이브 생성기(112)는 애플리케이션(110)에 대한 채널 객체(114)를 인스턴스화한다. 채널 객체(114)는 예로서 데이터 멤버 내에 예로서 신뢰되지 않는 실행 시간 서비스(uRTS)에 의해 반환되는 엔클레이브 식별(EID) 또는 다른 엔클레이브 핸들/식별자를 저장함으로써 그가 어느 엔클레이브와 관련되는지를 기억한다.
채널 객체(114)는 엔클레이브(130)에 의해 참조될 수 있는 브리지의 리스트를 레지스터(116) 내에 유지할 수 있다. 예로서, 브리지(140)는 프록시(118) 내에 나타나는 바와 같은 대응하는 식별자에 의해 참조될 수 있다(예로서, 브리지(140)에 대해, 식별자는 1일 수 있다). 식별자는 채널(134)의 어레이(138) 내에 저장된 브리지(140)의 주소를 참조한다. (일 실시예에서, 인덱스 0(제로)은 예로서 새로 생성된 채널에서 널(NULL) 참조로서 예약되며, 대응하는 레지스터 엔트리는 공백이다.)
엔클레이브 생성기(112)는 루트 인터페이스에 대한 프록시(118)를 생성한다. 프록시(118)는 엔클레이브(130) 내의 브리지(140)와 매칭된다. 프록시(118)의 생성은 엔클레이브 측의 브리지(140)의 생성에 의해 매칭된다. 애플리케이션 측(예로서, 애플리케이션(110)) 측에서의 초기화가 완료될 때, 프록시(118)는 호출자에게 반환되기 전에 루트 인터페이스로 업캐스팅될 수 있다. 이어서, 애플리케이션(110)은 엔클레이브(130)와 상호작용하기 위해 루트 인터페이스의 메소드를 호출할 수 있다.
엔클레이브 측(예로서, 엔클레이브(130))에서, 엔클레이브 시동 클래스(132)는 3개의 객체: 채널 객체(134), 루트 객체(136) 및 브리지(140)를 생성하는 자동 생성 클래스이다.
시동 클래스(132)가 호출되는 방식은 신뢰되는 실행 시간 서비스(tRTS) 구현에 의존한다. 자동 생성 코드가 루트 객체(136)의 인스턴스를 생성하는 것을 가능하게 하기 위해, 루트 클래스는 디폴트 생성자를 가질 수 있다.
애플리케이션(110) 내의 채널 객체(114)와 유사하게, 엔클레이브(130)는 또한 공백으로 초기화되는 브리지의 어레이(138)를 유지한다. 이어서, 브리지(140)는 루트 객체(136)에 대해 생성된다. 브리지(140)는 값이 반환될 때 인터페이스를 마샬링하는 데 사용되는 기본 채널 객체(134)에 대한 참조를 유지한다. 브리지(140)는 채널의 브리지의 어레이(138) 내에서 참조된다. (어레이(138) 내의) 브리지(140)의 식별자는 예로서 프록시(118)에서 애플리케이션(110)에 의해 가정되는 동일 식별자이다. 도 1에 도시된 예에서, 1의 식별자가 브리지(140)에 할당되며, 따라서 브리지(140)는 그의 대응하는 프록시(118)에 의해 올바르게 참조된다.
보안 엔클레이브(SE)가 기본 하드웨어에 의해 지원되지 않는 경우, 엔클레이브(130)는 변경된 엔클레이브 생성기에 의해 애플리케이션(110) 내에 삽입되어, 루트 클래스가 직접 인스턴스화될 수 있다. 즉, 채널 객체(114) 및 프록시(118)를 생성하는 대신에, 루트 객체(136)가 생성되고, 루트 인터페이스로 업캐스팅된 후에 반환된다. 그러한 변경된 엔클레이브 생성기는 후술하는 주석 프로세서에 의해 자동으로 생성될 수도 있다.
통상적인 원격 절차 호출(RPC) 플랫폼은 인터페이스를 정의하기 위한 IDL 문법, 인터페이스 정의를 언어 고유 정의로 컴파일하기 위한 IDL 컴파일러, 및 마샬링 코드를 포함한다. 통상적으로, 인터페이스를 구현하는 컴포넌트는 IDL 컴파일러의 출력을 이용하여 컴포넌트를 인터페이스에 결합한다.
본 발명의 실시예(예로서, 도 1을 포함하는 실시예)에서, 개별 파일에서 인터페이스를 정의하는 데 사용될 수 있는 새로운 문법을 정의하는 대신에, 예로서 자바(등록상표) 소스 파일에서 직접, 원격 액세스 가능한 인터페이스를 마킹하기 위해 빌드 시간에 주석의 세트가 사용될 수 있다. 이어서, IDL 컴파일러는 컴파일러(예로서, 자바(등록상표) 컴파일러)에 의해 컴파일러가 특정 주석을 만날 때마다 호출될 수 있는 주석 프로세서로서 구현될 수 있다.
소정의 객체 지향 언어, 예로서, 자바(등록상표)에서, 주석 프로세서는 "미러" 능력을 이용하여, 클래스를 분석하고 적절한 마샬링 코드를 생성할 수 있다. 원격 액세스 가능 인터페이스를 구현하는 클래스는 마샬링 코드와 상호작용할 필요가 없다.
아래에서는 주어진 타입의 마샬링 가능성을 결정하기 위한 방법에 대한 설명이 제공되며, 마샬링 코드가 어떻게 생성되고 체계화되는지, 그리고 주석의 리스트 및 그의 목적에 대한 설명이 이어진다.
본 발명의 실시예에서, 마샬링 가능성을 결정하기 위한 규칙은 다음의 규칙을 포함한다.
1. 모든 프리미티브 데이터 타입(예로서, 정수, 부동 소수점 등)은 마샬링 가능하다.
2. 합성 데이터 타입(즉, 어레이/구조체)은 그의 컴포넌트 모두가 마샬링 가능할 경우에 마샬링 가능하다. 메소드/함수는 그의 반환 타입 및 모든 그의 파라미터 타입이 마샬링 가능할 경우에 마샬링 가능한 것으로 간주된다. 인터페이스는 모든 그의 메소드가 마샬링 가능할 경우에 마샬링 가능하다.
마샬링 코드는 타입에 따라 위의 규칙의 회귀적 적용에 의해 생성될 수 있다.
1. 프리미티브 타입은 고정 크기를 가지며, 따라서 프리미티브 타입의 마샬링은 실시예에 따라 그의 값을 메모리 버퍼, 스트림 등에 저장함으로써 달성될 수 있다.
2. 합성 타입에 대한 마샬링 코드는 각각의 컴포넌트에 대한 마샬링 동작의 순차적 리스트를 포함하는 함수이다. 마샬링 함수는 그가 마샬링하는 타입에 따라 명명될 수 있다. 컴포넌트가 합성 타입일 때, 그 컴포넌트에 대한 마샬링 동작은 컴포넌트 타입의 마샬링 함수의 호출일 수 있다.
3. 메소드/함수에 대한 마샬링 코드는 마샬링되는 메소드/함수와 동일한 시그니처를 갖는 마샬링 함수일 수 있다. 마샬링 함수는 그의 파라미터 각각에 대한 마샬링 동작, 그에 이어지는 실함수의 호출 및 반환 타입에 대한 언마샬링 동작의 리스트이다. 클래스 내의 인스턴스 메소드는 통상적인 함수로서 간주될 수도 있고, 제1 파라미터는 다른 변수의 메모리 주소에 대한 참조(예로서, 포인터), 예로서 "this"로 라벨링된 포인터일 수 있다는 점에 유의한다. 통상적으로 this 포인터는 인터페이스 포인터이다.
4. 인터페이스는 인터페이스를 구현하는 프록시 클래스로서 마샬링될 수 있다.
프록시 클래스의 각각의 메소드는 인터페이스 내의 메소드에 대한 마샬링 코드일 수 있다. 프록시 클래스는 원격 측의 인터페이스의 실제 구현에 프록시를 결합하는 식별자도 포함한다.
본 발명의 실시예는 인터페이스 및 합성 타입, 예로서 어레이 및 구조체를 지원한다. 본 발명의 실시예는 일반적으로 다형성으로 인해 클래스를 지원하지 않을 수 있는데, 예로서 도출된 클래스의 인스턴스가 그의 수퍼 클래스로서 잘못 마샬링될 수 있고, 에러 검사가 빌드 시간에 행해질 수 없다.
본 발명의 일부 실시예는 주어진 애플리케이션(예로서, 자바(등록상표) 애플리케이션)의 모든 인터페이스 및 클래스에 적용되어, 주어진 인터페이스/클래스가 마샬링 가능한지를 결정하고, 도중에 마샬링 코드를 생성할 수 있다.
일부 실시예에서, 개발자에 의해 선택된 특정 인터페이스/클래스의 처리를 트리거링하기 위해 주석이 사용된다. 주석은 다음을 포함할 수 있다(주석의 명칭은 설명의 목적을 위한 것일 뿐이며, 주석의 실제 명칭/시그니처는 후술하는 것과 상당히 다를 수 있다는 점에 유의한다).
@Interface 이 주석은 인터페이스를 마샬링 가능한 것으로서 마킹하며, 프록시 클래스가 인터페이스에 대해 생성되어야 한다는 것을 주석 프로세서에 지시한다. 인터페이스의 임의의 메소드에 대한 호출이 마샬링되고 원격 사이트 상에서 실행될 것이다.
@Structure(enforceFinalCheck = true/false) 이 주석은 클래스를 마샬링 가능한 데이터 구조체로서 마킹하며, 마샬링 함수가 이 클래스에 대해 생성되어야 한다는 것을 주석 프로세서에 지시한다. 임의의 메소드에 대한 호출은 마샬링되지 않으며, 따라서 국지적으로 실행될 것이다. (이 주석은 필수적인 것은 아닌데, 이는 주석 프로세스가 어느 경우에나 메소드의 원형에 나타나는 모든 클래스에 대한 마샬링 코드를 생성하기 때문이다.) 실제로, @Structure의 사용은 마샬링 코드의 복제를 방지할 수 있고, 주석 프로세서를 간소화할 수 있다. 게다가, @Structure의 사용은 기밀 데이터를 포함하는 클래스가 잘못 전달되는 것을 방지할 수 있는데, 이는 이 경우에 임의의 마샬링 가능 클래스에 개발자에 의해 명확하게 주석이 첨부되기 때문이다.
다형성에 의해 유발되는 에러 및 혼란을 방지하기 위해, 일 실시예에서, 주석 달린 클래스는 서브클래스의 임의의 가능성을 제거하기 위해 "최종적인" 것으로서 선언될 수 있다. 다른 실시예는 또한 최종적이 아닌 클래스에 @Structure에 의해 주석이 첨부될 때마다 에러 대신에 경고를 보고함으로써 개발자의 요청에 따라 최종성의 선언을 완화할 수 있다. 그러한 완화는 참을 디폴트 값으로 갖고 개발자에 의해 무효화될 수 있는 옵션 인수 enforceFinalCheck에 의해 지정될 수 있다.
@Out 이 주석은 메소드의 파라미터에 적용될 수 있다. 주석 달린 파라미터는 @Structure에 의해 주석이 첨부되는 타입의 파라미터이며, 주석 달린 파라미터가 피호출자에 의해 갱신될 수 있고, 갱신된 사본이 호출자에게 역으로 마샬링된다는 것을 주석 프로세서에 지시한다.
@RootClass(RootInterface = "InterfaceName") 이 주석은 루트 클래스 및 그가 구현하는 루트 인터페이스를 지정한다. 이 주석은 엔클레이브에 대한 루트 클래스 및 루트 인터페이스를 지정하기 위한 여러 가능한 방식 중 하나이며, 주석을 통해 행해질 수 있다(또는 그렇지 않을 수 있다). 예로서, 일 실시예는 링커의 커맨드 라인에 루트 클래스 및 루트 인터페이스를 지정하기로 선택할 수 있다.
@SEClass(trusted = true/false) 이 주석은 인터페이스 정의의 일부가 아니다. 오히려, 이것은 (예로서, 자바(등록상표) 링커와 같은 링커에 의한) 에러 검사를 용이하게 한다. 일 실시예에서, "trusted = true"로 마킹된 클래스만이 엔클레이브 내에 나타나는 반면, "trusted = false"로 마킹된 클래스는 어떠한 엔클레이브에도 나타나지 않는다.
도 2는 본 발명의 다른 실시예에 따른, 주석 프로세서를 호출하는 시스템의 블록도(200)이다. (예로서, 소프트웨어로 구현되는) 주석 프로세서(250)는 주석 달린 소스 코드(222)를 컴파일하여 객체 코드를 생성할 때 (본 명세서에서 "컴파일러"라고도 하는) 컴파일러 로직(210)에 의해 호출될 수 있다. 주석 달린 소스 코드(222)는 주석 달린 인터페이스(예로서, SomeInterface)를 포함할 수 있다. 컴파일러 로직(210)은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다.
컴파일러(210)가 주석(예로서, @Interface와 같은 임의의 주석)을 만날 때, 컴파일러(210)는 주석 프로세서(250)를 호출할 수 있다. 주석 프로세서(250)는 주석 달린 인터페이스의 마샬링 가능성을 결정할 수 있고, 마샬링 코드를 생성할 수 있다.
엔클레이브(240) 내의 (예로서, 완수될 작업을 나타내는) 클래스(242)는 SomeInterface를 구현했을 수 있으며, SomeInterface를 호스트 애플리케이션(220)에 노출하기를 원한다. SomeInterface의 구현은 엔클레이브 내에 존재하는 반면, 그의 클라이언트는 (신뢰되지 않는) 애플리케이션(220) 내에 존재하므로, 링커(도시되지 않음)는 메소드 호출을 마샬링하기 위해 애플리케이션(220) 내에 프록시 클래스(226)를 배치할 수 있고, 또한 메소드 호출을 언마샬링하기 위해 엔클레이브(240) 내에 브리지 클래스(244)를 배치할 수 있다.
엔클레이브 랩퍼 클래스(224)는 마샬링/운반 계층을 우회하기 위한 하나의 접착 코드이며, 논-SE-인에이블드 플랫폼과의 호환성을 위해 포함된다. 일부 실시예에서, 엔클레이브 랩퍼 클래스(224)는 루트 클래스에 대해서만 생성된다.
프록시(예로서, 프록시 클래스(226)는 마샬링 가능 인터페이스를 구현할 수 있으며, 이는 호출자가 프록시와 관련된 객체를 직접 호출하는 것처럼 호출자가 프록시를 호출하는 것을 가능하게 한다. 프록시 메소드는 파라미터를 마샬링하고, 이어서 채널을 이용하여, channel/bridge ID 쌍에 의해 식별되는 대응하는 브리지(예로서, SomeInterface 브리지 클래스(244))를 통해 원격으로 메소드를 호출하며, 여기서 channel은 채널 객체에 대한 참조이고, bridge ID는 채널에 고유하다.
브리지(예로서, SomeInterface 브리지 클래스(244))는 각각의 마샬링 가능 인터페이스를 인터페이스를 구현하는 실제 클래스 및 메소드에 브리징할 수 있다. 특정 프록시에 대응하는 브리지는 새로운 인터페이스가 채널을 통해 마샬링될 때마다 인스턴스화된다. 브리지는 마샬링된 인터페이스 내의 각각의 메소드에 대한 브리지 메소드를 가질 수 있다.
프록시 및 브리지는 초기화 시퀀스의 일부로서 생성되는 루트 인터페이스에 대한 프록시 및 인터페이스 외에는 동적으로 생성/파괴될 수 있다. 통상적으로, 각각의 프록시의 라이프 사이클은 쓰레기 수집기에 의해 제어될 수 있으며, 프록시가 파괴될 때, 채널은 대응하는 브리지를 해제한다.
일 실시예에서, 참조 카운팅 방안이 브리지 상에서 이용될 수 있다. 즉, 주어진 인터페이스가 마샬링될 때마다 새로운 프록시 인스턴스가 생성된다. 그러나, 동일한 원격 객체의 다수의 프록시 인스턴스는 참조 카운팅되고 모든 프록시 인스턴스가 파괴된 후에 파괴되는 동일한 브리지 인스턴스를 공유할 수 있다.
다른 실시예에서, 프록시가 채널에 의해 추적되고 참조 카운팅될 수 있다. 이 실시예에서, 동일한 프록시 인스턴스는 동일한 원격 객체가 얼마나 많이 마샬링되는지에 관계없이 반환될 것이다. 이 실시예에서, 채널에 의한 프록시의 참조는 "약하거나", 그렇지 않으면, 프록시는 쓰레기로 수집되지 않을 것인데, 예로서 채널에 의한 프록시의 참조는 프록시가 쓰레기로 수집되는 것을 방지할 것이라는 점에 유의한다.
프록시 클래스와 브리지 클래스 간의 일대일 대응으로 인해, 브리지는 각각의 메소드 호출에 대한 파라미터를 어떻게 언마샬링할지에 대한 선험적 지식을 가질 수 있다. 따라서, 프록시는 다른 정보(예로서, 파라미터 타입 정보) 없이 파라미터 내의 데이터만을 마샬링하는 것이 필요하다. 파라미터 내의 데이터만을 마샬링하는 것은 낮은 실행 시간 오버헤드를 유발할 수 있다.
프록시 및 브리지 양자는 사용자에 의해 정의된 인터페이스 정의 및 도구(예로서, 전술한 주석 프로세서)로부터 자동 생성될 수 있다. 결과적인 코드는 인터페이스 및 복합 객체 양자를 마샬링할 수 있으며, 사용자(예로서, 개발자)는 프록시 및 브리지 내에 제공되는 마샬링 및 언마샬링 코드의 수동 작성을 피할 수 있다.
더구나, 각각의 인터페이스의 정의는 파라미터가 어떻게 마샬링되는지에 관한 사용자에 의한 유연성을 허용한다. 예로서, 사용자는 인터페이스가 불필요한 객체 멤버의 마샬링을 우회하도록 인터페이스를 정의할 수 있다.
채널은 원격 메소드를 호출하고, 브리지 객체를 관리하고, 로컬 클라이언트와 원격 서비스 간의 운반 메커니즘을 관리하도록 구현될 수 있다. 일부 실시예에서 원격 서비스는 원격 프로세스에서 실행될 필요가 없다는 점에 유의해야 한다. 대신, 원격 서비스는 엔클레이브와 같은 프로그래밍 구성에 의해 격리되는 로컬 엔티티일 수 있다.
한 쌍의 채널 객체가 각각의 클라이언트/서버 인터페이스에 대해 인스턴스화될 수 있다. 각각의 클라이언트/서버 결합은 클라이언트 상의 주요 프록시(예로서, 루트 인터페이스에 대한 프록시) 및 서버(엔클레이브) 내의 주요 브리지(예로서, 루트 객체에 대한 브리지)를 암시하지만, 클라이언트와 서버 간의 인터페이스에 대한 참조의 전달을 통해 다른 프록시/브리지 쌍이 생성될 수 있다. 따라서, 인터페이스는 임의의 방향으로, 예로서 클라이언트로부터 서버로(예로서, 애플리케이션으로부터 엔클레이브로) 또는 서버로부터 클라이언트로(예로서, 엔클레이브로부터 애플리케이션으로) 동작할 수 있다. 인터페이스는 채널 인터페이스 자체를 포함할 수 있는데, 이는 하나의 서버에 대한 채널 인터페이스가 다른 서버로 마샬링되어 적층 가능 운반 계층을 생성할 수 있기 때문이다.
채널 클래스는 운반 메커니즘을 이용하여 클라이언트와 서버 사이에서 통신하며, 이는 각각의 타입의 채널에 대한 로컬 및 원격 프로세스 간의 채널 인터페이스의 고유 구현을 암시한다. 운반 메커니즘은 클라이언트와 서버 간의 통신을 담당하며, 플랫폼에 고유할 수 있다. 일 실시예에서, 운반 계층은 예로서 고유 인터페이스(예로서, 자바(등록상표) 인터페이스)를 통해 액세스되는 공유 메모리 및 직접 호출 메커니즘을 이용하는 접착 코드(예로서, C/C++ 접착 코드)를 이용한다.
내부적으로, 채널 구현은 로컬 브리지에 대한 참조를 유지하고, 로컬 브리지가 채널에 등록될 때 각각의 로컬 브리지에 대한 고유 식별자(ID)를 생성함으로써, 임의의 마샬링된 인터페이스를 계속 추적한다. 이것은 채널이 원격 측에 의해 전달된 로컬 브리지 식별을 로컬 측의 브리지 객체 및 그의 관련 실제 객체로 변환하는 것을 가능하게 한다.
도 3은 본 발명의 일 실시예에 따른, 데이터 마샬링 및/또는 인터페이스 마샬링을 위한 시스템(300)의 블록도이다. 시스템(300)은 애플리케이션(310)(예로서, 안드로이드(등록상표) 애플리케이션) 및 예로서 애플리케이션 코드로부터 격리된 원격 프로세스로서의 엔클레이브(340)(예로서, 자바(등록상표)로 작성된 보안 엔클레이브)를 포함한다.
시스템(300)은 프록시(314)를 포함하는 애플리케이션(310), 채널(318/342), 및 브리지(344)를 포함하는 엔클레이브(340)를 포함한다. 시스템(300)은 애플리케이션으로부터 엔클레이브로의 방향으로의 그리고 또한 엔클레이브로부터 애플리케이션으로의 반대 방향으로의 정보의 흐름을 허가할 수 있다.
Someclass 메소드(312)는 인터페이스 A(316)를 통해 엔클레이브 객체(346)에 액세스하려고 시도하는 호출자이다. 프록시(314)는 (엔클레이브) 브리지 2(326)를 인스턴스화하고, 브리지 2(326)를 채널(318)에 등록한다(예로서, 채널(318)은 브리지 2(326)의 인덱스를 할당하고, 인덱스를 프록시(314)로 반환한다). 인터페이스 A(316)는 (신뢰되지 않는) 객체(320)를 제1 파라미터로서 그리고 객체 A(322)를 제2 파라미터로서 취하는 메소드 A1을 갖는다. 객체 A(322)는 @Structure에 의해 주석이 첨부된다. 객체 A(322)로부터의 데이터는 브리지 2(326)의 인덱스와 함께 프록시(314)에 의해 연속 버퍼 내로 패키징되는데, 예로서 브리지 2(326)는 (신뢰되지 않는) 객체(320)의 브리지이고(예로서, 객체(320)는 브리지 2(326)를 통해 액세스될 수 있고), 상보적인 브리지(344)를 식별하는 (프록시(314)에 의해 제공되는) 인덱스를 포함하는 패키징된 데이터는 채널(318)로 전달된다. 채널(342)은 패키징된 데이터를 수신하고, 엔클레이브 브리지(344)를 찾기 위해 제공된 인덱스를 이용한다. 게다가, 엔클레이브 브리지(344)는 메소드 A1이 사용되고 있다는 것을 통지받는다. 엔클레이브 브리지(344)는 수신된 패키징된 데이터로부터 객체 A(350)의 사본을 생성한다. 엔클레이브 브리지(344)는 엔클레이브 객체(346)의 메소드 A1을 호출하고, 메소드 A1은 객체 A(350)의 사본에 대해 하나의 파라미터로서 그리고 프록시(352)에 대해 다른 파라미터로서 작용한다. 엔클레이브 브리지(344)는 채널(342), 및 엔클레이브 브리지 2(326)와 관련된 인덱스를 프록시(352)의 생성자에 제공함으로써 프록시(352)를 생성(인스턴스화)한다.
프록시(314)는 2개의 정보를 패키징하며, 제1 정보는 객체 A(322)의 콘텐츠이고, 제2 정보는 엔클레이브 브리지 2(326)의 식별자인데, 예로서 채널(318) 내의 어레이 내에 저장되는 엔클레이브 브리지 2(326)의 주소를 식별한다. 식별자는 엔클레이브 객체(346)에 의한 데이터 처리의 진행의, 애플리케이션(310)에서의 추적을 가능하게 할 수 있다.
프록시(314)는 엔클레이브 브리지 2(326)를 인스턴스화하고, 엔클레이브 브리지 2(326)의 주소를 채널(318)에 등록한다. 프록시(314)는 엔클레이브 브리지 2(326)의 식별자를 엔클레이브 브리지(344)로 전달할 수 있다. 따라서, 엔클레이브 브리지(344)는 객체 A(322) 내에 저장된 데이터 및 엔클레이브 브리지 2(326)의 주소와 관련된 식별자를 수신한다.
엔클레이브 객체(346)는 호출자가 엔클레이브 객체(346)에 의한 객체 A의 데이터의 처리를 모니터링하기 위해 호출할 수 있는 인터페이스 A(316)(예로서, 가상 함수 세트)를 구현한다. 326의 식별자는 채널(342)에 대한 참조와 함께 신뢰되지 않는 프록시(352)를 인스턴스화하는 데 사용된다.
엔클레이브 객체(346)는 프록시(352)를 호출하고 (예로서, 마샬링 버퍼(도시되지 않음)로부터) 백분율 완료를 제공함으로써 처리의 진행을 프록시(352)에 보고할 수 있다. 이어서, 프록시(352)는 양 데이터, 예로서 엔클레이브 브리지 2(326)의 브리지 식별자 및 마샬링 버퍼의 콘텐츠, 예로서 엔클레이브 객체(346)에 의해 실행되고 있는 처리의 백분율 완료를 전송할 것이다. 엔클레이브 브리지 2(326)는 백분율을 추출(언마샬링)하고, (신뢰되지 않는) 객체(320)를 호출하고, 언마샬링된 데이터의 콘텐츠(예로서, 엔클레이브 객체(346)에 의해 실행되고 있는 처리의 백분율 완료)를 제공한다.
도 4는 본 발명의 일 실시예에 따른, 2개의 엔클레이브를 포함하는 시스템의 블록도이다. 엔클레이브(430, 450)는 소스 코드 애플리케이션의 소스 코드 내의 하나 이상의 주석에 응답하여 예로서 주석 프로세서에 의해 빌드 시간에 생성될 수 있는 엔클레이브 로더를 통해 로딩될 수 있다. 애플리케이션(410)은 2개의 원격 프로세스와 통신한다. 애플리케이션(410)은 엔클레이브(430) 및 엔클레이브(450)에 대한 인터페이스를 갖는다. 엔클레이브(430, 450) 각각에 대해, 애플리케이션에서 인스턴스화되는 대응하는 채널(412, 414)은 물론, 엔클레이브(430, 450) 각각에서 인스턴스화되는 대응하는 채널(432, 452)이 존재한다. 엔클레이브(430)는 클래스 객체(434)를 포함한다. 프록시(416) 및 브리지(436)가 객체(434)에 대한 인터페이스를 프록싱하기 위해 존재한다. 엔클레이브(450)는 클래스 객체(454)를 포함한다. 프록시(418) 및 브리지 클래스(456)가 객체(454)에 대한 인터페이스를 프록싱하기 위해 존재한다. 하나의 코드("이콜러(ecaller)")가 대응하는 프록시(416, 418)를 통해 호출함으로써 객체(434, 452)에 대한 호출을 행할 수 있다. 프록시(416) 및 브리지(436) 및/또는 프록시(418) 및 브리지(456)는 본 발명의 실시예에 따르면 예로서 컴파일러에 의해 호출되는 주석 프로세서의 사용을 통해 컴파일러에 의해 출력되는 엔클레이브 초기화 코드에 의해 생성될 수 있다.
도 5는 본 발명의 일 실시예에 따른, 적층 가능 채널 구성을 포함하는 시스템의 블록도이다. 시스템(500)은 애플리케이션(510), 제1 엔클레이브(530) 및 제2 엔클레이브(560)를 포함한다. 시스템은 적층 가능 채널을 특징으로 하며, 이는 하나의 채널을 다른 채널 위에 마샬링하는 것을 수반하고, 원격 엔티티가 다른 프로세스에 도달하기 위해 2개의 채널을 통해 효과적으로 호출하는 것을 가능하게 한다. 이콜러(548)의 사용을 통해, 엔클레이브(530)는 엔클레이브(560) 내의 객체에 도달하기 위해 적층된 채널 인터페이스를 통해 호출할 수 있다. 일부 실시예에서, 엔클레이브(530, 560) 중 하나 또는 양자는 애플리케이션(510)의 빌드 시간에 생성되는 자동 생성 엔클레이브 생성기에 의해 생성될 수 있다.
각각의 엔클레이브에 대해, 애플리케이션(510)에서 그리고 엔클레이브에서 인스턴스화되는 대응하는 채널이 존재한다. 즉, 채널(512)은 엔클레이브(530) 내에 대응하는 채널(544)을 가지며, 채널(516)은 엔클레이브(560) 내에 대응하는 채널(566)을 갖는다. 엔클레이브(560)는 객체(562)를 포함한다.
프록시(542)는 엔클레이브(530)에서 인스턴스화되며, 애플리케이션(510)과 엔클레이브(530) 간의 채널(512/544)을 이용하여 데이터를 애플리케이션(510) 내에 위치하는 브리지(514)로 마샬링한다.
프록시(546)는 엔클레이브(530)에서 생성된다. 프록시(546)를 통해, 다음과 같이 엔클레이브(560)로, 이어서 객체(562)로 통신되는 채널(516/566)을 통해 채널 호출이 행해질 수 있는데: 엔클레이브(530) 내에 위치하는 이콜러(548)가 객체(562)에 대한 호출을 개시한다. 호출은 프록시(546)로, 프록시(542)로, 채널 쌍(544/512)을 통해, 브리지(514)로, 채널 쌍(516/566)을 통해, 엔클레이브(560) 내의 브리지(564)로 그리고 최종적으로 브리지(564)로부터 객체(562)로 진행된다.
채널 인터페이스(512/544 및 516/566)가 적층되므로, 메소드 호출의 파라미터는 호출을 개시하는 프로세스의 프록시(예로서, 프록시(546))에서 마샬링되며, 이어서 호출을 종료하는 브리지(예로서, 브리지(564))에서 언마샬링된다는 점에 유의해야 한다. 채널 인터페이스의 적층으로 인해 파라미터의 리마샬링에서 무시 가능한 오버헤드가 존재할 수 있다.
이전의 임의의 실시예에서 설명된 기술은 애플리케이션을 엔클레이브와 브리징하는 대신에 애플리케이션을 하나 이상의 다른 애플리케이션에 브리징하는 데 사용될 수 있다는 점에 유의해야 한다.
도 6은 본 발명의 실시예에 따른, 애플리케이션과 엔클레이브 간의 인터페이스를 인스턴스화하기 위한 방법(600)의 흐름도이다. 블록 602에서, 애플리케이션은 (자동 생성된) 엔클레이브 생성기를 호출한다. (예로서, 자바(등록상표) 코드를 이용하는) 일부 실시예에서, 엔클레이브 생성기는 예로서 애플리케이션의 빌드 시간에 정적 함수를 갖는 클래스로서 생성될 수 있다.
블록 604로 계속하여, 엔클레이브 생성기는 엔클레이브 내의 시동 클래스를 초기화하는 (예로서, 애플리케이션 내의) 엔클레이브의 초기화 코드를 로딩 및 호출한다. 블록 606으로 진행하여, 엔클레이브 채널 객체가 엔클레이브 시동 클래스에 의해 인스턴스화된다. 블록 608로 이동하여, 엔클레이브 시동 클래스는 루트 객체를 생성한다. 블록 610으로 진행하여, 엔클레이브 시동 클래스는 공백으로 초기화된 브리지 어레이를 생성한다.
블록 612로 계속하여, 엔클레이브 시동 클래스는 루트 객체에 대한 브리지를 생성한다. 브리지는 엔클레이브 채널에 등록되며(예로서, 엔클레이브 채널의 어레이에서 참조되는 루트 객체에 대한 가정된 값을 할당받으며), 따라서 브리지는 채널의 브리지 어레이 내에 나타난다. 블록 614로 진행하여, 엔클레이브 생성기는 애플리케이션에 대한 애플리케이션 채널 객체를 인스턴스화한다. 애플리케이션 채널 객체는 엔클레이브 식별을 저장한다. 블록 616으로 이동하여, 애플리케이션 채널 객체는 공백으로 초기화된 브리지 리스트를 유지한다. 블록 618로 진행하여, 엔클레이브 생성기는 (단일) 루트 인터페이스에 대한, 애플리케이션 내의 프록시를 생성한다. 채널 인덱스 쌍이 엔클레이브 측의 인터페이스와 매칭된다. 일 실시예에서, 제1 채널 인덱스는 1로 하드 코딩될 수 있다. 블록 620으로 계속하여, 프록시는 일 타입의 루트 인터페이스로 업캐스팅되며, 호출자에게 반환된다.
실시예는 셀룰러 전화와 같은 이동 장치를 포함하는 다른 타입의 시스템 내에 통합될 수 있다. 이제, 도 7을 참조하면, 본 발명의 다른 실시예에 따른 시스템의 블록도가 도시된다. 도 7에 도시된 바와 같이, 시스템(700)은 이동 장치일 수 있으며, 다양한 컴포넌트를 포함할 수 있다. 도 7의 고레벨 도면에 도시된 바와 같이, 장치의 중앙 처리 유닛일 수 있는 애플리케이션 프로세서(710)는 시스템 메모리(715)를 포함하는 다양한 컴포넌트와 통신한다. 시스템 메모리(715)는 다양한 실시예에서 프로그램 및 데이터 저장 부분 양자를 포함할 수 있으며, 보안 저장을 제공하도록 맵핑될 수 있다. "엔클레이브 페이지 캐시"(EPC)(718)는 예로서 암호법의 사용을 통해 전용화될 수 있고, 본 발명의 실시예에 따르면 예로서 애플리케이션에 의해 생성될 하나 이상의 보안 엔클레이브를 수용할 수 있는 전용 저장 부분(715)이다. 일 실시예에서, EPC(718)는 파워업 시에 그리고 하나 이상의 보안 엔클레이브가 생성되기 전에 구성될 수 있다.
애플리케이션 프로세서(710)는 또한 다양한 실시예에서 디스플레이 및 실행시에 디스플레이 상에 스스로 나타날 수 있는 터치 키패드와 같은 하나 이상의 입력 장치를 포함할 수 있는 입출력 시스템(720)에 결합될 수 있다. 시스템(700)은 또한 하나 이상의 센서(770)로부터 데이터를 수신할 수 있는 통합 센서 허브(ISH)(760)를 포함할 수 있다.
애플리케이션 프로세서(710)는 본 발명의 실시예에 따르면 애플리케이션이 액세스하는 보안 엔클레이브에 대한 루트 객체를 인스턴스화하기 위해 애플리케이션을 실행하도록 동작 가능할 수 있다. 애플리케이션 프로세서(710)는 본 발명의 실시예에 따르면 애플리케이션과 엔클레이브 사이의 인터페이스를 마샬링하기 위한 마샬링 코드를 생성하도록 동작 가능할 수 있다. 마샬링 코드는 본 발명의 실시예에 따르면 정적으로 생성되고 호출될 수 있다. 소스내 주석은 본 발명의 실시예에 따르면 애플리케이션의 빌드 시간에 원격 (예로서, 마샬링 가능) 인터페이스를 정의하는 데 사용될 수 있다. 본 발명의 실시예에 따르면, 인터페이스 상속이 지원될 수 있다.
일부 실시예에서, 본 발명의 실시예에 따르면, 예로서 엔클레이브 시동 소스 코드에 대한 변경 없이 논-SE-인에이블드 하드웨어 상에서 보안 엔클레이브(SE)-인에이블드 애플리케이션을 실행하기 위해, 마샬링을 우회하기 위해 주석 프로세서에 의해 랩퍼 클래스가 자동으로 생성될 수 있다. 본 발명의 실시예에 따르면, 원격 엔티티가 다른 프로세스에 도달하기 위해 2개의 채널을 통해 효과적으로 호출하는 것을 가능하게 하기 위해, 제1 엔클레이브에 대한 제1 채널 위에 제2 엔클레이브에 대한 제2 채널을 마샬링하는 것을 포함하는 적층 가능 채널이 지원될 수 있다.
애플리케이션 프로세서(710)는 또한 출력을 위해 음성 및 데이터 통신과 같은 신호를 컨디셔닝하는 것은 물론, 착신 전화 및 기타 신호를 컨디셔닝할 수 있는 기저대역 프로세서(730)에 결합될 수 있다. 도시된 바와 같이, 기저대역 프로세서(730)는 수신 및 송신 능력 양자를 가능하게 할 수 있는 송수신기(740)에 결합된다. 또한, 송수신기(740)는 안테나(750), 예로서 전기 및 전자 엔지니어 협회 802.11 표준에 따라 예로서 블루투스(상표) 또는 소위 와이파이(상표) 네트워크와 같은 무선 광역 네트워크(예로서, 3G 또는 4G 네트워크) 및/또는 무선 근거리 네트워크를 통해 하나 이상의 통신 프로토콜을 통해 음성 및 데이터 신호를 송신 및 수신할 수 있는 임의 타입의 안테나와 통신할 수 있다. 도시된 바와 같이, 시스템(700)은 이동 환경에서 동작을 가능하게 하기 위한 재충전 가능 배터리를 갖는 재충전 가능 전원(725)을 더 포함할 수 있다. 도 7의 실시예에서는 이러한 특정 구현과 관련하여 도시되지만, 본 발명의 범위는 이와 관련하여 한정되지 않는다.
실시예는 많은 상이한 시스템 타입에서 구현될 수 있다. 이제, 도 8을 참조하면, 본 발명의 일 실시예에 따른 시스템의 블록도가 도시된다. 도 8에 도시된 바와 같이, 멀티프로세서 시스템(800)은 점대점 상호접속 시스템이며, 점대점 상호접속(850)을 통해 결합되는 제1 프로세서(870) 및 제2 프로세서(880)를 포함한다. 도 8에 도시된 바와 같이, 프로세서(870, 880) 각각은 제1 및 제2 프로세서 코어(즉, 프로세서 코어(874a, 874b) 및 프로세서 코어(884a, 884b))를 포함하는 멀티코어 프로세서일 수 있지만, 프로세서 내에는 잠재적으로 더 많은 코어가 존재할 수 있다.
도 8을 계속 참조하면, 제1 프로세서(870)는 메모리 제어기 허브(MCH)(872) 및 점대점(P-P) 인터페이스(876, 878)를 더 포함한다. 유사하게, 제2 프로세서(880)는 MCH(882) 및 P-P 인터페이스(886, 886)를 포함한다. 도 8에 도시된 바와 같이, MCH(872, 882)는 프로세서를 각각의 메모리, 즉 각각의 프로세서에 국지적으로 부착된 시스템 메모리(예로서, DRAM)의 부분일 수 있는 메모리(832) 및 메모리(834)에 결합한다. 메모리(832)는 엔클레이브 페이지 캐시(EPC)(833)를 포함할 수 있으며, 메모리(834)는 EPC(835)를 포함할 수 있다. EPC(833, 835)는 각각의 메모리(832, 834)의 부분이다. EPC(833, 835)는 하나 이상의 보안 엔클레이브를 저장하도록 (예로서, 암호화 기술을 통해) 전용화될 수 있다. 각각의 EPC(833, 835)는 예로서 각각의 프로세서(870, 880)에 의해 실행되는 기본 입출력 시스템(BIOS)에 의해 파워업 시에 생성될 수 있다. 본 발명의 실시예에 따르면, 프로세서(870) 또는 프로세서(880) 상에서 실행되는 애플리케이션으로부터의 요청에 응답하여 엔클레이브 로더에 의해 하나 이상의 보안 엔클레이브가 생성될 수 있다. 보안 엔클레이브(들)는 본 발명의 실시예에 따르면 대응하는 EPC 내에 생성될 수 있다. 각각의 보안 엔클레이브는 본 발명의 실시예에 따르면 실행 시간에 애플리케이션의 엔클레이브 초기화 코드에 의해 자동으로 인스턴스화되는 루트 객체로서 추상화될 수 있다. 엔클레이브 초기화 코드는 본 발명의 실시예에 따르면 애플리케이션의 빌드 시간에 생성될 수 있다.
제1 프로세서(870) 및 제2 프로세서(880)는 P-P 상호접속(862, 884) 각각을 통해 칩셋(890)에 결합될 수 있다. 도 8에 도시된 바와 같이, 칩셋(890)은 P-P 인터페이스(894, 898)를 포함한다.
더구나, 칩셋(890)은 칩셋(890)을 P-P 상호접속(839)을 통해 고성능 그래픽 엔진(838)에 결합하기 위한 인터페이스(892)를 포함한다. 또한, 칩셋(890)은 인터페이스(896)를 통해 제1 버스(816)에 결합될 수 있다. 도 8에 도시된 바와 같이, 다양한 입출력(I/O) 장치(814)가 제1 버스(816)를 제2 버스(820)에 결합하는 버스 브리지(818)와 함께 제1 버스(816)에 결합될 수 있다. 예로서 키보드/마우스(822), 통신 장치(826) 및 일 실시예에서 코드(830)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 장치와 같은 데이터 저장 유닛(828)을 포함하는 다양한 장치가 제2 버스(820)에 결합될 수 있다. 또한 오디오 입출력(I/O)(824)이 제2 버스(820)에 결합될 수 있다. 실시예는 스마트 셀룰러 전화, 태블릿 컴퓨터, 넷북, 울트라북(상표) 등과 같은 이동 장치를 포함하는 다른 타입의 시스템 내에 통합될 수 있다.
다른 실시예가 아래에 설명된다.
일례에서, 시스템은 호스트 애플리케이션의 실행 시간에 상기 호스트 애플리케이션 내의 엔클레이브 초기화 코드를 자동으로 실행하기 위한 프로세서를 포함한다. 상기 엔클레이브 초기화 코드는 상기 호스트 애플리케이션으로부터 분리된 보안 엔클레이브를 생성하기 위한 마샬링 코드를 포함하며, 상기 마샬링 코드는 상기 호스트 애플리케이션의 빌드 시간에 생성된다. 상기 시스템은 또한 상기 보안 엔클레이브를 저장하기 위한 전용 동적 랜덤 액세스 메모리(DRAM) 부분을 포함하는 DRAM을 포함한다.
일례에서, 상기 엔클레이브 초기화 코드는 상기 호스트 애플리케이션과 상기 보안 엔클레이브 간의 원격 인터페이스를 정의한다.
일례에서, 상기 프로세서는 프록시/브리지 쌍을 통해 상기 호스트 애플리케이션과 상기 보안 엔클레이브 간의 데이터를 마샬링한다.
일례에서, 상기 프로세서는 상기 엔클레이브 초기화 코드의 실행을 통해 프록시를 자동으로 인스턴스화한다. 상기 프록시는 상기 호스트 애플리케이션이 상기 보안 엔클레이브와 통신하는 것을 가능하게 한다.
일례에서, 상기 프록시는 호출되는 메소드에 응답하여 상기 보안 엔클레이브로의 운반을 위해 하나 이상의 파라미터를 패키징하도록 동작할 수 있다.
일례에서, 상기 프로세서는 또한 상기 보안 엔클레이브에서 수신되는 상기 하나 이상의 파라미터를 언팩킹하도록 동작할 수 있는 브리지를 인스턴스화한다.
일례에서, 상기 프로세서는 또한 운반 계층을 제1 채널 인터페이스로서 추상화한다. 상기 운반 계층은 상기 프록시를 상기 브리지와 매칭시키도록 동작할 수 있다.
일례에서, 상기 프로세서는 상기 호스트 애플리케이션과 제2 보안 엔클레이브 간의 제2 채널 인터페이스를 인스턴스화하고, 상기 제1 채널 인터페이스와 상기 제2 채널 인터페이스를 적층하여, 상기 보안 엔클레이브와 상기 제2 보안 엔클레이브 간의 엔클레이브간 절차 호출을 가능하게 한다.
일례에서, 상기 엔클레이브 초기화 코드의 실행은 상기 보안 엔클레이브의 엔트리 포인트로서 사용되는 루트 객체를 인스턴스화한다.
위의 예 중 어느 하나를 포함하는 일례에서, 상기 엔클레이브 초기화 코드는 하나 이상의 마샬링 가능 데이터 구조체를 지시하기 위한 소스내 주석을 포함하는 소스 코드에 기초한다.
다른 예에서, 방법은 호스트 애플리케이션의 빌드 시간에 엔클레이브 초기화 코드를 생성하기 위한 하나 이상의 주석을 포함하는 소스 코드를 컴파일러 로직에 의해 컴파일하는 단계를 포함한다. 상기 엔클레이브 초기화 코드는 상기 호스트 애플리케이션의 실행 시간에 상기 호스트 애플리케이션으로부터 분리된 보안 엔클레이브를 생성하기 위한 마샬링 코드를 포함한다.
일례에서, 상기 방법은 상기 컴파일러 로직이 주석을 만날 때, 상기 주석과 관련된 주석 달린 인터페이스의 마샬링 가능성을 결정하기 위하여 주석 프로세서를 상기 컴파일러 로직에 의해 호출하는 단계를 포함한다.
일례에서, 상기 방법은 상기 컴파일러 로직에 의해 노출된 상기 주석 프로세서에 의해, 상기 주석 프로세서가 상기 주석 달린 인터페이스가 마샬링 가능한 것으로 결정할 때 상기 마샬링 코드를 생성하는 단계를 포함한다.
일례에서, 실행 시간에, 상기 마샬링 코드는 메소드 호출을 마샬링하기 위해 프록시 클래스를 상기 호스트 애플리케이션 내에 배치하고, 상기 메소드 호출을 언마샬링하기 위해 브리지 클래스를 상기 보안 엔클레이브 내에 배치한다.
일례에서, 기기가 전술한 방법 중 어느 하나를 수행할 수 있다.
일례에서, 적어도 하나의 머신 판독 가능 매체는 컴퓨팅 장치 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 장치로 하여금 전술한 방법 중 어느 하나를 수행하게 하는 명령어를 포함한다.
일례는 전술한 방법 중 어느 하나를 수행하기 위한 수단을 포함한다.
다른 예에서, 시스템은 호스트 애플리케이션과 제1 보안 엔클레이브 간의 제1 채널 인터페이스를 통해, 이어서 상기 호스트 애플리케이션과 제2 보안 엔클레이브 간의 제2 채널 인터페이스를 통해 상기 제1 보안 엔클레이브로부터 상기 제2 보안 엔클레이브의 루트 객체로의 호출을 가능하게 하기 위한 프로세서를 포함한다. 상기 시스템은 또한 상기 제1 보안 엔클레이브를 저장하기 위한 동적 랜덤 액세스 메모리(DRAM)를 포함한다.
일례에서, 상기 프로세서는 상기 제1 채널 인터페이스에 대응하는 제1 프록시/브리지 쌍 및 상기 제2 채널 인터페이스에 대응하는 제2 프록시/브리지 쌍을 인스턴스화한다.
일례에서, 상기 제1 프록시/브리지 쌍 및 제2 프록시/브리지 쌍 각각은 상기 호스트 애플리케이션의 실행 시간에 인스턴스화된다.
일례에서, 상기 프로세서는 제1 프록시 및 제1 브리지를 포함하는 상기 제1 프록시/브리지 쌍을 통해 상기 제1 보안 엔클레이브와 상기 호스트 애플리케이션 간의 데이터를 마샬링한다. 상기 호스트는 또한 제2 프록시 및 제2 브리지를 포함하는 상기 제2 프록시/브리지 쌍을 통해 상기 호스트 애플리케이션과 상기 제2 보안 엔클레이브 간의 데이터를 마샬링한다.
일례에서, 상기 데이터는 상기 제1 프록시에서 마샬링되며, 상기 제1 브리지에서의 상기 데이터의 언마샬링 없이 상기 제2 브리지에서 언마샬링된다.
일례에서, 상기 프로세서는 또한 상기 호스트 애플리케이션의 실행 시간 동안 상기 제2 보안 엔클레이브의 상기 루트 객체를 인스턴스화한다.
다른 예에서, 적어도 하나의 컴퓨터 판독 가능 저장 매체는 소스 코드 내의 적어도 하나의 주석에 응답하여 상기 소스 코드의 컴파일로부터 자동으로 생성되는 엔클레이브 생성기의 실행에 의해 보안 엔클레이브(SE)-인에이블드 애플리케이션이 논-SE-인에이블드 하드웨어 상에서 실행되는 것을 가능하게 하기 위해 시스템이 루트 객체를 인스턴스화하게 하기 위한 명령어를 저장한다. 상기 루트 객체는 상기 SE-인에이블드 애플리케이션의 실행 시간에 인스턴스화된다.
일례에서, 상기 SE-인에이블드 애플리케이션이 비보안 인에이블드 하드웨어 상에서 실행되는 것을 가능하게 하는 것은 상기 SE-인에이블드 애플리케이션과 관련된 파라미터를 마샬링하기 위한 브리지의 사용 없이 상기 보안 엔클레이브에 대한 액세스를 허가한다.
일례에서, 상기 적어도 하나의 컴퓨터 판독 가능 저장 매체는 상기 루트 객체의 인스턴스화 시에 프록시의 인스턴스화 또는 브리지의 인스턴스화 없이 상기 SE-인에이블드 애플리케이션의 호출자에게 루트 인터페이스를 반환하기 위한 명령어를 포함한다.
일례에서, 상기 적어도 하나의 컴퓨터 판독 가능 저장 매체는 객체 코드의 빌드 시간 동안 컴파일러에 의해, 상기 컴파일러에 의해 해석되고 있는 소스 코드 내의 제1 주석을 검출하고, 상기 제1 주석에 기초하여 빌드 시간에 마샬링 코드를 생성하기 위해 주석 프로세서를 호출하기 위한 명령어를 포함한다.
다른 예에서, 적어도 하나의 컴퓨터 판독 가능 저장 매체는 시스템이 하나 이상의 주석을 포함하는 소스 코드로부터 호스트 애플리케이션의 빌드 시간에 생성된 엔클레이브 초기화 코드를 실행하게 하기 위한 명령어를 저장한다. 상기 엔클레이브 초기화 코드는 상기 호스트 애플리케이션의 실행 시간에 상기 호스트 애플리케이션으로부터 분리된 보안 엔클레이브를 생성하기 위한 마샬링 코드를 포함한다.
일례에서, 실행 시간에, 상기 마샬링 코드는 메소드 호출을 마샬링하기 위해 프록시 클래스를 상기 호스트 애플리케이션 내에 배치하고, 상기 마샬링 코드는 상기 메소드 호출을 언마샬링하기 위해 브리지 클래스를 상기 보안 엔클레이브 내에 배치한다.
실시예는 많은 상이한 타입의 시스템에서 이용될 수 있다. 예로서, 일 실시예에서, 통신 장치는 본 명세서에서 설명되는 다양한 방법 및 기술을 수행하도록 배열될 수 있다. 물론, 본 발명의 범위는 통신 장치로 한정되지 않으며, 대신 다른 실시예는 명령어를 처리하기 위한 다른 타입의 기기, 또는 컴퓨팅 장치 상에서 실행되는 것에 응답하여 장치로 하여금 본 명세서에서 설명되는 하나 이상의 방법 및 기술을 수행하게 하는 명령어를 포함하는 하나 이상의 머신 판독 가능 매체에 전용화될 수 있다.
실시예는 코드로 구현될 수 있고, 명령어를 실행하도록 시스템을 프로그래밍하는 데 사용될 수 있는, 명령어를 저장하는 비일시적 저장 매체 상에 저장될 수 있다. 저장 매체는 플로피 디스크, 광 디스크, 반도체 드라이브(SSD), 컴팩트 디스크 판독 전용 메모리(CD-ROM), 재기록 가능 컴팩트 디스크(CD-RW) 및 광자기 디스크를 포함하는 임의 타입의 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 예로서 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 소거 및 프로그래밍 가능 판독 전용 메모리(EPROM), 플래시 메모리, 전기적 소거 및 프로그래밍 가능 판독 전용 메모리(EEPROM)와 같은 반도체 장치, 자기 또는 광학 카드, 또는 전자 명령어를 저장하는 데 적합한 임의의 다른 타입의 매체를 포함할 수 있지만 이에 한정되지 않는다.
본 발명은 제한된 수의 실시예와 관련하여 설명되었지만, 이 분야의 기술자는 그로부터 다수의 수정 및 변경을 인식할 것이다. 첨부된 청구항은 본 발명의 진정한 사상 및 범위 내에 속하는 바와 같은 모든 그러한 수정 및 변경을 포괄하는 것을 의도한다.

Claims (25)

  1. 호스트 애플리케이션의 실행 시간에 상기 호스트 애플리케이션 내의 엔클레이브 초기화 코드를 자동으로 실행하기 위한 프로세서 - 상기 엔클레이브 초기화 코드는 상기 호스트 애플리케이션으로부터 분리된 보안 엔클레이브를 생성하기 위한 마샬링 코드(marshaling code)를 포함하고, 상기 마샬링 코드는 상기 호스트 애플리케이션의 빌드 시간(build time)에 생성됨 -와,
    상기 보안 엔클레이브를 저장하기 위한 전용 동적 랜덤 액세스 메모리(DRAM) 부분을 포함하는 DRAM
    을 포함하는 시스템.
  2. 제1항에 있어서,
    상기 엔클레이브 초기화 코드는 상기 호스트 애플리케이션과 상기 보안 엔클레이브 간의 원격 인터페이스를 정의하는
    시스템.
  3. 제1항에 있어서,
    상기 프로세서는 프록시/브리지 쌍을 통해 상기 호스트 애플리케이션과 상기 보안 엔클레이브 간의 데이터를 마샬링하는
    시스템.
  4. 제1항에 있어서,
    상기 프로세서는 상기 엔클레이브 초기화 코드의 실행을 통해 프록시를 자동으로 인스턴스화하고, 상기 프록시는 상기 호스트 애플리케이션이 상기 보안 엔클레이브와 통신하는 것을 가능하게 하는
    시스템.
  5. 제4항에 있어서,
    상기 프록시는 호출되는 메소드에 응답하여 상기 보안 엔클레이브로의 운반을 위해 하나 이상의 파라미터를 패키징하도록 동작할 수 있는
    시스템.
  6. 제5항에 있어서,
    상기 프로세서는 또한 상기 보안 엔클레이브에서 수신되는 상기 하나 이상의 파라미터를 언팩킹하도록 동작할 수 있는 브리지를 인스턴스화하는
    시스템.
  7. 제6항에 있어서,
    상기 프로세서는 또한 운반 계층을 제1 채널 인터페이스로서 추상화하고, 상기 운반 계층은 상기 프록시를 상기 브리지와 매칭시키도록 동작할 수 있는
    시스템.
  8. 제7항에 있어서,
    상기 프로세서는
    상기 호스트 애플리케이션과 제2 보안 엔클레이브 간의 제2 채널 인터페이스를 인스턴스화하고,
    상기 제1 채널 인터페이스와 상기 제2 채널 인터페이스를 적층하여, 상기 보안 엔클레이브와 상기 제2 보안 엔클레이브 간의 엔클레이브간 절차 호출을 가능하게 하는
    시스템.
  9. 제1항에 있어서,
    상기 엔클레이브 초기화 코드의 실행은 상기 보안 엔클레이브의 엔트리 포인트로서 사용되는 루트 객체를 인스턴스화하는
    시스템.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 엔클레이브 초기화 코드는 하나 이상의 마샬링 가능 데이터 구조체를 지시하기 위한 소스내 주석을 포함하는 소스 코드에 기초하는
    시스템.
  11. 방법으로서,
    호스트 애플리케이션의 실행 시간에 상기 호스트 애플리케이션 내의 엔클레이브 초기화 코드를 자동으로 실행하는 단계를 포함하고,
    상기 엔클레이브 초기화 코드는 상기 호스트 애플리케이션으로부터 분리된 보안 엔클레이브를 생성하기 위한 마샬링 코드를 포함하고,
    상기 마샬링 코드는 상기 호스트 애플리케이션의 빌드 시간에 생성되는
    방법.
  12. 제11항에 있어서,
    상기 호스트 애플리케이션과 상기 보안 엔클레이브 간의 원격 인터페이스를 정의하는 단계를 더 포함하는
    방법.
  13. 제11항에 있어서,
    프록시/브리지 쌍을 통해 상기 호스트 애플리케이션과 상기 보안 엔클레이브 간의 데이터를 마샬링하는 단계를 더 포함하는
    방법.
  14. 제11항에 있어서,
    상기 엔클레이브 초기화 코드의 실행을 통해 프록시를 자동으로 인스턴스화하는 단계를 더 포함하고, 상기 프록시는 상기 호스트 애플리케이션이 상기 보안 엔클레이브와 통신하는 것을 가능하게 하는
    방법.
  15. 제11항 내지 제14항 중 어느 한 항의 방법을 수행하기 위한 수단을 포함하는
    장치.
  16. 컴퓨팅 장치 상에서 실행되는 것에 응답하여, 상기 컴퓨팅 장치로 하여금 제11항 내지 제14항 중 어느 한 항의 방법을 수행하게 하는 명령어를 포함하는
    적어도 하나의 머신 판독 가능 매체.
  17. 호스트 애플리케이션과 제1 보안 엔클레이브 간의 제1 채널 인터페이스를 통해, 이어서 상기 호스트 애플리케이션과 제2 보안 엔클레이브 간의 제2 채널 인터페이스를 통해 상기 제1 보안 엔클레이브로부터 상기 제2 보안 엔클레이브의 루트 객체로의 호출을 가능하게 하기 위한 프로세서와,
    상기 제1 보안 엔클레이브를 저장하기 위한 동적 랜덤 액세스 메모리(DRAM)
    를 포함하는 시스템.
  18. 제17항에 있어서,
    상기 프로세서는 상기 제1 채널 인터페이스에 대응하는 제1 프록시/브리지 쌍 및 상기 제2 채널 인터페이스에 대응하는 제2 프록시/브리지 쌍을 인스턴스화하는
    시스템.
  19. 제18항에 있어서,
    상기 제1 프록시/브리지 쌍 및 상기 제2 프록시/브리지 쌍 각각은 상기 호스트 애플리케이션의 실행 시간에 인스턴스화되는
    시스템.
  20. 제18항에 있어서,
    상기 프로세서는
    제1 프록시 및 제1 브리지를 포함하는 상기 제1 프록시/브리지 쌍을 통해 상기 제1 보안 엔클레이브와 상기 호스트 애플리케이션 간의 데이터를 마샬링하고,
    제2 프록시 및 제2 브리지를 포함하는 상기 제2 프록시/브리지 쌍을 통해 상기 호스트 애플리케이션과 상기 제2 보안 엔클레이브 간의 데이터를 마샬링하는
    시스템.
  21. 제20항에 있어서,
    상기 데이터는 상기 제1 프록시에서 마샬링되며, 상기 제1 브리지에서의 상기 데이터의 언마샬링 없이 상기 제2 브리지에서 언마샬링되는
    시스템.
  22. 제17항 내지 제21항 중 어느 한 항에 있어서,
    상기 프로세서는 또한 상기 호스트 애플리케이션의 실행 시간 동안 상기 제2 보안 엔클레이브의 상기 루트 객체를 인스턴스화하는
    시스템.
  23. 적어도 하나의 컴퓨터 판독 가능 저장 매체로서,
    소스 코드 내의 적어도 하나의 주석에 응답하여 상기 소스 코드의 컴파일로부터 자동으로 생성되는 엔클레이브 생성기의 실행에 의해 보안 엔클레이브(SE)-인에이블드 애플리케이션이 논-SE-인에이블드 하드웨어 상에서 실행되는 것을 가능하게 하도록 시스템으로 하여금 루트 객체를 인스턴스화하게 하는 명령어를 저장하고,
    상기 루트 객체는 상기 SE-인에이블드 애플리케이션의 실행 시간에 인스턴스화되는
    적어도 하나의 컴퓨터 판독 가능 저장 매체.
  24. 제23항에 있어서,
    상기 SE-인에이블드 애플리케이션과 관련된 파라미터를 마샬링하기 위한 브리지의 사용 없이 상기 보안 엔클레이브에 대한 액세스를 허가하기 위한 명령어를 더 포함하는
    적어도 하나의 컴퓨터 판독 가능 저장 매체.
  25. 제23항에 있어서,
    상기 루트 객체의 인스턴스화 시에 프록시의 인스턴스화 또는 브리지의 인스턴스화 없이 상기 SE-인에이블드 애플리케이션의 호출자에게 루트 인터페이스를 반환하기 위한 명령어를 더 포함하는
    적어도 하나의 컴퓨터 판독 가능 저장 매체.
KR1020167023359A 2014-03-27 2015-03-27 보안 영역의 호출을 위한 객체 지향 마샬링 기법 KR101833341B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/227,411 US9864861B2 (en) 2014-03-27 2014-03-27 Object oriented marshaling scheme for calls to a secure region
US14/227,411 2014-03-27
PCT/US2015/022911 WO2015148881A1 (en) 2014-03-27 2015-03-27 Object oriented marshaling scheme for calls to a secure region

Publications (2)

Publication Number Publication Date
KR20160113254A true KR20160113254A (ko) 2016-09-28
KR101833341B1 KR101833341B1 (ko) 2018-02-28

Family

ID=54190800

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167023359A KR101833341B1 (ko) 2014-03-27 2015-03-27 보안 영역의 호출을 위한 객체 지향 마샬링 기법

Country Status (6)

Country Link
US (1) US9864861B2 (ko)
EP (2) EP3754510A1 (ko)
KR (1) KR101833341B1 (ko)
CN (1) CN106415506B (ko)
TW (1) TWI563385B (ko)
WO (1) WO2015148881A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190108574A (ko) * 2017-01-24 2019-09-24 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 크로스-플랫폼 엔클레이브 신원

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9864861B2 (en) * 2014-03-27 2018-01-09 Intel Corporation Object oriented marshaling scheme for calls to a secure region
US10044695B1 (en) 2014-09-02 2018-08-07 Amazon Technologies, Inc. Application instances authenticated by secure measurements
US9577829B1 (en) 2014-09-03 2017-02-21 Amazon Technologies, Inc. Multi-party computation services
US9246690B1 (en) 2014-09-03 2016-01-26 Amazon Technologies, Inc. Secure execution environment services
US10061915B1 (en) 2014-09-03 2018-08-28 Amazon Technologies, Inc. Posture assessment in a secure execution environment
US9754116B1 (en) 2014-09-03 2017-09-05 Amazon Technologies, Inc. Web services in secure execution environments
US10079681B1 (en) 2014-09-03 2018-09-18 Amazon Technologies, Inc. Securing service layer on third party hardware
US9491111B1 (en) 2014-09-03 2016-11-08 Amazon Technologies, Inc. Securing service control on third party hardware
US9584517B1 (en) * 2014-09-03 2017-02-28 Amazon Technologies, Inc. Transforms within secure execution environments
US9710622B2 (en) * 2015-02-23 2017-07-18 Intel Corporation Instructions and logic to fork processes of secure enclaves and establish child enclaves in a secure enclave page cache
US10353831B2 (en) * 2015-12-24 2019-07-16 Intel Corporation Trusted launch of secure enclaves in virtualized environments
US10055577B2 (en) 2016-03-29 2018-08-21 Intel Corporation Technologies for mutual application isolation with processor-enforced secure enclaves
IE20170239A1 (en) * 2016-11-14 2018-05-16 Google Llc System of Enclaves
US10311217B2 (en) * 2016-12-09 2019-06-04 Microsoft Technology Licensing, Llc Application piracy prevention with secure enclave protection of automatically modularized functions
CN108388524A (zh) * 2016-12-21 2018-08-10 伊姆西Ip控股有限责任公司 用于缓存数据的方法和设备
US11061703B2 (en) 2019-01-10 2021-07-13 International Business Machines Corporation Managed runtime data marshaling for native code access using a thread local native buffer
US11714895B2 (en) * 2019-07-18 2023-08-01 Anjuna Security, Inc. Secure runtime systems and methods
CN111414194B (zh) * 2020-03-19 2023-08-11 政采云有限公司 一种接口信息生成方法、系统、电子设备及存储介质

Family Cites Families (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6941556B1 (en) * 1995-03-24 2005-09-06 Sun Microsystems, Inc. Method and system for type identification for multiple object interfaces in a distributed object environment
US7930340B2 (en) * 1995-11-13 2011-04-19 Lakshmi Arunachalam Network transaction portal to control multi-service provider transactions
US6272538B1 (en) * 1996-07-30 2001-08-07 Micron Technology, Inc. Method and system for establishing a security perimeter in computer networks
US5857197A (en) * 1997-03-20 1999-01-05 Thought Inc. System and method for accessing data stores as objects
US6446116B1 (en) * 1997-06-30 2002-09-03 Sun Microsystems, Inc. Method and apparatus for dynamic loading of a transport mechanism in a multipoint data delivery system
US6128774A (en) * 1997-10-28 2000-10-03 Necula; George C. Safe to execute verification of software
US6167565A (en) * 1998-01-08 2000-12-26 Microsoft Corporation Method and system of custom marshaling of inter-language parameters
US6330677B1 (en) * 1998-10-27 2001-12-11 Sprint Communications Company, L. P. Object-based security system
US6594671B1 (en) * 1999-06-14 2003-07-15 International Business Machines Corporation Separating privileged functions from non-privileged functions in a server instance
US6519568B1 (en) * 1999-06-15 2003-02-11 Schlumberger Technology Corporation System and method for electronic data delivery
EP1117033A1 (en) * 2000-01-14 2001-07-18 Sun Microsystems, Inc. Dynamic dispatch function
US9785140B2 (en) * 2000-02-01 2017-10-10 Peer Intellectual Property Inc. Multi-protocol multi-client equipment server
US20020019843A1 (en) * 2000-04-26 2002-02-14 Killian Robert T. Multiprocessor object control
US6898710B1 (en) * 2000-06-09 2005-05-24 Northop Grumman Corporation System and method for secure legacy enclaves in a public key infrastructure
US6865607B1 (en) * 2001-06-28 2005-03-08 Microsoft Corp. Pluggable channels
EP1461679A4 (en) * 2001-11-12 2006-01-18 Worldcom Inc SYSTEM AND METHOD FOR THE FLUID IMPLEMENTATION OF MICRO-PAYMENTS RELATING TO CONSUMABLE SERVICES
US7213236B2 (en) * 2001-11-30 2007-05-01 Intrinsyc Software International, Inc. Method of bridging between .Net and Java
US7007142B2 (en) 2002-02-19 2006-02-28 Intel Corporation Network data storage-related operations
US8275910B1 (en) * 2003-07-02 2012-09-25 Apple Inc. Source packet bridge
US7831693B2 (en) * 2003-08-18 2010-11-09 Oracle America, Inc. Structured methodology and design patterns for web services
US7694328B2 (en) * 2003-10-21 2010-04-06 Google Inc. Systems and methods for secure client applications
JP4257235B2 (ja) * 2004-03-05 2009-04-22 株式会社東芝 情報処理装置および情報処理方法
US7444408B2 (en) * 2004-06-30 2008-10-28 Intel Corporation (A Delaware Corporation) Network data analysis and characterization model for implementation of secure enclaves within large corporate networks
GB0422750D0 (en) * 2004-10-13 2004-11-17 Ciphergrid Ltd Remote database technique
US20060101412A1 (en) * 2004-11-10 2006-05-11 Microsoft Corporation Method to bridge between unmanaged code and managed code
US7730522B2 (en) * 2005-05-16 2010-06-01 Microsoft Corporation Self-registering objects for an IPC mechanism
US7680800B2 (en) * 2005-05-20 2010-03-16 International Business Machines Corporation Algorithm to marshal/unmarshal XML schema annotations to SDO dataobjects
ES2658097T3 (es) 2005-11-18 2018-03-08 Security First Corporation Método y sistema de análisis de datos seguro
US20070234412A1 (en) * 2006-03-29 2007-10-04 Smith Ned M Using a proxy for endpoint access control
US7873071B2 (en) * 2006-05-15 2011-01-18 The Boeing Company Multiple level security adapter
US8756616B2 (en) * 2006-12-29 2014-06-17 Core Wireless Licensing S.A.R.L. System and method for reducing the static footprint of mixed-language JAVA classes
US20100031342A1 (en) * 2007-04-12 2010-02-04 Honeywell International, Inc Method and system for providing secure video data transmission and processing
US20090063747A1 (en) * 2007-08-28 2009-03-05 Rohati Systems, Inc. Application network appliances with inter-module communications using a universal serial bus
US20090168758A1 (en) * 2007-12-31 2009-07-02 Sony Ericsson Mobile Communications Ab Methods for facilitating communication between internet protocol multimedia subsystem (ims) devices and non-ims devices and between ims devices on different ims networks and related electronic devices and computer program products
EP2286335A1 (en) * 2008-05-20 2011-02-23 Citrix Systems, Inc. Systems and methods for remoting calls issued to embedded or linked object interfaces
US8250666B2 (en) * 2008-07-03 2012-08-21 Sap Ag Method and apparatus for improving security in an application level virtual machine environment
US9262628B2 (en) 2009-09-11 2016-02-16 Empire Technology Development Llc Operating system sandbox
US8255607B2 (en) * 2009-11-05 2012-08-28 Emulex Design & Manufacturing Corporation SAS expander-based SAS/SATA bridging
US9087200B2 (en) * 2009-12-22 2015-07-21 Intel Corporation Method and apparatus to provide secure application execution
KR101457355B1 (ko) * 2009-12-22 2014-11-04 인텔 코포레이션 보안 애플리케이션 실행을 제공하는 방법 및 장치
US20110202740A1 (en) * 2010-02-17 2011-08-18 Arm Limited Storing secure page table data in secure and non-secure regions of memory
KR101661201B1 (ko) * 2010-03-02 2016-09-30 삼성전자주식회사 휴대용 단말기에서 줌 마이크 기능을 지원하기 위한 장치 및 방법
US8353013B2 (en) * 2010-04-28 2013-01-08 Bmc Software, Inc. Authorized application services via an XML message protocol
US8312258B2 (en) 2010-07-22 2012-11-13 Intel Corporation Providing platform independent memory logic
US20120020374A1 (en) * 2010-07-26 2012-01-26 Kenneth Jonsson Method and System for Merging Network Stacks
GB2484717B (en) * 2010-10-21 2018-06-13 Advanced Risc Mach Ltd Security provision for a subject image displayed in a non-secure domain
US8972746B2 (en) * 2010-12-17 2015-03-03 Intel Corporation Technique for supporting multiple secure enclaves
US8832452B2 (en) * 2010-12-22 2014-09-09 Intel Corporation System and method for implementing a trusted dynamic launch and trusted platform module (TPM) using secure enclaves
EP2482220A1 (en) * 2011-01-27 2012-08-01 SafeNet, Inc. Multi-enclave token
US8914876B2 (en) * 2011-05-05 2014-12-16 Ebay Inc. System and method for transaction security enhancement
US20120303854A1 (en) * 2011-05-24 2012-11-29 Raidundant LLC Modular interface-independent storage solution system
US8590005B2 (en) 2011-06-08 2013-11-19 Adventium Enterprises, Llc Multi-domain information sharing
US20130031454A1 (en) * 2011-07-28 2013-01-31 Peter Griffiths System for Programmatically Accessing Document Annotations
US8695021B2 (en) 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
US9047476B2 (en) * 2011-11-07 2015-06-02 At&T Intellectual Property I, L.P. Browser-based secure desktop applications for open computing platforms
US20130152153A1 (en) * 2011-12-07 2013-06-13 Reginald Weiser Systems and methods for providing security for sip and pbx communications
US9183064B2 (en) * 2011-12-30 2015-11-10 General Electric Company Intelligent mediation of messages in a healthcare product integration platform
WO2013147891A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Client security scoring
WO2013172958A1 (en) * 2012-05-16 2013-11-21 Spydrsafe Mobile Security, Inc. Systems and methods for providing and managing distributed enclaves
US20140006919A1 (en) * 2012-06-29 2014-01-02 3S International, Llc. Method and apparatus for annotation content conversions
US20140040973A1 (en) * 2012-08-02 2014-02-06 Samsung Electronics Co., Ltd. Method for controlling initial access rights to open mobile alliance device management servers
US9747102B2 (en) * 2012-12-28 2017-08-29 Intel Corporation Memory management in secure enclaves
US20140189246A1 (en) * 2012-12-31 2014-07-03 Bin Xing Measuring applications loaded in secure enclaves at runtime
US9176712B2 (en) * 2013-03-14 2015-11-03 Oracle International Corporation Node Grouped Data Marshalling
US9086966B2 (en) * 2013-03-15 2015-07-21 Intel Corporation Systems, apparatuses, and methods for handling timeouts
US9087202B2 (en) * 2013-05-10 2015-07-21 Intel Corporation Entry/exit architecture for protected device modules
US20150033034A1 (en) * 2013-07-23 2015-01-29 Gideon Gerzon Measuring a secure enclave
US9276750B2 (en) * 2013-07-23 2016-03-01 Intel Corporation Secure processing environment measurement and attestation
WO2015047442A1 (en) * 2013-09-27 2015-04-02 Mcafee, Inc. Trusted execution of an executable object on a local device
US9536063B2 (en) * 2013-10-24 2017-01-03 Intel Corporation Methods and apparatus for protecting software from unauthorized copying
US10691618B2 (en) * 2013-12-17 2020-06-23 Intel Corporation Secure enclaves for use by kernel mode applications
US9448950B2 (en) * 2013-12-24 2016-09-20 Intel Corporation Using authenticated manifests to enable external certification of multi-processor platforms
US20150188710A1 (en) * 2013-12-28 2015-07-02 Simon Johnson Offloading functionality from a secure processing environment
US9934216B2 (en) * 2014-03-24 2018-04-03 Ca, Inc. Schema validation for metadata builder
US9436825B2 (en) * 2014-03-25 2016-09-06 Owl Computing Technologies, Inc. System and method for integrity assurance of partial data
US9864861B2 (en) * 2014-03-27 2018-01-09 Intel Corporation Object oriented marshaling scheme for calls to a secure region

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190108574A (ko) * 2017-01-24 2019-09-24 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 크로스-플랫폼 엔클레이브 신원

Also Published As

Publication number Publication date
EP3123340A1 (en) 2017-02-01
WO2015148881A1 (en) 2015-10-01
EP3123340B1 (en) 2020-10-28
CN106415506B (zh) 2019-08-13
KR101833341B1 (ko) 2018-02-28
CN106415506A (zh) 2017-02-15
TWI563385B (en) 2016-12-21
TW201544955A (zh) 2015-12-01
US9864861B2 (en) 2018-01-09
US20150278528A1 (en) 2015-10-01
EP3123340A4 (en) 2017-11-01
EP3754510A1 (en) 2020-12-23

Similar Documents

Publication Publication Date Title
KR101833341B1 (ko) 보안 영역의 호출을 위한 객체 지향 마샬링 기법
JP6083097B2 (ja) ハードウェア保護アプリケーションのシステム・サービス要求相互作用を容易化する方法
Welsh et al. Jaguar: enabling efficient communication and I/O in Java
US7219329B2 (en) Systems and methods providing lightweight runtime code generation
US8505029B1 (en) Virtual machine communication
JP2020509443A (ja) ブロックチェーン上のネイティブ契約を実施するためのシステムおよび方法
EP3350696B1 (en) Overriding a migrated method of an updated type
US7533388B1 (en) Method and apparatus for dynamic Stubs and Ties in RMI-IIOP
US7840964B2 (en) Mechanism to transition control between components in a virtual machine environment
US11366684B2 (en) Import mechanism for hardware intrinsics
EP3607432B1 (en) Flow-based scoping
WO2024045382A1 (zh) 区块链中实现反射机制
US8589951B2 (en) Conserving memory by using objects that are selectably mutable during runtime
US20080114804A1 (en) System and method for interoperating with foreign objects from a single language computing environment
US8201185B2 (en) COM object and managed code object interoperability
CN107766119A (zh) 一种脚本语言接口的处理方法、装置和设备
US10802855B2 (en) Producing an internal representation of a type based on the type's source representation
CN110888674B (zh) 在Python虚拟机中执行安全计算的方法及装置
Fischer et al. RPC based framework for partitioning IoT security software for trusted execution environments
US7526773B2 (en) Parsing and handling events from .NET objects
Feske Genode operating system framework
US20010007146A1 (en) Method for providing a set of software components
Webb Object-Capability Programming Languages on the seL4 Capability-based Microkernel
CN114860382A (zh) 数据处理方法及装置
Morris Emulating Multiple Inheritance in Fortran 2003/2008

Legal Events

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