(57)【要約】【課題】【解決手段】デバイス１００のプログラムメモリ１０２に格納される制御プログラムは、改竄から保護すべき部分として誤り訂正符号が付加された保護プログラムと、前記保護プログラムの誤り訂正を行う命令と、誤り訂正の結果として得られる訂正プログラムを呼び出す命令を含む非保護プログラムとを含む。マイコン１０１は、プログラムメモリ１０２から読み出した保護プログラムに対して、誤り訂正回路１０４で誤り訂正を行わせ、訂正後のプログラムを書き換え可能メモリ１０３から読み出して実行する。【選択図】　図１
2004005562.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵを有するデバイスの動作を前記ＣＰＵを介して制御するためのコンピュータプログラムであって、
誤り訂正符号が付加された保護プログラムと、
前記保護プログラムの誤り訂正を行う命令と、前記誤り訂正の結果として得られる訂正プログラムを呼び出す命令とを含む非保護プログラムとを含むことを特徴とするコンピュータプログラム。
【請求項２】
誤り訂正回路を含むデバイスを制御するためのプログラムであって、
前記保護プログラムの誤り訂正を行う命令は、前記誤り訂正回路に誤り訂正を実行させるための命令である、請求項１に記載のコンピュータプログラム。
【請求項３】
前記訂正プログラムは、
少なくとも一つの関数と、
前記訂正プログラム内における各関数の相対的な番地を示す相対番地リストとを含む、請求項１に記載のコンピュータプログラム。
【請求項４】
前記保護プログラムは、前記誤り訂正符号の付加と可逆的なデータ変換処理の両方を施されており、
前記非保護プログラムは、前記データ変換処理の逆変換処理を行う命令を含む、請求項１に記載のコンピュータプログラム。
【請求項５】
前記データ変換処理の逆変換処理を行う復元回路を含むデバイスを制御するためのプログラムであり、
前記逆変換を行う命令は、前記復元回路に逆変換処理を実行させるための命令である、請求項４に記載のコンピュータプログラム。
【請求項６】
前記保護プログラムに対して誤り訂正および前記逆変換処理を施した結果として得られる訂正プログラムが、
少なくとも一つの関数と、
前記訂正プログラム内における各関数の相対的な番地を示す相対番地リストとを含む、請求項４に記載のコンピュータプログラム。
【請求項７】
請求項１〜６のいずれか一項に記載のコンピュータプログラムを記録した記録媒体。
【請求項８】
ＣＰＵと、プログラムメモリと、書き換え可能メモリとを備えたデバイスであって、
前記プログラムメモリは、前記ＣＰＵを介して当該デバイスを制御するコンピュータプログラムを格納し、
前記コンピュータプログラムは、
誤り訂正符号が付加された保護プログラムと、
前記保護プログラムの誤り訂正を行う命令と、前記誤り訂正の結果として得られる訂正プログラムを呼び出す命令とを含む非保護プログラムとを含み、
前記書き換え可能メモリは、前記誤り訂正の結果として得られた訂正プログラムを格納し、
前記ＣＰＵは、前記書き換え可能メモリから前記訂正プログラムを読み出して実行することを特徴とするデバイス。
【請求項９】
前記保護プログラムから誤りが検出された場合、誤りの訂正が不可能であれば、デバイスの少なくとも一部分の動作を制限する、請求項８に記載のデバイス。
【請求項１０】
前記保護プログラムから誤りが検出された場合、誤りの訂正が可能か否かにかかわらず、デバイスの少なくとも一部分の動作を制限する、請求項８に記載のデバイス。
【請求項１１】
誤り訂正回路をさらに含み、
前記保護プログラムの誤り訂正を行う命令は、前記誤り訂正回路に誤り訂正を実行させるための命令である、請求項８に記載のデバイス。
【請求項１２】
前記ＣＰＵは、前記訂正プログラムの実行後、当該訂正プログラムを前記書き換え可能メモリから消去する、請求項８に記載のデバイス。
【請求項１３】
前記保護プログラムは、前記誤り訂正符号の付加と可逆的なデータ変換処理の両方を施されており、
前記非保護プログラムは、前記データ変換処理の逆変換処理を行う命令を含む、請求項８に記載のデバイス。
【請求項１４】
前記データ変換処理の逆変換処理を行う復元回路をさらに備え、
前記データ変換処理の逆変換処理を行う命令は、前記逆変換処理を前記復元回路に行わせる命令である、請求項１３に記載のデバイス。
【請求項１５】
前記誤り訂正回路が、前記復元回路として用いられる、請求項１４に記載のデバイス。
【請求項１６】
前記保護プログラムに対して誤り訂正を施した結果として得られる訂正プログラムは、
少なくとも一つの関数と、
前記訂正プログラム内における各関数の相対的な番地を示す相対番地リストとを含み、
前記相対番地リストは、前記書き換え可能メモリ上で前記訂正プログラム内の所定位置に配置される、請求項８に記載のデバイス。
【請求項１７】
前記保護プログラムに対して誤り訂正および前記逆変換処理を施した結果として得られる訂正プログラムは、
少なくとも１つの関数と、
前記訂正プログラム内における各関数の相対的な番地を示す相対番地リストとを含み、
前記相対番地リストは、前記書き換え可能メモリ上で前記訂正プログラム内の所定位置に配置される、請求項１３に記載のデバイス。
【請求項１８】
ＣＰＵを有するデバイスにおいて前記ＣＰＵを介して前記デバイスの動作を制御するコンピュータプログラムを生成するための方法であって、
前記コンピュータプログラムのうち保護すべき部分に誤り訂正符号を付加した保護プログラムを作成するステップと、
前記保護プログラムの誤り訂正を行う命令と、前記誤り訂正の結果として得られる訂正プログラムを呼び出す命令とを含む非保護プログラムのプログラムソースに、前記保護プログラムをプログラムソース形式に変換して結合するステップと、
前記結合されたプログラムソースをコンパイルおよびリンクするステップとを含むことを特徴とする、コンピュータプログラム生成方法。
【請求項１９】
前記コンピュータプログラムは、誤り訂正回路を含むデバイスを制御するためのプログラムであって、
前記保護プログラムの誤り訂正を行う命令は、前記誤り訂正回路に誤り訂正を実行させるための命令である、請求項１８に記載のコンピュータプログラム生成方法。
【請求項２０】
前記保護プログラムに、可逆的なデータ変換処理を施すステップをさらに含み、
前記非保護プログラムは、前記データ変換処理の逆変換処理を行う命令を含む、請求項１８に記載のコンピュータプログラム生成方法。
【請求項２１】
前記コンピュータプログラムは、前記データ変換処理の逆変換処理を行う復元回路を含むデバイスを制御するためのプログラムであり、
前記逆変換処理を行う命令は、前記復元回路に逆変換処理を実行させるための命令である、請求項１８に記載のコンピュータプログラム生成方法。
【請求項２２】
前記保護プログラムが、少なくとも一つの関数を含み、
前記保護プログラム内における各関数の相対的な番地を示す相対番地リストを前記コンピュータプログラム内に作成するステップをさらに含む、請求項１８に記載のコンピュータプログラム生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、制御プログラムおよびその生成方法並びにこの制御プログラムを作成するための方法に関し、特に、改竄を防除することが可能な制御プログラムに関する。
【０００２】
【従来の技術】
プログラム及びソフトウェアとして、音楽または映像などのコンテンツプログラム、および、制御プログラムなどがあるが、以下の説明において、特に言及しない場合、「プログラム」及び「ソフトウェア」は制御プログラムを意味する。制御プログラムは、その命令に基づいてマイコンを動作させる（即ち、制御プログラムがマイコンの動作を制御する）のに対し、一般のコンテンツプログラムはマイコンからの命令に従って読み出される点で、両者は異なる。
【０００３】
近年、コンテンツプログラムがデジタル化され、著作権の保護が重要な問題となっている。この問題の解決手法の一つとして、コンテンツプログラムを暗号化することが挙げられる。コンテンツプログラムを暗号化した場合、暗号化されたコンテンツプログラムを再生するためには、暗号を解読する必要がある。そこで、暗号化されたコンテンツプログラムを再生する再生装置を開発する者は、暗号作成者とライセンスを結び、暗号の解読方法を入手し、それを再生装置に組み込む。
【０００４】
暗号の解読手段がＬＳＩなどのハードウェアとしてデバイスに組み込まれている場合、ＬＳＩの製造技術をもつ専門の人でない限り、ＬＳＩの中のアルゴリズムを解析することは不可能である。しかしながら、暗号の解読がソフトウェアによって行われる場合、例えば、そのソフトウェアの実行ファイルを逆アセンブルすることで、他人（ハッカーなど）に暗号を解読され、不正に改竄される恐れがある。そうしたハッカーに対抗するために、解読が困難なソフトウェア技術が開発されている。
【０００５】
また、ハッカーによりプログラムが解析されることを防止するために、ハードウェアとソフトウェアの組み合わせによる制御プログラムの隠蔽方法が、特許文献１に開示されている。
【０００６】
【特許文献１】
特開２００１−２６５４５９号公報
【０００７】
【発明が解決しようとする課題】
ソフトウェア技術だけで暗号解読処理を行うプログラムは、ソフトウェア技術によって解読し、改竄することが不可能とは言えない。また、ＬＳＩなどのハードウェアによる暗号解読手段をデバイスに組み込むことは、近年の開発競争において、開発速度の観点及びコスト面から不利となる傾向がある。
【０００８】
そこで、本発明は、上記の問題点を鑑み、ハッカーなどによる改竄をより低コストで効果的に防除することが可能な制御プログラムおよびデバイスを提供することを目的とする。
【０００９】
【課題を解決するための手段】
上記の目的を達成するために、本発明にかかるコンピュータプログラムは、ＣＰＵを有するデバイスの動作を前記ＣＰＵを介して制御するためのコンピュータプログラムであって、誤り訂正符号が付加された保護プログラムと、前記保護プログラムの誤り訂正を行う命令と、前記誤り訂正の結果として得られる訂正プログラムを呼び出す命令とを含む非保護プログラムとを含むことを特徴とする。
【００１０】
上記の目的を達成するために、本発明は、上述のコンピュータプログラムを記録した媒体としても、実現される。
【００１１】
また、上記の目的を達成するために、本発明にかかるデバイスは、ＣＰＵと、プログラムメモリと、書き換え可能メモリとを備えたデバイスであって、前記プログラムメモリは、前記ＣＰＵを介して当該デバイスを制御するコンピュータプログラムを格納し、前記コンピュータプログラムは、誤り訂正符号が付加された保護プログラムと、前記保護プログラムの誤り訂正を行う命令と、前記誤り訂正の結果として得られる訂正プログラムを呼び出す命令とを含む非保護プログラムとを含み、前記書き換え可能メモリは、前記誤り訂正の結果として得られた訂正プログラムを格納し、前記ＣＰＵは、前記書き換え可能メモリから前記訂正プログラムを読み出して実行することを特徴とする。
【００１２】
また、上記の目的を達成するために、本発明にかかるコンピュータプログラムの生成方法は、ＣＰＵを有するデバイスにおいて前記ＣＰＵを介して前記デバイスの動作を制御するコンピュータプログラムを生成するための方法であって、前記コンピュータプログラムのうち保護すべき部分に誤り訂正符号を付加した保護プログラムを作成するステップと、前記保護プログラムの誤り訂正を行う命令と、前記誤り訂正の結果として得られる訂正プログラムを呼び出す命令とを含む非保護プログラムのプログラムソースに、前記保護プログラムをプログラムソース形式に変換して結合するステップと、前記結合されたプログラムソースをコンパイルおよびリンクするステップとを含むことを特徴とする。
【００１３】
【発明の実施の形態】
上述の本発明にかかるコンピュータプログラムは、改竄から保護すべき部分（保護プログラム）に誤り訂正符号を付加されている。この保護プログラムを実行する際に誤り訂正符号を用いて誤り訂正を行うことにより、たとえ保護プログラムが改竄されたとしても、誤り訂正が可能な範囲であれば、改竄前の状態に戻すことができる。これにより、ハッカーなどによるプログラム改竄を効果的に防除し得るコンピュータプログラムを提供できる。
【００１４】
本発明にかかるコンピュータプログラムは、誤り訂正回路を含むデバイスを制御するためのプログラムであって、前記保護プログラムの誤り訂正を行う命令は、前記誤り訂正回路に誤り訂正を実行させるための命令であることが好ましい。
【００１５】
このように、デバイスのハードウェア回路によって誤り訂正を行うことにより、プログラムの逆アセンブルなどを行ってもプログラムの動作を解析することができない。これにより、改竄をより効果的に防除し得る。
【００１６】
本発明にかかるコンピュータプログラムにおいて、前記訂正プログラムが、少なくとも一つの関数と、前記訂正プログラム内における各関数の相対的な番地を示す相対番地リストとを含んでいてもよい。
【００１７】
本発明にかかるコンピュータプログラムにおいて、前記保護プログラムが、前記誤り訂正符号の付加と可逆的なデータ変換処理の両方を施されており、前記非保護プログラムが、前記データ変換処理の逆変換処理を行う命令を含んでもよい。
【００１８】
なお、誤り訂正符号の付加と可逆的なデータ変換処理の順序は、どちらが先であってもよい。すなわち、保護プログラムは、誤り訂正符号を付加した後にデータ変換処理を行うことによって得られたものでもよいし、データ変換処理を施した後に誤り訂正符号を付加したものであってもよい。
【００１９】
本発明にかかるコンピュータプログラムにおいて、前記コンピュータプログラムは、前記データ変換処理の逆変換処理を行う復元回路を含むデバイスを制御するためのプログラムであり、前記逆変換を行う命令は、前記復元回路に逆変換処理を実行させるための命令であることが好ましい。
【００２０】
このように、保護プログラムの実行時に、保護プログラムに対する逆変換処理をハードウェア回路で実行させることにより、プログラムの逆アセンブルを行ってもプログラムの動作を解析することができない。これにより、改竄をより効果的に防除し得る。
【００２１】
本発明にかかるコンピュータプログラムにおいて、前記保護プログラムに対して誤り訂正および前記逆変換処理を施した結果として得られる訂正プログラムは、少なくとも一つの関数と、前記訂正プログラム内における各関数の相対的な番地を示す相対番地リストとを含んでもよい。
【００２２】
また、上述の構成にかかる本発明のデバイスによれば、改竄から保護すべき部分に誤り訂正符号を付加したコンピュータプログラムを用い、この保護プログラムを実行する際に誤り訂正符号を用いて誤り訂正を行うことにより、たとえ保護プログラムが改竄されたとしても、誤り訂正が可能な範囲であれば、改竄前の状態に戻すことができる。これにより、ハッカーなどによるプログラム改竄を効果的に防除し得るデバイスを提供できる。
【００２３】
本発明にかかるデバイスにおいて、前記保護プログラムから誤りが検出された場合、誤りの訂正が不可能であれば、デバイスの少なくとも一部分の動作を制限してもよい。
【００２４】
この構成によれば、保護プログラムに対して改竄が行われたとしても、誤りの訂正が可能な範囲の改竄であれば、誤り訂正によって改竄前の状態に戻せるので、改竄による影響はない。また、誤りの訂正が不可能であれば、デバイスの少なくとも一部分の動作を制限することにより、改竄による被害を防止できる。なお、デバイスの少なくとも一部分の動作の制限とは、改竄による被害を防止するという目的を達成できれば、どのような制限であってもよい。これらに限定されないが、例えば、ＣＰＵやデバイス全体の動作の停止、上位または外部デバイスとの通信の中止などの制限を行ってもよい。
【００２５】
本発明にかかるデバイスにおいて、前記保護プログラムから誤りが検出された場合、誤りの訂正が可能か否かにかかわらず、デバイスの少なくとも一部分の動作を制限してもよい。
【００２６】
この構成によれば、保護プログラムに対して改竄が行われた場合、誤りが検出されれば、誤り訂正が可能な範囲であってもデバイスの少なくとも一部分の動作を制限することにより、改竄による被害をより確実に防止できる。
【００２７】
本発明にかかるデバイスを、誤り訂正回路をさらに含んだ構成とし、前記保護プログラムの誤り訂正を行う命令が、前記誤り訂正回路に誤り訂正を実行させるための命令であるものとしても良い。
【００２８】
本発明にかかるデバイスにおいて、前記ＣＰＵは、前記訂正プログラムの実行後、当該訂正プログラムを前記書き換え可能メモリから消去してもよい。
【００２９】
これにより、書き換え可能メモリに残った訂正プログラムをハッカーなどに解読されてしまうという事態を防止できる。なお、訂正プログラムの消去とは、書き換え可能メモリに訂正プログラムが実質的に残らない状態となればよく、例えば、無意味なデータを上書きするなどの方法によって実行し得る。
【００３０】
本発明にかかるデバイスにおいて、前記保護プログラムは、前記誤り訂正符号の付加と可逆的なデータ変換処理の両方を施されており、前記非保護プログラムは、前記データ変換処理の逆変換処理を行う命令を含んでもよい。
【００３１】
本発明にかかるデバイスを、前記データ変換処理の逆変換処理を行う復元回路をさらに備えた構成とし、前記データ変換処理の逆変換処理を行う命令を、前記逆変換処理を前記復元回路に行わせる命令としてもよい。
【００３２】
本発明にかかるデバイスにおいて、前記誤り訂正回路が、前記復元回路として用いられる構成であってもよい。誤り訂正回路が復元回路を兼ねることにより、構成を簡略化して低コストなデバイスを実現できる。
【００３３】
本発明にかかるデバイスにおいて、前記保護プログラムに対して誤り訂正を施した結果として得られる訂正プログラムは、少なくとも一つの関数と、前記訂正プログラム内における各関数の相対的な番地を示す相対番地リストとを含み、前記相対番地リストは、前記書き換え可能メモリ上で前記訂正プログラム内の所定位置に配置されてもよい。
【００３４】
本発明にかかるデバイスにおいて、前記保護プログラムに対して誤り訂正および前記逆変換処理を施した結果として得られる訂正プログラムは、少なくとも１つの関数と、前記訂正プログラム内における各関数の相対的な番地を示す相対番地リストとを含み、前記相対番地リストは、前記書き換え可能メモリ上で前記訂正プログラム内の所定位置に配置されてもよい。
【００３５】
また、上述した本発明にかかるコンピュータプログラムの生成方法によれば、改竄から保護すべき部分に誤り訂正符号が付加されたコンピュータプログラムを提供することができる。
【００３６】
以下、図面を参照して本発明の実施の一形態を詳細に説明する。
【００３７】
（実施の形態１）
図１は、本発明の実施の形態１におけるデバイス１００の構成の一例を示すブロック図である。図１において、１０１は小型演算子であるマイコン、１０２は不揮発性メモリであるプログラムメモリ、１０３は書き換え可能メモリ、１０４は誤り訂正回路、１０５は内部バスである。
【００３８】
プログラムメモリ１０２は、制御プログラムを格納する。マイコン１０１は、プログラムメモリ１０２に格納された制御プログラムの命令に従って、デバイス１００を制御する。書き換え可能メモリ１０３は、マイコン１０１の処理データなどを一時的に格納する。誤り訂正回路１０４は、データを誤り訂正する。内部バス１０５は、マイコン１０１、プログラムメモリ１０２、書き換え可能メモリ１０３、および誤り訂正回路１０４を相互に接続する。ここで、プログラムメモリ１０２として、再生専用メモリ、１回書き込み可能メモリ、またはフラッシュメモリを使用してもよい。また、書き込み可能メモリ１０３として、データの保持動作が不要なスタックメモリ、またはデータの保持動作が必要なダイナミックメモリ、具体的にはＤＲＡＭを使用してもよい。
【００３９】
図２は、プログラムメモリ１０２に格納する、実行可能形式の制御プログラムを作成する方法を示したフローチャートである。本明細書において、保護プログラムとは、改竄から保護すべきプログラムを指す。保護プログラムには冗長ビットが付加されている。また、制御プログラム内の保護プログラム以外のプログラムを、非保護プログラムと称する。
【００４０】
ステップ２０１で、プログラムメモリ１０２に格納する制御プログラムのうち改竄から保護すべき保護プログラムとなる部分のプログラムソース２１１を生成する。
【００４１】
ステップ２０２で、プログラムソース２１１をコンパイル及びリンクし、実行可能形式のバイナリデータ２１２を生成する。
【００４２】
ステップ２０３で、実行可能形式のバイナリデータ２１２に冗長ビット（パリティ）を付加し、誤り訂正符号に符号化することにより、バイナリデータ２１３を生成する。符号化の方法については後述する。この時、バイナリデータ２１３は、符号化処理前のバイナリデータ２１２より少なくともパリティ分、サイズが増加する。この符号化処理により、デバイス１００の誤り訂正回路１０４で、誤りの検出及び訂正を行うことができる。従って、プログラムが改竄された場合に、改竄を検出し、元のプログラムに戻すことが可能となる。
【００４３】
ステップ２０４で、バイナリデータ２１３を、他のプログラムソースに組み入れやすいように、プログラムソース形式のデータ配列２１４に変換する。前記データ配列２１４のプログラムソース形式としては、例えば、Ｃ言語のｃｈａｒ型の配列表記を内容として持つインクルードファイル形式を用いることができる。
【００４４】
ステップ２０５で、非保護プログラムのプログラムソースに、データ配列２１４に変換された保護プログラムを挿入し、全制御プログラムソース２１５を作成する。なお、前記非保護プログラムは、前記保護プログラムを呼び出すプログラムを含む。
【００４５】
ステップ２０６で、全制御プログラムソース２１５をコンパイルおよびリンクして、プログラムメモリ１０２に格納する実行可能形式のバイナリデータ２１６を生成する。これにより、保護プログラムにパリティが付加された制御プログラムが、バイナリデータ２１６として形成される。
【００４６】
次に、実行可能形式のバイナリデータ２１２の符号化方法の一例として、図３に示されるＤＶＤの内符号（ＰＩ）である符号長１８２バイト、情報数１７２バイト、パリティ１０バイトのリードソロモン（ＲＳ）符号に符号化する方法について説明する。
【００４７】
図３は、ＰＩの構成を示した図である。Ｂ［ｉ］（ｉ＝０〜１８１）は、１バイトを表し、８ビットに相当する。Ｂ［０］〜Ｂ［１７１］はデータ部分、Ｂ［１７２］〜Ｂ［１８１］はパリティ部分で、実行可能形式のバイナリデータ２１２の各８ビットが、Ｂ［０］〜Ｂ［１７１］に対応する。但し、元のバイナリデータが１７２バイトに足りない場合、元のバイナリデータに０埋めされたデータを付け加える。ＰＩのパリティ部分は、以下のパリティ検査符号多項式Ｐ（Ｘ）により、多項式表示される。
【００４８】
【数１】
2004005562.tif 000003
【００４９】
ここで、Ｉ（Ｘ）は情報記号多項式と呼ばれ、データ部分を多項式表示したもので、
【００５０】
【数２】
2004005562.tif 000004
【００５１】
であり、Ｇ（ｘ）は生成多項式で、
【００５２】
【数３】
2004005562.tif 000005
【００５３】
である。但し、αは原始多項式
【００５４】
【数４】
2004005562.tif 000006
【００５５】
の根である。ＰＩのパリティ部分は、
【００５６】
【数５】
2004005562.tif 000007
【００５７】
と多項式表示することもできる。即ち、（数１）と（数５）のＸの係数を比較することにより、パリティ部分Ｂ［１７２］〜Ｂ［１８１］の値が求まる。なお、（数１）〜（数５）を解く手段は、どのようなものであってもよい。
【００５８】
この符号化処理を、ソフトウェアなどで実現し、実行可能形式のバイナリデータ２１２が全て符号化されるまで行うことにより、パリティが付加されたバイナリデータ２１３が生成される。
【００５９】
ここで、本発明にかかる制御プログラムをマイコンで実行しようとする際に、制御プログラム内の保護プログラムを誤り訂正する方法の一例について、図４を用いて説明する。図４は、保護プログラムを誤り訂正する方法の一例を示すフローチャートである。ここでは、保護プログラムを上記のＰＩに符号化した場合を例に、説明する。まず、ステップ４０１で、誤り箇所を特定するための位置情報を示すシンドロームを計算する。シンドロームは、誤り訂正するデータを、
【００６０】
【数６】
2004005562.tif 000008
【００６１】
とする時、次のように定義できる。
【００６２】
【数７】
2004005562.tif 000009
【００６３】
ステップ４０２で、シンドロームが０ならば誤りがないと判断し、ステップ４１０に進み、マイコンに誤りなしと通知し、誤り訂正処理を終了する。０でなければ、次のステップに進む。
【００６４】
ステップ４０３で、シンドロームから誤り位置多項式を導出する。誤り位置多項式は、誤り位置Ｌ１，Ｌ２，…，Ｌｍ（ｍは誤り個数）の逆数を根に持つ多項式で、
【００６５】
【数８】
2004005562.tif 000010
【００６６】
である。誤り位置多項式の係数は、シンドロームで定義され、誤り位置多項式の係数とシンドロームとの間に成り立つ連立方程式を行列を使って解くピーターソン法や、連立方程式を多項式を使って解く逐次的計算法であるユークリッド法やＢＭ法などのアルゴリズムを用いて求められる。
【００６７】
ステップ４０４で、誤り位置多項式が計算できたならば、次のステップに進む。計算できなければ、訂正可能個数より多くの誤りが発生していると判断し、ステップ４０９に進み、マイコンに誤りが訂正不能であることを通知し、誤り訂正処理を終了する。
【００６８】
ステップ４０５で、誤り位置多項式に（数４）の原始多項式の根であるαの−ｉ乗（ｉ＝０〜１８１）を順次代入し、誤り位置多項式が０となるｉを求めることにより、誤り位置を計算する。
【００６９】
ステップ４０６で、誤り位置が計算できたならば、次のステップに進む。計算できなければ、ステップ４０９に進み、マイコンに誤りが訂正不能であることを通知し、誤り訂正処理を終了する。
【００７０】
ステップ４０７で、ステップ４０６で求めた誤り位置とシンドロームとの間の連立方程式を解くことにより、誤りの値を計算する。
【００７１】
ステップ４０８で、ステップ４０６で求めた誤り位置に対応するデータの値から、ステップ４０７で求めた誤りの値を引くことにより、誤り訂正の対象データの訂正を行う。
【００７２】
図１の誤り訂正回路１０４は、上記の誤り訂正手順の処理を行うことができる回路であれば、任意の構成を用いることができる。また上記のＰＩ符号とその符号化の方法は一例にすぎず、誤り訂正ができる符号であれば、どのような符号及び符号化の方法であってもよい。また、誤り訂正の方法も、誤りの検出と訂正ができれば、どのような方法であってもよい。
【００７３】
例えば、上記では誤り訂正符号としてリードソロモン（ＲＳ）符号を用いる例を説明したが、誤り訂正符号は、ＲＳ符号に限定されない。これ以外に、例えば、いわゆるＢｌｕ−ｒａｙ　Ｄｉｓｃに用いられている誤り訂正符号や、ＢＣＨ符号、畳み込み符号などの任意の符号を用いることができる。
【００７４】
ここで、図５〜図８を用いて、本発明にかかる制御プログラムを、図１に示した構成の本発明にかかるデバイス１００で実行する場合の手順の一例について説明する。
【００７５】
図５は、保護プログラムの命令を実行する方法のフローチャートを示し、図６、図７、図８は、図５のステップ５０１、５０２、５０３のデバイスの状態を示している。
【００７６】
図６、図７、図８において、図１と同じ構成要素について同一番号を付し、説明は省略する。
【００７７】
本明細書において、保護プログラムに対して誤り訂正処理を行って得られるプログラムを、訂正プログラムと称する。
【００７８】
まず、ステップ５０１で、マイコン１０１からの指令により、図６に示されるように、プログラムメモリ１０２に格納された制御プログラムのうち、保護プログラム６１１を書き換え可能メモリ１０３に複製することにより、複製プログラム６１２を作る。複製プログラム６１２の内容は、保護プログラム６１１と同一である。なお、図６のプログラムメモリ１０２において、保護プログラム６１１が格納された領域以外に格納されているのは、非保護プログラム６１０である。非保護プログラム６１０は、保護プログラム６１１内の関数を呼び出す命令を含む（詳細は後述する）。
【００７９】
ステップ５０２で、マイコン１０１からの指令により、書き換え可能メモリ１０３上の複製プログラム６１２を、誤り訂正回路１０４を用いて誤り訂正することにより、図７に示されるように、書き換え可能メモリ１０３上に、訂正プログラム６１３を生成する。この誤り訂正は、例えば、上記において図４を参照して説明した手順によって行えばよい。
【００８０】
誤り訂正回路１０４が誤りを検出し、かつ、その誤りが訂正不能であることをマイコン１０１に通知した場合（図４のステップ４０９）、マイコン１０１は、制御プログラムが改竄されているものと判断し、例えば上位装置（図示せず）との通信を打ち切るなどの処理を施し、マイコン１０１自身やデバイス１００全体の動作を停止させる。誤り訂正回路１０４で検出された誤りが訂正可能である場合は、誤り訂正を行うことにより（図４のステップ４０８）、改竄された制御プログラムを元の制御プログラムに戻す。なお、誤りを検出した場合、その誤りが訂正可能であっても、上述のように上位装置との通信を打ち切ったりマイコン１０１またはデバイス１００全体の動作を停止させたりするなどの処理を施してもよい。このような処理を施すことにより、デバイス１００において正規の制御プログラム以外のプログラム（すなわち改竄されたプログラム）が動作できないようにすることができる。
【００８１】
例えば、これを、著作権保護すべきコンテンツを記録したＤＶＤの不正コピーを防除する処理を行うための制御プログラムに適用したとする。すなわち、デバイス１００がＤＶＤレコーダであって、このデバイス１００におけるＤＶＤへの記録を制御するための制御プログラムのうち、不正コピー防止プログラムが、保護プログラムとして、例えば図２を参照して説明したように誤り訂正符号が付加されているものとする。例えば、ＤＶＤへの不正コピーを行うことを目的としてこの保護プログラムに対して改竄が加えられたとしても、その改竄が誤り訂正符号によって訂正できる範囲内であれば、誤り訂正によって元のプログラムに戻すことができる。訂正できない場合は、上述のようにマイコン１０１やデバイス１００全体の動作を停止させるなどの処理を行うことにより、不正コピーをさせない。従って、どのように改竄がなされたとしても、不正コピーをさせず、ＤＶＤのコンテンツの著作権を守ることができる。また、誤り訂正できる範囲内の改竄であれば、改竄部分を訂正して元のプログラムに戻すため、改竄したはずのプログラムが改竄前と同じ動作をする。これにより、改竄者を混乱させ、制御プログラムの解読および改竄を困難にすることができる。
【００８２】
ステップ５０３で、マイコン１０１が、図８で示された訂正プログラム６１３の中の関数（モジュールとも呼ぶ）を呼び出す。モジュール呼び出し処理５０３の詳細な説明は後述する。
【００８３】
ステップ５０４で、呼び出した関数から戻ってきた後に、マイコン１０１は、図８で示される訂正プログラム６１３が存在する領域の全体に無意味な値（例えば０）を上書きすることにより、訂正プログラム６１３を消去する。
【００８４】
なお、ステップ５０２の誤り訂正処理の全てをソフトウェアで実行することも可能であるが、この誤り訂正処理を行うソフトウェア部分を解析すれば、保護プログラムが解読される危険性がある。従って、実施の形態１のように、デバイス１００に固有のハードウェアである誤り訂正回路１０４を用いて誤り訂正処理を行うことが好ましい。これにより、デバイス１００のユーザのみが制御プログラムを使用できるので、保護プログラムが不正に解読されることを防ぐことができる。
【００８５】
次に、関数の呼び出し処理（図５のステップ５０３）の具体例について説明する。図９は、図６の保護プログラム６１１が誤り訂正回路１０４によって誤り訂正された後の訂正プログラム６１３の構成を概念的に示す図である。訂正プログラム６１３は、相対番地リスト７０と、プログラム部７６とを含む。プログラム部７６は、訂正プログラム６１３の外部（即ち図６の非保護プログラム６１０）から呼び出される公開関数７１、７２と、訂正プログラム６１３の内部から相対番地で呼び出される内部関数７３、７４、７５とを含む。例えば、公開関数７１、７２は非保護プログラム６１０から呼び出される。公開関数７１は、相対番地で内部関数７３、７４を呼び出す。公開関数７２は、相対番地で内部関数７３、７５を呼び出す。公開関数が呼び出すことのできる関数の数は任意である。
【００８６】
相対番地リスト７０は、訂正プログラム６１３の先頭からみた公開関数７１、７２の相対番地を列挙したものである。これらの番地の情報は、図８の書き換え可能メモリ１０３に対する訂正プログラム６１３の位置に依存しない情報であり、図２のステップ２０１で、このテーブルを作成するようにプログラミングすることで実現できる。
【００８７】
図１０は、マイコン１０１に対するアドレス空間８００を示す。マイコン１０１に対するアドレス空間８００において、プログラムメモリ１０２と書き換え可能メモリ１０３は、それぞれ独自の番地が割り付けられた領域８０１、８０２にそれぞれ位置する。訂正プログラム６１３は、上述したように保護プログラム６１１を複製し、誤り訂正回路１０４で訂正したものであり、書き換え可能メモリ１０３に割当てられた領域８０２のうち、マイコン１０１が指定する所定の番地（図１０では番地ａ１）を先頭とする領域（図１０では領域８０４）に配置される。この時、訂正プログラム８０４の先頭に、相対番地リスト７０が配置される（図１０では領域８０５）。相対番地リスト７０は、公開関数７１の相対番地ｒ１と公開関数７２の相対番地ｒ２とを含む。
【００８８】
アドレス空間８００における公開関数７１の絶対番地は、訂正プログラム６１３の先頭番地ａ１に、公開関数７１の相対番地ｒ１を加算することによって求められる。従って、マイコン１０１は、アドレス空間８００における公開関数７１の絶対番地を指定することで、公開関数７１を呼び出すことができる。公開関数７２についても同様に、訂正プログラム６１３の先頭番地ａ１に、公開関数７２の相対番地ｒ２を加算して求められる絶対番地を指定することにより、呼び出せる。
【００８９】
なお、図１０に示される訂正プログラム６１３の相対番地リスト８０５は、訂正プログラム８０５の先頭に配置されているが、本発明はこれに限定されない。相対番地リスト８０５は、訂正プログラム６１３に対する外部プログラム（即ち非保護プログラム６１０）から指定されることが可能な位置に配置されていればよい。
【００９０】
（実施の形態２）
本発明の他の実施形態について、以下に説明する。
【００９１】
図１１は、本発明の実施の形態２において、実行形式の制御プログラムを作成する方法を示すフローチャートである。図１１において、図２と同じ処理とデータについて同一番号を付し、説明は省略する。実施の形態１と異なるのは、ステップ２０２とステップ２０３との間に、制御プログラム中の保護プログラム部分に対して可逆的なデータ変換を施すデータ変換処理（ステップ１１０１）が追加されていることである。
【００９２】
ステップ１１０１では、ステップ２０２で生成された実行可能形式のバイナリデータ２１２に可逆的なデータ変換を施して、変換済みバイナリデータ１１１１を生成する。データ変換処理１１０１の詳細な説明は後述する。このバイナリデータ１１１１は、そのままマイコンで処理させても、マイコンに所望の動作をさせることはできない。また、データ変換を行うだけなので、ステップ１１０１の前後でプログラムサイズは変化しない。このデータ変換処理を行うことにより、保護プログラムを逆アセンブルなどのソフトウェア処理によって解析されないようにし、改竄されにくくすることができる。
【００９３】
ステップ２０３でバイナリデータ１１１１を符号化処理することにより、符号化したバイナリデータ１１１２が得られる。次に、ステップ２０４で、バイナリデータ１１１２を、プログラムソース形式のデータ配列１１１３に変換する。そして、ステップ２０５で、データ配列１１１３を非保護プログラムのプログラムソースと結合することにより、全制御プログラムソース１１１４が得られる。最後に、全制御プログラムソース１１１４をコンパイルおよびリンクすることにより、実行可能形式のバイナリデータ１１１５を生成し、プログラムメモリに格納する。
【００９４】
実施の形態１と比較すると、ステップ１１０１でデータ変換処理を行った後のバイナリデータ１１１１に、ステップ２０３で符号化処理を施すため、バイナリデータ１１１２、データ配列１１１３、全制御プログラムソース１１１４、および、バイナリデータ１１１５は、図２に示すバイナリデータ２１３、データ配列２１４、全制御プログラムソース２１５、および、バイナリデータ２１６とはそれぞれ異なるものとなる。但し、サイズは同じである。
【００９５】
次に、実行可能形式のバイナリデータ２１２のデータ変換処理（図１１のステップ１１０１）の一例について、図１２を用いて説明する。図１２は、バイナリデータをデータ変換する方法の一例を示すフローチャートである。図１３は、ステップ１１０１のデータ変換処理を行うための回路の一例であり、ＤＶＤでデータをスクランブルする際に用いられているスクランブル回路と同様の回路である。図１３において、ｒ０〜ｒ１４は、１ビットのシフトレジスタの値、１３０１はシフトレジスタ、１３０２は１ビットの排他的論理和を表す。ここでは、図１３のシフトレジスタ１３０１を用いて、バイナリデータ２１２を８ビットずつデータ変換する方法を例に説明する。
【００９６】
まず、ステップ１２０１で、スクランブルの初期値である１５ビットのシードをシフトレジスタ１３０１に設定する。ステップ１２０２で、データ変換するバイナリデータ２１２の８ビットを、ｄ０（最下位ビット）〜ｄ７（最上位ビット）とすると、シフトレジスタ１３０１のｒ０〜ｒ７の８ビットと、ｄ０〜ｄ７の８ビットの排他的論理和をとり、データを変換する。ステップ１２０３で、バイナリデータ２１２を全て変換したならば、データ変換処理を終了する。そうでなければ、ステップ１２０４に進む。ステップ１２０４で、シードを変更するならば、ステップ１２０１に進む。そうでなければ、ステップ１２０５に進む。シードの変更は、あらかじめ決めておいたバイト数のバイナリデータ２１２を変換するごとに行う。ステップ１２０５で、シフトレジスタ１３０１を８ビットシフトさせ、ステップ１２０２に進む。上記の処理をバイナリデータ２１２が全て変換されるまで行い、データ変換後のバイナリデータ（図１１の１１１１）を生成する。
【００９７】
ここで例えば、シードとしてｒ０に１、ｒ１〜ｒ１４に０を設定し、１６進数で表記するものとする。００，０１，０２，０３であるバイナリデータを上記の手順でデータ変換すると、００は０１と排他的論理和がとられ、０１に変換される。０１はシードを８ビットシフトさせた後の００と排他的論理和がとられ、０１に変換される。０２は２２と、０３は０４と排他的論理和がとられ、２０と０７にそれぞれ変換される。
【００９８】
上記のＤＶＤに用いられているようなスクランブルによるデータ変換の方法は一例に過ぎず、可逆的なデータ変換が行える変換方法であれば、どのような方法であっても良い。
【００９９】
例えば、Ｂｌｕ−ｒａｙ　Ｄｉｓｃドライブに用いられているシフトレジスタを用いてデータ変換を行っても良い。また、誤り訂正理論で用いられる基礎体であるＧＦ（２）に、前述の（数４）の原始多項式の根であるαを追加して生成したガロア拡大体ＧＦ（２８）の元のべき乗表現αｉ（ｉ＝０〜２５４）は、（数９）のようにαｉを（数４）の原始多項式で割り算した余りとして多項式表現される。ここで、Ｖｊは多項式の係数である。
【０１００】
【数９】
2004005562.tif 000011
【０１０１】
多項式の係数をベクトルで表したものがベクトル表現であり、８次元のベクトルで表現される。よって、元のべき乗表現とベクトル表現とは１対１に対応しており、べき乗表現の乗数ｉとベクトル表現の各要素を１ビットとみなした８ビットの値も１対１に対応する。これにｉ＝２５５のときの８ビットの値を０とすると、（数１０）で表され、可逆的な８ビットのデータ変換ができる。
【０１０２】
【数１０】
2004005562.tif 000012
【０１０３】
よって、この対応関係を用いて、バイナリデータ２１２を８ビットずつデータ変換してもよい。
【０１０４】
図１４は、本発明の実施の形態２におけるデバイス１４００の構成の一例を示すブロック図である。図１４において、図１と同じ構成要素については同一番号を付し、説明は省略する。デバイス１４００は、主に、可逆的に変換された保護プログラムに対して逆変換を施すためのデータ復元回路１４０１が追加された点において、実施の形態１のデバイス１００と異なる。
【０１０５】
データ復元回路１４０１は、図１２のデータ変換処理により変換されたデータを復元する場合、データ変換するバイナリデータ２１２の代わりに、復元するバイナリデータに図１２と同じ処理を行うことによって復元されるため、図１２のステップ１２０２〜１２０５の処理を行うことができる回路であれば良い。デバイス１４００がＤＶＤドライブやＢｌｕ−ｒａｙ　Ｄｉｓｋドライブである場合、データ復元回路１４０１としてこれらのドライブが有するスクランブル回路を用いれば、（１）新たな回路設計の必要がない、（２）シードをソフトウェアで変化させればより解読されにくくできる、といった利点がある。また、ガロア拡大体ＧＦ（２８）の元のべき乗表現の乗数ｉとベクトル表現の各要素を１ビットとみなした８ビットの値との対応関係を用いてデータ変換を行うと、一般的に誤り訂正回路には、この対応関係により変換されたデータを復元するデータ復元回路があらかじめ存在するので、図１４に示すようにデータ復元回路１４０１を別個に設ける代わりに、誤り訂正回路１０４をデータ復元回路１４０１として流用することも可能である。また、データ復元回路として、暗号化回路を用いることも可能である（データ変換処理として暗号化処理を行い、データ復元回路として暗号の復号化回路を用いることも可能である）。
【０１０６】
図１５は、本発明の実施の形態２における制御プログラムの命令を実行する方法のフローチャートを示す。図１５において、図５と同じ処理については同一番号を付し、説明は省略する。実施の形態１と異なるのは、データ復元処理１５０１が追加されていることである。図１５では、プログラム訂正処理（ステップ５０２）の後にデータ復元処理（ステップ１５０１）を行うとしているが、図１１の制御プログラムの実行可能形式を作成する方法のステップ１１０１とステップ２０３と逆の順序であれば、どちらから処理を行ってもよい。
【０１０７】
ステップ１５０１のデータ復元処理の全てをソフトウェアで実行することも可能であるが、逆アセンブルなどにより解読される危険性がある。従って、本発明の実施の形態２のように、デバイス１４００に固有のハードウェアであるデータ復元回路１４０１を用いてデータ復元処理を行うことが好ましい。これにより、デバイス１４００のユーザのみが制御プログラムを使用することができ、保護プログラムが不正に解読されることを防ぐことができる。
【０１０８】
その他のステップについては、実施の形態１と同様である。このように、本実施形態によれば、データ変換処理を行うため、保護プログラムが改竄されにくくなる。また、改竄された場合でも、誤り訂正符号によって改竄の検出または訂正を行うことにより、不正な動作を止めることができる。
【０１０９】
本実施形態における保護プログラム内の関数の呼び出し方法は、実施の形態１と同様である。
【０１１０】
以上のように、本発明は改竄から保護するプログラムを符号化し、それを含む制御プログラムを作成し、誤り訂正回路によって訂正処理を行うことにより、改竄の検出及び訂正ができるため、設計した制御プログラム以外の動作はできないようにすることができる。
【０１１１】
更に、制御プログラムを作成する時にデータ変換処理を、制御プログラムを実行する時にデータ復元回路によって行われるデータ復元処理を加えることにより、より改竄されにくくすることができる。
【０１１２】
また、制御プログラムの訂正アルゴリズムと復元アルゴリズムを、デバイスに組み込まれたハードウェアと制御プログラム自身とで分担させれば、非常に高度なソフトウェア技術を有した人物であっても、制御プログラムだけを解析しただけでは分からない。更に、保護すべき処理を全てハードウェアで実現する場合、もしくは、全てをソフトウェアで実現するのと比較して、開発期間及びコスト及び安全性の面で優れている。
【０１１３】
なお、本発明の好適な応用例として、これらはあくまでも一例であって本発明を限定するものではないが、以下のようなものが挙げられる。
【０１１４】
１．リージョンコード比較処理用プログラムへの適用
ＤＶＤ及びＤＶＤ再生装置には、地域を識別するためのリージョンコードが付加されている。ＤＶＤを再生する場合は、ディスクに付加されているリージョンコードと、再生装置に付加されているリージョンコードとを比較し、再生可能地域であることを確認した場合のみ、再生を行う。このようにリージョンコードの比較処理を行う理由は次のとおりである。
【０１１５】
例えば、ある国において、映画のＤＶＤが発売されたとき、他の国ではその映画がまだ映画館で上映されているとする。この場合、前者の国で発売されたＤＶＤを、後者の国の再生装置で見ることができたなら、映画館でその映画を見ようとする人は減少してしまう。リージョンコードの比較処理を行うことによって、映画上映中または上映前の地域では、そのＤＶＤを再生できないようにすることで、これを防ぐことができる。
【０１１６】
また、宗教上の問題などで、特定のコンテンツの再生を禁止する地域がある場合、リージョンコード比較処理を行うことによって、禁止されたコンテンツを再生できないようにすることもできる。
【０１１７】
しかし、リージョンコード比較処理の制御プログラムを改竄して比較処理を行わないようにされた場合、再生不可地域であっても再生されてしまい、上記のような地域保護ができなくなる。
【０１１８】
そこで、リージョンコード比較処理の制御プログラムを保護プログラムとして誤り訂正符号を付加することにより、改竄されても訂正可能な範囲内であれば、正しいリージョンコード比較処理を行って、不正な再生を防ぐことができる。また、訂正不能であった場合でも、改竄されたことはわかるため、機器を停止させるなど、再生させないようにすることができる。したがって、どのように改竄されても不正再生を防止することができる。
【０１１９】
２．ドライブとホスト間の相互認証処理用のプログラムへの適用
ＤＶＤの再生やコピーを行う際、ＤＶＤドライブとホスト間で相互認証を行い、相互認証が確認できた場合のみ、暗号化されたデータを解くためのキーをホストに渡す。しかし、相互認証処理のプログラムを改竄され、相互認証しないようにされた場合、暗号化されたデータを解くためのキーが無条件でホストに渡るため、著作権を保護することができなくなる。
【０１２０】
そこで、相互認証処理のプログラムを保護プログラムとして誤り訂正符号を付加すれば、改竄されても訂正範囲内であれば、改竄前の状態に訂正することができる。これにより、正しい相互認証処理を行うことができる。また、訂正不能であっても、改竄されたことはわかるため、暗号を解くキーをホストに渡さないようにすることができる。したがって、どのように改竄されても、不正再生や不正コピーを防止することができる。
【０１２１】
なお、本発明は、コンピュータで使用可能なまたは読み取り可能なコンピュータプログラム記録媒体として実現することも可能である。本発明のコンピュータプログラムを記録するための媒体としては、制御プログラムを格納することができる任意の記録媒体を用いることができる。記録媒体の例としては、これらに限定されないが、例えば、磁気テープ、磁気ディスク、光ディスク、光磁気ディスク、磁気カード、メモリ等を挙げることができる。また、記録媒体上では、本発明にかかるコンピュータプログラム（制御プログラム）は、例えば圧縮された状態で記録されていてもよい。
【図面の簡単な説明】
【図１】本発明の実施の形態１におけるデバイスの構成の一例を示すブロック図である。
【図２】本発明の実施の形態１におけるプログラムメモリに格納する制御プログラムの実行可能形式を作成する方法を示すフローチャートである。
【図３】ＤＶＤの内符号（ＰＩ）の構成を示す図である。
【図４】本発明の実施の形態１における保護プログラムを誤り訂正する方法の一例を示すフローチャートである。
【図５】本発明の実施の形態１における保護プログラムの命令を実行する方法を示すフローチャートである。
【図６】本発明の実施の形態１におけるプログラム複製処理におけるプログラム領域の配置図である。
【図７】本発明の実施の形態１におけるプログラム訂正処理におけるプログラム領域の配置図である。
【図８】本発明の実施の形態１におけるモジュール呼出処理におけるプログラム領域の配置図である。
【図９】本発明の実施の形態１における誤り訂正回路によって誤り訂正された後の訂正プログラムの構成を示す図である。
【図１０】本発明の実施の形態１におけるマイコンに対するアドレス空間を示す図である。
【図１１】本発明の実施の形態２におけるプログラムメモリに格納する制御プログラムの実行可能形式を作成する方法を示すフローチャートである。
【図１２】本発明の実施の形態２におけるバイナリデータをデータ変換する方法を示すフローチャートである。
【図１３】本発明の実施の形態２におけるデータ変換に用いるスクランブル回路の構成を示す回路図である。
【図１４】本発明の実施の形態２におけるデバイスの構成の一例を示すブロック図である。
【図１５】本発明の実施の形態２における制御プログラムの命令を実行する方法を示すフローチャートである。
【符号の説明】
７０，８０５　相対番地リスト
７１，７２　公開関数
７３，７４，７５　内部関数
１００，１４００　デバイス
１０１　マイコン
１０２　プログラムメモリ
１０３　書き換え可能メモリ
１０４　誤り訂正回路
１０５　内部バス
２１１　保護プログラムのプログラムソース
２１２　保護プログラムの実行可能形式のバイナリデータ
２１３，１１１２　符号化したバイナリデータ
２１４，１１１３　データ配列（プログラムソース形式）
２１５，１１１４　全制御プログラムソース
２１６，１１１５　実行可能形式のバイナリデータ
６１０　非保護プログラム
６１１　保護プログラム
６１２　複製プログラム
６１３，８０４　訂正プログラム
８００　アドレス空間
８０１　プログラムメモリ領域
８０２　書き換え可能メモリ領域
１１１１　データ変換後のバイナリデータ
１４０１　データ復元回路
【図１】
2004005562.tif 000013
【図２】
2004005562.tif 000014
【図３】
2004005562.tif 000015
【図４】
2004005562.tif 000016
【図５】
2004005562.tif 000017
【図６】
2004005562.tif 000018
【図７】
2004005562.tif 000019
【図８】
2004005562.tif 000020
【図９】
2004005562.tif 000021
【図１０】
2004005562.tif 000022
【図１１】
2004005562.tif 000023
【図１２】
2004005562.tif 000024
【図１３】
2004005562.tif 000025
【図１４】
2004005562.tif 000026
【図１５】
2004005562.tif 000027