KR20140053757A - 소프트웨어 라이브러리에서의 다양한 변형을 통한 압축과 보호를 위한 시스템과 방법 - Google Patents

소프트웨어 라이브러리에서의 다양한 변형을 통한 압축과 보호를 위한 시스템과 방법 Download PDF

Info

Publication number
KR20140053757A
KR20140053757A KR1020127028138A KR20127028138A KR20140053757A KR 20140053757 A KR20140053757 A KR 20140053757A KR 1020127028138 A KR1020127028138 A KR 1020127028138A KR 20127028138 A KR20127028138 A KR 20127028138A KR 20140053757 A KR20140053757 A KR 20140053757A
Authority
KR
South Korea
Prior art keywords
security
optimization
library
transformations
instance
Prior art date
Application number
KR1020127028138A
Other languages
English (en)
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 KR20140053757A publication Critical patent/KR20140053757A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • 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/54Monitoring 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 adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2145Inheriting rights or properties, e.g., propagation of permissions or restrictions within a hierarchy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2149Restricted operating environment

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

연성 소프트웨어 라이브러리 내 상기 소프트웨어 모듈은 추상적인 중간 표현으로 정의된다. 상기 연성 라이브러리는 상기 라이브러리 설정자보다는 보안성 변환 및 상기 최종 사용자에 의한 작업 속성 선택을 허용한다. 나아가, 상기 연성 라이브러리는 소프트웨어 모듈들의 추상적인 표현을 포함하고 있으므로, 상기 라이브러리는 또한 그러한 결정들로부터 비롯되는 대응하는 네이티브 목적 코드와 함께 지정된 인스턴스들, 보안 및 작업 결정을 대표하는 특정 값들의 집합, 작업 결정들의 임의 숫자를 포함하여 프로비저닝될 수 있다. 즉, 완전히 플랫폼 독립적인 방식으로 소스파일과 같은 소유 정보의 상기 노출을 피하면서 소프트웨어 모듈들의 배포를 허가한다.

Description

