KR20070086517A - 컴퓨터 프로그램 코드에 정보를 삽입하고 검출하는 방법 및이 방법을 수행하는 컴퓨터 판독가능 매체 - Google Patents

컴퓨터 프로그램 코드에 정보를 삽입하고 검출하는 방법 및이 방법을 수행하는 컴퓨터 판독가능 매체 Download PDF

Info

Publication number
KR20070086517A
KR20070086517A KR1020077014127A KR20077014127A KR20070086517A KR 20070086517 A KR20070086517 A KR 20070086517A KR 1020077014127 A KR1020077014127 A KR 1020077014127A KR 20077014127 A KR20077014127 A KR 20077014127A KR 20070086517 A KR20070086517 A KR 20070086517A
Authority
KR
South Korea
Prior art keywords
program
code
statements
computer program
statement
Prior art date
Application number
KR1020077014127A
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 KR20070086517A publication Critical patent/KR20070086517A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)
  • Editing Of Facsimile Originals (AREA)

Abstract

복수의 프로그램 명령문들을 포함하는 컴퓨터 프로그램 코드에 정보를 삽입하는 방법이 개시된다. 이 방법은, 조건부 프로그램 명령문을 컴퓨터 프로그램 코드에 삽입하는 단계를 포함하고, 상기 조건부 프로그램 명령문은, 하나의 조건과 복수의 대체 프로그램 명령문들을 포함하며, 상기 조건부 프로그램 명령문은 데이터 프로세싱 시스템으로 하여금 상기 조건을 평가하도록 하며, 상기 평가 단계에서의 결과에 응하여, 상기 복수의 대체 프로그램 명령문들 중 하나를 선택하여 실행하게 하도록 적응되며, 상기 조건은 상기 정보의 적어도 일부를 나타내며, 상기 복수의 대체 프로그램 명령문들은 상기 컴퓨터 프로그램 코드로 하여금 상기 대체 프로그램 명령문들 중 어느 것이 실행되는지에 상관없이 동일한 프로그램 출력을 생성하게 하도록 적응된다.
워터마크, 조건부 프로그램 명령문, 대체 프로그램 명령문

Description

