(57)【要約】【課題】  メモリ上で暗号化されたプログラムが再配置された場合であっても命令の実行が可能な命令実行装置を提供する。【解決手段】  暗号文命令から命令を復号し、実行する命令実行装置であって、複数の暗号文命令の各々は、複数の暗号文から１つの平文を復号可能な暗号化方式に従い暗号化された命令であり、実行対象の命令の命令アドレスから、当該命令を復号するために必要な暗号文命令が格納されている外部記憶手段の複数の一時命令アドレスを生成し、外部記憶手段の複数の一時命令アドレスにそれぞれ記憶された複数の暗号文命令を読み込む命令読み込み部３００と、命令読み込み部３００で読み込まれた複数の暗号文命令から１つの命令を復号する復号化部４００と、命令読み込み部３００に命令アドレスを供給し、復号化部４００で復号された命令を実行するＣＰＵコア２００とを備える。【選択図】        図１
2005050116.tif 000002
【特許請求の範囲】
【請求項１】
暗号文命令から命令を復号し、実行する命令実行装置であって、
前記暗号文命令は、複数の暗号文から１つの平文を復号可能な暗号化方式に従い暗号化された命令であり、
実行対象の命令の命令アドレスから、当該命令を復号するために必要な暗号文命令が格納されている外部記憶手段の複数の一時命令アドレスを生成し、前記外部記憶手段の前記複数の一時命令アドレスにそれぞれ記憶された複数の暗号文命令を読み込む命令読み込み手段と、
前記命令読み込み手段で読み込まれた前記複数の暗号文命令から１つの命令を復号する復号化手段と、
前記命令読み込み手段に前記命令アドレスを供給する命令アドレス供給手段と、
前記復号化手段で復号された前記命令を実行する命令実行手段とを備える
ことを特徴とする命令実行装置。
【請求項２】
前記命令読み込み手段は、実行対象の命令の命令アドレスに基づいて、相互に所定のアドレス長離れた第１の一時命令アドレスと第２の一時命令アドレスとを生成し、前記外部記憶手段の前記第１および第２の一時命令アドレスにそれぞれ記憶された２つの暗号文命令を読み込む
ことを特徴とする請求項１に記載の命令実行装置。
【請求項３】
前記命令読み込み手段は、実行対象の命令の命令アドレスに基づいて、当該命令アドレスと同じ第１の一時命令アドレスと、当該命令アドレスよりも１ワード下位の第２の一時命令アドレスとを生成し、前記外部記憶手段の前記第１および第２の一時命令アドレスにそれぞれ記憶された２つの暗号文命令を読み込む
ことを特徴とする請求項２に記載の命令実行装置。
【請求項４】
前記命令読み込み手段は、実行対象の命令の命令アドレスに基づいて、当該命令アドレスと同じ第１の一時命令アドレスと、当該命令アドレスよりも１ワード上位の第２の一時命令アドレスとを生成し、前記外部記憶手段の前記第１および第２の一時命令アドレスにそれぞれ記憶された２つの暗号文命令を読み込む
ことを特徴とする請求項２に記載の命令実行装置。
【請求項５】
前記命令読み込み手段は、実行対象の命令の命令アドレスに基づいて、当該命令アドレスと同じ第１の一時命令アドレスと、当該命令アドレスよりも２ワード以上の予め定められたワードだけ離れた第２の一時命令アドレスとを生成し、前記外部記憶手段の前記第１および第２の一時命令アドレスにそれぞれ記憶された２つの暗号文命令を読み込む
ことを特徴とする請求項２に記載の命令実行装置。
【請求項６】
前記暗号化方式は連鎖暗号であり、
前記復号化手段は、
前記第２の一時命令アドレスに記憶された暗号文命令を入力として受け、当該暗号文命令に従い擬似乱数を発生する擬似乱数発生部と、
前記第１の一時命令アドレスに記憶された暗号文命令および前記擬似乱数を入力として受け、当該暗号文命令および当該擬似乱数の間でビットごとの排他的論理和を算出し、算出結果を前記実行対象の命令として出力する排他的論理和算出部とを有する
ことを特徴とする請求項３〜５のいずれか１項に記載の命令実行装置。
【請求項７】
前記暗号化方式は連鎖暗号であり、
前記復号化手段は、
前記第１の一時命令アドレスに記憶された暗号文命令を入力として受け、当該暗号文命令に従い擬似乱数を発生する擬似乱数発生部と、
前記擬似乱数および前記第２の一時命令アドレスに記憶された暗号文命令を入力として受け、当該擬似乱数および当該暗号文命令の間でビットごとの排他的論理和を算出し、算出結果を前記実行対象の命令として出力する排他的論理和算出部とを有する
ことを特徴とする請求項４に記載の命令実行装置。
【請求項８】
前記暗号化方式は共通鍵ブロック暗号のＣＢＣ（Cipher Block Chaining）モードであり、
前記復号化手段は、
命令の暗号時と同じ鍵データを格納する鍵格納部と、
前記第１の一時命令アドレスに記憶された暗号文命令を前記鍵データに基づいて復号する一時命令復号化部と、
前記一時命令復号化部で復号された命令と前記第２の一時命令アドレスに記憶された暗号文命令との間でビットごとの排他的論理和を算出し、算出結果を前記実行対象の命令として出力する排他的論理和算出部とを有する
ことを特徴とする請求項２に記載の命令実行装置。
【請求項９】
さらに、前記命令読み込み手段が読み込んだ前記複数の暗号文命令を一時的に記憶する一時命令記憶手段を備え、
前記命令読み込み手段は、実行対象の命令の命令アドレスに基づいて、当該命令を復号するために必要な暗号文命令が格納されている外部記憶手段の複数の一時命令アドレスのうち、対応する暗号文命令が前記一時命令記憶手段に記憶されていない一時命令アドレスを生成し、前記外部記憶手段の当該一時命令アドレスに記憶された暗号文命令を読み込み、前記一時命令記憶手段に記憶し、
前記復号化手段は、前記一時命令記憶手段に記憶された前記複数の暗号文命令から１つの命令を復号する
ことを特徴とする請求項１〜８のいずれか１項に記載の命令実行装置。
【請求項１０】
暗号文命令から命令を復号し、実行する命令実行方法であって、
前記暗号文命令は、複数の暗号文から１つの平文を復号可能な暗号化方式に従い暗号化された命令であり、
実行対象の命令の命令アドレスを生成する命令アドレス生成ステップと、
前記実行対象の命令の命令アドレスから、当該命令を復号するために必要な暗号文命令が格納されている外部記憶手段の複数の一時命令アドレスを生成する一時命令アドレス生成ステップと、
前記外部記憶手段の前記複数の一時命令アドレスにそれぞれ記憶された複数の暗号文命令を読み込む命令読み込みステップと、
読み込まれた前記複数の暗号文命令から１つの命令を復号する復号化ステップと、
復号された前記命令を実行する命令実行ステップとを含む
ことを特徴とする命令実行方法。
【請求項１１】
前記一時命令アドレス生成ステップでは、前記実行対象の命令の命令アドレスに基づいて、相互に所定のアドレス長離れた第１の一時命令アドレスと第２の一時命令アドレスとを生成し、
前記命令読み込みステップでは、前記外部記憶手段の前記第１および第２の一時命令アドレスにそれぞれ記憶された２つの暗号文命令を読み込む
ことを特徴とする請求項１０に記載の命令実行方法。
【請求項１２】
前記一時命令アドレス生成ステップは、
前記実行対象の命令の命令アドレスと同じ第１の一時命令アドレスを生成する第１の生成ステップと、
前記実行対象の命令の命令アドレスよりも１ワード下位の第２の一時命令アドレスを生成する第２の生成ステップとを含む
ことを特徴とする請求項１１に記載の命令実行方法。
【請求項１３】
前記一時命令アドレス生成ステップは、
前記実行対象の命令の命令アドレスと同じ第１の一時命令アドレスを生成する第１の生成ステップと、
前記実行対象の命令の命令アドレスよりも１ワード上位の第２の一時命令アドレスを生成する第２の生成ステップとを含む
ことを特徴とする請求項１１に記載の命令実行方法。
【請求項１４】
前記一時命令アドレス生成ステップは、
前記実行対象の命令の命令アドレスと同じ第１の一時命令アドレスを生成する第１の生成ステップと、
前記実行対象の命令の命令アドレスよりも２ワード以上の予め定められたワードだけ離れた第２の一時命令アドレスを生成する第２の生成ステップとを含む
ことを特徴とする請求項１１に記載の命令実行方法。
【請求項１５】
前記暗号化方式は連鎖暗号であり、
前記復号化ステップは、
前記第２の一時命令アドレスに記憶された暗号文命令を入力として受け、当該暗号文命令に従い擬似乱数を発生する擬似乱数発生ステップと、
前記第１の一時命令アドレスに記憶された暗号文命令および前記擬似乱数を入力として受け、当該暗号文命令および当該擬似乱数の間でビットごとの排他的論理和を算出し、算出結果を前記実行対象の命令として出力する排他的論理和算出ステップとを含む
ことを特徴とする請求項１２〜１４のいずれか１項に記載の命令実行方法。
【請求項１６】
前記暗号化方式は連鎖暗号であり、
前記復号化ステップは、
前記第１の一時命令アドレスに記憶された暗号文命令を入力として受け、当該暗号文命令に従い擬似乱数を発生する擬似乱数発生ステップと、
前記擬似乱数および前記第２の一時命令アドレスに記憶された暗号文命令を入力として受け、当該擬似乱数および当該暗号文命令の間でビットごとの排他的論理和を算出し、算出結果を前記実行対象の命令として出力する排他的論理和算出ステップとを含む
ことを特徴とする請求項１３に記載の命令実行方法。
【請求項１７】
前記暗号化方式は共通鍵ブロック暗号のＣＢＣ（Cipher Block Chaining）モードであり、
前記復号化ステップは、
前記第１の一時命令アドレスに記憶された暗号文命令を命令の暗号時と同じ鍵データに基づいて復号する一時命令復号化ステップと、
前記一時命令復号化ステップにおいて復号された命令と前記第２の一時命令アドレスに記憶された暗号文命令との間でビットごとの排他的論理和を算出し、算出結果を前記実行対象の命令として出力する排他的論理和算出ステップとを含む
ことを特徴とする請求項１１に記載の命令実行方法。
【請求項１８】
コンピュータで実行される命令を暗号化した暗号文命令を格納するデータであって、
前記暗号文命令は、複数の暗号文から１つの平文を復号可能な暗号化方式で暗号化された命令より構成される
ことを特徴とするデータ。
【請求項１９】
前記暗号文命令は、連鎖暗号に従い暗号化された命令である
ことを特徴とする請求項１８に記載のデータ。
【請求項２０】
前記暗号文命令は、共通鍵ブロック暗号のＣＢＣ（Cipher Block Chaining）モードに従い暗号化された命令である
ことを特徴とする請求項１８に記載のデータ。
【請求項２１】
前記暗号文命令は、共通鍵ブロック暗号のＣＦＢ（Cipher Feedback）モードに従い暗号化された命令である
ことを特徴とする請求項１８に記載のデータ。
【請求項２２】
請求項１８〜２１のいずれか１項に記載のデータが記録されたコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部メモリに記憶されたプログラムに含まれる命令を逐次読み出して実行する命令実行装置に関するものであり、特に、暗号化された命令を復号しながら実行する命令実行装置に関する。
【背景技術】
【０００２】
従来、プログラムの不正コピー等を防止することを目的として、暗号化された命令が格納されているプログラムがある。また、このプログラムを実行するコンピュータとして、予め暗号化されている命令を復号しながら実行するコンピュータがある（例えば、特許文献１参照。）。
【０００３】
図２６は、特許文献１に記載の暗号化データ処理装置の概略構成を示すブロック図である。暗号化データ処理装置９１０は、暗号化されたプログラムを復号しながら実行する装置であり、復号された命令を実行するデータ処理部９３０と、暗号化されている命令を復号する復号回路９４０とを備える。暗号化データ処理装置９１０で実行される命令および当該命令実行時に参照されるデータは予め暗号化され、暗号化データ処理装置９１０の外部に存在するメモリ９２０に格納されている。暗号化には共通鍵暗号方式が用いられ、暗号化の鍵データとしては、暗号化された命令またはデータが格納されているメモリ９２０のアドレスが用いられる。
【０００４】
データ処理部９３０は、以下のようにして暗号化されている命令を実行する。すなわち、データ処理部９３０は、メモリ９２０にアドレスを供給し、暗号化されている命令またはデータを読み出す。復号回路９４０は、メモリ９２０より読み出された暗号化されている命令またはデータを入力として受ける。また、復号回路９４０は、当該命令またはデータが格納されているメモリ９２０のアドレスをデータ処理部９３０より入力として受ける。復号回路９４０は、データ処理部９３０より受けたアドレスを鍵データとして、当該命令またはデータを復号し、データ処理部９３０に供給する。データ処理部９３０は、復号された命令またはデータを用いて、データ処理を行ない、処理結果のデータをメモリ９２０に書き込む。
【０００５】
以上のような暗号化データ処理装置により、予め暗号化されている命令を復号しならが実行することができる。従来の復号化データ処理装置では、命令またはデータの暗号化の鍵データとしてメモリ９２０のアドレスを用いているため、同じ命令であっても異なるアドレスに配置されている場合には暗号文が異なるため解読が困難であり、プログラムの保護が図られる。このため、プログラムの不正コピー等を防止することが可能である。
【特許文献１】特開平７−４４３７５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の復号化データ処理装置では、命令またはデータの暗号化の鍵データとしてメモリ９２０のアドレスを用いている。このため、暗号化処理時と異なるアドレスに暗号化されたプログラムを配置すると、当該プログラムを復号することができないため、暗号プログラムのメモリ９２０上での配置位置が固定化され、再配置不可能であるという問題がある。
【０００７】
本発明は上述の課題を解決するためになされたものであり、暗号化されたプログラムの解読が困難であり、かつ、メモリ上で暗号化されたプログラムが再配置された場合であっても命令の実行が可能な命令実行装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る命令実行装置は、暗号文命令から命令を復号し、実行する命令実行装置であって、前記暗号文命令は、複数の暗号文から１つの平文を復号可能な暗号化方式に従い暗号化された命令であり、実行対象の命令の命令アドレスから、当該命令を復号するために必要な暗号文命令が格納されている外部記憶手段の複数の一時命令アドレスを生成し、前記外部記憶手段の前記複数の一時命令アドレスにそれぞれ記憶された複数の暗号文命令を読み込む命令読み込み手段と、前記命令読み込み手段で読み込まれた前記複数の暗号文命令から１つの命令を復号する復号化手段と、前記命令読み込み手段に前記命令アドレスを供給する命令アドレス供給手段と、前記復号化手段で復号された前記命令を実行する命令実行手段とを備える。
【０００９】
この構成によると、暗号文命令は複数の暗号文から１つの平文を復号可能な暗号化方式に従い暗号化されている。このため、同一の暗号文命令であっても、元となる命令が同じであるとは限らない。言い換えると、暗号文命令は複数の文（暗号文または平文）を暗号化することにより生成される。このため、同一の命令であっても暗号文命令が同じであるとは限らない。よって、暗号化されたプログラムの解読が困難である。また、復号化手段は、外部記憶手段のアドレス情報を用いることなく暗号文命令を復号する。このため、暗号化されたプログラムの外部記憶手段上での配置位置は固定されず、再配置が可能である。
【００１０】
好ましくは、上記命令実行装置は、さらに、前記命令読み込み手段が読み込んだ前記複数の暗号文命令を一時的に記憶する一時命令記憶手段を備え、前記命令読み込み手段は、実行対象の命令の命令アドレスに基づいて、当該命令を復号するために必要な暗号文命令が格納されている外部記憶手段の複数の一時命令アドレスのうち、対応する暗号文命令が前記一時命令記憶手段に記憶されていない一時命令アドレスを生成し、前記外部記憶手段の当該一時命令アドレスに記憶された暗号文命令を読み込み、前記一時命令記憶手段に記憶し、前記復号化手段は、前記一時命令記憶手段に記憶された前記複数の暗号文命令から１つの命令を復号する。
【００１１】
この構成によると、前記命令読み込み手段が読み込んだ暗号文命令を一時命令記憶手段に記憶させることができ、命令読み込み手段は重複した暗号文命令の読み込みを排除することができる。このため、暗号文命令を高速に復号することができ、プログラムを高速に実行することができる。
【００１２】
なお、本発明は、以上のような命令実行装置として実現することができるだけでなく、その手段をステップとする命令実行方法として実現したり、命令実行装置で実行される暗号化されたプログラムとして実現することもできる。そのようなプログラムは、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）等の記録媒体やインターネット等の伝送媒体を介して配信することができるのは言うまでもない。
【発明の効果】
【００１３】
以上のように本発明によれば、暗号化されたプログラムの解読が困難であり、かつ、暗号化されたプログラムのメモリ上での配置位置は固定されず、再配置が可能である。
さらに、暗号文命令を高速に復号し、プログラムを高速に実行することができる。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照しつつ本発明の実施の形態について説明する。
（実施の形態１）
図１は、本発明の実施の形態１に係る命令実行装置であるコンピュータのハードウェア構成を示すブロック図である。コンピュータ１００は、外部メモリ６００に記憶された暗号化されたプログラムを解読しながら実行する１チップマイクロプロセッサであり、ＣＰＵコア２００と、命令読み込み部３００と、復号化部４００と、バスインタフェース５００とを備えている。
【００１５】
外部メモリ６００に記憶されたプログラムのうち命令は暗号化されており、データは暗号化されていないものとする。また、命令の暗号化の方式には、連鎖暗号の一種である内部同期式ストリーム暗号が用いられるものとする。内部同期式ストリーム暗号によると２つの暗号化された命令（以下「暗号化命令」という。）から１つの命令を復号することができる。内部同期式ストリーム暗号の詳細については後述する。
【００１６】
ＣＰＵコア２００は、プログラム中の命令を順次実行する処理部であり、ＣＰＵコア２００内部のプログラムカウンタ（図示せず）に格納された命令アドレスを命令読み込み部３００に出力する。その後、ＣＰＵコア２００は、復号化部４００より命令４２０を受け、命令４２０を実行する。ＣＰＵコア２００は、命令４２０の実行時に、バスインタフェース５００を介して外部メモリ６００にデータアドレス２３０を供給し、データアドレス２３０で指定される番地に格納されたデータを読み込んだり、当該番地にデータを書き込んだりする。
【００１７】
命令読み込み部３００は、ＣＰＵコア２００より命令アドレス２１０を受け、命令アドレス２１０より一時命令アドレス３１０および３１１を生成する。また、命令読み込み部３００は、外部メモリ６００上の一時命令アドレス３１０および３１１で指定される番地に格納されているデータを一時命令５２０および５２１としてそれぞれ読み込み、復号化部４００に一時命令３２０および３２１としてそれぞれ出力する。なお、一時命令アドレス３１０は、命令アドレス２１０と同じアドレスであり、一時命令アドレス３１１は、命令アドレス２１０よりも１ワード（ここでは４バイト（３２ビット））下位のアドレスとする。
【００１８】
復号化部４００は、一時命令３２０および３２１より命令４２０を復号し、ＣＰＵコア２００に供給する。図２は、復号化部４００のハードウェア構成を示すブロック図である。復号化部４００は、一時命令３２１を受け、一時命令３２１を入力として一時命令３２１と同一のビット数の擬似乱数を発生させる擬似乱数発生部４００ａと、一時命令３２０と擬似乱数発生部４００ａより出力される擬似乱数との間でビットごとの排他的論理和を求め、結果を命令４２０として出力する排他的論理和算出部４００ｂとを備える。ここでは、擬似乱数発生部４００ａとして、ＬＦＳＲ（線形フィードバックシフトレジスタ）を用いるものとする。
【００１９】
図３は、暗号文命令と平文の命令（以下適宜「平文命令」という）との関係を示す図である。図３（ａ）は暗号文命令の一例を示す図であり、図３（ｂ）は平文命令の一例を示す図である。図３（ａ）に示すように、内部同期式ストリーム暗号に従い、暗号文命令ｎ（ｎは自然数）は、１つ前の番地の暗号文命令（ｎ−１）を入力とする擬似乱数ＲＮＧ（暗号文命令（ｎ−１））と平文の命令ｎとの排他的論理和を算出することにより求められる。すなわち、暗号文命令ｎは、次式（１）および（２）のように定式化される。ここで、「Ａ  ＸＯＲ  Ｂ」は、ＡとＢとのビットごとの排他的論理和を示すものとする。
【００２０】
暗号文命令ｎ＝命令ｎ  ＸＯＲ  ＲＮＧ（暗号文命令（ｎ−１））    …（１）
（ｎは２以上の整数）
暗号文命令１＝命令１  ＸＯＲ  ＲＮＧ（ＩＶ）                    …（２）
（ＩＶは初期ベクトル）
【００２１】
例えば、暗号文命令２は次式（３）のように表される。
暗号文命令２＝命令２  ＸＯＲ  ＲＮＧ（暗号文命令１）            …（３）
すなわち、暗号文命令２は、平文の命令２と暗号文命令１を入力とする擬似乱数との間でビットごとの排他的論理和を取った結果である。
【００２２】
逆に、命令ｎは、次式（４）および（５）のように定式化される。
命令ｎ＝暗号文命令ｎ  ＸＯＲ  ＲＮＧ（暗号文命令（ｎ−１））    …（４）
（ｎは２以上の整数）
命令１＝暗号文命令１  ＸＯＲ  ＲＮＧ（ＩＶ）                    …（５）
（ＩＶは初期ベクトル）
以上のようにして生成された暗号文命令列とデータとが外部メモリ６００に格納されている。
【００２３】
以上のように構成されたコンピュータ１００の動作について次に説明する。図４は、コンピュータ１００で実行される処理のフローチャートである。ＣＰＵコア２００は、プログラムカウンタに格納されている命令アドレス２１０を命令読み込み部３００に供給する（Ｓ２）。命令読み込み部３００は、命令アドレス２１０より一時命令アドレス３１０を生成する（Ｓ４）。ここでは、一時命令アドレス３１０は、命令アドレス２１０と同一のものであるものとする。命令読み込み部３００は、外部メモリ６００の一時命令アドレス３１０に格納されている暗号文命令を一時命令５２０として読み込み、一時命令３２０として復号化部４００に出力する（Ｓ６）。
【００２４】
次に、命令読み込み部３００は、命令アドレス２１０より一時命令アドレス３１１を生成する（Ｓ８）。ここでは、一時命令アドレス３１１は、命令アドレス２１０より１ワード下位のアドレスであるものとする。すなわち、次式（６）のように表される。
一時命令アドレス３１１＝命令アドレス２１０−０ｘ０００４          （６）
【００２５】
命令読み込み部３００は、外部メモリ６００の一時命令アドレス３１１に格納されている暗号文命令を一時命令５２１として読み込み、一時命令３２１として復号化部４００に出力する（Ｓ１０）。
【００２６】
復号化部４００は、一時命令３２０と一時命令３２１とから命令４２０を生成する（Ｓ１２）。すなわち、擬似乱数発生部４００ａが、一時命令３２１を入力として受け、擬似乱数ＲＮＧ（一時命令３２１）を出力する。次に、排他的論理和算出部４００ｂが、一時命令３２０とＲＮＧ（一時命令３２１）との間でビットごとの排他的論理和を算出して命令４２０としてＣＰＵコア２００に出力する。
【００２７】
ＣＰＵコア２００は、復号化部４００より命令４２０を受け、実行する（Ｓ１４）。以上の処理を外部メモリ６００に格納されたプログラム中の各命令について行なう。
【００２８】
図５は、図３に示される命令１〜４を順次実行する際のバスの状態を示す図である。図３（ｂ）に示されるように、命令１は０ｘ８０００番地のデータをレジスタＲ１に格納する命令であり、命令２は０ｘ８００４番地のデータをレジスタＲ２に格納する命令であり、命令３はレジスタＲ１およびレジスタＲ２に格納された値を加算し、レジスタＲ３に格納する命令であり、命令４はレジスタＲ３の値を０ｘ８００８番地に格納する命令であるものとする。
【００２９】
例えば、図５に示されるように、ＣＰＵコア２００より命令読み込み部３００に命令アドレス２１０「０ｘ１０００」が供給されると、命令読み込み部３００は一時命令アドレス３１０「０ｘ１０００」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ１０００」を供給する。命令読み込み部３００は、外部メモリ６００の０ｘ１０００番地に格納されている暗号文命令１を一時命令５２０として読み込み、一時命令３２０として復号化部４００に出力する。次に、命令読み込み部３００が一時命令アドレス３１１「０ｘ０ＦＦＣ」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ０ＦＦＣ」として供給する。命令読み込み部３００は、外部メモリ６００の０ｘ０ＦＦＣ番地に格納されている初期ベクトル「ＩＶ」を一時命令５２１として読み込み、一時命令３２１として復号化部４００に出力する。
【００３０】
初期ベクトル「ＩＶ」が読み込まれた時点で、復号化部４００により暗号文命令１が復号され、復号結果（命令１）が命令４２０としてＣＰＵコア２００に出力される。その後、ＣＰＵコア２００が命令１を実行する。命令１は上述のように０ｘ８０００番地のデータをレジスタＲ１に書き込む命令である。このため、ＣＰＵコア２００がデータアドレス２３０として「０ｘ８０００」を出力すると、バスインタフェース５００を介して外部メモリ６００へ外部アドレスとして「０ｘ８０００」が供給される。そして、外部メモリ６００の０ｘ８０００番地に格納されたデータが、外部データおよび読み込みデータ５４０としてＣＰＵコア２００に読み込まれる。
【００３１】
以上のようにして暗号化された命令が復号されながら実行される。本実施の形態では暗号化方式として、内部同期式ストリーム暗号を用いている。内部同期式ストリーム暗号では、命令を暗号化する際に、その１ワード下位の暗号文命令を用いて暗号化が行なわれる。このため、同一の命令であっても暗号文命令が同じになるとは限らない。逆に、同一の暗号文命令であっても、元となる命令が同じであるとは限らない。このため、暗号化されたプログラムの解読が困難である。
また、暗号化時にメモリのアドレス情報を使用していない。このため、暗号化されたプログラムの外部メモリ上での配置位置は固定されず、再配置が可能である。
【００３２】
（実施の形態２）
次に、本発明の実施の形態２に係るコンピュータについて説明する。以下の実施の形態では同一の構成部品には同一の符号を付す。その名称および機能も同一であるため、適宜説明を省略する。
【００３３】
図６は、本実施の形態に係るコンピュータのハードウェア構成を示すブロック図である。本実施の形態に係るコンピュータ１０２は、図１に示す実施の形態１に係るコンピュータ１００において、命令読み込み部３００の代わりに命令読み込み部３０２を用い、復号化部４００の代わりに復号化部４０２を用いたものである。
【００３４】
図１に示した実施の形態１に係る命令読み込み部３００は、命令アドレス２１０を受け、命令アドレス２１０と同じ一時命令アドレス３１０と、命令アドレス２１０よりも１ワード下位の一時命令アドレス３１１とを生成し、外部メモリ６００の当該２つのアドレスに格納されているデータを一時命令５２０および５２１として読み込んでいる。これに対し、本実施の形態に係る命令読み込み部３０２は、命令アドレス２１０を受け、命令アドレス２１０と同じ一時命令アドレス３１０と、命令アドレス２１０よりも１ワード上位の一時命令アドレス３１１とを生成し、外部メモリ６００の当該２つのアドレスに格納されているデータを一時命令５２０および５２１として読み込む。
【００３５】
また、図７は本実施の形態に係る復号化部４０２のハードウェア構成を示すブロック図である。復号化部４０２は、一時命令３２０を受け、一時命令３２０を入力として一時命令３２０と同一のビット数の擬似乱数を発生させる擬似乱数発生部４０２ａと、擬似乱数発生部４０２ａより出力される擬似乱数と一時命令３２１との間でビットごとの排他的論理和を求め、結果を命令４２０として出力する排他的論理和算出部４０２ｂとを備える。擬似乱数発生部４０２ａは、実施の形態１に係る擬似乱数発生部４００ａと同一の構成を有する。
【００３６】
図８は、暗号文命令と平文命令との関係を示す図である。図８（ａ）は暗号文命令の一例を示す図であり、図８（ｂ）は平文命令の一例を示す図である。図３に示した実施の形態１に係る暗号文命令と平文命令との関係と同様、暗号文命令は、内部同期式ストリーム暗号に従い作成される。ただし、実施の形態１では、平文命令に対する命令アドレス２１０と、それに対応する暗号文命令が格納されている外部メモリ６００のアドレスとが同一であるのに対し、本実施の形態では、平文命令に対する命令アドレス２１０が、それに対応する暗号文命令が格納されている外部メモリ６００のアドレスよりも１ワード下位のアドレスである点が異なる。
【００３７】
以上のように構成されたコンピュータ１０２の動作について次に説明する。図９は、コンピュータ１０２で実行される処理のフローチャートである。命令アドレス２１０の供給処理（Ｓ２）から一時命令３２０の取得処理（Ｓ６）までは、実施の形態１と同様である。一時命令３２０の取得処理（Ｓ６）の後、命令読み込み部３０２は、命令アドレス２１０より一時命令アドレス３１１を生成する（Ｓ２２）。ここでは、一時命令アドレス３１１は、命令アドレス２１０より１ワード上位のアドレスである。すなわち、次式（７）のように表される。
一時命令アドレス３１１＝命令アドレス２１０＋０ｘ０００４        …（７）
【００３８】
命令読み込み部３０２は、外部メモリ６００の一時命令アドレス３１１に格納されている暗号文命令を一時命令５２１として読み込み、一時命令３２１として復号化部４００に出力する（Ｓ１０）。
【００３９】
復号化部４００は、一時命令３２０と一時命令３２１とから命令４２０を生成する（Ｓ２４）。すなわち、擬似乱数発生部４０２ａが、一時命令３２０を入力として受け、擬似乱数ＲＮＧ（一時命令３２０）を出力する。次に、排他的論理和算出部４０２ｂが、一時命令３２１とＲＮＧ（一時命令３２０）との間でビットごとの排他的論理和を算出して命令４２０としてＣＰＵコア２００に出力する。
ＣＰＵコア２００は、復号化部４０２より命令４２０を受け、実行する（Ｓ１４）。以上の処理を外部メモリ６００に格納されたプログラム中の各命令について実行する。
【００４０】
図１０は、図８に示される命令１〜４を順次実行する際のバスの状態を示す図である。命令１〜４の詳細は、図３に示したものと同じであるため、その詳細な説明はここでは繰り返さない。
【００４１】
例えば、図１０に示されるように、ＣＰＵコア２００より命令読み込み部３０２に命令アドレス２１０「０ｘ１０００」が供給されると、命令読み込み部３０２は一時命令アドレス３１０「０ｘ１０００」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ１０００」を供給する。命令読み込み部３０２は、外部メモリ６００の０ｘ１０００番地に格納されている初期ベクトル「ＩＶ」を一時命令５２０として読み込み、一時命令３２０として復号化部４０２に出力する。次に、命令読み込み部３０２は一時命令アドレス３１１「０ｘ１００４」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ１００４」を供給する。命令読み込み部３０２は、外部メモリ６００の０ｘ１００４番地に格納されている暗号文命令１を一時命令５２１として読み込み、一時命令３２１として復号化部４０２に出力する。
【００４２】
暗号文命令１が読み込まれた時点で復号化部４０２により暗号文命令１が復号され、復号結果（命令１）が命令４２０としてＣＰＵコア２００に出力される。その後、ＣＰＵコア２００が命令１を実行する。命令１を実行することにより、ＣＰＵコア２００がデータアドレス２３０として「０ｘ８０００」を出力し、外部メモリ６００へ外部アドレスとして「０ｘ８０００」が供給される。そして、外部メモリ６００の０ｘ８０００番地に格納されたデータが、外部データおよび読み込みデータ５４０としてＣＰＵコア２００に読み込まれる。
【００４３】
以上のようにして暗号化された命令が復号されながら実行される。本実施の形態においても実施の形態１と同様、暗号化方式として内部同期式ストリーム暗号を用いている。このため、暗号化されたプログラムの解読が困難である。
また、暗号化時にメモリのアドレス情報を使用していない。このため、暗号化されたプログラムの外部メモリ上での配置位置は固定されず、再配置が可能である。
【００４４】
（実施の形態３）
次に、本発明の実施の形態３に係るコンピュータについて説明する。本実施の形態では、暗号文命令は、上述の実施の形態１および２と同様に内部同期式ストリーム暗号を用いて平文命令の暗号化を行なうことにより作成される。しかし、実施の形態１および２とは異なり、上位アドレスから下位アドレスに向かって命令の暗号化が行なわれる。そのため、コンピュータの構成が上述の実施形態とは一部異なる。
【００４５】
図１１は、本実施の形態に係るコンピュータのハードウェア構成を示すブロック図である。本実施の形態に係るコンピュータ１０３は、図１に示す実施の形態１に係るコンピュータ１００において、命令読み込み部３００の代わりに命令読み込み部３０２を用いたものである。命令読み込み部３０２は、図６に示した実施の形態２における命令読み込み部３０２と同様である。
【００４６】
図１２は、暗号文命令と平文命令との関係を示す図である。図１２（ａ）は暗号文命令の一例を示す図であり、図１２（ｂ）は平文命令の一例を示す図である。図１２（ａ）に示すように、内部同期式ストリーム暗号に従い、暗号文命令ｎ（ｎは自然数）は、１ワード上位の番地に格納されている暗号文命令（ｎ＋１）を入力とする擬似乱数ＲＮＧ（暗号文命令（ｎ＋１））と平文の命令ｎとの間でビットごとの排他的論理和を算出することにより求められる。すなわち、暗号文命令ｎは、次式（８）および（９）のように定式化される。ただし、ｎの取り得る範囲は、１以上ＣＮ（ＣＮは暗号文命令の総数）以下の自然数であるものとする。
【００４７】
暗号文命令ｎ＝命令ｎ  ＸＯＲ  ＲＮＧ（暗号文命令（ｎ＋１））    …（８）
（ｎは１以上、（ＣＮ−１）以下の自然数）
暗号文命令ＣＮ＝命令ＣＮ  ＸＯＲ  ＲＮＧ（ＩＶ）                …（９）
（ＩＶは初期ベクトル）
【００４８】
例えば、暗号文命令２は次式（１０）のように表される。
暗号文命令２＝命令２  ＸＯＲ  ＲＮＧ（暗号文命令３）          …（１０）
すなわち、暗号文命令２は、平文の命令２と暗号文命令３を入力とする擬似乱数との間でビットごとの排他的論理和を取った結果である。
【００４９】
逆に、命令ｎは、次式（１１）および（１２）のように定式化される。
命令ｎ＝暗号文命令ｎ  ＸＯＲ  ＲＮＧ（暗号文命令（ｎ＋１））  …（１１）
（ｎは１以上、（ＣＮ−１）以下の自然数）
命令ＣＮ＝暗号文命令ＣＮ  ＸＯＲ  ＲＮＧ（ＩＶ））            …（１２）
（ＩＶは初期ベクトル）
【００５０】
以上のようにして生成された暗号文命令列とデータとが外部メモリ６００に格納されている。このように、本実施の形態の暗号化方式では、上位アドレスに配置された命令から順に暗号化される。
【００５１】
以上のように構成されたコンピュータ１０３の動作について次に説明する。図１３は、コンピュータ１０３で実行される処理のフローチャートである。命令アドレス２１０の供給処理（Ｓ２）から、一時命令３２１（５２１）の取得処理（Ｓ１０）までは、実施の形態２と同様である。すなわち、命令アドレス２１０と同一の一時命令アドレス３１０が生成され、外部メモリ６００の一時命令アドレス３１０に格納された暗号文命令が一時命令３２０として復号化部４００に出力される。また、命令アドレス２１０よりも１ワード上位のアドレスが一時命令アドレス３１１として生成され、外部メモリ６００の一時命令アドレス３１１に格納された暗号文命令が一時命令３２１として復号化部４００に出力される。
【００５２】
その後、復号化部４００は、一時命令３２０と一時命令３２１とから命令４２０を生成し（Ｓ１２）、ＣＰＵコア２００が命令４２０を実行する（Ｓ１４）。命令４２０の生成処理および実行処理（Ｓ１２、Ｓ１４）は、実施の形態１と同様である。以上の処理を外部メモリ６００に格納されたプログラム中の各命令について行なう。
【００５３】
図１４は、図１２に示される命令１〜４を順次実行する際のバスの状態を示す図である。命令１〜４の詳細は、図３に示したものと同じであるため、その詳細な説明はここでは繰り返さない。
【００５４】
例えば、図１４に示されるように、ＣＰＵコア２００より命令読み込み部３０２に命令アドレス２１０「０ｘ１０００」が供給されると、命令読み込み部３０２は一時命令アドレス３１０「０ｘ１０００」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ１０００」を供給する。命令読み込み部３０２は、外部メモリ６００の０ｘ１０００番地に格納されている暗号文命令を一時命令５２０として読み込み、一時命令３２０として復号化部４００に出力する。次に、命令読み込み部３０２は一時命令アドレス３１１「０ｘ１００４」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ１００４」を供給する。命令読み込み部３０２は、外部メモリ６００の０ｘ１００４番地に格納されている暗号文命令２を読み込み、一時命令３２１として復号化部４０２に出力する。
【００５５】
暗号文命令２が読み込まれた時点で復号化部４０２により暗号文命令１が復号され、復号結果（命令１）が命令４２０としてＣＰＵコア２００に出力される。その後、ＣＰＵコア２００が命令１を実行する。命令１を実行することにより、ＣＰＵコア２００がデータアドレス２３０として「０ｘ８０００」を出力し、外部メモリ６００へ外部アドレスとして「０ｘ８０００」が供給される。そして、外部メモリ６００の０ｘ８０００番地に格納されたデータが、外部データおよび読み込みデータ５４０としてＣＰＵコア２００に読み込まれる。
【００５６】
以上のようにして暗号化された命令が復号されながら実行される。本実施の形態においても実施の形態１と同様、暗号化方式として内部同期式ストリーム暗号を用いている。このため、暗号化されたプログラムの解読が困難である。
また、暗号化時にメモリのアドレス情報を使用していない。このため、暗号化されたプログラムの外部メモリ上での配置位置は固定されず、再配置が可能である。
【００５７】
（実施の形態４）
次に、本発明の実施の形態４に係るコンピュータについて説明する。本実施の形態では、上述の実施の形態３と同様に、暗号文命令は、上位アドレスから下位アドレスに向かって内部同期式ストリーム暗号を用いて平文命令を暗号化することにより作成される。ただし、実施の形態３とは異なり、初期ベクトルが２つ存在する。そのため、コンピュータの構成が上述の実施形態とは一部異なる。
【００５８】
図１５は、本実施の形態に係るコンピュータのハードウェア構成を示すブロック図である。本実施の形態に係るコンピュータ１０４は、図１１に示される実施の形態３に係るコンピュータ１０３において、命令読み込み部３０２の変わりに命令読み込み部３０４を用いたものである。
【００５９】
実施の形態３に係る命令読み込み部３０２は、命令アドレス２１０に基づいて、命令アドレス２１０と同一の一時命令アドレス３１０と、命令アドレス２１０よりも１ワード上位の一時命令アドレス３１１とを生成している。これに対し、本実施の形態に係る命令読み込み部３０４は、命令アドレス２１０に基づいて、命令アドレス２１０と同一の一時命令アドレス３１０と、命令アドレス２１０よりも２ワード上位の一時命令アドレス３１１とを生成し、外部メモリ６００の当該２つのアドレスに格納されているデータを一時命令５２０および５２１として読み込む。
【００６０】
図１６は、暗号文命令と平文命令との関係を示す図である。図１６（ａ）は暗号文命令の一例を示す図であり、図１６（ｂ）は平文命令の一例を示す図である。図１６（ａ）に示すように、内部同期式ストリーム暗号に従い、暗号文命令ｎ（ｎは自然数）は、２ワード上位の番地に格納されている暗号文命令（ｎ＋２）を入力とする擬似乱数ＲＮＧ（暗号文命令（ｎ＋２））と平文の命令ｎとの間でビットごとの排他的論理和を算出することにより求められる。すなわち、暗号文命令ｎは、次式（１３）〜（１５）のように定式化される。ただし、ｎの取り得る範囲は１以上ＣＮ（ＣＮは暗号文命令の総数）以下の自然数であるものとする。
【００６１】
暗号文命令ｎ＝命令ｎ  ＸＯＲ  ＲＮＧ（暗号文命令（ｎ＋２））  …（１３）
（ｎは１以上、（ＣＮ−２）以下の自然数）
暗号文命令（ＣＮ−１）＝命令（ＣＮ−１）  ＸＯＲ  ＲＮＧ（ＩＶ１）
…（１４）
（ＩＶ１は初期ベクトル）
暗号文命令ＣＮ＝命令ＣＮ  ＸＯＲ  ＲＮＧ（ＩＶ２）            …（１５）
（ＩＶ２は初期ベクトル）
【００６２】
例えば、暗号文命令２は次式（１６）のように表される。
暗号文命令２＝命令２  ＸＯＲ  ＲＮＧ（暗号文命令４）          …（１６）
すなわち、暗号文命令２は、平文の命令２と暗号文命令４を入力とする擬似乱数との間でビットごとの排他的論理和を取った結果である。
【００６３】
逆に、命令ｎは、次式（１７）〜（１９）のように定式化される。
命令ｎ＝暗号文命令ｎ  ＸＯＲ  ＲＮＧ（暗号文命令（ｎ＋２））  …（１７）
（ｎは１以上、（ＣＮ−２）以下の自然数）
命令（ＣＮ−１）＝暗号文命令（ＣＮ−１）  ＸＯＲ  ＲＮＧ（ＩＶ１）…（１８）
（ＩＶ１は初期ベクトル）
命令ＣＮ＝暗号文命令ＣＮ  ＸＯＲ  ＲＮＧ（ＩＶ２）            …（１９）
（ＩＶ２は初期ベクトル）
【００６４】
以上のようにして生成された暗号文命令列とデータとが外部メモリ６００に格納されている。このように、本実施の形態の暗号化方式では、上位アドレスから配置された命令から順に１つ置きに暗号化される。
【００６５】
以上のように構成されたコンピュータ１０４の動作について次に説明する。図１７は、コンピュータ１０４で実行される処理のフローチャートである。コンピュータ１０４は、命令読み込み部３０２で生成される一時命令アドレス３１１が異なる以外は実施の形態３に係るコンピュータ１０３の動作と同じである。命令アドレス２１０の供給処理（Ｓ２）から一時命令３２０の取得処理（Ｓ６）までは、実施の形態１と同様である。一時命令３２０の取得処理（Ｓ６）の後、命令読み込み部３０４は、命令アドレス２１０より一時命令アドレス３１１を生成する（Ｓ３２）。ここでは、一時命令アドレス３１１は、命令アドレス２１０より２ワード上位のアドレスである。すなわち、一時命令アドレス３１１は次式（２０）のように表される。
一時命令アドレス３１１＝命令アドレス２１０＋０ｘ０００８      …（２０）
【００６６】
その後の、一時命令３２１の取得処理（Ｓ１０）から命令４２０の実行処理（Ｓ１４）までは実施の形態１と同様である。以上の処理を外部メモリ６００に格納されたプログラム中の各命令について実行する。
【００６７】
図１８は、図１６に示される命令１〜４を順次実行する際のバスの状態を示す図である。命令１〜４の詳細は、図３に示したものと同じである。
【００６８】
例えば、図１８に示されるように、ＣＰＵコア２００より命令読み込み部３０４に命令アドレス２１０「０ｘ１０００」が供給されると、命令読み込み部３０４は一時命令アドレス３１０「０ｘ１０００」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ１０００」を供給する。命令読み込み部３０４は、外部メモリ６００の０ｘ１０００番地に格納されている暗号文命令を一時命令５２０として読み込み、一時命令３２０として４００に出力する。次に、命令読み込み部３０４は一時命令アドレス３１１「０ｘ１００８」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ１００８」を生成し、バスインタフェース５００を介して外部メモリ６００に外部アドレス「０ｘ１００８」を供給する。命令読み込み部３０４は、外部メモリ６００の０ｘ１００８番地に格納されている暗号文命令３を一時命令５２１として読み込み、一時命令３２１として復号化部４００に出力する。
【００６９】
暗号文命令３が読み込まれた時点で復号化部４００により暗号文命令１が復号され、復号結果（命令１）が命令４２０としてＣＰＵコア２００に出力される。その後、ＣＰＵコア２００が命令１を実行する。命令１を実行した際のバスの状態は、上述の実施の形態と同様であるため、ここでは説明は繰り返さない。
【００７０】
以上のようにして暗号化された命令が復号されながら実行される。本実施の形態においても、実施の形態１と同様、暗号化方式として内部同期式ストリーム暗号を用いている。このため、暗号化されたプログラムの解読が困難である。
また、暗号化時にメモリのアドレス情報を使用していない。このため、暗号化されたプログラムの外部メモリ上での配置位置は固定されず、再配置が可能である。
【００７１】
（実施の形態５）
次に、実施の形態５に係るコンピュータについて説明する。本実施の形態では、上述の実施形態と異なり、暗号化方式に共通鍵ブロック暗号のＣＢＣ（Cipher Block Chaining）モードを用いる。
【００７２】
図１９は、本実施の形態に係るコンピュータのハードウェア構成を示すブロック図である。本実施の形態に係るコンピュータ１０５は、図１に示す実施の形態１に係るコンピュータ１００において、復号化部４００の変わりに復号化部４０５を用いたものである。
【００７３】
図２０は、復号化部４０５のハードウェア構成を示すブロック図である。復号化部４０５は、一時命令３２０および一時命令３２１を入力として受け、共通鍵ブロック暗号のＣＢＣモードに従い、一時命令を復号し命令４２０を出力する処理部であり、一時命令復号化部４０５ａと、鍵格納部４０５ｂと、排他的論理和算出部４０５ｃとを備える。鍵格納部４０５ｂは、命令の暗号化時に使用した鍵データを格納しており、ＲＯＭなどから構成される。一時命令復号化部４０５ａは、一時命令３２０を入力として受け、一時命令３２０を鍵格納部４０５ｂに格納された鍵データを用いて復号し、結果を出力する。排他的論理和算出部４０５ｃは、一時命令復号化部４０５ａの復号結果と一時命令３２１とを入力として受け、当該復号結果と一時命令３２１との間でビットごとの排他的論理和を算出し、算出した結果を命令４２０として出力する。
【００７４】
図２１は、暗号文命令と平文命令との関係を示す図である。図２１（ａ）は暗号文命令の一例を示す図であり、図２１（ｂ）は平文命令の一例を示す図である。図２１（ａ）に示すように、共通鍵ブロック暗号のＣＢＣモードに従い、暗号文命令ｎ（ｎは自然数）は、１つ前の番地の暗号文命令（ｎ−１）と平文の命令ｎとの排他的論理和を共通鍵ブロック暗号で暗号化することにより求められる。すなわち、暗号文命令ｎは、次式（２１）および（２２）のように定式化される。ここで、ＥＮＣ（Ｘ）とは、データＸを共通鍵ブロック暗号で暗号化した結果を示すものとする。
【００７５】
暗号文命令ｎ＝ＥＮＣ（命令ｎ  ＸＯＲ  暗号文命令（ｎ−１））  …（２１）
（ｎは２以上の整数）
暗号文命令１＝ＥＮＣ（命令１  ＸＯＲ  ＩＶ）                  …（２２）
（ＩＶは初期ベクトル）
【００７６】
例えば、暗号文命令２は次式（２３）のように表される
暗号文命令２＝ＥＮＣ（命令２  ＸＯＲ  暗号文命令１）          …（２３）
すなわち、暗号文命令２は、平文の命令２と暗号文命令１との間でビットごとの排他的論理和を取った結果を共通鍵ブロック暗号で暗号化した結果である。
【００７７】
逆に、命令ｎは、次式（２４）および（２５）のように定式化される。ここで、ＤＥＣ（Ｘ）とは、データＸを共通鍵ブロック暗号で復号化した結果を示すものとする。なお、ＥＮＣ（Ｘ）およびＤＥＣ（Ｘ）の鍵データは同じである。
【００７８】
命令ｎ＝ＤＥＣ（暗号文命令ｎ）  ＸＯＲ  暗号文命令（ｎ−１）  …（２４）
（ｎは２以上の整数）
命令１＝ＤＥＣ（暗号文命令１）  ＸＯＲ  ＩＶ                  …（２５）
（ＩＶは初期ベクトル）
以上のようにして生成された暗号文命令とデータとが外部メモリ６００に格納されている。
【００７９】
以上のように構成されたコンピュータ１０５の動作について次に説明する。図２２は、コンピュータ１０５で実行される処理のフローチャートである。命令アドレス２１０の供給処理（Ｓ２）から一時命令一時命令３２１の取得処理（Ｓ１０）までは、実施の形態１と同様である。一時命令３２１の取得処理（Ｓ１０）の後、復号化部４０５は、一時命令３２０と一時命令３２１とから命令４２０を生成する（Ｓ４２）。すなわち、一時命令復号化部４０５ａが、鍵格納部４０５ｂに格納された鍵データを用いて一時命令３２０を復号し、復号結果ＤＥＣ（一時命令３２０）を排他的論理和算出部４０５ｃへ出力する。次に、排他的論理和算出部４０５ｃがＤＥＣ（一時命令３２０）と一時命令３２１との間でビットごとの排他的論理和を算出し、命令４２０としてＣＰＵコア２００に出力する。
【００８０】
ＣＰＵコア２００は、復号化部４０２より命令４２０を受け、実行する（Ｓ１４）。以上の処理を外部メモリ６００に格納されたプログラム中の各命令について実行する。
図２１に示される命令１〜４を順次実行する際のバスの状態は、図５に示したものと同様である。このため、その詳細な説明はここでは繰返さない。
【００８１】
以上のようにして暗号化された命令が復号されながら実行される。本実施の形態では暗号化方式として、共通鍵ブロック暗号のＣＢＣモードを用いている。ＣＢＣモードでは、命令を暗号化する際に、その１ワード下位の暗号文命令を用いて暗号化が行なわれる。このため、同一の命令であっても暗号文命令が同じになるとは限らない。逆に、同一の暗号文命令であっても、元となる命令が同じであるとは限らない。このため、暗号化されたプログラムの解読が困難である。
【００８２】
また、暗号化時にメモリのアドレス情報を使用していない。このため、暗号化されたプログラムの外部メモリ上での配置位置は固定されず、再配置が可能である。
なお、暗号文命令と平文命令との対応関係を実施の形態２〜４のようにしてもよい。
【００８３】
（実施の形態６）
次に、本発明の実施の形態６に係るコンピュータについて説明する。本実施の形態に係るコンピュータは、上述の実施の形態とは異なり、外部メモリより読み込まれた一時命令を一時的に格納する一時命令メモリが設けられている点が異なる。上述の実施の形態では、図５に示すように１つの命令を実行するために２つの暗号文命令を外部メモリ６００より読み込んでいる。このため、連続配置された命令を順次実行する際には、暗号文命令を重複して外部メモリ６００より読み込んでいる。本実施の形態では、一時命令メモリを設けることにより、重複した暗号文命令の読み込みを行なわないようにしている。
【００８４】
図２３は、本実施の形態に係るコンピュータのハードウェア構成を示すブロック図である。本実施の形態に係るコンピュータ１０６は、実施の形態１に係るコンピュータ１００において、命令読み込み部３００の代わりに命令読み込み部３０６および一時命令メモリ３５０を用いたものである。命令読み込み部３０６は、ＣＰＵコア２００より命令アドレス２１０を受け、命令アドレス２１０と同じ一時命令アドレス３１０と、命令アドレス２１０よりも１ワード下位の一時命令アドレス３１１との双方またはいずれか一方を順次生成する。また、命令読み込み部３０６は、外部メモリ６００の一時命令アドレス３１０に格納された暗号文命令を一時命令５２０として一時命令メモリ３５０に格納し、外部メモリ６００の一時命令アドレス３１１に格納された暗号文命令を一時命令５２１として一時命令メモリ３５０に格納する。
【００８５】
一時命令メモリ３５０は、２つの一時命令を格納できる。一時命令メモリ３５０書き込まれたデータの読み出し、消去等の制御は命令読み込み部３０６が担当する。また、一時命令メモリ３５０には、一時命令と合わせて一時命令アドレスが保持されているものとする。
本実施の形態における暗号文命令と平文命令との関係は図３に示したものとの同じであるため、説明は繰返さない。
【００８６】
以上のように構成されたコンピュータ１０６の動作について次に説明する。図２４は、コンピュータ１０６で実行される処理のフローチャートである。ＣＰＵコア２００は、プログラムカウンタに格納されている命令アドレス２１０を命令読み込み部３０６に供給する（Ｓ２）。命令読み込み部３０６は、命令アドレス２１０に対応する一時命令３２０が一時命令メモリ３５０に格納されているか否かを調べる（Ｓ５２）。これは、一時命令３２０に対応する一時命令アドレス３１０が一時命令メモリ３５０に記憶されているか否かを調べることにより分かる。
【００８７】
一時命令３２０が格納されていなければ（Ｓ５２でＹＥＳ）、命令読み込み部３０６は、命令アドレス２１０と同一の一時命令アドレス３１０を生成し（Ｓ４）、外部メモリ６００の一時命令アドレス３１０に格納されている暗号文命令を一時命令５２０として一時命令メモリ３５０に格納する（Ｓ５４）。
【００８８】
一時命令５２０が一時命令メモリ３５０に格納された後（Ｓ５４、Ｓ５２でＮＯ）、命令読み込み部３０６は、命令アドレス２１０に対応する一時命令３２１が一時命令メモリ３５０に格納されているか否かを調べる（Ｓ５６）。これは、一時命令３２１に対応する一時命令アドレス３１１が一時命令メモリ３５０に記憶されているか否かを調べることにより分かる。
【００８９】
一時命令３２１が格納されていなければ（Ｓ５６でＹＥＳ）、命令読み込み部３０６は、命令アドレス２１０よりも１ワード下位の一時命令アドレス３１１を生成し（Ｓ８）、外部メモリ６００の一時命令アドレス３１１に格納されている暗号文命令を一時命令５２１として一時命令メモリ３５０に格納する（Ｓ５８）。
【００９０】
一時命令５２０および５２１が一時命令メモリ３５０に格納された後（Ｓ５８、Ｓ５６でＮＯ）、復号化部４００は、一時命令３２０および３２１より命令４２０を生成する（Ｓ１２）。命令４２０の生成処理は、実施の形態１と同様である。ＣＰＵコア２００は、復号化部４００より命令４２０を受け、実行する（Ｓ１４）。以上の処理を外部メモリ６００に格納されたプログラム中の各命令について行なう。
【００９１】
図２５は、図３に示される命令１〜４を実行する際のバスの状態を示す図である。例えば、ＣＰＵコア２００が命令読み込み部３００に命令アドレス２１０「０ｘ１０００」を供給する。この時点では、外部メモリ６００の０ｘ１０００番地に格納されている暗号文命令１は一時命令メモリ３５０に格納されていない。このため、命令読み込み部３０６は、外部メモリ６００の０ｘ１０００番地に格納されている暗号文命令１を読み込み、一時命令メモリ３５０に格納する。また、この時点では、外部メモリ６００の０ｘ０ＦＦＣ番地に格納されている初期ベクトル「ＩＶ」も一時命令メモリ３５０に格納されていない。このため、命令読み込み部３０６は、外部メモリ６００の０ｘ０ＦＦＣ番地に格納されている初期ベクトル「ＩＶ」を読み込み、一時命令メモリ３５０に格納する。
【００９２】
初期ベクトル「ＩＶ」が一時命令メモリ３５０に格納された時点で、復号化部４００により暗号文命令１が復号され、復号結果（命令１）が命令４２０としてＣＰＵコア２００に出力される。その後、ＣＰＵコア２００が命令１を実行する。命令１の実行時のバスの状態は、実施の形態１と同様である。
【００９３】
命令１を実行後、ＣＰＵコア２００は、命令アドレス２１０「０ｘ１００４」を命令読み込み部３０６に供給する。この時点では、一時命令メモリ３５０には暗号文命令１と初期ベクトル「ＩＶ」とが格納されている。このため、命令読み込み部３０６は、一時命令アドレス３１０「０ｘ１００４」を生成し、外部メモリ６００の０ｘ１００４番地に格納されている暗号文命令２を読み込み、一時命令メモリ３５０に格納する。この時点で命令２を復号するための暗号文命令が一時命令メモリ３５０に格納されていることになるため、復号化部４００は、一時命令メモリ３５０に格納されている暗号文命令１および暗号文命令２に基づいて、命令２を復号する。その後、命令２を実行する。
【００９４】
以上説明したように、本実施の形態に係るコンピュータは、上述の実施の形態の効果に加え、一時命令を一時命令メモリ３５０に格納し、重複した暗号文命令の読み込みを排除している。このため、暗号文命令を高速に復号することができ、プログラムを高速に実行することができる。
【００９５】
以上、本発明に係るコンピュータについて、実施の形態に基づいて説明したが、本発明はこれらの実施の形態に限定されるものではない。
例えば、コンピュータで実行される命令のすべてが必ずしも暗号化されている必要はなく、一部の命令が暗号化されており、その他の命令は暗号化されていなくても良い。
【００９６】
また、暗号化の方式として、内部同期式ストリーム暗号または共通鍵ブロック暗号のＣＢＣモードを例に説明を行なったが、これらの暗号化方式に限定されるものではなく、共通鍵ブロック暗号のＣＦＢ（Cipher Feedback）モードなど少なくとも２つの暗号文から平文が復号可能な暗号化方式であれば、どのような暗号化方式であっても良い。
さらに、命令長は３２ビット以外の長さであっても良い。
【００９７】
さらにまた、上述の実施の形態では、１つのプログラムに対し、暗号化方式は１種類として説明を行なったが、１つのプログラム中に複数の暗号化方式が含まれていても良い。例えば、命令ｎ（ｎは奇数）を内部同期式ストリーム暗号に従い暗号化し、命令ｎ（ｎは偶数）を共通鍵ブロック暗号のＣＢＣモードに従い暗号化するようにしても良い。この場合、復号化部における暗号文命令の復号処理は、複数の暗号化方式のいずれかの方式を選択しながら暗号文命令を復号する。
【００９８】
また、擬似乱数の発生方法として線形合同法を用いても良い。
さらに、実施の形態４における初期ベクトルの個数は、３つ以上であってもよい。
さらにまた、本発明は、平文命令から暗号命令を生成する装置として実現することも可能である。
【産業上の利用可能性】
【００９９】
本発明に係る命令実行装置によると、暗号化された命令を実行する命令実行装置、プロセッサ、１チップマイクロコンピュータ、１チップコントローラ、セキュアＣＰＵ等として有用である。
【図面の簡単な説明】
【０１００】
【図１】本発明の実施の形態１に係るコンピュータのハードウェア構成を示すブロック図である。
【図２】実施の形態１に係る復号化部のハードウェア構成を示すブロック図である。
【図３】実施の形態１に係る暗号文命令と平文命令との関係を示す図である。
【図４】実施の形態１に係るコンピュータで実行される処理のフローチャートである。
【図５】図３に示される命令１〜４を順次実行する際のバスの状態を示す図である。
【図６】本発明の実施の形態２に係るコンピュータのハードウェア構成を示すブロック図である。
【図７】実施の形態２に係る復号化部のハードウェア構成を示すブロック図である。
【図８】実施の形態２に係る暗号文命令と平文命令との関係を示す図である。
【図９】実施の形態２に係るコンピュータで実行される処理のフローチャートである。
【図１０】図８に示される命令１〜４を順次実行する際のバスの状態を示す図である。
【図１１】本発明の実施の形態３に係るコンピュータのハードウェア構成を示すブロック図である。
【図１２】実施の形態３に係る暗号文命令と平文命令との関係を示す図である。
【図１３】実施の形態３に係るコンピュータで実行される処理のフローチャートである。
【図１４】図１２に示される命令１〜４を順次実行する際のバスの状態を示す図である。
【図１５】本発明の実施の形態４に係るコンピュータのハードウェア構成を示すブロック図である。
【図１６】実施の形態４に係る暗号文命令と平文命令との関係を示す図である。
【図１７】実施の形態４に係るコンピュータで実行される処理のフローチャートである。
【図１８】図１６に示される命令１〜４を順次実行する際のバスの状態を示す図である。
【図１９】本発明の実施の形態５に係るコンピュータのハードウェア構成を示すブロック図である。
【図２０】実施の形態５に係る復号化部のハードウェア構成を示すブロック図である。
【図２１】実施の形態５に係る暗号文命令と平文命令との関係を示す図である。
【図２２】実施の形態５に係るコンピュータで実行される処理のフローチャートである。
【図２３】本発明の実施の形態６に係るコンピュータのハードウェア構成を示すブロック図である。
【図２４】実施の形態６に係るコンピュータで実行される処理のフローチャートである。
【図２５】図３に示される命令１〜４を実行する際のバスの状態を示す図である。
【図２６】従来の暗号化データ処理装置の概略構成を示すブロック図である。
【符号の説明】
【０１０１】
１００，１０２，１０３，１０４，１０５，１０６  コンピュータ
２００  ＣＰＵコア
２１０  命令アドレス
２３０  データアドレス
２４１  書き込みデータ
３００，３０２，３０４，３０６  命令読み込み部
３１０，３１１  一時命令アドレス
３２０，３２１，５２０，５２１  一時命令
３５０  一時命令メモリ
４００，４０２，４０５  復号化部
４００ａ，４０２ａ  擬似乱数発生部
４００ｂ，４０２ｂ，４０５ｃ  排他的論理和算出部
４０５ａ  一時命令復号化部
４０５ｂ  鍵格納部
４２０  命令
５００  バスインタフェース
５４０  読み込みデータ
６００  外部メモリ
９１０  暗号化データ処理装置
９２０  メモリ
９３０  データ処理部
９４０  復号回路
【図１】
2005050116.tif 000003
【図２】
2005050116.tif 000004
【図３】
2005050116.tif 000005
【図４】
2005050116.tif 000006
【図５】
2005050116.tif 000007
【図６】
2005050116.tif 000008
【図７】
2005050116.tif 000009
【図８】
2005050116.tif 000010
【図９】
2005050116.tif 000011
【図１０】
2005050116.tif 000012
【図１１】
2005050116.tif 000013
【図１２】
2005050116.tif 000014
【図１３】
2005050116.tif 000015
【図１４】
2005050116.tif 000016
【図１５】
2005050116.tif 000017
【図１６】
2005050116.tif 000018
【図１７】
2005050116.tif 000019
【図１８】
2005050116.tif 000020
【図１９】
2005050116.tif 000021
【図２０】
2005050116.tif 000022
【図２１】
2005050116.tif 000023
【図２２】
2005050116.tif 000024
【図２３】
2005050116.tif 000025
【図２４】
2005050116.tif 000026
【図２５】
2005050116.tif 000027
【図２６】
2005050116.tif 000028