JPH09282156A - プログラム保護装置及びプログラム保護方法 - Google Patents
プログラム保護装置及びプログラム保護方法Info
- Publication number
- JPH09282156A JPH09282156A JP8095105A JP9510596A JPH09282156A JP H09282156 A JPH09282156 A JP H09282156A JP 8095105 A JP8095105 A JP 8095105A JP 9510596 A JP9510596 A JP 9510596A JP H09282156 A JPH09282156 A JP H09282156A
- Authority
- JP
- Japan
- Prior art keywords
- program
- protection
- processor
- branch
- data
- 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.)
- Granted
Links
Landscapes
- Storage Device Security (AREA)
Abstract
不正コピーを不可能にする。 【解決手段】 プログラムは暗号化されてROM32に
格納される。セキュリティチップはプロセッサ20から
の適切な要求に応答してプログラムデータを復号化して
プロセッサ20へ返すが、要求が不適切ならばプロセッ
サ20を停止させる等の処置をする。分岐命令はセキュ
リティチップ30内で処理される。復号化に必要なキー
値はセキュリティチップ30内部の揮発性メモリに格納
されるが、セキュリティチップ30を剥離すると揮発性
メモリの内容が失われる。
Description
コピーから保護する分野に関する。より詳しく述べれ
ば、本発明は一実施態様において、プログラムを実行す
るプロセッサ及びプログラムを保持するメモリをアクセ
スすることを前提とした開放ハードウエアシステムにお
けるコピー保護手段を提供する。
るようになって以来、コンピュータプログラムを不正コ
ピーから保護することがソフトウエア開発者の関心事で
ある。その難しさは、ソフトウエアはコピーが容易であ
り、また、どんなコピー保護もしくは防止方式もソフト
ウエアを実行しようとするときには結局は一部のコピー
を許可せざるを得ないという点にある。ソフトウエア
を、それを実行するチップを含むチップ(集積回路)内
に閉じこめない限り、モニター可能な回路配線を通じて
頒布メディアからプロセッサへソフトウエアの実行部分
を送らなければならない。したがって、プログラムが保
護され、そのうえで正当なユーザに使用できるために
は、プログラムは、その一般に入手可能な形態でも正当
なユーザにより実行される形態でも簡単にコピーできて
はいけない。
求める要求が増加しているのに対し、説明書類の充実に
対する要求、ウイルスの心配、ある種のソフトウエア特
に重要な業務用ソフトウエアの不正コピーは減ってきて
いる。しかしながら、ソフトウエアが技術サポートや説
明資料を必要とせず、かつウイルスに感染し得ないシス
テム、例えばゲームソフトウエアがリードオンリーメモ
リ(ROM)に格納されたビデオゲームカートリッジを
使うビデオゲームシステムの上で利用される場合には、
不正コピーがまだ広く行われている。それに必要とされ
るのは、ゲームカートリッジに使用されている回路を理
解してゲームプログラムをコピーすることだけである。
ム機を作り、その利用をライセンスを供与したソフトウ
エア製作者が製作したゲームのみに限定したいと考える
が、このビデオゲームメーカのもう1つの関心事はソフ
トウエアのコピーのことではなく、ビデオゲーム機をコ
ピーし、正規のゲームカートリッジ又は不正な互換ゲー
ムカートリッジを実行するゲーム機を作ることである。
(すなわち”ソフトウエア海賊”その他のソフトウエア
を不正に解析又はコピーする者)は、プログラムにアク
セスできれば簡単にプログラムをコピーすることができ
る。ここではプログラムを走らせるために必要なデータ
のことをプログラムデータと呼ぶが、これには命令(プ
ログラムコード)、値のテーブル、スクリーン画像を生
成するために用いられる画像データが含まれる。プログ
ラムデータがその頒布時の形態では簡単にアクセスでき
なくとも、模倣者は、プログラムデータを保持する記憶
メディアとプロセッサとの間のバスを観測しプログラム
コードを調べることによって、プログラムデータを手に
入れであろう。したがって、プログラムだけを暗号化し
ても、プログラムは結局はデコードされて利用されるの
で本当の保護にはならない。プログラムデータがビデオ
ゲームカートリッジに格納され、プロセッサがビデオゲ
ーム機上にある場合には、いかなる秘密通信によること
なく記憶メディアとプロセッサとの間のインターフェー
スを容易に利用できるので、プログラムデータの解析は
簡単になる。多くのビデオゲーム機で、CPUのバス全
体が簡単に解析に利用できる。このような問題は、ビデ
オゲームカートリッジのみならず、どのようなの種類の
取り外し可能なプログラム記憶メディアにも当てはまる
ことは当然である。
ーしようとする者に対する抑止手段であって、プログラ
ムの大量の不正コピーを作成にすることを意図して、コ
ピー保護の仕組みを打ち破るために大金と多くの時間を
費やすことをいとわない確信犯的模倣者に対する抑止手
段ではない。気まぐれの模倣者に対しては、ソフトウエ
アのみによるコピー保護を導入することで間に合う。例
えば、気まぐれな模倣者には普通はアクセスされたり観
測されたりしない秘密ファイル又はコードを利用すれば
十分である。また、気まぐれの模倣者の多くは、コピー
するのにカートリッジを作る必要があると、プラスチッ
クのカバーと回路基板を作る能力を要するため、コピー
することをあきらめるであろう。しかし、非常に確信犯
的なカートリッジの模倣者は、大量のカートリッジを作
って売ることを企ており、したがってプログラムデータ
がコピーされたならカートリッジを作る能力を持ってい
る者である。ソフトウエアのみによるコピー保護方式
は、プログラムデータメディアの文書化されない部分を
秘密コードの格納のために用いるであろうが、一般
に、”不明であることによる保護”によって、コピー方
法を知らない者だけは使用可能なコピーを作成できない
ようにする。したがって、大規模な、熟練した模倣者を
阻止しようとする場合には、ソフトウエアのみによるコ
ピー保護は利用できない。幸いなことに、ハードウエア
要素を含むメディアによりプログラムデータが頒布され
る場合、例えばビデオゲームカートリッジの場合には、
ハードウエアによるコピー保護をカートリッジに組み込
むことができる。
は、プログラムの正規コピーがあることを知らせるハー
ドウエア回路又はデバイス(許可デバイス)が存在する
ことを前提にしている。プログラムは、実行時に、許可
デバイスがあるかチェックするルーチンを走らせる。許
可デバイスがなければ、プログラムは動作を続けること
を拒絶するか、何か他の望ましくない動作をする。これ
らの防護方式は2つの攻撃方法に対しては無防備で、防
御が無力化される恐れがある。
ドウエアの許可デバイスの回路を解析してその必須エレ
メントを確定し、得られた情報に基づいて不正な許可デ
バイスを複製する。許可デバイスの細部がカスタム集積
回路に埋め込まれていたとしても、化学的剥離プロセス
を利用し集積回路を1層ずつ顕微鏡で観測して回路の構
造を解明できる。また、1動作の詳細解析又はプログラ
ムの多数のパスの高速解析を支援するために、許可デバ
イスの動作を、その回路及びプロセッサの動作速度を下
げたり上げたりして観測することもできる。
可デバイスが存在するかチェックするソフトウエアルー
チンを、許可デバイスが実際に適所にあろうとなかろう
と、適所に存在するという報告を常に返すように変更し
ようとする。模倣者は、簡単に手に入るロジックアナラ
イザーをプログラムを走らせるマイクロプロセッサに接
続しておき、マイクロプロセッサを低速で走らせてマイ
クロプロセッサとの間のデータのやりとり全部をロジッ
クアナライザーで記録させ、この情報を用いてプログラ
ムのフローを確認する。許可デバイスが適所にある場合
(正当使用の模擬)と適所にない場合(不正使用の模
擬)の両方についてプログラムのフローが記録されれ
ば、模倣者は、両フローを比較し、そして許可デバイス
が適所にあるか否かの判定がプログラム内のどこでなさ
れるか確認することができる。その位置が確認されたな
らば、ソフトウエアのその位置を、許可デバイスの存在
判定のルーチンが存在を否定することがないように変更
することができる。これは、一つの条件付き飛び越し命
令を無条件飛び越し命令又はNOP(ノーオペレーショ
ン)に置き換えることにより行うことができることが多
い。
れるものは、必ずしも安全ではないバスを通じてプロセ
ッサにプログラムコードを実行させる装置であって、模
倣者の方で、それ以外の装置で用いるためのプログラム
データを複製しようとすると、あるいは当該装置を複製
しようとすると、実現不可能なほどの膨大な作業が必要
となるような装置である。よって、本発明の目的は、そ
のようなプログラムをコピーから保護するための装置及
びその方法を提供することである。
ードを非保護環境で実行しても、プログラムコード又は
関連データのコピー方法を確認できなくする保護システ
ムを提供する。本発明による保護システムの一実施例に
おいては、プログラムメモリに暗号化したプログラムデ
ータ(プログラム命令、データテーブル、デジタイズド
画像等々)を記憶し、また、そのプログラムデータをプ
ロセッサが必要とする時に取り出すために一つの集積回
路に収容されたセキュリティ回路が用意される。実施例
によって、そのプロセッサは中央処理装置(CPU)で
あり、ビデオ画素プロセッサであり、あるいはプログラ
ムデータを必要とする他の低水準CPUである。非保護
システムにおいてはプロセッサにより実行されるであろ
う処理ステップの一部は、当該保護システムにおいて
は、セキュリティ回路内で、暗号化プログラムデータの
中のプロセッサには与えられない部分により実行され
る。プログラムデータは、プロセッサから出されるセキ
ュリティチップ(security chip)に対する適切な要求
に基づき解析される。セキュリティチップは、どのプロ
グラムコードが実行中であるかによって、プログラムメ
モリのどのセクションがプロセッサが要求を出し続ける
ために適当であるかを監視する。セキュリティチップは
キーレジスタを含み、このキーレジスタにはプログラム
コードを復号化するのに必要なキー値が格納される。セ
キュリティのため、異なるプログラム毎に別々のキー値
を用いてよい。
テリ駆動の揮発性メモリに記憶させ、又はキャパシタ上
の電荷として記憶させ、セキュリティチップを剥離する
と揮発性メモリに達するかなり前に揮発性メモリに対す
る電源が破壊されるように、揮発性メモリをセキュリテ
ィチップ面に配置又は分布させるとよい。
ログラム命令から分岐ステートメントを抽出し、それ
を、復号化した後、プロセッサへ供給する前に、内部の
分岐テーブルに格納する。好適な実施例では、分岐ステ
ートメントは暗号化される前に分離されプログラムメモ
リに格納される。プログラムの可能なフローは分岐テー
ブルから分かるので、分岐テーブルだけに可能な分岐の
リストを記憶していれば良いので、メモリが節約され
る。
複雑な暗号化であるが、別の実施例では、ハードウエア
を削減するため、暗号化は疑似乱数発生器(PRNG)
の出力との排他的論理和演算である。必要ならば、いく
つかの補助的な保護方法が適用されてもよい。例えば、
セキュリティチップがプロセッサバスを読むように配置
されるならば、セキュリティチップがメモリからの命令
フェッチ及びデータフェッチを全てモニタできるように
プロセッサバスのタップを設けてもよい。例えば、セキ
ュリティチップは全ての分岐情報を提供するから、分岐
と分岐の間のプログラムの流れは直線的かつ決定論的で
ある。したがって、セキュリティモジュールは分岐間の
バスアクティビティ全部のチェックサムをとり、それを
予め求められているチェックサムと比較し、そしてチッ
クサムが一致しないときには、プロセッサに与えられた
命令が何か変更されているのであろうから、それ以上の
分岐情報の提供を拒否する。
の速度で命令を実行していることを確認するため、リア
ルタイムクロック、RC(抵抗−キャパシタ)時定数回
路、又は他のダイナミック論理回路を持っても良い。こ
うすることで、不正な分岐テーブルの作成に必要な物を
通じプログラムを走らせるプロセスをスピードアップす
るためにプロセッサが加速されたり、あるいは、ハード
ウエア解析を行うためにプロセッサの速度が下げられた
りしないようにする。
を保持しているため次の分岐が何であるか推測でき、し
たがって、プロセッサは条件付き分岐を起こすかどうか
を判断するために必要な値を与えるだけでよい。リター
ン命令を処理するために、セキュリティチップはプロセ
ッサのためのプログラムスタックも保持する。このセキ
ュリティ機構はプロセッサが予期しない分岐情報を要求
しないようにする。
字推定攻撃(chosen text attack)をやりにくくするた
め、プログラムデータを最初に圧縮することによりデー
タ中のパターンを除去してもよい。
と同様に行ってよい。しかし、ハードウエアコストが小
さいことが優先される場合には、暗号化器はPRNGの
出力に従ってプログラムデータのビット又はバイトの順
番を並べ替える単なるデータスクランブラーにしてもよ
い。このときには、データ復号化器は単にバッファ、マ
ルチプレクサ及びデマルチプレクサの系列である。セキ
ュリティチップが伸長器を含んでいる場合には、そのバ
ッファは既に伸長器内にあるかもしれない。スクランブ
ラーが他の暗号化と一緒に用いられると、データ中のど
のワード又はビットの位置も推測できないので、文字推
定攻撃は一層困難になる。PRNGの種は、キー値又は
キーの依存値に見合ったある値により設定される。ファ
イルが圧縮されるため、それほど強固でない暗号化を用
いることができる。暗号化されたプログラムデータの多
くの異なったセクションを対応した復号化データと比較
することによりキー値を確定する分析法に対して、防御
ほより強固にするため、セクション毎に変化する補助キ
ー値を用いてもよい。この補助キー値は、プログラムデ
ータと一緒に格納された値及びメインのキー値から生成
される値としてよい。あるいは、補助キーのテーブルを
プログラムデータと一緒に格納し又はセキュリティチッ
プ内に格納し、メインのキー値を用いて、そのテーブル
よりキーを選択してもよい。
ゲームカートリッジの動作を阻止することも望まれる。
このような用途の場合、ゲームカートリッジにコピーし
にくいエレメントが設けられ、ゲームカートリッジ上の
セキュリティチップは作動前にそのエレメントが存在し
ていることを要求する。
た用途、すなわちビデオゲームを表している。開示内容
を読めば明白になるように、本発明はビデオゲームある
いはカートリッジ上に格納されるプログラムに限定され
るものではない。
トリッジ12がバス14を介し今まさに接続されようと
している状態が示されている。ここでは、模倣者はゲー
ムプログラム及びゲームデータをゲームカートリッジ1
2に格納される時に読み取ることができ、または模倣者
はゲーム機10内で起こることを全て知っていると仮定
する。また、セキュリティデバイスの好ましい設計プラ
クティスに従い、模倣者はキー又はパスワード以外は、
どんなセキュリティ回路及びアルゴリズムも全て詳しく
知っていると仮定する。システムの基本的な目的は正規
ユーザがログラムを走らせることができるようにするこ
とであるので、模倣者が所与の入力データ・セットでプ
ログラムを走らせてプログラムの結果と流れを観測する
ことを妨げることは不可能である。したがって、このシ
ステムの目標は、プログラムを通常速度で走らせるこ
と、そして、一つの入力データ・セットによりプログラ
ムを1回実行することによって推測てだきるプログラム
の情報量を制限することを要求することである。実際の
プログラムコード及びデータを確認することが事実上不
可能であるのは、システムに対して走らせなければなら
ない入力データセットの数があまりに多いために、かか
る解析を実施するのに必要な時間が、プログラムの適法
な販売の大半が終わるまでの期間より長いか同等である
からである。
20、ローカルメモリ22、ビデオディスプレイ16へ
の出力インターフェイス、入力装置18からの入力イン
ターフェイス及び回路クロック24を有する。ゲーム機
10は図示されないが他のエレメントを持っているかも
しれない。入力装置18は、本発明の主題ではないので
包括的に示されているが、例えばキーボード、ジョイス
ティック、タッチパッド又はセンサーアレイである。ビ
デオディスプレイ16は通常、プロセッサ20又は中間
ビデオメモリ(不図示)により指定された色の画素の2
次元配列を表示する画素分割ディスプレイ(例えばラス
ターモニタ)である。ローカルメモリ22は、プログラ
ムの実行に用いられる変数並びにプログラムのカレント
ページの命令を格納する。プログラムは必要になった時
にローカルメモリ22にページングすることができるの
で、ローカルメモリ22はプログラム全体を同時に格納
する必要はない。この説明から明らなように、セキュリ
ティシステムをプロセッサ20すなわちゲームシステム
のCPUに関連して説明するが、本発明はシステム内に
あるビデオプロセッサ、画像プロセッサ、その他のプロ
セッサに関しても利用し得る。
キュリティチップ30とROM32を有する。ROM3
2の代わりに別種の記憶手段、例えばCD−ROM(コ
ンパクトディスクROM)、ディスケット、フラッシュ
メモリ、あるいはネットワーク経由でアクセスされるリ
モートプログラム等を用いてもよい。ROM32はゲー
ムプログラムを暗号化された形で格納している。そのよ
うに格納されたプログラムは、プログラムの実行可能コ
ード、データテーブル、グラフィック画像のほか、カー
トリッジにより実現されるゲームの動作に必要な又は関
係した関連オブジェクトから構成される。好適な実施例
では、セキュリティチップ30は単一の集積回路であっ
て、外部アクセス可能なピンに保護データストリームは
全く流れない。
わけではない。例えば、模倣者がゲームメーカの不心得
な従業員から暗号化前のゲームプログラムを手に入れた
ならば、模倣者がそのプログラムをそのままの形で頒布
することを本発明は阻止できないであろう。ここでは、
不正な模倣者はゲーム機といくつかのゲームカートリッ
ジを入手できるだけであると仮定する。このように入手
方法が限定された場合、模倣者は図1にツール40とし
て示した様々な解析ツール及び制御ツールを利用し、ゲ
ーム機及びカートリッジの動作解析を試みるであろう。
解析ツールは信号を記録し、一方、制御ツールは信号を
変化させるが、多くは同時に解析ツールで信号を記録す
る。このようなツールにはマイクロプロセッサ・トレー
スアナライザー、波形発生器、オシロスコープ等が含ま
れる。図1は、模倣者が信号の解析及び制御のためのタ
ップを設ける可能性のあるゲーム機10及びゲームカー
トリッジ12内部のいくつかの箇所を表している。重要
なことは、模倣者は、セキュリティチップ30の化学的
隔離や顕微鏡レベルの作業を行わないと、セキュリティ
チップ30の内部信号線にタップを設けることができな
いことである。
ゲーム機10の動作速度を下げてゲーム機10の動作解
析を容易にするために、あるいは、回路クロック24の
速度を上げて、より迅速に多くの命令を実行することに
よりプログラムの様々な変化をテストするために、利用
されるかもしれない。このタップを利用できなくするた
め、セキュリティチップ30は内部的に速度が決定され
るクロックも保有し、回路クロック24が正しい速度で
動作しないとROM32からのプログラムデータの復号
化を拒否してもよい。
ROM32の内容を提供するが、これらの内容はセキュ
リティチップ30によって提供される復号化がなければ
役に立たない。バス14上を往来するデータに対するタ
ップ44又はプロセッサ20とローカルメモリ22の間
を往来するデータに対するタップ43は、復号化された
プログラム情報を提供するかもしれないが、しかし、ゲ
ームの1実行に当てはまるプログラムシーケンスの例を
提供するにすぎず、様々な入力セットに利用可能なシー
ケンスを提供するものではない。さらに、その情報は分
岐命令を含まない。というのは、分岐命令はプロセッサ
へは送られず、セキュリティチップ30内で実行される
からである。
5についても同じことが言える。タップ45は全てのビ
デオ信号を記録できるかもしれないが、ビデオ信号は単
にゲームのある特定のプレイに対応するにすぎない。例
えば、独特のグラフィックスを含むあるゲームレベルに
決して到達しなければ、そのゲームレベルのグラフィッ
クスはビデオディスプレイ16に決して送られないから
タップ45により取得できない。
とイベントをシミュレートする信号を挿入するために入
力装置18とプロセッサ20の間の信号に対するタップ
46を利用するかもしれない。様々な十分なパスによっ
て、模倣者はあらゆる可能性を確認してゲームプログラ
ムを再現できるかもしれないが、プロセッサの速度を上
げることができないため、また、極めて多くの可能性が
あるために、ゲームが市販されてから模倣者の潜在市場
を拡散させるに十分な量が売れてしまうまでの間に、模
倣者がゲームを再現できるとは思われない。
としても、ゲーム機10とゲームカートリッジ12しか
入手できない模倣者は、ゲームプログラムの完全な使用
可能な複製を作ることができない。確信犯的な模倣者は
セキュリティチップ30そのものに侵入するかもしれな
いが、それにはセキュリティチップ30のケースを注意
深く取り除いてセキュリティチップ30を1層1層解析
しなければならない。しかしながら、セキュリティチッ
プ30の内部回路全体が分かったとしても、層を除去す
るとキーを保持しているメモリは電源を断たれるように
設計されているため、模倣者はROM32の復号化に必
要な揮発性のキー設定を得られないであろう。そのメモ
リが電源のために必要な層より何層も下にある場合、メ
モリはその層が解析に利用できるようになる前に消去さ
れてしまうであろう。模倣者は、セキュリティチップ3
0を打破するには、ROM32の内容とセキュリティチ
ップ30の出力を解析してキーを引き出すことができな
ければならない。キーはゲーム毎に異なることに加え
(必ずしも各ゲームカートリッジはそのゲームを格納し
ているとは限らない)、セキュリティチップ30はその
中身にアクセスせずに暗号を打破することをいっそう困
難にする他の機構を含んでいる。
しく表す。セキュリティチップ30はバスユニット50
を有し、これはセキュリティチップ30をバス14と結
合し、プログラムデータを求める要求をトランスレータ
52に渡す。トランスレータ52は、アクセス要求のア
ドレスをROM32のアドレスロケーション又はロケー
ション範囲へ変換する。このアドレスはアドレスバス5
4を介しROM32へ送られ、ROM32はデータをデ
ータバス56で返す。あるいは、ROM32のいくつか
のロケーションがキャッシュ60にキャッシュされても
よく、この場合にはトランスレータ52はアドレス情報
をキャッシュ60へ送り、キャッシュ60はキャッシュ
データを供給する。
に結合されるが、復号化器62はキーレジスタ64によ
り与えられるキー値を使ってROM32からのデータを
復号化する。後述のように、要求されるセキュリティの
程度に応じて復号化器62は様々な構成をとり得る。復
号化器62はほぼ、プログラムデータの暗号化に使用さ
れる暗号化器の逆装置でなければならないので、復号化
器62の様々な構成を暗号化器と関連させて後述する。
68の入力に与えられ、伸長器68はそのデータをルー
ター(router)70へ送る。ルーター70はクリア(clea
r)ROMデータ用出力と秘密データ用出力を持つ。ク
リアROMデータは暗号化されないプログラムコード及
びデータオブジェクトであるが、分岐情報は持たない。
秘密データは分岐情報並びに他の変数、例えばチェック
サムと所期の実行時間を含む。
され、演算ユニット72はセキュリティチップ30の全
体的制御を司る。演算ユニット72はプライベートテー
ブル74の読み書き用ポート、リアルタイムクロック7
6の読み込み用入力、バスユニット50から分岐要求を
受け取るための入力、バスユニット50に結合される分
岐応答用出力、プロセッサバスすなわちバス14上で発
生するアクティビィティに関する情報を提供するバスタ
ップのためのバスユニット50からの入力、プログラム
データの要求の妥当性に関するバスユニット50からの
問い合わせを受け取って回答するためのポートも有す
る。セキュリティチップ30の詳細な動作については図
4及び図5に関連して後述する。
れることになる暗号化ROM32にゲームプログラム1
12を暗号化するために利用されるシステム100のブ
ロック図である。システム100は分岐セパレータ10
2に結合されるゲームプログラム112用記憶装置を有
し、分岐セパレータ102は保護プログラム114、分
岐テーブル116、チッェックサムデータのファイル1
18、タイミングデータのファイル120を出力する。
これらデータセットのための記憶装置が用意されてお
り、この記憶装置は圧縮器104に結合される。この圧
縮器104はあってもなくてもよいが、ある方が望まし
い。圧縮器104の出力は暗号化器108の入力に結合
され、暗号化器108はキーレジスタ110からキー値
を受け取るための入力も持っている。この暗号化器10
8の出力がROM32の内容を形成する。
プログラムの実行可能コード、データテーブル、グラフ
ィック画像、その他の関連オブジェクトからなる。説明
用でしかないが、プログラムの実行可能コードの簡単な
一例を表1に示す。表1に示すプログラムは、当該プロ
グラムを任意の入力に対し走らせるのに必要とされる全
ての情報が当該プログラムだけから分かるという点で”
クリアな”プログラムである。実際、このプログラムは
任意の可能な入力値(例えばa[]の値)に対し、配列
a[]の初めの10エントリーを配列 b[]の対応し
たロケーションに移すに過ぎないことは表1から明らか
である。
ラムは次の通りである。 main{ for(i=0;i<10;i++) move(i); } void move(int i){ b[i]=a[i]; } 。
へ与えられれば、表2に示す保護プログラム及び表3に
示す分岐テーブルが得られるであろう。
順番は維持できたであろうから、行番号は順序通りであ
る。しかし、これら行番号が正しいとしたら、セキュリ
ティチップ30に渡されるアドレスを解析すれば、どこ
でジャンプするか又はしないかが分かるであろう。例え
ば、表2の保護プログラムにおいて行番号が正しいなら
ば、ジャンプアドレスnの要求の後にジャンプアドレス
n+1の要求が続けば、アドレスnに関連したジャンプ
は起こらなかったことを意味する(さもなければn+1
以外のジャンプアドレスが次のジャンプアドレスであろ
う)。この種の解析を防止するために、保護プログラム
における行の順番がスクランブルされる。条件分岐毎に
真と偽のアドレスが格納されるので、発生しないジャン
プに続くコードは、そのジャンプの後に順番に続く必要
はない。
長い例のリスト(A)であり、図14乃至図21は同プ
ログラムに対応した保護プログラムのリスト(B)であ
り、図22は同プログラムに対応した分岐テーブルであ
る。図23乃至図25は分岐セパレータ(図3)をソフ
トウエアで実現するために用いられるプログラムのリス
ト(D)である。当該プログラムは、Unixオペレー
ティングシステムの走るコンピュータ上で一般に利用可
能な”awk”言語で記述されている。一見して明らか
なように、図14乃至図21のプログラムは図22の分
岐テーブルを時折参照しないと実行できない。
は分岐テーブルを参照する間に実行されるいくつかの命
令についてチッェクサムの計算も行う。これらのいくつ
かの命令は、分岐を全く含まないから毎回同じ順番で実
行されるはずであり、したがって、そのチェックサムは
計算が容易である。これらのチェックサムはチッェクサ
ムデータ118として格納される。同じように、実施例
によっては、それらのいくつかの命令のための実行時間
を計算し、タイミングデータ120として格納すること
ができる。
とされるときには、分岐をセキュリティチップ30によ
り実行させるのではなく、セキュリティチップ30で発
生した分岐を実現するための割り込みを発生してもよ
い。こうすれば、模倣者は発生しない分岐は発見できな
いであろう。
6、チェックサムデータ118及びタイミングデータ1
20が生成された後、この情報は必要ならば圧縮器10
4によって圧縮される。圧縮器104は例えば、Alle
n,Boliek及びBchwarzに対し付与された米国特許第
5,381,145号 ”Method and Apparatus for
Parallel Encoding and Decoding of Data ”に示
されているエントロピーコーダーである。圧縮は、一定
サイズのROMにより多くのデータを格納できるように
するために利用されるだけではなく、データ中に現れる
かもしれない何らかのパターンを除去することによっ
て、キー無しでの復号をより一層困難にするためにも利
用される。
る。ハードウエアコストを抑えることよりもセキュリテ
ィが優先される場合には、暗号化器108をデータセキ
ュリティの分野で知られている標準暗号方式(DES)
の暗号化器、トリプルDES暗号化器、あるいはさらに
安全な暗号化システムとしてよい。ゲームが販売される
国及びゲームが使用されると考える国の法律、並びに、
セキュリティのニーズと計算能力の制約とのバランスに
応じて、各種の暗号化器108が用いられてよい。暗号
化プロセスのセキュリティの優先度がハードウエアコス
トを抑えることより低い場合には、いくつかの単純な暗
号化回路を用いてもよい。一実施例では、暗号化は単に
クリア(clear)データと疑似乱数発生器(PRNG)
の出力ビットストリームとの排他的論理和(XOR)の
プロセスである。別の実施例では、クリアデータの順番
がPRNGの出力に基づき並べ替えられる。ハードウエ
アコストはその分増加するが、これら2つの方法を一緒
に用いてもよい。
ずかなゲートで容易に作ることができるので低コストで
ある。シフトレジスタにより構成されるPRNGについ
ては、例えば図8を見られたい。図7は、データスクラ
ンブラー106の内部構成の詳細ブロック図を示す。デ
ータスクランブラー106はいくつかのバッファを使う
が、これらバッファが圧縮器104の一部として既に存
在する場合には、バッファに関するコスト増加はゼロで
ある。
は圧縮と組み合わされる。この変形例では、圧縮はエン
トロピー圧縮であり、使用すべき最適コードを決定する
ために確率予測値のテーブルを用いる。これらのテーブ
ルのためのメモリはいずれにしても圧縮のために必要で
あるから、これらテーブルを暗号化に利用してもハード
ウエアコストは全く増加しない。これらのテーブルは、
最初に又は圧縮プロセス中にキー値又はキー値をベース
にした数値に応じて種を設定することにより、暗号化の
ために利用される。この暗号化方式によって得られる利
点は、確率テーブルが確立する機会を持つまでは圧縮プ
ロセスは必ずしも圧縮しようとするデータ中のパターン
を除去しないため、暗号化プロセスに対する公知の単純
文字攻撃(plaintext attack)を防ぐことである。キー
値により確率テーブルを初期化すれば、圧縮プロセスを
それほど簡単には解析できない。
して恐らく圧縮された後に、暗号化ROM32に格納さ
れる。次に、ゲーム機10と暗号化ROM32を使うゲ
ームカートリッジ12の動作を図1から図5を参照して
説明する。図4及び図5は、その両方で、プロセッサ2
0とセキュリティチップ30がゲームプログラムの一部
を安全に実行するために踏むステップを表しており、命
令及び/又はデータの1つのページを要求することから
始まる(ステップS1)。
個別的に圧縮されたデータセットに編成してよく、プロ
セッサ20はある圧縮データセットを指すポインタを指
定することによって、あるいは最後にデコードされたペ
ージに基づき限定されたページの組より1つのページを
単に選択することによって、1つのページを要求する。
セキュリティを高めるため、各データセットをプログラ
ムの暗号化時に割り当てられたランダムIDにより確認
してもよい。
てバスユニット50へ送られ、バスユニット50はその
要求が適切であるか演算ユニット72に問い合わせる
(ステップS2)。演算ユニット72は、分岐テーブル
を保持しているので、どの命令がプロセッサ20により
要求されるべきか否かを容易に判断できる。この機能に
よって、模倣者がプログラム全体をクリアプログラムと
してアセンブルできるようするため、ロセッサ20を既
知の順序でプログラムのそれぞれの、かつ、すべてのブ
ロックを要求するように制御するができないようにす
る。要求が適切でないときには、演算ユニット72はプ
ロセッサ20を停止させる(ステップS3)。また、演
算ユニット72が他にいくつかの働きをしてもよい。キ
ー値を消去したり、ROM32を消去したり、データを
時間とともに劣化させたり、あるいは、それ以上の解析
を挫折させるための他のステップ等である。実施例によ
っては、演算ユニット72は検出された攻撃に対し、模
倣者がゲームプログラムのフローの推定に成功したなら
ば、その推定したフローが制限されるようプログラムの
フローを変更することで応酬する。例えば、演算ユニッ
ト72はプログラムフローをゲームのほんの初めの数段
階に制限してしまう。
ROM32から取り出される(ステップS4)。これを
行うために、要求はバスユニット50により処理されて
トランスレータ52へ送られる。プロセッサ20により
用いられるアドレスとROM32をアクセスするために
用いられるアドレスが同一である場合には、トランスレ
ータ52は不要である。表1及び表2から分かるよう
に、これらアドレスは必ずしも一致しない。暗号化によ
りデータのアドレスが変わるときにも、アドレスの変換
が必要である。要求されたページが格納されているRO
M32のアドレスが決まったならば、そのアドレスはバ
ス54によりROM32又はキャッシュ60へ出力され
る。どちらにアドレスが出力された場合でも、要求され
たデータが復号化器62に入力される。この返されたデ
ータはプログラム命令かデータオブジェクトであろう。
そのデータがプログラム命令ならば、分岐テーブルの対
応したエントリーが、チッェックサム及びタイミング情
報が使われるときにはそれとともに、該データに付加さ
れる。
えられるキー値を用いてデータを復号化する。復号化器
62は暗号化器108の逆装置であり、そのキー値はキ
ーレジスタ110に格納されているキー値と等しいか、
またはその逆数であり、そのいずれであるかは採用され
る暗号化の種類による。復号化されたデータは次に伸長
器68により伸長される。これらのエレメントの目的と
するところは、Fig.3に示したデータブロック11
4,116,118,120のデータのセクションを復
元することである。このデータは次に、保護プログラム
(クリアROMデータ)と秘密データ(分岐テーブル、
チェックサム、タイミングデータ)とに分けられる。こ
の保護プログラムはバスユニット50を経てプロセッサ
20へ戻され、秘密データは演算ユニット72へ渡され
る。演算ユニット72は、このデータをプライベートテ
ーブル74に格納する(ステップS5)。バスユニット
50はクリアプログラムである保護プログラムページを
プロセッサ20へ送る(ステップS6)。前述のよう
に、この保護プログラムページだけでは模倣者はゲーム
プログラムの動作を複製できない。
のページを得たならば、当該ページ中の次の命令を実対
するセキュリティチップ30の応答は、プロセッサ20
が分岐すべき先のアドレスである。勿論、条件付き分岐
の場合、プロセッサ20は1つ又は複数の引数をセキュ
リティチップ30へ渡す必要があるであろうし、セキュ
リティチップ30は真アドレスと偽アドレスのいずれか
を計算して返すであろう(ステップS14)。次に、セ
キュリティチップ30はそのアドレスをプロセッサ20
へ渡し(ステップS15)、プロセッサ20はそのアド
レスへジャンプし(ステップS16)、そのアドレスか
ら命令を取り出す(ステップS7へループバックす
る)。このように、プロセッサ20にはどんな種類の分
岐であるか、可能な分岐アドレスが何であるかは全く知
らされずに、分岐のためのアドレスが与えられる。
岐要求が適切であるか否かの評価の両方に利用される。
これをするために、演算ユニット72はプライベートテ
ーブル74の一部として格納されるプライベート分岐テ
ーブルを利用する。この分岐テーブルは分岐全部を格納
する必要はなく、やがて発生する分岐を格納するだけで
よい。この分岐テーブルの分岐エントリー毎に、次に述
べるフィールドが保持される。
選ばれる: 1)無条件ジャンプ 2)条件付きジャンプ 3)サブルーチンコール 4)サブルーチンリターン CONDITION − 条件付きジャンプと共に用い
られるだけであり、テストされる条件を指示する。 ADDRESS 1 − 無条件ジャンプと真条件の無
条件ジャンプの場合にはジャンプ先のアドレスであり、
コールの場合には呼び出されるアドレスであり、リター
ンの場合には使用されない。 ADDRESS 2 − 無条件ジャンプには使用され
ない。偽条件の条件付きジャンプの場合にはジャンプ先
アドリスである。コールの場合にはリターンアドレスで
あり、スタックにセーブされる。リターンの場合には利
用されない。
て発生する分岐のための分岐テーブルのインデックスを
指定もしないし、全く知らされもしない。そのような実
施例においては、分岐テーブルは現在の分岐の後にどの
分岐インデックスが続くべきかを記録している。勿論、
次の分岐はどの分岐が起こっているかに応じて決まるの
で、そのような実施例においては、その情報が次に述べ
る2つのフィールドに格納される。
ムコード中のADDRESS 1の後の最初の分岐のイ
ンデックスを示す。 NEXT BRANCH 2 − プログラムコード中の
ADDRESS 2の後の最初の分岐のインデックスを
示す。 CHECKSUM − 分岐前の全てのプログラムコー
ドに対し期待されるチェックサムである。 EXECUTION TIME − 前の分岐から次の
分岐までの期待される実行時間である。 PASSWORD − 現在の分岐を実行するために必
要とされるパスワードである。
し、したがって他のどのフィールドが利用されるかをも
指示する。例えば、無条件分岐(例えば "goto5”)の
ためのエントリーは、条件も偽条件アドレスも含む必要
がない。勿論、システムによっては、条件コールや条件
付きリターンのような他の分岐も可能である。高度なセ
キュリティシステムでは、NOP分岐もセキュアプログ
ラムに含めてもよい。
定数の比較のためにオペランドと定数で表現してよく
(例えば ”branch if(i>=10)”)、変数と変数の比較
のためにオペランドだけで表現してよい(例えば ”bra
nch if(x<y)”)。比較のために変数が必要な場合、そ
の変数はプロセッサ20により分岐要求の一部としてセ
キュリティチップ30へ渡される。プロセッサ20は、
どの条件が適用されようとしているかについて通知され
る必要はなく、引数としてどの変数をいくつ渡すべきか
を知らされるだけでよい。一実施例では、TYPEフィ
ールドはどの種類の条件フィールドが使用されるかを指
示し、VALUEフィールドは1が使用される場合に定
数値を指示する。
ィールドは、現在要求されている分岐のための次のアド
レスを与える。条件付き分岐の場合、条件が真ならばA
DDRESS1が与えられ、さもなければADDRES
S2が与えられる。無条件分岐の場合、ADDRESS
2は使われない。コールの場合、ADDRESS1はコ
ールされるアドレスでプロセッサ20へ与えられ、一
方、ADDRESS2はコールの次の命令のアドレス
(すなわちリターンアドレス)である。そのADDRE
SS2の値はスタックに置かれ、後に対応したリターン
分岐に用いられる。リターンの場合、どのアドレスフィ
ールドも用いられない。リターンアドレスはスタックよ
り与えられるからである。
サにより実行されることを意図した保護プログラムを示
す。プロセッサは、分岐要求(クリアプログラムの分岐
に代わるもの)に到達すると、分岐要求を出し、分岐要
求のインデックスを条件の評価のために必要な引数と一
緒にセキュリティチップへ渡す。例えば、表2のアドレ
ス4で、ある特定の分岐インデックスの分岐要求が出さ
れる。命令”br_req 1”は、分岐テーブルのエントリー
1が用いられるべきであることを知らせる。しかし、確
信犯的模倣者の中には、分岐要求のインデックスを分岐
情報を抽出するために利用する者がいるかもしれない。
例えば、そのような模倣者は、”br_req1”命令を十分
追跡することにより、この命令がリターン命令に相当す
ることを確認できるかもしれない。次々にインデックス
付けされた分岐要求を解析することにより、各分岐の種
類と条件を確認することができる。
令中のインデックスを除くことができる。命令 ”br_re
q1”と命令 ”br_req2”をプロセッサに利用できるよう
にするのではなく、これら命令は両方ともただ”br_re
q”として知らされる。索引情報はNEXT BRANC
H 1フィールドとNEXT BRANCH 2フィール
ドに格納される。全ての分岐が演算ユニット72により
制御されるから、現在の分岐のアドレスの次の分岐要求
は分かっているため容易に格納される。NEXTBRA
NCH 1フィールドは、ADDRESS 2が発生した
分岐の時に次の分岐のためのインデックスを含む。コー
ルの場合、ADDRESS 1はコールされるサブルー
チンの先頭であり、ADDRESS 2はコール命令の
次の命令のアドレスである。したがって、NEXT B
RANCH 1はサブルーチン中の最初の分岐のインデ
ックスであり、NEXT BRANCH 2はADDRE
SS2アドレスの次の最初の分岐のインデックスであ
る。コールの場合、ADDRESS 2とNEXT AD
DRESS 2は、演算ユニット72内のスタックにプ
ッシュされる。
TIME及びPASSWARDのフィールドは、それら
が用いられる場合には、分岐要求が許可されるか否かを
判断するために用いられる。分岐の後で、バスタップか
らのバス情報が演算ユニット72へ送られ、演算ユニッ
ト72は分岐が見つかるまでバスデータのチッェクサム
をとる。その結果得られたチッェクサムは、格納されて
いるCHECKSUMと比較される。これらチェックサ
ムが相違する場合、演算ユニット72はゲームをそれ以
上進行させない処置をする。チェックサムを、プロセッ
サバス上の全てのトラフィック(当然、変数データは除
く)に対して適用できる。
して分岐と分岐の間の時間が記録され、その時間はEX
ECUTION TIME値と比較される。途中に入り
込む分岐はなく、分岐と分岐の間の命令数は分かってい
るので、プロセッサのクロックレートが分かっていれば
期待される時間の長さは容易に決まる。また、別のリア
ルタイムクロックは必要でない。PRNGが復号化プロ
セスの一部として利用されるときには、PRNGを、そ
れが利用されるか否かにかかわらず、各命令サイクルを
クロックするように設定してよい。そのようにすれば、
余分な命令が入り込むと、PRNGはデータと同期しな
くなりデータを壊すことになろう。
SSWORD値を割り当ててよく、この場合にはプロセ
ッサは、その分岐を発生させるためにはパスワードを与
えなければならない。PASSWORD値は、プロセッ
サの状態とローカルメモリの記憶内容との既知の組合せ
から計算してもよい。
と、プロセッサがクリアプログラムを処理する場合より
時間がかかるかもしれない。コードの実行が時間的に厳
しい場合、プログラムコードの選択したセクションに関
する保護を働かなくさせてもよく、そうするとプロセッ
サ自体で分岐処理を行う。また、処理時間を減らすた
め、時間的に厳しいプログラムコードのために必要な処
理の部分をセキュリティチップに実行させてもよい。
は、命令を実行する前に、それが分岐命令であるかチッ
ェックする(ステップS8)。分岐命令でなければ、プ
ロセッサ20はその命令を実行し(ステップS9)、ペ
ージ中にさらに命令があるかチェックする(ステップS
10)。ほかに命令があるならばプロセッサ20は次の
命令を取り出すが(ステップS7へ戻る)、ほかに命令
がなければ、プロセッサ20はROM32に次のページ
を要求する(ステップS1へ戻る)。
ロセッサ20はそれを処理しないので、分岐要求がセキ
ュリティチップ30へ送られる(ステップS11)。こ
の分岐要求が不適切であるとステップS12で判定され
たときには、演算ユニット72はプロセッサ20を停止
させる(ステップS13)。要求が適切であるために
は、その要求が予期されていなければならず、予期され
た時に発生しなければならず、またバスチェックサムが
正しくなければならない。適切な分岐要求に対するセキ
ュリティチップ30の応答は、プロセッサ20が分岐す
べき先のアドレスである。勿論、条件付き分岐の場合、
プロセッサ20は1つ又は複数の引数をセキュリティチ
ップ30へ渡す必要があるであろうし、セキュリティチ
ップ30は真アドレスと偽アドレスのいずれかを計算し
て返すであろう(ステップS14)。次に、セキュリテ
ィチップ30はそのアドレスをプロセッサ20へ渡し
(ステップS15)、プロセッサ20はそのアドレスへ
ジャンプし(ステップS16)、そのアドレスから命令
を取り出す(ステップS7へループバックする)。この
ように、プロセッサ20にはどんな種類の分岐である
か、可能な分岐アドレスが何であるかは全く知らされず
に、分岐のためのアドレスが与えられる。
岐要求が適切であるか否かの評価の両方に利用される。
これをするために、演算ユニット72はプライベートテ
ーブル74の一部として格納されるプライベート分岐テ
ーブルを利用する。この分岐テーブルは分岐全部を格納
する必要はなく、やがて発生する分岐を格納するだけで
よい。この分岐テーブルの分岐エントリー毎に、次に述
べるフィールドが保持される。
選ばれる: 1)無条件ジャンプ 2)条件付きジャンプ 3)サブルーチンコール 4)サブルーチンリターン CONDITION − 条件付きジャンプと共に用い
られるだけであり、テストされる条件を指示する。 ADDRESS 1 − 無条件ジャンプと真条件の無
条件ジャンプの場合にはジャンプ先のアドレスであり、
コールの場合には呼び出されるアドレスであり、リター
ンの場合には使用されない。 ADDRESS 2 − 無条件ジャンプには使用され
ない。偽条件の条件付きジャンプの場合にはジャンプ先
アドリスである。コールの場合にはリターンアドレスで
あり、スタックにセーブされる。リターンの場合には利
用されない。
て発生する分岐のための分岐テーブルのインデックスを
指定もしないし、全く知らされもしない。そのような実
施例においては、分岐テーブルは現在の分岐の後にどの
分岐インデックスが続くべきかを記録している。勿論、
次の分岐はどの分岐が起こっているかに応じて決まるの
で、そのような実施例においては、その情報が次に述べ
る2つのフィールドに格納される。
ムコード中のADDRESS 1の後の最初の分岐のイ
ンデックスを示す。 NEXT BRANCH 2 − プログラムコード中の
ADDRESS 2の後の最初の分岐のインデックスを
示す。 CHECKSUM − 分岐前の全てのプログラムコー
ドに対し期待されるチックサムである。 EXECUTION TIME − 前の分岐から次の
分岐までの期待される実行時間である。 PASSWORD − 現在の分岐を実行するために必
要とされるパスワードである。
し、したがって他のどのフィールドが利用されるかをも
指示する。例えば、無条件分岐(例えば "goto5”)の
ためのエントリーは、条件も偽条件アドレスも含む必要
がない。勿論、システムによっては、条件コールや条件
付きリターンのような他の分岐も可能である。高度なセ
キュリティシステムでは、NOP分岐もセキュアプログ
ラムに含めてもよい。
定数の比較のためにオペランドと定数で表現してよく
(例えば ”branch if(i>=10)”)、変数と変数の比較
のためにオペランドだけで表現してよい(例えば ”bra
nch if(x<y)”)。比較のために変数が必要な場合、そ
の変数はプロセッサ20により分岐要求の一部としてセ
キュリティチップ30へ渡される。プロセッサ20は、
どの条件が適用されようとしているかについて通知され
る必要はなく、引数としてどの変数をいくつ渡すべきか
を知らされるだけでよい。一実施例では、TYPEフィ
ールドはどの種類の条件フィールドが使用されるかを指
示し、VALUEフィールドは1が使用される場合に定
数値を指示する。
ィールドは、現在要求されている分岐のための次のアド
レスを与える。条件付き分岐の場合、条件が真ならばA
DDRESS1が与えられ、さもなければADDRES
S2が与えられる。無条件分岐の場合、ADDRESS
2は使われない。コールの場合、ADDRESS1はコ
ールされるアドレスでプロセッサ20へ与えられ、一
方、ADDRESS2はコールの次の命令のアドレス
(すなわちリターンアドレス)である。そのADDRE
SS2の値はスタックに置かれ、後に対応したリターン
分岐に用いられる。リターンの場合、どのアドレスフィ
ールドも用いられない。リターンアドレスはスタックよ
り与えられるからである。
サにより実行されることを意図した保護プログラムを示
す。プロセッサは、分岐要求(クリアプログラムの分岐
に代わるもの)に到達すると、分岐要求を出し、分岐要
求のインデックスを条件の評価のために必要な引数と一
緒にセキュリティチップへ渡す。例えば、表2のアドレ
ス4で、ある特定の分岐インデックスの分岐要求が出さ
れる。命令 ”br_req1”は、分岐テーブルのエントリー
1が用いられるべきであることを知らせる。しかし、確
信犯的模倣者の中には、分岐要求のインデックスを分岐
情報を抽出するために利用する者がいるかもしれない。
例えば、そのような模倣者は、”br_req1”命令を十分
追跡することにより、この命令がリターン命令に相当す
ることを確認できるかもしれない。次々にインデックス
付けされた分岐要求を解析することにより、各分岐の種
類と条件を確認することができる。
令中のインデックスを除くことができる。命令 ”br_re
q1”と命令 ”br_req2”をプロセッサに利用できるよう
にするのではなく、これら命令は両方ともただ ”br_re
q”として知らされる。索引情報はNEXT BRANC
H 1フィールドとNEXT BRANCH 2フィール
ドに格納される。全ての分岐が演算ユニット72により
制御されるから、現在の分岐のアドレスの次の分岐要求
は分かっているため容易に格納される。NEXT BR
ANCH 1フィールドは、ADDRESS 2が発生し
た分岐の時に次の分岐のためのインデックスを含む。コ
ールの場合、ADDRESS 1はコールされるサブル
ーチンの先頭であり、ADDRESS 2はコール命令
の次の命令のアドレスである。したがって、NEXT
BRANCH 1はサブルーチン中の最初の分岐のイン
デックスであり、NEXT BRANCH 2はADDR
ESS 2アドレスの次の最初の分岐のインデックスで
ある。コールの場合、ADDRESS 2とNEXT A
DDRESS 2は、演算ユニット72内のスタックに
プッシュされる。
TIME及びPASSWARDのフィールドは、それら
が用いられる場合には、分岐要求が許可されるか否かを
判断するために用いられる。分岐の後で、バスタップか
らのバス情報が演算ユニット72へ送られ、演算ユニッ
ト72は分岐が見つかるまでバスデータのチッェクサム
をとる。その結果得られたチッェクサムは、格納されて
いるCHECKSUMと比較される。これらチェックサ
ムが相違する場合、演算ユニット72はゲームをそれ以
上進行させない処置をする。チェックサムを、プロセッ
サバス上の全てのトラフィック(当然、変数データは除
く)に対して適用できる。
して分岐と分岐の間の時間が記録され、その時間はEX
ECUTION TIME値と比較される。途中に入り
込む分岐はなく、分岐と分岐の間の命令数は分かってい
るので、プロセッサのクロックレートが分かっていれば
期待される時間の長さは容易に決まる。また、別のリア
ルタイムクロックは必要でない。PRNGが復号化プロ
セスの一部として利用されるときには、PRNGを、そ
れが利用されるか否かにかかわらず、各命令サイクルを
クロックするように設定してよい。そのようにすれば、
余分な命令が入り込むと、PRNGはデータと同期しな
くなりデータを壊すことになろう。
SSWORD値を割り当ててよく、この場合にはプロセ
ッサは、その分岐を発生させるためにはパスワードを与
えなければならない。PASSWORD値は、プロセッ
サの状態とローカルメモリの記憶内容との既知の組合せ
から計算してもよい。
と、プロセッサがクリアプログラムを処理する場合より
時間がかかるかもしれない。コードの実行が時間的に厳
しい場合、プログラムコードの選択したセクションに関
する保護を働かなくさせてもよく、そうするとプロセッ
サ自体で分岐処理を行う。また、処理時間を減らすた
め、時間的に厳しいプログラムコードのために必要な処
理の部分をセキュリティチップに実行させてもよい。
れる、演算ユニット72の一部たる分岐ユニット500
を示す。分岐ユニット500は分岐テーブル502から
一つのエントリーを、バスタップ504からデータを、
DATA INバス506から引数を受け取り、これら
入力に基づき、不適切な分岐が要求されたことを示すエ
ラー信号又は適切に要求された分岐のアドレスを出力す
る。ある実施例では分岐アドレスはプロセッサ20へ渡
されるが、別の実施例では分岐アドレスはプロセッサ2
0にどの命令が与えられるかを制御するために用いら
れ、それら命令のためのアドレスはプロセッサには全く
知らせない。
である。分岐テーブル502のあるエントリーが選択さ
れると、VALUE,TYPE,CHECKSUM,P
ASSWORD,TIMING,ADDRESS 1,
ADDRESS 2,NEXT1,NEXT 2のフィー
ルドが出力される。VALUEフィールドは定数と比較
する条件付きジャンプに関する定数であり、減算器50
8の一方の入力となる。減算器508の他方の入力は、
DATA INバスの最後の内容を保持するレジスタ5
10より与えられる。減算器508は可変引数と定数と
の比較の結果を出力し、場合によっては、一方の入力が
他方の入力と比べ大きいか、等しいか、又は小さいかを
示すだけである。減算器512は同様に、レジスタ51
2の出力と、それに接続されたもう一つのレジスタ51
4の出力とを比較する。これら両減算器の出力はコント
ロール部516へ与えられる。
力すべきか否かを判断し、また2つのマルチプレクサ
(MUX)518,520を制御する。MUX518の
出力は分岐アドレスであり、これはADDRESS
1,ADDRESS 2,スタック522より与えられ
るスタックトップ値のいずれか一つより選ばれる。MU
X520の出力は、NEXT 1,NEXT 2,初期
値,スタックトップ値の中の一つである。MUX520
の出力は、次の分岐のためのインデックスを示し、分岐
テーブル502へインデックス入力としてフィードバッ
クされる。初期値は、PENDING線を適切に初期化
するために分岐連鎖中の最初の分岐を指すポインタであ
る。
き、上に指摘したようにMUXのどの出力が有効である
か決定する。すなわち、分岐TYPEが無条件ジャン
プ、コール、又は真条件の条件付きジャンプである時に
はADDRESS 1が選択される。偽条件の条件付き
ジャンプの時にADDRESS 2が選択され、リター
ン分岐の時にスタックトップが選択される。コールの場
合、ADDRESS 2はスタックにプッシュされ、次
のリターンに用いられる。
0のどの出力が有効であるか決定する。すなわち、分岐
TYPEが無条件ジャンプ、コール、又は真条件の条件
付きジャンプの時には、NEXT 1が選択されてPE
NDING線に与えられる。偽条件の条件ジャンプの時
にはNEXT 2が選択され、リターン分岐の時にはス
タックトップが選択される。
02から与えられたCHECKSUM値が、チックサム
ロジック524がバスタップ504より与えられた時に
計算したものと一致しない場合、リアルタイムクロック
76をモニタすることによって得られた実行時間がEX
ECUTION TIME(TIMING)フィールド
により指定された所期の実行時間と一致しない場合、又
は、プロセッサ20により与えられたパスワードがPA
SSWORDフィールドと一致しない場合に、エラー信
号を出力する。
す。スクランブラー106はデマルチプレクサ(DEM
UX)602、MUX604、疑似乱数発生器(PRN
G)606、いくつかのバッファ608からなる。3つ
のバッファ608A,608B,608Cが示されてい
るが、バッファの数は3個に限らない。スクランブラー
106の入力データストリームに対する働きは、入力デ
ータストリームのビット、バイト、ワード又はブロック
の順序を決定論的かつ可逆的方法により並べ替えること
である。
02は、その入力のデータエレメント(ビット、バイ
ト、ワード又はブロック)を、その出力中の現在の疑似
乱数により決まる1つの出力に送る。現在の疑似乱数が
変わると、エレメントが送られ出力が変わる。MUX6
04はバッファにより出力された別々のエレメントスト
リームをまとめて1つのストリームにする。バッファ6
08の構成により、これらエレメントがDEMUX60
2とMUX604の間を移動するのに必要な時間が異な
るため、これらエレメントは並べ替えられる。各バッフ
ァ608は、ヘッドとテールを交替する先入れ先出し
(FIFO)バッファであるか、あるいは、後入れ先出
し(LIFO)バッファとしてヘッドとテールを交替す
るFIFOバッファである。前者の場合には、あるバッ
ファ608へ左から一つのエレメントがシフトインされ
る度に、そのバッファの右側から一つのエレメントがM
UX604へ出力され、バッファへ右側から一つのエレ
メントがシフトインされる度に、左側から一つのエレメ
ントが出力される。後者の場合には、エレメントはバッ
ファに両側から入れられるが、それらエレメントが出力
されるのは右端からである。エレメントがバッファ60
8のどちら側の端よりシフトインされるかは、PRNG
606により出力される値によって制御される。
ば、並べ替えのパターンの発見し、それをリバースする
ことが可能であろう。疑似乱数シーケンスを発見するた
めには、キー値(図2のキーレジスタ64又は図3のキ
ーレジスタ110に格納されている)が分からなければ
ならない。なぜなら、そのキー値はPRNG606の種
として働くからである。勿論、ハードウエアが割高な場
合には、スクランブラー106が伸長器の部分を利用し
てもよいし、あるいは内部の伸長テーブル、例えば確率
予測テーブルやR−コードテーブルのスクランブル又は
変更のためにキー値を用いてもよい。
は、図8に示す疑似乱数発生器(PRNG)700を用
いるとよい。PRNG700に必要なものは一つのキー
シフトレジスタ702、一つの最大長シーケンス(ML
S)シフトレジスタ704、2つのMUX706,70
8、それに一つのXORゲート710だけである。PR
NG700に対する入力は、キークロック712、ML
Sクロック714、KEY INシリアル入力、KEY
LOAD信号及びINIT/RUN信号により与えられ
る。キーシフトレジスタ702は、一旦ロードされれば
キーレジスタ64又は110として利用でき、無停電電
源716により給電される。
706の出力であるが、これはキーシフトレジスタ70
2のループバックされた出力であるかKEY IN入力
のいずれかであり、そのどちらであるかは、MUX70
6のセレクト入力のKEYLOAD信号が付勢されたか
否かにより決まることが図8から分かる。MLSシフト
レジスタ704の入力はMUX708の出力であるが、
これはキーシフトレジスタ702の出力であるかXOR
ゲート710の出力であり、そのいずれであるかは、M
UX708のセレクト入力のINIT/RUN信号がI
NITであるかRUNであるかにより決まることも図8
から分かる。XORゲート710の入力は、MLSシフ
トレジスタ704の出力とMLSシフトレジスタ704
の最終段以外の段からのタップである。使用されるタッ
プとMLSシフトレジスタの段数によって、得られる疑
似乱数シーケンスの長さが決まる。シーケンス長とタッ
プ点の例については、Knuth,D.E.,The Art of
Computer Program,2d.ed.,pp.27−29とそ
のTable1を参照されたい。一実施例では、MLSシフ
トレジスタ704の段数は98であり、キー値のビット
数は98である。ただし、これ以外の長さ及びタップで
も同じように動作する。勿論、キー値のビット数は模倣
者がその値を簡単には推測できないよう十分大きくすべ
きである。98段のMLSシフトレジスタが送出するビ
ットシーケンスは、298−1ビット毎に繰り返すだけで
ある。このような多段数の場合、シフトレジスタは最大
長である必要はない。レジスタを最大長にしないことの
一つの利点は、最大長のシフトレジスタのためのタップ
のセットは当該分野で知られているので、非最大長のシ
フトレジスタの方がリバースエンジニアにとって面倒で
あろうという点である。
N入力にキーを与え、キー値がロードされるまでキーク
ロック712をクロッキングすることにより、キー値が
キーシフトレジスタ702に初期ロードされる。キー値
がロードされたならばKEYLOAD信号は消勢される
ため、キークロック712のクロッキングによりキーシ
フトレジスタ702内のキー値が循環させられるだけで
ある。KEY LOAD信号は消勢したままにすべきで
あるが、これはリーディング”1”ビットをキーの前に
置くことにより行ってもよい。この場合、当該ビットは
キーシフトレジスタ702の出力に達した時にフリップ
フロップ(不図示)をセットするために使われる。この
フリップフロップによって、KEY LOAD信号が付
勢され、また無停電電源716により給電されてよいか
否かが制御されるであろう。
トレジスタ内で循環させられる。INIT/RUN信号
がINITに設定された時に、キー値は、キークロック
714と一緒に刻時するMLSクロック714によって
クロッキングされてMLSシフトレジスタ704に入力
される。MLSシフトレジスタ704は、ロードされる
と、その内容を循環させるが、同内容はXORゲート7
10により変更され、当該技術分野において知られてい
るように疑似乱数の最大長シーケンスを生成する。この
シーケンスの疑似乱数はMLSシフトレジスタ704よ
り並列に読み出すことができる。今述べたような低コス
トのPRNGによれば、多重キーの実現が容易になる。
必要なハードウエア及び/又はソフトウエアのエンドユ
ーザ部分にしかアクセスできない模倣者によるプログラ
ムデータのコピーを防止するためのシステムについて以
上に論じた。それら例は、ゲームカートリッジで提供さ
れてゲーム機で利用されるゲームプログラムのプロテク
トに関する特別な用途に関するものであったが、それ以
外の用途についても述べた。さらに、プログラムが主と
してソフトウエアとして与えられる場合でも、わずかな
ハードウエアコンポーネントが提供されさえすれば、本
発明は利用可能である。しかし、本発明の従来技術より
優れている点は、プログラムデータがセキュリティチッ
プにより復号化されるまでは暗号化されたままであり、
そしてまた、プロセッサに与えられるのはプログラムデ
ータ全体の一部でしかない、すなわちユーザによって与
えられた特定の入力セットに対しフローが決まるプログ
ラムの具体的動作例を実行するためのプログラムコード
しか利用可能にならない、ということである。プロセッ
サに与えられなかったデータは、そのプログラムデータ
をプロセッサが要求するのに適切なタイミングであると
分かった時点でだけプロセッサに与えられるか、あるい
は全く与えられない。後者の場合、セキュリティチップ
が、プログラムデータ全部を与えられたならばプロセッ
サによりなされるであろう動作を実行する。一実施例で
は、セキュリティタップに保有される情報は分岐情報で
ある。したがって、プロセッサが分岐命令に出会った時
には、セキュリティチップの支援がないとその命令を完
了できない。
ップの内部構造及び動作、暗号化プログラムデータを生
成するためのシステム、通常動作中及び模倣者からの攻
撃にさらされた動作中におけるセキュリティチップとプ
ロセッサとの相互動作、並びに格納されたキー値に基づ
いた低コストの疑似乱数発生器について説明した。
ものであって、限定することを意図したものではない。
ここに開示する内容を検討すれば、当業者には本発明の
多くの変形が明らかになろう。一例にすぎないが、以上
の説明において、ビデオゲームを違法な複製と使用から
保護する本発明の実施例を述べたが、ここに開示したこ
とから本発明のゲーム以外への応用は理解されよう。そ
の他の変形を以下に述べる。
おいては、プレーヤーが残した”生命”数と、プレーヤ
ーが次の段階へ進むまでの残時間の長さをセキュリティ
チップが監視する。セキュリティチップは、プログラム
データを一度に1レベルずつ復号化するので、最初はゲ
ームの第1レベルのためのプログラムデータしか復号化
しない。プログラムデータは初期値を含んでいるが、こ
れらの初期値はセキュリティチップの外部に明示される
ことは決してないもので、当該レベルのためのタイマー
を設定するために用いられる。プレイヤーがゲームをプ
レイしている時に、プログラムは一定の事象が生じたこ
とをセキュリティチップに知らせる。プロセッサからの
情報が期待通りであれば、ゲームは正常にプレイされ
る。しかし、その情報が期待通りでない場合には、タイ
マーに時間が加算されるか、又は”生命”が除かれる。
タイマーの時間が増えると、プレイヤーは次のレベルへ
達するために待たなければならない時間が増加する。こ
の時間が、プログラムが意図したところと異なった動作
をすることによりしばしば十分に増加すると、タイマー
は決して時間切れにならないので、プレイヤーは第1レ
ベルにいつづけることになる。この方法がセキュリティ
チップで単にプロセッサを遮断する方法に比べて有利な
点は、プログラムのどこでセキュリティチップが最初に
問題を検出したかはっきりしないことである。
い。プロセッサが誤り許容(fault-tolernat)システム
の一部であるときには、それが模倣者の攻撃を受けやす
いか否かにかかわらず、プロセッサが誤りを起こした後
にそのプロセッサに動作を続けさせないための手段とし
てセキュリティチップを利用できる。同じセキュリティ
チップを、不適切な実行が検知された時にプロセッサを
停止させあるいは警告を発生させるために用いることが
できるが、その予期しない動作がハードウエア又はソフ
トウエアにより引き起こされ、模倣者が故意に行ったこ
とが原因ではないことが前提である。
は画像処理を行うかもしれない。画像処理では、たたみ
込みが必要となろう。たたみ込みは多数の乗算と一つの
加算の連続として行われる。セキュリティチップは、プ
ロセッサのデータバスをモニターできるので、乗算結果
がバス上に現れた時に加算を実行することができる。そ
の和が必要な時には、プロセッサはそれをセキュリティ
チップに要求する。セキュリティチップなしでプロセッ
サを動作させると、たたみ込みを間違うか、あるいは、
プロセッサ自体で累積を行わなければならないためプロ
セッサの動作が遅くなるであろう。
伸長器のエレメントを復号化処理に利用してもよい。例
えば、図7は伸長器のバッファを用いて構成し得るデー
タスクランブラーを示す。また、伸長器がエントロピー
エンコーダーの場合、セキュリティチップはキー値を伸
長処理のための初期パラメータ、例えば初期確率値を生
成するために利用してよい。こうすると、エントロピー
コーダーのスタート時、ビットそのものから確率を推定
できるだけのビットが得られる前に起きやすい1対1変
換を防ぐというもう一つの利点が得られる。
を検出した時にプロセッサを停止させるにおよばない。
他の選択肢は、ランダムな時間だけ遅延させた後にプロ
セッサをリセットすること、疑似乱数をデコードデータ
として出力すること、あるいは、PRNGが出力中のデ
ータを徐々に低下させるようにコンプリメントイネーブ
リング(complement enabling)または他の方法により
PRNGを調整することである。
れば、プログラムを非保護環境で走らせる場合において
も、プログラムの不正コピーを不可能あるいは事実上不
可能になり、また、集積回路チップの隔離等の技術を持
つ熟練した確信犯的模倣者に対しても対抗できるため、
より確実にプログラムを不正コピーから保護することが
できるという効果を得られる。
た、セキュリティチップを含むカートリッジ上に、プロ
グラムデータが格納される本発明のコンピュータシステ
ムのブロック図である。
ログラムを暗号化するためのシステムのブロック図であ
る。
ートである。
ートである。
である。
である。
る。
る。
る。
る。
る。
る。
る。
る。
る。
る。
る。
ト(D)を示す図である。
る。
る。
ストを示す図である。
Claims (32)
- 【請求項1】保護プログラムをコンピュータシステム内
で実行し、該コンピュータシステムから該保護プログラ
ムの動作可能な複製を作成することをできなくする装置
であって、 該保護プログラムデータが暗号化された形で格納される
プログラムメモリ、 該プログラムメモリに結合されたセキュリティチップ、
これは該保護プログラムの部分をクリア部分と残余部分
とに復号化する手段、 該クリア部分をプロセッサによりアクセスできるメモリ
ロケーションに与える手段、及び該保護プログラムの該
残余部分を格納するための、該プロセッサにより直接的
にアクセスできない残余メモリからなり、 該プロセッサにより使用するため該残余部分の部分集合
を要求する手段、及び該要求されたサブセットが、該プ
ロセッサにある格納された状態が与えられたときに要求
されることを期待されるサブセットであることをチッェ
クする、該セキュリティチップ内部の手段、を具備する
プログラム保護装置。 - 【請求項2】 請求項1記載のプログラム保護装置にお
いて、該プログラムメモリに格納される該保護プログラ
ムはプログラム部分と剰余部分とが別々に格納されるこ
とを特徴とするプログラム保護装置。 - 【請求項3】 請求項1記載のプログラム保護装置にお
いて、該残余部分は該保護プログラムの分岐命令の集合
であることを特徴とするプログラム保護装置。 - 【請求項4】 請求項3記載のプログラム保護装置にお
いて、該セキュリティチップは最近実行された分岐に基
づいて分岐命令をキャッシュするための手段をさらに有
することを特徴とするプログラム保護装置。 - 【請求項5】 請求項1記載のプログラム保護装置にお
いて、該分岐を復号化する手段は復号化キーを用いる構
成であることを特徴とするプログラム保護装置。 - 【請求項6】 請求項5記載のプログラム保護装置にお
いて、該復号化キーは揮発性メモリに格納されることを
特徴とするプログラム保護装置。 - 【請求項7】 請求項6記載のプログラム保護装置にお
いて、該揮発性メモリは該セキュリティチップ上に配置
され、該セキュリティチップは該揮発性メモリの少なく
とも一部の上層にあってそれを覆い隠す上層回路を有す
ることを特徴とするプログラム保護装置。 - 【請求項8】 請求項7記載のプログラム保護装置にお
いて、該上層回路が該揮発性メモリの電源と接続される
ことにより、該上層回路が除去されると該揮発性メモリ
に対する電力供給が断たれることを特徴とするプログラ
ム保護装置。 - 【請求項9】 該プロセッサの命令実行速度を判定する
ためのクロック手段を該セキュリティチップ内部に持
ち、該セキュリティチップは該命令実行速度が期待され
た範囲内であると該クロック手段が判定した時にのみプ
ロセッサ要求に応答することを特徴とする請求項1記載
のプログラム保護装置。 - 【請求項10】 該保護プログラムを復号化後に伸長す
るためのデータ伸長器をさらに有し、該保護プログラム
は暗号化前に圧縮されることを特徴とする請求項1記載
のプログラム保護装置。 - 【請求項11】 請求項10記載のプログラム保護装置
において、該伸長器はエントロピーデコーダーであるこ
とを特徴とするプログラム保護装置。 - 【請求項12】 プロセッサバス上のバスアクセスのチ
ッェックサムを測定するためのチッェクサム手段を該セ
キュリティチップ内部に持ち、該セキュリティチップは
該測定されたチッェックサムが所期のチェックサムと一
致すると判定した時にのみプロセッサ要求に応答するこ
とを特徴とする請求項1記載のプログラム保護装置。 - 【請求項13】 キー値により決まる可逆的かつ決定論
的パターンに従い該保護プログラムのデータエレメント
を並べ替えるためのデータスクランブラーをさらに有
し、該保護プログラムは該データスクランブラーの逆装
置により並べ替えられてから該プログラムメモリに格納
されることを特徴とする請求項1記載のプログラム保護
装置。 - 【請求項14】 請求項13記載のプログラム保護装置
において、該データスクランブラーは複数の先入れ先出
しバッファからなることを特徴とするプログラム保護装
置。 - 【請求項15】 請求項13記載のプログラム保護装置
において、該可逆的かつ決定論的パターンは疑似乱数発
生器の出力を参照することによって生成されることを特
徴とするプログラム保護装置。 - 【請求項16】 請求項1記載のプログラム保護装置に
おいて、該復号化の手段は該キー値及び疑似乱数発生器
の出力に基づいて動作することを特徴とするプログラム
保護装置。 - 【請求項17】 該チェックのための手段が期待されな
い部分集合が要求されたことを検知した時に該セキュリ
ティチップの動作及び該プログラムのフローを変更する
手段をさらに有し、該変更後の動作は該プログラムフロ
ー又は動作に否定的効果をもたらすことを特徴とする請
求項1記載のプログラム保護装置。 - 【請求項18】 請求項17記載のプログラム保護装置
において、該変更する手段はプロセッサを停止させる手
段であることを特徴とするプログラム保護装置。 - 【請求項19】 プログラムデータから分岐命令を抽出
する分岐セパレータ、 該プログラムデータの該抽出された分岐命令及び残余部
分を圧縮して圧縮データを作成する圧縮器、及び該圧縮
データを暗号化する暗号化器を具備する、プログラムデ
ータを不正コピーから保護するためのプログラム保護装
置。 - 【請求項20】 請求項19記載のプログラム保護装置
において、該分岐セパレータは、プログラムデータのチ
ェックサムを表すチェックサムデータを自動的に生成す
る手段、及び、プログラムデータ処理のタイミングを評
価するために用いられるタイミング情報を自動的に生成
する手段を有し、該チェックサムデータ及び該タイミン
グ情報は該圧縮器により圧縮され、そして該暗号化器に
より暗号化されることを特徴とするプログラム保護装
置。 - 【請求項21】 非保護プロセッサのバスを介して取得
される情報から保護プログラムを使用可能な形でコピー
することを防止するように該保護プログラムを実行する
方法であって、 プログラムデータの一つのブロックを求める該非保護プ
ロセッサからの要求を受け付けるステップ、ただし該プ
ログラムデータのブロックは一つ以上のプログラム命令
又は一つ以上のプログラムデータエレメントの中の少な
くとも一つを含む、 該プログラムデータのブロックを、安全な方法により、
クリア部分と残余部分とに復号化するステップ、 該残余部分のエレメントを求める該非保護プロセッサか
らの要求を受け付けるステップ、 該要求が適切であることを、該非保護プロセッサの状態
及び前の要求を与えられるとしてチェックするステッ
プ、 該残余部分のエレメントを求める該非保護プロセッサか
らの該要求を処理するステップ、及び該要求に応答する
ステップを有し、秘められた残余部分のエレメントは、
要求に対する応答の情報内容だけを参照しても容易には
確認されないプログラム保護方法。 - 【請求項22】 プログラムをクリア部分と残余部分と
に分割して保護プログラムを形成するステップ、及び、
該保護プログラムの不正コピーを作ろうとする攻撃者に
よりアクセスできるメモリに該保護プログラムを格納す
る前に、該保護プログラムを暗号化するステップをさら
に有することを特徴とする請求項21記載のプログラム
保護方法。 - 【請求項23】 請求項22記載のプログラム保護方法
において、該分割のステップは該保護プログラムの分岐
命令を該保護プログラムの他の命令から分離するステッ
プであることを特徴とするプログラム保護方法。 - 【請求項24】 請求項21記載のプログラム保護方法
において、該復号化のステップは復号化キーを用いて行
われることを特徴とするプログラム保護方法。 - 【請求項25】 該復号化キーを揮発性メモリに格納す
るステップをさらに有することを特徴とする請求項24
記載のプログラム保護方法。 - 【請求項26】 該揮発性メモリに対する電源を用意す
るステップ、及び、該揮発性メモリを回路で覆うステッ
プをさらに有し、該回路は、それが乱されると該電源が
該揮発性メモリから除去され、かつ、それを除去しない
と該揮発性メモリの内容を容易に測定することができな
いものである、ことを特徴とする請求項25記載のプロ
グラム保護方法。 - 【請求項27】 情報を求める要求に対する応答を与え
る前に、該プロセッサの命令実行の速度をチェックする
ステップをさらに有することを特徴とする請求項21記
載のプログラム保護方法。 - 【請求項28】 該保護プログラムを復号化後に伸長す
るステップをさらに有し、該保護プログラムは暗号化前
に圧縮されることを特徴とする請求項21記載のプログ
ラム保護方法。 - 【請求項29】 プロセッサバス上のバスアクセスのチ
ェックサムを測定するステップ、該チェックサムを、実
行されることが予期された保護プログラムの命令に対し
期待される、予め計算されたチェックサムと比較するス
テップ、及び、該チェックサムと該予め計算されたチェ
ックサムとが異なる時に該保護プログラムが妨害されず
に動作することを阻止するステップをさらに有すること
を特徴とする請求項21記載のプログラム保護方法。 - 【請求項30】 該保護プログラムのデータエレメント
を攻撃者によりアクセス可能なメモリに格納する前に、
該データエレメントの順序をキー値により決定される可
逆的かつ決定論的パターンに従ってスクランプルするス
テップ、及び、該プロセッサの適切な要求があった時に
該データエレメントの順序をデスクランブルするステッ
プをさらに有することを特徴とする請求項21記載のプ
ログラム保護方法。 - 【請求項31】 請求項30記載のプログラム保護方法
において、該スクランブルするステップは該可逆的かつ
決定論的パターンを生成するために用いられる疑似乱数
を発生するステップを含むことを特徴とするプログラム
保護方法。 - 【請求項32】 プログラムコードを非分岐命令の系列
及び分岐命令の系列に分けるステップ、 該非分岐命令を圧縮して第1の圧縮データの集合を生成
するステップ、 該分岐命令を圧縮して第2の圧縮データの集合を生成す
るステップ、及び該第1の圧縮データの集合及び該第2
の圧縮データの集合を暗号化するステップを有する、プ
ログラムを不正コピーから保護するプログラム保護方
法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP09510596A JP3683031B2 (ja) | 1996-04-17 | 1996-04-17 | プログラム保護装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP09510596A JP3683031B2 (ja) | 1996-04-17 | 1996-04-17 | プログラム保護装置 |
Related Child Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2005003878A Division JP4229330B2 (ja) | 2005-01-11 | 2005-01-11 | 暗号プログラム生成装置及び暗号プログラム生成方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH09282156A true JPH09282156A (ja) | 1997-10-31 |
| JP3683031B2 JP3683031B2 (ja) | 2005-08-17 |
Family
ID=14128598
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP09510596A Expired - Fee Related JP3683031B2 (ja) | 1996-04-17 | 1996-04-17 | プログラム保護装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3683031B2 (ja) |
Cited By (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2002251274A (ja) * | 2000-11-30 | 2002-09-06 | Seiko Epson Corp | 著作物の印刷管理システム、方法及び記録媒体 |
| JP2002540443A (ja) * | 1999-01-29 | 2002-11-26 | ジェネラル・インストルメント・コーポレーション | セキュアなマイクロプロセッサ中の単一のトランザクションにおける、解読および認証を用いた認証の実施 |
| JP2003510684A (ja) * | 1999-09-20 | 2003-03-18 | ギーゼッケ ウント デフリエント ゲーエムベーハー | プログラム実行を保護するための方法 |
| JP2005136391A (ja) * | 2003-10-09 | 2005-05-26 | Matsushita Electric Ind Co Ltd | 回路基板、回路基板の設計支援装置及び方法、設計支援プログラム、及び設計支援プログラム記録媒体 |
| WO2006009081A1 (ja) * | 2004-07-16 | 2006-01-26 | Matsushita Electric Industrial Co., Ltd. | アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法 |
| JP2006522375A (ja) * | 2002-12-12 | 2006-09-28 | エイアールエム リミテッド | データ処理システムにおける処理動作マスキング |
| JP2007503626A (ja) * | 2003-07-23 | 2007-02-22 | カン シウン,ピン | デジタルメディアカートリッジのシステム及び方法 |
| JP2008118676A (ja) * | 1999-09-02 | 2008-05-22 | Cryptography Research Inc | デジタルコンテンツの著作権侵害を防止するための方法 |
| JP2009251794A (ja) * | 2008-04-03 | 2009-10-29 | Renesas Technology Corp | 情報処理装置、命令コードの暗号化方法および暗号化命令コードの復号化方法 |
| JP2009252142A (ja) * | 2008-04-10 | 2009-10-29 | Renesas Technology Corp | データ処理装置 |
| JP2009258850A (ja) * | 2008-04-14 | 2009-11-05 | Mega Chips Corp | 半導体メモリ装置 |
| JP2009294891A (ja) * | 2008-06-05 | 2009-12-17 | Rohm Co Ltd | 記憶装置 |
| JP2009294893A (ja) * | 2008-06-05 | 2009-12-17 | Rohm Co Ltd | 記憶装置及びデータ書込装置 |
| JP2011511354A (ja) * | 2008-02-01 | 2011-04-07 | トムソン ライセンシング | コピー防止機能付きソフトウェアカートリッジ |
| JP2012526310A (ja) * | 2009-05-06 | 2012-10-25 | イルデト カナダ コーポレーション | ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護 |
| CN109697173A (zh) * | 2018-12-11 | 2019-04-30 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向信息安全的嵌入式计算机SiP模块设计方法及电路 |
Citations (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0245829A (ja) * | 1988-07-11 | 1990-02-15 | Intel Corp | 媒体に格納されているコンピュータプログラムウの無許可アクセスを検出する方法および回路 |
| JPH03266051A (ja) * | 1990-03-16 | 1991-11-27 | Sega Enterp Ltd | ビデオゲームシステム及び情報処理装置 |
| JPH04259036A (ja) * | 1991-02-13 | 1992-09-14 | Nec Corp | プログラム変換方式及びプログラム不正動作検出機構 |
| JPH053957A (ja) * | 1991-06-28 | 1993-01-14 | Sankyo Kk | 遊技機制御用コンピユータ |
| JPH0538385A (ja) * | 1991-08-07 | 1993-02-19 | Sega Enterp Ltd | プログラムコピー防止装置 |
| JPH05151088A (ja) * | 1991-11-29 | 1993-06-18 | Toshiba Corp | 記憶システムにおける記憶保護方式およびその装置 |
| JPH05197632A (ja) * | 1992-01-22 | 1993-08-06 | Nec Corp | Romデータセキュリティシステム |
| JPH07129474A (ja) * | 1993-10-28 | 1995-05-19 | Casio Comput Co Ltd | 装置保護方法 |
| JPH07141261A (ja) * | 1993-11-16 | 1995-06-02 | Ricoh Co Ltd | 暗号装置 |
| JPH07200286A (ja) * | 1993-11-15 | 1995-08-04 | At & T Corp | ソフトウエア保護システムおよびソフトウエア検証方法 |
| JPH07239837A (ja) * | 1993-12-21 | 1995-09-12 | General Instr Corp Of Delaware | 秘密保護マイクロプロセッサのためのクロック周波数変調 |
| JPH07319687A (ja) * | 1993-06-02 | 1995-12-08 | Kawasaki Steel Corp | データフロー制御装置およびメモリ装置 |
| JPH07325714A (ja) * | 1994-06-01 | 1995-12-12 | Sega Enterp Ltd | データセキュリティシステム |
| JPH0887235A (ja) * | 1993-07-12 | 1996-04-02 | Pumpkin House:Kk | 暗号鍵共有方式 |
| JPH0944408A (ja) * | 1995-08-02 | 1997-02-14 | Ricoh Co Ltd | 半導体記憶装置とそのデータの機密保護方法 |
| US5675645A (en) * | 1995-04-18 | 1997-10-07 | Ricoh Company, Ltd. | Method and apparatus for securing executable programs against copying |
-
1996
- 1996-04-17 JP JP09510596A patent/JP3683031B2/ja not_active Expired - Fee Related
Patent Citations (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0245829A (ja) * | 1988-07-11 | 1990-02-15 | Intel Corp | 媒体に格納されているコンピュータプログラムウの無許可アクセスを検出する方法および回路 |
| JPH03266051A (ja) * | 1990-03-16 | 1991-11-27 | Sega Enterp Ltd | ビデオゲームシステム及び情報処理装置 |
| JPH04259036A (ja) * | 1991-02-13 | 1992-09-14 | Nec Corp | プログラム変換方式及びプログラム不正動作検出機構 |
| JPH053957A (ja) * | 1991-06-28 | 1993-01-14 | Sankyo Kk | 遊技機制御用コンピユータ |
| JPH0538385A (ja) * | 1991-08-07 | 1993-02-19 | Sega Enterp Ltd | プログラムコピー防止装置 |
| JPH05151088A (ja) * | 1991-11-29 | 1993-06-18 | Toshiba Corp | 記憶システムにおける記憶保護方式およびその装置 |
| JPH05197632A (ja) * | 1992-01-22 | 1993-08-06 | Nec Corp | Romデータセキュリティシステム |
| JPH07319687A (ja) * | 1993-06-02 | 1995-12-08 | Kawasaki Steel Corp | データフロー制御装置およびメモリ装置 |
| JPH0887235A (ja) * | 1993-07-12 | 1996-04-02 | Pumpkin House:Kk | 暗号鍵共有方式 |
| JPH07129474A (ja) * | 1993-10-28 | 1995-05-19 | Casio Comput Co Ltd | 装置保護方法 |
| JPH07200286A (ja) * | 1993-11-15 | 1995-08-04 | At & T Corp | ソフトウエア保護システムおよびソフトウエア検証方法 |
| JPH07141261A (ja) * | 1993-11-16 | 1995-06-02 | Ricoh Co Ltd | 暗号装置 |
| JPH07239837A (ja) * | 1993-12-21 | 1995-09-12 | General Instr Corp Of Delaware | 秘密保護マイクロプロセッサのためのクロック周波数変調 |
| JPH07325714A (ja) * | 1994-06-01 | 1995-12-12 | Sega Enterp Ltd | データセキュリティシステム |
| US5675645A (en) * | 1995-04-18 | 1997-10-07 | Ricoh Company, Ltd. | Method and apparatus for securing executable programs against copying |
| JPH0944408A (ja) * | 1995-08-02 | 1997-02-14 | Ricoh Co Ltd | 半導体記憶装置とそのデータの機密保護方法 |
Cited By (19)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2002540443A (ja) * | 1999-01-29 | 2002-11-26 | ジェネラル・インストルメント・コーポレーション | セキュアなマイクロプロセッサ中の単一のトランザクションにおける、解読および認証を用いた認証の実施 |
| US9569628B2 (en) | 1999-09-02 | 2017-02-14 | Cryptography Research, Inc. | Specialized circuitry for cryptographic authentication and other purposes |
| JP2008118676A (ja) * | 1999-09-02 | 2008-05-22 | Cryptography Research Inc | デジタルコンテンツの著作権侵害を防止するための方法 |
| JP2003510684A (ja) * | 1999-09-20 | 2003-03-18 | ギーゼッケ ウント デフリエント ゲーエムベーハー | プログラム実行を保護するための方法 |
| JP2002251274A (ja) * | 2000-11-30 | 2002-09-06 | Seiko Epson Corp | 著作物の印刷管理システム、方法及び記録媒体 |
| JP2006522375A (ja) * | 2002-12-12 | 2006-09-28 | エイアールエム リミテッド | データ処理システムにおける処理動作マスキング |
| EP1661005A4 (en) * | 2003-07-23 | 2010-03-24 | Ping Kang Hsiung | DIGITAL MEDIA CASSETTE SYSTEM AND METHOD |
| JP2007503626A (ja) * | 2003-07-23 | 2007-02-22 | カン シウン,ピン | デジタルメディアカートリッジのシステム及び方法 |
| JP2005136391A (ja) * | 2003-10-09 | 2005-05-26 | Matsushita Electric Ind Co Ltd | 回路基板、回路基板の設計支援装置及び方法、設計支援プログラム、及び設計支援プログラム記録媒体 |
| CN100465982C (zh) * | 2004-07-16 | 2009-03-04 | 松下电器产业株式会社 | 应用执行装置及应用执行装置的应用执行方法 |
| WO2006009081A1 (ja) * | 2004-07-16 | 2006-01-26 | Matsushita Electric Industrial Co., Ltd. | アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法 |
| JP2011511354A (ja) * | 2008-02-01 | 2011-04-07 | トムソン ライセンシング | コピー防止機能付きソフトウェアカートリッジ |
| JP2009251794A (ja) * | 2008-04-03 | 2009-10-29 | Renesas Technology Corp | 情報処理装置、命令コードの暗号化方法および暗号化命令コードの復号化方法 |
| JP2009252142A (ja) * | 2008-04-10 | 2009-10-29 | Renesas Technology Corp | データ処理装置 |
| JP2009258850A (ja) * | 2008-04-14 | 2009-11-05 | Mega Chips Corp | 半導体メモリ装置 |
| JP2009294891A (ja) * | 2008-06-05 | 2009-12-17 | Rohm Co Ltd | 記憶装置 |
| JP2009294893A (ja) * | 2008-06-05 | 2009-12-17 | Rohm Co Ltd | 記憶装置及びデータ書込装置 |
| JP2012526310A (ja) * | 2009-05-06 | 2012-10-25 | イルデト カナダ コーポレーション | ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護 |
| CN109697173A (zh) * | 2018-12-11 | 2019-04-30 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向信息安全的嵌入式计算机SiP模块设计方法及电路 |
Also Published As
| Publication number | Publication date |
|---|---|
| JP3683031B2 (ja) | 2005-08-17 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5675645A (en) | Method and apparatus for securing executable programs against copying | |
| Henson et al. | Memory encryption: A survey of existing techniques | |
| Best | Preventing software piracy with crypto-microprocessors | |
| US4465901A (en) | Crypto microprocessor that executes enciphered programs | |
| JP3683031B2 (ja) | プログラム保護装置 | |
| US6334189B1 (en) | Use of pseudocode to protect software from unauthorized use | |
| US6006328A (en) | Computer software authentication, protection, and security system | |
| US6480959B1 (en) | Software system and associated methods for controlling the use of computer programs | |
| US6643775B1 (en) | Use of code obfuscation to inhibit generation of non-use-restricted versions of copy protected software applications | |
| US7464269B2 (en) | Secure method and system for handling and distributing digital media | |
| US8065532B2 (en) | Cryptographic architecture with random instruction masking to thwart differential power analysis | |
| US8307215B2 (en) | System and method for an autonomous software protection device | |
| JPH0260009B2 (ja) | ||
| KR20010023731A (ko) | 탬퍼방지 방법 및 장치 | |
| WO1998009209B1 (en) | Systems and methods for secure transaction management and electronic rights protection | |
| WO1997026732A1 (en) | Method for stega-cipher protection of computer code | |
| TWI490724B (zh) | 用於加載至少一個軟體模組的代碼的方法 | |
| US20130283396A1 (en) | System and method for limiting execution of software to authorized users | |
| US7350081B1 (en) | Secure execution of downloaded software | |
| CN103856481A (zh) | 使用在线认证和经加密代码执行的代码保护 | |
| CA1147823A (en) | Crypto microprocessor for executing enciphered programs | |
| CN109325322B (zh) | 用于嵌入式平台的软件知识产权保护系统和方法 | |
| JP2004129227A (ja) | 情報再生装置、セキュアモジュールおよび情報再生方法 | |
| Gilmont et al. | Architecture of security management unit for safe hosting of multiple agents | |
| JP4229330B2 (ja) | 暗号プログラム生成装置及び暗号プログラム生成方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20041012 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041109 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050111 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050222 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050425 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050524 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050524 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090603 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090603 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100603 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110603 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110603 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120603 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130603 Year of fee payment: 8 |
|
| LAPS | Cancellation because of no payment of annual fees |