컴퓨터 프로그램 코드에 정보를 삽입하고 검출하는 방법 및 이 방법을 수행하는 컴퓨터 판독가능 매체{WATERMARKING COMPUTER PROGRAM CODE}
본 발명은 정보의 삽입 및 검출에 관한 것으로, 특히, 소스 코드(source code) 또는 목적 코드(object code)와 같은 컴퓨터 프로그램 코드에서의 디지털 워터마크(watermark)에 관한 것이다.
일반적으로, 소프트웨어의 제조자 및/또는 배포자가, 특히 소프트웨어를 무단 도용으로부터 보호하고, 소프트웨어의 소유권을 확립/증명하고, 소프트웨어의 정당성을 입증하고 및/또는 배포된 소프트웨어의 사본들을 식별/추적할 수 있도록, 이러한 소프트웨어의 배포를 제어하는 것이 바람직하다. 따라서, 컴퓨터 소프트웨어, 특히 소스 코드 또는 목적 코드를 워터마킹하기 위한 효율적인 기술이 요망된다. 이러한 워터마킹 기술의 목적은, 프로그램 코드를 조작하고/변형하거나 또는 프로그램 코드를 추가하여, 소프트웨어에 (워터마크 또는 단순히 마크인) 정보를 추가하는 것이다. 이 정보는 소프트웨어의 구매자를 식별하기 위해서 등과 같이, 식별 목적을 위한 저작권 통지로서 사용될 수 있다. 일반적으로, 이 정보가 구매자에 의해서는 제거될 수는 없지만, 그 마크를 소프트웨어에 집어넣었던 프로세스에 관한 지식을 이용하여 소프트웨어로부터 정보가 추출될 수 있는 방식으로 삽입 되는 것이 바람직하다. 특히, 워터마크가 (예를 들면, 통계적 분석에 의해) 쉽게 검출될 수 없을 경우, 워터마크는 은밀하다고(stealthy) 말하여진다. 워터마크가 코드 난독화(code obfuscation) 또는 코드 최적화(code optimization)와 같은 의미-보존 변환(semantic-preserving transformation)을 견뎌내거나 및/또는 충돌 공격(collision attack)을 견뎌낼 수 있다면, 이 워터마크는 원상으로 돌아가는 복원력이 있다고(resilient) 말하여진다.
일반적으로, 워터마크는 마크를 식별할 수 없도록 하기 위해, 서로 다른 공격을 받을 수 있다. 이러한 공격의 종류의 예로는, 아래와 같은 것들이 있다.
- 부가적인 공격(additive attack) : 새 워터마크가 코드에 부가되어, 원래의 마크는 더 이상 추출될 수 없거나 또는 어느 것이 원래의 마크인지 판정하는 것이 불가능하게 됨.
- 왜곡된 공격(distortive attack) : 이것은, 워터마크가 왜곡되어 알아볼 수 없을 것이라는 것을 기대하면서, 코드가 코드 난독화 및 코드 최적화와 같은 의미-보존 변환되게 함.
- 공제되는 공격(subtractive attack) : 워크마크의 위치가 결정되고, 그 마크는 프로그램으로부터 잘려짐.
- 공모 공격(collusion attack) : 마크의 위치를 결정하기 위해 마크된 서로 다른 프로그램을 사용함.
따라서, 소프트웨어의 구매자에 의해서와 같이, 이러한 공격들 하에서도 견고한 마킹을 만들어내는 워터마킹 기술을 제공하는 것이 일반적인 문제점이다.
삽입된 워터마크가 검출되면, 이것은 프로그램으로부터 제거되거나(잘려지거나), 또는, 원래의 마크를 파괴할 가능성이 높은 동등한 표현으로 대체될 수 있다. 기존의 해결책에서, 삽입은 종종 식별하기에 너무 쉬워서, 잘려질 수 있었다.
Christian Collberg 등에 의한 IEEE Transact. On softw. Eng., Vol.28, No 8, p735-746의 "Watermarking, tamper-Proofing and Obfuscation - Tools for software Protection"이라는 논문은 프로그램 코드의 워터마킹을 설명한다.
난독화는, 코드를 복잡하게 하는 데에, 즉, 동일한 관찰가능한(observable) 동작을 하되 프로그램 코드는 좀 더 이해하기 어려운 프로그램 코드로 코드를 변환하는 데에 사용되는 기술이다. 이 기술은 엔지니어들이 소프트웨어를 거꾸로 하기에(reverse) 더 어렵게 하기 위해 사용되는 기술이다. 이것은 통상적으로 리네이밍(renaming), 재순서화하기(reordering), 나누기/병합하기(splitting/merging), 루프 변환 등을 포함한다. 따라서, 난독화는 그것이 컴파일되지 않은(de-compiled) 경우 코드를 더 이해하기 어렵게 만들지만, 통상적으로 코드의 기능에는 영향을 끼치지 않는다. US 6,668,325호는 워터마킹 문맥에서 사용될 수 있는 많은 코드 난독화 기술을 개시하고 있다.
그러나, 상술된 종래 기술의 방법이 컴퓨터 프로그램 코드를 워터마킹하는 것을 제공하고 있지만, 마킹된 소프트웨어를 살펴볼 때 검출하기 좀 더 어려운 워터마크를 생성하는 워터마킹 기술을 제공하는 문제점이 여전히 남아 있다.
특히, 변수의 리네이밍, 명령어의 재순서화, 루프 변환 등에 의해서와 같은, 프로그램 코드에 있어서의 단순 난독화 변경에 의한 워터마크의 삽입은, 난독화 기 술이 통상적으로 이들 속성 그 자체를 변경시키기 때문에 원상으로 돌아가는 복원력이 충분하지 못하므로 난독화 공격에 대해 워터마크가 취약해진다는 문제점을 지니고 있다.
또한, 소프트웨어의 특정 사본의 근원을 식별하는 견고한 방법을 가능하게 하는 워터마킹 기술을 제공하는 문제점이 여전히 남아 있다.
상술된 문제점과 다른 문제점은 컴퓨터 프로그램 코드에 정보를 삽입하는 방법에 의해 해결되며, 상기 컴퓨터 프로그램 코드는 복수의 프로그램 명령문들을 포함하고, 데이터 프로세싱 시스템에 의해 실행될 때, 상기 데이터 프로세싱 시스템으로 하여금 프로그램 출력을 생성하게 하도록 적응되며, 상기 방법은, 상기 컴퓨터 프로그램 코드에 조건부 프로그램 명령문(conditional program statement)을 삽입하는 단계를 포함하고, 상기 조건부 프로그램 명령문은 하나의 조건과 복수의 대체 프로그램 명령문들을 포함하고, 상기 조건부 프로그램 명령문은 데이터 프로세싱 시스템으로 하여금 상기 조건을 평가하고, 상기 평가 단계의 결과에 응하여, 상기 복수의 대체 프로그램 명령문들 중 하나를 선택적으로 실행하게 하도록 적응되며, 상기 조건은 상기 정보의 적어도 일부를 나타내며, 상기 복수의 대체 프로그램 명령문은 상기 컴퓨터 프로그램 코드로 하여금 상기 대체 프로그램 명령문들 중 어느 것이 실행되는지에 상관없이 동일한 프로그램 출력을 생성하게 하도록 적응된다.
합리적인 오버헤드를 갖는, 은밀하고, 복원력이 있는 마크를 제공하는 것이 본 명세서에서 설명된 방법의 이점이다.
특히, 부가적인 공격에서, 다른 조건부 명령문들이 코드 내에 삽입된다. 그러나, 워터마크 정보를 포함하는 원래의(original) 조건부 명령문은 삽입자/추출자에게만 알려진 코드의 위치에 위치되어 있다. 서로 다른 위치에 위치되어 있는 조건부 명령문은 결과적으로 추출자를 혼란스럽게 하지 않을 것이다. 또한, 코드 워드들의 목록에 대응하는 엔트리가 없는 조건과 같은, 정보로 성공적으로 디코딩될 수 없는 조건문에 의해 선행되는 조건부 명령문들은, 워터마킹 명령문으로서 간주되지 않을 것이다.
본 명세서에 설명된 방법이 인가되지 않은 사본의 출처를 숨기기 위해, 소프트웨어의 소유자가 난독화된 사본을 식별하지 못하도록 새로운 사본 내에 코드를 난독화하는 공격자에 대해 증가된 (프로그램 복사) 방지 기능(protection)을 제공하는 것이 추가의 이점이다.
난독화, 최적화 그리고 디컴파일/재컴파일과 같은 대부분의 자동화 공격에 대해 복원력이 있다는 것 또한 본 명세서에서 설명된 방법의 추가의 이점이다.
임의의 상당한 오버헤드를 추가하지 않는다는 것, 즉, 워터마크된 프로그램 코드의 크기 및/또는 그것의 실행 시간이 상당히 증가하지 않는다는 것 또한 본 명세서에서 설명된 방법의 추가의 이점이다. 실행 시간이 증가하는 것은 단지 삽입된 조건의 평가 때문이다. 크기의 증가는 삽입된 조건부 프로그램 코드 명령문의 크기에 대응한다. 통상적인 소프트웨어 애플리케이션에서, 이들의 영향은 전체 코드의 크기에 비교해보면 작다.
본 명세서에서 사용되는 "프로그램 명령문(program statement)"이라는 용어는, 프로그래밍 언어를 구조화하는 단위, 특히 이러한 구조화의 최소 단위를 포함하도록 의도된다. 이러한 명령문들 종류의 예로는, 정의문, 선언문, 지정문, 조건부 명령문, 루프문, 함수/프로시져 호출문 등을 포함한다.
본 명세서에서 사용된 "조건(condition)"이라는 용어는, 결과, 즉 값을 생성하고 그것을 반환하도록 적응된 프로그래밍 언어에서의 수식을 포함하도록 의도된다. 조건부 프로그램 명령문에서, 프로그램 흐름은 조건이 어떤 값으로 평가되는지에 따라, 많은 대체 프로그램 명령문들 중 하나로 계속된다. 예를 들면, 조건은 TRUE 또는 FALSE로 평가되는 부울 수식일 수 있다. 통상적으로, 이러한 조건들은 IF ... THEN 조건부 프로그램 명령문에서 루프의 각 루프 반복 전에 평가된다. 루프는 조건이 거짓으로 평가될 때 빠져나간다. 조건부 명령문의 다른 예로는, 제어 수식이 동등한지를 테스트하는 "switch" 명령문을 포함한다. switch 명령문에 이어 많은 수의 "case" 절이 이어지며, 이들 각각은 하나의 가능한 테스트 값을 특정하고, 이들 각각은 그것과 관련된 프로그램 명령문들을 갖는다. case 절의 프로그램 명령문은 제어 수식이 그에 대응하는 테스트 값을 충족시키는 경우 실행된다.
본 명세서에서 사용된 프로그래밍 언어의 "수식(expression)"이라는 용어는, 값, 변수, 함수 등의 조합을 포함하도록 의도되며, 여기서, 이 조합은 특정 프로그래밍 언어에 대한 서열과 관련 사항의 특정 규칙에 따라 해석되며, 이 조합은 결과, 즉, 값을 생성하고 이를 반환하도록 적응된다. 대수 수식은, 예를 들면, 부동 소수점(floating point) 데이터 유형 또는 정수 데이터 유형과 같은, 숫자 데이터 유형을 갖는 결과, 즉, 수로 된 결과를 생성한다.
본 명세서에서 사용되는 "프로그램 출력(program output)"이라는 용어는, 프로그램의 실행 동안 임의의 관찰가능한 동작(behavior), 예를 들면 사용자, 다른 컴퓨터 프로그램, 다른 장치 등에 의해 관찰가능하고/눈에 띄는(noticeable) 임의의 프로그램 동작을 포함하도록 의도된다. 프로그램 출력의 예로는, 데이터 인터페이스 등을 통해, 컴퓨터 스크린, 프린터, 기억 매체, 통신 인터페이스 등과 같은 임의의 적합한 출력 장치를 통해 출력될 수 있는, 숫자 값의 출력, 텍스트 출력, 이진 출력, 출력 신호, 그래픽과 같은 비주얼, 출력, 들을 수 있는 출력 등을 포함한다. 특히, 대체 프로그램 명령문들이, 프로그램 동작에서의 차이점들이 프로그램의 실행 시 관찰가능하지 않은, 동일하지 않은 프로그램 동작에 대응하는 경우, 공격자가 워터마크를 식별하는 것은 더 어렵게 된다.
방법이 본 기술 분야의 것과 같이 공지되어 있는 임의의 적합한 코드 난독화 기술에 의해서와 같이, 복수의 대체 프로그램 명령문들 중 적어도 하나를 난독화하는 단계를 더 포함하는 경우, 삽입된 정보는 더욱 은밀하게 된다. 특히, 공제되는 공격을 행하기 위해, 공격자는 대체 프로그램 명령문들이 동일한 프로그램 동작을 일으켜, 그 조건을 변경하거나/제거한다는 것을 깨달아야만 할 것이다. 하나 이상의 대체 프로그램 명령문들을 난독화하는 것은, 두 개의 대체 명령문들이 동일한 프로그램 동작을 일으킨다는 것을 컴퓨터의 조작에 있어 깨닫기 어렵도록 하는 대체 명령문들을 제공한다.
한 실시예에서, 대체 프로그램 명령문들 각각은 변수(들), 데이터 구조(들) 등과 같은 하나 이상의 프로그램 객체들을 업데이트하도록 적응되고, 프로그램 출력은 상기 프로그램 객체들의 하나 이상의 소정의 함수들에 의해 상기 프로그램 객체들에만 좌우되며, 상기 하나 이상의 함수들 각각은 상기 대체 프로그램 명령문들 중 어느 것이 실행되는지에 좌우되지 않는 결과를 생성한다. 따라서, 이러한 대체 명령문들의 집합은 쉽게 구현될 수 있고, 은밀한 워터마크를 제공한다.
방법이 하나 이상의 코드 워드들로서 삽입될 정보를 인코딩하는 단계를 더 포함하는 경우, 각각의 코드 워드는 하나 이상의 각각의 소정의 조건(들)에 대응하며, 아주 다양한 부가 정보를 삽입하기 위한 효율적인 인코딩 방식이 제공된다.
정보를 인코딩하는 단계는, 에러 정정 코드를 이용하여 상기 정보를 인코딩하는 단계를 포함하고, 삽입된 정보의 복원력은 더욱 증가된다.
본 발명은 상술되고 이하에 설명된 방법, 대응하는 장치들, 그리고 컴퓨터 프로그램들을 포함하는 서로 다른 양태들에 관한 것이며, 이들 각각은 상술된 방법에 관련되어 설명된 하나 이상의 혜택과 이점들을 산출하며, 이들 각각은 상술된 방법들에 관련되어 설명된 실시예들에 대응하는 하나 이상의 실시예들을 갖는다.
특히, 컴퓨터 프로그램 코드에 삽입된 정보를 검출하는 방법에 있어서, 상기 컴퓨터 프로그램 코드는 복수의 프로그램 명령문들을 포함하고, 데이터 프로세싱 시스템에 의해 실행될 때, 상기 데이터 프로세싱 시스템으로 하여금 프로그램 출력을 생성하게 하도록 적응되며, 상기 방법은, 적어도 하나의 조건부 프로그램 명령문을 식별하기 위해 상기 컴퓨터 프로그램 코드를 파싱하는 단계 (상기 조건부 프로그램 명령문은 하나의 조건과 복수의 대체 프로그램 명령문들을 포함하고, 상기 조건부 프로그램 명령문은 데이터 프로세싱 시스템으로 하여금 상기 조건을 평가하고, 상기 평가 단계에서의 결과에 응하여, 상기 복수의 대체 프로그램 명령문들 중 하나를 선택적으로 실행하게 하도록 적응되고, 상기 복수의 대체 프로그램 명령문들은 상기 컴퓨터 프로그램 코드로 하여금 상기 대체 프로그램 명령문들 중 어느 것이 실행되는가에 상관없이 동일한 프로그램 출력을 생성하게 하도록 적응됨)와, 상기 조건으로부터 상기 삽입된 정보의 적어도 일부를 추출하는 단계를 포함한다.
상술되고 이하에 설명되는 방법의 특징이, 소프트웨어로 구현될 수 있고, 컴퓨터 실행가능 명령어와 같은 프로그램 코드 수단의 실행에 의해 야기되는 데이터 프로세싱 장치 또는 다른 프로세싱 수단에서 수행될 수 있다는 것을 유의한다. 본 명세서에서 그리고 이하의 설명에서, 프로세싱 수단이라는 용어는, 상술된 기능을 수행하도록 적합하게 적응된 임의의 회로 및/또는 장치를 포함한다. 특히, 상술된 용어는 범용 또는 특수 목적의 프로그램가능한 마이크로프로세서, DSP(Digital Signal Processors), ASIC(Application Specific Integrated Circuits), PLA(Programmable Logic Arrays), FPGA(Field Programmable Gate Arrays), 특수 목적의 전자 회로 또는 이들의 조합을 포함한다. 특히, 일부 실시예에서, 정보가 삽입되거나 또는 삽입된 정보가 검출될 컴퓨터 프로그램 코드가 컴퓨터 메모리 내로 로딩되고, 본 명세서에서 설명된 정보 삽입 또는 정보 검출의 단계들은 상기 컴퓨터에 의해 자동으로 수행된다.
예를 들면, 프로그램 코드 수단은, 컴퓨터 네트워크를 통해, 저장 매체로부터 또는 또 다른 컴퓨터로부터 RAM과 같은 메모리에 로딩될 수 있다. 대안으로, 설명된 특징들은 소프트웨어 대신 회로 접속된 회로에 의해, 또는 소프트웨어와의 조합으로 구현될 수 있다.
하나의 양태에 따르면, 데이터 프로세싱 시스템은 상술되고 이하에 설명되는 방법의 단계들을 수행하도록 적합하게 구성된다.
또 다른 양태에 따르면, 컴퓨터 프로그램 제품은, 데이터 프로세싱 시스템에서 실행될 때, 데이터 프로세싱 시스템으로 하여금 상술되고 이하에 설명되는 방법을 수행하게 하도록 적응된 컴퓨터 실행가능 명령어를 포함한다.
일부 실시예에서, 컴퓨터 프로그램 제품은 컴퓨터 실행가능 명령어가 저장된 컴퓨터 판독가능 매체로서 구현된다. 예를 들면, 컴퓨터 판독가능 매체는 컴퓨터 실행가능 명령어가 저장된 CD, 광 디스크, 디스켓, 자기 기억 매체, 메모리 스틱 등일 수 있다. 예를 들어, 컴퓨터 판독가능 매체는 워터마크를 삽입하기 위한 소프트웨어 애플리케이션과, 프로그램 코드에서 워터마크를 검출하기 위한 소프트웨어 애플리케이션을 저장할 수 있다. 소프트웨어 애플리케이션은 별도의 애플리케이션으로 또는 하나의 애플리케이션에 결합되어 구현될 수 있다. 다른 실시예에서, 컴퓨터 프로그램 제품은 적합하게 변조된 반송파 신호와 같은 데이터 신호로서 구현된다. 예를 들면, 컴퓨터 실행가능 명령어는 컴퓨터 네트워크를 통해 서버 컴퓨터로부터의 다운로드를 위해 제공될 수 있다.
일부 실시예에서, 컴퓨터 프로그램 제품은 소프트웨어 컴파일러를 포함하며, 이 컴파일러는 데이터 프로세싱 시스템으로 하여금, 컴파일러에 의해 수행되는 많은 컴파일 과정들(pass) 중 하나로서, 상술되고 이하에 설명되는 방법을 수행하게 하도록 적응된 기능을 포함한다. 따라서, 컴파일 및 워터마크 삽입용 통합 소트프웨어 도구가 제공된다. 또한, 본 명세서에서 설명된 워터마크 삽입이, 통상적인 컴파일러 사용과 동일한 소스 코드 분석용 코드 분석 기술 중 일부를 포함하기 때문에, 대응하는 소프트웨어 기능이 재사용될 수 있어, 효율적인 소프트웨어 구현을 제공한다.
또 다른 양태에서, 컴퓨터 프로그램은 본 명세서에서 설명된 방법에 의해 삽입된, 삽입 정보를 포함한다. 일부 실시예에서, 컴퓨터 프로그램은 컴퓨터 프로그램이 저장되어 있는 컴퓨터 판독가능 매체로서 구현된다. 다른 실시예에서, 컴퓨터 프로그램은, 적합하게 변조된 반송파 신호와 같은 데이터 신호로서 구현된다.
본 명세서의 설명을 위해, 기억 수단 및 컴퓨터 판독가능 매체라는 용어는, ROM, RAM, 플래시 메모리, EPROM(Erasable Programmable Read-Only Memory), 휘발성 또는 불휘발성 메모리, 광 기억 장치, 자기 기억 장치, 디스켓, CD, 하드 디스트 등과 같은 임의의 적합한 기억 매체, 장치 또는 회로를 포함하도록 의도된다.
도 1은 워터마크 삽입 프로세스의 개략적인 블록도.
도 2는 워터마크 추출 프로세스의 개략적인 블록도.
도 3은 각각의 수학 변환을 갖는 워터마크를 인코딩하기 위한 코드 워드를 나타내는 테이블.
도 4는 조건부 명령문 삽입의 예를 개략적으로 도시하는 도면.
도 5는 워터마킹될 코드 단편과 그에 대응하는 워터마킹된 코드 단편의 예를 도시하는 도면.
도 6은 조건부 명령문 삽입의 예를 개략적으로 도시하는 도면.
도 7은 조건부 명령문의 삽입을 용이하게 하기 위해 컴퓨터 프로그램의 제어 흐름을 변형시키는 예제를 개략적으로 도시하는 도면.
이들 및 다른 양태들은 도면을 참조하면서 이하에 설명된 실시예로부터 명백하고 명료해질 것이다.
도 1은 워터마크 삽입 프로세스의 개략적인 블록도를 도시한다. 프로세스는 소스 코드(101)와 소스 코드에 삽입될 디지털 워터마크(102)를 수신한다.
소스 코드(101)는, 통상적으로, C, C++, Java 등과 같은 형식적인 프로그래밍 언어로 프로그래머에 의해 작성된 컴퓨터 프로그램의 형태이다. 소스 코드는 컴파일러에 의해 목적 코드로 또는 기계 코드(machine code)로 자동으로 컴파일되거나 또는 인터프리터에 의해 자동으로 실행될 수 있다.
소스 코드(101)는 하나 이상의 텍스트 문서 또는 임의의 다른 적합한 디지털 표현으로서 나타내어질 수 있다. 대안으로, 워터마킹 프로세스는, 예를 들면, 목적 코드와 같이, 프로그램 명령문이 식별될 수 있는 다른 유형의 입력 코드를 수신할 수 있다.
디지털 워터마크(102)는, 예를 들면, 소스 코드의 수취인을 나타내는 정보, 소스 코드의 저작자, 소스 코드를 나타내는 식별자, 디지털 증명서, 의사-난수, 비밀 키 및/또는 임의의 다른 적합한 정보와 같은, 삽입될 워터마크 정보의 임의의 적합한 디지털 표현일 수 있다. 예를 들면, 워터마크는 비트 시퀀스로서 표현될 수 있다.
소스 코드가 파서 모듈(parser module)(103)에 제공된다. 파서 모듈은 소스 코드를 파싱하고, 적합한 프로그램 명령문들 또는 본 명세서에서 설명되는 조건부 프로그램 명령문의 삽입에 사용될 수 있는 소스 코드에서의 다른 적합한 위치들을 식별한다. 예를 들면, 식별된 프로그램 명령문들은 코드 난독화 기술에 대한 입력으로서 특히 적합한 프로그램 명령문들일 수 있다. 적합한 위치들의 예가 도 6 및 도 7을 참조하여 이하에 도시될 것이다. 파서 모듈은, 변수 정의, 상수 정의, 함수, 프로그램 명령문들, 조건들, 루프, 지정, 수식 등과 같은 해당 프로그래밍 언어의 구조적 컴포넌트들을 식별하기 위해 소스 코드를 파싱할 때 통상적인 컴파일러들이 사용하는 기술의 서브 집합과 같은, 본 기술 분야에 공지되어 있는 소스 코드를 파싱하기 위한 임의의 적합한 기술을 사용할 수 있다. 소스 코드에서 식별된 모든 프로그램 명령문들/위치들로부터, 파서는 적합한 명령문들/위치들의 소정의 서브셋을 더 선택할 수 있다. 파서 모듈은 식별된 문장들/위치들(104) 또는 소스 코드에서의 각각의 위치들에 대한 적어도 포인터들을, 코드 변환 모듈(105)에 전달한다. 선택적으로, 파서 모듈은, 예를 들면, 프로그램 코드의 수취인에 관한 정보, 내장될 워터마크, 원래의 프로그램 코드의 사본 등에 관하여서와 같이, 레포지토리에 식별된 위치들을 저장할 수 있다.
디지털 워터마크(102)는 인코더 모듈(106)에 제공된다. 인코더 모듈은 소정의 코드에 따라 디지털 워터마크를 인코딩한다. 예를 들면, 코드(107)는 같은지 또는 다른지에 대한 특별 테스트에 의해서와 같이, 특정 조건에 의해 각각의 코드 워드가 표현될 수 있도록 하는 코드 워드들의 집합을 포함할 수 있다. 코드(107)가 에러 정정 코드, 어느 정도의 중복성을 지니는 코드 등일 경우, 삽입된 워터마크의 후속되는 검출은 더욱 신뢰할 수 있게 된다. 선택적으로, 인코더 모듈은 파서 모듈(103)로부터, 예를 들면, 검출된 적합한 명령문들/위치들의 개수에 관한 정보와 같은 정보(110)를 추가로 수신한다. 일부 실시예에서, 이 정보를 이용하여, 인코더는 인코딩을 식별된 명령문들/위치들의 개수에 적용할 수 있다. 예를 들면, 인코딩에서 사용된 중복성 레벨은 발견된 적합한 명령문들/위치들의 개수에 기초하여 제어될 수 있다. 더 적합한 명령문들/위치들이 식별될수록, 인코딩된 워터마크에 포함될 수 있는 중복성이 높아진다. 대안으로 또는 추가로, 인코더 모듈은, 예를 들면, 파서 모듈에게 적합한 명령문들/위치들의 특정 최소 개수를 식별하도록 지시하기 위한 제어 정보를 파서 모듈에 전송할 수 있다. 예를 들면, 인코더 모듈은 원하는 중복성 레벨 및/또는 워터마크 및/또는 다른 매개변수의 크기에 기초하여 이러한 최소 개수를 결정할 수 있다.
일부 실시예에서, 각각의 코드 워드는, 대응하는 코드 워드를 각각 나타내는 복수의 대체 조건(alternative condition)과 관련되고, 인코더는 임의로, 식별된 명령문의 유형에 기초하여, 이전의 선택 등에 기초하여, 대체 조건부 명령문들 중 하나를 선택할 수 있다.
도 3은 각각의 조건들을 갖는 워터마크를 인코딩하기 위한 코드 워드들을 나타내는 데이터 구조를 도시한다. 도 3의 예에서, 코드 워드들과 조건들 간의 관계 는 코드 북(code book)을 나타내는 데이터 구조에 저장된다. 특히, 이 예에서, 코드 북은 일반적으로 참조번호(300)로 지정된 1차원 배열 목록으로 표현된다. 목록(300)의 각각의 엔트리, 즉 각 배열은, 워터마크를 인코딩하는 데에 사용되는 코드의 (CW1, CW2, ..., CWN으로 지정된) 코드 워드들 중 하나에 대응한다. 각 배열들의 각 셀은, 특정 코드 워드에 사용될 (C11, C12, C13, ..., CNK로 지정된) 특정 조건을 식별한다.
예를 들면, 한 조건은 특정 다항식 또는 다른 함수를 0과 비교하는 것일 수 있고, 또 다른 조건은 특정 부등식 테스트 등일 수 있다. 또한, 조건의 각 유형에 대해, 예를 들면, 다항식들을 하나의 변수에 포함시키는 조건, 두 변수의 다항식, 등식을 포함하는 조건, 부등식을 포함하는 조건 등과 같은, 하나 이상의 서브 유형들이 있을 수 있다. 대안으로 또는 추가로, 수식의 유형은, 예를 들면, 변수들이 양의 값들만 지닐 수 있다 등과 같은 수식에 포함될, 변수들에 대한 제한과 같은, 파서가 프로그램 코드에서 검출할 수 있는 임의의 추가의 정보에 따라 추가로 세분화될 수 있다. 따라서, 소정의 코드 워드에 대해, 인코더 프로세스는, 예를 들면, 코드 워드가 발생할 때마다 상이한 조건, 조건이 삽입될 식별된 프로그램 명령문에 따른 하나 또는 두 개의 변수에서의 조건 등과 같이, 가능한 많은 조건들 중 하나를 선택할 수 있다.
상술된 수식의 서브 유형들 및/또는 추가의 정보는, 대안으로, 특정 조건을 생성하는 각각의 함수에 대한 입력 매개변수로서 구현될 수 있다는 것을 이해할 것 이다. 예를 들면, 목록(300)의 각 셀은 이러한 함수에 대한 포인터를 포함할 수 있고, 또한 입력 매개변수들은 조건 등에 사용될 변수 이름들을 포함할 수 있다. 또 다른 실시예에서, 목록(300)은 코드 워드, 조건 유형, 선택적으로는, 추가의 정보에 의해 결정되는 인덱스를 갖는, 2차원 또는 3차원과 같은 더 높은 차수의 배열로서 나타내어질 수 있다.
코드 북에 기초하지 않는 코드와 같이, 규칙-기반 인코딩에 기초하는 코드와 같은 임의의 다른 적합한 코드에 의해 워터마크가 인코딩될 수 있다는 것을 또한 이해할 것이다.
다시 도 1을 참조해보면, 조건들의 시퀀스, 조건부 명령문들의 시퀀스 등과 같은, 인코더 모듈(106)에 의해 생성된 인코딩된 워터마크(108)가 변환 모듈(105)에 제공된다. 변환 모듈(105)은 파서 모듈(103)로부터는 식별된 프로그램 명령문들/위치들(104)을, 인코더 모듈(106)로부터는 인코딩된 워터마크(108)를 수신한다. 이후 변환 모듈은, 수신된 인코딩된 워터마크에 따라 각각의 조건들을 포함하는 각각의 조건부 명령문들을 삽입한다. 이러한 조건부 명령문들의 예제가 이하에서 더 상세히 설명될 것이다. 예를 들면 원래의 식별된 명령문들 대신 조건부 수식들이 소스 코드에 삽입되어, 워터마크된 소스 코드(109)가 생성된다. 워터마크된 소스 코드는, 예를 들면, 컴파일되고, 압축되고, 인코딩되는 등과 같이, 계속해서 추가로 처리될 수 있다.
도 2는 워터마크 검출/추출 프로세스의 개략적인 블록도를 도시한다. 워터마크 추출 프로세스는 워터마크된 소스 코드(209) 또는 상술된 바와 같은 다른 유 형의 워터마크된 입력 코드를 수신한다. 워터마크된 소스 코드(209)는 상술된 워터마크 삽입 프로세스의 파서 모듈(103)과 유사한 파서 모듈(203)에 제공된다. 파서 모듈(203)은 가능한 후보 조건부 명령문들 모두를 식별한다. 예를 들면, 파서 모듈은, 도 3과 관련하여 설명된 데이터 구조와 같은, 코드에 의해 사용된 가능한 모든 조건들을 포함하는 코드 데이터 구조(207)에 나타나는 조건을 포함하는 모든 조건부 명령문들을 식별할 수 있다. 대안으로, 파서 모듈은 원래의, 즉 마크되지 않은 프로그램 코드를 또한 수신할 수 있고, 마크되지 않은 코드에 나타나지 않은 모든 조건부 명령문들을 식별할 수 있다. 또 다른 예로서, 파서 모듈은 워터마크 정보를 포함하는 조건부 명령문들이 발생하는 프로그램 코드에서의 위치들 목록을 또한 수신할 수 있다. 이러한 목록은, 예를 들면 삽입 프로세스 동안, 워터마크 레포지토리에 저장될 수 있다. 따라서, 특정 고객에 대한 조건부 명령문들의 저장된 위치들이 검색될 수 있어, 예를 들면 디버거에 의해서와 같이 워터마크 정보를 인코딩하는 조건부 명령문을 식별하기 위한 계산 노력을 줄일 수 있다. 식별된 후보 조건부 명령문들(204)이 명령문 파싱 모듈(205)에 제공된다. 명령문 파싱 모듈은, 식별된 조건부 명령문들에서 사용된 각각의 조건을 식별하기 위해, 식별된 조건부 명령문들 각각을 파싱한다. 이리하여, 명령문 파싱 모듈(205)은 디코더 모듈(206)에 제공되는 식별된 조건들의 시퀀스(208)를 생성한다.
디코더 모듈(206)은 식별된 조건들의 시퀀스(208)를 수신하여, 삽입 프로세스에서 사용되었던 공지된 코드(207)에 기초하여 시퀀스를 디코딩한다. 디코딩이 에러 검출 또는 심지어 에러 정정을 더 포함하는 경우, 검출 신뢰도가 개선된다. 이리하여, 디코더는 디코딩된 워터마크(202)를 생성한다. 일부 실시예에서, 디코딩된 워터마크는 후속하여 삽입된 정보를 식별하기 위해, 기준 워터마크 또는 기준 워터마크 목록과 비교된다.
도 4는 조건부 명령문을 삽입하는 예를 개략적으로 도시하는 도면이다.
특히, 도 4a는 워터마크될 원래 소스 코드 단편의 프로그램 흐름을 도시한다. 일반적으로 참조번호(400)로 지정된 단편은, 각각 참조번호(401,402,403)로 지정된 3 개의 프로그램 명령문 X, A 및 Y의 시퀀스를 포함한다. 원래의 프로그램 흐름에서, 명령문들 X, A 및 Y는 이 순서로 실행된다. 명령문들 X, A 및 Y 각각이 하나의 명령문 또는 복수의 개별 명령문들을 포함할 수 있다는 것을 이해할 것이다.
도 4b는 대응하는 워터마크된 코드 단편의 프로그램 흐름의 예를 도시한다. 이 예에서, 프로그램 명령문 A는, 참조번호(404)로 지정된 추가의 대체 프로그램 명령문 A'로 복제되어 추가되었으며, A'는 A와 동일한 프로그램 동작을 하지만 상이한 구현을 사용한다. 예를 들면, A'는 US 6,668,325호 및 Auckland 대학의 Technical Report 148(1997년)의 "A taxonomy of obfuscating transformations"에 설명된 기술과 같은, 공지되어 있는 임의의 적합한 난독화 기술에 의해 A로부터 생성될 수 있다. 따라서, 프로그램 명령문 A는 "If C then A else A'"로 표현될 수 있는 조건부 명령문(405)으로 대체되고, 여기서 C는 A 또는 A' 중 어느 것이 실행될 것인지를 판정하는 조건이다. 조건 C는 워터마크에 관한 정보를 포함한다. 상술된 바와 같이, 조건은 비밀 코드 북으로부터 또는 임의의 다른 적합한 인코딩 방 식에 의해 선택될 수 있다. 대체 명령문들 A 및 A'가 동일하도록 즉, 동일한 프로그램 출력과 전반적으로 동일한 프로그램 동작을 하도록 생성되기 때문에, 조건 C가 참인지 아닌지 여부는 중요하지 않다.
도 4c는 대응하는 워터마크된 코드 단편의 프로그램 흐름의 또 다른 예를 도시한다. 이 예는 원래의 명령문 A가 참조번호(407 및 408)로 지정된 대체 명령문들 A' 및 A''와 조건 C를 갖는 분기(406)로 대체되는, 좀 더 일반적인 접근방법을 도시한다. 이 예에서, 대체 명령문들 A' 및 A'' 둘 모두 원래의 명령문 A로부터 도출된다.
예를 들면, A' 및 A''는 동일한 동작을 하도록, 즉 조건부 명령문(406) 외부의 프로그램 동작이 명령문들 A' 및 A'' 중 어느 것이 실행되는가에 무관하도록, 두 개의 상이한 난독화 프로세스에 의해 A로부터 도출될 수 있다.
대안으로, 명령문들 A' 및 A''는 반드시 동일한 동작을 할 필요는 없지만, A' 또는 A'' 중 어느 것이 실행되더라도 전반적인 프로그램 동작 특히 프로그램 출력에 영향을 끼치지 않도록 생성될 수 있다. 이하에서, 이것은, 한 변수가 두 개의 보조(auxiliary) 변수로 대체되고 이 두 개의 보조 변수 각각이 대체 명령문들 중 하나에서 업데이트되는 예에 의해 도 5를 참조하여 도시될 것이다. 그러나, 조건부 명령문들 외부에서는, 프로그램의 동작이, 두 개의 변수들 중 어느 것이 조건부 명령문 내에서 업데이트되는지에 상관없도록, 즉, 대체 명령문들 중 어느 것이 실행되는지에 상관없도록, 두 개의 변수의 소정의 함수에만 좌우된다.
특히, 도 5는 워터마크될 코드 단편의 예를 도시한다.
도 5a는 워터마크될 코드 단편을 도시한다. 특히, 코드 단편은 0과 10사이의 짝수를 세는(count) 함수를 구현한다. 코드 단편은 참조번호(502)로 지정된 명령문 "z++"를 포함하며, 이것은 카운터 변수 z를 증분한다(increment). 코드 단편의 변수 z는 0에서 10까지 세고, 각각의 수가 2로 나뉘는지 여부를 테스트하는 데에 사용된다.
도 5b는 대응하는 워터마크된 코드 단편을 도시하며, 여기서 명령문 "z++"는 조건부 명령문(506)으로 대체된다. 조건부 명령문은 2개의 대체 명령문(507 및 508)을 포함하며, 그 중 하나(507)는 새 보조 변수 x를 증분하고, 다른 명령문(508)은 제2의 새 보조 변수 y를 증분한다. 변수 z가 그 설치 후에 갱신되거나 또는 변수 z의 값이 평가되는 나머지 코드의 모든 명령문에서, 변수 z는, x 또는 y가 증분되는지 여부에 상관없이 동일한 값을 산출하는 x와 y의 함수, 즉 합 (x+y)로 대체된다. 조건부 명령문(506)은 또한, 참조번호(509)로 지정되어 있고, 워터마크의 적어도 일부를 인코딩하는 조건 C를 포함한다. 프로그램 동작이 명령문들(507 및 508) 중 어느 것이 실행되는가에 영향을 받지 않기 때문에, 적용된 조건이 참 또는 거짓인지 여부는 프로그램 흐름에 있어 중요하지 않다. 특히, 프로그램 출력(이 경우, 짝수들의 개수/카운트 "NbrOfEven"에 해당함)은 어느 대체 명령문이 실행되는지에 좌우되지 않는다.
여기서, 상술한 것은, A'와 A''로 하여금 객체(상술된 예에서는, 튜플(x,y)을 말함)를 서로 다르게 갱신하도록 하지만, 프로그램 동작이 객체의 함수에만 좌우되는 경우, A' 또는 A'' 둘 중 어떤 것이 수행되더라도 동일한 결과를 산출함으 로써 생성되는 구성(construction)의 예다. 이러한 구성은 그 결과 생성된 삽입된 마크를 더욱 은밀하게 만든다.
도 4를 다시 참조해보면, 도 4d는 대응하는 워터마크된 코드 단편의 프로그램 흐름의 또 다른 예를 도시한다. 이 예에서, 원래의 명령문은 조건 C를 포함하는 "switch" 명령문(410) 형태의 조건부 명령문으로 대체된다. 예를 들면, 조건 C는 프로그램 실행 시 평가되어 테스트 값에 이르는 제어 수식으로서 표현될 수 있다. 테스트 값에 따라, 프로그램 흐름은 복수의 대체 명령문들 중 하나에서 계속된다. 도 4d의 예에서는, 스위치 명령문(410)은 세 개의 대체 명령문(411,412,413)을 포함한다. 그러나, switch 명령문이 임의의 개수의 대체 명령문들을 포함할 수 있다는 것을 이해할 것이다. 이를 위해, switch 명령문에 이어 복수의 "case" 절(411,412,413)이 따르며, 이들 각각의 case 절은 가능한 테스트 값과 관련된다. 따라서, 실행 시, 제어 수식의 테스트 값을 충족시키는 case 절과 관련된 명령문(들)이 실행된다.
본 명세서에 설명된 방법에 따라 삽입된 워터마크에 대항하는 가능한 공격은, 삽입된 대체 프로그램 명령문과 워터마크를 인코딩하는 조건을 제거하는 것이다. 이러한 공격이 성공할 수 있는 위험성은 대체 명령문의 삽입을 위한 위치를 적절하게 선택함으로써 감소될 수 있다. 예를 들면, 삽입된 대체 명령문(들)이 기존의 조건부 명령문의 기존의 대체 명령문들에 대한 대체 명령문(들)으로서 삽입되도록과 같이, 조건부 명령문이 변형된 조건부 명령문을 생성하는 기존의 조건부 명령문 내로 삽입되는 경우, 변형된 조건부 명령문은 코드의 기능을 변형시키지 않으 면서 공격자에 의해 단순히 제거될 수는 없다. 이러한 변형의 예가 도 6에 도시되어 있다.
도 6은 조건부 명령문의 삽입의 예를 개략적으로 도시한다. 특히, 도 6a는 워터마크될 원래의 소스 코드 단편의 프로그램 흐름을 도시한다. 일반적으로 참조번호(600)로 지정된 단편은, 각각 참조번호(601,610,603)로 지정된 세 개의 프로그램 명령문의 시퀀스를 포함한다. 명령문(610)은 참조번호(602)로 지정된 조건 C1과, 각각 참조번호(611,612,613,614)로 지정된 대체 명령문들 A, B, C 및 D를 포함하는 조건부 명령문이며, 조건 C1은 어떤 대체 명령문이 실행되는지를 판정한다.
도 6b는 대응하는, 워터마크될 코드 단편의 프로그램 흐름의 예를 도시한다. 이 예에서, 조건부 명령문(610)은, 본 명세서에서 설명된 바와 같이, 대체 명령문들 중 하나인 프로그램 명령문 A가 "복제"되어, 즉, 참조번호(604)로 도시된 추가의 대체 프로그램 명령문 A'가 추가되어, A'가 A와 동일한 프로그램 동작을 하되 상이한 구현을 사용하도록 변형되었다. 따라서, 프로그램 명령문 A는, "if C2 then A else A'"라 표현될 수 있는 조건부 명령문으로 대체되고, 여기서 C2(616)는 A 또는 A' 중 어느 것이 실행될 것인지를 결정하는 조건이다. 조건 C2는 워터마크에 관한 정보를 포함한다. 상술된 바와 같이, 조건은 비밀 코드 북으로부터 또는 임의의 다른 적합한 인코딩 방식에 의해 선택될 수 있다. 대체 명령문들 A 및 A'가 동일하도록, 즉, 동일한 프로그램 출력을 생성하고 전반적으로 프로그램의 동작이 동일하도록 생성되기 때문에, 조건 C2가 참인지 거짓인지 여부는 중요하지 않다.
도 6c는 대응하는, 워터마크될 코드 단편의 프로그램 흐름의 또 다른 예를 도시한다. 도 6c의 예는, 도 6b의 조건 C1과 조건 C2가 결합된 조건 C1'으로 결합되어, 공격자가 삽입된 대체 명령문 A'와 조건 C2를 제거하는 것이 어렵게 되었다는 것을 제외하고는, 도 6b의 예와 동일하다.
도 6a의 형태에 다른 제어 흐름이 도입되어, 워터마크의 삽입을 위한 적합한 위치들의 개수를 증가시킬 수 있다는 것을 유의한다. 도 7은 조건부 명령문의 삽입을 용이하게 하기 위해 컴퓨터 프로그램의 제어 흐름을 변형하는 예를 도시한다.
도 7a는 워터마크될 원래의 소스 코드의 단편의 프로그램 흐름을 도시한다. 일반적으로 참조번호(700)로 지정된 단편은, 각각 참조번호(701,710 및 703)로 지정된 세 개의 프로그램 명령문 시퀀스를 포함한다. 명령문(710)은 참조번호(722)로 지정된 조건 C1에 따라 한 번 이상 반복되는, 참조번호(711)로 지정된 명령문 A를 포함한다. 명령문 A에 이어, 코드 단편(700)은 참조번호(712 및 713)로 각각 지정된 두 개의 대체 명령문들 B 및 C와, 참조번호(723)로 지정되고 명령문 B 또는 C 중 어느 것이 실행될지를 판정하는 조건 C2를 갖는 조건부 명령문을 포함한다. 조건부 명령문에 이어, 코드 단편(700)은 참조번호(714)로 지정된 명령문 D를 포함하고, 명령문(703)이 이어진다.
도 7b는 도 7a의 제어 흐름을 변형한 결과를 도시하며, 변형된 제어 흐름은, 4개의 대체 명령문들(711,712,713,714)과 참조번호(702)로 지정된 대응하는 조건C2'를 포함한다. 조건부 명령문은 조건 C1'(733)에 따라 한 번 또는 여러 번 반복된다. 조건 C1'와 C2'가, 조건부 명령문의 반복에서, 도 7a에서의 원래의 흐름에 따라, 명령문 A만이 실행될 수 있다는 것을 보장하기 위해, 원래의 조건 C1과 C2에 기초하여 수정될 수 있다는 것을 이해할 것이다.
그 결과, 변형된 제어 흐름은 이제 도 6a에 도시된 형태의 조건부 명령문을 포함하여, 도 6과 관련하여 설명된 바와 같은 워터마크의 삽입이 가능하게 된다.
따라서, 상술된 내용에서는, 코드에 삽입된 분기문용 조건에 워터마크가 삽입된 워터마크 기술의 실시예가 개시되었다. 각각의 분기문들의 명령문들은 동일하도록 적용되어, 조건이 어떻게 평가되는지, 즉, 분기문들 중 어떤 것이 실행되는지는 중요하지 않다. 분기문들이 동일하다는 것을 알아차리지 못하게 하기 위해, 난독화될 수도 있다.
본 명세서에서 설명된 방법들은 난독화 및 코드 최적화와 같은 자동 도구에 의해 제거되기 어려운 워터마크를 생성하는 워터마킹 프로세스를 제공한다. 또한, 수작업으로 코드를 분석하고 원래의 수식을 다시 대체하기 위해서는 값 비싼 노력을 필요로 할 것이다.
일부 실시예들이 설명되고 자세히 도시되었지만, 본 발명은 이에 제한되지 않으며, 또한 이하의 청구항에 정의된 주제의 범위 내에서 다른 방식으로 또한 구현될 수 있다.
특히, 본 실시예들은 디지털 워터마크 삽입과 관련하여 주로 설명되었다. 그러나, 본 명세서에 설명된 방법이 임의의 다른 유형의 정보의 삽입에 동일하게 적용될 수 있다는 것을 이해할 것이다.
본 명세서에 설명된 방법, 제품 수단 및 장치는 여러 개의 서로 다른 구성 요소를 포함하는 하드웨어에 의해, 그리고 적합하게 프로그래밍된 마이크로프로세서에 의해 구현될 수 있다. 여러 수단을 나열하는 장치 청구항에서, 이들 여러 수단들은, 적합하게 프로그램된 마이크로프로세서, 하나 이상의 디지털 신호 프로세서 등과 같은 하나 그리고 동일한 하드웨어 아이템에 의해 구현될 수 있다. 일부 수단들이 상호 상이한 종속항들에서 언급되거나 또는 다른 실시예에서 설명된다는 사실이, 이들 수단의 조합이 이롭게 사용될 수 없다는 것을 의미하지는 않는다.
용어 "포함하다/포함하는(comprises/comprising)"이, 본 명세서에서 사용되는 경우, 언급된 특징, 정수, 단계 또는 구성 요소들의 존재를 특정하지만, 하나 이상의 다른 특징들, 정수, 단계, 구성 요소 및 그들의 그룹의 존재 또는 추가를 배제하는 것은 아니라는 것을 강조해야 한다.

