JP2004362532A - 透かし挿入装置および透かし取出装置 - Google Patents

透かし挿入装置および透かし取出装置 Download PDF

Info

Publication number
JP2004362532A
JP2004362532A JP2003324805A JP2003324805A JP2004362532A JP 2004362532 A JP2004362532 A JP 2004362532A JP 2003324805 A JP2003324805 A JP 2003324805A JP 2003324805 A JP2003324805 A JP 2003324805A JP 2004362532 A JP2004362532 A JP 2004362532A
Authority
JP
Japan
Prior art keywords
watermark
program
information
watermark information
distribution destination
Prior art date
Legal status (The legal status 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 status listed.)
Withdrawn
Application number
JP2003324805A
Other languages
English (en)
Inventor
Yuji Sato
雄二 里
Takao Yamaguchi
孝雄 山口
Junichi Sato
潤一 佐藤
Ichiro Takei
一朗 武井
Tomoyoshi Ito
智祥 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2003324805A priority Critical patent/JP2004362532A/ja
Priority to US10/521,789 priority patent/US20050262347A1/en
Priority to EP03756709A priority patent/EP1554640B1/en
Priority to DE60320437T priority patent/DE60320437T2/de
Priority to AU2003301627A priority patent/AU2003301627A1/en
Priority to PCT/JP2003/013405 priority patent/WO2004038531A2/en
Publication of JP2004362532A publication Critical patent/JP2004362532A/ja
Withdrawn legal-status Critical Current

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/16Program or content traceability, e.g. by watermarking
    • 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/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

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

Abstract

【課題】 透かしの挿入箇所を特定されないように透かしを挿入することにより、透かし情報がなく、かつ正常に動作するプログラムを生成できないようにすること。
【解決手段】 本発明は、プログラムの配布先を一意に特定するID情報から透かし情報を生成し、前記透かし情報を前記プログラムに挿入し、前記透かし情報挿入個所周辺や前記プログラム全体を前記プログラムの仕様が変更しないように前記配布先ごとに改変し、前記透かし情報を用いたものであって、前記透かし情報が改ざんされた場合には、前記プログラムを正しく動作させないものであり、前記配布先毎に異ならないコードを前記プログラムに挿入するようにすることにより、差分攻撃により透かしであるコードが検出されないようにした。
【選択図】 図2

Description