소프트웨어 라이브러리에서의 다양한 변형을 통한 압축과 보호를 위한 시스템과 방법{A SYSTEM AND METHOD FOR ENCAPSULATING AND ENABLING PROTECTION THROUGH DIVERSE VARIATIONS IN SOFTWARE LIBRARIES}
본 발명은 탬퍼링으로부터 소프트웨어를 보호하는 방법과 시스템에 관한 것으로서, 보다 상세하게는, 소프트웨어 라이브러리들을 보호하기 위한 방법과 시스템에 관한 것이다.
소프트웨어 라이브러리들은 충분한 어플리케이션 발전에 앞서 기존에는 서브 또는 부분적인 프로그램으로 압축되어 사용되어 왔다. 소프트웨어 라이브러리는 잘 정의된 어플리케이션 프로그램 인터페이스(Application Program Interfaces; APIs)의 집합을 제공하며, 특정한 기능의 수행, APIs를 통한 작동을 포함한다. 상기 라이브러리는 단수의 개체(entity)로 패키지된다.
상기 라이브러리 모델은 많은 이점들을 가진다. 이러한 이점들에는 상기 라이브러리는 통합(integrating) 소프트웨어 부분으로부터 발생(originating) 소프트웨어 부분으로 분리되기 때문에 재사용모듈로 부분적으로 완벽한 소프트웨어로 압축하여 다중 부분 개발을 허용한다. 모듈의 라이브러리에서의 소프트웨어 압축은 역시 코드를 재사용할 수 있게 한다. 또한, 특정한 디자인의 요구가 아니더라도, 라이브러리들은 역시 프리컴파일(pre-compiled)로, 보통 객체 형식, 모듈들을 소스 코드 보호의 정도를 허용한다. 그러나 완강한 공격자는 상기 라이브러리로부터 설정된 실행을 리버스엔지니어링(reverse-engineering)할 수 있다.
상기 소프트웨어 라이브러리는 1970년대와 80년대 이래로 거의 발전하지 못했다. 기존의 소프트웨어 라이브러리들은 보통 재배치 심볼들과 같은 좀 더 높은 레벨의 컨셉들 외에 실행 명령과 매우 밀접한 목적 코드(object-code)를 포함한다. 그러한 목적 코드의 상기 속성은 상기 라이브러리 설정자가 보안 및 작업 속성들을 포함한 상기 코드의 가장 실행가능한 측면을 상기 최종 사용자에게 배포되기 전 라이브러리 설정시간에 정적으로 결정하는 것을 필요로 한다. 부가적인 툴링(tooling)은 링커 또는 동적 로더의 형태로 상기 목적 코드를 상기 어플리케이션 실행의 어드레스 공간으로 재배치하여, 소프트웨어 라이브러리의 상기 소프트웨어 라이브러리의 기능을 포함하는 실행 어플리케이션을 구축하는 것을 가능하도록 한다(예를 들어, J. Levine, Linkers and Loaders, Morgan Kaufmann Publishers, 2000을 참조).
따라서 리버스엔지니어링(reverse-engineering)에 저항하는 다양한 이진법들의 설정을 가능하게 하는 라이브러리 양식을 제공하는 것이 바람직하다.
본 발명은 소프트웨어 모듈들의 다수의 다이버스 인스턴스(diverse instance)들을 포함하는 소프트웨어 모듈들의 라이브러리를 설정하는 방법을 제공한다. 상기 방법들은 컴퓨터 프로그램 결과물로 예시될 수 있다.
상기 방법은 라이브러리 소스 코드 파일로부터 상기 소프트웨어 모듈들의 추상적인 중간 표현(intermediate representation)을 생성하는 것을 포함한다. 상기 중간 표현의 생성은 예를 들면, 어휘(lexical) 및 구문(syntactical) 컨텐트(content)를 상기 어휘 및 구문 컨텐트(content)가 플랫폼 의존적(platform-dependent) 컨텐트(content) 또는 플랫폼 독립적(platform-independent) 컨텐트(content)를 포함하는 곳에서 제거하는 단계를 포함한다. 상기 중간 표현은 대칭적인 키 암호화를 사용함으로써 암호화될 수 있다. 상기 중간적 표현은 보안과 소프트웨어 모듈들에 적용되는 보안과 최적화 변환을 위한 최적화 디폴트를 나타내는 메타데이터로 패키지 될 수 있다. 상기 소프트웨어 모듈들의 복수의 다이버스 인스턴스(diverse instance)들은 인스턴스를 생성하는 중간표현으로의 개별 보안 및 최적화 전환을 적용하여 생성되고, 복수의 다이버스 인스턴스(diverse instance)들은 소프트웨어 라이브러리 내에서 패키지된다. 상기 방법은 소프트웨어 모듈들의 목적 코드 인스턴스를 생성하는 소스코드 인스턴스를 수집하는 것을 포함한다.
상기 소프트웨어 모듈들의 복수의 다이버스 인스턴스(diverse instance)들의 생성은 각 다이버스 인스턴스(diverse instance)마다 보안의 개별집합과 중간표현으로의 최적화 전환하는 실행단계; 및 상기 중간 표현의 인스턴스를 소프트웨어 모듈들의 소스코드 인스턴스로 변형하는 단계를 포함할 수 있다. 프로그램 변환과 같은 상기 보안과 최적화 변환의 어플리케이션, 특히 데이터 흐름 그리고/또는 제어 흐름 변환들은 사용자 공급의 보안과 최적화 결정에 의해 결정되는 보안과 최적화 변환을 포함할 수 있고, 상기 사용자 공급의 보안 및 최적화 결정이 상기 보안과 최적화 디폴트와 일치하는지 여부를 결정하는 것을 더 포함할 수 있다.
각 인스턴스에 적용되는 상기 보안과 최적화 변환을 나타내는 복수의 다양한 목적 코드 인스턴스들과 메타데이터는 소프트웨어 라이브러리 내에서 패키지될 수 있다. 상기 방법은 복수의 목적 코드 인스턴스들 중 하나의 인스턴스를 실행 프로그램 이미지를 제공하기 위해 컴파일드 어플리케이션 목적 파일에 연결(liking)하는 것을 더 포함 수 있고, 예를 들면, 각 인스턴스에 적용되는 상기 보안 및 최적화 변환들을 나타내는 메타데이터를 비교함으로써 목적 코드에 적용되는 상기 개별 보안 및 최적화 변환들이 두 번째 목적 코드 인스턴스에 적용되는 보안성 및 최적화 변환과 일치하는지 여부를 결정하는 것을 더 포함할 수 있다.
상기 방법은 두 번째 중간 표현을 가지는 라이브러리에 적용되는 보안과 최적화 변환들의 측면에서 개별 보안과 최적화 변환들을 더 포함할 수 있다.
상기 도면들은 관련된 설명과 함께 본 발명의 일부 원리들을 설명하는 데 기여하도록 예시적인 실시예들을 나타낸다. 첨부된 도면들에 있어서,
도 1은 보안성 변환을 가지는 소프트웨어 라이브러리의 선행 기술 생성을 나타낸다.
도 2는 본 발명에 따른 소프트웨어 라이브러리의 생성을 나타낸다.
도 3은 상기 연성 라이브러리 생성 도구의 작동을 나타낸다.
도 4는 제공 도구의 작동을 나타낸다.
도 5는 제공 도구 작동의 실시예를 더 나타낸다.
도 6은 트랜스코딩 도구의 작동을 나타낸다.
도 7은 다중의 독립적인 연성 라이브러리들의 제공을 나타낸다.
도 8은 연성 라이브러리 링커의 작동을 나타낸다.
도 9는 다중 라이브러리들과 연성 라이브러리 링커의 작동을 나타낸다.
일반적으로 본 발명은 향상된 소프트웨어 라이브러리 모델 및 설정 방법을 제공한다. 추상적인 중간 표현을 사용하여 모듈들로 소프트웨어의 패키지를 정의하는 "연성(flexible)" 라이브러리가 나타난다. 상기 연성 라이브러리는 보안성 변환의 선택 및 상기 라이브러리 설정자 보다는 상기 최종 사용자(소프트웨어 간 통합)에 의해 생성되는 작업을 허용할 수 있다. 또한 상기 연성 라이브러리는 상기 소프트웨어 모듈들의 추상적 표현을 포함하기 때문에, 상기 라이브러리는 또한 보안성 및 작업 결정의 특정한 집합값들을 표현하는 "인스턴스들"이라는 이름의 임의의 숫자를 작동 결정으로부터 대응하는 네이티브 목적 코드에 따라 포함하게 된다. 상기 소프트웨어 모듈들의 수집은 보안성 변환과 작동 최적화를 상기 소프트웨어 모듈들의 설정자 보다는 상기 최종 사용자에 의하여 선택되도록 허용하여 소스파일들과 같은 등록된 정보의 상기 노출을 피하면서 완전히 플랫폼 독립적인 방법으로 소프트웨어 모듈들의 배급을 허용하는 연성 라이브러리의 형식으로 패키지될 수 있다. 상기 연성 라이브러리 포맷의 이점은 연성라이브러리는 완비되는 시간차 공격들에 저항하는 시간차 실행들을 설정하는 상기 능력을 제공하는 무제한의 다이버스 인스턴스(diverse instance)들로 프로비저닝(provisioned)될 수 있다는 점이다.
정적인 목적 코드로 구성된 기존의 소프트웨어 라이브러리들에서는, 상기 라이브러리에 의해 공급되는 상기 정확한 실행이 고정된다. 상기 보안성 및 실행의 작동과 연관되는 결정은 라이브러리가 설정되기 전에 이루어져서, 상기 최종 사용자(소프트웨어 간 통합)에 의해 변경될 수 없다. 만약 다양한 프로그램 변환들의 상기 어플리케이션을 통하여 보안성을 보안하려면, 상기 라이브러리 설정자는 각 카피(copy)가 오직 보안성 및 작업 결정의 오직 하나의 집합을 통합할 수 있기 때문에 상기 소프트웨어 라이브러리의 복수의 다양한 카피(copy)들을 설정하고 배포하여야 한다. 또한, 상기 라이브러리의 상기 보안성 결정들은 상기 라이브러리 어플리케이션 프로그램 인터페이스(Application Program Interfaces; APIs)를 작동할 상기 어플리케이션 코드의 정확한 속성을 고려하지 않는다. 따라서 상기 라이브러리 설정자는 완전히 포괄적인 보안성 결정을 하거나(예를 들어, 임의적 실시 구문들), 상기 실시 구문의 속성에 대한 추정을 하여 결과적으로 상기 라이브러리가 사용될 수 있는 방법들을 제한한다.
기존의 소프트웨어 라이브러리들의 더한 제한은 목적코드가 단수 플랫폼, 보통 하드웨어 아키텍처(architecture)와 상기 작동 시스템의 조합에 원래부터 타겟되도록 하는 것이다. 상기 소프트웨어 라이브러리의 소스 코드가 완전히 플랫폼 독립적인 방식으로 쓰이더라도 상술한 점은 사실이다. 만약 이동가능한 소프트웨어 라이브러리를 제공하려고 한다면, 다시 말해, 하드웨어 아키텍쳐와 작동시스템의 임의 조합을 사용하고자 한다면, 상기 최종 사용자는 플랫폼 특정의 컴파일러와 라이브러리 툴링을 이용하여 상기 선택한 플랫폼으로 상기 라이브러리를 재구축하여야만 한다. 적어도 두 가지 이유로 받아들일 수 없는 이유로 상기 라이브러리 소스 코드의 상기 배포가 요구된다. 첫째, 상기 소스 코드, 알고리즘, 상기 라이브러리 설정자의 디자인 선택을 상기 소프트웨어 라이브러리의 상기 등록 정보를 드러낸다; 둘째, 상기 최종 사용자에게 상기 라이브러리 그 자체를 어떻게 구축할 것인지에 대한 상세한 설명을 이해할 필요가 있도록 한다는 것이다.
적대적인 환경에서 소프트웨어를 보호하기 위하여, 프로그램 변환들은 소프트웨어에 대한 리버스엔지니어링과 탬퍼링 공격에 저항하는 효과적인 방법들을 보여준다. 또한, 그러한 보안성 변환의 상기 다양화는 시간차 공격들, 공모, 다른 비교 위협들에 대한 장벽으로 작용할 수 있다. 아주 많은 수의 프로그램 인스턴스들은 비교수단들을 통하여 프로그램 정보를 검색하는 공격자들의 능력을 감퇴시킨다. 본 발명의 상기 방법과 시스템은 프로그램 변환과 소프트웨어 라이브러리에 대한 다변화로 적용할 수 있다.
도 1은 보안성 변환들을 포함하는 기존의 소프트웨어 라이브러리를 설정하고 사용하는 보통의 작업흐름(workflow)을 나타낸다. 상기 라이브러리 소스 파일들(102), 또는 라이브러리 모듈들은 사용자 결정의 보안성 결정들(108)에 기초하여 프로그램 변환들과 같은 보안성 및 최적화 변환을 포함하는 변환된 소스파일들(106)을 생성하면서 우선 상기 라이브러리 모듈들 의 소스 간 번역을 하는(102) "트랜스코더(104)"에 의하여 진행된다. 예를 들어, 2003년 7월 15일 자 미국 특허 출원 제 6,594,761호 및 2005년 1월 11일 자 미국 특허 출원 제 6,842,862호는 소프트웨어를 보호하는 데 사용되는 데이터 흐름 변환을 나타낸다; 또한 2004년 8월 17일 자 미국 특허 출원 제 6,779,114호는 소프트웨어를 보호하는 데 사용될 수 있는 제어 흐름 변환 기술을 설명한다. 미국 특허 제 6,594,761호, 미국 특허 제 6,842,862호, 미국 특허 제 6,779,114호는 여기에 전체로서 참조되어 포함된다.
변환된 소스파일은 사용자 결정의 최적화 결정(112)에 기초한 속도/사이즈 작업 균형을 포함하는 목적 코드를 생성하면서 상기 네이티브 컴파일러(110)에 의해 진행된다. 상기 네이티브 목적 코드(114)는 최종사용자(소프트웨어 간 통합)까지 불변되는 소프트웨어 라이브러리(116)로 패키지되어 배포된다. 유사한 프로세스는 어플리케이션 소스파일들(118) 또는 어플리케이션 모듈들에 적용된다. 상기 통합자에 의해 제공된 어플리케이션 모듈들(118)은 보안 결정에 기초하여 변환된 어플리케이션 소스 파일들(122)을 제공하기 위하여 트랜스코더(120)에 입력된다. 상기 변환된 파일들은 변환된 네이티브 목적 파일들(126)을 제공하기 위하여 네이티브 컴파일러(124)에 의하여 컴파일된다. 상기 변환된 네이티브 목적 파일(126)과 상기 라이브러리(116)는 네이티브 링커(128)에 의하여 열거되어 네이티브 실행(130)을 제공하거나 라이브러리를 공유하게 된다. 만약 소프트웨어 라이브러리의 상기 보안 및 작업 결정이 재고되어야 할 필요가 있다면, 상기 라이브러리는 재구축되어 재분포되어야 할 것이다.
도 2는 상기 본 설명에 따라서 연성 라이브러리 소프트웨어 라이브러리를 설정하고 사용하는 상기 작업흐름을 나타낸다. 먼저, 상기 라이브러리 소스 파일(202)은 트랜스코딩 능력을 포함한 연성 라이브러리 설정 툴(204)에 의하여 프로세스된다. 변환된 소스파일들을 생성보다는, 프로비저닝되지 않은(unprovisioned) 연성 라이브러리(206)가 설정된다. 프로비저닝되지 않은(unprovisioned) 연성 라이브러리(206)는 상기 소스 파일들의 중간 표현(208)을 포함한다. 상기 중간 표현은 보안과 최적화 결정을 위한 디폴트 값들 그리고/또는 한계 범위와 같은, 환경설정(configuration) 파라미터(210)을 포함한다. 상기 환경설정 파라미터(210)는 상기 오리지널 소스 파일들(202)의 상기 중간 표현에 따라 명시될 수 있고(소스 파일 당 또는 전반적인 기준으로), 상기 연성 라이브러리(206)에 기록될 수 있다.
상기 광범위한 "프로비저닝되지 않은(unprovisioned)" 연성 라이브러리(206)는 상기 라이브러리 설정자(204)에 의해 구축됨에 따라 상기 라이브러리 실행의 상기 추상적인 중간 표현(208)만을 포함하고 목적 코드를 포함하지 않기 때문에 실행 어플리케이션을 설정하는 상기 최종 사용자에 의하여 직접적으로 사용될 수 있는 상태가 아니다. 상기 중간 표현(208)은 조건부 컴파일, 짜넣기 파일(include-files) 등과 같은 높은 레벨의 언어 전처리의 상기 결과를 포함한 기존 컴파일의 모든 "프런트 엔드(front-end)"측면과 모든 소스파일들(202)의 상기 모든 컨텐트(content)를 압축한다. 상기 파일 시스템 내의 파일의 상기 컨텐트(content)와 레이아웃과 같은 대상 기계/플랫폼 의존성들은 제거될 수 있으므로 상기 중간 표현(208)은 완전히 이동식이어서 상기 오리지널 라이브러리 구축 환경으로의 접근 없이도 상기 연성 라이브러리(206)를 배포하고 사용할 수 있게 한다. 상기 중간 표현(208)은 대단히 유능한 타겟 프로세서로 높은 수준의 조립 코드를 포함하여 표준 컴파일러 표현과 유사하다. 또한 상기 중간 표현(208)은 상기 데이터 흐름 및 제어 흐름 변환을 위에서 참조한 바와 같이 상기 프로그램 코드 내의 특정 개체들에 적용할 수 있는 보안성 지향의 프로그램 변환들의 확장들을 포함한다. 상기 추상적인 중간 표현(208)은 디폴트 값들, 조검 범위들, 프로비저닝되지 않은(unprovisioned) 연성 라이브러리(206)을 형성하는 것들에 대한 환경설정(confiquration) 파라미터(210)에 결합한다.
상기 프로비저닝되지 않은(unprovisioned) 연성 라이브러리(208)는 상기 라이브러리 설정자로부터 통합자까지 보유하고 있는 정보가 배포되기 때문에, 상기 보유한 정보는 보호되어야 한다. 상기 나타난 솔루션은 권한이 설정되지 않은 라이브러리를 보호하기 위해 암호화 스키마를 사용할 수 있다. 상기 중간 표현 및 환경설정(confiquration) 파라미터들은 라이브러리 설정 시간에 대칭적인 키 암호(예를 들어, AES)를 사용하여 암호화될 수 있다. 그러한 실행은 실행중 키들을 숨기기 위해 화이트박스 암호술을 이용할 수 있다(그 전체 컨텐트(content)가 2008년 7월 8일 자 미국 특허 출원 제 7,397,916호 및 2001년 12월 10일 자 미국 등록 특허 제 11/020,313호에 참조로서 포함되었다). 또한 프로비저닝 시간에, 상기 암호화되지 않은 중간 표현(208)이 결코 잘 보이지 않는다. 상기 중간 표현(208)은 상기 프로비저닝 단계에서의 사용에 따라 변환 및 암호화된 상태가 된다. 이 암호화된 상태는 무작위로 생성된 세션 키를 이용할 수 있다.
도 2에서와 같이, 프로비저닝되지 않은(unprovisioned) 연성 라이브러리들(206)은 복잡한 연성 라이브러리 설정 툴(204)에 의해서 설정된다. 상기 연성 라이브러리 설정 툴(204)로의 입력은 소스파일들(202)의 집합들 및 조건부로 보안 및 최적화 디폴트들(210)의 집합이다. 도 3은 상기 연성 라이브러리 설정 툴에 의하여 작동되는 상기 작업흐름을 상세히 나타낸다. 상기 라이브러리 소스파일들(202)은 첫 번째로 예를 들면, 상기 기계의 파일 시스템(step 302)의 짜넣기 파일(include file)들의 위치와 같은 플랫폼 의존적인 측면과 같이 상기 소스파일들(202)의 상기 의미 컨텐트(content)를 캡쳐하는 상기 추상적인 표현(208)을 생성하도록 처리된다. 상기 추상적인 표현(208)은 상기 오리지널 소스 코드 자체에 참조 없이, 정확히 동등한 기능적 소스코드를 완전히 재구성할 수 있다.
상기 라이브러리 설정자는 보안과 최적화 파라미터들의 디폴트 값들, 한계범위들, 잠금 값들과 같은 환경설정(confiquration) 파라미터들(210)을 제공하는 상기 조건들을 가진다. 이러한 값들은 프로비저닝되지 않은(unprovisioned) 연성 라이브러리(206) 내에 있어서 나중에 보안 및 최적화 결정의 최종 집합을 결정할 상기 연성 라이브러리의 사용자가 한 입력과 결합될 메타데이터로 변경된다. 최종적으로, 상기 추상적 표현과 메타데이터는 프로비저닝되지 않은(unprovisioned) 연성 라이브러리(206)의 단수의 파일로서 함께 패키지된다.
보안 및 최적화 결정을 결정하는 상기 과정은, 상기 추상적 표현에 적용하여 "프로비저닝(provisioning)"으로 불리는 목적 코드를 생성하여 "프로비저닝된(provisioned)" 연성 라이브러리(212)가 된다. 이 기능은 상기 프로비저닝되지 않은 연성 라이브러리(206), 보안 및 최적화 결정(216)의 집합, 네이티브 컴파일러(218)에 입력하는 것을 수행하는 상기 연성 라이브러리 프로비저닝 툴(provisioning tool)(214)에 의해 작동된다. 환경설정(configuration) 파라미터들(210)로서 선택된 상기 디폴트 그리고/또는 한계범위(range limit)들은 상기 최종 보안 및 최적화 기준을 결정하는 상기 프로비저닝 단계의 상기 보안 및 최적화 결정(216)에 결합될 수 있다. 이는 상기 라이브러리 설정자가 보안/최적화 기준의 민감한 디폴트 값들을 제공하므로 최종사용자에게 프로비저닝할 때 명시되어야만 하는 세부사항들의 양을 최소화하는 편의를 제공하여 예를 들어 완전히 보안 라이브러리의 보안성 변환을 끄는 것과 같이, 특정한 프로비전 시간 값들을 금하기 위해 제공될지도 모르는 부정확한/원하지 않는 보안/최적화 기준, 한계범위를 통하여 그리고/또는 잠금값들의 지정을 막는다. 민감한 보유 정보를 포함하는 상기 소프트웨어 한계단면은 그러한 공격들을 막기 위한 보안성 변환들의 충분한 수준을 가지도록 할 수 있기 때문에 상기 최종 사용자에 의하여 리버스엔지니어링에 대항하여 보호될 수 있다는 부가적인 이점이 있다.
도 4는 좀 더 상세한 설명으로 상기 연성 라이브러리 프로비저닝 툴(214)에 의하여 작동되는 상기 작업흐름을 나타낸다. 상기 연성 라이브러리 콘텐츠는 처음에는 패키지되지 않고, 특히 라이브러리의 추상적 표현과 관련되는 메타데이터가 추출된다(step 420). 다음으로, 사용자 지정의 보안 및 최적화 결정들(216)이 상기 라이브러리 설정자에 의하여 결정되고 상기 프로비저닝 되지 않은 연성 라이브러리(206)(step 404)에 포함된 상기 연성 라이브러리 메타데이터에서 설명하는 디폴트들, 한계범위, 잠금값들과 같은 환경설정(confiquration) 파라미터들(210)과 결합한다. 이러한 점에서, 사용자 지정의 보안/최적화 결정(216)은 에러 통지(406)가 나거나 상기 프로비저닝이 정지되는 경우에 상기 라이브러리 설정자에 의해 도입된 상기 제약들과 충돌하게 된다. 상기 보안/최적화 결정은 메타데이터(step 408)로부터 디폴트와 한계범위에 결함함으로써 구축된다.
상기 추상적인 표현(208)은 코드와 데이터 변환과 같이 단계(408)(step 410)에서 생성되는 보안성 결정의 상기 집합에 의해서 결정되는 프로그램 변환들을 적용하여 처리된다. 상기 처리되는 추상적인 표현은 소스코드(step 412)로 변환된다. 이 결과가 상기 사용자에 의하여 목적 코드의 집합이 생성되도록 제공되는 상기 네이티브 컴파일러(218)에 의하여 컴파일드될 수 있는 변환된 소스코드의 집합이다. 위에서 생성된 상기 최적화 결정들은 상기 사용자에게 상기 나타나는 목적 코드의 매개 변수 조정을 하도록 허용하여 상기 네이티브 컴파일러에게 조건들로 사용될 수 있다.
최종적으로, 상기 목적 코드는, 상기 프로그램 변환들의 상기 정확한 파라미터들을 나타내는 메타데이터와 함께, 특히 데이터- 와 코드 변환들은 상기 연성 라이브러리 파일(212)에 프로비저닝된 인스턴스(220)로 저장된다(step 416). 각 연성 라이브러리 인스턴스(220)는 복수의 프로비저닝된 인스턴스와 공존하여 상기 사용자에 의해 선택된 유니크한 이름, 다른 프로그램 변환들, 특히 데이터 -와 코드-변환들이 제공될 수 있다.
상기 최종 사용자가 임의대로 많은 인스턴스들, 약간씩 다른 보안성 결정의 집합들을 제공하기 때문에 다양성은 간단한 방법으로 상기 연성 라이브러리에 의해 지원되어 모든 다이버스 인스턴스(diverse instance)들에 유니크한 인스턴스 이름을 부여함으로써 단수의 라이브러리로 간단하게 저장될 수 있다.
목적 코드를 이용하는 기존의 소프트웨어 라이브러리들은 본질적으로 단수의 타겟 플랫폼에 묶여 있어서, 만약 또다른 플랫폼에 재타겟되려면 재구축되어야만 했다. 연성라이브러리에서의 상기 라이브러리 실행을 위한 추상적 표현의 상기 사용은 상기 연성 라이브러리가 이미 배포된 후에 상기 최종 사용자에 의하여 결정되는 임의적인 타겟 플랫폼에서 이용될 수 있는 연성 라이브러리를 제공할 수 있게 하는 것을 의미한다. 이를 이룩하기 위하여 상기 라이브러리 소스코드는 반드시 플랫폼 독립적인 방법으로 쓰여야 한다(상기 C 프로그래밍 언어의 ISO C-90통용어와 같이). 명백하게 플랫폼 의존적인 목적 코드의 상기 생성(step 414 참조)은 프로비저닝 시간까지 작동되지 않아서 상기 사용자에 의해 선택된 상기 네이티브 컴파일러에서 의존적이기 때문에, 상기 연성 라이브러리가 복수의 개별 인스턴스들을 복수의 플랫폼들에 제공할 수 있다.
부가적으로, 상기 연성 라이브러리는 상기 네이티브 컴파일러가 전혀 포함되지 않는 모드에서 실행될 수 있다. 도 5에서와 같이, 프로비저닝 툴 214a에 의해 실행되는 상기 프로비저닝 과정은 상기 변환된 소스파일들을 생성하고(step 402-412참조), 상기 네이티브 컴파일 단계(414)가 생략된 후에 방해될 수 있다. 대신, 단계(step 502)에서 상기 변환된 소스 코드와 메타데이터는 프로비저닝된 연성 라이브러리(504)에 삽입될 수 있다. 상기 나타나는 연성 라이브러리 인스턴스(506)는 목적코드 보다는 적용되는 상기 변환들을 나타내는 메타데이터와 함께 변환된 소스 코드를 포함한다. 다이버스 인스턴스(diverse instance)들(506)을 포함하는 상기 프로비저닝된 연성 라이브러리(504)는 후에 상기 연성 라이브러리 문맥의 밖에서 네이티브 컴파일러에 의해 처리될 수 있는 보안성이 변환된 소스코드를 포함한다. 이는 복수의 플랫폼들에 타겟되는 어플리케이션의 이점을 가진 모델에 연성을 더하는 것이다.
상기 연성 라이브러리는 상기 콜링 어플리케이션 코드로의 확장 및 상기 콜링(calling) 코드의 본질을 고려하여 상기 라이브러리의 경계를 가로질러 보안성 변환들을 적용하는 능력을 지원한다. 기존의 소프트웨어 라이브러리들은 정해진 표제파일(header-file)에서 설명하는 바대로 상기 라이브러리 API를 고수함으로서 오직 정해진 API를 지원할 수 있다.
모든 프로그램 변환들의 상기 정확한 파라미터들, 특히 상기 라이브러리의 상기 API에 참가하는 데이터- 및 코드-변환들을 나타내는 프로비저닝된 연성 라이브러리 인스턴스에 저장된 메타데이터를 이용함으로써 이뤄진다. 어플리케이션 입안자는 변환된 API를 갖춘 연성라이브러리를 이용한다면, 상기 어플리케이션 코드는 소스간 트랜스코더에 부가적으로 입력함으로써 프로비저닝된 연성라이브러리에 관해 처리될 수 있다.
도 6은 연성 라이브러리가 존재하는 어플리케이션 소스파일들을 처리함으로써 상기 트랜스코더 툴(230)의 상기 기능(도 2를 참조)을 나타낸다. 상기 트랜스코더 툴(230)은 특정한 연성 라이브러리 인스턴스로부터 상기 메타데이터를 분석한다(step 602). 상기 트랜스코더 툴(230), 특히 실제로 상기 라이브러리 API에 적용되는 데이터- 및 코드 변환들은 상기 프로그램 변환들의 완전한 설명을 보유하고 결정할 수 있다(step 604). 일단 상기 어플리케이션 소스 코드 파일(232)이 상기 트랜스코더 툴(230)에 의해서 처리되면(step 606), 정확하게 작동하는 어플리케이션 소스 파일들을 생성하여, 대응하는 변환들은 정확한 기능들이 유지될 수 있도록 하기 위해 상기 어플리케이션 소스 코드 파일들(232)에 적용될 수 있다(step 608). 도 2에서 나타나는 바와 같이, 상기 변환된 어플리케이션 소스 파일들(234)은 변환된 네이티브 목적 코드파일(238)을 제공하기 위해 네이티브 컴파일러(236)에 의해 컴파일드될 수 있다. 미국 특허 제 6,594,761호, 미국 특허 제 6,842,862호, 미국 특허 제 6,779,114호와 같이 상기 알려진 트랜스코더로의 변경은 상기 변환의 어플리케이션이 다수의 독립된 트랜스코딩 도메인을 지원하는 특정 값으로의 외부적 보안성 변환을 하도록 강제하는("force") 기존의 메커니즘의 단순한 확장이기 때문에 상대적으로 소수이다. 상기 연성 라이브러리 처리방법의 상기 이점은 상기 연성 라이브러리가 상기 사용자가 아닌 상기 정보를 포함하기 때문에 사용하기 편리하다는 점과 상기 메타데이터가 링크 시간에 상기 변환된 목적 코드에 사용될 상기 연성 라이브러리 인스턴스 이름을 나타내기 때문에 오류가 잘 발생하지 않는다는 점이다.
상기 연성 라이브러리는 상기 라이브러리가 서로 다른 인터페이스들을 작동함에도 불구하고 적합한 보안성 변환이 일관된 방식으로 모든 상기 라이브러리들을 포함하므로 다수의 상호의존적인 연성 라이브러리로 확장될 수 있다. 사실, 상기 어플리케이션 코드는 상기 모든 포함된 연성 라이브러리에서 그러한 라이브러리들을 사용하는 상기 어플리케이션 코드의 상기 유형을 참작하여 상기 보안성 변환을 허용하면서 상호의존적인 연성라이브러리로 패키지될 수 있다. 도 6에서와 같이, 상기 다른 연성 라이브러리들과 대조적으로 각 상호의존적인 연성 라이브러리를 프로비저닝함으로써 지원되어 상기 라이브러리 API에서 보안성 변환들을 나타내는 메타데이터는 읽혀서 상기 연성 라이브러리 프로비저닝 툴(214b)에 의해 고려된다.
다수의 상호의존적인 연성 라이브러리들을 제공하는 상기 프로세스는 다수의 연성 라이브러리들(206a, 206b)이 상기 프로비저닝 툴(214b)에 전해지는 것을 제외하고 단수의 연성 라이브러리의 프로비저닝과 매우 유사하다. 각 연성 라이브러리는 차례로 제공되지만, 상기 적용된 보안성 변환들은 각 인스턴스에 저장된 상기 메타데이터에 의해 나타나나는 것과 같이, 상기 다른 연성 라이브러리와 일치되도록 제한한다. 도 5에 관하여 상술한 바대로 첫 번째 연성 라이브러리는 프로비저닝된다(step 702-712). 두 번 째 연성 라이브러리는(step 714-722) 참작되는 첫 번째 라이브러리로부터 상기 보안성 변환이 프로비저닝된다(step 714 참조). 이는 동일한 방직으로 적용되는 첫 번째 와 두 번째 라이브러리(212a, 212b)사이에서의 API를 가로질러 특정 데이터- 또는 코드 변환에서 어떤 프로그램 변환들도 가능하게 한다. 이 프로세스는 임의로 많은 상호의존적인 연성 라이브러리로 확장된다.
프로비저닝된 연성 라이브러리를 사용하여 실행 어플리케이션을 생성하기 위해서는 다른 툴인 상기 연성 라이브러리 링커(240)(도 2 참조)가 이용된다. 상기 연성 라이브러리 링커(240)는 상기 프로비저닝된 연성 라이브러리(212)로부터 상기 어플리케이션 코드와 상기 연성 라이브러리 인스턴스의 상기 일관성을 확인하고, 상기 적절한 목적 코드를 분석하고, 최종 실행(244)을 생성할 네이티브 링커(242)를 작동할 책임이 있다.
도 8은 상기 매우 상세하게 상기 연성 라이브러리 링커(240)의 상기 작동을 나타낸다. 상기 연성 라이브러리 링커(240)는 상기 연성 라이브러리 파일이름과 상기 원하는 인스턴스 이름을 부여하는 특별한 문법을 사용함으로써 연성 라이브러리가 별도로 확인될 수 있음에도 불구하고, 그 어플리케이션을 네이티브 링커로 구축하고자 한다면 그 명령행을 상기 사용자가 제공하는 네이티브 링커 조건의 전체 집합으로 간주한다. 포함된 연성 라이브러리는 첫 째 분석되어(step 802), 상기 특정한 인스턴스(220)(많은 프로비저닝된 인스턴스들 중에서)가 추출된다. 상기 특정한 인스턴스 내의 상기 목적 코드는 네이티브 라이브러리의 툴(806)을 작동함으로써 일시적인 네이티브 라이브러리로 패키지된다(step 804). 최종적으로, 상기 네이티브 링커(242)는 상기 네이티브 실행(244)를 생성하기 위해 각 연성 라이브러리에 단계(step 804)에서 대응되어 생성되는 상기 일시적인 네이티브 라이브러리들을 따라 목적 코드, 라이브러리들, 옵션들과 같은 네이티브 링커 옵션들(803)과 사용자 지정의 네이티브 목적들(810)이 제출되어 작동된다(step 806).
상기 연성 라이브러리 링커(240)는 제대로 작동하는 것에 실패된 실행 어플리케이션을 야기하는 보안성 변환의 잘못된 사용을 발견할 수 있으므로 네이티브 링커보다 훨씬 더 강력할 수 있다. 프로비저닝된 라이브러리 인스턴스들이 상기 프로그램 변환들, 특히 상기 라이브러리 경계에서 상기 API에 영향을 끼치는 상기 트랜스 코더 툴(230)에 의해 적용되는 데이터- 및 코드 변환들의 상기 정확한 본질을 설명하는 메타데이터를 저장함으로써 위 작동이 이루어진다. 상기 연성 라이브러리(240)의 양상을 이용하는 것은 상기 어플리케이션 코드와 상기 라이브러리 코드가 분리된 연성 라이브러리 에 있을 때와 같이 다수의 연성 라이브러리들을 상기 사용을 요구한다. 도 9는 다수의 연성 라이브러리들이 사용될 때 사익 연성 라이브러리 링커(240a)의 상기 작동을 나타낸다. 도 8에 대하여 상술한 바와 같이, 상기 연성 링커 240a는 다수의 프로비저닝된 연성 라이브러리들(212c, 212d)의 상기 컨텐트(content)를 분석한다(step 902). 상기 보안성 변환 메타데이터의 일관적인 체크는 작동될 수 있다(step 904). 상술한대로 오류가 없다고(906) 나타나면, 네이티브 라이브러리들은 생성되어(step 908) 링크된다(910).
연성 라이브러리들은 세 가지 일반적인 사용자 경우를 지원할 수 있다. 첫 번째 경우, 어플리케이션 코드를 보안하는 것(트랜스코딩)과 상기 연성 라이브러리의 프로비저닝은 독립적으로 작동된다. 상기 라이브러리 API는 변환되지 않거나, 외부적인 메타데이터를 관통하여 상기 어플리케이션에 표현되는 "정해진" 방식으로 변환된다. 두 번째 경우로, 어플리케이션 코드는 먼저 프로비저닝된 연성 라이브러리에 참조하여 트랜스코드(transcode)된다. 상기 라이브러리 API는 임의로 변환될 수 있어서 상기 어플리케이션은 정확하게 각 API 실시하기 위한 변환이 고려될 것이지만 어플리케이션의 상기 본질은 라이브러리의 변환에 영향을 끼치지 않는다. 세 번째 경우는, 상기 어플리케이션 코드와 상기 라이브러리 모듈들이 연성 라이브러리의 형태이고, 두 연성 라이브러리 모두 함께 프로비저닝된다. 따라서 상기 라이브러리와 어플리케이션 코드는 완전히 통합된 방식으로 보안/변환된다.
기존의 소프트웨어 라이브러리들은 오직 첫 번째 사용의 경우와 오직 부분적으로 지원될 수 있다: 상기 기존의 라이브러리 설정자는 보안 및 최적화 결정의 정해진 집합을 선별하여 이들을 배포된 라이브러리로 포함할 수 있다. 그러나 상기 최종 사용자가 이러한 보안 및 최적화 결정을 수정할 수 없기 때문에, 상기 연성 라이브러리 모델보다는 열등하다. 나아가, 상기 연성 라이브러리 모델은 상기 라이브러리 설정자가 설정하고 상기 라이브러리들의 다수의 다이버스 인스턴스(diverse instance)들을 배포한다면 기존의 소프트웨어 라이브러리들을 이용하여야만 달성되는 다양성을 지원한다. 다양성은 상기 프로그램 코드에 적용되는 상기 프로그램 변환들, 특히 데이터 및 제어 흐름 변환들을 무작위로 선택하는 것을 통하여 프로그램을 다르게 하도록 설정하는 것을 의미한다. 적용되는 변환을 위하여, 변환 집합들 및 특정 상수들의 집합의 상기 선택들은 무작위로 선정되어, 시드 배정을 받은 허위의 무작위 숫자 생성기(Pseudo Random Number Generator; PRNG)를 지날 것이다. 이러한 내부 프로그램 변환들에 덧붙여, 상기 라이브러리의 상기 인터페이스에서의(예를 들어, API) 데이터 변환들은 또한 무작위로 선택될 것이다.
따라서 선행된 설명으로부터 명확해질 상기 설명된 연성 라이브러리는 많은 기존의 라이브러리를 넘어서는 많은 이점들을 가진다. 보안성 변환들과 실행을 위한 작업 최적화는 라이브러리 설정자에 의한 제한 내에서 상기 최종 사용자(상기 라이브러리를 어플리케이션으로 포함시키는 상기 당사자)의 재량으로 선택될 수 있다. 이러한 점은 상기 최종 사용자가 작업 튜닝에 비해 보안성을 작동하도록 허용한다. 상기 라이브러리 소스코드가 이동식 언어(ISO C와 같이)로 쓰여서 플랫폼 특정의 API들에서의 독립성을 피하기 위해 주의한다면, 상기 나타나는 연성 라이브러리는 임의의 플랫폼들에 프로비저닝될 수 있어서 완전히 이동될 수 있을 것이다. 이는 타겟 독립적인 라이브러리들이 배포되도록 허용한다. 연성 라이브러리는 보안 및 최적화 결정의 다른 집합들을 반영하면서 다수의 프로비저닝된 라이브러리들을 포함할 수 있다. 단수의 연성 라이브러리는 보안성 변환들의 특정 집합을 가지는, 인스턴스의 다수를 포함한 후에, 단수의 연성 라이브러리는 보안 및 작업 결정 설정들과 다양성의 범위를 분석하는 다수의 인스턴스들을 포함하기 때문에 보안성의 조정과 작업 교환을 모두 지원할 수 있다. 연성 라이브러리는 상기 추상적인 표현이 암호화될 수 있어서 상기 라이브러리 소스 코드가 의도치 않은 수령인에게 노출되지 않도록 함으로써 역시 보관된 정보의 보호를 제공할 수 있다. 다수의 상호의존적인 연성 라이브러리들은 특히 연성 라이브러리 형태로 상기 어플리케이션 코드를 압축하여 상기 어플리케이션 문맥으로 보안성변환을 고려하게 허용하여 이용될 수 있다. 상기 연성 라이브러리 프로비저닝 툴(214)와 링커 툴(240)은 일반적인 오류와 같이 사전에 나타나기만 하는 API 경계 등을 지나는 보안성 변환의 부조화와 같은, 많은 종류의 오류들을 조사하는 데 사용될 수 있다.
이상에서, 설명의 목적으로, 본 발명의 실시예들에 대한 철저한 이해를 제공하기 위하여 다양한 세부적인 컨텐트(content)가 개시되었다. 하지만, 당업자들은 본 발명을 실시하는데 이러한 구체적인 컨텐츠가 요구되지 않는다는 것을 이해할 수 있을 것이다. 다른 경우에서 본 발명이 불명확하게 되지 않도록 잘 알려진 전기적인 구조들 및 회로들이 블록도의 형태로 도시되었다. 예를 들어 여기에 기재된 본 발명의 실시예들은 소프트웨어 루틴(software routine), 하드웨어 회로(hardware circuit), 펌웨어(firmware), 또는 이들의 조합으로 구현되었는지에 대한 세부 사항들이 제공되지 않았다.
본 발명의 실시예들은 기계 판독 가능 저장 매체(machine readable storage medium)에 저장되는 소프트웨어 제품(software product)으로 구현될 수 있다(컴퓨터 판독가능 매체(computer-readable medium), 프로세서 판독 가능 매체(processor-readable medium), 컴퓨터 판독 가능 프로그램을 가진 컴퓨터 사용가능 매체(computer usable medium)들도 포함된다). 상기 기계 판독 가능 매체(machine-readable medium)은 디스켓, 씨디 롬(compact disk read only memory; CD-ROM), 휘발성(volatile) 또는 비휘발성(non-volatile)의 메모리 장치, 또는 기타 저장 메커니즘을 포함한다. 상기 기계 판독 가능 매체는 자성(magnetic), 광학의(optical), 또는 전자 저장 매체(electrical storage medium)를 포함하는 모든 적합한 유형의 매체일 수 있다. 기계 판독 가능 매체는 다양한 명령들(instructions), 코드 시퀀스(code sequence),구성 정보(configuration information) 또는 다른 데이터들을 포함할 수 있고, 기계판독 가능 매체가 실행될 때 프로세서로 하여금 발명의 실시예에 따른 방법의 단계들을 수행하도록 한다. 본 발명의 기술 분야에 통상의 지식을 가진 자들은 본 발명을 실시하는 데 필수적인 명령(instruction)들과 연산(operation)들이 기계 판독 가능 매체(machine-readable medium)에 저장될 수 있다는 것을 이해할 수 있을 것이다. 상기 기계 판독 가능 매체는 상술한 작업들(tasks)을 수행하는 회로와 인터페이스(interface)할 수 있다.
본 발명의 상술한 실시예들은 예시를 목적으로만 기재되었고, 다수의 서로 다른 종류의 소프트웨어 또는 소프트웨어 조각들이 본 발명에 따른 강화된 보안의 혜택을 받을 수 있는 것이 자명하다. 또한, 본 발명의 기술 분야에서 통상의 지식을 가진 자에 의하여 본 발명의 범위를 벗어나지 않는 한 특정한 실시예에 대한 변경, 수정 및 변형이 가능하고, 본 발명의 범위는 여기에 첨부된 특허청구범위에 의해서만 정해진다.