Claims (15)

  1. 컴퓨터 프로그램 코드에 정보를 삽입하는 방법으로서,
    상기 컴퓨터 프로그램 코드는 복수의 프로그램 명령문들을 포함하고, 데이터 프로세싱 시스템에 의해 실행될 때, 상기 데이터 프로세싱 시스템으로 하여금 프로그램 출력을 생성하게 하도록 적응되며,
    상기 방법은 상기 컴퓨터 프로그램 코드에 조건부 프로그램 명령문(conditional program statement)을 삽입하는 단계를 포함하고,
    상기 조건부 프로그램 명령문은 하나의 조건과 복수의 대체 프로그램 명령문들을 포함하고,
    상기 조건부 프로그램 명령문은 데이터 프로세싱 시스템으로 하여금 상기 조건을 평가하고, 상기 평가 단계의 결과에 응하여, 상기 복수의 대체 프로그램 명령문들 중 하나를 선택적으로 실행하게 하도록 적응되며,
    상기 조건은 상기 정보의 적어도 일부를 나타내며,
    상기 복수의 대체 프로그램 명령문들은 상기 컴퓨터 프로그램 코드로 하여금 상기 대체 프로그램 명령문들 중 어느 것이 실행되는지에 상관없이 동일한 프로그램 출력을 생성하게 하도록 적응된 컴퓨터 프로그램 코드에 정보를 삽입하는 방법.
  2. 제1항에 있어서, 상기 복수의 대체 프로그램 명령문들 중 적어도 하나를 난독화하는(obfuscating) 단계를 더 포함하는 방법.
  3. 제1항 또는 제2항에 있어서, 상기 대체 프로그램 명령문들 각각은 하나 이상의 프로그램 객체들을 업데이트하도록 적응되고, 상기 프로그램 출력은 상기 프로그램 객체들의 하나 이상의 소정의 함수들에 의해 상기 프로그램 객체들에만 좌우되며, 상기 하나 이상의 함수들 각각은 상기 대체 프로그램 명령문들 중 어느 것이 실행되는지에 좌우되지 않는 결과를 생성하는 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 하나 이상의 코드 워드들로서 삽입될 정보를 인코딩하는 단계를 더 포함하며, 각각의 코드 워드는 하나 이상의 소정의 조건들에 대응하는 방법.
  5. 제4항에 있어서, 상기 정보를 인코딩하는 단계는, 에러 정정 코드를 이용하여 상기 정보를 인코딩하는 단계를 포함하는 방법.
  6. 컴퓨터 프로그램 코드에 삽입된 정보를 검출하는 방법으로서,
    상기 컴퓨터 프로그램 코드는 복수의 프로그램 명령문들을 포함하고, 데이터 프로세싱 시스템에 의해 실행될 때, 상기 데이터 프로세싱 시스템으로 하여금 프로그램 출력을 생성하게 하도록 적응되며,
    상기 방법은,
    적어도 하나의 조건부 프로그램 명령문을 식별하기 위해 상기 컴퓨터 프로그 램 코드를 파싱하는 단계 -상기 조건부 프로그램 명령문은 하나의 조건과 복수의 대체 프로그램 명령문들을 포함하고, 상기 조건부 프로그램 명령문은 데이터 프로세싱 시스템으로 하여금 상기 조건을 평가하고, 상기 평가 단계에서의 결과에 응하여, 상기 복수의 대체 프로그램 명령문들 중 하나를 선택적으로 실행하게 하도록 적응되고, 상기 복수의 대체 프로그램 명령문들은 상기 컴퓨터 프로그램 코드로 하여금 상기 대체 프로그램 명령문들 중 어느 것이 실행되는가에 상관없이 동일한 프로그램 출력을 생성하게 하도록 적응됨-;와
    상기 조건으로부터 상기 삽입된 정보의 적어도 일부를 추출하는 단계
    를 포함하는 컴퓨터 프로그램 코드에 삽입된 정보를 검출하는 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 정보는 디지털 워터마크를 포함하는 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서, 상기 컴퓨터 프로그램 코드는 소스 코드와 목적 코드(object code) 중 적어도 하나를 포함하는 방법.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 상기 컴퓨터 프로그램 코드를 컴퓨터의 메모리 내로 로딩하는 단계를 더 포함하는 방법.
  10. 제1항 내지 제9항 중 어느 한 항에 따르는 방법의 단계들을 수행하도록 적합 하게 구성된 데이터 프로세싱 시스템.
  11. 데이터 프로세싱 시스템에서 실행될 때, 상기 데이터 프로세싱 시스템으로 하여금 제1항 내지 제9항 중 어느 한 항에 따른 방법을 수행하게 하도록 적응된 컴퓨터 실행가능 명령어를 포함하는 컴퓨터 프로그램 제품.
  12. 제11항에 있어서, 상기 컴퓨터 실행가능 명령어가 저장된 컴퓨터 판독가능 매체를 포함하는 컴퓨터 프로그램 제품.
  13. 제11항 또는 제12항에 있어서, 상기 데이터 프로세싱 시스템으로 하여금, 소프트웨어 컴파일러에 의해 수행되는 많은 컴파일 과정들(passes) 중 하나로서, 제1항 내지 제12항 중 어느 한 항에 따른 방법을 수행하게 하도록 적응된 기능을 포함하는 소프트웨어 컴파일러를 포함하는 컴퓨터 프로그램 제품.
  14. 제1항 내지 제9항 중 어느 한 항에 따른 방법에 의해 삽입된, 삽입 정보를 포함하는 컴퓨터 프로그램.
  15. 제14항에 있어서, 상기 컴퓨터 프로그램이 저장된 컴퓨터 판독가능 매체로서 구현된 컴퓨터 프로그램.