本発明は、プログラムの不正な使用および配布を防止および抑止するためのプログラムへの透かしの挿入装置および透かし取出装置に関するものである。
コンピュータネットワークの進展に伴い、ネットワークを介したコンピュータプログラムの流通が一般的になっている。コンピュータプログラムは、容易に複製を作成できるため、プログラムの複製が不正に2次配布されたり、プログラム中のアルゴリズムを盗用、改ざんされたりする可能性がある。したがって、このような不正利用からプログラムを保護する必要がある。
従来のプログラム保護の技術の一つとして、プログラムへ電子透かしを挿入する方法が挙げられる。この方法では、配布先ごとに異なる透かし情報をプログラムに埋め込んで配布する。そして、不正利用が発生した場合に、不正利用者のプログラムから透かし情報を取り出し、透かし情報を解析する。これにより、流出元を容易に検出することが可能となる。
具体的な透かしの挿入方法としては、たとえば、特許文献1に開示されたものがある。
この方法は、まず、実行順序に依存関係のないコードを検出する。次に、検出部分にダミー変数の演算を挿入する。そして、ダミー変数の演算を含む検出部分の実行順序をランダムに入れ替える。
このような処理を行うことにより、その実行順序を電子透かし情報として配布先ごとに変更する仕組みを実現している。
特開2000−76064号公報(第3−4頁、第2図、第7図)
しかしながら、従来のプログラムへの電子透かし挿入方式は、差分攻撃に基づく透かしの改変、削除が容易であるという問題がある。
差分攻撃とは、複数の電子透かしの挿入されたプログラムの差分をとることで、透かしデータの挿入箇所を特定する攻撃法である。
従来の方式を用いて、プログラムに配布先ごとに異なる透かし情報を挿入した場合、各配布先に配布されたプログラムの間で差分をとると、透かしの挿入された個所だけが差分として浮かび上がってしまう。このように、差分攻撃で透かしの挿入位置が簡単に特定されてしまい、透かし情報の削除、改ざんが容易に可能であるという問題がある。
本発明は、かかる点に鑑みてなされたものであり、透かしの挿入箇所を特定されないように透かしを挿入することにより、透かしがなく、かつ正常に動作するプログラムを容易に生成できないようにすることを目的とする。
上記の課題を解決するための本発明は、プログラムの配布先を一意に特定するID情報から透かし情報を生成し、生成した透かし情報をプログラムに挿入し、透かし情報が改ざんされた場合にはプログラムを正しく動作させないものであり、かつ配布先に関わらず同じ透かし検証コードをプログラムに挿入するようにした。
これにより、差分攻撃により透かしである透かし検証コードが検出されないようにできる。この結果、配布先は、透かしがなく、かつ正常に動作するプログラムを生成できないので、プログラムを不正に流通させることができなくなる。
また、透かし情報を挿入したあとに、透かし挿入箇所周辺や、プログラム全体をプログラムの仕様が変更しない範囲で配布先ごとに異なるように変換するようにした。
これにより、プログラムの差分を取った際に、透かし情報以外の部分が差分として浮かび上がるため、透かし挿入箇所を容易に特定することができなくなる。
本発明の第1の態様にかかる透かし挿入装置は、プログラムの配布先ごとに異なる透かし情報を前記プログラムに挿入する透かし情報挿入手段と、前記透かし情報が改ざんされた場合には、前記プログラムを正しく動作させない透かし検証コードを前記プログラムに挿入するコード挿入手段と、を具備し、前記透かし検証コードを前記配布先に関わらず同じにしたものである。
このように透かし検証コードを配布先に関わらず同じにすることにより、差分攻撃により、透かし検証コードが差分として検出されないようにできる。これにより、差分攻撃により検出された箇所だけを改変、削除するという単純な手法では、透かし検証コードを改変、削除できなくなる。よって、配布先は、透かしがなく、かつ正常に動作するプログラムを生成できないので、プログラムを不正に流通させることができなくなる。
本発明の第2の態様は、第1の態様にかかる透かし挿入装置において、配布先を一意に決定するID情報に基づき透かし情報を生成する。
これにより、配布先が不正配布を行った際に、配布先を一意に特定することができ、プログラムの不正流通を防止できる。
本発明の第3の態様は、第1の態様または第2の態様にかかる透かし挿入装置において、前記透かし情報から所定の定数を出力する関数を定義し、前記関数を変数に代入する式を前記プログラムに挿入する関数挿入手段を具備し、前記透かし検証コードは、前記変数と前記定数が等しいかどうかを判定し、等しくない場合にはプログラムを停止する条件分岐であり、前記定数を前記配布先に関わらず同じにしている。
このような条件分布は、差分攻撃により検出されないので、差分攻撃により検出された箇所だけを改変、削除するという単純な手法では、全ての透かしを改変、削除できなくなる。よって、配布先は、透かしがなく、かつ正常に動作するプログラムを生成できないので、プログラムを不正に流通させることができなくなる。
本発明の第4の態様は、第1の態様または第2の態様にかかる透かし挿入装置において、前記透かし検証コードは、前記プログラムを正しく動作させるのに必要なものである。
これにより、差分攻撃により検出した透かし情報から透かし検証コードを検出し、透かし検証コードを削除、改変してしまうとプログラムが正常に動作しないようになる。つまり、正常に動作する透かし情報のない(もしくは改変された)プログラムを生成することを不可能にすることができるので、プログラムの不正配布を防止できる。
本発明の第5の態様は、第4の態様にかかる透かし挿入装置において、前記透かし検証コードは、前記プログラムから取り出した判定分岐に前記透かし情報から生成した前記判定分岐の判定文に影響を与えない計算式を挿入したものである。
これにより、プログラムを正しく動作させるのに必要な透かし検証コードを入力できる。
本発明の第6の態様にかかる透かし取出装置は、第1の態様から第5の態様のいずれかに記載の透かし挿入装置が前記透かし情報および前記透かし検証コードを挿入したプログラムを入力するプログラム入力手段と、前記プログラムから前記透かし情報を取り出し、前記透かし情報に基づいて配布先を一意に特定するID情報を生成する透かし検出手段と、を具備し、生成した前記ID情報に基づき前記配布先を特定するものである。
これにより、不正にプログラムを流通した配布先を特定することができる。
本発明の第7の態様にかかるプログラム不正配布防止システムは、第1の態様から第5の態様のいずれかに記載の透かし挿入装置と、第6の態様に記載の透かし取出装置と、を具備した構成を採る。
このように第1の態様から第5の態様のいずれかに記載の透かし挿入装置と、第6の態様に記載の透かし取出装置と、を具備することにより、確実にプログラムの不正配布を防止できる。
本発明の第8の態様は、第7の態様にかかるプログラム不正配布防止システムにおいて、前記透かし挿入装置を前記配布先に設けたものである。
これにより、配布先に対して容易にプログラムを配布し、配布先において透かしを挿入するようにできる。このような形態は、単純にプログラムのみを配布することが好ましいシステムに効果的である。
本発明の第9の態様は、配布先ごとに異なる透かし情報を前記プログラムに挿入するステップと、前記透かし情報を用いたものであって、前記透かし情報が改ざんされた場合には、前記プログラムを正しく動作させないものであり、前記配布先に関わらず同じ透かし検証コードを前記プログラムに挿入するステップと、を具備したことを特徴とする透かし挿入方法である。
本発明の第10の態様は、プログラムの配布先ごとに異なる透かし情報をプログラムに挿入するステップと、前記透かし情報の挿入箇所の周辺もしくは前記プログラムの全体の仕様を維持したまま変換するステップと、を有することを特徴とする透かし挿入方法である。
これにより、プログラムの差分をとったときに、透かし以外の部分が差分として検出されるため、差分攻撃に基づいて透かし挿入位置を特定することが困難になる。この結果、透かし改変、削除を確実に防ぐことができ、プログラムの不正流通を防止できる。
本発明の第11の態様は、コンピュータに、プログラムの配布先ごとに異なる透かし情報を前記プログラムに挿入するステップと、前記透かし情報を用いたものであって、前記透かし情報が改ざんされた場合には、前記配布用プログラムを正しく動作させないものであり、前記配布先に関わらず同じ透かし検証コードを前記配布用プログラムに挿入するステップと、を行わせることを特徴とする透かし挿入プログラムである。
本発明の第12の態様にかかる透かし挿入装置は、プログラムの配布先ごとに異なる透かし情報をプログラムに挿入する透かし挿入手段と、前記透かし情報を挿入する箇所以外の部分を前記プログラムの仕様を維持したまま変換する変換手段と、を具備した構成を採る。
これにより、プログラムの差分をとったときに、透かし情報以外の部分が差分として検出されるため、差分攻撃に基づいて透かし挿入位置を特定することが困難になる。この結果、透かし改変、削除を確実に防ぐことができ、プログラムの不正流通を防止できる。
本発明の第13の態様は、第12の態様にかかる透かし挿入装置において、前記変換手段は、前記透かし情報を挿入する箇所以外の部分に、仕様に影響を与えない実行コードの組を挿入する。
このように、仕様に影響を与えない実行コードの組を挿入することにより、差分攻撃が行われた際に透かし情報以外のコードが異なった箇所として検出されてしまうので、差分攻撃に基づく透かし改変、削除を確実に防ぐことができる。
本発明の第14の態様は、第12の態様または第13の態様にかかる透かし挿入装置において、前記透かし情報の挿入箇所を示す識別情報を記憶する。
これにより、識別情報を用いて透かし情報の挿入個所を容易に特定でき、透かし情報を容易に検出できる。
本発明の第15の態様は、第14の態様にかかる透かし挿入装置において、前記識別情報は、メソッド名もしくは行番号である。
これにより、識別情報により透かし情報の挿入個所を確実に検出できる。
本発明の第16の態様は、第12の態様にかかる透かし挿入装置において、前記変換手段は、前記透かし情報を挿入する箇所以外の部分に、仕様に影響を与えないように難読化処理する。
これにより、差分攻撃により透かし情報以外の部分が検出される。これにより、差分攻撃に基づいて透かし挿入位置を特定することが困難になる。
本発明の第17にかかる透かし取出装置は、第12の態様から第16の態様のいずれかに記載の透かし挿入装置が前記透かし情報を挿入したプログラムを入力するプログラム入力手段と、前記プログラムから前記透かし情報を取り出す透かし検出手段と、を具備し、取り出した前記透かし情報に基づき配布先を特定する。
これにより、プログラムの配布先を特定することができ、プログラムの不正流通を防止できる。
本発明の第18にかかる透かし取出装置は、第15の態様または第16の態様に記載の透かし挿入装置が前記透かし情報を挿入したプログラムを入力するプログラム入力手段と、前記識別情報を取得し、前記識別情報から透かし挿入箇所を特定し、特定した前記透かし挿入個所のみから前記透かし情報を取り出す透かし検出手段と、を具備し、取り出した前記透かし情報に基づき配布先を特定する。
これにより、識別情報を用いることにより、透かし情報を容易に取り出すことができ、この透かし情報からプログラムの配布先を特定することができ、プログラムの不正流通を防止できる。
本発明の第19の態様は、コンピュータに、プログラムの配布先ごとに異なる透かし情報をプログラムに挿入するステップと、前記透かし情報を挿入する箇所以外の部分を前記プログラムの仕様を変更することなく変換するステップと、行わせることを特徴とするプログラムである。
本発明の第20の態様は、第12の態様にかかる透かし挿入装置において、前記変換手段は、前記透かし情報を挿入する箇所以外の部分であって、順序を入れ替えても仕様に影響を与えない部分の順序を変換する。
これにより、差分攻撃によりプログラムの仕様に影響する部分が検出される。この結果、透かしの改変、削除を確実に防ぐことができ、プログラムの不正流通を防止できる。
本発明の第21の態様は、第20の態様にかかる透かし挿入装置において、前記仕様に影響を与えない部分を変換した履歴情報を保持し、前記履歴情報を用いて、前記仕様に影響を与えない部分の変換を配布先ごとに異なるようにする。
これにより、仕様に影響を与えない部分の順序を、配布先ごとに確実に、かつ簡単に異なるようにできる。
(実施の形態1)
本発明の実施の形態1にかかる透かし挿入装置および透かし取出装置を具備したプログラム不正配布防止システムについて添付図面を用いて説明する。
図1は、実施の形態1にかかる透かし挿入による不正配布防止システムの構成図である。
まず、配布元10は、プログラム配布の際に、透かし挿入装置20により、配布先40a、40bごとに、異なる透かしを挿入して配布する(配布先の2次配布を認めないものとする)。
このように透かしを埋め込んで配布することで、不正な2次配布などプログラムが流出した際に、配布元10は、透かし取出装置30を用いて、流出先50に流出したプログラムから透かしを取り出して配布先を確認し、流出元(配布先)40a、40bを特定することができる。
また、配布先40a、40bは、透かしによる流出元の特定を恐れて、不正な2次配布を控えることになる。
このようにして、不正配布防止システムは、透かしによる不正配布を抑止する。
次に、実施の形態1にかかる透かし挿入装置20について図2を用いて説明する。図2は、実施の形態1の透かし挿入装置の構成図である。
透かし挿入装置20には、プログラム入力部201が設けられている。プログラム入力部201は、透かしを入力するプログラムコードを入力する手段である。プログラム入力部201は、プログラムコードを透かし挿入部202に出力する。
透かし挿入部202は、ID情報生成部205により生成されるID情報からプログラムに実際に埋め込む透かしを生成し、プログラム入力部201から出力されたプログラムコードに対し、透かしを入力する手段である。また、透かし挿入部202は、プログラム入力部201が出力したプログラムコードがソースコードであれば、ソースコードをコンパイルし、透かしの入力箇所をアセンブラコードの行番号として透かし用情報記憶部206に渡す。
プログラム出力部203は、透かし挿入部202が透かしを入力したプログラムコードを出力する手段である。
透かし用データ入力部204は、透かし用データを入力する。入力する透かし用データは、配布先を一意に特定する情報であり、配布先の住所、電話番号、会社名、氏名、電子メールアドレスなどである。また、透かし用データに、配布元の情報を入力してもよい。
ID情報生成部205は、透かし用データ入力部204により入力された透かし用データから一意に決定できるID情報を生成する。ID情報は、入力したデータそのものであってもよいし、それを暗号化したデータであってもよい。また、ID情報は、透かし用データを保存するデータベース上において透かし用データを一意に特定するためのIDであってもよい。
なお、本発明の実施の形態においては、ID情報に基づいて透かし情報を生成する形態となっているが、必ずしもID情報に基づいて透かし情報を生成する必要はなく、透かし情報から一意に配布先を特定可能となっていれば良い。例えば、ソフトウェアに1〜Nシーケンス番号を透かし情報として挿入し、配布先Aにシーケンス番号iのソフトを配布、配布先Bにシーケンス番号jのソフトを配布といったように透かし情報と配布先を一意に特定可能としてもよい。
透かし用情報記憶部206は、透かし挿入部202が挿入した透かしの挿入箇所を記憶する手段である。具体的には、透かしを挿入したコードのアセンブラコード行番号を記憶する。
次に、実施の形態1にかかる透かし取出装置30について図3を用いて説明する。図3は、実施の形態1における、透かし取出装置30の構成図である。
プログラム入力部301は、透かしを挿入したプログラムを入力する手段である。
透かし検出部302は、プログラム入力部301から出力されたプログラムを逆アセンブリングし、透かし用情報記憶部305より得られる透かし挿入箇所(アセンブラコード行番号)から入力された透かしを取り出す。そして、透かし検出部302は、取り出した透かしからID情報を生成し、ID情報記憶部304に渡す。
ID情報記憶部304は、透かし検出部302より得られるID情報から、配布先の情報を生成する手段である。ID情報記憶部304は、ID情報がデータベースのデータのIDである場合には、IDからデータを取り出すことで、配布先の情報を取得する。また、ID情報記憶部304は、ID情報が配布先の情報の暗号化データである場合には、復号して配布先の情報を取得する。
透かし用情報記憶部305は、配布したプログラムの透かし挿入箇所を記憶している手段である。透かし挿入箇所の情報は、透かし挿入装置20の透かし用情報記憶部206より得る。
出力部303は、取得された配布先の情報を出力する手段である。
次に、実施の形態1にかかる透かし挿入部202の透かし挿入動作について図4を用いて説明する。図4は、実施の形態1にかかる透かし挿入部202の動作を表すフローチャートである。
まず、透かし挿入部202は、配布先40の情報から生成されるID情報Iから、実際にプログラムに挿入する透かし情報X1、X2を生成関数F(1)により生成する(ステップ401)。
続いて、透かし挿入部202は、透かし情報X1、X2を入力としたとき、定数C1を出力する関数F21および定数C2を出力する関数F22を構成する(ステップ402)。
続いて、透かし挿入部202は、透かし情報X1、X2を変数val1,val2に代入する式をプログラムコード中に埋め込む(ステップ403)。
続いて、透かし挿入部202は、プログラムコード中に、F21(val1,val2)を変数val3に、F22(val1,val2)を変数val4に代入する式を埋め込む(ステップ404)。
続いて、透かし挿入部202は、透かし検証コードである、変数val3と定数C1が等しいかどうかを判定し、等しくない場合にはプログラムを停止する条件分岐と、変数val4と定数C2が等しいかどうかを判定し、等しくない場合にはプログラムを停止する条件分岐と、をプログラムコード中に埋め込む(ステップ405)。
そして、透かし挿入部202は、ステップ403からステップ405において透かし情報および透かし検証コードを挿入した箇所を透かし用情報記憶部206に記憶する(ステップ406)。
このようにして、透かし挿入部202は、プログラムに透かしである透かし情報および透かし検証コードを挿入する。
なお、透かし挿入部202は、ステップ403からステップ405において、挿入した式および条件分岐(透かし検証コード)を、プログラムの実行順に入力する。ただし、F1は、X1、X2よりIを一意に生成するF1の逆関数を持つことを条件とし、F21、F22は、F21(X1,X2)==C1かつF22(X1,X2)==C2をX1、X2以外の時には満たさないことを条件とする(“==”は値が等しいことをあらわす。)。
たとえば、ID情報I=12345678、F1は8桁の値を4桁目から2つの値に分割する関数、F21(x,y)、F22(x,y)はax+byという2変数一次関数、C1=2345、C2=5678の場合を考える。
この場合、まず、F1から、透かし情報X1=1234、X2=5678が生成される。また、F21、F22は、a1×1234+b1×5678=2345、a2×1234+b2×5678=5678を満たすa1,a2,b1,b2を求めることにより構成する。たとえば、a1=1,a2=0.195667,a2=3.700972,b2=0.195667は条件を満たす。
次に、実施の形態1を適用した場合に生成されるプログラムの例を、図5に示す。
500aは、プログラム入力部201が入力した基本となる基本プログラムである。プログラム500b、500cは、基本プログラム500aに透かしである透かし情報および透かし検証コードを入力した透かし挿入プログラムである。
まず、透かし挿入部202は、ステップ403において、透かし挿入プログラム500b、500cに、それぞれ別のID情報Ia(12345678)、Ib(11112222)より生成された透かし情報X1a(1234)、X1b(5678)とX2a(1111)、X2b(2222)を入力する(図中501に示す部分)。
次に、透かし挿入部202は、ステップ404において、透かし挿入プログラム500b、500cに、それぞれ別のF21、F22を透かし挿入プログラム500b、500cに挿入する(図中502に示す部分)。
そして、透かし挿入部202は、ステップ405において、透かし検証コードとして、変数val3と定数C1(2345)が等しいかどうかを判定し、等しくない場合にはプログラムを停止する条件分岐(assert(0))と、変数val4と定数C2(5678)が等しいかどうかを判定し、等しくない場合にはプログラムを停止する条件分岐(assert(0))と、をプログラムコード中に埋め込む(図中503に示す部分)。
ここで、着目すべき点は、2つのプログラム500bと500cの差分をとると、透かし情報である501、502の部分は検出されるが、透かし検証コードである条件分岐503は検出されないことである。これにより、プログラム500b、500cに差分攻撃をすることにより、透かし入力箇所を検出し、検出部分の改ざん、削除を行ったとしても、透かし検証コードである条件分岐503の部分の改ざん、削除は行えない。よって、透かし検証コード503の部分が条件と合わなくなり、プログラムが動作しなくなる。
このように、差分攻撃により検出された箇所だけを改変、削除するという単純な手法では、全ての透かしを削除した正常に動作するプログラムを入手できなくさせることが可能となる。
なお、わかりやすさのため、図5ではソースコードを用いて説明しているが、バイナリコードの場合でも同じことが言える。また、図5では、条件分岐503は、条件文が真であった場合にプログラムを停止するよう処理しているが、そうでなく、プログラムが異常な動作をするように(たとえば、a++とするなど)プログラム中の変数値を変更するように処理することもできる。
さらに、実施の形態1では、ID情報から、2つの透かし情報を生成しているが、3つ以上の透かし情報を生成することとしてもよい。
次に、実施の形態1にかかる透かし検出部302の動作について図6を用いて説明する。図6は、実施の形態1の透かし検出部302の動作を表すフローチャートである。
まず、透かし検出部302は、プログラムの実行コードを逆アセンブルする(ステップ1001)。
その後、透かし検出部302は、透かし用情報記憶部305を参照し、プログラムへの透かし挿入箇所を記憶した記憶情報(挿入箇所を示すアセンブラ行番号)を取得し、これに基づいて透かし情報X1、X2の入力箇所を特定する。そして、透かし検出部302は、透かし情報X1、X2をプログラムから取り出す(ステップ1002)。
続いて、透かし検出部302は、透かし情報X1、X2を生成する際に使用した関数F1の逆関数を使用して、ID情報Iを生成する(ステップ1003)。
このようにして、透かし検出部302は、ID情報Iを取得して、配布先40の特定を行う。
なお、上記の方法では、実行コードの配布先もしくは流出先で、最適化、難読化といった処理によりコードの実行順番を入れ替えられた場合に、透かし情報の入力箇所のアセンブラ行番号が変化してしまい、透かし情報を得られない可能性がある。このような場合を考慮して、ステップ1002の処理を、挿入箇所を示すアセンブラ行番号の周辺の行において、代入命令をさがし、代入命令のオペランド部を取り出すという処理に変更してもよい。
以上説明したように、実施の形態1によれば、透かし検証コード(図5の503の部分)は、配布先に関わらず同じなので、差分攻撃により、透かし検証コード(図5の503の部分)が差分として検出されないようにできる。これにより、差分攻撃により透かし検証コードの挿入位置を検出することができない。この結果、差分攻撃により検出された箇所だけを改変、削除するという単純な手法では、全ての透かしを改変、削除できなくなり、正常に動作する透かしのない(もしくは改変された)プログラムを生成することが不可能になる。よって、配布先は、透かしがなく、かつ正常に動作するプログラムを生成できないので、プログラムを不正に流通させることができなくなる。
なお、透かし挿入装置20および透かし取出装置30の行う処理をプログラムにし、汎用のコンピュータに実行させる形態であってもよい。
(実施の形態2)
本発明の実施の形態2は、不正にプログラムを配信しようとした者が、差分攻撃により透かし情報を検出し、検出した透かし情報に用いられている関数により生成される変数を使用している箇所(図5に示す503の部分)を検出し、検出した箇所を改変、削除することにより、実施の形態1の透かし検証コードを改変、削除しようとした場合に対応したものである。
具体的には、透かし情報を用いたものであり、かつプログラムを正しく動作させるのに必要な透かし検証コードをプログラム中に挿入するようにしたものである。
これにより、上述した手順により透かし情報を用いた透かし検証コードを検出し、改変、削除した場合には、プログラムを正常に動作させなくすることができる。
以下、実施の形態2ついて詳細に説明する。実施の形態2における透かし挿入装置と、実施の形態1における透かし挿入装置20との違いは、透かし挿入部202の動作である。
次に、実施の形態2の透かし挿入部の動作について図7を用いて説明する。図7は、実施の形態2の透かし挿入部の動作のフローチャートである。
ステップ601およびステップ602の動作は、実施の形態1で説明した図4のステップ401およびステップ402の動作と同様であるので説明を省略する。
続いて、透かし挿入部は、透かし情報X1、X2より、C1+C2+C3=0となるC3を生成する関数F3を生成する(ステップ603)。
続いて、透かし挿入部は、透かし情報X1、X2を変数val1,val2に代入する式をプログラムコード中に埋め込む(ステップ604)。
続いて、透かし挿入部は、プログラムコード中に、F21(val1,val2)を変数val3に、F22(val1,val2)を変数val4に代入する式を埋め込む(ステップ605)。
続いて、透かし挿入部は、透かし検証コードとして、変数val3と定数C1が等しいかどうかを判定し、等しくない場合にはプログラムを停止する条件分岐と、変数val4と定数C2が等しいかどうかを判定し、等しくない場合にはプログラムを停止する条件分岐と、をプログラムコード中に埋め込む(ステップ606)。
続いて、透かし挿入部は、F3(val1,val2)を変数val5に代入する式を埋め込む(ステップ607)。
次に、透かし挿入部は、透かし検証コードとして、val3+val4+val5をオリジナルコードの0を判定する判定文に加算するコードをプログラム中に挿入する(ステップ608)。
そして、透かし挿入部202は、ステップ604からステップ608において透かし情報および透かし検証コードを挿入した箇所を透かし用情報記憶部206に記憶する(ステップ609)。
このようにして、透かし挿入部は、プログラムに透かしを挿入する。
ここで、着目すべき点は、ステップ608で挿入されるval3+val4+val5には、差分検出で検出される変数、val3、val4、val5が含まれている点であり、val3+val4+val5がプログラムの動作に関わる判定文の0の部分に挿入されている点である。これにより、不正使用者が、差分攻撃により変数(val3、val4、val5)を検出し、検出した変数を用いている関数により生成される変数を使用している箇所を改変、削除しようとした場合に、プログラムの動作にかかわる判定文も改変、削除してしまうことになる。よって、プログラムが正常に動作しなくなり、不正使用もできなくなる。
次に、実施の形態2にかかる透かし挿入部が生成したプログラムについて図8を用いて説明する。
800aは、プログラム入力部201が入力した基本となる基本プログラムである。プログラム800bは、基本プログラム800aに透かしを入力した透かし挿入プログラムである。
プログラム800bには、ステップ604において、701で示される部分に透かし情報が挿入され、ステップ605、ステップ607において、702で示される部分に透かし検証用の計算式(コード)が挿入される。
そして、プログラム800bには、703で示される部分に、ステップ608の処理結果が挿入される。また、プログラム800bには、ステップ606において、704で示される部分に透かし検証コードが挿入される。
このようにプログラム800bを生成することにより、不正に使用しようとした者が、差分攻撃によりプログラム800bから透かし検証コード703を検出し、透かし検証コードを改変、削除すると、透かし検証コード703は、仕様(オリジナルの祖コードにおける、プログラムの入出力関係)に関連するコードであるので、このコードを削除するとプログラムが正しく動作しなくなる。
透かしのうち、透かし検証コード703の判定文のみ変更しようとするためにはプログラムの仕様を理解して、透かし検証コード703が仕様に関連あるコードであることを知る必要がある。これは、プログラムの構造を理解した物が、時間をかけて行う必要があり、機械的な処理により透かしの削除はできない。
なお、C1+C2+F3=0でなくても良い。ただし、この場合は、C1+C2+F3により得られる値を用いた判定文にC1+C2+F3を挿入すればよい。例えば、C1+C2+F3=1である場合は、1を判定する判定文の1をC1+C2+F3を置換する。
以上説明したように、実施の形態2によれば、差分攻撃により検出した透かし情報(701、702)に用いられている関数により生成される変数を使用している箇所(図8に示す703の部分)を検出し、改変、削除した場合に、プログラムが正常に動作しないようになる。つまり、正常に動作する透かしのない(もしくは改変された)プログラムを生成することを不可能にすることができるので、プログラムの不正配布を防止できる。
(実施の形態3)
本発明の実施の形態3は、透かし情報および透かし検証コードを入力した箇所周辺のコード、もしくはコード全体を難読化などの処理をすることにより改変するものである。これにより、差分攻撃により透かし以外のコードが検出されてしまうので、差分攻撃に基づく透かし改変、削除を確実に防ぐことができる。
以下、実施の形態3について詳細に説明する。実施の形態3における透かし挿入装置と、実施の形態1における透かし挿入装置20との違いは、透かし挿入部202の動作である。
次に、実施の形態3の透かし挿入部202の動作について図9を用いて説明する。図9は、実施の形態3の透かし挿入部202の動作フローチャートである。
まず、透かし挿入部202は、変数iに初期値1を代入する(ステップ800)。次に、透かし挿入部は、ID情報をn個の情報に分割して、透かし情報X(1),X(2)…X(n)を生成する(ステップ801)。
続いて、透かし挿入部202は、プログラムソースコード中のループ部(whil,for文)を検出し(ステップ802)、ループの内部に透かし情報X(i)を挿入する(ステップ803)。
その後、透かし挿入部202は、“ループを含むプログラムを難読化する方法の提案”,(門田ら,信学論D−I, Vol.J80−D−I, No.7, pp.644−652, July 1997)に記載される方法を適用することで、挿入箇所のループ部を難読化する(ステップ804)。この際、プログラムの難読化の仕方に複数のバリエーションがあるが、バリエーションをランダム(もしくは過去に配布したプログラムに施した難読化と重ならないよう)に選択する。
そして、透かし挿入部202は、変数iが透かし情報の数n以下か判断し(ステップ805)、変数iがn以下の場合は変数iをインクリメントし(ステップ806)、ステップ802の処理に以降する。一方、ステップ805において、変数iがn以下でないと判断した場合、つまり全ての透かし情報を入力した場合は、透かし挿入部202は、その後ソースコードをコンパイルし、透かし情報が入力されたアセンブラコードの行番号を記憶してプログラムを出力し、処理を終了する(ステップ807)。
次に、実施の形態3にかかる透かし挿入部202が生成したプログラムについて図10を用いて説明する。900aは、プログラム入力部201が入力した基本となる基本プログラムである。プログラム900b、900cは、基本プログラム900aに透かし情報901を入力した透かし挿入プログラムである。
プログラム900b、900cには、難読化により、実装は異なるものの、仕様(プログラムの入出力の関係)は変化していない。プログラム900b、900cの差分をとると、透かし以外の場所もプログラムコードが変化しているため、透かし以外の部分902a、902bも差分として検出される。
したがって、プログラム900b、900cの透かしを改変、削除するためには、プログラムを解析し、どの部分がプログラムの仕様に関係のない透かしとなっているかを探し出す必要がある。プログラムの仕様に関係ない部分であるかどうかを判定するためには、プログラムの仕様を理解する必要があるため、この方法により埋め込まれた透かしを機械的に削除することは困難となる。
以上説明したように、実施の形態3は、透かし挿入部が、プログラムの透かしを挿入する箇所以外の部分に、プログラムの仕様に影響を与えないように難読化処理をする改変手段としての動作もするので、差分攻撃により透かし以外のコードであるプログラムの仕様に関係する部分が検出される。これにより、差分攻撃に基づいて透かし挿入位置を特定することが困難になる。この結果、透かし改変、削除を確実に防ぐことができ、プログラムの不正流通を防止できる。
(実施の形態4)
本発明の実施の形態4は、配布先に透かし挿入装置を保持し、配布したプログラムに対して配布先で透かしを付与するものである。
以下、実施の形態4にかかる不正配布防止システムの構成について図11を用いて説明する。図11は、実施の形態4にかかる透かし挿入による不正配布防止システムの構成図である。なお、すでに説明した部分と同一の部分には同一の符号を付与してある。
本システムでは、まず、配布元1100が、配布先1110、1120に対して、それぞれ配布先1110、1120を一意に決定するID情報1101,1102を配布する。
これに対して、配布先1110、1120の透かし挿入装置20a、20bでは、ID情報1101、1102を記憶しておく。
続いて、配布元1100は、配布先1110、1120にプログラム1103を配布する。
これに対して、配布先1110、1120では、配布されたプログラム1103に対して、透かし挿入装置20a、20bを利用して透かしを挿入したプログラム1111、1121を生成する。
なお、透かし挿入装置20a、20bは、実施の形態1から実施の形態3のいずれかにかかるものであってもよい。
その後、透かし挿入装置20a、20bは、透かしを挿入した箇所を記憶した記憶情報1104、1105を配布元1100に送信し、配布元1100では記憶情報1104、1105を保存する。
配布元1100は、配布先1110が、流出先1130に不正な2次配布を行った場合には、流出したプログラム1112を取得し、記憶情報1104、1105とともに透かし取出装置30に入力する。そして、配布元1100は、透かし取出装置30において、配布先1110、1120を特定するID情報1107を入手する。そして、配布元1100は、配布先1110、1120に配布したID情報1101、1102と、入手したID情報1107を比較し、不正にプログラムを流出した配布先1110、1120を特定する。
以上説明したように、実施の形態4によれば、不特定多数の配布先に対して容易にプログラムを配布し、配布先において透かしを挿入するようにできる。このような形態は、単純にプログラムのみを配布することが好ましいシステム、たとえばデジタル放送を利用したプログラムの配布であるとか、IPネットワークでマルチキャスト、ブロードキャストを利用したプログラム配布などに適用すると効果的である。
(実施の形態5)
本発明の実施の形態5は、透かしを挿入するメソッドやその他のメソッドが実装されている箇所に、プログラムの仕様に影響を与えない偽装コードを追加することにより、プログラムを改変するものである。これにより、差分攻撃が行われた際に透かし以外のコードが異なった箇所として検出されてしまうので、差分攻撃に基づく透かし改変、削除を確実に防ぐことができる。
次に、実施の形態5にかかる透かし挿入装置1200について図12を用いて説明する。図12は、実施の形態5の透かし挿入装置の構成図である。
実施の形態5にかかる透かし挿入装置1200のプログラム入力部201は、他の実施の形態における透かし挿入装置20のプログラム入力部201と同じ動作をする。
透かし挿入装置1200には、プログラム入力部201により出力されたプログラムの実行に影響を与えない余分なダミーメソッドを入力するダミーメソッド入力部1203が設けられている。ダミーメソッド入力部1203は、入力したダミーメソッドをダミーメソッド挿入部1201に出力する。
ダミーメソッド挿入部1201は、ダミーメソッド入力部1203で入力されたダミーメソッドを、透かしを埋め込むための領域として追加する手段である。ダミーメソッド挿入部1201は、ダミーメソッドの追加されたプログラムを偽装コード挿入部1202に出力する。
偽装コード挿入部1202は、ダミーメソッド挿入部1201から出力されたプログラム全体のメソッド(ダミーメソッドを含む全てのメソッド)が実装されている箇所に、プログラムの実行に影響を与えず、プログラムの実行結果には必要としない偽装コードの組を挿入することにより、プログラムの仕様を変更することなく改変する改変手段である。挿入する偽装コードとしては、PUSHとPOPの組などが考えられる。
透かし挿入部202、プログラム出力部203、透かし用データ入力部204、およびID情報生成部205は、他の実施の形態における透かし挿入装置20の透かし挿入部202とプログラム出力部203、透かし用データ入力部204、およびID情報生成部205と、それぞれ同じ手段である。
透かし用情報記憶部1204は、透かし挿入部202が挿入した透かしに対して、透かしとして用いた文字や数値、および記号とビット列との対応情報と、ビット列と命令コードとの対応情報を記憶する。また、透かし用情報記憶部1204は、透かしを挿入したダミーメソッドの識別情報として、メソッド名や行番号を保存する。さらに、透かし用情報記憶部1204は、透かし用データとして暗号化したデータを使用した場合には、データを復号するための鍵の情報をあわせて記憶する。
これにより、識別情報を用いて、透かしの挿入個所を容易に特定でき、透かし情報を容易に検出できる。
次に実施の形態5にかかる透かし取出装置30について説明する。実施の形態5における透かし取出装置30と、他の実施の形態における透かし取出装置30との違いは、透かし検出部302、透かし用情報記憶部305の動作である。
透かし検出部302は、プログラム入力部301から出力されたプログラム中で、透かし用情報記憶部305から得られる、透かしを挿入したメソッドの識別情報を獲得し、識別情報の表すメソッドを検査する。
次に、透かし検出部302は、同じ透かし用情報記憶部305から得られる、透かしとして用いた文字や数値、および記号とビット列との対応と、ビット列と命令コードとの対応を利用して、命令コードからビット列、ビット列から文字や数値、および記号へ変換することにより、プログラムに挿入されている透かし情報を取り出す。
透かし検出部302は、取り出した透かしからID情報を生成し、ID情報記憶部304に出力する。
透かし用情報記憶部305は、透かしの挿入されているメソッドの識別情報を保持している手段である。また、透かし用情報記憶部305は、配布したプログラムの透かしとして用いた文字や数値、および記号とビット列との対応と、ビット列と命令コードとの対応も記憶している。さらに、透かし用情報記憶部305は、挿入された透かしのデータが暗号であった場合に、暗号を復号するための鍵も保持している。透かし用情報記憶部305は、文字や数値、および記号とビット列との対応と、ビット列と命令コードとの対応、透かしの挿入されているメソッドの識別情報、暗号データを復号するための鍵は、透かし挿入装置1200の透かし用情報記憶部1204より得る。
次に、実施の形態5の偽装コード挿入部1202と透かし挿入部202の動作について図13を用いて説明する。図13は、実施の形態5の偽装コード挿入部1202と透かし挿入部202の動作フローチャートである。
まず、偽装コード挿入部1202は、変数iに初期値1を代入する(ステップ1300)。次に、透かし挿入部202は、文字や数値、および記号とビット列の対応を用いて、ID情報より透かし情報Sを生成する(ステップ1301)。
続いて、偽装コード挿入部1202は、プログラム中で、メソッドが実装されている箇所であるメソッド部を検出し(ステップ1302)、変数iがプログラム中の総メソッド数以下であるかの判断を行い(ステップ1303)、変数iが総メソッド数以下である場合には、プログラムの仕様に影響を与えない、本来は必要ではない偽装コードを挿入する(ステップ1304)。
このとき挿入する偽装コードは、複数のバリエーションがあるが、バリエーションをランダム、もしくは過去に配布したプログラムに挿入した偽装コードと重複しないように選択する。つまり、差分攻撃により、偽装コードが抽出されるように偽装コードを挿入する。
次に、透かし挿入部202は、検出されたメソッド部がダミーメソッドであるかを判断し(ステップ1305)、ダミーメソッドである場合には、“プログラムに電子透かしを挿入する一手法”、(門田ら、1998年暗号と情報セキュリティシンポジウム、SCIS’98-9.2.A, Jan. 1998)を適用することで、透かし情報Sを挿入する(ステップ1306)。
また、このとき、透かし挿入部202は、ダミーメソッドの識別情報を保存する(ステップ1307)。
そして、透かし挿入部202は、変数iをインクリメントし(ステップ1308)、ステップ1302の処理に移行する。
一方、ステップ1303において、変数iがプログラムコードの総メソッド数以下でないと判断した場合、つまり全てのメソッドに偽装コードを挿入し、そのうちのダミーメソッドに透かし情報を挿入した場合は、透かし挿入部202は、透かし情報が埋め込まれたプログラムを出力する(ステップ1309)。
実施の形態5にかかる透かし挿入部202が生成したプログラムは、偽装コードの挿入により、実装は異なるものの、仕様(プログラムの入出力の関係)は変化していない。また、それぞれのプログラムで異なる偽装コードが挿入されているため、透かしの挿入メソッドを特定するためにプログラム間の差分をとると、透かしが挿入されているメソッド以外のメソッドも差分として検出される。
したがって、プログラムの透かしを改変、削除するためには、プログラムを解析し、どのメソッドがプログラムの仕様に関係のない透かし挿入用のダミーメソッドとなっているかを探し出す必要がある。プログラムの仕様に関係ない部分であるかどうかを判定するためには、プログラムの仕様を理解する必要があるため、この方法により埋め込まれた透かしを機械的に削除することは困難となる。
次に、実施の形態5を適用した場合に生成されるプログラムの例を、図14に示す。
図中1600aで示されるプログラムは、基本となるソースプログラムである。このプログラム1600aをコンパイルしたものが、プログラム入力部201より透かし挿入装置1200に入力されるプログラムであるが、ここでは、説明の管理化のために、コンパイルしたプログラム1600aを逆アセンブルしたプログラム1600bを用いて説明を行う。
また、プログラム1600cとプログラム1600dは、それぞれ異なる透かしと偽装コードを挿入したプログラムである。またそれぞれのプログラム1600a〜1600dにおいて、A2のメソッドがダミーメソッドを表し、命令ニーモニックの前にある数字はメソッドごとの行番号を示している。
まず、透かし挿入部202は、ステップ1301において、透かし挿入プログラム1600c、1600d用に、それぞれ別のID情報I1((C)01)、I2((C)02)より、1文字6ビットで透かし情報S1(100111 001101 101000 000000 000001)、S2(100111 001101 101000 000000 000010)を生成する。
次に、偽装コード挿入部1202は、ステップ1302において、透かし挿入プログラム1600bで、メソッド部を検出し、ステップ1304においてダミーメソッドではないA1にそれぞれ異なる偽装コードを挿入する(図14中の1601で示される部分)。
さらに、透かし挿入部202は、メソッドがダミーメソッドA2の場合には、ステップ1306において、透かし挿入プログラム1600bに対して、透かし情報S1とS2から埋め込み対象の命令に割り当てられたビット数分だけ透かし情報として埋め込む。
この例では、プログラム1600bのメソッドA2内のiconst_0が埋め込み対象命令で、2ビットの情報量が割り当てられており、S1とS2から2ビットが取り出されて埋め込みが行われる(図14の1602で示される部分)。
このとき、透かし挿入部202は、各文字の下位ビットから取り出しを行い、一文字分全て取り出し終わった場合には、次の文字の下位ビットから取り出しを行う。
また、偽装コード挿入部1202は、メソッドA2に対しても、メソッドA1と同じように偽装コードの挿入も行う(図14の1603で示される部分)。
もし、プログラム1600cと1600dの配布先が結託し、透かし情報の挿入場所を特定するために、プログラム間の差分をとったとしても、透かし情報ではない1601で示される部分や1603で示される部分が、透かし情報の1602とともに検出されてしまうため、差分攻撃に基づいて透かし情報の挿入位置を特定することが困難となる。
したがって、透かし情報の機械的な改変、削除を確実に防ぐことが可能で、プログラムの不正流通を防止することができる。
次に、実施の形態5にかかる透かし検出部302の動作について図15を用いて説明する。図15は、実施の形態5の透かし検出部302の動作を表すフローチャートである。
まず、透かし検出部302は、透かし用情報記憶部305よりダミーメソッドの識別情報を獲得する(ステップ1500)。
続いて、透かし検出部302は、獲得した識別情報を用いて、プログラム中でダミーメソッドが実装されているダミーメソッド部とメソッド部を検出し(ステップ1501)、透かし用情報記憶部305に記憶しておいたビット列と命令コードの対応を用いて、ダミーメソッド部から透かし情報Sを取り出す(ステップ1502)。
さらに、透かし検出部302は、ID情報記憶部304で記憶された情報と、取り出した透かし情報Sから、プログラムの配布先を一意に特定するID情報を生成し(ステップ1503)、ID情報を出力(ステップ1504)して終了する。
このように、透かし検出部302は、識別情報を用いることにより、ダミーメソッド部とメソッド部を容易に検出し、ダミーメソッド部から透かし情報Sを取り出すことにより、プログラムの配布先を特定できる。この結果、プログラムの不正流通を防止できる。
以上説明したように、実施の形態5によれば、プログラム中に透かし情報だけでなく、仕様に影響を与えない実行コードの組である偽装コードを挿入することができる。これにより、差分攻撃が行われた際に透かし以外のコードが異なった箇所として検出されてしまうので、差分攻撃に基づく透かし改変、削除を確実に防ぐことができる。
(実施の形態6)
本発明の実施の形態6は、透かし情報の挿入箇所以外の一部もしくはプログラム全体のコードの順序を入れ替えることにより、プログラムを改変するものである。これにより、差分攻撃が行われた際に透かし以外のコードが異なった箇所として検出されるので、差分攻撃に基づく透かしの改変、削除を確実に防ぐことができる。
以下、実施の形態6について詳細に説明する。実施の形態6における透かし挿入装置と、実施の形態1における透かし挿入装置20との違いは、透かし挿入部202の動作である。
次に、実施の形態6の透かし挿入部の動作について図16を用いて説明する。図16は、実施の形態6の透かし挿入部の動作フローチャートである。
まず、透かし挿入部202は、変数iに初期値1を代入する(ステップ1601)。次に、透かし挿入部202は、コード(プログラム)中に埋め込むための(配布先ごとに異なる)透かし情報SをID情報より生成する(ステップ1602)。
続いて、透かし挿入部202は、コード全体で、順序を入れ替えても仕様に影響を与えない、つまり仕様を維持できるコード部分を抽出する(ステップ1603)。ここでコード部分とは、複数のコードからなるプログラムの一部をいう。
そして、透かし挿入部202は、変数iが、順序を入れ替えても仕様を維持できるコード部分の数N以下であるか判断し(ステップ1604)、変数iがN以下であった場合には、そのコード部分に含まれるコードの順序を入れ替え(ステップ1605)、iをインクリメントして(ステップ1606)、ステップ1604に移行する。
変数iがN以下でない場合には、透かし挿入部202は、透かし情報Sをコード中に挿入し(ステップ1607)、ソースコードをコンパイルし、透かし情報Sが挿入されたアセンブラコードの行番号を記憶してプログラムを出力し、処理を終了する(ステップ1608)。
このように、透かし挿入部202は、順序を入れ替えても仕様を維持できるコード部分の順序を入れ替えることにより、透かし情報を挿入する個所以外の部分をプログラムの仕様を維持したまま変換する。
次に、実施の形態6にかかる透かし挿入部が生成したプログラムについて図17を用いて説明する。プログラム1700aは、プログラム入力部201により入力されるオリジナルのプログラムである。また、プログラム1700b、1700cは、オリジナルプログラム1700aに配布先ごとに異なる透かし1702b、1702cを挿入したプログラムである。
また、プログラム1700b、プログラム1700cは、コード部分1701b、1701c、および1703b、1703cを含むプログラムである。コード部分1701b、1701c、および1703b、1703cは、オリジナルのプログラム1700aに含まれる透かしを挿入するコード部分でなく、かつコードを並び替えても仕様を維持できるコード部分1701a、1703aのコードの並びを変えたものである。
このように、プログラム1700b及びプログラム1700cは、プログラム1700aに対してそれぞれ異なる命令順序に変換されているが、全体の仕様は変化していない。つまり、プログラム1700b及びプログラム1700cは、プログラム1700aは、仕様を維持したまま変換されている。ここでプログラム1700b、1700cの差分をとると、透かし以外の場所もプログラムコードが変化しているため、透かし以外の部分であるコード部分1701b、1701c、1703b、1703cの部分も差分として検出される。
したがって、プログラム1700b、1700cの透かしを改変、削除するためには、プログラムを解析し、どの部分がプログラムの仕様に影響のない透かしとなっているかを探し出す必要がある。プログラムの仕様に影響のない部分であるかどうかを判定するためには、プログラムの仕様を理解する必要があるため、この方法により埋め込まれた透かしを機械的に削除することは困難となる。
以上説明したように、実施の形態6は、透かし挿入部202が、プログラムの透かしを挿入する箇所以外のプログラム部分のうち、命令順序を入れ替えても仕様を維持できるプログラム部分を検出し、プログラムの仕様に影響を与えないように、つまり仕様を維持したまま、命令順序を入れ替えても良いプログラム部分の順序変換する変換手段としての動作をする。これにより、差分攻撃により透かし以外のコードであるプログラムの仕様に影響するプログラム部分が検出される。この結果、透かしの改変、削除を確実に防ぐことができ、プログラムの不正流通を防止できる。
また、実施の形態6によれば、命令順序を入れ替えても良いプログラム部分の順序変換を、プログラム部分中の命令文の順列を求め、配布先ごとに異なるように選択された順列に従い変換する。これにより、配布先ごとに命令順序を入れ替えても良いプログラム部分の命令順序が異なるようになる。よって、命令順序を入れ替えても良いプログラム部分の特定が困難になり、確実に透かしの改変、削除を確実に防ぐことができる。
また、命令文の順列に従う変換以外の方法として、命令順序を入れ替えてもよいプログラム部分の順序をランダムに変換して、配布先ごとに異なるようにしてもよい。
なお、順序を入れ替えてもよいコード部分に含まれるコードの順序変換の履歴情報を保持しておき、この履歴情報を用いて、順序を入れ替えてもよいコード部分の変換を配布先ごとに異なるようにしても良い。
これにより、順序を入れ替えてもよいコード部分に含まれるコードの順序変換を、配布先ごとに確実に、かつ簡単に異なるようにできる。
以上説明したように、本発明によれば、透かしの挿入箇所を特定することが困難なように透かしを挿入できるので、ネットワークを利用したコンピュータプログラムの流通等に広範囲に適応できる。
本発明の実施の形態1にかかる透かし挿入による不正配布防止システムの構成図 実施の形態1の透かし挿入装置の構成図 実施の形態1における、透かし取出装置の構成図 実施の形態1にかかる透かし挿入部の動作を表すフローチャート 実施の形態1を適用した場合に生成されるプログラムを示す図 実施の形態1の透かし検出部の動作を表すフローチャート 本発明の実施の形態2にかかる透かし挿入部の動作のフローチャート 実施の形態2にかかる透かし挿入部が生成したプログラムを示す図 本発明の実施の形態3にかかる透かし挿入部の動作フローチャート 実施の形態3にかかる透かし挿入部が生成したプログラムを示す図 本発明の実施の形態4にかかる透かし挿入による不正配布防止システムの構成図 本発明の実施の形態5における透かし挿入装置の構成図 実施の形態5における偽装コード挿入部および透かし挿入部の動作のフローチャート 実施の形態5における透かし挿入部が生成したプログラムの例 実施の形態5における透かし検出部の動作のフローチャート 本発明の実施の形態6の透かし挿入部の動作フローチャート 実施の形態6にかかる透かし挿入部が生成したプログラムを示す図
符号の説明
10、1100 配布元
20、1200 透かし挿入装置
30 透かし取出装置
40a、40b、1110、1120 配布先
50、1130 流出先
201、301 プログラム入力部
202 透かし挿入部
203 プログラム出力部
204 透かし用データ入力部
205 ID情報生成部
206、305、1204 透かし用情報記憶部
302 透かし検出部
303 出力部
304 ID情報記憶部
1201 ダミーメソッド挿入部
1202 偽装コード挿入部
1203 ダミーメソッド入力部

Claims (21)

  1. プログラムの配布先ごとに異なる透かし情報を前記プログラムに挿入する透かし情報挿入手段と、前記透かし情報が改ざんされた場合には、前記プログラムを正しく動作させない透かし検証コードを前記プログラムに挿入するコード挿入手段と、を具備し、
    前記透かし検証コードを前記配布先に関わらず同じにしたことを特徴とする透かし挿入装置。
  2. 前記透かし情報を、プログラムの配布先を一意に決定するID情報から生成することを特徴とする請求項1記載の透かし挿入装置。
  3. 前記透かし情報から所定の定数を出力する関数を定義し、前記関数を変数に代入する式を前記プログラムに挿入する関数挿入手段を具備し、
    前記透かし検証コードは、前記変数と前記定数が等しいかどうかを判定し、等しくない場合にはプログラムを停止する条件分岐であり、
    前記定数を前記配布先に関わらず同じにしていることを特徴とする請求項1または請求項2記載の透かし挿入装置。
  4. 前記透かし検証コードは、前記プログラムを正しく動作させるのに必要なものであることを特徴とする請求項1または請求項2記載の透かし挿入装置。
  5. 前記透かし検証コードは、前記プログラムから取り出した判定分岐に前記透かし情報から生成した前記判定分岐の判定文に影響を与えない計算式を挿入したものであることを特徴とする請求項4記載の透かし挿入装置。
  6. 請求項1から請求項5のいずれかに記載の透かし挿入装置が前記透かし情報および前記透かし検証コードを挿入したプログラムを入力するプログラム入力手段と、前記プログラムから前記透かし情報を取り出し、前記透かし情報に基づいて前記配布先を一意に特定するID情報を生成する透かし検出手段と、を具備し、
    生成した前記ID情報に基づき配布先を特定することを特徴とする透かし取出装置。
  7. 請求項1から請求項5のいずれかに記載の透かし挿入装置と、請求項6に記載の透かし取出装置と、を具備したことを特徴とするプログラム不正配布防止システム。
  8. 前記透かし挿入装置を前記配布先に設けたことを特徴とする請求項7記載のプログラム不正配布防止システム。
  9. 配布先ごとに異なる透かし情報を前記プログラムに挿入するステップと、前記透かし情報を用いたものであって、前記透かし情報が改ざんされた場合には、前記プログラムを正しく動作させないものであり、前記配布先に関わらず同じ透かし検証コードを前記プログラムに挿入するステップと、を具備したことを特徴とする透かし挿入方法。
  10. プログラムの配布先ごとに異なる透かし情報をプログラムに挿入するステップと、前記透かし情報の挿入箇所の周辺もしくは前記プログラムの全体を、仕様を維持したまま変換するステップと、を有することを特徴とする透かし挿入方法。
  11. コンピュータに、プログラムの配布先ごとに異なる透かし情報を前記プログラムに挿入するステップと、前記透かし情報を用いたものであって、前記透かし情報が改ざんされた場合には、前記配布用プログラムを正しく動作させないものであり、前記配布先に関わらず同じ透かし検証コードを前記配布用プログラムに挿入するステップと、を行わせることを特徴とする透かし挿入プログラム。
  12. プログラムの配布先ごとに異なる透かし情報をプログラムに挿入する透かし挿入手段と、前記透かし情報を挿入する箇所以外の部分を前記プログラムの仕様を、維持したまま変換する変換手段と、を具備したことを特徴とする透かし挿入装置。
  13. 前記変換手段は、前記透かし情報を挿入する箇所以外の部分に、仕様に影響を与えない実行コードの組を挿入することを特徴とする請求項12記載の透かし挿入装置。
  14. 前記透かし情報の挿入箇所を示す識別情報を記憶することを特徴とする請求項12または請求項13に記載の透かし挿入装置。
  15. 前記識別情報は、メソッド名もしくは行番号であることを特徴とする請求項14に記載の透かし挿入装置。
  16. 前記変換手段は、前記透かし情報を挿入する箇所以外の部分に、仕様に影響を与えないように難読化処理することを特徴とする請求項12記載の透かし挿入装置。
  17. 請求項12から請求項16のいずれかに記載の透かし挿入装置が前記透かし情報を挿入したプログラムを入力するプログラム入力手段と、前記プログラムから前記透かし情報を取り出す透かし検出手段と、を具備し、
    取り出した前記透かし情報に基づき配布先を特定することを特徴とする透かし取出装置。
  18. 請求項15または請求項16に記載の透かし挿入装置が前記透かし情報を挿入したプログラムを入力するプログラム入力手段と、前記識別情報を取得し、前記識別情報から透かし挿入箇所を特定し、特定した前記透かし挿入個所のみから前記透かし情報を取り出す透かし検出手段と、を具備し、
    取り出した前記透かし情報に基づき配布先を特定することを特徴とする透かし取出装置。
  19. コンピュータに、プログラムの配布先ごとに異なる透かし情報をプログラムに挿入するステップと、前記透かし情報を挿入する箇所以外の部分を前記プログラムの仕様を変更することなく変換するステップと、行わせることを特徴とするプログラム。
  20. 前記変換手段は、前記透かし情報を挿入する箇所以外の部分であって、順序を入れ替えても仕様に影響を与えない部分の順序を変換することを特徴とする請求項12記載の透かし挿入装置。
  21. 前記仕様に影響を与えない部分を変換した履歴情報を保持し、前記履歴情報を用いて、前記仕様に影響を与えない部分の変換を配布先ごとに異なるようにすることを特徴とする請求項20記載の透かし挿入装置。
