JP2011123229A - プログラムコード暗号化装置及びプログラム - Google Patents

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

Info

Publication number
JP2011123229A
JP2011123229A JP2009280146A JP2009280146A JP2011123229A JP 2011123229 A JP2011123229 A JP 2011123229A JP 2009280146 A JP2009280146 A JP 2009280146A JP 2009280146 A JP2009280146 A JP 2009280146A JP 2011123229 A JP2011123229 A JP 2011123229A
Authority
JP
Japan
Prior art keywords
code
program
encrypted
encryption
decryption
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.)
Pending
Application number
JP2009280146A
Other languages
English (en)
Inventor
Mitsuhisa Kamei
光久 亀井
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.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox 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 Fuji Xerox Co Ltd filed Critical Fuji Xerox Co Ltd
Priority to JP2009280146A priority Critical patent/JP2011123229A/ja
Publication of JP2011123229A publication Critical patent/JP2011123229A/ja
Pending legal-status Critical Current

Links

Images

Abstract

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

Description

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

Claims (5)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009280146A JP2011123229A (ja) 2009-12-10 2009-12-10 プログラムコード暗号化装置及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009280146A JP2011123229A (ja) 2009-12-10 2009-12-10 プログラムコード暗号化装置及びプログラム

Publications (1)

Publication Number Publication Date
JP2011123229A true JP2011123229A (ja) 2011-06-23

Family

ID=44287178

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009280146A Pending JP2011123229A (ja) 2009-12-10 2009-12-10 プログラムコード暗号化装置及びプログラム

Country Status (1)

Country Link
JP (1) JP2011123229A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015185071A (ja) * 2014-03-26 2015-10-22 日本電信電話株式会社 情報追跡システム及び情報追跡方法
CN108390759A (zh) * 2018-03-21 2018-08-10 平安普惠企业管理有限公司 代码加密、解密方法、装置、计算机设备和存储介质
CN112597453A (zh) * 2020-12-04 2021-04-02 光大科技有限公司 程序代码加密解密方法和装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015185071A (ja) * 2014-03-26 2015-10-22 日本電信電話株式会社 情報追跡システム及び情報追跡方法
CN108390759A (zh) * 2018-03-21 2018-08-10 平安普惠企业管理有限公司 代码加密、解密方法、装置、计算机设备和存储介质
CN112597453A (zh) * 2020-12-04 2021-04-02 光大科技有限公司 程序代码加密解密方法和装置

Similar Documents

Publication Publication Date Title
EP3575971A1 (en) An apparatus and method for memory encryption with reduced decryption latency
CN102163268B (zh) 在执行期间验证软件代码的完整性的方法和设备
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
US9043606B2 (en) Apparatus for verifying and for generating an encrypted token and methods for same
CN109845182B (zh) 密码消息与认证指令
US20080250403A1 (en) Method and apparatus for generating firmware update file and updating firmware by using the firmware update file
US9501646B2 (en) Program verification apparatus, program verification method, and computer readable medium
JP3481470B2 (ja) データ等の不正改竄防止システム及びそれと併用される暗号化装置
JP2009075720A (ja) 情報処理装置及び情報処理プログラム
KR20080045708A (ko) 메모리 카드 제어기 펌웨어의 하드웨어 드라이버 무결성체크
JP2008306395A (ja) 情報処理装置、情報処理方法
CN101556638B (zh) 数据处理设备
JP2011123229A (ja) プログラムコード暗号化装置及びプログラム
JP2007336446A (ja) データ暗号化装置
JPWO2006046484A1 (ja) 認証方法
JP2009169489A (ja) 暗号化方法、復号化方法、暗号化装置、復号化装置
JP6631989B2 (ja) 暗号化装置、制御方法、及びプログラム
WO2021044465A1 (ja) 暗号化装置、復号装置、コンピュータプログラム、暗号化方法、復号方法及びデータ構造
JP5407585B2 (ja) プログラムコード暗号化装置及びプログラム
JP2002082732A (ja) プログラムコードの不正改竄防止システム及びその方法並びにその制御プログラムを記録した記録媒体
JP2004362077A (ja) データ変換システム
CN108460252A (zh) 一种软件产品license信息设置方法
Chauhan et al. Harnessing Lightweight Ciphers for PDF Encryption
JP2007158967A (ja) 情報処理装置、耐タンパーデバイス、暗号処理方法及びコンピュータプログラム
JP2004252852A (ja) 情報処理装置及び情報処理方法