(57)【特許請求の範囲】
【請求項１】
複数の実行命令を含むプログラムを変換するプログラム変換装置において、
前記プログラムに含まれる実行命令のうち変換すべき命令と、変換処理の内容とが対応づけて設定された鍵情報を記憶する記憶手段と、
この記憶手段に記憶された鍵情報に基づいて前記プログラムを変換する変換手段と、
を備え、
前記記憶手段が記憶する鍵情報には、前記プログラムにおける変換すべき実行命令の位置と、該変換すべき実行命令のアドレスから減算すべき値とが対応づけて設定されており、
前記変換手段は、前記変換すべき実行命令のアドレスから、該変換すべき実行命令の位置に対応づけられて前記記憶手段に記憶されている減算すべき値を減算し、前記変換すべき実行命令を前記減算結果のアドレスに格納されている実行命令に置き換えることで前記プログラムを変換する
ことを特徴とするプログラム変換装置。
【請求項２】
前記記憶手段が記憶する鍵情報には、前記プログラム中の実行命令を、処理を何も実行しない命令に変換するための処理内容が設定されていることを特徴とする請求項１記載のプログラム変換装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラム変換装置に係り、詳細には、プログラム中の特定の命令を他の命令に変換するプログラム変換装置に関する。
【０００２】
【従来の技術】
従来より、プログラムの内容を秘匿するものとして、様々な技術が提案されている。例えば、特開平４−１８４６２９号公報には、主記憶装置に暗号化されて格納された機械語プログラムを復号化装置により復号化し、復号化されたプログラムによる演算を中央演算装置が実行し、中央演算装置の演算結果を暗号化装置により再び暗号化して主記憶装置に書き込むことができる電子計算機が開示されている。
【０００３】
また、特開平２−２９７６２６号公報には、記憶装置には暗号化されたプログラムをそのまま格納し、プログラム実行手段により暗号化プログラムの命令を実行する場合には、暗号化プログラム解読手段によって暗号化プログラムの命令をプログラム実行手段で実行可能な形に変換できるプログラム及びデータの内容秘匿方式が開示されている。
【０００４】
更に、特開平１−３２１５１９号公報には、予め設定した変換データに従って命令コード（機械語）を変換する機能を有することで、固有の命令コードを持つことができるマイクロプロセッサが開示されている。
【０００５】
【発明が解決しようとする課題】
上記のような技術によれば、プログラムが格納されている記憶装置が参照されても、プログラムの内容を秘匿できる。しかしながら、上記従来の技術では、ＣＰＵ（Central Processing Unit）の実行内容を制限することができなかった。
【０００６】
本発明の課題は、プログラムの内容を秘匿できるだけでなく、ＣＰＵによる実行を制限できるプログラム変換装置を提供することである。
【０００７】
【課題を解決するための手段】
本発明は、このような課題を達成するために、次のような特徴を備えている。
なお、次に示す手段の説明中、括弧書きにより実施の形態に対応する構成を１例として例示する。符号等は、後述する図面参照符号等である。
【０００８】
請求項１記載の発明は、
複数の実行命令を含むプログラム（例えば、図１に示すソースプログラム２２）を変換するプログラム変換装置（１）において、
前記プログラムに含まれる実行命令のうち変換すべき命令と、変換処理の内容とが対応づけて設定された鍵情報（例えば、図１に示す変換テーブル３）を記憶する記憶手段（例えば、図１に示すＲＯＭ１２）と、
この記憶手段に記憶された鍵情報に基づいて前記プログラムを変換する変換手段（例えば、図１に示すＣＰＵ１１）と、
を備え、
前記記憶手段が記憶する鍵情報には、前記プログラムにおける変換すべき実行命令の位置（例えば、図２（ｂ）に示す行番号３１）と、該変換すべき実行命令のアドレスから減算すべき値（例えば、図２（ｂ）に示すキーアドレス３２）とが対応づけて設定されており、
前記変換手段は、前記変換すべき実行命令のアドレスから、該変換すべき実行命令の位置に対応づけられて前記記憶手段に記憶されている減算すべき値を減算し、前記変換すべき実行命令を前記減算結果のアドレスに格納されている実行命令に置き換えることで前記プログラムを変換する
ことを特徴とする。
【０００９】
請求項１記載の発明によれば、記憶手段は、複数の実行命令を含むプログラムに含まれる実行命令のうち変換すべき命令と、変換処理の内容とが対応づけて設定された鍵情報を記憶する。そして、変換手段は、鍵情報に設定された変換処理の内容にしたがって、前記プログラム含まれる実行命令のうちの変換すべき命令を変換する。このとき、前記記憶手段が記憶する鍵情報には、前記プログラムにおける変換すべき実行命令の位置と、該変更すべき実行命令のアドレスから減算すべき値とが対応づけて設定されている。前記変換手段は、前記プログラムを変換する過程で、前記プログラム中の変更すべき実行命令のアドレスから前記記憶手段に記憶された減算すべき値を減算し、前記変換すべき実行命令を前記減算結果のアドレスに格納されている実行命令に置き換える。
【００１０】
これにより、鍵情報を的確に設定すれば、変換前のプログラムの内容を、変換後のプログラムの内容と全く無関係にできる。従って、実質的にプログラムの内容を秘匿できる。
【００１１】
また、鍵情報として、プログラム含まれる実行命令のうち変換したい命令と、変換後の命令とを任意に指定できる。従って、プログラムの任意の一部のみ或いは全部を、必要に応じて所望の命令に変換できるという利便性がある。また、鍵情報には、前記プログラムにおける変換すべき実行命令の位置を設定できる。従って、例えば、プログラムの行番号を指定することで、容易且つ確実に変換すべき部分を指定できる。また、変換手段は、アドレスの演算処理を通じてプログラムを変換するので迅速且つ確実に変換処理が実行される。
【００１２】
更に、例えば、ＣＰＵその他の実行手段に変換後のプログラムを実行させるようにすれば、たとえ第三者によって変換前のプログラムが参照されても、ＣＰＵ等の処理内容を秘匿できる。
【００１３】
更に、変換手段はプログラムに含まれる命令そのものを別の命令に変換するので、当該プログラム変換装置によれば、鍵情報の設定内容に応じて、ＣＰＵによる実行内容を適宜制限できる。
【００１４】
請求項２記載の発明は、請求項１記載のプログラム変換装置において、
前記記憶手段が記憶する鍵情報には、前記プログラム中の実行命令を、処理を何も実行しない命令（例えば、図２（ｃ）に示す変換後プログラム４２中のＮＯＰ命令）に変換するための処理内容が設定されていることを特徴とする。
【００１５】
請求項２記載の発明によれば、記憶手段が記憶する鍵情報には、プログラム中の実行命令を、処理を何も実行しない命令に変換するための処理内容が設定されている。そして、変換手段は記憶手段に記憶された鍵情報に基づいて、前記プログラムに含まれる命令のうちの変換すべき命令を、処理を何も実行しない命令に変換する。
【００１６】
これにより、たとえ元のプログラムにバグや不適切な命令等があったとしても、その部分の命令の実行を必要に応じて回避できる。従って、変換後のプログラムを実行する装置の信頼性向上に寄与できる。
【００１７】
また、例えば、同一のシステムプログラム等を、複数の異なる装置に設定しても、各々の装置の側において、実行したくない命令を適宜回避できるので、システムプログラム等の再利用が可能となる。
【００２７】
【発明の実施の形態】
以下、図１及び図２を参照して本発明に係るプログラム変換装置の実施の形態を詳細に説明する。
【００２８】
図１は、プログラム変換装置の内部構成を示すブロック図である。図１に示す様に、プログラム変換装置１は、ＣＰＵ（Central Processing Unit）１１、ＲＯＭ（Read Only Memory）１２、ＲＡＭ（Random Access Memory）１３、入力部１４、及び出力部１５等の各部を備える。また、上記各構成要素は、バス１６により接続され、互いにデータや制御信号等を送受する。
【００２９】
ＣＰＵ１１は、ＲＯＭ１２に格納されているシステムプログラムに応じた処理を実行する。特に、ＣＰＵ１１は、後述するプログラム変換処理を実行すると共に、変換後のアセンブラ言語プログラムをアセンブルする。そして、ＣＰＵ１１は、アセンブルにより生成された機械語をＲＡＭ１３に展開する。そして、ＣＰＵ１１は、ＲＡＭ１３に展開した機械語を逐次読込み、その機械語の命令に応じた処理を実行する。
【００３０】
ＲＯＭ１２は、読み出し専用の記憶装置である。このＲＯＭ１２は、当該プログラム変換装置１に対応するシステムプログラムの他、後述する変換テーブル３及びアセンブラ言語のソースプログラム２２を予め記憶する。これら、変換テーブル３及びソースプログラム２２は、ＲＯＭ１２からの強制的な読み出しで破壊させる機能をもたせるのが好ましい。
【００３１】
ＲＡＭ１３は、随時、読み出し及び書き込みが可能な記憶装置である。このＲＡＭ１３は、プログラムやデータなどの一時的な格納領域となるワークメモリ１３ａを含む。ワークメモリ１３ａには、ＣＰＵ１１によって変換されたソースプログラム（以下、「変換後プログラム」と記す。）に対応する機械語が展開される。
【００３２】
入力部１４はアセンブラ言語のソースプログラムやそのプログラムに係るデータ等を入力するためのインターフェースである。また、出力部１３は、当該プログラム変換装置１の処理結果を外部装置（図示略）に出力するためのインターフェースである。
【００３３】
次に、図２（ａ）〜（ｃ）を参照してプログラム変換装置１の処理について説明する。図２は、プログラム変換装置１の処理態様を説明する為の図である。
【００３４】
図２（ａ）は、アセンブラ言語による一連のソースプログラムの行番号２１と、該ソースプログラムの内容２２と、該ソースプログラムの各々の命令がＲＯＭ１２内の何所に格納されているかを特定するアドレス（番地）２３との対応関係を模式的に示す図である。尚、一連のソースプログラム２２及びアドレス２３は、１７７,１７８,及び１７９行目を除いて図示を省略している。
【００３５】
この図２（ａ）を参照すると、ソースプログラム２２において１７７行目のＮＯＰ命令は、ＲＯＭ１２の０ｘ２０番地に格納されている。また、１７８行目のＭＯＶ命令は、０ｘ３４番地に格納されている。更に、１７９行目のＡＤＤ命令は、０ｘ５６番地に格納されている。
【００３６】
ここで、ＮＯＰ（No OPeration）命令は、ＣＰＵ１１に何も処理を実行させない命令である。ＭＯＶ（Move）命令はデータ転送命令である。ＡＤＤ（Add）命令は加算命令である。尚、上記の命令は説明の都合上、例示したにすぎず、ソースプログラム２２に含まれる命令は、アセンブラ言語の命令であれば種別を問わない。
【００３７】
図２（ｂ）は、予めＲＯＭ１２に格納されている変換テーブル３を模式的に示す概念図である。この変換テーブル３の内容は、予め任意に指定できる。この変換テーブル３には、ソースプログラム２２に含まれる変換すべき命令の行番号３１（１７７,１７８,及び１７９行目）と、キーアドレス３２とが対応付けて格納されている。
【００３８】
キーアドレス３２には、変換後の命令のアドレスを基準とした場合における変換すべき各々の命令の相対アドレスを格納する。本実施例のプログラム変換処理においてＣＰＵ１１は、ソースプログラム２２における１７７,１７８,及び１７９行目の命令をすべてＮＯＰ命令に変換する。従って、キーアドレス３２には、ＮＯＰ命令のアドレスを基準とした場合における１７７,１７８,及び１７９行目の命令の相対アドレスを格納する。
【００３９】
従って、変換テーブル３において、ソースプログラム２２の１７７行目のＮＯＰ命令に対応するキーアドレス３２は、００００となる。また、変換テーブル３を参照すると、ＮＯＰ命令のアドレスに対するＭＯＶ命令（１７８行目）の相対アドレスは０ｘ１４である。更に、ＮＯＰ命令のアドレスに対するＡＤＤ命令（１７９行目）の相対アドレスは０ｘ３６である。
【００４０】
図２（ｃ）は、ＣＰＵ１１によるプログラム変換処理によって生成された変換後プログラムの行番号４１と、該変換後プログラムの内容４２と、該変換後プログラムの命令のアドレス４３との対応関係を模式的に示す図である。尚、図２において、変換後プログラムの行番号４１と、変換テーブル３に格納されている行番号３１と、ソースプログラムの行番号２１とは対応している。
【００４１】
ＣＰＵ１１は、この変換後プログラム４２を先ずアセンブルする。そして、ＣＰＵ１１はアセンブルして生成した機械語をＲＡＭ１３に展開する。そして、ＣＰＵ１１は当該機械語を逐次読込み、その機械語の命令に応じた処理を実行する。
【００４２】
以下、ＣＰＵ１１が実行するプログラム変換処理について説明する。先ず、ＣＰＵ１１は、ＲＯＭ１２からソースプログラム２２を読込む過程で、変換テーブル３を参照し、変換すべき命令の行番号を特定する。即ち、ＣＰＵ１１は、変換テーブル３を参照し、ソースプログラム２２において変換すべき部分を、１７７,１７８,１７９行目に特定する。
【００４３】
次に、ＣＰＵ１１はソースプログラム２２の内、変換すべき命令のアドレス２３から、それぞれに対応するキーアドレス３２を減算する。そして、ＣＰＵ１１は変換すべき命令（ＮＯＰ命令、ＭＯＶ命令、及びＡＤＤ命令）を、減算結果のアドレスに格納されている命令（ＮＯＰ命令）に置き換える。
【００４４】
具体的に説明すると、ソースプログラム２２の１７７行目のＮＯＰ命令は、０ｘ２０番地に格納されている。変換テーブル３を参照すると、１７７行目の命令に対応するキーアドレスは００００なので、ＣＰＵ１１は、０ｘ２０から００００を減算する。そして、ＣＰＵ１１は、減算結果である０ｘ２０番地に格納されている命令、即ちＮＯＰ命令を変換後の命令とする。
【００４５】
また、ソースプログラム２２の１７８行目のＭＯＶ命令は、０ｘ３４番地に格納されている。変換テーブル３を参照すると、１７８行目の命令に対応するキーアドレスは０ｘ１４なので、ＣＰＵ１１は、０ｘ３４から０ｘ１４を減算する。そして、ＣＰＵ１１はＭＯＶ命令を、減算結果である０ｘ２０番地に格納されている命令、即ちＮＯＰ命令に置き換える。これにより、ＭＯＶ命令がＮＯＰ命令に変換される。
【００４６】
更に、ソースプログラム２２の１７９行目のＡＤＤ命令は、０ｘ５６番地に格納されている。変換テーブル３を参照すると、１７９行目の命令に対応するキーアドレスは０ｘ３６なので、ＣＰＵ１１は、０ｘ５６から０ｘ３６を減算する。そして、ＣＰＵ１１はＡＤＤ命令を、減算結果である０ｘ２０番地に格納されている命令、即ちＮＯＰ命令に置き換える。これにより、ＡＤＤ命令がＮＯＰ命令に変換される。
【００４７】
上記の様な手順で、ＣＰＵ１１は、ソースプログラム２２の一部であるＮＯＰ命令、ＭＯＶ命令及びＡＤＤ命令を全てＮＯＰ命令に変換する。但し、上記の処理態様では、予めＮＯＰ命令のアドレスを基準アドレスとしたので、実質的にソースプログラム２２の１７７行目のＮＯＰ命令は変換されない。
【００４８】
最後に、ＣＰＵ１１は、ソースプログラム２２の一部を変換した変換後プログラム４２をアセンブルする。そして、ＣＰＵ１１はアセンブルして生成した機械語をＲＡＭ１３に展開し、その機械語の命令に応じた処理を実行する。
【００４９】
以上説明したように、本実施形態のプログラム変換装置１によれば、ＣＰＵ１１はＲＯＭ１２に格納されたソースプログラム２２を読込む過程で、ユーザが任意に指定可能な変換テーブル３を参照し、変換すべき命令を特定する。そして、ＣＰＵ１１はソースプログラム２２に含まれる変換すべき命令のアドレス２３から、それぞれに対応するキーアドレス３２を減算する。
【００５０】
そして、ＣＰＵ１１は、変換すべき命令を、減算結果のアドレスに格納されている命令に変換する。最後にＣＰＵ１１は、変換したプログラムに対応する機械語の命令に応じた処理を逐次実行する。
【００５１】
これにより、変換テーブル３を的確に指定すれば、アセンブラ言語で記述されたソースプログラム２２に含まれる任意の命令をＮＯＰ命令に変換できる。従って、たとえソースプログラムに誤りがあったとしても、その誤りの部分の実行を回避できるので、ＣＰＵ１１が誤動作することを防げる。
【００５２】
また、例えば、同一のシステムプログラム（ソースプログラム）を、類似の構成要素を備えた異なる装置の記憶部に格納しても、各々の装置ごとに専用の変換テーブルを用意するだけで、夫々の装置の側で、的確なシステムプログラムを実行できる。従って、システムプログラムの再利用が可能となる。
【００５３】
更に、指定する変換テーブル３の内容に応じて、ソースプログラム２２の一部のみを所望の命令に変換することもできるし、ソースプログラム２２の全部を所望の命令に変換することもできる。たとえソースプログラム２２の一部のみを変換したとしても、第三者はどの部分を変換するのか不明なので、実質的にＣＰＵ１１の処理内容を秘匿できる。
【００５４】
更に、ＲＯＭ１２に格納されているソースプログラム２２は、ＣＰＵ１１が実行する実際の動作を反映したものではない為、たとえＲＯＭ１２のソースプログラム２２を参照されても、ＣＰＵ１１の処理内容を秘匿できる。
【００５５】
更に、変換テーブル３を用意することにより、ソースプログラム２２と変換後プログラム４２とは、１対１に対応付けられるので、変換後プログラム４２から、ソースプログラム２２を再生できる。その場合は、変換後プログラム４２のアドレス４３の各々と、それに対応するキーアドレス３２とを加算して得られるアドレスに格納されている命令を参照する。
【００５６】
更に、ＲＯＭ１２に格納されているソースプログラム２２と変換テーブル３とについては、強制的な読み出しに対して内容を破壊させるようにすれば、いっそうプログラムの機密保護に寄与できる。
【００５７】
尚、本実施の形態における記述内容は、本発明に係るプログラム変換装置の好適な一例であり、本発明はこれに限定されるものではない。
【００５８】
例えば、プログラム変換処理において、ソースプログラム２２の１７７〜１７９行目は、ＮＯＰ命令に限らず、任意のアセンブラ言語の命令に変換できる。また、ソースプログラム２２の１７７〜１７９行目は、同一の命令に限らず、夫々異なる命令に変換できる。但し、その場合は、所定の命令に応じた変換テーブルを予め用意する。
【００５９】
また、ソースプログラム２２において、変換する部分は１７７〜１７９行目に限らず、ソースプログラムの任意の一部分又は全部を変換できることは勿論である。従って、ソースプログラムの一部分又は全部がもともとＮＯＰ命令で与えられても、ＣＰＵは、変換テーブルを参照することで、それらＮＯＰ命令を所定の命令に復元できる。この場合は、実質的にソースプログラムそのものを暗号化できる。
【００６０】
更に、ＲＡＭ１３には、ソースプログラム２２に対応する機械語のみを展開するようにしてもよい。この場合は、ＣＰＵ１１が該機械語をフェッチし実行する際に変換テーブルを参照して、ＣＰＵ１１の内部で機械語を変換する。これにより、たとえ実行中にＲＡＭ１３を参照されてもＣＰＵ１１の処理内容を秘匿できる。但し、上記の場合変換テーブルには、機械語プログラムの変換すべき命令の位置と、変換後の機械語命令のアドレスとを対応づけて格納する。
【００６１】
更に、図２（ｂ）に示す変換テーブル３には、説明の都合上、ソースプログラム２２の行番号３１を格納したが、変換テーブルは、ソースプログラムにおける変換すべき命令と、そのキーアドレス３２とを対応付ける内容であればよい。
【００６２】
従って、例えば、変換テーブル３には、変換すべき命令を含むプログラムのファイル名などをヘッダ情報として格納するようにしてもよい。また、入力部１４を介して、変換テーブル３及びソースプログラム２２の内容を書きかえることができるようにしてもよい。この場合は、ＲＯＭ１２は、ＥＰＲＯＭ（Erasable and Programmable ROM）で構成するのが好ましい。
【００６３】
更に、当該プログラム変換装置は、ワンチップで構成してもよいし、各々の構成要素を半導体集積回路により別々に構成してもよい。また、ＣＰＵ１１はＣＭＯＳ（Complementory Metal Oxide Semiconductor）等でＬＳＩ（Large Scale Integration）化されたＭＰＵ（MicroProcessing Unit）を含む。
【００６４】
更に、ＲＯＭ１２としては、ＭＲＯＭ（Mask ROM）、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable and Programmable ROM）、ＥＥＰＲＯＭ（Electrically Erasable and Programmable ROM）など種別を問わない。また、ＲＡＭ１３としても、ＤＲＡＭ（Dynamic RAM）、ＳＲＡＭ（Static RAM）の種別を問わない。
【００６５】
その他、プログラム変換装置１の細部構成、及び動作に関しても、本発明の趣旨を逸脱することのない範囲で適宜に変更可能であることは勿論である。
【００６６】
【発明の効果】
請求項１記載の発明によれば、鍵情報を的確に設定することで変換前のプログラムの内容を、変換後のプログラムの内容と全く無関係にできる。従って、実質的にプログラムの内容を秘匿できる。特に、ＣＰＵその他の実行手段に変換後のプログラムを実行させるようにすれば、たとえ第三者によって変換前のプログラムが参照されても、ＣＰＵ等の処理内容を秘匿できる。
【００６７】
更に、変換手段はプログラムに含まれる命令そのものを別の命令に変換するので、当該プログラム変換装置によれば、鍵情報の設定内容に応じて、ＣＰＵによる実行を適宜制限できる。また、プログラム含まれる実行命令のうち変換したい命令と、変換後の命令とを鍵情報として任意に指定できる。従って、プログラムの任意の一部のみ或いは全部を変換できるという利便性がある。また、鍵情報には前記プログラムにおける変換すべき実行命令の位置を設定できる。従って、例えば、プログラムの行番号を指定することで、容易且つ確実に変換すべき部分を指定できる。また、変換手段は、アドレスの演算処理を通じてプログラムを変換するので迅速且つ確実に変換処理が実行される。
【００６８】
請求項２記載の発明によれば、たとえ元のプログラムにバグや不適切な命令等があったとしても、その部分の命令の実行を必要に応じて回避できる。従って、変換後のプログラムを実行する装置の信頼性向上に寄与できる。また、例えば、同一のシステムプログラム等を、複数の異なる装置に設定しても、各々の装置の側において、実行したくない命令を適宜回避できるので、システムプログラム等の再利用が可能となる。
【００７１】
更に、たとえ元のプログラムにバグや不適切な命令等があったとしても、その部分の命令の実行を必要に応じて回避できる。従って、変換後のプログラムを実行する装置の信頼性向上に寄与できる。また、例えば、同一のシステムプログラム等を、複数の異なる装置に設定しても、各々の装置の側において、実行したくない命令を適宜回避できるので、システムプログラム等の再利用が可能となる。
【図面の簡単な説明】
【図１】本発明の実施の形態によるプログラム変換装置の内部構成を示すブロック図である。
【図２】図１に示すプログラム変換装置１の処理態様を説明する為の図であり、（ａ）はソースプログラムを模式的に示す図、（ｂ）は変換テーブルを模式的に示す図、（ｃ）は変換後プログラムを模式的に示す図である。
【符号の説明】
１    プログラム変換装置
１１    ＣＰＵ
１２    ＲＯＭ
１３    ＲＡＭ
１３ａ    ワークメモリ
１４    入力部
１５    出力部
１６    バス
２１,３１,４１    行番号
２２    ソースプログラム
２３    ソースプログラムのアドレス
３    変換テーブル
３２    キーアドレス
４２    変換後プログラム
４３    変換後プログラムのアドレス
【図１】
0004663859.tif 000002
【図２】
0004663859.tif 000003