説明

プログラム保護方法及びプログラマブル論理装置

【課題】複雑な暗号化処理を不要とし、処理スピードを低下させることなく実質的にプログラムを保護する方法を提供する。
【解決手段】 プロセッサの一部を意図的に使用不能とすることで使用不能部位がそれぞれ異なるプロセッサを作成し、プロセッサ毎に異なる使用不能部位を特定したキー情報を反映させてソースプログラムをコンパイルし、プロセッサ毎に実行可能なオブジェクトコードを生成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムの不正使用に対する保護方法に関し、特に、プログラマブル論理装置に使われる論理回路構成情報(コンフィグレーション情報)の保護方法、及その保護手段を備えたプログラマブル論理装置に関する。
【背景技術】
【0002】
近年、プログラムの不正コピーによるソフトウェア業界に与える被害が甚大であることから、様々な不正コピーを防止する方法が提案され、開発されている(特許文献1、特許文献2、特許文献3参照)。しかし、プログラムの不正コピーは依然発生しており、完全にプロテクトできていないのが現状である。
【0003】
プログラムの不正使用の防止(コピープロテクション)方法には大きく分けて2種類存在する。その1つはネットワークライセンシング(Network Licensing)方法である。もう1つは、ネットワークを利用しないスタンドアロンライセンシング(Stand-Alone Licensing)方法である。
【0004】
ネットワークライセンシング方法は、プログラムをインストールするときに、プロダクトコードを打ち込み、ソフトが認証サーバと交信し、プロダクトコードに対応した認証キーを受け取る。この認証キーがないとプログラムを実行できないようにするものである。この方法は、管理システムの構築に莫大な費用がかかるとともに、その維持管理にも多額の費用が必要であり、またユーザがネットワークに加入していなければならないという問題がある。
【0005】
スタンドアロンライセンシング方法としては、例えば、1つのパッケージにソフトウェアとプロテクトモジュールとを同封し、ユーザのパーソナルコンピュータにおけるパラレルポート又はシリアルポート(例えばプリンタ用コネクタ)にプロテクトモジュールを差し込まないと、同封されていたソフトウェアを使用できないようにする方法である(特許文献4)。しかし、このコピープロテクション方法では、1つのプログラムを正当に使用するためには、1つのプロテクトモジュールをコンピュータのコネクタ(ポート)に物理的に挿入しなければならない。また、本来プログラムの実行には不必要なハードウェアであるプロテクトモジュールが必要になるという問題がある。
【0006】
特定用途の演算処理には汎用のCPUではなく、特定用途向けIC(ASIC,Application Specific IC)が使用されている。ASICは特定の用途のために設計、製造される集積回路であるから、プログラムとプロセッサが一体となったプロセッサであるといえる。このことから、ASIC用に開発されたプログラムは、他のプロセッサで不正コピーされ使用されることは実質的にあり得ない。しかし、一方においてユーザの注文に応じてゼロから回路を設計するため、開発に長期間がかかるとともに製作コストが高くなるという問題がある。
【0007】
ASICの問題点を解決するために、プログラム可能な論理デバイス(PLD,Programmable Logic Device)、FPGA(Field Programmable Gate Array)が用いられるケースが多くなってきている。
【0008】
プログラマブル論理装置の基本構造は、ゲート回路を形成する基本セルである多数の論理素子が、チップ上にマトリックス状に配置され、その論理素子周辺には相互接続線が配置されるものである。なお、論理素子とは、andゲート、フリップフロップ、ラッチ、インバータ、norゲート、排他的orゲート等である。
【0009】
プログラマブル論理装置は、装置内のプログラム可能な論理素子(プログラマブル論理素子)を論理回路構成情報に基づいて配置し、ユーザの所望する処理を実行できるように論理回路を構成し処理するものである。
【0010】
ここで、プログラマブル論理装置の回路の構成情報は、例えば外部のメモリから電源投入時にロードされるのが一般的である。このため、メモリに格納されている構成情報に基づいて論理回路を構成(コンフィグレーション)するときのビットストリームにアクセスすることで、これをコピーして不正使用される可能性があり、かかる盗用を如何にして防止するかが課題となっている。
【0011】
プログラマブル論理装置におけるコピープロテクトの手段についても、従来から種々の提案がなされている。例えば、下記特許文献5には、プログラマブル論理装置の外部メモリからロードされるプログラム(ビットストリーム)を、暗号化鍵を用いて暗号化するコピープロテクトの方法が開示されている。かかる暗号化においては、標準化された暗号化方式(例えばDES(Data Encryption Standard)、AES(Advanced Encryption Standard)など)が用いられることが多い。
【0012】
一方、プログラマブル論理装置においては、多数の論理素子(論理ブロック)の中に、動作不良のものが発生することが避けられないため、その対策を如何にするかが課題になっている。そのため、不良箇所を回避して論理回路構成情報を作成するという提案がなされている。例えば、下記特許文献6には、ウエハテストの段階で故障と判断された論理ブロックを記憶素子に記憶し、プログラム時にこの論理ブロックを回避してプログラムするプログラム可能な論理回路が開示されている。また、特許文献7には、欠陥の有る領域(欠陥タイル)の位置情報を不揮発性メモリに記憶し、この情報を読み出して欠陥タイルを避けてデバイスの組み込みを行う方法が提案されている。
【0013】
【特許文献1】特開平07−325712号公報
【特許文献2】特開2000−231486号公報
【特許文献3】特開2000−325039号公報
【特許文献4】特開2000−347853号公報
【特許文献5】特表2004−515001号公報
【特許文献6】特開平08−298289号公報
【特許文献7】特開平11−135639号公報
【発明の開示】
【発明が解決しようとする課題】
【0014】
上述のような暗号化と復号化によるコピープロテクトは、これを実施するシステムをチップに搭載する必要がある。また、プロセッサの処理能力の一部がこれに割かれるため、処理スピードが低下するという問題がある。とくに簡単な暗号化では解読されるおそれがあるため、暗号化方式自体が高度化、複雑化しており、暗号化・復号化による処理能力、処理スピードの低下が無視できない問題となっている。
【0015】
そこで本発明の課題は、開発したプログラム及びそのプログラムを実行するプロセッサは、ASICのように特定用途向けのものではないが、ユーザがこれらを利用するときにはASICのようにプログラムとそのプロセッサとが1対1に関連づけられた状態で提供される。これにより、仮にそのプログラムが不正にコピーされたとしても、コピーされたプログラムは当該プロセッサ以外では実行できない。これにより実質的にプログラムの保護を図るものである。
【0016】
また、本発明は複雑な暗号化処理を不要とすることにより処理スピードを低下させることなく実質的にプログラムを保護する方法を提供するものである。
【課題を解決するための手段】
【0017】
本発明は、汎用プロセッサの一部を意図的に使用不能とすることで、使用不能部位がそれぞれに異なるプロセッサを作成し、プロセッサ毎に異なる使用不能の部位を特定したキー情報を反映させてソースプログラムをコンパイルし、プロセッサ毎に実行可能なオブジェクトコードを生成することによりプログラムを実質的に保護することを特徴とする。
【0018】
この方法によれば、プロセッサとオブジェクトコードとを1対1に関係づけることができる。この結果、仮にオブジェクトコードが不正にコピーされたとしても、不正コピーされたオブジェクトコードは他のプロセッサで使用することができない。この結果、不正コピーの意味がなく、実質的に不正コピーを防止することができる。
【0019】
前記プロセッサはプログラマブル論理装置であり、前記オブジェクトコードは論理回路構成情報であり、前記キー情報は前記プログラマブル論理装置内の少なくとも一つ以上の使用不能状態にあるプログラマブル論理素子(以下、PE)を特定する情報であることを特徴とする。
【0020】
プログラマブル論理装置毎に異なる使用不能状態にあるPEを使用しないように論理回路構成情報を生成すれば、前記プロセッサのみで使用可能なオブジェクトコードを生成することができる。
【0021】
前記キー情報の論理回路構成情報への反映が、使用不能状態にあるPEを使用せず、かつ使用不能状態にないPEの全てを使用するように論理回路構成情報を生成することであることは好ましい。
【0022】
使用不能の状態にあるPEを使用せず、かつ使用不能の状態にないPEを全て使用するように論理回路構成情報を作成すれば、より確実に他のプログラマブル論理装置では実行不可能なオブジェクトコードを生成することができる。
【0023】
本発明は、プログラマブル論理装置であって、該プログラマブル論理装置内の少なくとも一つ以上の特定のプログラマブル論理素子(以下、PE)をプログラマブル論理装置毎に異なるように使用不能な状態としたことを特徴とする。
【0024】
複数のPEのうちから使用不能とするPEを特定し、使用不能なPEが重複しないように複数のプログラマブル論理装置を製造すれば、汎用的に設計されたプログラマブル論理装置からユニークなプログラマブル論理装置を製造することができる。
【0025】
上記プログラマブル論理装置は、PEが使用可能な状態であるか、使用不可能な状態であるかを検査する手段を含むことを特徴とする。かかる手段を同一チップ内に備えることにより、そのプログラマブル論理装置の使用不能状態のPE数をチェックし、これがキー情報と一致しているか否かを検査できる。
【0026】
上記プログラマブル論理装置は、PEの使用可能、又は使用不可能の状態を表すキー情報を記憶するキーメモリを更に備えたことを特徴とする。更に、上記プログラマブル論理装置は、前記キー情報に基づきPEを使用不能の状態とする手段を備えたことを特徴とする。これにより、プログラマブル論路装置の製造後にどのPEを使用不可能の状態にするかをソフト的に操作することでユニークなプログラマブル論理装置を製造後に作成することができる。
【0027】
また、本発明においては、プロセッサに個体識別記号を付与し、前記キー情報と組にして管理することが好ましい。
【0028】
なお、本発明の構成は、不良なPEを避けて論理回路構成情報を作成するという点において、前記特許文献6,7の構成に類似する。しかし、本発明は、発明の目的のみならず、その構成においても上記文献とは基本的に相違する。本発明の構成は、意図的に使用不能なPEを作成すること、プロセッサ毎に使用不能なPEを変えることより汎用のプロセッサからユニークなプロセッサを作成すること、使用可能なPEの全てを使用するように論理回路構成情報を作成して、他のプロセッサでは実行不可能にすることなどを特徴とするもので、上記文献の方法とは、その発想が根本的に相違するものである。
【発明の効果】
【0029】
本発明によれば、プログラムが不正にコピーされても、コピーされたプログラムは当該プロセッサ以外では実行できず、これにより実質的にプログラムの保護を図ることができる。また、複雑な暗号化処理を不要とするため、処理スピードが低下することなく、不正なコピーを防止することができる。
【発明を実施するための最良の形態】
【0030】
図1は、本発明の原理の説明図である。図1(a)は従来のプログラマブル論理装置(PLD)を示し、図1(b)は本発明のPLDを示す。PLDのハードウェアは、チップ1上にプログラマブル論理素子(PE,Programmable Element)2がマトリックス状に配列され、このPEが接続パターン可変に、相互接続されてなるものである。これを作動させるソフトは、通常は外部メモリからのソースプログラム3が、コンパイラ4によりオブジェクトコードに書き換えられ、これによりPE間の接続を再構成し又は再構成しつつ、プログラムを実行する。
【0031】
図1(a)に示す従来方法では、PE2の全てが使用可能な状態にあることが前提になっている。ソフト面でも、全てのPEが使用可能な状態に有ることを前提として、オブジェクトコードが作成され、論理回路の再構成とプログラムの実行がなされる。これに対して、図1(b)に示す本発明の方法では、チップ1上のPE2の一部(少なくとも1個のPE)は使用不能な状態(不活状態)にある。不活化されたPE5に関する情報は、キー情報6として入力され、メモリに記録される。コンパイラ4は、ソースプログラム3とキー情報6に基き、不活化されたPE5の存在を前提にして、各PLDで固有のオブジェクトコードを作成し、論理回路の再構成とプログラムの実行を行う。
【0032】
チップ1上で不活状態のPE5が形成される位置は、各デバイス(PLD)でランダムかつ互に相違するように選択され、これに関する情報が各デバイス固有のキー情報6となる。すなわち、各ユーザが保有するPLDは、それぞれ固有の不活化されたPE5とキー情報6を有し、この情報は機密になっている。
【0033】
また、各PLDには個体識別符号が付与されており、これとキー情報とを組にして管理することにより、各PLDの識別と管理をより円滑に行うことができる。
【0034】
かかる構成によれば、ソースプログラム3を不正コピーして同種のPLDに使用しても、各デバイスに固有のキー情報6を与えなければ、実行可能なオブジェクトコードを作成することができずPLDは作動しない。また、他のデバイスからソースプログラム3とキー情報6を盗用しても、そのデバイスに固有のキー情報6でなければ作動しないから、不正使用はきわめて困難になる。
【0035】
図2は、本発明の一実施例であるプログラマブル論理装置の構成を示すブロック図である。この装置は、ソフトウェアモジュール10と論理回路再構成可能プロセッサ20とで構成される。
【0036】
ソフトウェアモジュール10は、命令セットジェネレータ11、コンパイラ/アセンブラ12等を有し、キー情報入力手段からキー情報13が入力されるように構成されている。外部メモリからロードされたソースプログラム3は、命令セットジェネレータ11により、一連の命令セット14に変換される。この命令セット14は、コンパイラ/アセンブラ12でオブジェクトコードに変換されるが、その際キー情報13に基づき、不活化されたPEの存在を前提として変換が行われ、論理回路構成オブジェクトコード15及びプログラムオブジェクトコード16が作成される。
【0037】
キー情報入力手段はとくに限定を要しない。例えば、キーボードから入力する方法、外部の記録媒体から読み込む方法等のいずれであってもよいが、キー情報の機密保持が可能であることが必要である。なお、ここでいうキー情報とは、例えば不活化されたPEの種別(PEに複数の種類が有る場合)、マトリックス上のアドレス(X座標、Y座標)などである。
【0038】
論理回路再構成可能プロセッサ20は、論理回路構成オブジェクトコード15及びプログラムオブジェクトコード16に基づいて、再構成可能論理回路21を必要に応じて変化させつつ、入力データ22を演算処理し、最終的な結果として出力データ23を出力する。
【0039】
その際、キーメモリ24に記録されたキー情報に基づき、不活化されたPEを用いないで論理回路21を再構成するよう制御される。また、検査制御回路25が設けられ、実際に不活化されたPE数が、キーメモリ24の情報と整合するか否かがチェックされる。なお、後述するように、特定のPEの不活化を、外部からの信号によって行う場合もあり、その場合、この検査制御回路25は、PEの不活化の制御にも用いることができる。
【0040】
次に、本発明において、一部のPEを不活化する手段について説明する。この手段は大別して、物理的にPEを使用できない状態にする方法(ハード的不活化)と、PEへの指令信号により使用できない状態にする方法(ソフト的不活化)とが考えられる。
【0041】
ハード的不活化は、選択されたPEが作動しない(本来の機能を発揮しない)ように形成されていればよく、どのように不活化するかを限定する必要はない。しかし、プログラマブル論理装置(PLD)は量産されるLSIであるから、一定の規格で同一形態のものを多数製造した後、個別に回路の一部を加工して不活化し得ることが好ましい。かかる観点からは、チップ上において外部から加工可能な配線の一部を切断して、不活化する方法が推奨される。
【0042】
図3は、PE不活化のための配線切断部位の例を示す説明図である。PLDの一般的な構成は、図3(a)に示すように、基板上に多数のプログラマブル論理素子(PE)30がマトリックス状に配置され、各PE間に、その相互を接続する配線領域31が形成されてなるものである。図3(b)は、図3(a)の一部をより詳細に示すものであるが、PE30の出力線32は、縦配線(VL)33のいずれかと接続されている(その接点に設けたスイッチング素子により、出力線をどのVLに接続させるかを選択することができる)。また、横配線(HL)34が設けられ、VL33とHL34との交差部分は、スイッチ・マトリックス(SW)35が形成されており、VL33とHL34との交点が接続ポイント36となる。
【0043】
PE不活化のための配線切断の部位は、PE30から出力線32への出口付近(図3(b)のA点)、出力線32の途中(B点)、VL33の途中(C点)、接続ポイント36の付近(D点)等のいずれであってもよい。また、必ずしも上記に限る必要は無く、PE内の回路要素の接続線や横配線HL34を切断してもよい。さらに、接続点のスイッチング素子(例えば、出力線32とVL33の交点のスイッチング素子や、接続ポイント36に設けられたスイッチング素子群など)にオンオフの指令信号を与える信号線を切断することによっても、特定のPEを不活化できる場合がある。
【0044】
図4は、配線切断法の説明図である。この例では、PE30の出力線32を切断することによってこのPEを不活化している。ただし、単に切断したのみでは、VL33の電位が浮動状態になって好ましくない場合があるので、切断された出力線32のVL側の端部37を接地する。
【0045】
特定のPEを不活化するための、上記のような配線切断には、電子線描画法が好適である。すなわち、切断部位周辺を電子線用レジスト膜で被覆し、切断部を電子線で描画した後、エッチングによりこの部分のアルミ配線を除去すればよい。また、出力線の端部37を接地する場合も、上記と同様に電子線描画法を適用することができる。すなわち、接地部位37の周辺の絶縁被膜を電子線用レジスト膜で被覆し、接地部を電子線で描画した後、エッチングにより絶縁被膜にコンタクトホールを形成する。その後真空蒸着等で、コンタクトホールにアルミを充填すれば、この部位を接地状態にすることができる。
【0046】
次に、ソフト的なPEの不活化について説明する。図5は、本発明の一実施例におけるプログラマブル論理素子(PE)の構成を示す図である。この例では、PE30は、ルックアップテーブル(LUT)40、フリップフロップ(FF)41、セレクタ42、マルチプレクサ43、AND回路44等から形成されている。LUT40の出力は、FF41でクロックによリタイミング調整され、マルチプレクサ43で選択されて出力される。
【0047】
上述のLUT40からマルチプレクサ43までの構成と機能は、従来のPEと同じである。しかし、本実施例のPEでは、マルチプレクサ43の出力がAND回路44に入力され、同時にキー情報45がAND回路44に入力されるように構成されている。このAND回路44がPEを不活化させる役割を果たす。
【0048】
例えば、マルチプレクサ43の出力がH(high)の場合のみ有意な情報になるものとする。不活化しないPEのキー情報45として常にHの信号を与え、不活化するPEのキー情報45として常にL(low)の信号を与えれば、入力が(H,H)の場合のみHが出力されるから、不活化しないPEは正常に作動し、不活化するPEは、一切有意な信号を出力しない不活性状態が確保される。したがって、かかるソフト的な不活化によっても、物理的にPEを不活化するのと同様の効果を得ることができる。
【0049】
図6は、本発明におけるPLDの動作イメージの説明図である。上段のPLD(A)では、30a〜30dの4個のPEのうち、左下のPEの出力線が切断され、このPE30cが不活状態にあり、下段のPLD(B)では、右下のPEの出力線が切断され、このPE30dが不活状態にあるものとする。
【0050】
図2で示したように、ソースプログラムは多数の命令の集合(命令セット)に書き換えられ、各命令がPLD内の特定のPEを信号のパスとして実行される。例えば命令1は、PE30a→30bに信号が流れて実行されるものとすれば、この命令は、上下いずれのPLDでも実行可能である。
【0051】
一方、命令2はPE30d→30a→30bに信号が流れて実行されるものとすれば、この命令は、PLD(A)では実行可能であるが、PLD(B)では実行できない。本発明においては、PLD(B)のPE30dが不活化されているというキー情報に基づいて、これと等価な他のPEを用いて命令2を実行するように制御される。
【0052】
全PE中の不活化されたPEの割合が小さくても、各命令ステップで全PE中のかなりの割合(例えば7割以上)のPEに信号が流れるから、不活化されたPEの全てが不使用のPE中に含まれる確率は非常に小さい。また、一つのソースプログラムで実行される命令のステップ数はきわめて大きいから、いずれかの命令ステップで、信号が不活化されたPEを流れることになる。したがって、正しいキー情報で、不活化されたPEを回避するように制御しない限り、PLDは正常に動作しないという結果になる。
【0053】
上記の確率の問題を、さらに具体的に考察してみると以下のごとくなる。PLD内のPEの数を、16×8=128とし、その内不活化されたPEの数を6個とする。また、各命令ステップで使用するPEの平均数を100(不使用が28)とする。詳細な説明は省略するが、1命令ステップで、不使用の28個のPEの中に、不活化されたPEの全てが含まれる確率Pは、10−4程度である。
【0054】
さらに、一つのプログラムを実行するための命令ステップ数が256であり、各ステップが独立事象であるとすると、全ての命令ステップを通しての上記確率Pは、(10−4)の256乗、すなわちP=10−1024ということになり、現実には絶対に起こりえない確率ということができる。
【図面の簡単な説明】
【0055】
【図1】本発明の原理の説明図である。
【図2】本発明の一実施例であるプログラマブル論理装置の構成を示すブロック図である。
【図3】PE不活化のための配線切断部位の例を示す説明図である。
【図4】本発明における配線切断法の例を示す説明図である。
【図5】本発明の一実施例におけるプログラマブル論理回路素子の構成を示す図である。
【図6】本発明のプログラマブル論理装置の動作イメージの説明図である。
【符号の説明】
【0056】
1 チップ
2 プログラマブル論理素子(PE)
3 ソースプログラム
4 コンパイラ
5 使用不能状態のPE
6 キー情報
10 ソフトウェアモジュール
11 命令セットジェネレータ
12 コンパイラ/アセンブラ
13 キー情報
14 命令セット
15 論理回路構成オブジェクトコード
16 プログラムオブジェクトコード
20 論理回路再構成可能プロセッサ
21 再構成可能論理回路
22 入力データ
23 出力データ
24 キーメモリ
25 検査制御回路
30 プログラマブル論理素子(PE)
31 配線領域
32 出力線
33 縦配線(VL)
34 横配線(HL)
35 スイッチ・マトリックス(SW)
36 接続ポイント
37 切断された出力線の端部
40 ルックアップテーブル(LUT)
41 フリップフロップ(FF)
42 セレクタ
43 マルチプレクサ
44 AND回路
45 キー情報


