KR102000861B1 - 스트리밍 미디어 및 다른 데이터 흐름들의 보호를 위한 난독화 - Google Patents
스트리밍 미디어 및 다른 데이터 흐름들의 보호를 위한 난독화 Download PDFInfo
- Publication number
- KR102000861B1 KR102000861B1 KR1020177023923A KR20177023923A KR102000861B1 KR 102000861 B1 KR102000861 B1 KR 102000861B1 KR 1020177023923 A KR1020177023923 A KR 1020177023923A KR 20177023923 A KR20177023923 A KR 20177023923A KR 102000861 B1 KR102000861 B1 KR 102000861B1
- Authority
- KR
- South Korea
- Prior art keywords
- program code
- randomized
- obfuscated
- code
- branching
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 39
- 230000006870 function Effects 0.000 claims description 143
- 239000011159 matrix material Substances 0.000 claims description 22
- 230000009466 transformation Effects 0.000 claims description 18
- 230000008569 process Effects 0.000 claims description 16
- 238000004364 calculation method Methods 0.000 claims description 13
- 238000000844 transformation Methods 0.000 claims description 10
- 238000012545 processing Methods 0.000 claims description 9
- 230000006837 decompression Effects 0.000 claims description 6
- 230000001131 transforming effect Effects 0.000 claims description 3
- 238000012986 modification Methods 0.000 claims description 2
- 230000004048 modification Effects 0.000 claims description 2
- 238000004422 calculation algorithm Methods 0.000 description 83
- 238000009795 derivation Methods 0.000 description 15
- 238000004590 computer program Methods 0.000 description 14
- 238000004458 analytical method Methods 0.000 description 12
- 238000006243 chemical reaction Methods 0.000 description 7
- 238000009826 distribution Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000003860 storage Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 238000013475 authorization Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 239000005557 antagonist Substances 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000001939 inductive effect Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 238000009827 uniform distribution Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/065—Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/14—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using a plurality of keys or algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing 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/2125—Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/16—Obfuscation or hiding, e.g. involving white box
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/30—Compression, e.g. Merkle-Damgard construction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/34—Encoding or coding, e.g. Huffman coding or error correction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/60—Digital content management, e.g. content distribution
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Storage Device Security (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
비인가된 사용자들이 비디오에 액세스하는 것을 방지하기 위해 프로그램 코드를 난독화하는 방법이 제공된다. 본 방법은 기능을 제공하는 원본 프로그램 코드를 수신하는 단계를 포함한다. 원본 프로그램 코드는 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전을 정의하는 난독화된 프로그램 코드로 변환된다. 난독화된 프로그램 코드가 이어서 저장되고, 입력 비디오 데이터 흐름을 수신하는 프로세서가 난독화된 프로그램 코드를 사용하여 출력 데이터 흐름을 생성한다.
Description
우선권 주장
본 출원은 2015년 1월 27일에 출원되고 인용에 의해 그 전체가 본원에 포함되는 선출원인 미국 가출원 제62/108,272호를 바탕으로 35 USC §119(e)에 의거하여 우선권을 주장한다.
발명의 분야
본 발명은 프로그램 코드 및 그에 따른 데이터 흐름을 보호하기 위한 프로그램 코드의 난독화(obfuscation)에 관한 것이다. 상세하게는, 본 발명은 가로채기(intercept)될 때의 비인가된 사용으로부터 스트리밍 미디어 및/또는 다른 데이터 흐름 시스템들을 보호하는 것에 관한 것이다.
본 발명의 목적은 난독화된 코드를 제공 및/또는 사용하는 것이다.
일 양태에서, 프로그램 코드를 난독화하는 방법이 있으며, 본 방법은: 프로세서에서, 기능을 제공하는 원본 프로그램 코드(original program code)를 수신하는 단계, 프로세서에서, 원본 프로그램 코드를 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전(randomized branch encoded version)을 정의하는 난독화된 프로그램 코드로 변환(transform)하는 단계, 프로세서로부터, 입력 데이터 흐름을 수신하고 난독화된 프로그램 코드를 사용하여 출력 데이터 흐름을 생성(generate)하는, 처리 시스템으로 난독화된 프로그램 코드를 전송하거나, 추후 전송을 위해 난독화된 프로그램 코드를 저장하는 단계를 포함하고, 여기서 프로세서는 원본 프로그램 코드를 난독화된 프로그램 코드로 변환하기 위해 랜덤화된 브랜치 인코딩(randomized branch encoding)을 구현한다.
임의로, 랜덤화된 브랜치 인코딩을 구현하는 것은 랜덤화된 브랜칭 프로그램(randomized branching program)으로부터 원본 프로그램 코드 기능을 생성(create)하는 것을 포함하고, 랜덤화된 브랜칭 프로그램은: 원본 프로그램 코드의 코드 엘리먼트(code element)들에 대응하는 기능을 갖는 계층화된 브랜칭 프로그램(layered branching program)들을 조합하는 단계, 및 계층화된 브랜칭 프로그램들에서의 인접한 계층들의 노드들 사이의 경로들을 랜덤화하는 단계에 의해 생성된다.
임의로, 본 방법은 난독화된 프로그램 코드를 형성하기 위해 랜덤화된 브랜칭 프로그램을 프로그램 코드로 변환(convert)하는 단계를 추가로 포함하고, 난독화된 프로그램 코드는 원본 프로그램 코드와 동일한 기능을 제공한다.
임의로, 랜덤화된 브랜칭 프로그램은 계층화된 브랜칭 프로그램들의 입력 인코딩들을 랜덤화하는 추가 단계에 의해 생성된다.
임의로, 랜덤화된 브랜칭 프로그램은 계층화된 브랜칭 프로그램들의 출력 인코딩들을 랜덤화하는 추가 단계에 의해 생성된다.
임의로, 입력 또는 출력 인코딩들을 랜덤화하는 단계는 입력 데이터 흐름들에 대한 랜덤화된 인코딩들, 및/또는 출력 데이터 흐름들에 대한 원하는 랜덤화된 인코딩들에 따라 계층화된 브랜칭 프로그램들에서의 계층들을 수정하는 단계를 포함한다.
임의로, 본 방법은 난독화된 프로그램 코드를 형성하기 위해 랜덤화된 브랜칭 프로그램을 프로그램 코드로 변환하는 단계를 추가로 포함하고, 난독화된 프로그램 코드는 랜덤화된 인코딩들을 갖는 입력 데이터 흐름들을 처리하기 위해 원본 프로그램 코드와 상이한 기능을 제공한다.
임의로, 계층화된 브랜칭 프로그램은 하기의 기능들: IDENTITY, NOT, AND, OR, XOR, ADD, MUL, 또는 이들의 일부 논리적 등가물 중 하나 또는 그 조합을 갖는다.
임의로, 프로세서는 원본 프로그램 코드를 난독화된 프로그램 코드로 변환하기 위해 랜덤화된 브랜치 인코딩을 구현하는 행렬 계산들을 구현한다.
임의로, 랜덤화된 브랜치 인코딩을 구현하는 것은 랜덤화된 브랜치 인코딩을 구현하는 행렬 계산들을 사용하여 원본 프로그램 코드 기능을 생성하는 것을 포함한다.
임의로, 행렬 계산들은 원본 프로그램 코드의 난독화된 버전인 프로그램 코드로서 구현될 수 있다.
임의로, 난독화된 프로그램 코드는 하기의 기능들: 입력 데이터 흐름의 복호화, 입력 데이터 흐름의 압축해제, 입력 데이터 흐름의 디코딩 중 하나 이상을 제공한다.
임의로, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 암호화된 미디어 스트림이고, 난독화된 프로그램 코드 기능은 미디어 스트림을 복호화한다.
임의로, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 압축된 미디어 스트림이고, 난독화된 프로그램 코드 기능은 미디어 스트림을 압축해제한다.
임의로, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 인코딩된 미디어 스트림이고, 난독화된 프로그램 코드 기능은 미디어 스트림을 디코딩한다.
다른 양태에서, 프로그램 코드를 난독화하는 컴퓨터 시스템이 있고, 본 컴퓨터 시스템은: 기능을 제공하는 원본 프로그램 코드를 위한 입력 및/또는 데이터 리포지토리, 및 입력 및/또는 데이터 리포지토리와 통신하는 프로세서를 포함하고, 프로세서는 이상의 단락들 중 어느 하나의 단락의 방법에 따라 프로그램 코드를 난독화하도록 구성된다.
임의로, 컴퓨터 시스템은 난독화된 프로그램 코드를 데이터 흐름 수신기로 전송하기 위한 출력을 포함한다.
임의로, 데이터 흐름 수신기는 미디어 플레이어이다.
또한, 입력 데이터 흐름으로부터 출력 데이터 흐름을 생성하는 방법이 기술되고, 본 방법은: 입력 데이터 흐름을 프로세서에서 수신하는 단계, 입력 데이터 흐름을 받아서 출력 데이터 흐름을 생성하는 프로그램 코드를 프로세서에서 실행하는 단계를 포함하고, 프로그램 코드는 기능을 제공하는 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전을 정의하는 난독화된 프로그램 코드이고, 난독화된 프로그램 코드는 랜덤화된 브랜치 인코딩을 사용하여 원본 프로그램 코드로부터 변환된다.
임의로, 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전은 원본 프로그램 코드의 코드 엘리먼트들에 대응하는 기능을 갖는 계층화된 브랜칭 프로그램들 및 계층화된 브랜칭 프로그램들에서의 인접한 계층들의 노드들 사이의 랜덤화된 경로들을 포함하는 랜덤화된 브랜칭 프로그램으로부터 생성된다.
임의로, 랜덤화된 브랜칭 프로그램은 계층화된 브랜칭 프로그램들에 대한 랜덤화된 입력 인코딩들을 추가로 포함한다.
임의로, 랜덤화된 브랜칭 프로그램은 계층화된 브랜칭 프로그램들에 대한 랜덤화된 출력 인코딩들을 추가로 포함한다.
임의로, 난독화된 프로그램 코드는, 출력 데이터 흐름을 생성하기 위해, 입력 데이터 흐름을 복호화하고, 입력 데이터 흐름을 압축해제하며, 그리고/또는 입력 데이터 흐름을 디코딩하는 기능을 갖는다.
임의로, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 암호화된 미디어 스트림이고, 난독화된 프로그램 코드 기능은 미디어 스트림을 복호화한다.
임의로, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 압축된 미디어 스트림이고, 난독화된 프로그램 코드 기능은 미디어 스트림을 압축해제한다.
임의로, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 인코딩된 미디어 스트림이고, 난독화된 프로그램 코드 기능은 미디어 스트림을 디코딩한다.
또한, 입력 데이터 흐름으로부터 출력 데이터를 생성하는 데이터 흐름 수신기가 기술되고, 본 데이터 흐름 수신기는: 입력 데이터 흐름에 대한 입력 및/또는 데이터 리포지토리, 입력 및/또는 데이터 리포지토리와 통신하는 프로세서, 프로세서 및/또는 데이터 리포지토리 내의, 기능을 제공하는 프로그램 코드를 포함하고, 여기서 프로세서는: 입력 및/또는 데이터 리포지토리로부터 입력 데이터 흐름을 수신하고, 입력 데이터 흐름을 받아서 출력 데이터 흐름을 생성하는 프로그램 코드를 실행하도록 구성되며, 여기서 프로그램 코드는 기능을 제공하는 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전을 정의하는 난독화된 프로그램 코드이고, 난독화된 프로그램 코드는 랜덤화된 브랜치 인코딩을 사용하여 원본 프로그램 코드로부터 변환된다.
임의로, 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전은 원본 프로그램 코드의 코드 엘리먼트들에 대응하는 기능들을 갖는 계층화된 브랜칭 프로그램들 및 계층화된 브랜칭 프로그램들에서의 인접한 계층들의 노드들 사이의 랜덤화된 경로들을 포함하는 랜덤화된 브랜칭 프로그램으로부터 생성된다.
임의로, 난독화된 프로그램 코드는 원본 프로그램 코드와 동일한 기능을 제공한다.
임의로, 랜덤화된 브랜칭 프로그램은 계층화된 브랜칭 프로그램들에 대한 랜덤화된 입력 인코딩들을 추가로 포함한다.
임의로, 랜덤화된 브랜칭 프로그램은 계층화된 브랜칭 프로그램들에 대한 랜덤화된 출력 인코딩들을 추가로 포함한다.
임의로, 랜덤화된 입력 또는 출력 인코딩들은 입력 데이터 흐름들에 대한 랜덤화된 인코딩들, 및/또는 출력 데이터 흐름들에 대한 원하는 랜덤화된 인코딩들에 따라 계층화된 브랜칭 프로그램들에서의 계층들을 수정하는 것을 포함한다.
임의로, 난독화된 프로그램 코드는 랜덤화된 인코딩들을 갖는 입력 데이터 흐름들을 처리하기 위해 원본 프로그램 코드와 상이한 기능을 제공한다.
임의로, 계층화된 브랜칭 프로그램은 하기의 기능들: IDENTITY, NOT, AND, OR, XOR, ADD, MUL, 또는 이들의 일부 논리적 등가물 중 하나 또는 그 조합을 갖는다.
임의로, 난독화된 프로그램 코드는, 출력 데이터 흐름을 생성하기 위해, 입력 데이터 흐름을 복호화하고, 입력 데이터 흐름을 압축해제하며, 그리고/또는 입력 데이터 흐름을 디코딩하는 기능을 갖는다.
임의로, 데이터 흐름 수신기는 미디어 플레이어이고, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 암호화된 미디어 스트림이며, 난독화된 프로그램 코드 기능은 미디어 스트림을 복호화한다.
임의로, 데이터 흐름 수신기는 미디어 플레이어이고, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 압축된 미디어 스트림이며, 난독화된 프로그램 코드 기능은 미디어 스트림을 압축해제한다.
임의로, 데이터 흐름 수신기는 미디어 플레이어이고, 입력 데이터 흐름은 미디어 콘텐츠를 포함하는 인코딩된 미디어 스트림이며, 난독화된 프로그램 코드 기능은 미디어 스트림을 디코딩한다.
실시예들이 하기의 도면들을 참조하여 기술될 것이다.
도 1a는 데이터 흐름을 처리하기 위한 알고리즘을 실행하는 컴퓨터 시스템, 및 동일한 기능을 갖지만 난독화된 코드 및 데이터 흐름을 갖는 그 알고리즘의 변환된 버전을 실행하는 컴퓨터 시스템을 나타낸 도면.
도 1b는 데이터 흐름을 처리하기 위한 알고리즘을 실행하는 컴퓨터 시스템, 및 상이한 기능을 갖고 난독화된 코드 및 데이터 흐름을 갖는 그 알고리즘의 변환된 버전을 실행하는 컴퓨터 시스템을 나타낸 도면.
도 2는 알고리즘을 난독화하도록 구성되는 컴퓨터 시스템을 나타낸 도면.
도 3은 코드 난독화의 단계들을 나타낸 흐름도.
도 4는 고급 코드(high level code)가 어셈블리 코드(assembly code)로 컴파일되는 것을 나타낸 도면.
도 5는 어셈블리 코드가 브랜치 인코딩을 사용하여 난독화된 코드로 변환되는 것을 나타낸 도면.
도 6은 원본 소스(어셈블리) 코드가 난독화된 코드로 변환되는 것을 나타낸 도면.
도 7은 입력 데이터 스트림들을 처리하고 난독화된 알고리즘 및 데이터 흐름을 사용하여 출력 데이터 스트림들을 생성하는 시스템을 나타낸 도면.
도 8은 종래 기술의 스트리밍 미디어 전달 시스템을 나타낸 도면.
도 9는, 제1 실시예에서, 브랜치 인코딩을 사용하여 난독화된 알고리즘들 및 데이터 흐름들을 이용하는 스트리밍 미디어 (전달 및 수신) 시스템을 나타낸 도면.
도 10은, 제2 실시예에서, 랜덤화된 브랜치 인코딩을 사용하여 난독화된 알고리즘들 및 데이터 흐름들을 이용하는 스트리밍 미디어 (전달 및 수신) 시스템을 나타낸 도면.
도 11은 스트리밍 미디어 시스템의 미디어 서버를 보다 상세히 나타낸 도면.
도 12는 스트리밍 미디어 시스템의 미디어 플레이어를 보다 상세히 나타낸 도면.
도 13은 일 실시예에 따른 변환 방법의 흐름도를 나타낸 도면.
도 14는 브랜칭 프로그램의 계층화된 유향 비순환 그래프(layered directed acyclical graph)를 나타낸 도면.
도 15는 그룹 프로그램(group program)을 기능 f(x)를 계산하는 계층화된 브랜칭 프로그램으로서 나타낸 도면.
도 16은 그룹 프로그램을 IDENTITY 기능과 NOT 기능에 대한 계층화된 브랜칭 프로그램으로서 각각 나타낸 도면.
도 17은 그룹 프로그램을 AND 기능에 대한 계층화된 브랜칭 프로그램으로서 나타낸 도면.
도 18은 배타적 OR 기능을 나타낸 도면.
도 1a는 데이터 흐름을 처리하기 위한 알고리즘을 실행하는 컴퓨터 시스템, 및 동일한 기능을 갖지만 난독화된 코드 및 데이터 흐름을 갖는 그 알고리즘의 변환된 버전을 실행하는 컴퓨터 시스템을 나타낸 도면.
도 1b는 데이터 흐름을 처리하기 위한 알고리즘을 실행하는 컴퓨터 시스템, 및 상이한 기능을 갖고 난독화된 코드 및 데이터 흐름을 갖는 그 알고리즘의 변환된 버전을 실행하는 컴퓨터 시스템을 나타낸 도면.
도 2는 알고리즘을 난독화하도록 구성되는 컴퓨터 시스템을 나타낸 도면.
도 3은 코드 난독화의 단계들을 나타낸 흐름도.
도 4는 고급 코드(high level code)가 어셈블리 코드(assembly code)로 컴파일되는 것을 나타낸 도면.
도 5는 어셈블리 코드가 브랜치 인코딩을 사용하여 난독화된 코드로 변환되는 것을 나타낸 도면.
도 6은 원본 소스(어셈블리) 코드가 난독화된 코드로 변환되는 것을 나타낸 도면.
도 7은 입력 데이터 스트림들을 처리하고 난독화된 알고리즘 및 데이터 흐름을 사용하여 출력 데이터 스트림들을 생성하는 시스템을 나타낸 도면.
도 8은 종래 기술의 스트리밍 미디어 전달 시스템을 나타낸 도면.
도 9는, 제1 실시예에서, 브랜치 인코딩을 사용하여 난독화된 알고리즘들 및 데이터 흐름들을 이용하는 스트리밍 미디어 (전달 및 수신) 시스템을 나타낸 도면.
도 10은, 제2 실시예에서, 랜덤화된 브랜치 인코딩을 사용하여 난독화된 알고리즘들 및 데이터 흐름들을 이용하는 스트리밍 미디어 (전달 및 수신) 시스템을 나타낸 도면.
도 11은 스트리밍 미디어 시스템의 미디어 서버를 보다 상세히 나타낸 도면.
도 12는 스트리밍 미디어 시스템의 미디어 플레이어를 보다 상세히 나타낸 도면.
도 13은 일 실시예에 따른 변환 방법의 흐름도를 나타낸 도면.
도 14는 브랜칭 프로그램의 계층화된 유향 비순환 그래프(layered directed acyclical graph)를 나타낸 도면.
도 15는 그룹 프로그램(group program)을 기능 f(x)를 계산하는 계층화된 브랜칭 프로그램으로서 나타낸 도면.
도 16은 그룹 프로그램을 IDENTITY 기능과 NOT 기능에 대한 계층화된 브랜칭 프로그램으로서 각각 나타낸 도면.
도 17은 그룹 프로그램을 AND 기능에 대한 계층화된 브랜칭 프로그램으로서 나타낸 도면.
도 18은 배타적 OR 기능을 나타낸 도면.
일반 개요
컴퓨터 시스템들에서, 입력 데이터 흐름들이 출력 데이터 흐름들을 생성하는 기능을 갖는 알고리즘들을 정의하는 프로그램 코드에 의해 처리된다. 예를 들어, 프로그램 코드는, 복호화된 나가는 데이터 흐름들을 생성하기 위해, 들어오는 암호화된 데이터 흐름들을 복호화할 수 있다.
이러한 프로그램 코드를 구현하는 시스템들의 예들은 다음과 같다:
미디어 스트림을 복호화하고 미디어 콘텐츠를 출력하는 프로그램 코드를 포함하는 미디어 플레이어에 의해 수신되는, 암호화된 미디어 콘텐츠를 전달하는 스트리밍 미디어 전달 시스템들.
문서들이 인가된 당사자들 간에 공유되는 문서 관리 시스템들.
라이센스들의 검증이 요구되는 미디어 또는 소프트웨어 라이센스 관리.
웹 브라우저 또는 다른 신뢰할 수 없는 플랫폼(untrusted platform)에서의 미디어 플레이어들.
보다 일반적으로, 암호화된 데이터 스트림을 수신하고 암호화되지 않은 출력을 제공하기 위해 그 스트림을 복호화하는 프로그램 코드를 포함하는 데이터 흐름 수신기, 또는 신뢰할 수 없는 당사자들에게 기능을 숨기기 위해 프로그램 코드가 난독화될 필요가 있는 신뢰할 수 없는 플랫폼 상의 시스템.
본원에 기술되는 실시예들은 입력 데이터 흐름들로부터 출력 데이터 흐름을 생성하기 위해 프로그램 코드의 실행 동안 프로그램 코드 및/또는 그에 따른 내부 데이터 흐름들의 난독화를 가능하게 한다. 프로그램 코드는 (원본) 프로그램 코드를 난독화된 프로그램 코드로 변환하기 위해 랜덤화된 브랜치 인코딩을 사용하여 난독화된다. 임의로, 실시예들은 또한 추가의 난독화를 제공하기 위해 프로그램 코드의 추가의 수정이 랜덤화된 입력 인코딩들을 취할 수 있게 (그리고 임의로 랜덤화된 출력 인코딩들을 제공할 수 있게) 할 수 있다.
추가의 실시예들은, 데이터 흐름 수신자가 적대자에 의해 공격을 받더라도 입력 데이터 흐름 내의 프로그램 코드 기능 및/또는 (미디어 콘텐츠와 같은) 콘텐츠가 추출될 수 없도록, (미디어 플레이어와 같은) 데이터 흐름 수신기 내에서 난독화된 프로그램 코드의 후속 사용을 가능하게 한다. 프로그램 코드는, 난독화된 프로그램 코드가 조사되더라도, 그의 기능이 상당한 계산 노력 없이는 해석될 수 없도록, 그리고 프로그램 코드가 실행될 때 그 내에서의 내부 데이터 흐름들이 검사되는 경우, 입력 데이터 흐름의 콘텐츠가 상당한 계산 노력 없이는 추출될 수 없도록, 난독화될 수 있다.
일 예로서(그리고 도 8 내지 도 13과 관련하여 나중에 추가로 기술될 것인 바와 같이), 스트리밍 미디어 전달 시스템에서, 미디어 서버는 미디어 콘텐츠를 시청하고자 하는 가입자들(최종 사용자들)에게 미디어 콘텐츠를 암호화 및 압축된 미디어 스트림들로 전달한다. 가입자의 미디어 플레이어는 (미디어 콘텐츠를 포함(embody)하는) 미디어 스트림을 입력 데이터 흐름으로서 수신하고, 사용자가 미디어 콘텐츠를 시청하도록 시청각 시스템에 전달될 수 있는 미디어 콘텐츠를 포함하는 복호화 및 압축해제된 출력 데이터 흐름들을 생성하기 위해 (미디어 스트림/입력 데이터 흐름의 복호화 및 압축해제를 비롯한) 미디어 스트림을 처리하는 알고리즘들/기능을 포함하는 프로그램 코드를 갖는다. 비인가된 당사자들(즉, 비가입자들)이 미디어 스트림을 미디어 플레이어에 도착하기 전에 가로챌 수 있더라도, 미디어 스트림은 그들이 미디어 콘텐츠를 시청하지 못하도록 암호화되어 있다.
따라서, 미디어 스트림들의 암호화는 미디어 스트림을 가로채는 적대자로부터 어느 정도의 보호를 제공한다. 그들이 그렇게 하더라도, 그들은, 복호화 키 및 알고리즘 없이는, 미디어 콘텐츠에 액세스할 수 없다. 그렇지만, 미디어 스트림이 가입자의 미디어 플레이어에 도달하면, 암호화되지 않은 데이터 흐름들을 수신하고 그리고/또는 프로그램 코드 기능을 검사 및 리버스 엔지니어링(reverse engineer)하기 위해 미디어 플레이어 및/또는 시청각 시스템이 가입자 또는 다른 적대적 당사자에 의해 손상될 수 있다. 이것은 미디어 콘텐츠 또는 미디어 콘텐츠를 포함하는 장래의 스트림들이 비인가된 방식으로 추출, 저장 및 사용될 수 있게 한다. 본원에 기술되는 실시예들은, 적대자가 미디어 플레이어를 공격하더라도, 적대자가 프로그램 코드 기능을 리버스 엔지니어링하고 그리고/또는 내부 데이터 흐름들을 검사하는 것을 보다 어렵게 만들기 위해 미디어 플레이어에서 난독화된 프로그램 코드의 생성 및 사용을 가능하게 하는 것에 의해, 이것을 해결한다.
실시예들이 앞서 열거된 것들과 같은 다른 적용분야들에 적용될 수 있지만, 본원에 기술되는 실시예들은 스트리밍 미디어 전달 시스템들에 중점을 둘 것이다.
데이터 흐름들을 보호하기 위한 프로그램 코드 및 데이터 흐름 난독화
2.1 개요
도 1a 및 도 1b는 본원에 기술되는 실시예들이 제공하는 것을 개념적으로 나타내고 있다.
개괄적으로 말하면, 도 1a를 참조하면, 일 실시예에서, 원본 기능(original functionality) F를 갖는 원본 알고리즘(original algorithm) A를 포함하는 원본 프로그램 코드가 동일한 기능 F를 수행하는 상이한 알고리즘 A'을 포함하는 난독화된 프로그램 코드로 변환된다. 도 1a의 상부는 원본 프로그램 코드가 컴퓨터 시스템(미디어 플레이어와 같은 데이터 흐름 수신기 등) 상에서 동작하고 그의 기능이 입력 데이터 스트림(데이터 흐름)으로부터 출력 데이터 스트림(데이터 흐름)을 생성하는 것을 나타내고 있다. 프로그램 코드는 공격에 취약하다. 도 1a의 하부는 난독화된 프로그램 코드가 동일한 기능을 갖는 동일한 컴퓨터 시스템 상에서 동작하는 것을 나타내고 있다. 앞서 기술된 바와 같이, 난독화된 프로그램 코드는 공격에 덜 취약하다.
보다 상세하게는, 도 1a의 상반부는 알고리즘 A를 포함하는 원본 프로그램 코드를 실행하는 프로세서(11)를 갖는 컴퓨터 시스템(10)을 나타내고 있다. 알고리즘 A의 기능 F는 입력 데이터 스트림(입력 데이터 흐름)(12)을 입력으로서 받아서 출력 데이터 스트림(출력 데이터 흐름)(13)을 생성한다. 컴퓨터 시스템은, 예를 들어, 미디어 플레이어 또는 임의의 다른 데이터 흐름 수신기일 수 있다. 일 예로서, 알고리즘 A는, 콘텐츠를 포함하는 암호화되지 않은 출력 데이터 스트림을 사용자에게 디스플레이될 수 있는 형태로 제공하기 위해, 콘텐츠를 포함하는 암호화된 데이터 스트림을 받아서 이를 복호화하는 복호화 기능을 가질 수 있다. 앞서 기술된 바와 같이, 이러한 시스템은 공격에 취약하다. 예를 들어, 검사되는 경우, 입력 데이터 스트림에 포함된 콘텐츠가 인가 없이 액세스 및 사용될 수 있도록, 기능 F 및/또는 프로그램 코드가 실행될 때 프로그램 코드에 의해 생성되는 내부 데이터 흐름들을 계산하는 원본 프로그램 코드는 복호화 알고리즘/기능의 리버스 엔지니어링 및/또는 복호화된 데이터 흐름들의 추출을 가능하게 한다.
이것을 해결하기 위해, 본 발명의 제1 실시예는 기능 F를 갖는 알고리즘 A를 포함하는 원본 프로그램 코드를 받아서, 랜덤화된 브랜치 인코딩을 사용하여, 원본 프로그램 코드를 난독화 알고리즘을 사용하는 난독화된 프로그램 코드로 변환(14)한다. (난독화 알고리즘 및 난독화 알고리즘이 구현되는 컴퓨터 시스템은 나중에 기술된다). 난독화된 프로그램 코드는 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전의 형태를 취한다. 난독화된 프로그램 코드는, 원본 알고리즘 A와 동일한 기능 F를 갖는, 상이한 알고리즘 A'을 포함한다. 난독화된 프로그램 코드는, (도 1a의 하반부에서와 같이) 컴퓨터 시스템 프로세서로 전송되어 그 상에서 실행될 때, 동일한 입력 데이터 스트림(12)을 받아서 원본 프로그램 코드와 동일한 출력 데이터 스트림(14)을 생성할 수 있다. 비인가된 당사자가 난독화된 프로그램 코드에 액세스하는 경우, 그가 알고리즘 A의 기능 F를 해석하는 것이 계산적으로 어렵다. 그리고, 난독화된 프로그램의 실행 동안 생성되는 내부 데이터 흐름들이 검사되는 경우, 출력 데이터 스트림이 무엇일 것인지, 그리고 따라서 입력 데이터 스트림에 포함된 콘텐츠가 무엇일지를 결정하는 것이 계산적으로 어렵다.
이상의 난독화된 프로그램 코드는 기능 및 데이터 흐름들을 해석하는 것을 어렵게 만든다. 그러나, 집요하다면, 동적 분석(dynamic analysis)을 사용하여 입력 데이터 흐름들 및 출력 데이터 흐름들에 대한 지식을 사용함으로써 프로그램 코드 기능을 리버스 엔지니어링하는 것이 가능하다. 이것은, 스트리밍 미디어의 보호에서와 같은, 일부 적용분야들에서 문제가 될 수 있다. 적대자가 프로그램 코드의 실행 동안 난독화된 프로그램 코드 및 내부 데이터 흐름들의 복호화 및 압축해제 기능을 결정할 수 없더라도, 적대자가 또한 액세스할 수 있는 입력 및 출력 데이터 흐름들로부터 (노력하면) 기능이 결정가능/복구가능할 수 있다.
이것을 해결하기 위해, 도 1b에 도시된 바와 같은 제2 실시예는 난독화된 프로그램 코드를 생성(produce)하기 위해 부가의 변환을 구현할 수 있다. 이 실시예에서의 원본 프로그램 코드는 도 1b와 관련하여 기술된 것과 동일한 변환을 거치고, 또한 보다 많은 정도의 난독화를 제공하기 위해 추가의 변환을 거친다. 제2 실시예는, 예를 들어, 난수로 랜덤하게 인코딩되는 입력 데이터 흐름들을 취급/그에 대해 작용하도록 변형된다. 난수 또는 다른 인코딩 프로세스에 대한 지식을 사용하여, 이미 난독화된 프로그램 코드는, 인코딩된 입력 데이터 흐름을 받아서 그 인코딩된 입력 데이터 흐름에 대해 요구된 기능을 여전히 수행할 수 있도록, 그에 따라 추가로 변환된다. 프로그램 코드는 이어서, 인코딩되지 않거나 임의로 인코딩된, 출력 데이터 흐름을 제공한다. 인코딩되어 있는 경우, 프로그램 코드는 인코딩된 출력을 제공하는 부가의 변환을 갖는다. (난독화 알고리즘 및 난독화 알고리즘이 구현되는 컴퓨터 시스템은 나중에 기술된다). 변환은 프로그램 코드를 추가로 랜덤화함으로써, 그 결과 얻어지는 난독화된 프로그램 코드가 훨씬 더 검사하기 어렵게 되도록 한다. 난독화된 프로그램 코드에서의 기능 및 알고리즘은 입력에서부터 출력까지 원본 프로그램 코드의 기능 및 알고리즘과 상이하다. 이에 따라, 원본 기능 F를 갖는 원본 알고리즘 A를 포함하는 원본 프로그램 코드가 상이한 기능 F"을 수행하는 상이한 알고리즘 A"을 포함하는 난독화된 프로그램 코드로 변환된다. 난독화된 프로그램 코드는 (임의로) 인코딩된 입력 데이터 스트림으로부터 인코딩된 출력 데이터 스트림을 생성한다. 인코딩된 출력 및 입력 데이터 스트림들은, 도 1b의 입력 및 출력 스트림들과는 상이하지만, 동일한 콘텐츠(예컨대, 미디어 콘텐츠)를 포함한다. 출력 데이터 스트림은 제1 실시예에서와 같이 디코딩(요구되는 경우)되고 이어서 사용(예컨대, 사용자에게 디스플레이)될 수 있다. 이 추가 실시예는 난독화된 프로그램 코드의 기능을 동적 분석을 사용하여 리버스 엔지니어링하는 것을 훨씬 더 어렵게 만든다. 입력 흐름들에 대한 랜덤화된 인코딩들로 인해, 다수의 입력들 및 출력들의 동적 분석이 수행되더라도, 출력 데이터 흐름들(인코딩되어 있는지 여부에 관계 없음)이 입력 데이터 흐름들과 관련하여 랜덤한 것처럼 보일 것이다. 이것은 동적 분석에 의해서도 난독화된 프로그램 코드의 기능을 확인하는 것을 어렵게 만든다.
제2 실시예에 따른 난독화된 프로그램 코드는 인코딩된 데이터 흐름들을 전달하는 시스템과 조합하여 사용된다. 컴퓨터 시스템 상에서 전송되고 실행될 때, 난독화된 프로그램 코드 기능 F"은, 그 중에서도 특히, 인코딩된 입력 스트림을 디코딩하는 부가 기능을 수행한다. 적대자가, 인코딩된 입력 데이터 흐름들 및 인코딩된 출력 데이터 흐름들을 검사할 수는 있더라도, 프로그램 코드의 기능을 확인할 수는 없다.
2.2 원본 프로그램 코드를 난독화된 프로그램 코드로 변환하는 것
제1 실시예에 따른 원본 프로그램 코드를 난독화된 프로그램 코드로 변환하는 프로세스가 이제부터 도 1a, 도 2 및 도 3을 참조하여 상세히 기술될 것이다. 도 2 및 도 3을 참조하면, 입력(24) 및/또는 난독화될 원본 프로그램 코드를 갖는 저장 리포지토리(22) 및 원본 프로그램 코드에 대해 랜덤화된 브랜치 인코딩을 수행(undertake)하는 난독화 알고리즘을 실행하는 프로세서(21)를 갖는 컴퓨터 시스템 상에서 변환이 수행된다. 난독화될 원본 프로그램 코드는 입력 및/또는 저장 리포지토리(22)로부터 받아지고(단계(30)), 랜덤화된 브랜치 인코딩 난독화 알고리즘(변환)(14)을 실행하는 프로세서(21)로 전달된다. 난독화 알고리즘(14)은 원본 프로그램 코드의 코드 엘리먼트들을 받아서 그들 각각을 (계층화된) 브랜칭 프로그램들로서 표현되는 기능 엘리먼트(functional element)들로 구성하고, 그 브랜칭 프로그램들을 랜덤화하며, 각각의 코드 엘리먼트에 대한 랜덤화된 브랜칭 프로그램들의 기능 엘리먼트들을 원본 프로그램 코드와 동일한 기능을 수행하는 랜덤화된 브랜칭 프로그램으로 어셈블(assemble)한다. 그 랜덤화된 브랜칭 프로그램은 이어서 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된(난독화된 코드) 버전을 형성하는 프로그램 코드로 변환된다(단계(31)). 난독화된 프로그램 코드는 이어서, 추후 검색 및 사용을 위해, 그리고/또는 사용을 위해 출력 인터페이스(25)를 통한 다른 컴퓨터 시스템(23)(즉, 미디어 플레이어와 같은 데이터 흐름 수신기)으로의 전송을 위해, 리포지토리(22)에 저장될 수 있다(단계(32)). 난독화된 코드를 사용하는 컴퓨터 시스템은, 예를 들어, 도 1a에 도시된 것일 수 있다. 바람직한 실시예에서, 각각의 코드 엘리먼트는, (입력 및/또는 출력 인코딩들을 갖는) 랜덤화된 계층화된 브랜칭 프로그램으로서 표현되면, 어셈블러 언어 연산(assembler language operation)에 다시 매핑되고, 최종적인 난독화된 프로그램 코드를 형성하기 위해, 다른 이러한 매핑된 연산들과 조합된다. 대안적으로, 각각의 코드 엘리먼트에 대한 브랜칭 프로그램들이 어셈블될 수 있으며, 이어서 마지막으로 어셈블러 연산들에 다시 매핑하는 것이 행해질 수 있다.
제2 실시예에서, 도 1b에 도시된 바와 같이, 랜덤화된 브랜칭 프로그램이 랜덤화된 인코딩을 갖는 입력 데이터 흐름들에 대해 동작할 수 있도록 랜덤화된 브랜칭 프로그램이 추가의 랜덤화된 변환을 갖는, 바람직하지만 임의적인 단계가 수행된다(랜덤화된 브랜칭 프로그램은 랜덤화된 입력 인코딩들을 포함한다). 각각의 기능 엘리먼트의 랜덤화된 브랜칭 프로그램의 입력 계층(input layer)들이 입력 데이터 흐름들의 랜덤화된 인코딩들에 따라 랜덤하게 스와핑(swap)된다. 임의로, 각각의 기능 엘리먼트의 랜덤화된 브랜칭 프로그램의 출력 계층(output layer)들이 또한 인코딩된 출력 데이터 흐름들을 제공하기 위해 랜덤하게 스와핑된다(즉, 랜덤화된 브랜칭 프로그램은 랜덤화된 출력 인코딩들을 포함한다). 따라서, 제2 실시예에서, 랜덤화된 브랜칭 프로그램은 임의로 랜덤화된 입력 및/또는 출력 인코딩들을 포함할 수 있다. (인코딩된 입력 데이터 흐름들을 받아서 인코딩된 출력 데이터 흐름들을 생성하는) 랜덤화된 입력 및/또는 출력 인코딩들이, 예를 들어, 입력 데이터 흐름들에 작용하는 난수를 사용해 행해질 수 있다. 기능 엘리먼트 브랜칭 프로그램이 난수를 사용해 인코딩된 입력 데이터 흐름을 받아 처리하여 올바른 출력 데이터 흐름을 제공할 수 있게 하기 위해 기능 엘리먼트 브랜칭 프로그램의 계층들을 그에 따라 스와핑하는 데 난수에 대한 지식이 사용된다. 이것은 난독화된 프로그램 코드의 기능을 동적 분석을 사용하여 리버스 엔지니어링하는 것을 어렵게 만든다.
바람직한 실시예에서, 코드 엘리먼트들은 난독화된 프로그램 코드가 실행될 CPU에 의해 제공되는 명령어 세트의 어셈블리어 연산들이다. 원본 프로그램 코드가 어셈블리어 연산들의 코드 엘리먼트들로 변환될 수 있다. 기능 엘리먼트들(이들로부터 코드 엘리먼트들이 구성될 수 있음)은 IDENTITY, AND, NOT, OR, XOR, ADD, MUL이며, 이들 각각은 (랜덤화된 인코딩들 및 임의로 출력 인코딩들을 갖는 입력 데이터 흐름을 받는 부가의 변환을 사용하여 또는 사용하지 않고) 랜덤화된 브랜칭 프로그램으로서 표현될 수 있다.
브랜치 인코딩과 랜덤화된 입력 및 출력 인코딩들(난독화 알고리즘)을 사용하여 어떻게 원본 프로그램 코드가 난독화된 프로그램 코드로 변환될 수 있는지에 대한 간략화된 예시적인 예가 이제부터 도 4 내지 도 6을 참조하여 설명될 것이다. 난독화 알고리즘 자체는, 그의 도출(derivation)과 함께, 나중에 기술될 것이다.
도 4를 참조하면, 원하는 기능 F를 구현하기 위해 알고리즘 A를 코딩/구현하는 데, C 또는 C++와 같은, 고급 언어(high level language)가 사용된다. 이 결과, 난독화를 필요로 하는, 도 4에 도시된 고급 코드(40)와 같은, 원본 프로그램 코드가 얻어진다. 주목할 만한 점은, 보다 일반적으로, 많은 상이한 기능들을 구현하는, 원본 프로그램 코드에 포함된 많은 알고리즘들이 있을 것이라는 것이다. 단일의 알고리즘 및 기능에 대해 언급하는 것은 예로서 명확함을 위한 것이며, 제한하는 것으로 간주되어서는 안된다. 고급 언어 프로그램 코드는 어셈블리 프로그램 코드(41) 또는 다른 적당한 저급 언어/코드(low level language/code)로 컴파일된다. 이것은 프로그램 코드가 실행되는 CPU의 명령어 세트로부터 취해진 어셈블리어 연산들인 코드 엘리먼트들을 포함한다(예를 들어, AND 연산(42)을 참조). 저급 코드는 원본 프로그램 코드의 동일한 알고리즘 A 및 기능 F를 포함한다(즉, 코드 엘리먼트들 모두는 원본 프로그램 코드의 동일한 알고리즘 A 및 기능 F를 수행한다). 저급 코드가 "원본 프로그램 코드"라고도 지칭될 수 있고, 난독화를 필요로 한다. 즉, 고급 언어 코드 또는 그와 동등한 저급 언어 코드가 원본 프로그램 코드이다. 이 코드는 리포지토리(22)에 저장될 수 있다.
원본 프로그램 코드는 이어서 변환을 수행하는 컴퓨터 시스템(20)의 프로세서(21) 상의 난독화 알고리즘(14)에 전달된다. (대안적으로, 고급 언어 코드로부터 저급 언어 코드로의 변환이 변환의 임의적인 일부인 것으로 간주될 수 있다). 난독화 알고리즘은 (저급 언어) 원본 프로그램 코드(41)를 입력으로서 받고, 각각의 코드 엘리먼트(예를 들어, AND 엘리먼트(42))에 대해, 코드 엘리먼트의 랜덤화된 브랜치 인코딩된 버전을 생성하기 위해 각각의 코드 엘리먼트를 랜덤화된 계층화된 브랜칭 프로그램으로서 표현하기 위해 본원에 기술되는 바와 같이 (랜덤화된 인코딩들을 갖는 입력 데이터 흐름을 받는 부가의 변환을 사용하여 또는 사용하지 않고) 랜덤화된 브랜치 인코딩을 구현한다. 각각의 브랜칭 프로그램은 이어서 어셈블러 언어 연산에 다시 매핑된다. 대안적으로, 각각의 코드 엘리먼트에 대한 랜덤화된 브랜칭 프로그램들이 먼저 전체 코드의 랜덤화된 계층화된 브랜칭 프로그램 표현을 생성하기 위해 어셈블되고, 이어서 그것이 대응하는 어셈블러 언어 연산들에 다시 매핑된다. 코드 엘리먼트/전체 프로그램의 랜덤화된 브랜치 인코딩된 버전에 대한 언급은 그의 계층화된 브랜칭 프로그램 표현들, 또는 랜덤화된 계층화된 브랜칭 프로그램 표현의 최종적으로 변환된/매핑된 저급 또는 후속하는 고급 코드 정의를 지칭할 수 있다.
간략하게, 난독화 알고리즘이 여기서 기술되고, 이하에서 보다 상세히 설명될 것이다. 난독화 알고리즘은, 임의의 산술 또는 논리 연산이, 순열(permutation)들의 시퀀스로 이루어진 수학적 구조(mathematical structure)인, 정폭 브랜칭 프로그램(constant width branching program)이라고 하는 것에 의해 표현할 수 있다고 하는 배링턴의 정리(Barrington's Theorem)의 발전에 기초한다. 도 5 및 도 6을 참조하면, 난독화 알고리즘의 제1 단계는 원본 프로그램 코드에서 산술 및 논리 연산들(예컨대, 코드 엘리먼트들)을 식별하는 것을 포함한다. 예를 들어, 도 5에서, AND 코드 엘리먼트가 식별된다. (AND 연산과 같은) 각각의 코드 엘리먼트에 대해, 난독화 알고리즘은 기능 엘리먼트를 사용하여 동일한 연산을 수행하는 랜덤화된 브랜칭 프로그램(50)을 생성하며, 각각의 기능 엘리먼트는 브랜칭 프로그램(예컨대, AND 브랜칭 프로그램(50)을 참조)으로서 형성된다. 도 5는 계층화된 브랜칭 프로그램의 개략적 표현(50)을 나타내고 있다. 본 기술분야의 통상의 기술자라면 이 다이어그램이 실제로는 알고리즘이 생성하는 것이 아니라는 것 - 오히려 그것이 개략적 표현(50)에 의해 나타내어진 기능을 갖는 계층화된 브랜칭 프로그램을 생성한다는 것 - 을 잘 알 것이다.
이어서, 기능 엘리먼트에 대한 랜덤화된 브랜칭 프로그램을 생성하기 위해 각각의 기능 엘리먼트에 대한 브랜칭 프로그램의 순열들이 랜덤하게 스와핑된다. 또한, 임의로, 입력 데이터 흐름들에 대해 랜덤화된 입력 인코딩들이 사용되는 경우, 랜덤화된 브랜칭 프로그램의 계층들이, 입력 데이터 스트림에 대한 인코딩 프로세스(예컨대, 난수 인코딩)에 대한 지식을 사용하여, 수정된 입력들을 예상/그에 대해 동작하도록 그에 따라 수정된다. 임의로, 출력 데이터 흐름들에 대해 랜덤화된 출력 인코딩들이 요구되는 경우, 랜덤화된 브랜칭 프로그램의 계층들이 출력 인코딩을 사용하여 수정된 출력들을 제공하도록 그에 따라 수정된다. 원본 프로그램 코드 전체의 기능을 대체할 기능을 정의하는 랜덤화된 브랜칭 프로그램을 형성하기 위해, 각각의 코드 엘리먼트에 대한 랜덤화된 브랜칭 프로그램의 순열들이 이어서 조합된다. 랜덤화된 입력 인코딩들의 추가는 최종적인 난독화된 프로그램 코드의 기능을 동적 분석을 사용하여 리버스 엔지니어링하는 것을 훨씬 더 어렵게 만든다. 입력 흐름들에 대한 랜덤화된 인코딩들로 인해, 다수의 입력들 및 출력들의 동적 분석이 수행되더라도, 출력 데이터 흐름들(인코딩되어 있는지 여부에 관계 없음)이 임의로 변하는 것처럼 보일 것이다. 이것은 동적 분석을 사용하더라도 난독화된 프로그램 코드의 기능을 확인하는 것을 아주 어렵게 만든다.
도 6을 참조하면, 다음 단계는 각각의 코드 엘리먼트에 대한 생성된 랜덤화된 브랜칭 프로그램을 다시 어셈블리어 연산들로 변환하고, 코드 자체에 원하는 수준의 복잡성 및 난해성(unintelligibility)을 구체적으로 구현하도록, 프로그램 코드(난독화된 프로그램 코드(60))를 형성하기 위해 이들을 조합하는 것이다. 이 경우에, AND 엘리먼트는 난독화된 코드로서 표현되었다. (이 시점에서, 다른 코드 엘리먼트들은 아직 변환/난독화되지 않았으며, 따라서 난독화된 코드에서 거의 원본 코드 형태로 나타난다. 이에 따라, 예시적인 예로서, 도 6은 개념을 설명하기 위해 부분적으로 난독화된 코드를 나타낸 것에 불과하다. 그러나, 잘 알 것인 바와 같이, 변환이 다른 코드 엘리먼트들에 대해서도 진행될 수 있고, 따라서 최종적으로 코드의 전부 또는 대부분이 난독화될 것이다. 이것은 또한 모든 코드 엘리먼트들이 난독화될 필요는 없고 단지 일부를 난독화하는 것으로부터, 여전히 장점들을 제공하기에 충분히 난독화될 수 있는, 부분적으로 난독화된 코드가 여전히 얻어질 것이라는 것을 강조한다. 이것은, 예를 들어, 일부 특정 코드 엘리먼트들이 의도적으로 난독화되지 않는 의사 코드와 관련하여 이하에서 더 설명될 것이다).
바람직하게는, 브랜칭 프로그램이 행렬 연산들을 사용하여 난독화된 형태로 "변환"된다. 이러한 이유는, 실제로는, 각각의 코드 엘리먼트에 대한 계층화된 브랜칭 프로그램들을 생성하는 것이 비효율적이기 때문이다. 따라서, 동등한 기능 출력이, 어셈블리 코드로서 정의될 수 있고 계층화된 브랜칭 프로그램(그리고 따라서 원본 코드 엘리먼트)과 동일한 기능을 수행하는, 보다 효율적인 행렬 계산들을 사용하여 생성된다. 행렬 계산들을 수행하는 어셈블리 코드는 출력 난독화된 코드를 형성한다. 이에 따라, 행렬 연산들은 난독화된 코드를 생성한다. 도 5 및 도 6에서의 AND 예의 경우에, 행렬은 AND 연산을 (도 5에서의 브랜칭 프로그램에 대응하는) Ben-Or 및 Cleve 그룹 프로그램으로서 계산하도록 구성된다. 이것은 다음과 같이 행해진다.
2. A와 B의 역(inverse) C와 D를, 각각, 계산한다.
이상의 계산은, 행렬 연산들을 계산하고 그로써 AND 연산을 구현하는 그룹 프로그램을 계산하기 위해, 어셈블리 코드로 수행될 수 있다. 그 어셈블리 코드의 결과, 원본 AND 연산을 동일한 기능을 수행하는 이해하기 어렵지만 동등한 코드로 대체하는, 도 6에 도시된 바와 같은, 난독화된 프로그램 코드(60)가 얻어진다. 즉, AND 코드 엘리먼트에 대한 행렬 계산들이 AND 코드 엘리먼트에 대한 난독화된 코드로 변환된다. 앞서 살펴본 바와 같이, 도 6에서 난독화되지 않은 채로 있는 다른 코드는 동일한 방식으로 난독화될 수 있을 것이다.
그것이 제2 실시예에 따른 랜덤화된 입력 및/또는 출력을 갖는다면, 기능이 인코딩들을 갖는 입력 데이터 흐름들을 수신하도록 이제 설계되어 있기 때문에, 기능이 원본 프로그램 코드와 상이하다. 제1 실시예에 따라 난독화되기만 하는 경우, 난독화된 코드는, 원본 프로그램 코드와 동일한 기능을 수행하지만 이해하기 어려운, 인코딩되지 않은 입력을 받도록 설계된다. 난독화된 프로그램 코드는 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전이다. 난독화 알고리즘은 (임의로 랜덤화된 인코딩들을 갖는 입력 데이터 흐름을 받고 또한 임의로 출력 데이터 흐름들에 대해 출력 랜덤화된 인코딩들을 취하는 부가의 변환을 갖는) 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전을 출력한다. 이것은 난독화된 프로그램 코드이다. 이상에서는 제2 바람직한 실시예에 따라 랜덤화된 브랜치 인코딩을 사용하여 난독화된 프로그램 코드를 생성하는 것을 기술한다. 대안에서, 제1 실시예에 따르면, 랜덤화된 브랜치 인코딩으로 구성되지만 랜덤화된 입력 인코딩들을 갖는 입력 데이터 스트림들을 처리하는 부가의 변환을 갖지 않는 난독화된 프로그램 코드를 생성하는 것이 가능하다.
난독화된 어셈블리 코드는 이어서 애플리케이션에 링크될 수 있도록 동일한 툴 체인(tool chain)에 있는 표준 어셈블러를 사용하여 고급 오브젝트 코드(high-level object code)(61)로 어셈블된다. 그 결과 얻어진 어셈블리 코드 및 고급 오브젝트 코드도 난독화된 프로그램 코드이다. 이것은 이어서 추후 사용을 위해 저장소로 컴퓨터 시스템(20) 상의 리포지토리(22)로 전송되거나, 사용을 위해 출력 인터페이스(25)를 통해 다른 컴퓨터 시스템(23)으로 전송될 수 있다. 임의로, 원본 프로그램 코드가 중간 어셈블리 단계를 필요로 함이 없이 곧바로 오브젝트 코드로 컴파일되어 난독화될 수 있을 것이다.
최종 결과는, 대체된 코드가 원본 코드와 완전히 동일한 기능을 수행하는 것(제1 실시예의 경우에)은 물론 그의 기능을 보존하도록 설계되어 있기 때문에, 난독화가 의식되지 않는다(transparent)는 것이다. 그러나, 알 수 있는 바와 같이, 브랜칭 프로그램 코드는 원본 프로그램 코드보다 훨씬 더 복잡하다. 이 브랜칭 프로그램들의 복잡성과 랜덤성(randomness)은 난독화된 프로그램을 이해하기 어렵게 그리고 따라서 공격자가 분석 및 공격하기 어렵게 만들도록 설계되어 있다. 암호 시스템들에 적용되는 훨씬 더 강력한 보안 개념인, 공격을 계산적으로 불가능하게 만드는 구분불가능성 난독화기(indistinguishability obfuscator)를 생성하기 위해 이것이 추가로 취해질 수 있다.
난독화된 프로그램 코드는 그것이 사용될 특정의 소프트웨어 및/또는 하드웨어 디바이스의 제조 시에 생성 및 전송될 수 있다. 예를 들어, 미디어 플레이어의 경우에, 미디어 플레이어로부터 복호화 기능을 수행하는 난독화된 프로그램 코드는 미디어 플레이어가 제조되고 있을 때 생성되어 미디어 플레이어 상의 프로세서로 전송될 수 있다. 대안적으로, 난독화된 프로그램 코드는, 통신 채널을 통한 다운로드를 통하는 것과 같이, 나중에 전송될 수 있다. 이것은, 기능의 변경을 고려하기 위해 또는 난독화된 프로그램 코드를 정기적으로 변경하는 것에 의해 부가의 보호 계층을 제공하기 위해, 난독화된 프로그램 코드를 규칙적인 간격으로 업데이트하는 것을 가능하게 할 것이다. 이들이 일부 예들에 불과하고, 본 발명의 제1 또는 제2 실시예들을 사용하여 생성되는 난독화된 프로그램 코드가 임의의 적용분야에서 사용되고, 임의의 적당한 방식으로 그 적용분야의 소프트웨어 및/또는 하드웨어로 전송될 수 있다는 것을 잘 알 것이다.
2.3 난독화 알고리즘
단계(31)의 난독화 알고리즘 및 그의 도출은 본 명세서의 제목 4 하에서의 도출 그리고 또한 도 4 내지 도 6을 참조한 간략화된 예시적인 예를 참조하여 상세히 기술될 것이다.
도출의 제목 4.5를 참조하면, 도출은 어셈블리어 연산들의 공통 서브셋이 어떻게 대응하는 기능 IDENTITY, AND, NOT, OR, XOR, ADD, MUL(그리고 유도에 의해 INC, DEC, SUB)의 랜덤화된 계층화된 브랜칭 프로그램들 또는 그 기능적 엘리먼트들의 일부 도출로서 표현될 수 있는지를 설명한다(본 기술분야의 통상의 기술자는 기능 엘리먼트들이 다른 논리적 기능 엘리먼트들의 조합들로서 도출될 수 있다는 것을 알 것이다). 어셈블리어 연산들은, x86, ARM, MIPS와 같은, 전형적인 CPU들의 각자의 명령어 세트들에서의 특정 연산들에 매핑할 수 있다. 어셈블리어 연산들의 이 공통 서브셋은 원본 프로그램 코드를 이루고 있는 코드 엘리먼트들이다. 설명 열은 표에서의 각각의 코드 엘리먼트의 랜덤화된 브랜치 인코딩된 버전을 생성하는 데 사용될 수 있는 (대응하는 랜덤화된 브랜칭 프로그램 표현들을 갖는) 기능 엘리먼트들을 나타내고 있다. 이들 각각에 대한 도출이 이제부터 간략하게 기술될 것이다.
도출의 제목 4.2를 참조하면, 계층화된 유향 비순환 그래프(directed acyclic graph)(DAG)는 기능(예컨대, 산술 또는 논리 연산)을 상호연결된 노드들을 사용하여 표현(에뮬레이트)할 수 있다. 도출의 도 14에 도시된 바와 같이, 최상위 노드(top node)에서 시작하여 각각의 (단일 비트) 입력에 대응하는 상호연결들을 따라가는 것에 의해 기능이 평가될 수 있다. 계층화된 유향 비순환 그래프는 브랜칭 프로그램을 표현하는 데 사용될 수 있다. 계층화된 유향 비순환 그래프는 그룹 프로그램을 배링턴의 정리에 따라 계층화된 브랜칭 프로그램으로서 표현하는 데 사용될 수 있다. 예를 들어, IDENTITY 기능과 NOT 기능은, 도출의 도 15에 도시된 것과 같이, 이러한 방식으로 표현될 수 있다. AND 기능과 같은, 보다 복잡한 기능은, 도 17에서와 같이, IDENTITY 및 NOT 기능으로 구성될 수 있다. 배링턴의 정리는 그룹 프로그램이 연결된(concatenated) IDENTITY와 NOT 기능들, 또는 AND, OR 기능들과 같은 상위 레벨 기능들의 조합을 사용하여 계층화된 브랜칭 프로그램으로서 구성될 수 있다는 것을 추가로 입증한다. 이들은 그 자신들 각각이 브랜칭 프로그램으로서 표현되는 "기능 엘리먼트들"이라고 불린다.
그룹 프로그램은 논리 회로 또는 논리 회로 내의 단일 게이트를 나타낼 수 있거나; 이와 동등하게, 그룹 프로그램은 원하는 기능을 수행하는 컴퓨터 프로그램, 또는 컴퓨터 프로그램의 단일 코드 엘리먼트를 나타낼 수 있다. 따라서, 배링턴의 정리를 사용하여, 컴퓨터 프로그램이 이론적으로는 브랜칭 프로그램으로서 표현될 수 있으며, 여기서 컴퓨터 프로그램 코드는, 역시 브랜칭 프로그램들로서 표현될 수 있는, 기능 엘리먼트들로 구성된다.
이 기능들(예컨대, IDENTITY, AND, NOT, OR 기능들)이 이론적으로는 임의의 그룹 프로그램(즉, 코드 엘리먼트와 같은, 임의의 컴퓨터 프로그램 기능)을 표현하기 위해 조합될 수 있지만, 보다 복잡한 코드 엘리먼트 기능들에 대해 이것을 행하는 것이 계산적으로 비효율적이다. 컴퓨터 프로그램에서의 각각의 코드 엘리먼트에 대한 기능 엘리먼트들의 브랜칭 프로그램들의 조합을 사용하는 브랜치 인코딩을 사용하여 표현되는 컴퓨터 프로그램 기능은 너무 크고 복잡하여 구현할 수 없을 것이다. 따라서, 본 발명자는 보다 효율적인 브랜칭 프로그램들로서 표현되는 추가의 기능 엘리먼트들이 보다 복잡한 코드 엘리먼트들을 구성하는 데 필요한 것으로 결정하였다. 배링턴의 정리의 변형은 이진 XOR(배타적 OR) 기능을 계산하는 효율적인 그룹 프로그램을 구성하기 위해 특수 선형 그룹들을 이용할 수 있다. 그룹 프로그램(예컨대, 컴퓨터 프로그램의 코드 엘리먼트들)은, 행렬 계산들로 구현되는, XOR 기능들(도 18을 참조)의 조합을 사용하는 계층화된 브랜칭 프로그램으로서 구성될 수 있다. 이 결과, 단일 비트들을 입력으로서 받고 단일 비트들을 출력할 수 있는, 보다 효율적인 그룹 프로그램이 얻어진다.
도출의 제목 4.3을 참조하면, 다중 비트 입력들(워드 입력들)을 받을 수 있고 전형적인 CPU 아키텍처들과 호환되는 워드 크기들을 갖는 산술 기능들을 계산할 수 있는 보다 복잡한 코드 엘리먼트에 대한 그룹 프로그램이 이상과 같이 구성될 수 있는 추가의 개선이 기술된다. 이 결과, 계층화된 브랜칭 프로그램들로 표현되는 ADD, MUL, INC, DEC 및 SUB 기능 엘리먼트들이 얻어진다. 이것은 프로그램 코드의 보다 복잡한 개별 코드 엘리먼트들(예컨대, ADD 연산)이 기능 엘리먼트 브랜칭 프로그램들로서 표현될 수 있게 한다.
이상에서 기능 엘리먼트들의 브랜칭 프로그램 표현들을 사용하여, 구성은 따라서 임의의 컴퓨터 프로그램 코드를 계층화된 브랜칭 프로그램으로서 표현할 수 있고 동일한 기능을 에뮬레이트할 수 있다. 계층화된 랜덤화된 브랜칭 프로그램이, 동일한 기능을 수행하는 원본 컴퓨터 프로그램 코드의 브랜치 인코딩된 버전을 표현하는, 컴퓨터 프로그램 코드로 다시 변환될 수 있다. 컴퓨터 프로그램 및/또는 그 결과 얻어진 컴퓨터 프로그램 코드를 표현하는 계층화된 브랜칭 프로그램을 구성하는 것은 브랜치 인코딩이라고 불린다.
도출의 제목 4.4를 참조하면, 계층화된 브랜칭 프로그램의 순열들이 랜덤화된 방식으로 변경될 수 있다 - 즉, 노드들 사이의 경로들이 랜덤하게 변경될 수 있다. 이것은 랜덤화된 브랜치 인코딩이라고 불린다. 랜덤화된 브랜치 인코딩은 여전히 동일한 기능을 유지한다. 그 결과 얻어진 랜덤화된 계층화된 브랜치 인코딩(및 그 결과 얻어진 프로그램 코드)은 이해하기 어렵다. 프로그램 코드를 검사하고 코드의 기능을 결정하는 것이 계산적으로 어렵다. 본원에 기술된 바와 같은 제1 실시예의 결과, 기능을 갖는 원본 프로그램 코드가 랜덤화된 브랜치 인코딩되고, 그 결과 원본 프로그램 코드와 동일한 기능을 수행하는 이해하기 어려운(난독화된) 프로그램 코드가 얻어진다.
정의 4를 참조하면, 입력 데이터 흐름들이 랜덤화된 인코딩들을 갖는 경우, 이상의 랜덤화된 브랜칭 프로그램이 입력 인코딩들을 갖는 데이터 흐름들을 수신하도록 추가로 변환될 수 있다. 입력 데이터 흐름들을 인코딩하는 데 사용되는 (난수와 같은) 프로세스에 대한 지식은 수정된 입력들을 예상/그에 대해 동작하도록 그룹 프로그램에서의 계층들을 그에 따라 수정하는 데 사용된다. 예를 들어, 인코딩된 입력 데이터 흐름의 한 비트가 인코딩되지 않은 입력 데이터 흐름으로부터 플립(flip)되는 경우(예컨대, "1"이 "0"으로 됨), 그 비트에 대한 브랜칭 프로그램의 입력 계층은, "0"입력에 대해서 이전에 "1"입력에 대해 제공했던 것과 동일한 출력을 제공하도록, 그에 따라 수정된다. 임의로, 랜덤화된 출력 인코딩은 각각의 엘리먼트를 랜덤 순열(random permutation)과 곱하는 것에 의해 획득된다. 그 결과 얻어진 그룹 프로그램(및 프로그램 코드)은 용이하게 분석될 수 없다.
제목 4.5는 난독화 알고리즘의 하나의 가능한 실시예를 구성하기 위해 이상의 도출을 적용하는 것을 보여준다. 랜덤화된 브랜치 인코딩을 사용하여, 공통 어셈블리어 연산들(표 2에 나타낸 것과 같은 원본 프로그램 코드의 코드 엘리먼트들)이 IDENTITY, AND, NOT, OR, XOR, ADD, MUL 기능 엘리먼트들(그 자신들은 브랜치 인코딩에 의해 구현됨)로부터 랜덤화된 브랜칭 프로그램들로서 구성될 수 있다. 각각의 코드 엘리먼트는 제목 4.5 하에 요약된 바와 같이 그리고 도출 전체에 걸쳐 기술된 바와 같이 구성될 수 있다. 이들이 조합된 결과, 그룹 프로그램이 얻어지며, 그룹 프로그램은, 프로그램 코드로 다시 변환될 때, 기능 F"을 갖는 알고리즘 A"을 실행하는 난독화된 프로그램 코드가 얻어진다. 인코딩된 출력 흐름들은 이어서, 사용을 위해 필요한 출력 흐름들을 얻기 위해, 난수를 사용하여 디코딩될 수 있다.
코드 엘리먼트들의 기능을 수행하는 계층화된 브랜칭 프로그램들이 도 15 내지 도 18에 개략적 표현으로 나타내어져 있다는 것을 잘 알 것이다. 이 개략적 표현은 알고리즘이 실제로 무엇을 생성하는지가 아니라, 이는 단지 변환 알고리즘이 무엇을 생성하는지를 나타낸다. 변환은 계층화된 브랜칭 프로그램들을 생성하기 위해 (제목 4 하에 나타낸 바와 같은) 행렬 계산들을 이용하고, 계층화된 브랜칭 프로그램들로부터 최종적인 난독화된 코드가 얻어진다(최종적인 코드는 원본 코드 엘리먼트를 표현하는 계층화된 브랜칭 프로그램을 수행하는 어셈블리어 명령어들임).
이상의 도출에 기초한 단계(31)의 난독화 알고리즘이 여기에 그대로 제시(replicate)되고 설명된다. 의사 코드는 아래에 제시되어 있다. 난독화 알고리즘은 원본 프로그램 코드를 난독화된 프로그램 코드로 변환하는 (입력 및 출력 인코딩들을 사용하는 것을 포함하는) 랜덤화된 브랜치 인코딩 방법을 구현한다. 도 13은 알고리즘의 플로차트를 나타낸다. 알고리즘이 일 예로서 도 4 내지 도 6 및 AND 코드 엘리먼트를 참조하여 설명될 것이지만, 다른 코드 엘리먼트들이 동일한 방식으로 알고리즘에 의해 처리될 수 있다는 것을 잘 알 것이다. 알고리즘은 변환의 하나의 가능한 알고리즘 구현에 불과하고, 본 기술분야의 통상의 기술자라면 변환이 동일한 개념적 변환들을 여전히 수행하는 대안의 알고리즘들로 이루어질 수 있다는 것을 이해할 것이다.
알고리즘은 순열들 G를 사용하여 어셈블러 코드 연산들 및 언어 L로부터 매핑되는, 코드 엘리먼트들/어셈블러 코드 연산들 Γ를 포함하는 프로그램 P에 대해 동작한다.
모든 기능들에 대해, 난독화된 명령어가 존재한다.
변환 방법은, 도 13을 참조하여, 다음과 같이 기능한다. 이것은 원본 고급 코드(도 4의 도면부호(40))가 저급 코드(도 4의 도면부호(41))로 변환된 것으로 가정한다(단계(190)).
라인 1, 라인 2, 라인 3: 단계(191) - 언어 L에 대한 프로그램 P에서의 각각의 코드 엘리먼트에 대해, 동등한 공통 서브셋 어셈블리어 코드 엘리먼트에 동등한 코드 엘리먼트가 있으면, 코드 엘리먼트를 그 코드 엘리먼트에 대한 그룹 프로그램에 매핑한다(즉, 코드 엘리먼트를 계층화된 브랜칭 프로그램으로서 표현되는 대응하는 기능 엘리먼트로서 정의한다). 예를 들어, 코드 엘리먼트 AND(도 5의 도면부호(42))는 (도 5에서 50으로서 개략적으로 표현되는) AND의 계층화된 브랜칭 프로그램 표현으로서 표현된다.
라인 4, 라인 5: 단계(192) - 코드 엘리먼트에 대한 브랜칭 프로그램의 그룹 프로그램 길이를 설정하고, 계층 순열들을 랜덤하게 선택한다. 즉, 브랜칭 프로그램의 하나의 계층의 노드들과 브랜칭 프로그램에서의 후속 계층의 노드들 사이에 있는 1 및 0 입력들에 대한 경로들을 랜덤하게 선택한다. 이것은 브랜칭 프로그램을 랜덤화한다.
라인 7, 라인 8: 단계(193, 194) - 임의로, 랜덤화된 인코딩들을 갖는 입력 데이터 흐름들을 받기 위해 추가 변환을 수행하는 경우, 라인 7, 라인 8을 수행한다. 코드 엘리먼트를 표현하는 계층화된 브랜칭 프로그램에 대한 입력 인코딩들을 설정한다. 예를 들어, 입력 데이터 흐름에 대한 인코딩 프로세스가 각각의 데이터 흐름 비트를 난수와 배타적 OR하는 경우, 동일한 난수와의 동일한 배타적 OR(XOR)에 따라 수정된 입력을 예상/그에 대해 동작하도록 브랜칭 프로그램의 입력 계층들을 수정한다. 입력 인코딩들은 브랜칭 프로그램으로서 표현된 이전 코드 엘리먼트의 출력 인코딩들에 따라, 또는, 적절한 경우, 인코딩된 입력 데이터 흐름을 받도록 설정된다.
라인 9, 라인 10, 라인 11: 단계(193) - 입력 데이터 스트림이 인코딩되지 않은 경우, 입력 인코딩들이 생성되지 않는다.
라인 12, 라인 13, 라인 14: 단계(195, 196) - 임의로, 랜덤화된 인코딩들을 갖는 데이터 흐름들을 출력하기 위해 추가 변환을 수행하는 경우, 라인 11, 라인 12을 수행한다. 코드 엘리먼트를 표현하는 계층화된 브랜칭 프로그램에 대한 출력 인코딩들을 설정한다. 예를 들어, 출력 데이터 흐름에 대한 인코딩 프로세스가 각각의 데이터 흐름 비트를 난수와 배타적 OR하는 경우, 동일한 난수와의 동일한 배타적 OR에 따라 출력을 제공하도록 브랜칭 프로그램의 출력 계층들을 수정한다.
라인 6, 라인 15: 단계(197) - 브랜칭 프로그램에서의 각각의 계층에 대해 이상의 단계들을 반복한다.
라인 16, 라인 17, 라인 18, 라인 19, 라인 20, 라인 21: 단계(198) - 랜덤화된 브랜칭 프로그램으로서 표현된 코드 엘리먼트는 언어 L에 대한 대응하는 어셈블러어 연산들로 다시 변환/매핑된다 - 이것은 원본 소스 코드의 코드 엘리먼트의 난독화된 코드 표현이다. 행렬 계산들이 코드 엘리먼트에 대한 브랜칭 프로그램을 구현하는 데 사용되는 경우, 행렬 계산들에 대한 어셈블리어 연산들은 원본 코드 엘리먼트에 대한 난독화된 코드이다. 소스 코드에 코드 엘리먼트들이 더 존재하면(단계(199)), 소스 코드로부터의 다음 코드 엘리먼트가 이어서 매핑된다(단계(191)). 이것은 소스 코드에서의 다른 코드 엘리먼트들 모두에 대해 반복된다. 원본 코드 엘리먼트가 언어 L로 된 동등한 코드 엘리먼트에 매핑되지 않는 경우, 코드 엘리먼트는 단순히 동일한 코드 엘리먼트에 다시 매핑된다(단계(191A)). 즉, 언어 엘리먼트가 단순히 복사되고 그것의 랜덤화된 브랜치 인코딩된 버전이 구성되지 않는다.
라인 22: 단계(200) - 원본 소스 코드에서의 모든 코드 엘리먼트들에 대한 원본 프로그램 코드의 난독화된 프로그램 코드인 프로그램 P'을 반환한다.
이상에서는 랜덤화된 인코딩들을 갖는 입력 데이터 흐름을 받기 위해 그리고 임의로 출력 데이터 흐름들에 대한 랜덤화된 인코딩들을 출력하기 위해 부가의(임의의) 변환을 갖는 랜덤화된 브랜치 인코딩을 사용하여 난독화된 프로그램 코드를 생성하는 것을 기술한다. 즉, 제2 바람직한 실시예에 따른 랜덤화된 입력 및 출력 인코딩들. 제2 실시예에 대한 대안에서, 랜덤화된 브랜치 인코딩으로부터 구성되지만 랜덤화된 출력 인코딩들을 갖지 않는 난독화된 프로그램 코드를 생성하는 것이 가능하다. 제1 실시예에 따른 다른 추가의 대안에서, 랜덤화된 입력 또는 출력 인코딩들이 전혀 없다. 랜덤화된 인코딩들을 갖는 입력 데이터 흐름을 받고, 임의로 출력 데이터 흐름에 대한 랜덤화된 인코딩들을 출력하는 부가의 변환이 행해지지 않는다. 이 경우에, 임의적인 라인 9 내지 라인 14는 난독화 알고리즘으로부터 생략된다.
3.
난독화된 코드의 이용
생성되면, (제1 실시예 또는 제2 실시예 중 어느 하나의) 난독화된 프로그램 코드는, 도 2에 도시된 것과 같은, 데이터 흐름 처리를 위해 컴퓨터 시스템(데이터 흐름 수신기)(23)으로 전송될 수 있다. 컴퓨터 시스템(23)은, 도 1을 참조하여 대략적으로 이전에 기술된 바와 같이, 포함된 알고리즘의 기능이 입력 데이터 흐름들을 처리하여 출력 데이터 흐름들을 생성하도록 난독화된 프로그램 코드를 실행한다. 이러한 컴퓨터 시스템(23)은 일반적으로 도 7에 도시되어 있으며, 또한 도 1a 및 도 1b에서 참조된 바로 그 컴퓨터 시스템(10)일 수 있다.
데이터 흐름 수신 컴퓨터 시스템(23)은 저장 리포지토리(70), 난독화된 프로그램 코드를 실행하는 프로세서(71), 입력 인터페이스(72) 및 출력 인터페이스(73)를 포함한다. 이전에 생성되었던 난독화된 프로그램 코드는 컴퓨터 시스템(23)으로, 즉 곧바로 프로세서(71)로 - 예컨대, 제조 시에 -, 또는 저장소(70)로 - 코드가 실행되어야만 할 때 코드가 프로세서(71)에 의해 나중에 검색되는 경우 - 전송된다. 난독화된 프로그램 코드에 의해 처리하기 위한 입력 데이터 스트림들(12)은 입력 인터페이스(72)를 통해 수신되고 임의로 저장 리포지토리(70)에 저장된다. 난독화된 프로그램 코드의 실행 시에, 입력 데이터 스트림(12)은 프로세서(71)에서 직접 수신되거나 저장 리포지토리(70)로부터 검색된다. 난독화된 프로그램 코드는 입력 데이터 스트림을 처리하여 출력 데이터 스트림을 생성하는 기능을 실행하고, 출력 데이터 스트림은 이어서 프로세서(71)에 의해 실행되는 추가 프로세스들에서 사용될 수 있거나, 출력 인터페이스(73)를 통해 다른 시스템(75)(시청각 시스템 등)으로 출력될 수 있다.
일 예로서, 입력 데이터 스트림(12)은 난독화된 프로그램 코드에 의해 복호화되는 콘텐츠를 포함하는 암호화된 데이터 스트림일 수 있고, 암호화되지 않은 데이터는 이어서 사용을 위해 출력된다. 난독화된 프로그램 코드 및 실행 동안 그 내에서의 데이터 흐름들은 용이하게 해석될 수 없으며, 이들이 액세스될 수 있을지라도, 콘텐츠는 액세스될 수 없다. 난독화된 프로그램 코드는 원본 프로그램 코드에 포함된 기능과 동일한 기능을 수행한다. 따라서, 입력 데이터 흐름으로부터 생성되는 출력 데이터 흐름은 원본 프로그램 코드가 컴퓨터 시스템에서 사용된 경우와 완전히 동일하다.
다른 예로서, 랜덤화된 입력 인코딩들이 암호화된 입력 데이터 스트림에 대해 사용되고, 난독화된 프로그램 코드는 인코딩된 입력 데이터 스트림을 받아서, 복호화 프로세스를 수행하고, 선호된 옵션에 따라, 암호화되지 않았지만 인코딩된 데이터 출력 흐름들, 또는 암호화되지 않고 인코딩되지 않은 출력 데이터 흐름들을 출력한다.
3.1 스트리밍 미디어 전달 시스템
도 8 내지 도 12를 참조하면, 하나의 가능한 예에서, 앞서 기술된 바와 같이 생성되는 난독화된 프로그램 코드가 미디어 스트리밍 전달 시스템들에서 사용되는 복호화, 압축해제 및/또는 디코딩 기능을 제공하는 원본 프로그램 코드 대신에 사용될 수 있을 것이다.
도 8은, 미디어 서버(81), 미디어 플레이어(82) 및, 시청각 시스템(디스플레이)과 같은, 출력(83)을 포함하는, 전형적인 미디어 스트리밍 전달 시스템(80)을 도시하고 있다. 미디어 서버(81)는 도 11에 개괄적으로 도시되어 있다. 미디어 서버는 미디어 콘텐츠(114)를 갖는 저장 리포지토리(110), 미디어 콘텐츠를 받아서, 미디어 콘텐츠(114)를 포함하는 미디어 스트림(112)(입력 데이터 스트림(13)을 포함함)을 암호화 및 압축된 형태로 생성하는 알고리즘들(117)을 실행하는 프로세서(111), 그리고, 인터넷 채널, 통신 채널 또는 텔레비전 방송 전송과 같은, 적당한 전송 채널(116)을 통해 스트림을 전송하는 서버(웹 서버, 방송 송신기, 기타 등등)를 포함한다. 암호화된 미디어 스트림은 최종 사용자/가입자의 위치에 있는 미디어 플레이어에서 수신된다.
도 12를 참조하면, 미디어 플레이어(82)는 입력 인터페이스(120), 데이터 저장 리포지토리(121), 복호화 및 코덱 알고리즘(123)을 실행하는 프로세서(122) 및 출력 인터페이스(124)를 포함하는 데이터 흐름 수신기 하드웨어이다. 미디어 플레이어(82)는 도 7에서 보다 개괄적으로 기술되는 것과 같은 데이터 흐름 수신기 컴퓨터 시스템(23)의 일 예이다. 프로세서(122)는 입력 미디어 스트림(112)을 직접 또는 데이터 저장 리포지토리(121)로부터 수신하고 미디어 스트림(112)을 복호화 및 압축해제하기 위해 알고리즘들(123)을 실행한다. 이 결과, 미디어 콘텐츠를 갖는 출력 미디어 스트림(125)이 얻어지고, 출력 미디어 스트림은 이어서 출력 인터페이스(124)를 통해, 텔레비전과 같은 시청각 시스템(83)일 수 있는, 출력 디바이스에 전달된다. 출력 디바이스는 임의로 미디어 플레이어(82)와 일체형일 수 있다. 출력 디바이스(83)는 암호화되지 않은 미디어 스트림을 받아서 이를 사용하여 미디어 콘텐츠를 사용자/가입자에게 디스플레이할 수 있다.
비인가된 당사자가 전송 채널(116)에서의 미디어 스트림을 가로채기하는 경우, 비인가된 당사자가 복호화 알고리즘을 알고 있지 않는 한, 비인가된 당사자가 미디어 콘텐츠(114)를 용이하게 검색하여 사용할 수 없다. 그렇지만, 비인가된 사용자가 미디어 플레이어(82)를 이용(tap into)하는 경우, 비인가된 사용자는 복호화/코덱 알고리즘들(123)이 실행될 때, 그 알고리즘들을 리버스 엔지니어링하고 알고리즘들 내에서의 데이터 흐름들을 검사하는 것으로부터, 미디어 콘텐츠(114)를 결정할 수 있다.
3.1.1 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전인 난독화된 코드를 갖는 미디어 플레이어
도 9는 앞서 기술된 바와 같은 복호화 및 코덱(압축해제) 알고리즘들을 포함하는 난독화된 코드를 이용하는 스트리밍 미디어 전달 시스템(90)을 도시하고 있다. 기능 F를 갖는 복호화 및 코덱 알고리즘들 A를 포함하는 원본 프로그램 코드를 실행하는 미디어 플레이어(82) 내의 프로세서(122) 대신에, 프로세서(122)는, 이전에 기술된 바와 같이 원본 프로그램 코드의 변환인, 난독화된 프로그램 코드를 실행한다. 미디어 서버(81)는 보통의 방식으로 동작한다. 미디어 서버(81)는 미디어 콘텐츠(114)를 검색하고, 미디어 스트림(112)을 생성하며, 미디어 스트림(112)을 암호화 및 압축하고, 이어서 암호화 및 압축된 미디어 스트림(112)을 서버, 브로드캐스트 또는 다른 적당한 전송을 사용하여 전송 채널(116)을 통해 전송한다. 암호화 및 압축된 미디어 스트림(112)은 보통의 방식으로 미디어 플레이어(82)에서 수신된다. 미디어 플레이어(82)는, 변환된 알고리즘 A'을 구현하지만 미디어 스트림(112)을 복호화 및 압축해제하고 미디어 콘텐츠(114)를 추출하기 위해 동일한 복호화 및 코덱 기능들 F를 수행하는, 난독화된 프로그램 코드를 실행한다. 미디어 콘텐츠 출력 스트림(125)은 미디어 콘텐츠를 디스플레이하기 위해 출력 디바이스(83)에 전달된다.
비인가된 사용자가 복호화 및 코덱 알고리즘들 A'을 검사하기 위해 미디어 플레이어(82)에 침투(infiltrate)하는 경우, 난독화된 프로그램 코드는 알고리즘 A'의 기능 F를 확인하는 것을 계산적으로 어렵게 만들 것이다. 마찬가지로, 난독화된 프로그램 코드의 실행 동안, 데이터 흐름들을 검사하고 미디어 콘텐츠(114)를 검색하거나 알고리즘들을 리버스 엔지니어링하는 것이 계산적으로 어려울 것이다. 데이터 흐름들 자체가 암호화되지 않을지라도 이러하다. 따라서, 비인가된 사용을 위해 미디어 플레이어로부터 미디어 콘텐츠(114)를 획득하는 것이 매우 어려울 것이다.
3.1.2 랜덤화된 입력 및 출력 인코딩들을 갖는 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전인 난독화된 코드를 갖는 미디어 플레이어
도 9의 실시예에서, 난독화된 코드가 이해하기 어렵지만, 집요하다면, 동적 분석을 사용하여 입력 데이터 흐름들 및 출력 데이터 흐름들에 대한 지식을 사용함으로써 프로그램 코드 기능을 리버스 엔지니어링하는 것이 가능하다. 적대자가 프로그램 코드의 실행 동안 난독화된 프로그램 코드 및 내부 데이터 흐름들의 복호화 및 압축해제 기능을 결정할 수 없더라도, 적대자가 또한 액세스할 수 있는 입력 및 출력 데이터 흐름들로부터 (노력하면) 기능이 결정가능할 수 있다.
추가 실시예에서, 미디어 플레이어는 랜덤화된 입력 인코딩들 그리고 임의로 랜덤화된 출력 인코딩들을 갖는 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전인 난독화된 프로그램 코드를 실행하고, 여기서 코드는 앞서 기술된 바와 같이 랜덤화된 입력 인코딩들을 갖는 입력 데이터 스트림을 받도록 적합화되어 있다. 즉, 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전은 인코딩 프로세스에 따른 랜덤화된 인코딩들을 갖는 들어오는 입력 데이터 스트림들에 따라 랜덤화된 입력 인코딩들을 포함한다. 이 실시예에서, 미디어 전달 시스템은, 미디어 서버가 또한 입력 데이터 스트림을 인코딩하는 것(은 물론 입력 데이터 스트림을 암호화 및 압축하는 것)을 제외하고는, 이상과 동일한 방식으로 기능한다. 예를 들어, 인코딩 프로세스는 입력 데이터 흐름의 비트들을 난수 비트들과 XOR하는 것일 수 있고, XOR 출력은 인코딩된 입력 데이터 흐름이다. 이것이 미디어 서버에 의해 전달되고 미디어 플레이어에 의해 수신되는 것이다. 미디어 플레이어는, 인코딩, 암호화 및 압축된 입력 데이터 스트림으로부터 복호화 및 압축해제된 출력 데이터 흐름들을 생성하기 위해, 난독화된 프로그램 코드를 실행한다. 랜덤화된 출력 인코딩들이 없는 경우, 출력 스트림은 출력 디바이스(83)에 전달되어 그 상에서 직접 재생될 수 있다. 난독화된 프로그램 코드가 랜덤화된 출력 인코딩들도 포함하는 경우, 출력 스트림이 재생될 수 있기 전에, 출력 디바이스에서와 같이, 적절한 지점에서 추가의 디코딩 단계가 취해진다. 이것은 난독화된 프로그램 코드의 기능을 동적 분석을 사용하여 리버스 엔지니어링하는 것을 훨씬 더 어렵게 만든다. 입력 흐름들에 대한 랜덤화된 인코딩들로 인해, 다수의 입력들 및 출력들의 동적 분석이 수행되더라도, 출력 데이터 흐름들(인코딩되어 있는지 여부에 관계 없음)이 랜덤한 것처럼 보일 것이다. 이것은 공격자가 동적 분석을 사용해도 난독화된 프로그램 코드의 기능을 확인하는 것을 어렵게 만든다. 출력 스트림을 인코딩하는 것은 추가의 보호 수준을 부가한다.
3.1.3 다른 변형들
도 8 및 도 9의 실시예들 중 어느 하나에서, 미디어 플레이어로부터의 출력 스트림(125)이 압축되지 않고 암호화되어 있지 않다. 이것은 누군가가 미디어 플레이어(82)와 출력 디바이스(83) 사이에서 미디어 스트림(125)을 추출하고 미디어 콘텐츠(114)를 인가 없이 저장 및 배포할 수 있다는 것을 의미한다. 이것은 스트림이 압축해제될 때 미디어 콘텐츠(114)에의 덜 바람직한 액세스 포인트이지만, 이는 여전히 가능한 것이다. 추가 실시예들에서, 기술되는 난독화된 프로그램 코드 실시예들은, 미디어 전달 체인(media delivery chain)의 후반 부분들을 보호하기 위해, 출력 하드웨어와 같은 시스템에서 더 하류 쪽에서(further downstream) 동작하는 것으로 확장될 수 있다.
3.2 난독화된 코드의 다른 용도들
살펴본 바와 같이, 이상의 예들은 일 실시예에 불과하고, 난독화 변환에 대한 다른 최종 용도들이 있다. 스트리밍 미디어 적용분야들에 부가하여, 난독화 변환이 하기의 것들(이들로 제한되지 않음)을 위해 사용될 수 있을 것이다:
문서들이 인가된 당사자들 간에 공유되는 문서 관리 시스템들. 라이센스들의 검증이 요구되는 미디어 또는 소프트웨어 라이센스 관리. 웹 브라우저 또는 다른 신뢰할 수 없는 플랫폼(untrusted platform)에서의 미디어 플레이어들. 보다 일반적으로, 암호화된 데이터 스트림을 수신하고 암호화되지 않은 출력을 제공하기 위해 그 스트림을 복호화하는 프로그램 코드를 포함하는 데이터 흐름 수신기, 또는 신뢰할 수 없는 당사자들에게 기능을 숨기기 위해 프로그램 코드가 난독화될 필요가 있는 신뢰할 수 없는 플랫폼 상의 시스템. 본 기술분야의 통상의 기술자는 이상의 것들과 같은 다른 적용분야들을 변환을 이용할 수 있다.
4.
난독화 알고리즘의 도출
이하의 부록 A는 본 발명의 실시예들에 따라 사용되는 난독화 알고리즘이 도출된 것을 보여주고 있다.
부록 A
4.1 서론
프로그램 난독화의 목적은 임의적인 컴퓨터 프로그램을, 그의 기능을 보존하면서, "이해하기 어렵게" 만드는 것이다[6]. Garg, Gentry, 및 Halevi[5]는, 다중선형 직소 퍼즐(multilinear jigsaw puzzle)이라고 불리는, 범용 구분불가능성 난독화(indistinguishability obfuscation)의 제1 후보 구성을 제공하였다. 암호에서의 그리고 보다 넓은 컴퓨터 산업에서의 구분불가능성 난독화의 중요성을 고려하여, 우리의 연구는 난독화된 프로그램의 데이터 흐름의 최대 난해성을 달성하기 위해 구분불가능성 난독화 시스템에 또는 다른 암호 및 난독화 프리미티브들과 함께 포함될 수 있는 효율적인 랜덤화된 브랜치 인코딩 프리미티브를 구성하는 것에 중점을 두고 있다.
이 연구의 주된 이론적 기초는, 구조 보존 랜덤화(structure-preserving randomizatoin)를 용이하게 하는 간단한 대수적 구조(algebraic structure)를 제공하는, 정폭 브랜칭 프로그램들에 관한 배링턴의 정리[1]이다. 이에 따라, 배링턴의 정리는 암호에서 중요한 역할을 하였다[7, 3, 2, 8].
우리는, 배링턴의 정리에 익숙한 독자들에게, 대부분의 최신 컴퓨터 아키텍처들에서의 워드 연산들에 적당한 Ben-Or 및 Cleve[2]로부터의 배링턴의 정리의 변형을 보여주는 섹션 4.3으로 건너뛸 것을 권한다. 섹션 4.4에서, 우리는 Kilian[9]의 형태로 랜덤화된 인코딩들을 브랜칭 프로그램들에 적용하는 것을 보여준다. 이 모델에서, 우리는 브랜칭 프로그램의 입력들 및 출력들을 숨기기 위한 랜덤화된 입력 및 출력 인코딩들의 개념을 제공한다. 우리는 섹션 4.5에서 효율적인 랜덤화된 브랜치 인코더 알고리즘 구성으로 끝맺는다.
4.2 브랜칭 프로그램들
하나의 시작 노드(start node) 및 2개의 싱크 노드(sink node)들 0과 1을 갖는 변수 집합 X = {x1,...,xn}에 대한 브랜칭 프로그램은 유한 유향 비순환 그래프(finite directed acyclic graph)이다. 각각의 비-싱크 노드는 변수 xi로 라벨링되고 0과 1로, 각각, 라벨링되어 있는 2개의 나가는 에지(outgoing edge)들을 갖는다. 입력 x ∈ {0,1}n은, 시작 노드로부터 싱크 노드 1로 이어지는 천이들의 체인(chain of transitions)을 유도하는 경우에만, 수락된다. 프로그램의 길이는 임의의 이러한 경로의 최대 길이이다.
정의 1 (계층화된 브랜칭 프로그램). 폭 w의 브랜칭 프로그램 P는, 그의 그래프에 노드들의 계층(layering)이 있고, 따라서 이 계층 아래에서, P의 그래프가 폭 w를 갖는 경우, 계층화된 브랜칭 프로그램이다.
그림 14: 함수 f : {0,1}4 → {0, 1}을 계산하는, 폭 3 및 길이 6의 브랜칭 프로그램의 계층화된 유향 비순환 그래프. 함수 f(x1,x2,x3,x4)는 최상위 노드에서 시작하여 각각의 입력 xi에 대응하는 화살표들을 따라가는 것에 의해 평가될 수 있다. 예를 들어, 점선들로 나타낸 바와 같이, f(0010) = 1이다.
계층화된 브랜칭 프로그램의 폭은 임의의 계층에서의 정점들의 최대 수이다. 예를 들어, ∧,∨: {0,1}n → {0,1}이 폭 2 및 n+1개의 계층들의 브랜칭 프로그램에 의해 계산될 수 있는 것으로 추론하는 것이 용이하다.
우리는 정폭 다항-길이 브랜칭 프로그램(constant-width polynomial-length branching program)들의 특성을 나타내는, [1]로부터의 이하의 중요한 결과에 대해 언급한다.
정리 1 (배링턴의 정리). f: {0,1}n → {0,1}이 깊이 d의 회로에 의해 계산가능하면, f는 폭 5 및 길이 l = 4d의 계층화된 브랜칭 프로그램에 의해 계산가능하다. 상세하게는, d = O(log(n))이면, l = poly(n)이다.
설명. 그림 14로부터 추론될 수 있는 바와 같이, 각각의 계층에서, 브랜칭 프로그램은 단지 O(1) 비트의 정보를 인코딩할 수 있지만, 그 사실에도 불구하고, 배링턴의 정리에 따르면, 예를 들어, n 비트에 대해 다수결 함수(majority function)를 계산하는 것이 가능하지만, 효율적으로 계산가능하기 위해 O(log(n))의 누산기(accumulator)를 갖는 것이 직관적으로 필요한 것처럼 보일 것이다.
G를 순열 그룹이라고 하고, 여기서 우리는 G에서의 항등 순열(identity permutation)을 1G라고 쓴다. 순열 g∈G의 그래프가 길이 k의 정확히 하나의 사이클로 이루어져 있다면, 우리는 순열 g∈G가 k-사이클(k-cycle)이라고 말한다. 예를 들어, 은 S5에서 5-사이클이고, 간단히 (15234)라고 쓰여진다.
정의 2 (그룹 프로그램). 길이 l의 그룹 프로그램은, 모든 gi j ∈ G 및 ki∈ {1,...,n}에 대해 식 (1)과 같이 정의되는, 논리 값들 j∈[0..1]에 대응하는 순열들 gi j ∈ G에 의해 정의되는 계층들 i∈ [1..l]을 갖는 계층화된 브랜칭 프로그램이다.
우리는, 모든 x∈{0,1}n에 대해, 식 (2)이도록 하는 순열 α∈G가 존재한다면, 이 프로그램이 f: {0,1}n → {0,1}을 α-계산(α-compute)한다고 말하고,
우리는, 출력이 단일 비트인, 함수들 f: {0,1}n → {0,1}을 α-계산하는 그룹 프로그램들을 연구하는 것으로 시작하고; 여기서 이 프로그램들이 보다 일반적인 경우를 핸들링하기 위해 연결(concatenate)될 수 있다.
그림 15: 함수 f를 계산하는 S5에 걸친 2개의 길이-1, 폭-5 그룹 프로그램들. 실선들은 수락 상태들을 나타내고: f(x) = 1 => αf(x) = 1G이고 f(x) = 1 => βf(x) = 1G이며, 그렇지 않은 경우, 파선들에 의해 표시되는, f(x) = 0 => αf(x) = α이고 f(x) = 0 => βf(x) = β이다.
보조정리 1 (임의의 사이클에 대한 α-계산가능성). α,β∈G를 2개의 k-사이클들이라고 하고, f: {0,1}n → {0,1}라고 한다. 그러면 f가 길이 l로 β-계산가능인 경우에만 f는 α-계산가능이다.
증명. 먼저 α=ρ-1βρ이도록 하는 비-항등 순열(non-identity permutation) ρ∈G이 있다는 것을 관찰한다. f를 β-계산하는 그룹 프로그램 을 갖는 것으로 가정한다. 그러면, 우리는 프로그램 이 α-계산한다고 말한다(그림 15를 참조). (15)에 αf (x) 및 βf(x)를 대입하는 것에 의해, 다음 식이 얻어진다.
그림 16: 2개의 단항 함수들을 계산하는 S5에 걸친 2개의 길이-l 그룹 프로그램들의 그래프: αc(x)는 항등 함수를 계산하고, βㄱ(x)는 NOT 함수를 계산한다. 다이어그램은 2개의 5-사이클 순열들 α=(12345) 및 β(15432)를 보여준다. 실선들은 수락 상태들을 나타내고: c(1) = 1 => αc(1) = 1G이고 ㄱ(1) = 0 => βㄱ(1) = 1G이며, 그렇지 않은 경우, 파선들에 의해 표시되는, f(0) = 0 => αc(0) = α이고, ㄱ(0) = 1 => βㄱ(0) = β이다.
보조정리 2 (그룹 프로그램에서의 ㄱ를 계산). f: {0,1} → {0,1}이 길이 l의 그룹 프로그램에 의해 α-계산가능이면, ㄱf도 그렇다.
증명. 먼저 보조정리 1을 α-1-계산 f에 적용한다. 이어서, 그룹 프로그램에서의 마지막 그룹 엘리먼트들 gl0과 gl1을 α와 곱한다(그림 16을 참조).
그림 17: S5에 걸쳐 4개의 길이-l 그룹 프로그램들을 연결하는 것에 의해 이진 AND 게이트를 계산함. 다이어그램은 2개의 5-사이클 순열들 α = (13254) 및 β = (12453)을, 그들의 역 α-1 = (14523) 및 β-1 = (13542)와 함께, 보여준다. 파선 화살표들을 따라가는 것에 의해, αβα-1β-1 = (12345) => f(x)∧g(x) = 1이 얻어진다.
보조정리 3 (그룹 프로그램에서의 ∧의 계산). f가 길이 l로 α-계산가능이고 g가 길이 l로 β-계산가능이면, (f∧g)는 길이 4l로 (αβα-1β-1)-계산가능이다.
Ben-Or 및 Cleve[2]로부터의 하기의 보조정리는, 유한체(finite field) F 내의 원소들을 갖는 행렬식 l의 모든 n x n 행렬들의 집합인, 특수선형군(special linear group) SLn(F)에서의 순열들을 갖는 배링턴의 정리의 변형을 나타낸다.
보조정리 4. l = O(l)d 3x3개의 행렬들 M1,...Ml∈SLn(F)가 존재하고, 여기서 Mi 내의 각각의 엔트리는 0, 1 또는, 어떤 j에 대해, xj이며, 이에 따라 다음과 같이 된다.
설명. 보조정리 4로부터, 일반성의 상실 없이, 보조정리 1, 보조정리 2 및 보조정리 3에서 그룹들 SL3(F) 및 SL5(F)이 S5 대신에 사용될 수 있다는 것에 유의한다.
2개의 입력들에 대한 를 계산하는 것은 최소 깊이 2의 공식을 필요로 한다(그림 18을 참조): 단순히, 이것은 길이가 적어도 16인 그룹 프로그램으로 된다. Boneh[4]는 SL3(F)에 걸친 보다 효율적인 구성을 보여준다. 우리는 이 결과를 하기의 보조정리에서 일반화한다.
보조정리 5 (그룹 프로그램에서의 의 계산). f가 길이 l로 A-계산가능이고 g가 길이 l로 B-계산가능이면, A와 B가 대합(involution) A2 = B2 = I인 SLn(F)에서의 행렬들인 경우에만 (fg)가 길이 l로 A-계산가능이다.
증명. 그룹 S5가 서로에 대해 그리고 그들의 교환자(commutator)에 대해 공액(conjugate)인 대합 쌍 (A,B)를 포함하지 않는다는 것을 관찰한다. 그렇지만, 그룹 SL5(F)는 포함한다. 예를 들어:
4.3 워드 연산들에 대한 그룹 프로그램들
지금까지, 단일 비트를 출력하는 그룹 프로그램들을 다루었다. 앞서 살펴본 바와 같이, w 비트의 워드 크기들을 갖는 함수들 을 계산하는 그룹 프로그램들은 간단한 연결에 의해 획득될 수 있다. 이 섹션에서, 우리는 전형적인 최신 CPU 아키텍처들에 부합하는 산술 함수들을 계산하는 그룹 프로그램들을 획득하는 효율적인 방법을 보여준다.
Ben-Or 및 Cleve[2]는 SL3(F)에 걸쳐 이진 덧셈 및 곱셈 연산들을 계산하는 그룹 프로그램에 대한 효율적인 구성을 제공한다. 우리는 이 결과를 하기의 보조정리에서 일반화한다.
보조정리 6 (그룹 프로그램에서의 + 및 ·의 계산). 깊이 d의 산술식(arithmetic formula)이 길이가 최대 4d인 SLn(F)에 걸쳐 그룹 프로그램에 의해 계산될 수 있다.
증명. 2개의 행렬 A,B ∈ SL5(F)를 구성한다고 가정하자.
여기서 f = f(x1,..., xn) 및 g = g(x1,...,xn)은 입력들 x1,...,xn ∈ F에 대한 산술식들이다. 하기의 행렬 곱들은 수식들 f+g 및 f·g에 대한 행렬들을 계산하고:
여기서 f·g에 대한 수식에서 필요한 4개의 행렬 모두는, 좌우에서 A와 B를 고정된 부호있는 순열 행렬(fixed signed permutation matrix)들 과 곱하는 것에 의해, A와 B로부터 획득된다.
f·g에 대한 행렬 곱이 4개의 행렬들을 사용하기 때문에, 우리는 이것을 원래의 길이-d 수식에 재귀적으로 적용하고 총 길이가 최대 4d인 행렬 곱을 획득할 수 있으며, 여기서 곱에서의 각각의 행렬은 단일 입력 xi ∈ F에 의존한다.
▶ Af(x)와 Bg(x)를 연결시키는 것에 의해, 우리는 길이-2 그룹 프로그램 (AB)f(x)+g(x)을 획득한다.
4.4 랜덤화된 인코딩들
이 섹션에서, 우리는 랜덤화된 인코딩들을 정폭 다항-크기 브랜칭 프로그램(constant-width, polynomial-size branching program)들에 적용하는 것에 대해 논의한다.
f : {0,1}n → {0,1}이 정폭 O(log(n)) 깊이 회로에 의해 계산가능한 것으로 하고 Ui를 t개의 원소들을 갖는 유한 비-공집합(finite, non-empty set)에 걸친 균일 분포를 나타내는 것으로 한다(여기서 우리는 첨자가 문맥상 암시되어 있는 경우 첨자를 생략할 수 있다).
정의 3. 블로우-업(blow-up) t를 갖는 함수 f : {0,1}n → {0,1}의 랜덤화된 인코딩은 함수 f' : {0,1}n x {0,1}t → {0,1}t이고, 여기서 하기의 조건들이 성립한다:
1. 각각의 출력 엘리먼트가 입력의 고정 크기 부분에 의존하기 때문에, f'이 지역적으로 계산가능(locally computable)이다.
3. 임의의 고정된 문자열 x에 대해, C ∈ D에 대한 분포 C(f(x))가 r ∈ Ut에 대한 분포 f'(x,r)과 똑같도록 크기 t의 회로들 C에 대한 분포 D가 존재한다.
우리는 랜덤화된 브랜칭 프로그램의 단계들을 Kilian[9]과 동일한 형태로 표현하고, 여기서 각각의 그룹 프로그램 원소 gi ∈ G는 2개의 랜덤 순열 로 엔벨로핑(envelop)된다.
보조정리 7 (랜덤화된 그룹 인코딩). r = (r1,...,rl -1) ∈ Gl -1을 랜덤 그룹 원소들의 집합이라고 하자. f의 랜덤화된 인코딩 f' : {0,1}n x Gl -1 → Gl은 그룹 프로그램
이다.
증명. 우리는 필요한 속성들이 충족되는지를 검사한다:
▶ 각각의 출력 원소는 입력의 고정 크기 부분에 의존하고, 따라서 속성 1을 충족시킨다.
▶ 고정된 x 및 임의의 r ∈ Gl-1에 대해, f'(x,r)에서의 원소들의 그룹 곱(group product)은 구성에 의해 αf(x)이다. 따라서, 속성 2를 충족시킨다.
▶ 고정된 x에 대해, f'(x,r)의 처음 l-1개의 원소들은 (각각의 ri ∈ r이 랜덤하게 선택되기 때문에) G에 걸쳐 독립적으로 분포된다. 마지막 원소만이 종속적이다. 우리가 r ∈ Gl -1이라고 함으로써 회로들에 걸쳐 분포 D를 정의하고 우리가 Cr(f(x))를
를 출력하는 회로인 것으로 정의하면, 우리는, 모든 고정된 r에 대해, 분포 Cr(f(x))가 f'(x,r)과 똑같고, 따라서 속성 3을 충족시킨다는 것을 안다.
브랜칭 프로그램의 랜덤화는 랜덤화된 프로그램의 프로그램 코드를 우연히 관찰하는 적대자들로부터 어느 정도의 보호를 제공한다. 그렇지만, 보다 정교한 공격들은 랜덤화된 프로그램의 특정의 구체적인 인스턴스화보다는 그의 대수적 구조를 고려할 것이다. 이러한 공격들을 무력화시키기 위해, 하기의 정의 및 명제(proposition)를 도입한다.
정의 4. 랜덤화된 그룹 입력 및 출력 인코딩 f"은 평형 함수(balanced function) f : {0,1}n → {0,1}의 랜덤화된 그룹 인코딩이고, 여기서 하기의 부가 조건들이 성립한다:
2. 임의의 고정된 스트링 x = (x1,...,xn)에 대해, C ∈ F에 대한 분포 C(f(x))가 u ∈ {0,1}n에 대한 분포 와 똑같도록 팬 인(fan-in) n의 평형 회로(balanced circuit)들 C에 대한 분포 F가 존재한다. 이어서 r, u 및 v가 적대자에게 알려져 있지 않으면, 충분한 l 및 n에 대해 f"으로부터의 f의 대수적 구조의 복구가 어렵다.
비공식적으로, 랜덤화된 입력 인코딩은 그룹 프로그램에서의 각각의 원소 gi 0, gi 1를 랜덤하게 스와핑하는 것에 의해 획득되고, 랜덤화된 출력 인코딩은 gi 0과 gi 1를 G에서의 랜덤 순열과 곱하는 것에 의해 획득된다. 보다 공식적으로는, 우리는 하기의 명제를 언급한다.
------------------
1평형(부울) 함수는 그의 진리표의 각각의 열에 동수의 0과 1을 갖는 함수로서 특징지워질 수 있다.
명제 1 (평형된 랜덤화된 그룹 입력 및 출력 인코딩). u = (u1,...,un) ∈ {0,1}n 및 r = (r1,...,rl) ∈ Gl이 랜덤하게 선택되는 것으로 한다. 평형 함수 f의 랜덤화된 입력 및 출력 인코딩은 다음 식 (5)로서 정의되는 그룹 함수 f"이고,
여기서 u는 입력 인코딩이고, r1,...,rl -1은 그룹 인코딩이며, rl은 출력 인코딩이다.
증명. 우리는 필요한 속성들이 충족되는지를 검사한다:
▶ f'이 함수 f의 랜덤화된 그룹 인코딩이고 f"이 동일한 함수 f의 랜덤화된 그룹 입력 및 출력 인코딩이라고 가정한다. 고정된 x,r,xl,rl,u에 대해, 우리는, 표기법을 약간 남용하면, xl = xu이고 rl = (r1,...,rl-1,v) ∈ Gl인 경우에만 v(f'(x,r)) = f"(xl,rl)이 얻어지고, 따라서 속성 1을 충족시킨다.
▶ 함수 f(xu)는 f의 진리표의 입력들을 랜덤하게 순열시키는 것과 동등하다. 이와 유사하게, 함수 v(f(·))은 f의 진리표의 출력들을 랜덤하게 순열시키는 것과 동등하다. 이와 같이, 임의의 고정된 x,rl에 대해, 모든 u ∈ {0,1}n에 대해 그리고 모든 v ∈ G에 대해,
이 성립하고, 여기서 c는 s의 무시가능 함수(negligible function)이다. 따라서, 적대자는 f의 랜덤화된 그룹 입력 및 출력 인코딩들 f"1,...,f"s의 임의의 서브셋에의 완전한 액세스가 주어지면 f를 복구하는 데 무시할 정도의 이점을 얻는다.
주: 비-평형 함수 c : {0,1}n → {0,1}을 계산하는 회로 C에 대해, 우리는, 압축 사상(compressing map) h : {0,1}n → {0,1}과 함께, 평형 함수 b : {0,1}n → {0,1}n을 계산하는 임의의 회로 B를 구성할 수 있고, 모든 x ∈ {0,1}n에 대해, 식 (6)이 되게 하는 z ∈ {0,1}n가 존재한다.
4.5 랜덤화된 브랜치 인코더 구성
이 섹션에서, 우리는 구체적인 프로그램 구현들을 다루는 랜덤화된 브랜치 인코더 알고리즘의 구성에 중점을 둔다.
Γ | 설명 | x86 | ARM | MIPS |
AND | 논리 AND | AND | AND | AND |
ADD | 덧셈 | ADD | ADD | ADD |
DEC | 감소 | DEC | SUB 1 | SUB 1 |
INC | 증가 | INC | ADD 1 | ADD 1 |
MUL | 곱셈 | MUL | MUL | MULT |
NOT | 논리 NOT | NOT | MVN | XOR -1 |
OR | 논리 OR | OR | ORR | OR |
SUB | 뺄셈 | SUB | SUB | SUB |
XOR | 논리 배타적 OR | XOR | EOR | XOR |
표 2: x86, ARM 및 MIPS 니모닉들 사이의 매핑을 갖는 CPU 데이터 흐름 명령어들의 공통 서브셋 Γ. 캐리를 갖는 덧셈(addition with carry)(ADC) 및 바로우를 갖는 뺄셈(subtraction with borrow)(SBB)과 같은 변형들은 나타내어져 있지 않다. 이탤릭체로 나타낸 니모닉들은 명령어들의 정규(canonical) 구현들을 나타낸다.
우리는 언어 Γ로 된 명령어들을 연구한다(표 2를 참조). 이 제한에 대한 근거는 대부분의 최신 CPU 아키텍처들이 정수 산술 및 부울 연산들을 명령어들의 비슷한 서브셋을 사용하여 구현한다는 것이다. x86 및 ARM과 같은 주류 프로세서들의 경우에, 표 2에서 알 수 있는 바와 같이, 이 세트와 CPU에서 사용되는 기계어 코드들 사이에 일대일 매핑이 있다. 이것은 구체적인 프로그램 구현들과의 효율적인 매핑을 가능하게 한다.
보조정리 8. Γ로 된 각각의 명령어는 부울 회로의 형태로 구현될 수 있고; 따라서 또한 정폭 다항-깊이 브랜칭 프로그램들의 형태로 구현될 수 있다.
증명. 우리가 ㄱ 및 ∧ 게이트들만을 사용하여 함수 f ∈ 1'을 계산하는 회로를 구현하는 것으로 가정한다.
▶ 보조정리 2 및 보조정리 3으로부터, 우리는 AND 및 NOT을 α-계산하는 브랜칭 프로그램들을 구성할 수 있다.
▶ ∨(x1,x2) = ㄱ(ㄱx1∧ㄱx2)이기 때문에, 우리는 연결에 의해 α-(x) 및 α∧(x)로부터 OR을 α-계산하는 브랜칭 프로그램을 구성할 수 있다.
▶ 우리는 보조정리 5에서 XOR에 대한 효율적인 브랜칭 프로그램 구성을 보여준다.
▶ 보조정리 6에서, 우리는 산술 연산들 ADD 및 MUL - 이들로부터 INC, DEC 및 SUB가 귀납적으로 뒤따라 나옴 - 에 대한 효율적인 브랜칭 프로그램 생성들을 보여준다.
또한 귀납적으로 당연히 w ∈ {8,16,32,64} 비트의 워드 크기들을 갖는 함수들 f : {0,1}w /2 → {0,1}w를 계산하는 브랜칭 프로그램들이 간단한 연결에 의해 획득될 수 있다.
G를 배링턴의 정리에 부합하는 순열 그룹이라고 하고, L을 지원되는 CPU에 의해 인식되는 명령어 세트라고 하자. 이어서 P에서의 각각의 명령어 fi에 대해, 를 L로부터 G로의 단사 사상(injective map)이라고 하고, 따라서 는, 각각의 명령어 fi에 대응하는, 원소들 , 을 갖는 길이 li의 그룹 프로그램이다. 역사상(inverse map) 을 "거꾸로" G에서의 그룹 원소들로부터 L 내의 명령어들로의 단사 사상이라고 하자.
정의 5 (랜덤화된 브랜치 인코더 알고리즘). 언어 L로 된 명령어들을 갖는 프로그램 P 및 랜덤화된 브랜치-인코딩된 출력 프로그램 P'에 대한 효율적인 확률적 브랜치-인코딩 알고리즘이 알고리즘 1에 정의되어 있다. 출력 프로그램 P'의 크기 t는 에 의해 주어진다.
참조문헌
[1] David A Barrington, Bounded-width polynomial-size branching porgrams recognize exactly those languages in NC1. Journal of Computer and System Sciences, 38(1): 150-164, 1989.
[2] Michael Ben-Or and Richard Cleve. Computing algebraic formulas using a constant number of register, SIAM Journal on Computing, 21(1): 54-58, 1992.
[3] Michael Ben-Or, Oded Goldreich, Shafi Goldwasser, Johan Hastad, Joe Kilian, Silvio Micali, and Phillip Rogaway. Everything provable is provable in zero-knowledge. In Advances in Cryptology - Crypto'99, pages 37-56. Springer, 1990.
[4] Dan Boneh. Barrington's theorem using matrices in SL_2(Z), 2013. URL http://crypto.standford.edu/{-}dabo/pubs/papers/barrington.html.
[5] Sanjarn Garg, Craig Gentry, and Shai Halevi. Candidate Indistinguishability obfuscation and functional encryption for all circuits, Proc. of FOCS..., 2013. URL http://redirect.subscribe.ru/{_}/-/eprint.iacr.org/2013/451.pdf.
[6] Shafi Goldwasser and Guy N. Rothblum. On best-possible obfuscation, In Theory of Cryptography, pages 194-213, Springer, 2007.
[7] Shafi Goldwasser, Silvio Micali, and Avi Wigderson. How to play any metal game, or a completeness theorem for protocols with an honest majority. In Proc. of the Nienteenth Annual ACM STOC, volume 87, pages 218-229, 1987.
[8] Yuval Ishai, M Prabhakaran, and Amit Sahai. Founding cryptography on oblivious transfer efficiently. Advances in Cryptology CRYPTO 2008, pages 1-43, 2008. URL http://link.springer.com/chapter/10.1007/978-3-540-85174-5{_}32.
[9] Joe Kilian, Founding cryptography on oblivious trasfer. In Proceedings of the twentieth annual ACM symposium on Theory of computing, pages 20-31, ACM, 1998.
Claims (18)
- 프로그램 코드를 난독화(obfuscate)하는 방법으로서,
프로세서에서, 상기 프로세서가 입력 비디오 데이터 흐름을 처리할 수 있게하는 원본 프로그램 코드(original program code)를 수신하는 단계,
상기 프로세서에서, 상기 입력 비디오 데이터 흐름으로부터의 데이터 흐름을 변경하여 출력 데이터 흐름을 생성하기 위한 수학적 변환들을 적용하기 위해 상기 원본 프로그램 코드를 상기 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전(randomized branch encoded version)을 정의하는 난독화된 프로그램 코드(obfuscated program code)로 변환(transform)하는 단계 - 상기 수학적 변환들은IDENTITY, NOT, AND, OR, XOR, ADD, 및 MUL 중 적어도 하나를 포함하는 데이터 흐름 변경 함수를 포함함 - ,
상기 프로세서로부터, 상기 입력 비디오 데이터 흐름을 수신하고 상기 난독화된 프로그램 코드를 사용하여 상기 출력 데이터 흐름을 생성하는 처리 시스템으로 상기 난독화된 프로그램 코드를 전송하는 단계를 포함하고,
상기 프로세서는 상기 출력 데이터 흐름에 대한 비인가 액세스를 방지하기 위해 상기 랜덤화된 브랜치 인코딩(randomized branch encoding)을 구현하여 상기 원본 프로그램 코드를 상기 난독화된 프로그램 코드로 변환하고,
상기 난독화된 프로그램 코드는 하기의 기능들:
입력 데이터 흐름의 복호화,
입력 데이터 흐름의 압축해제(decompression),
입력 데이터 흐름의 디코딩 중 하나 이상을 제공하는, 방법. - 제1항에 있어서, 상기 랜덤화된 브랜치 인코딩을 구현하는 것은 랜덤화된 브랜칭 프로그램(randomized branching program)으로부터 원본 프로그램 코드 기능을 생성(create)하는 것을 포함하고, 상기 랜덤화된 브랜칭 프로그램은:
상기 원본 프로그램 코드의 코드 엘리먼트(code element)들에 대응하는 기능을 갖는 계층화된 브랜칭 프로그램(layered branching program)들을 조합하는 단계, 및
상기 계층화된 브랜칭 프로그램들에서의 인접한 계층들의 노드들 사이의 경로들을 랜덤화하는 단계에 의해 생성되고,
상기 계층화된 브랜칭 프로그램들은 IDENTITY, NOT, AND, OR, XOR, ADD, 및 MUL 중 적어도 하나를 포함하는 상기 데이터 흐름 변경 함수들 중 하나를 포함하는 상기 수학적 변환들 중 하나를 갖는, 방법. - 제2항에 있어서, 상기 난독화된 프로그램 코드를 형성하기 위해 상기 랜덤화된 브랜칭 프로그램을 프로그램 코드로 변환(convert)하는 단계를 추가로 포함하고, 상기 난독화된 프로그램 코드는 상기 원본 프로그램 코드와 동일한 기능을 제공하는, 방법.
- 제2항에 있어서, 상기 랜덤화된 브랜칭 프로그램은 상기 계층화된 브랜칭 프로그램들의 입력 인코딩들을 랜덤화하는 추가 단계에 의해 생성되는, 방법.
- 제4항에 있어서, 상기 랜덤화된 브랜칭 프로그램은 상기 계층화된 브랜칭 프로그램들의 출력 인코딩들을 랜덤화하는 추가 단계에 의해 생성되는, 방법.
- 제5항에 있어서, 상기 입력 또는 출력 인코딩들을 랜덤화하는 단계는
상기 입력 비디오 데이터 흐름들에 대한 랜덤화된 인코딩들, 및/또는
상기 출력 데이터 흐름들에 대한 원하는 랜덤화된 인코딩들
에 따라 상기 계층화된 브랜칭 프로그램들에서의 계층들을 수정하는 단계를 포함하는, 방법. - 제4항에 있어서, 상기 난독화된 프로그램 코드를 형성하기 위해 상기 랜덤화된 브랜칭 프로그램을 프로그램 코드로 변환하는 단계를 추가로 포함하고, 상기 난독화된 프로그램 코드는 랜덤화된 인코딩들을 갖는 상기 입력 비디오 데이터 흐름들을 처리하기 위해 상기 원본 프로그램 코드와 상이한 기능을 제공하는, 방법.
- 삭제
- 제1항에 있어서, 상기 프로세서는 상기 원본 프로그램 코드를 난독화된 프로그램 코드로 변환하기 위해 랜덤화된 브랜치 인코딩을 구현하는 행렬 계산들을 구현하는, 방법.
- 제2항에 있어서, 랜덤화된 브랜치 인코딩을 구현하는 것은 상기 랜덤화된 브랜치 인코딩을 구현하는 행렬 계산들을 사용하여 상기 원본 프로그램 코드 기능을 생성하는 것을 포함하는, 방법.
- 제10항에 있어서, 상기 행렬 계산들은 상기 원본 프로그램 코드의 난독화된 버전인 프로그램 코드로서 구현될 수 있는, 방법.
- 삭제
- 제1항에 있어서, 상기 원본 프로그램 코드를 난독화된 프로그램 코드로 변환하는 것은 프로그램 제어 흐름에 영향을 미치지 않고 그리고 암호화 또는 복호화를 사용하지 않고 상기 원본 프로그램 코드의 랜덤화된 브랜치 인코딩된 버전을 정의하는, 방법.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562108272P | 2015-01-27 | 2015-01-27 | |
US62/108,272 | 2015-01-27 | ||
US15/007,482 | 2016-01-27 | ||
PCT/US2016/015164 WO2016123237A1 (en) | 2015-01-27 | 2016-01-27 | Obfuscation for protection of streaming media and other data flows |
US15/007,482 US11269621B2 (en) | 2015-01-27 | 2016-01-27 | Obfuscation for protection of streaming media and other data flows |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170108111A KR20170108111A (ko) | 2017-09-26 |
KR102000861B1 true KR102000861B1 (ko) | 2019-07-16 |
Family
ID=56433501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177023923A KR102000861B1 (ko) | 2015-01-27 | 2016-01-27 | 스트리밍 미디어 및 다른 데이터 흐름들의 보호를 위한 난독화 |
Country Status (7)
Country | Link |
---|---|
US (3) | US11269621B2 (ko) |
EP (1) | EP3251040B1 (ko) |
KR (1) | KR102000861B1 (ko) |
CN (1) | CN107580765B (ko) |
CA (1) | CA2974990C (ko) |
MX (1) | MX2017009586A (ko) |
WO (1) | WO2016123237A1 (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160328539A1 (en) * | 2015-05-05 | 2016-11-10 | Nxp B.V. | Obscuring Software Code With Split Variables |
US10068070B2 (en) * | 2015-05-05 | 2018-09-04 | Nxp B.V. | White-box elliptic curve point multiplication |
US10027640B2 (en) * | 2015-09-22 | 2018-07-17 | Qualcomm Incorporated | Secure data re-encryption |
US10432596B2 (en) * | 2016-02-09 | 2019-10-01 | Kåre L. Andersson | Systems and methods for cryptography having asymmetric to symmetric key agreement |
US10503931B2 (en) | 2016-05-09 | 2019-12-10 | Arris Enterprises Llc | Method and apparatus for dynamic executable verification |
EP3264307A1 (en) * | 2016-06-29 | 2018-01-03 | Nagravision SA | On demand code decryption |
US10394554B1 (en) * | 2016-09-09 | 2019-08-27 | Stripe, Inc. | Source code extraction via monitoring processing of obfuscated byte code |
US10552585B2 (en) * | 2016-12-14 | 2020-02-04 | Microsoft Technology Licensing, Llc | Encoding optimization for obfuscated media |
JP6649288B2 (ja) * | 2017-01-10 | 2020-02-19 | 日本電信電話株式会社 | 暗号システム、セットアップ装置、鍵生成装置、暗号化装置、復号装置、およびプログラム |
US10812269B2 (en) | 2017-11-07 | 2020-10-20 | Arris Enterprises Llc | Advanced crypto token authentication |
US12007908B2 (en) * | 2017-12-14 | 2024-06-11 | Arris Enterprises Llc | Method and apparatus to dynamically encode data at runtime |
US10289816B1 (en) * | 2018-06-08 | 2019-05-14 | Gsfm Llc | Methods, systems, and devices for an encrypted and obfuscated algorithm in a computing environment |
BR112021018798A2 (pt) * | 2019-03-21 | 2022-02-15 | Capzul Ltd | Detecção e prevenção de engenharia reversa de programas de computador |
US11706381B2 (en) * | 2021-05-24 | 2023-07-18 | Getac Technology Corporation | Selective obfuscation of objects in media content |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007304726A (ja) * | 2006-05-09 | 2007-11-22 | Fuji Xerox Co Ltd | プログラム難読化装置、難読化方法及び難読化プログラム |
JP2008090668A (ja) | 2006-10-03 | 2008-04-17 | Kddi Corp | プログラム難読化方法およびプログラム |
US20100250906A1 (en) * | 2009-03-24 | 2010-09-30 | Safenet, Inc. | Obfuscation |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0988591A1 (en) * | 1997-06-09 | 2000-03-29 | Intertrust, Incorporated | Obfuscation techniques for enhancing software security |
WO2000077596A1 (en) * | 1999-06-09 | 2000-12-21 | Cloakware Corporation | Tamper resistant software encoding |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
US6779114B1 (en) * | 1999-08-19 | 2004-08-17 | Cloakware Corporation | Tamper resistant software-control flow encoding |
US7757097B2 (en) * | 1999-09-03 | 2010-07-13 | Purdue Research Foundation | Method and system for tamperproofing software |
CA2354470A1 (en) * | 2001-07-30 | 2003-01-30 | Cloakware Corporation | Active content for secure digital media |
US8055910B2 (en) * | 2003-07-07 | 2011-11-08 | Rovi Solutions Corporation | Reprogrammable security for controlling piracy and enabling interactive content |
CN100504818C (zh) | 2003-07-07 | 2009-06-24 | 巨视股份有限公司 | 调控对非易失性存储区访问的方法和判定访问的自动方法 |
KR20080014786A (ko) * | 2005-06-01 | 2008-02-14 | 마츠시타 덴끼 산교 가부시키가이샤 | 컴퓨터시스템 및 프로그램 생성장치 |
US8752032B2 (en) * | 2007-02-23 | 2014-06-10 | Irdeto Canada Corporation | System and method of interlocking to protect software-mediated program and device behaviours |
US8181038B2 (en) * | 2007-04-11 | 2012-05-15 | Cyberlink Corp. | Systems and methods for executing encrypted programs |
CN101494072B (zh) * | 2009-03-06 | 2010-12-29 | 惠州市数码特信息电子有限公司 | 硬盘播放器和视频文件加密方法 |
-
2016
- 2016-01-27 US US15/007,482 patent/US11269621B2/en active Active
- 2016-01-27 CN CN201680007548.6A patent/CN107580765B/zh active Active
- 2016-01-27 EP EP16706053.2A patent/EP3251040B1/en active Active
- 2016-01-27 KR KR1020177023923A patent/KR102000861B1/ko active IP Right Grant
- 2016-01-27 WO PCT/US2016/015164 patent/WO2016123237A1/en active Application Filing
- 2016-01-27 CA CA2974990A patent/CA2974990C/en active Active
- 2016-01-27 MX MX2017009586A patent/MX2017009586A/es unknown
-
2022
- 2022-02-18 US US17/675,830 patent/US11816477B2/en active Active
-
2023
- 2023-10-10 US US18/378,436 patent/US20240045670A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007304726A (ja) * | 2006-05-09 | 2007-11-22 | Fuji Xerox Co Ltd | プログラム難読化装置、難読化方法及び難読化プログラム |
JP2008090668A (ja) | 2006-10-03 | 2008-04-17 | Kddi Corp | プログラム難読化方法およびプログラム |
US20100250906A1 (en) * | 2009-03-24 | 2010-09-30 | Safenet, Inc. | Obfuscation |
Also Published As
Publication number | Publication date |
---|---|
US11816477B2 (en) | 2023-11-14 |
CA2974990C (en) | 2020-11-17 |
KR20170108111A (ko) | 2017-09-26 |
US20240045670A1 (en) | 2024-02-08 |
CA2974990A1 (en) | 2016-08-04 |
EP3251040B1 (en) | 2018-11-07 |
CN107580765B (zh) | 2021-10-26 |
US20160218872A1 (en) | 2016-07-28 |
US20220171618A1 (en) | 2022-06-02 |
WO2016123237A1 (en) | 2016-08-04 |
MX2017009586A (es) | 2018-04-24 |
EP3251040A1 (en) | 2017-12-06 |
US11269621B2 (en) | 2022-03-08 |
CN107580765A (zh) | 2018-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102000861B1 (ko) | 스트리밍 미디어 및 다른 데이터 흐름들의 보호를 위한 난독화 | |
Chen et al. | A new reversible data hiding in encrypted image based on multi-secret sharing and lightweight cryptographic algorithms | |
Chen et al. | Medical image cipher using hierarchical diffusion and non-sequential encryption | |
Singh et al. | Towards integrating image encryption with compression: A survey | |
Chang et al. | A new encryption algorithm for image cryptosystems | |
Furht et al. | Multimedia encryption and watermarking | |
CN106888080B (zh) | 保护白盒feistel网络实施方案以防错误攻击 | |
RU2638639C1 (ru) | Кодер, декодер и способ кодирования и шифрования входных данных | |
JP7065888B6 (ja) | 暗号装置及び方法 | |
Halevi | Graded encoding, variations on a scheme | |
JP6608436B2 (ja) | エンコーダ、デコーダ、及び部分的データ暗号化を用いる方法 | |
Alsaidi et al. | Compression multi-level crypto stego security of texts utilizing colored email forwarding | |
WO2015166701A1 (ja) | 暗号化方法、プログラム、および、システム | |
Li et al. | A secure and efficient entropy coding based on arithmetic coding | |
Ayyub et al. | Secure searchable image encryption in cloud using hyper chaos. | |
Dweik et al. | A survey of lightweight image encryption for IoT | |
WO2021201779A1 (en) | Method and system for generating a hash-based message authentication code (hmac) based on white-box implementation | |
Jirjees et al. | IMGTXT: Image to Text Encryption Based on Encoding Pixel Contrasts. | |
KR102626974B1 (ko) | 화이트박스 암호의 비밀키 보호를 위한 방법 및 시스템 | |
JP5293612B2 (ja) | 暗号化装置、復号装置、暗号化方法、復号方法およびプログラム | |
Chen et al. | Progressive secret image sharing based on Boolean operations and polynomial interpolations | |
Rout et al. | A Novel Aspect of Security Trade-offs in Image Files | |
Jirjees et al. | Mathematical Modelling of Engineering Problems | |
Ojha et al. | An authenticated two-tier security on transmission of medical image using codebase cryptosystem over teeming channel | |
Majhi | High Security Image Encryption By 3 Stage Process |
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 |