Claims (36)

  1. 상기 소프트웨어 모듈들의 다수의 다이버스 인스턴스(diverse instance)들을 포함하는 소프트웨어 모듈들의 라이브러리를 설정하는 방법에 있어서,
    라이브러리 소스 코드 파일로부터 상기 소프트웨어 모듈들의 추상적인 중간 표현을 생성하는 단계;
    상기 소프트웨어 모듈들에 적용되는 보안 및 최적화 변환을 위한 보안 및 최적화 디폴트를 나타내는 메타데이터와 상기 중간 표현을 패키지하는 단계;
    인스턴스를 생성하도록 상기 중간 표현으로의 개별 보안 및 최적화 변환을 적용하여 상기 소프트웨어 모듈들의 복수의 다이버스 인스턴스(diverse instance)들을 생성하는 단계; 및
    소프트웨어 라이브러리 내 상기 복수의 다이버스 인스턴스(diverse instance)들을 패키지하는 단계를 포함하는 라이브러리 설정 방법.
  2. 제 1 항에 있어서, 상기 소프트웨어 모듈들의 상기 복수의 다이버스 인스턴스(diverse instance)들을 생성하는 단계는,
    보안의 개별 집합 및 상기 중간 표현으로의 최적화 변환을 적용하는 단계; 및
    상기 중간 표현의 상기 인스턴스를 상기 소프트웨어 모듈들의 소스코드 인스턴스로 전환하는 단계를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  3. 제 2 항에 있어서, 상기 소프트웨어 모듈들의 목적 코드 인스턴스를 생성하기 위하여 상기 소스 코드 인스턴스를 컴파일하는 단계를 더 포함하는 라이브러리 설정 방법.
  4. 제 1 항에 있어서, 보안 및 최적화 변환들을 적용하는 단계는 사용자 공급의 보안 및 최적화 결정을 하는 보안 및 최적화 변환들을 적용하는 단계를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  5. 제 4 항에 있어서, 상기 사용자 공급의 보안 및 최적화 결정들이 상기 보안 및 최적화 디폴트들에 일치하는지 여부를 결정하는 단계를 더 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  6. 제 1 항에 있어서, 상기 중간 표현을 생성하는 단계는 어휘(lexical)와 구문(syntactical)의 컨텐트(content)를 삭제하는 단계를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  7. 제 6 항에 있어서, 상기 어휘(lexical)와 구문(syntactical) 컨텐트(content)는 플랫폼 의존적인 컨텐트(content)를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  8. 제 6 항에 있어서, 상기 어휘(lexical)와 구문(syntactical) 컨텐트(content)는 플랫폼 독립적인 컨텐트(content)를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  9. 제 1 항에 있어서, 개별 보안 및 최적화 변환은 프로그램 변환들을 적용하는 단계는 프로그램 변환들을 적용하는 단계를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  10. 제 9 항에 있어서, 상기 프로그램 변환들은 데이터 흐름 전환들을 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  11. 제 9 항에 있어서, 상기 프로그램 변환은 제어 흐름 변환들을 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  12. 제 1 항에 있어서, 패키지하는 단계는 복수의 다양한 목적 코드 인스턴스들과 상기 보안 및 각 인스턴스에 적용되는 최적화 변환들을 나타내는 메타데이터 패키지 하는 단계를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  13. 제 12 항에 있어서, 복수의 목적 코드 인스턴스들 중 하나를 컴파일드 어플리케이션 목적 파일에 실행 프로그램 영상을 제공하기 위하여 연결(link)하는 단계를 더 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  14. 제 13 항에 있어서, 상기 목적 코드 인스턴스에 적용되는 상기 개별 보안 및 최적화 변환들이 두 번째 목적 코드 인스턴스에 적용되는 보안 및 최적화 변환들에 일치하는지 여부를 결정하는 단계를 더 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  15. 제 13 항에 있어서, 상기 목적 코드 인스턴스에 적용되는 상기 개별 보안 및 최적화 변환들이 일관적인지 여부를 결정하는 단계는 상기 보안 및 각 인스턴스에 적용되는 최적화 변환을 나타내는 메타데이터를 비교하는 단계를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  16. 제 1 항에 있어서, 두 번째 중간 표현을 가지는 라이브러리에 적용되는 보안 및 최적화 변환들의 관점에서 개별 보안 및 최적화 변환들을 제약하는 단계를 더 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  17. 제 1 항에 있어서, 상기 중간 표현을 암호화하는 단계를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  18. 제 17 항에 있어서, 암호화하는 단계는 대칭적이거나 비대칭적인 키 암호화를 사용하는 암호화 단계를 포함하는 것을 특징으로 하는 라이브러리 설정 방법.
  19. 프로세서에서 작동될 때, 명령들을 구현하는 컴퓨터 프로그램 결과물은 상기 프로세서가 소프트웨어 모듈들의 다수의 다이버스 인스턴스(diverse instance)들을 포함하는 소프트웨어 모듈들의 라이브러리를 설정하는 방법으로 작동하게 하는 상기 방법으로서,
    라이브러리 소스 코드 파일들로부터 상기 소프트웨어 모듈들의 추상화된 중간 표현들을 생성하는 단계;
    상기 소프트웨어 모듈들에 적용되는 보안 및 최적화 변환들을 위한 보안 및 최적화 디폴트를 나타내는 메타데이터와 함께 상기 중간 표현을 패키지하는 단계;
    각 인스턴스를 생성하는 상기 중간 표현으로 개별 보안 및 최적화 변환들을 적용하는 상기 소프트웨어 모듈들의 복수의 다이버스 인스턴스(diverse instance)들을 생성하는 단계; 및
    소프트웨어 라이브러리 내 상기 복수의 다이버스 인스턴스(diverse instance)들을 패키지하는 단계를 포함하는 것을 특징으로 하는 방법.
  20. 제 19 항에 있어서, 상기 소프트웨어 모듈들의 상기 복수의 다이버스 인스턴스(diverse instance)들을 생성하는 단계에서 각 다이버스 인스턴스(diverse instance)는;
    상기 중간 표현에 보안 및 최적화 변환들의 개별 집합을 적용하는 단계; 및
    상기중간 표현의 상기 인스턴스를 상기 소프트웨어 모듈들의 소스 코드 인스턴스로 전환하는 단계를 작업하는 것을 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  21. 제 20 항에 있어서, 상기 소프트웨어 모듈들의 목적 코드 인스턴스를 생성하기 위한 상기 소스 코드 인스턴스를 컴파일링하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  22. 제 19 항에 있어서, 상기 보안 및 최적화 변환을 적용하는 단계는 사용자 공급의 보안 및 최적화 결정들에 의하여 결정되는 보안 및 최적화 변환들을 적용하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  23. 제 22 항에 있어서, 상기 사용자 공급의 보안 및 최적화 결정들이 상기 보안 및 최적화 디폴트들과 일치하는지 여부를 판단하는 단계를 더 포함하는 것을 특징으로 하는 상기 컴퓨터 프로그램 결과물.
  24. 제 19 항에 있어서, 상기 중간 표현을 생성하는 단계는 어휘와(lexical) 구문의(syntactical) 컨텐트(content)를 삭제하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  25. 제 24 항에 있어서, 상기 어휘와(lexical) 구문의(syntactical) 컨텐트(content)는 플랫폼 의존적인 컨텐트(content)를 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  26. 제 24 항에 있어서, 상기 어휘와(lexical) 구문의(syntactical) 컨텐트(content)는 플랫폼 독립적인 컨텐트(content)를 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  27. 제 19 항에 있어서, 개별 보안 및 최적화 변환들을 적용하는 단계는 프로그램 변환들을 적용하는 단계를 포함하는 것을 특징으로 컴퓨터 프로그램 결과물.
  28. 제 27 항에 있어서, 상기 프로그램 변환들은 데이터 흐름 변환들을 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  29. 제 27 항에 있어서, 상기 프로그램 변환들이 제어 흐름 변환들인 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  30. 제 19 항에 있어서, 패키지하는 단계는 복수의 다양한 목적 코드 인스턴스들과 각 인스턴스에 적용되는 상기 보안 및 최적화 변환들을 나타내는 메타데이터를 패키지하는 단계를 포함하는 것을 특징으로 컴퓨터 프로그램 결과물.
  31. 제 30 항에 있어서, 복수의 목적 코드 인스턴스들 중 하나를 실행 프로그램 영상을 제공하기 위하여 컴파일드 어플리케이션 목적 파일에 연결하는(link) 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  32. 제 31 항에 있어서, 상기 목적 코드 인스턴스에 적용되는 상기 개별 보안 및 최적화 변환들이 두 번째 목적 코드 인스턴스에 적용되는 상기 개별 보안 및 최적화 변환과 일치하는지 여부를 결정하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  33. 제 31 항에 있어서, 상기 목적 코드 인스턴스에 적용되는 상기 개별 보안 및 최적화 변환들이 두 번째 목적 코드 인스턴스에 적용되는 보안 및 최적화 변환과 일치하는지 여부를 결정하는 것을 더 포함하는 특징으로 하는 컴퓨터 프로그램 결과물.
  34. 제 19 항에 있어서, 두 번째 중간 표현을 가지는 라이브러리에 적용되는 보안 및 최적화 변환들의 관점에서 개별보안 및 최적화 변환들을 제한하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  35. 제 19 항에 있어서, 상기 중간 표현을 암호화하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 프로그램 결과물.
  36. 제 35 항에 있어서, 암호화하는 단계는 대칭적이거나(symmetric) 비 대칭적인(asymmetric) 키 암호를 사용한 암호화 단계를 포함하는 것을 특징으로 하는 방법.