【特許請求の範囲】
【請求項1】
プロセッサの一部を意図的に使用不能とすることで使用不能部位がそれぞれ異なるプロセッサを作成し、プロセッサ毎に異なる使用不能部位を特定したキー情報を反映させてソースプログラムをコンパイルし、プロセッサ毎に実行可能なオブジェクトコードを生成するプログラム保護方法。
【請求項2】
前記プロセッサはプログラマブル論理装置であり、前記オブジェクトコードは論理回路構成情報であり、前記キー情報は前記プログラマブル論理装置内の少なくとも一つ以上の使用不能状態にあるプログラマブル論理素子を特定する情報である請求項1に記載のプログラム保護方法。
【請求項3】
前記キー情報の論理回路構成情報への反映は、使用不能状態にあるプログラマブル論理素子を使用せず、かつ使用不能状態にないプログラマブル論理素子の全てを少なくとも一度は使用するように論理回路構成情報を生成する請求項2に記載のプログラム保護方法。
【請求項4】
前記プロセッサに、個体識別記号を付与し、前記キー情報と組にして管理することを特徴とする請求項1に記載のプログラム保護方法。
【請求項5】
複数のプログラマブル論理素子と、
該複数のプログラマブル論理素子を相互に接続可能に構成された配線領域とを含んで構成されるプログラマブル論理装置であって、
少なくとも一つ以上のプログラマブル論理素子をプログラム論理装置毎に異なるように使用不能な状態としたプログラマブル論理装置。
【請求項6】
個体識別記号を更に含むことを特徴とする請求項5に記載のプログラマブル論理装置。
【請求項7】
前記使用不能な状態は、配線領域における切断によって形成されるものである請求項5に記載のプログラマブル論理装置。
【請求項8】
プログラマブル論理素子が使用可能な状態か、使用不能な状態であるかを検査する手段をさらに含む請求項5に記載のプログラマブル論理装置。
【請求項9】
いずれのプログラマブル論理素子が使用不能であるかを特定するキー情報を記憶するキーメモリを更に備えたこと請求項5に記載のプログラマブル論理装置。
【請求項10】
前記キー情報に基づき所定のプログラマブル論理素子を使用不能とする手段を更に備えた請求項9に記載のプログラマブル論理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate