説明

プログラムコード暗号化装置及びプログラム

【課題】暗号化済みのプログラムコードの一部分を破壊して実行するという攻撃により暗号化対象のプログラムコードが復元されることを防止する。
【解決手段】暗号化部24は、暗号化対象の平文のプログラムコードを暗号化鍵により暗号化する。ハッシュ値計算部26は、暗号化済みのプログラムコードのハッシュ値を計算する。種情報生成部28は、そのハッシュ値とその暗号化鍵に対応する復号鍵とから、復号鍵に対応する種情報を計算する。配布用プログラム生成部30は、暗号化済みのプログラムコードと種情報とを含んだ配布用プログラムを生成する。配布用プログラムを受け取ったコンピュータは、その配布用プログラムを実行する際、その中に含まれる暗号化済みのプログラムコードのハッシュ値を計算し、そのハッシュ値と種情報とから復号鍵を生成し、その復号鍵を用いてそのプログラムコードを復号し、その復号結果を実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムコード暗号化装置及びプログラムに関する。
【背景技術】
【0002】
プログラムコード内に含まれる秘密を秘匿するため、または、プログラムコードを改竄されないようにするために、ハードディスクやROM(リード・オンリー・メモリ)などに保存されるプログラムコードの一部分を暗号化しておくことが行われている。この方式では、プログラムコードを起動してからその暗号化された部分を実行するまでの間にその部分を復号し、復号した部分を実行する方法がとられる。
【0003】
また、特許文献1には、ソフトウェアデバッガによる動的なソフトウェア解析を不可能にするために、各々対応する処理コードを暗号化した暗号化コードをその実行時に相互に解除する第1及び第2のプログラムで構築する方法が開示されている。
【0004】
また、特許文献2には、暗号化されたプログラムコードと、その暗号化されたプログラムコードを復号する復号ルーチンと、を含んだプログラムが開示されている。コンピュータがこのプログラムを実行する場合、まず復号ルーチンを実行することで、暗号化されたプログラムコードを復号し、その復号結果のプログラムコードを実行する。また、この文献には、プログラムのうち、復号ルーチンなどを含んだ部分のハッシュ値やチェックサム値などの情報を暗号化鍵として、暗号化対象のプログラムコードを暗号化することで、暗号化されたプログラムコードを生成することが開示されている(特に段落0121〜0123)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2001−318786号公報
【特許文献2】特開2005−165919号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明は、暗号化済みのプログラムコードの一部分を破壊又は改ざんして実行するという攻撃により暗号化対象の平文のプログラムコードが復元されることを防止することを目的とする。
【課題を解決するための手段】
【0007】
請求項1に係る発明は、暗号化対象のプログラムコードを、暗号化鍵を用いて暗号化することにより、暗号化済みコードを生成する暗号化手段と、前記暗号化済みコードを含むデータの特徴値を計算する特徴値計算手段と、前記暗号化鍵で暗号化されたプログラムコードを復号するための復号鍵と前記特徴値とに基づき、前記復号鍵を求めるための種情報を計算する種情報計算手段と、前記暗号化手段が生成した暗号化済みコードと、前記種情報計算手段が計算した前記種情報と、を含んだ配布用プログラムを生成する生成手段と、を備えるプログラムコード暗号化装置である。
【0008】
請求項2に係る発明は、前記生成手段は、前記配布用プログラムとして、当該配布用プログラムに含まれる前記暗号化済みコードを含むデータから前記特徴値を計算するための特徴値計算コードと、当該特徴値計算コードが計算した前記特徴値と、当該配布用プログラムに含まれる前記種情報と、に基づき前記復号鍵を計算するための復号鍵計算コードと、前記復号鍵計算コードが計算した前記復号鍵を用いて前記暗号化済みコードを復号するための復号コードと、を更に含むプログラムを生成する、ことを特徴とする請求項1に記載のプログラムコード暗号化装置である。
【0009】
請求項3に係る発明は、前記特徴値計算手段は、前記暗号化済みコードと、前記復号コードの少なくとも一部と、を含むデータの特徴値を計算し、前記特徴値計算コードは、前記配布用プログラムに含まれる前記暗号化済みコードと、前記特徴値計算コード、前記復号鍵計算コード又は前記復号コードのうちの少なくとも一部と、を含むデータの特徴値を計算するためのコードである、ことを特徴とする請求項1又は2に記載のプログラムコード暗号化装置である。
【0010】
請求項4に係る発明は、コンピュータを、暗号化対象のプログラムコードを、暗号化鍵を用いて暗号化することにより、暗号化済みコードを生成する暗号化手段、前記暗号化済みコードを含むデータの特徴値を計算する特徴値計算手段、前記暗号化鍵で暗号化されたプログラムコードを復号するための復号鍵と前記特徴値とに基づき、前記復号鍵を求めるための種情報を計算する種情報計算手段、前記暗号化手段が生成した暗号化済みコードと、前記種情報計算手段が計算した前記種情報と、を含んだ配布用プログラムを生成する生成手段、として機能させるためのプログラムである。
【0011】
請求項5に係る発明は、平文プログラムコードを暗号化鍵により暗号化した結果である暗号化済みコードと、前記暗号化鍵に対応する復号鍵の計算のために用いられる種情報と、前記暗号化済みコードから特徴値を計算する処理をコンピュータに実行させるための特徴値計算コードと、前記特徴値計算コードの実行により計算された特徴値と前記種情報とに基づき復号鍵を計算する処理を前記コンピュータに実行させるための復号鍵計算コードと、前記復号鍵計算コードにより計算された前記復号鍵と前記暗号化に対応する復号演算とにより、前記暗号化済みコード復号する処理、を前記コンピュータに実行させるための復号コードと、を備え、前記復号コードの実行による前記暗号化済みコードの復号結果が前記コンピュータにより実行されるようにしたプログラムである。
【発明の効果】
【0012】
請求項1、4又は5に係る発明によれば、暗号化済みのプログラムコードの一部分を破壊又は改ざんして実行するという攻撃により暗号化対象の平文のプログラムコードが復元されることを防止することができる。
【0013】
請求項2に係る発明によれば、配布先のコンピュータが、特徴値計算コード、復号鍵計算コード又は復号コードを有していない場合でも、実行可能な配布用プログラムを作成することができる。
【0014】
請求項3に係る発明によれば、特徴値計算コード、復号鍵計算コード又は復号コードのうちの一部が改ざんされた場合でも、平文のプログラムコードが復元されるのを防止することができる。
【図面の簡単な説明】
【0015】
【図1】従来のブロック暗号又はストリーム暗号方式では平文のプログラムコードが解読される可能性があることを説明するための図である。
【図2】実施形態のプログラムコード暗号化装置の一例を示す図である。
【図3】種情報の計算方式を説明するための図である。
【図4】配布用プログラムのデータ構造の一例を示す図である。
【図5】種情報から復号鍵を計算する方式を説明するための図である。
【発明を実施するための形態】
【0016】
一般に、暗号化のアルゴリズムは、様々な大きさのデータを対象とするため、その設計および実装のしやすさから、ブロック暗号や、ストリーム暗号が用いられることが多い。しかしコードを暗号化して保護していても、暗号化して保護されたプログラムコードの一部を破壊しておき実行すると、ブロック暗号では破壊したブロックだけについて、ストリーム暗号では破壊したビットだけについては復号が失敗するが、その他の部分については復号が成功してしまう。
【0017】
例えば、ブロック暗号方式のCBC(Cipher Block Chaining)モードでは、暗号化されたコード10の一部を意図的に破壊した場合(図1の(a))、破壊されたブロック12とその次に復号されるブロックは正しく復号できないが、復号の進む方向に関して破壊されたブロックの前のブロック群14や、後ろのブロック群16は正しい平文が復号されてしまう(図1の(b))。これは、CBCモードでは、周知のように、復号対象の暗号文ブロックが、当該ブロックとその次のブロックにしか影響を与えないためである。
【0018】
このように部分的に復号が失敗した復号結果のコードを実行した場合、正しく復号されたブロック群14が正しく実行された後、破壊された部分12の所でプログラムが暴走し、一時停止する。この一時停止したときにメモリを見ると、復号されたコードが、破壊された部分12を除いて、読むことが可能である(図1の(c))。このような処理を、破壊する場所を変化させて複数回行うと、正しい平文のコードをすべて取得することも可能である。
【0019】
なお、以上の流れにおけるプログラムの暴走と一時停止は、オペレーティングシステムの機能によるものである。したがって、上述の性質を用いた攻撃は、デバッガ検出技術を用いてデバッガ上でのプログラム実行を阻止する構成をとったとしても、阻止し得ない。
【0020】
このような攻撃に対し、この実施形態では、暗号化されたプログラムコード(暗号化済みコードと呼ぶ)の特徴を表す特徴値を用いる。より詳しくは、その特徴値をその暗号化済みコードの復号のための復号鍵に作用させることで、復号鍵の元になる種情報を計算し、計算結果の種情報を暗号化済みコードと対応づけて、ユーザに配布する。
【0021】
暗号化済みコードの特徴値としては、暗号化済みコードを改ざんすると値が変化するものを用いる。例えば、ハッシュ値やチェックサム値などがその代表例である。以下では、特徴値としてハッシュ値を計算する場合を代表例にとって説明するが、他の種類の特徴値を用いてももちろんよい。
【0022】
暗号化済みコードと種情報の配布を受けたユーザのコンピュータがその暗号化済みコードを実行する場合、暗号化済みコードから特徴値を計算する。そして、その特徴値と種情報から復号鍵を計算し、その復号鍵により暗号化済みコードを復号し、復号により得られる平文のプログラムコードを実行する。ここで、仮に暗号化済みコードに対し、一部の破壊や、デバッグ解析のためのコード追加などといった改ざんが加えられると、計算される特徴値が本来の値から変化するため、特徴値と種情報から計算される復号鍵が誤ったものになり、その復号鍵による暗号化済みコードの復号結果は、元の平文のプログラムコードとはまったく異なったものとなる。
【0023】
このような原理に従ったプログラムコード暗号化装置の一例を図2に示す。この装置は、対象プログラム入力部20、暗号化鍵生成部22、暗号化部24、ハッシュ値計算部26、種情報生成部28及び配布用プログラム生成部30を備える。
【0024】
対象プログラム入力部20は、ユーザ(プログラムを配布しようとする者)から、配布対象、すなわち暗号化対象の平文のプログラムコードの入力を受け付ける。
【0025】
暗号化鍵生成部22は、その平文のプログラムコードを暗号化するための暗号化鍵を、例えば乱数などに基づき公知の演算により生成する。非対称暗号方式(暗号化と復号にそれぞれ異なる鍵情報を用いる方式。例えば公開鍵暗号方式)を用いる場合、暗号化鍵生成部22は、生成した暗号化鍵に対応する復号鍵も合わせて生成する。対象暗号方式を用いる場合には、生成された暗号化鍵が復号鍵としても機能する。なお、あらかじめ定めた固定的な暗号化鍵を用いる方式を採用する場合には、暗号化鍵生成部22はなくてもよい。
【0026】
暗号化部24は、暗号化鍵生成部22が生成した暗号化鍵(あるいはあらかじめ定められた固定の暗号化鍵)を用いて、平文のプログラムコードを暗号化する。そして、暗号化部24は、平文プログラムコードの暗号化結果である、暗号化済みコードを出力する。暗号化部24が用いる暗号アルゴリズム、暗号化処理方式などは、特に限定されるものではなく、従来公知の、或いはこれから開発されるどの暗号アルゴリズム、暗号化処理方式を用いてもよい。
【0027】
ハッシュ値計算部26は、暗号化済みコードのハッシュ値を計算する。ハッシュ値計算部26がハッシュ値の計算に用いる演算アルゴリズム又はハッシュ関数は、特に限定されるものではなく、MD5やSHA-1、SHA-2等といった公知のもの、あるいはこれから開発される関数等、どのようなものを用いてもよい。
【0028】
種情報生成部28は、暗号化部24が暗号化対象の平文プログラムコードの暗号化に用いた暗号化鍵に対応する復号鍵(例えば、暗号化鍵生成部22が生成したもの)と、ハッシュ値計算部26が計算した暗号化済みコードのハッシュ値と、を用いて、復号鍵の元になる種情報を計算する。すなわち、種情報生成部28は、復号鍵のデータと暗号化済みコードのハッシュ値とを2つの入力データとし、それら2つの入力データに対してあらかじめ定められた演算処理(第1の演算とよぶ)を行うことで、種情報を生成する。種情報は、復号鍵とは異なるデータであり、且つ、暗号化済みコードのハッシュ値と組み合わせることで復号鍵を計算することができるデータである。種情報の算出に用いる第1の演算は、暗号化済みコードのハッシュ値と種情報とに対して、その第1の演算との間であらかじめ定められた関係のある第2の演算を行うと、その暗号化済みコードの復号のための復号鍵が算出される演算である。そして、第1の演算としては、衝突困難性を持つ演算、すなわち、復号鍵の値が同じであってもハッシュ値が変われば算出する種情報の値が必ず変化する演算を用いる。なお、ここでいう「必ず変化する」とは、厳密に必ず変化することを意味するものではなく、ハッシュ関数の場合と同様、実用的にみて必ず変化すると見なせるという意味である。ここで、第2の演算は、例えば、第1の演算の逆演算である。すなわちこの場合、第1の演算は、ハッシュ値と種情報に対して当該第1の演算の逆演算を施すと復号鍵が算出される、という条件を満たす演算である。
【0029】
種情報を求めるための前述の第1の演算としては、例えばビットごとの排他的論理和(XOR)演算を用いることができる。この場合、復号鍵を求めるための前述の第2の演算もまた、ビットごとの排他的論理和演算である。また、第1の演算として、ハッシュ値を復号鍵で暗号化する暗号化演算を用いてもよい。この場合、復号鍵を求めるための第2の演算は、ハッシュ値を種情報により復号する演算であり、この演算はその暗号化演算に対応する演算内容である。なお、第1の演算は、以上に例示したものに限られるものではなく、上述の条件を満たすものであれば、どのようなものを用いてもよい。
【0030】
配布用プログラム生成部30は、暗号化済みコードと、復号鍵に対応する種情報と、を含んだ配布用プログラムを生成する。生成された配布用プログラムは、様々な配布先ユーザに配布され、それら配布先で実行される。
【0031】
次に、図3を参照して、このプログラムコード暗号化装置での種情報の生成方式を説明する。この例は、暗号化部24で対称暗号方式のアルゴリズムを用いる場合の例である。この例では、暗号化部24が、平文である暗号化対象のプログラムコード40を、暗号化鍵42を用いて暗号化することで、暗号化済みコード44を生成する。ハッシュ値計算部26は、この暗号化済みコード44のハッシュ値46を計算する。種情報生成部28は、次の演算により種情報48を計算する。
【0032】
(種情報) = (暗号化鍵) operator (ハッシュ値)
【0033】
ここで、「operator」は、第1の演算を表す演算子である。なお、この例では、暗号化鍵自体が、暗号化済みコードを復号するための復号鍵として機能する。非対称暗号方式を用いる場合は、暗号化鍵の代わりに、その暗号化鍵に対応する復号鍵とハッシュ値とから、第1の演算により種情報48を計算すればよい。
【0034】
なお、第1の演算は、上に例示したような1つの演算子で表されるものに限らない。暗号化鍵(=復号鍵)とハッシュ値とを入力とする他の関数であってもよい。
【0035】
次に、図4を参照して、配布用プログラム生成部30が生成する配布用プログラムファイル100の一例を説明する。
【0036】
配布用プログラムファイル100は、例えばオブジェクトファイル形式のファイルであり、オブジェクトヘッダ110、コードセクション120及びデータセクション130を含んでいる。
【0037】
オブジェクトヘッダ110は、当該プログラムファイル100のヘッダ情報を記述したセクションである。また、コードセクション120は、コンピュータが実行するプログラムコードが含まれるセクションである。このセクションは、書き込み、読み出し及び実行が可能なセクションである。暗号化済みコード127もコードセクション120に含まれる。データセクション130は、コードセクション120に含まれる復号等のためのコードの実行において用いられる種情報48などのデータが含まれるセクションである。
【0038】
この例において、データセクション130には、コードセクション120内で暗号化済コード127が含まれる範囲を示す暗号化範囲情報と、暗号化済みコード127のハッシュ値を計算するために用いるハッシュ用初期ベクタと、復号処理に用いる暗号用初期ベクタと、種情報生成部28が生成した種情報48と、パディング情報とを含んでいる。暗号用初期ベクタは、暗号化部24がブロック暗号又はストリーム暗号の暗号利用モードを用いて平文プログラムコードを暗号化した際に用いた初期ベクタである。ハッシュ用初期ベクタは、ブロック暗号又はストリーム暗号の仕組みを用いてハッシュ値を演算する場合に用いる初期ベクタである。初期ベクタが不要なハッシュ値算出方式を用いる場合、ハッシュ用初期ベクタは不要である。パディング情報は、暗号化やハッシュ値計算にブロック暗号方式を用いる場合に、暗号化対象の平文のプログラムコードのデータサイズをブロックのサイズの整数倍にするために追加するダミーデータである。暗号化範囲情報、ハッシュ用初期ベクタ、暗号用初期ベクタ、及びパディング情報は、暗号化部24及びハッシュ値計算部26から取得すればよい。
【0039】
コードセクション120は、復号範囲取得コード121、ハッシュ用初期ベクタ取得コード122、ハッシュ計算コード123、復号鍵生成コード124、暗号用初期ベクタ取得コード125、復号コード126、及び暗号化済みコード127を含んでいる。
【0040】
復号範囲取得コード121は、コードセクション120から、復号すべき範囲を特定する情報、すなわち暗号化範囲情報、を取得するための処理を表すプログラムコードである。ハッシュ用初期ベクタ取得コード122は、コードセクション120からハッシュ用初期ベクタを取得するための処理を表すプログラムコードである。
【0041】
ハッシュ計算コード123は、復号範囲取得コード121の実行により取得された情報が示す範囲のデータ、すなわち暗号化済みコード127、のハッシュ値を計算するための処理を表すプログラムコードである。ハッシュ計算コード123が表すハッシュ計算処理は、ハッシュ値計算部26が行う計算と同じものである。なお、この例では、ハッシュ計算コード123は、そのハッシュ値の計算の初期ベクタとして、ハッシュ用初期ベクタ取得コードの実行により取得されたハッシュ用初期ベクタを用いる。
【0042】
復号鍵生成コード124は、データセクション130内の種情報と、ハッシュ計算コード123の実行により計算されるハッシュ値と、に対して、前述の第2の演算(例えば種情報生成部28が実行する演算の逆演算)を行うという処理を表すプログラムコードである。コンピュータが復号鍵生成コード124を実行することにより、暗号化済みコード127の復号のための復号鍵が求められる。
【0043】
暗号用初期ベクタ取得コード125は、データセクション130から、暗号用初期ベクタを取得するための処理を表すプログラムコードである。復号コード126は、復号範囲取得コード121の実行により取得された情報が示す範囲のデータ、すなわち暗号化済みコード127を復号するための処理を表すプログラムコードである。復号コード126は、復号鍵生成コード124の実行により求められた復号鍵を用いて、暗号化済みコード127を復号する。復号コード126で用いられる復号アルゴリズムは、暗号化部24の暗号化アルゴリズムに対応するものである。
【0044】
コードセクション120のうち、暗号化済みコード127の領域には、暗号化部24による暗号化の前、及び、復号コード126の実行による復号の後は、元の平文のプログラムコードが置かれることになる。
【0045】
一例として、プログラム作成者は、コードセクション120のプログラムコード群を表すソースコードを作成し、それをコンパイラによりコンパイルする。これにより、領域127に暗号化対称の平文のプログラムコードを含んだオブジェクトコードが得られる。この時点では、データセクション130のうち、ハッシュ用初期ベクタ、暗号用初期ベクタ、種情報、パディング情報は未定である。このコンパイル結果のオブジェクトコードを、この実施形態の暗号化装置に入力すると、暗号化部24がそのオブジェクトコードのうち、暗号化範囲情報が示す範囲にある平文コードを暗号化する。これにより暗号化済みコード127が生成される。そして、暗号化部24、ハッシュ値計算部26、及び種情報生成部28により、ハッシュ用初期ベクタ、暗号用初期ベクタ、種情報、パディング情報の値が決定され、データセクション130に書き込まれる。このような処理により、図4に例示した配布用プログラムファイル100が完成する。この配布用プログラムが、配布先の各ユーザに配布される。
【0046】
配布先ユーザのコンピュータでこの配布用プログラムファイル100が呼び出されると、そのファイル100がそのコンピュータのメインメモリ上にロードされる。コンピュータは、メインメモリ上にロードされたコードセクション120に含まれる各コード121〜127をその並び順に従って先頭から順番に実行していく。この実行の流れを、図5も更に参照して説明する。
【0047】
すなわち、コンピュータは、まず復号範囲取得コード121を実行して、データセクション130の暗号化範囲情報に基づきコードセクション120中で復号すべき範囲を特定する。次に、ハッシュ用初期ベクタ取得コード122を実行してハッシュ用初期ベクタを取得し、更にハッシュ計算コード123を実行して、ハッシュ用初期ベクタを用いて、復号すべき範囲にある暗号化済みコード127(図5では暗号化済みのプログラムコード44)のハッシュ値46を計算する。次に、復号鍵生成コード124を実行して、そのハッシュ値46と、データセクション130内の種情報48とから、復号鍵42を計算する。この計算は、例えば、以下のようなものである。
【0048】
(復号鍵) = (ハッシュ値) 逆operator (種情報)
【0049】
ここで、「逆operator」は、種情報の計算に用いた前述の演算「operator」の逆演算である。対称暗号方式を用いている場合、計算される復号鍵は、暗号化鍵と等しい。なお、この復号鍵算出のための演算は、上に例示したような1つの演算子で表されるものに限らない。種情報とハッシュ値とを入力とする他の関数であってもよい。
【0050】
次に、暗号用初期ベクタ取得コード125を実行してデータセクション130から暗号用初期ベクタを取得し、更に復号コード126を実行して、暗号化済みコード127を、その復号鍵42により復号する。復号結果である平文のプログラムコード40は、メインメモリ上の、暗号化済みコード127の領域に上書きされる。この復号処理の後、コンピュータは、その平文プログラムコード40を実行する。
【0051】
なお、配布用プログラムファイル100には、復号結果の平文のプログラムコードの実行完了後、その平文のプログラムコードをメモリから削除する処理を指示するコードが含まれていてもよい。
【0052】
また、以上では、ブロック暗号方式を例にとって説明したが、ストリーム暗号方式に同様の方式を適用してもよい。ブロック暗号方式では、暗号化の単位がブロックであったが、ストリーム暗号方式では暗号化の単位がビット又はバイトになる。
【0053】
攻撃者が、以上に説明した配布用プログラムファイル100の中の暗号化済みコード127の一部を破壊又は改ざんした場合、そのプログラムファイル100を実行すると、計算されるハッシュ値46が正しい値とは異なった値となる。このように誤ったハッシュ値と、種情報48と、を用いて復号鍵を計算すると、計算結果の復号鍵も誤ったものとなる。そして、誤った復号鍵を用いて暗号化済みコード127を復号すると、その復号の結果は元の平文のプログラムコードとはまったく異なったものとなり、元の平文プログラムコードは一部たりとも再現されない。コンピュータが、その誤った復号結果を実行しようとしても、実行することはできない。
【0054】
暗号化済みコードの保護のためにハッシュを利用する場合、一般的には、暗号化済みコードとそのハッシュ値とを配布用プログラムに含めることが考えられる。この場合、配布先のコンピュータが配布用プログラムを実行する際、その中に含まれる暗号化済みコードのハッシュ値を計算し、その計算結果が配布用プログラム内のハッシュ値に一致するか否かにより、改ざんの有無を確認する。そして、改ざんがない場合にのみ、暗号化済みコードの復号及び実行の処理に進むことになる。このように、一般的なハッシュの利用の仕方では、ハッシュにより改ざんの有無を確認し、改ざんがない場合に復号に進むという条件分岐を含んだ制御用のプログラムが、配布用プログラム中に含まれることになる。このような条件分岐を含むプログラムの場合、暗号化済みコードに対して一部破壊などの改ざんを行った場合でも、コード解析により条件分岐のコード部分を特定して削除してしまうことにより、その改ざん後の暗号化済みコードを復号して実行することができてしまう。
【0055】
これに対し、この実施形態の方式では、配布用プログラムファイル100のコードセクション120内の復号処理のためのプログラムコード群121〜126には、そのような条件分岐は含まれない。したがって、条件分岐を削除するという攻撃は通用しない。
【0056】
以上の例では、種情報48の計算のために、暗号化済みコード127(図5では符号144)のハッシュ値を用いたが、これは一例に過ぎない。この代わりに、暗号化済みコード127と、復号処理のためのプログラムコード群121〜126のうちのあらかじめ定めた一部とを含んだ範囲のコードのハッシュ値を計算し、そのハッシュ値と復号鍵とから種情報48を計算するようにしてもよい。この場合、暗号化済みコード127、又は復号処理のためのプログラムコード群121〜126のうちハッシュ値の計算の範囲に含まれる部分に改ざんがなされると、復号鍵の計算結果が誤ったものとなり、暗号化済みコード127が正しく復号できなくなる。なお、この場合、配布用プログラムファイル100のデータセクション130には、ハッシュ値の計算範囲を示す情報を含めておけばよい。
【0057】
また、復号処理のためのコード群121〜126があらかじめ配布先のコンピュータに存在することが想定できる場合には、配布用プログラムファイル100には、それらコードを呼び出すためのプログラムが含まれていれば足りる。
【0058】
以上に例示したプログラムコード暗号化装置は、一つの例では、汎用のコンピュータに上述の処理を表すプログラムを実行させることにより実現される。ここで、コンピュータは、例えば、ハードウエアとして、CPU等のマイクロプロセッサ、ランダムアクセスメモリ(RAM)およびリード・オンリー・メモリ(ROM)等のメモリ(一次記憶)、HDD(ハードディスクドライブ)コントローラを経由して接続されたHDD、各種I/O(入出力)インタフェース等が、バスを介して接続された回路構成を有する。バスには、ローカルエリアネットワーク等のネットワークに接続するためのネットワークインタフェースが接続されていてもよい。また、そのバスに対し、例えばI/Oインタフェース経由で、CDやDVDなどの可搬型ディスク記録媒体に対する読み取り及び/又は書き込みのためのディスクドライブ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び/又は書き込みのためのメモリリーダライタなどが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがCDやDVD等の記録媒体を経由して、又はネットワーク等の通信手段経由で、ハードディスクドライブ等の固定記憶装置に保存され、コンピュータにインストールされる。インストールされたプログラムがRAMに読み出されCPU等のマイクロプロセッサにより実行されることにより、上に例示した装置の機能が実現される。
【符号の説明】
【0059】
20 対象プログラム入力部、22 暗号化鍵生成部、24 暗号化部、26 ハッシュ値計算部、28 種情報生成部、30 配布用プログラム生成部。

【特許請求の範囲】
【請求項1】
暗号化対象のプログラムコードを、暗号化鍵を用いて暗号化することにより、暗号化済みコードを生成する暗号化手段と、
前記暗号化済みコードを含むデータの特徴値を計算する特徴値計算手段と、
前記暗号化鍵で暗号化されたプログラムコードを復号するための復号鍵と前記特徴値とに基づき、前記復号鍵を求めるための種情報を計算する種情報計算手段と、
前記暗号化手段が生成した暗号化済みコードと、前記種情報計算手段が計算した前記種情報と、を含んだ配布用プログラムを生成する生成手段と、
を備えるプログラムコード暗号化装置。
【請求項2】
前記生成手段は、前記配布用プログラムとして、当該配布用プログラムに含まれる前記暗号化済みコードを含むデータから前記特徴値を計算するための特徴値計算コードと、当該特徴値計算コードが計算した前記特徴値と、当該配布用プログラムに含まれる前記種情報と、に基づき前記復号鍵を計算するための復号鍵計算コードと、前記復号鍵計算コードが計算した前記復号鍵を用いて前記暗号化済みコードを復号するための復号コードと、を更に含むプログラムを生成する、ことを特徴とする請求項1に記載のプログラムコード暗号化装置。
【請求項3】
前記特徴値計算手段は、前記暗号化済みコードと、前記復号コードの少なくとも一部と、を含むデータの特徴値を計算し、
前記特徴値計算コードは、前記配布用プログラムに含まれる前記暗号化済みコードと前記復号コードの少なくとも一部とを含むデータの特徴値を計算するためのコードである、
ことを特徴とする請求項1又は2に記載のプログラムコード暗号化装置。
【請求項4】
コンピュータを、
暗号化対象のプログラムコードを、暗号化鍵を用いて暗号化することにより、暗号化済みコードを生成する暗号化手段、
前記暗号化済みコードを含むデータの特徴値を計算する特徴値計算手段、
前記暗号化鍵で暗号化されたプログラムコードを復号するための復号鍵と前記特徴値とに基づき、前記復号鍵を求めるための種情報を計算する種情報計算手段、
前記暗号化手段が生成した暗号化済みコードと、前記種情報計算手段が計算した前記種情報と、を含んだ配布用プログラムを生成する生成手段、
として機能させるためのプログラム。
【請求項5】
平文プログラムコードを暗号化鍵により暗号化した結果である暗号化済みコードと、
前記暗号化鍵に対応する復号鍵の計算のために用いられる種情報と、
前記暗号化済みコードから特徴値を計算する処理をコンピュータに実行させるための特徴値計算コードと、
前記特徴値計算コードの実行により計算された特徴値と前記種情報とに基づき復号鍵を計算する処理を前記コンピュータに実行させるための復号鍵計算コードと、
前記復号鍵計算コードにより計算された前記復号鍵と前記暗号化に対応する復号演算とにより、前記暗号化済みコード復号する処理、を前記コンピュータに実行させるための復号コードと、
を備え、前記復号コードの実行による前記暗号化済みコードの復号結果が前記コンピュータにより実行されるようにしたプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2011−123229(P2011−123229A)
【公開日】平成23年6月23日(2011.6.23)
【国際特許分類】
【出願番号】特願2009−280146(P2009−280146)
【出願日】平成21年12月10日(2009.12.10)
【出願人】(000005496)富士ゼロックス株式会社 (21,908)
【Fターム(参考)】