KR1020127028138A 2010-03-31 2010-03-31 소프트웨어 라이브러리에서의 다양한 변형을 통한 압축과 보호를 위한 시스템과 방법 KR20140053757A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CA2010/000451 WO2011120123A1 (en) 2010-03-31 2010-03-31 A system and method for encapsulating and enabling protection through diverse variations in software libraries

Publications (1)

Publication Number Publication Date
KR20140053757A true KR20140053757A (ko) 2014-05-08

Family

ID=44711252

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127028138A KR20140053757A (ko) 2010-03-31 2010-03-31 소프트웨어 라이브러리에서의 다양한 변형을 통한 압축과 보호를 위한 시스템과 방법

Country Status (7)

Country Link
US (2) US9892272B2 (ko)
EP (2) EP3812894B1 (ko)
JP (1) JP5555803B2 (ko)
KR (1) KR20140053757A (ko)
CN (1) CN102947835B (ko)
CA (1) CA2792782C (ko)
WO (1) WO2011120123A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10185837B2 (en) 2010-03-31 2019-01-22 Irdeto B.V. System and method for encapsulating and enabling protection through diverse variations in software libraries

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120089733A1 (en) * 2010-10-12 2012-04-12 Ansca, Inc. Managing Access to an Application
US9141360B1 (en) 2011-03-16 2015-09-22 Google Inc. Web application module translation service
US8844032B2 (en) * 2012-03-02 2014-09-23 Sri International Method and system for application-based policy monitoring and enforcement on a mobile device
WO2014158128A1 (en) * 2013-03-25 2014-10-02 Hewlett-Packard Development Company, L.P. Extensible firmware abstraction
GB201405755D0 (en) 2014-03-31 2014-05-14 Irdeto Bv Optimizing and protecting software
CN106416119B (zh) 2014-03-31 2019-10-11 爱迪德技术有限公司 保护软件项目
WO2016118216A2 (en) * 2014-11-06 2016-07-28 Intertrust Technologies Corporation Secure application distribution systems and methods
FR3030818B1 (fr) * 2014-12-23 2016-12-23 Valeo Comfort & Driving Assistance Procede de transmission securisee d'une cle virtuelle et methode d'authentification d'un terminal mobile
US9690552B2 (en) * 2014-12-27 2017-06-27 Intel Corporation Technologies for low-level composable high performance computing libraries
GB201505553D0 (en) 2015-03-31 2015-05-13 Irdeto Bv Online advertisements
US20180203676A1 (en) * 2015-04-09 2018-07-19 Longsand Limited Removing library objects from a static library
US20170041386A1 (en) * 2015-08-05 2017-02-09 International Business Machines Corporation Provisioning a target hosting environment
KR102063966B1 (ko) * 2015-10-21 2020-01-09 엘에스산전 주식회사 Plc 명령어 컴파일 최적화 방법
CN107301121A (zh) * 2016-04-15 2017-10-27 电信科学技术研究院 一种编译器自动验证方法及装置
US10423408B2 (en) 2016-06-02 2019-09-24 International Business Machines Corporation Identifying and isolating library code in software applications
CN106548049A (zh) * 2016-12-09 2017-03-29 武汉斗鱼网络科技有限公司 一种代码处理方法和装置
CA3047009A1 (en) 2016-12-15 2018-06-21 Irdeto B.V. Software integrity verification
GB201703864D0 (en) 2017-03-10 2017-04-26 Irdeto Bv Secured system operation
CN107657154B (zh) * 2017-09-18 2018-08-17 北京深思数盾科技股份有限公司 一种目标程序的保护方法、装置、设备及存储介质
US10402178B2 (en) * 2018-01-26 2019-09-03 Accenture Global Solutions Limited Cross platform content management and distribution system
US11176300B2 (en) 2018-02-03 2021-11-16 Irdeto B.V. Systems and methods for creating individualized processing chips and assemblies
US10797868B2 (en) 2018-05-31 2020-10-06 Irdeto B.V. Shared secret establishment
US11206130B2 (en) * 2018-07-31 2021-12-21 Nxp B.V. Customizing cryptographic keys between multiple hosts
US11263316B2 (en) 2019-08-20 2022-03-01 Irdeto B.V. Securing software routines
KR102301243B1 (ko) * 2020-06-15 2021-09-13 주식회사 스틸리언 화이트박스 암호를 이용한 데이터 암호화/복호화 방법 및 장치
CN116028057A (zh) * 2021-10-27 2023-04-28 北京字节跳动网络技术有限公司 代码管理的方法和装置
EP4339835A1 (en) 2022-09-16 2024-03-20 Irdeto B.V. Machine learning model protection

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6920143B1 (en) * 1998-03-12 2005-07-19 Brooktrout, Inc. Computer telephony system using multiple hardware platforms to provide telephony services
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6779114B1 (en) 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
CA2327911A1 (en) 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
US20040158820A1 (en) * 2003-02-11 2004-08-12 Moore John Wesley System for generating an application framework and components
US7822685B1 (en) * 2003-04-09 2010-10-26 Cisco Technology, Inc. Method and system for digital rights management brokering and digital asset security transcoding
KR100568228B1 (ko) * 2003-05-20 2006-04-07 삼성전자주식회사 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치
US7487498B2 (en) * 2003-11-12 2009-02-03 Microsoft Corporation Strategy for referencing code resources
US20050235357A1 (en) * 2004-04-19 2005-10-20 Securemedia International Preventing cloning of high value software using embedded hardware and software functionality
US7412700B2 (en) * 2004-05-18 2008-08-12 Oracle International Corporation Product packaging and installation mechanism
GB2420638A (en) * 2004-11-24 2006-05-31 Hewlett Packard Development Co Method of substituting code fragments in Internal Representation
US7472375B2 (en) * 2005-03-29 2008-12-30 Intel Corporation Creating managed code from native code
JP5399601B2 (ja) * 2005-05-31 2014-01-29 日本電気株式会社 実装コード開発システム、及び実装コード開発プログラム
US9128727B2 (en) * 2006-08-09 2015-09-08 Microsoft Technology Licensing, Llc Generation of managed assemblies for networks
JP2009009537A (ja) * 2006-09-11 2009-01-15 Renesas Technology Corp プログラム作成方法及び情報処理装置ならびにマイコン
US7827549B2 (en) * 2006-09-15 2010-11-02 Symantec Corporation Method and system for creating and executing generic software packages
US9352111B2 (en) 2007-04-19 2016-05-31 Advanced Circulatory Systems, Inc. Systems and methods to increase survival with favorable neurological function after cardiac arrest
US8312425B2 (en) * 2008-03-31 2012-11-13 International Business Machines Corporation Dynamic template instantiation
US9117071B2 (en) * 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US8635606B2 (en) * 2009-10-13 2014-01-21 Empire Technology Development Llc Dynamic optimization using a resource cost registry
US9892272B2 (en) 2010-03-31 2018-02-13 Irdeto B.V. System and method for encapsulating and enabling protection through diverse variations in software libraries
US8549502B2 (en) * 2010-06-21 2013-10-01 Microsoft Corporation Compiler with user-defined type inference rules

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10185837B2 (en) 2010-03-31 2019-01-22 Irdeto B.V. System and method for encapsulating and enabling protection through diverse variations in software libraries