JP2003324805A 2002-10-25 2003-09-17 透かし挿入装置および透かし取出装置 Withdrawn JP2004362532A (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP2003324805A JP2004362532A (ja) 2002-10-25 2003-09-17 透かし挿入装置および透かし取出装置
US10/521,789 US20050262347A1 (en) 2002-10-25 2003-10-21 Watermark insertion apparatus and watermark extraction apparatus
EP03756709A EP1554640B1 (en) 2002-10-25 2003-10-21 Watermark insertion apparatus and watermark extraction apparatus
DE60320437T DE60320437T2 (de) 2002-10-25 2003-10-21 Vorrichtung zur einbettung und erkennung von wasserzeichen
AU2003301627A AU2003301627A1 (en) 2002-10-25 2003-10-21 Watermark insertion apparatus and watermark extraction apparatus
PCT/JP2003/013405 WO2004038531A2 (en) 2002-10-25 2003-10-21 Watermark insertion apparatus and watermark extraction apparatus

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2002311815 2002-10-25
JP2003133566 2003-05-12
JP2003324805A JP2004362532A (ja) 2002-10-25 2003-09-17 透かし挿入装置および透かし取出装置

Publications (1)

Publication Number Publication Date
JP2004362532A true JP2004362532A (ja) 2004-12-24

Family

ID=32180306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003324805A Withdrawn JP2004362532A (ja) 2002-10-25 2003-09-17 透かし挿入装置および透かし取出装置

Country Status (6)

Country Link
US (1) US20050262347A1 (ja)
EP (1) EP1554640B1 (ja)
JP (1) JP2004362532A (ja)
AU (1) AU2003301627A1 (ja)
DE (1) DE60320437T2 (ja)
WO (1) WO2004038531A2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009517972A (ja) 2005-11-29 2009-04-30 トムソン ライセンシング デジタルコンテンツを保護する方法及び装置
JP2010501923A (ja) * 2006-08-21 2010-01-21 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ デジタルコンテンツの配信制御
JP2012043322A (ja) * 2010-08-23 2012-03-01 Kddi Corp ソフトウェアの不正流用検出装置、ソフトウェアの不正流用検出方法およびプログラム
US8302188B2 (en) 2006-07-18 2012-10-30 Panasonic Corporation Instruction generation apparatus for generating a computer program resistant to unauthorized analyses and tampering

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7702125B2 (en) * 2003-02-05 2010-04-20 Digimarc Corporation Watermarking systems and methods
US20040202324A1 (en) * 2003-04-11 2004-10-14 Matsushita Electric Industrial Co., Ltd Program electronic watermark processing apparatus
GB2418498B (en) * 2004-09-23 2009-08-05 Farhan Khan Software mapping
KR100652009B1 (ko) * 2004-11-24 2006-12-01 한국전자통신연구원 핑거 프린팅 코드를 이용한 공모 구매자 식별 방법
EP1674966B1 (en) * 2004-12-22 2009-03-11 Telefonaktiebolaget L M Ericsson (Publ) Watermarking computer program code
US20080046875A1 (en) * 2006-08-16 2008-02-21 Gad Haber Program Code Identification System and Method
US8417948B2 (en) * 2006-12-13 2013-04-09 Sony Corporation Computer scripting engine to extract and execute steganographically hidden scripts in carrier scripts
JP2012084071A (ja) * 2010-10-14 2012-04-26 Toshiba Corp デジタルコンテンツの保護方法、復号方法、再生装置、記憶媒体、暗号装置
NL2006658C2 (en) * 2011-04-22 2012-10-23 Media Cowboyz B V Method and system for detecting violation of intellectual property rights of a digital file.
US9275199B2 (en) 2011-06-28 2016-03-01 Link-Busters IP B.V. Method and system for detecting violation of intellectual property rights of a digital file
US8661527B2 (en) 2011-08-31 2014-02-25 Kabushiki Kaisha Toshiba Authenticator, authenticatee and authentication method
JP5275432B2 (ja) 2011-11-11 2013-08-28 株式会社東芝 ストレージメディア、ホスト装置、メモリ装置、及びシステム
JP5275482B2 (ja) 2012-01-16 2013-08-28 株式会社東芝 ストレージメディア、ホスト装置、メモリ装置、及びシステム
US9047448B2 (en) * 2013-01-14 2015-06-02 Apple Inc. Branch auditing in a computer program
CN103714271B (zh) * 2013-09-30 2016-10-26 南通大学 一种Java软件水印植入虚方法的永假式构造方法
CN104200139B (zh) * 2014-09-12 2017-11-24 南通大学 一种Java软件水印虚方法中指令代码的生成方法
US9600672B1 (en) * 2014-12-04 2017-03-21 Amazon Technologies, Inc. Dynamic function switching
CN108700864B (zh) * 2016-01-11 2021-05-07 西门子股份公司 可编程逻辑控制器中网络攻击弹性控制的程序随机化
FR3059441B1 (fr) * 2016-11-25 2020-06-26 Institut Mines-Telecom / Telecom Bretagne Procede d'extraction de donnees d'une base de donnees tatouees selon un mecanisme de tatouage reversible.
US10534898B2 (en) 2017-01-18 2020-01-14 International Business Machines Corporation Code identification
US11269976B2 (en) * 2019-03-20 2022-03-08 Saudi Arabian Oil Company Apparatus and method for watermarking a call signal

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4625076A (en) * 1984-03-19 1986-11-25 Nippon Telegraph & Telephone Public Corporation Signed document transmission system
US5287408A (en) * 1992-08-31 1994-02-15 Autodesk, Inc. Apparatus and method for serializing and validating copies of computer software
US5559884A (en) * 1994-06-30 1996-09-24 Microsoft Corporation Method and system for generating and auditing a signature for a computer program
US5745569A (en) * 1996-01-17 1998-04-28 The Dice Company Method for stega-cipher protection of computer code
US5892899A (en) * 1996-06-13 1999-04-06 Intel Corporation Tamper resistant methods and apparatus
AU7957998A (en) * 1997-06-09 1999-01-25 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US6230268B1 (en) * 1997-09-12 2001-05-08 International Business Machines Corporation Data control system
US6330549B1 (en) * 1997-10-30 2001-12-11 Xerox Corporation Protected shareware
JP3865347B2 (ja) * 1998-09-01 2007-01-10 日立ソフトウエアエンジニアリング株式会社 プログラムへの透かしの挿入方法及びシステム
US6697948B1 (en) * 1999-05-05 2004-02-24 Michael O. Rabin Methods and apparatus for protecting information
US6898706B1 (en) * 1999-05-20 2005-05-24 Microsoft Corporation License-based cryptographic technique, particularly suited for use in a digital rights management system, for controlling access and use of bore resistant software objects in a client computer
US7770016B2 (en) * 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US7287166B1 (en) * 1999-09-03 2007-10-23 Purdue Research Foundation Guards for application in software tamperproofing
US6304972B1 (en) * 2000-01-03 2001-10-16 Massachusetts Institute Of Technology Secure software system and related techniques
US6829710B1 (en) * 2000-03-14 2004-12-07 Microsoft Corporation Technique for producing, through watermarking, highly tamper-resistant executable code and resulting “watermarked” code so formed
US7350204B2 (en) * 2000-07-24 2008-03-25 Microsoft Corporation Policies for secure software execution
US20060010430A1 (en) * 2001-05-04 2006-01-12 Thales Device and process for the signature, the marking and the authentication of computer programs
CA2350029A1 (en) * 2001-06-08 2002-12-08 Cloakware Corporation Sustainable digital watermarking via tamper-resistant software
US7581103B2 (en) * 2001-06-13 2009-08-25 Intertrust Technologies Corporation Software self-checking systems and methods
US7269740B2 (en) * 2001-08-01 2007-09-11 Sas Validy Method to protect software against unwanted use with a “variable principle”
WO2003090021A2 (en) * 2002-04-15 2003-10-30 Core Sdi, Incorporated Security framework for protecting rights in computer software
US20050055312A1 (en) * 2003-08-18 2005-03-10 Wilson Kelce Steven Software control flow watermarking

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009517972A (ja) 2005-11-29 2009-04-30 トムソン ライセンシング デジタルコンテンツを保護する方法及び装置
US8302188B2 (en) 2006-07-18 2012-10-30 Panasonic Corporation Instruction generation apparatus for generating a computer program resistant to unauthorized analyses and tampering
JP5118036B2 (ja) * 2006-07-18 2013-01-16 パナソニック株式会社 命令生成装置、命令生成方法、プログラムおよび集積回路
JP2010501923A (ja) * 2006-08-21 2010-01-21 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ デジタルコンテンツの配信制御
US9213808B2 (en) 2006-08-21 2015-12-15 Irdeto B.V. Controlling distribution of digital content
JP2012043322A (ja) * 2010-08-23 2012-03-01 Kddi Corp ソフトウェアの不正流用検出装置、ソフトウェアの不正流用検出方法およびプログラム

Also Published As

Publication number Publication date
DE60320437T2 (de) 2009-05-20
WO2004038531A2 (en) 2004-05-06
EP1554640B1 (en) 2008-04-16
WO2004038531B1 (en) 2005-02-03
AU2003301627A8 (en) 2004-05-13
AU2003301627A1 (en) 2004-05-13
DE60320437D1 (de) 2008-05-29
WO2004038531A3 (en) 2004-11-25
WO2004038531A9 (en) 2004-07-15
EP1554640A2 (en) 2005-07-20
US20050262347A1 (en) 2005-11-24

Similar Documents

Publication Publication Date Title
JP2004362532A (ja) 透かし挿入装置および透かし取出装置
EP1674966B1 (en) Watermarking computer program code
JP4770425B2 (ja) 保護済み実行プログラムの作成のためのプログラム、方法及び装置
Cousot et al. An abstract interpretation-based framework for software watermarking
US7555780B2 (en) Information security method and system
US7506167B2 (en) Technique for producing through watermarking highly tamper-resistant executable code and resulting “watermarked” code so formed
KR101798672B1 (ko) 코드 불변식을 이용한 스테가노그래픽 메시징 시스템
US7757097B2 (en) Method and system for tamperproofing software
US20040202324A1 (en) Program electronic watermark processing apparatus
US20140165210A1 (en) Software watermarking techniques
US8661559B2 (en) Software control flow watermarking
KR20070020093A (ko) 보안 모듈, 개인화 방법 및 보안 모듈 식별 방법
Dalla Preda et al. Software watermarking: a semantics-based approach
Hamilton et al. An evaluation of static java bytecode watermarking
Myles et al. Self-validating branch-based software watermarking
JP3865347B2 (ja) プログラムへの透かしの挿入方法及びシステム
Myles et al. The evaluation of two software watermarking algorithms
CN116611032A (zh) 一种jar包中嵌入和提取软件水印的方法、系统和存储介质
US20050055312A1 (en) Software control flow watermarking
Chen et al. Hidden path: dynamic software watermarking based on control flow obfuscation
Kumar et al. A comparative analysis of static java bytecode software watermarking algorithms
JP2002258961A (ja) 計算機プログラムへの副情報埋め込み方法及び装置及び計算機プログラムへの副情報埋め込みプログラム及び計算機プログラムへの副情報埋め込みプログラムを格納した記憶媒体及び計算機プログラムからの副情報読み出し方法及び装置及び計算機プログラムからの副情報読み出しプログラム及び計算機プログラムからの副情報読み出しプログラムを格納した記憶媒体
CN104462884A (zh) 软件水印的嵌入和提取方法
Pervez et al. Semblance based disseminated software watermarking algorithm
KR101747767B1 (ko) 자바 자동 식별자 리네이밍 기법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060628

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20090619