KR1020077014127A 2004-12-22 2005-11-24 컴퓨터 프로그램 코드에 정보를 삽입하고 검출하는 방법 및이 방법을 수행하는 컴퓨터 판독가능 매체 KR20070086517A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US63885904P 2004-12-22 2004-12-22
US60/638,859 2004-12-22
EP05388097.7 2005-11-15
EP05388097A EP1674966B1 (en) 2004-12-22 2005-11-15 Watermarking computer program code

Publications (1)

Publication Number Publication Date
KR20070086517A true KR20070086517A (ko) 2007-08-27

Family

ID=35883810

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077014127A KR20070086517A (ko) 2004-12-22 2005-11-24 컴퓨터 프로그램 코드에 정보를 삽입하고 검출하는 방법 및이 방법을 수행하는 컴퓨터 판독가능 매체

Country Status (7)

Country Link
US (1) US8458476B2 (ko)
EP (1) EP1674966B1 (ko)
KR (1) KR20070086517A (ko)
CN (1) CN101084478B (ko)
AT (1) ATE425503T1 (ko)
DE (1) DE602005013178D1 (ko)
WO (1) WO2006066699A1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101048588B1 (ko) * 2009-04-13 2011-07-12 한양대학교 산학협력단 코드 제어 흐름 모호화 장치 및 방법
KR101316697B1 (ko) * 2012-02-23 2013-10-10 숭실대학교산학협력단 소프트웨어 저작권 보호 장치 및 그 방법
KR102246797B1 (ko) * 2019-11-07 2021-04-30 국방과학연구소 명령 코드 생성을 위한 장치, 방법, 컴퓨터 판독 가능한 기록 매체 및 컴퓨터 프로그램

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US8301890B2 (en) 2006-08-10 2012-10-30 Inside Secure Software execution randomization
US7613907B2 (en) 2006-08-11 2009-11-03 Atmel Corporation Embedded software camouflage against code reverse engineering
US7554865B2 (en) 2006-09-21 2009-06-30 Atmel Corporation Randomizing current consumption in memory devices
US8417948B2 (en) 2006-12-13 2013-04-09 Sony Corporation Computer scripting engine to extract and execute steganographically hidden scripts in carrier scripts
US20080209399A1 (en) * 2007-02-27 2008-08-28 Michael Bonnet Methods and systems for tracking and auditing intellectual property in packages of open source software
US7987380B2 (en) 2007-03-27 2011-07-26 Atmel Rousset S.A.S. Methods and apparatus to detect voltage class of a circuit
US9230455B2 (en) 2009-12-11 2016-01-05 Digital Immunity Llc Steganographic embedding of executable code
WO2011139302A2 (en) * 2009-12-11 2011-11-10 Probert Thomas H Steganographic messaging system using code invariants
CN103001944B (zh) * 2012-09-27 2016-04-13 深圳友讯达科技股份有限公司 微功率无线信息采集系统中的程序保护方法
CN103093155B (zh) * 2012-12-07 2016-04-27 中北大学 基于源码修改的信息隐藏方法
WO2014153679A1 (en) * 2013-03-27 2014-10-02 Irdeto B.V. Watermarking executable files
US9875515B1 (en) * 2015-12-15 2018-01-23 Amazon Technologies, Inc. Embedding debugging information via watermarks
EP3671497A1 (en) * 2018-12-18 2020-06-24 Koninklijke Philips N.V. Protected processing of operations

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU7957998A (en) * 1997-06-09 1999-01-25 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US7770016B2 (en) * 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US7757097B2 (en) * 1999-09-03 2010-07-13 Purdue Research Foundation Method and system for tamperproofing software
US7162735B2 (en) * 2000-07-18 2007-01-09 Simplex Major Sdn.Bhd Digital data protection arrangement
AU2003241297A1 (en) * 2002-04-15 2003-11-03 Core Sdi, Incorporated Security framework for protecting rights in computer software
JP2004362532A (ja) * 2002-10-25 2004-12-24 Matsushita Electric Ind Co Ltd 透かし挿入装置および透かし取出装置
US20050055312A1 (en) * 2003-08-18 2005-03-10 Wilson Kelce Steven Software control flow watermarking
NZ533028A (en) * 2004-05-19 2005-09-30 Auckland Uniservices Ltd Method of introducing digital signature into software

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101048588B1 (ko) * 2009-04-13 2011-07-12 한양대학교 산학협력단 코드 제어 흐름 모호화 장치 및 방법
KR101316697B1 (ko) * 2012-02-23 2013-10-10 숭실대학교산학협력단 소프트웨어 저작권 보호 장치 및 그 방법
KR102246797B1 (ko) * 2019-11-07 2021-04-30 국방과학연구소 명령 코드 생성을 위한 장치, 방법, 컴퓨터 판독 가능한 기록 매체 및 컴퓨터 프로그램