Also Published As

Publication number Publication date
JP2013524322A (ja) 2013-06-17
EP3812894A1 (en) 2021-04-28
US9892272B2 (en) 2018-02-13
EP2553571A4 (en) 2014-05-07
US10185837B2 (en) 2019-01-22
CN102947835B (zh) 2016-04-13
US20180032746A1 (en) 2018-02-01
CA2792782A1 (en) 2011-10-06
CA2792782C (en) 2018-01-02
US20130014274A1 (en) 2013-01-10
WO2011120123A1 (en) 2011-10-06
EP2553571B1 (en) 2020-12-23
JP5555803B2 (ja) 2014-07-23
CN102947835A (zh) 2013-02-27
EP2553571A1 (en) 2013-02-06
EP3812894B1 (en) 2024-02-07

Similar Documents

Publication Publication Date Title
KR20140053757A (ko) 소프트웨어 라이브러리에서의 다양한 변형을 통한 압축과 보호를 위한 시스템과 방법
CN106462677B (zh) 一种保护软件项目的方法和装置
US8510726B2 (en) System and method for generating white-box implementations of software applications
US8166471B2 (en) Implementing portable content protection to secure secrets
JP5808019B2 (ja) ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護
KR102107872B1 (ko) 컴파일러 기반 난독화 기법
US20170116410A1 (en) Software protection
CN103460217A (zh) 用于保护应用程序和相关计算机程序产品的方法
CN109598107B (zh) 一种基于应用安装包文件的代码转换方法及装置
WO2011134207A1 (zh) 软件保护方法
CN109840400A (zh) 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法
KR101436741B1 (ko) 프로그램 보안 솔루션 적용 방법 및 시스템
KR100958784B1 (ko) 응용 프로그램 다형화 방법 및 그 장치

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right