Also Published As

Publication number Publication date
DE602005013178D1 (de) 2009-04-23
US20090254752A1 (en) 2009-10-08
WO2006066699A1 (en) 2006-06-29
CN101084478A (zh) 2007-12-05
EP1674966A1 (en) 2006-06-28
ATE425503T1 (de) 2009-03-15
EP1674966B1 (en) 2009-03-11
US8458476B2 (en) 2013-06-04
CN101084478B (zh) 2012-02-08

Similar Documents

Publication Publication Date Title
EP1674966B1 (en) Watermarking computer program code
CA2673075C (en) Obfuscating computer program code
Stern et al. Robust object watermarking: Application to code
US8321689B2 (en) Watermarking computer code by equivalent mathematical expressions
Myles et al. Software watermarking through register allocation: Implementation, analysis, and attacks
KR101798672B1 (ko) 코드 불변식을 이용한 스테가노그래픽 메시징 시스템
Collberg et al. More on graph theoretic software watermarks: Implementation, analysis, and attacks
US7894630B2 (en) Tamper-resistant text stream watermarking
WO1999064973A1 (en) Software watermarking techniques
Thomborson et al. Tamper-proofing software watermarks
Collberg et al. Graph theoretic software watermarks: Implementation, analysis, and attacks
CN112115427A (zh) 代码混淆方法、装置、电子设备及存储介质
Hamilton et al. An evaluation of static java bytecode watermarking
US9607133B1 (en) Method and apparatus for watermarking binary computer code
Yang et al. Towards code watermarking with dual-channel transformations
Hamilton et al. An evaluation of the resilience of static java bytecode watermarks against distortive attacks
Chionis et al. A dynamic watermarking model for embedding reducible permutation graphs into software
Kumar et al. A comparative analysis of static java bytecode software watermarking algorithms
Hamilton et al. A survey of graph based software watermarking
Chionis et al. Waterrpg: a graph-based dynamic watermarking model for software protection
Pervez et al. Semblance based disseminated software watermarking algorithm
KR101810765B1 (ko) 상수 인코딩을 이용한 정적 워터마킹 방법
Wang A Constant Encoding Algorithm Which Tamper-proofs the CT-Watermark
Hamilton An Empirical Evaluation of Java Decompilation and Intellectual Property Protection via Software Watermarking
CN112513841A (zh) 用于为软件加水印的系统和方法

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid