(57)【要約】【課題】第三者によるシステム内部の情報取得の難化を図ること。【解決手段】デバッグシステム１００において、プロセッサコア１０１は、プロセッサコア１０１がアクセスする記憶部１０４に含まれる実行コード群１０５を実行する。また、ＩＣＥ１０３は、実行コード群１０５のいずれかの実行コードを実行中のプロセッサコア１０１の動作を模倣する。デバッグＩ／Ｆ制御部１０２は、ＩＣＥ１０３から、プロセッサコア１０１がアクセスする記憶部１０４のいずれかのアドレスの読出要求を受信した場合、実行コード群１０５のうちのプロセッサコア１０１が実行中の実行コードを用いて、共通鍵１０８を生成する。続けて、デバッグＩ／Ｆ制御部１０２は、記憶部１０４から読み出した読出データ１０９を、共通鍵１０８を用いて暗号化して、暗号化した暗号化データ１１０をＩＣＥ１０３に送信する。【選択図】図１
2015026223.tif 000002
【特許請求の範囲】
【請求項１】
実行コード群を実行するプロセッサコアと、
前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成する生成部と、
前記生成部が生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化する暗号化部と、
前記暗号化部が暗号化した暗号化データを前記エミュレータに送信する送信部と、
を有することを特徴とするシステム。
【請求項２】
前記暗号化部は、
復号を行う際の所定のデータ幅で前記データを分割した分割データに対して前記共通鍵を用いて暗号化し、
前記送信部は、
前記暗号化部が前記分割データに対して暗号化した暗号化データを前記エミュレータに送信することを特徴とする請求項１に記載のシステム。
【請求項３】
前記エミュレータから、実行コード群と復号を行う際の所定のデータ幅とを受信する受信部をさらに有し、
前記生成部は、
前記エミュレータから、前記記憶部のいずれかのアドレスの読出要求を受信した場合、前記受信部が受信した前記実行コード群のうちの実行中の実行コードに基づいて、暗号化に用いる共通鍵を生成し、
前記暗号化部は、
前記受信部が受信した復号を行う際の所定のデータ幅で前記データを分割した分割データに対して前記共通鍵を用いて暗号化することを特徴とする請求項２に記載のシステム。
【請求項４】
実行コード群のいずれかの実行コードを実行中のプロセッサコアの動作を模倣するエミュレータにおいて、
前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を前記プロセッサコアに送信する送信部と、
前記送信部が前記読出要求を送信した場合、前記実行コードに基づいて、復号に用いる共通鍵を生成する生成部と、
前記送信部が前記読出要求を送信した結果、前記プロセッサコアが実行中の実行コードに基づいた共通鍵を用いて暗号化された暗号化データを前記プロセッサコアから受信した場合、前記生成部が生成した前記共通鍵を用いて前記暗号化データを復号する復号部と、
を有することを特徴とするエミュレータ。
【請求項５】
前記復号部は、
前記送信部が前記読出要求を送信した結果、前記暗号化データを前記プロセッサコアから受信した場合、暗号化を行う際の所定のデータ幅で前記暗号化データを分割した分割データに対して復号することを特徴とする請求項４に記載のエミュレータ。
【請求項６】
前記送信部は、
生成された実行コード群と生成された暗号化を行う際の所定のデータ幅とを前記プロセッサコアに送信した後、前記生成された実行コード群のいずれかの実行コードを実行中の前記プロセッサコアに前記読出要求を送信し、
前記復号部は、
前記送信部が前記読出要求を送信した結果、前記暗号化データを前記プロセッサコアから受信した場合、前記生成された暗号化を行う際の所定のデータ幅で前記暗号化データを分割した分割データに対して復号することを特徴とする請求項５に記載のエミュレータ。
【請求項７】
実行コード群を実行するプロセッサコアと、
前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータと、
前記エミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成する生成部と、
前記生成部が生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化する暗号化部と、
前記暗号化部が暗号化した暗号化データを前記エミュレータに送信する送信部と、
を有することを特徴とするデバッグシステム。
【請求項８】
実行コード群を実行するプロセッサコアを有するシステムと、前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータと、を有するデバッグシステムにおける方法において、
前記システムが、
前記エミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成し、
生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化し、
暗号化した暗号化データを前記エミュレータに送信する、
処理を実行することを特徴とするデバッグシステムにおける方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システム、エミュレータ、デバッグシステムおよびデバッグシステムにおける方法に関する。
【背景技術】
【０００２】
従来、悪意のある第三者による開発対象のシステム内部の情報取得を困難にする技術がある。関連する技術として、たとえば、ＩＣＥ（Ｉｎ  Ｃｉｒｃｕｉｔ  Ｅｍｕｌａｔｏｒ）がＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を介しメモリへアクセスするアドレスと、プログラムコードのメモリ上のアドレス空間とが一致すればＩＣＥからＣＰＵへのデータ転送を禁止するものがある。また、内蔵ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）の内容を論理演算して外部に出力する技術がある。さらに、入力アドレスの一部と、メモリセル部から出力されるデータとの排他的論理和をとることにより暗号化を行う技術がある。さらに、マイクロプロセッサの内部の一度だけ書込が可能な不揮発性メモリに記憶されており利用者から入力されたキーコードを用いて命令やデータを暗号化してホストＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）へ送出する技術がある。（たとえば、下記特許文献１〜４を参照。）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−０７１２５０号公報
【特許文献２】特開平３−５８５５号公報
【特許文献３】特開平７−２１９８５２号公報
【特許文献４】特開２００４−２８７５９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、第三者によるシステム内部の情報取得が容易になる場合がある。たとえば、暗号化と復号とを行う鍵の書き換えが行えないと、鍵が変更できないために、第三者に総当たり攻撃を行える十分な時間を与えてしまう。そして、第三者が総当たり攻撃により鍵を割り出してしまうと、第三者によるシステム内部の情報取得が容易になる。
【０００５】
１つの側面では、本発明は、第三者によるシステム内部の情報取得を難化できるシステム、エミュレータ、デバッグシステムおよびデバッグシステムにおける方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の第１の側面によれば、実行コード群を実行するプロセッサコアと、実行コード群のいずれかの実行コードを実行中のプロセッサコアの動作を模倣するエミュレータから、プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、実行コードに基づいて、暗号化に用いる共通鍵を生成し、生成した共通鍵を用いて、読出要求に応じてプロセッサコアが記憶部から読み出したデータを暗号化し、暗号化した暗号化データをエミュレータに送信するシステムが提案される。
【０００７】
また、本発明の第２の側面によれば、実行コード群のいずれかの実行コードを実行中のプロセッサコアの動作を模倣するエミュレータにおいて、プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求をプロセッサコアに送信し、読出要求を送信した場合、実行コードに基づいて、復号に用いる共通鍵を生成し、読出要求を送信した結果、プロセッサコアが実行中の実行コードに基づいた共通鍵を用いて暗号化された暗号化データをプロセッサコアから受信した場合、生成した共通鍵を用いて暗号化データを復号するエミュレータが提案される。
【０００８】
また、本発明の第３の側面によれば、実行コード群を実行するプロセッサコアを有するシステムと、実行コード群のいずれかの実行コードを実行中のプロセッサコアの動作を模倣するエミュレータと、を有するデバッグシステムにおける方法において、システムが、エミュレータから、プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、実行コードに基づいて、暗号化に用いる共通鍵を生成し、生成した共通鍵を用いて、読出要求に応じてプロセッサコアが記憶部から読み出したデータを暗号化し、暗号化した暗号化データをエミュレータに送信するデバッグシステム、デバッグシステムにおける方法が提案される。
【発明の効果】
【０００９】
本発明の一態様によれば、第三者によるシステム内部の情報取得の難化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施の形態にかかるデバッグシステムの動作例を示す説明図である。
【図２】図２は、デバッグシステムの接続例を示す説明図である。
【図３】図３は、ターゲットシステムのハードウェア構成例を示すブロック図である。
【図４】図４は、ＭＣＵの機能構成例を示すブロック図である。
【図５】図５は、ＩＣＥの機能構成例を示すブロック図である。
【図６】図６は、ホストＰＣのハードウェア構成例を示すブロック図である。
【図７】図７は、ソースコードと実行コードとの一例を示す説明図である。
【図８】図８は、トレースメモリの記憶内容の一例を示す説明図である。
【図９】図９は、デバッグコマンド受信処理の一連の動作を示す説明図である。
【図１０】図１０は、暗号化データの復号時の一連の動作を示す説明図である。
【図１１】図１１は、デバッグコマンド受信処理手順の一例を示すフローチャートである。
【図１２】図１２は、実行コードメモリ読出処理手順の一例を示すフローチャートである。
【図１３】図１３は、トレースメモリ読出処理手順の一例を示すフローチャートである。
【図１４】図１４は、デバッグコマンド送信処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に図面を参照して、開示のシステム、エミュレータ、デバッグシステムおよびデバッグシステムにおける方法の実施の形態を詳細に説明する。
【００１２】
図１は、本実施の形態にかかるデバッグシステムの動作例を示す説明図である。デバッグシステム１００は、デバッグシステム１００に含まれるプロセッサコア１０１をデバッグするシステムである。デバッグシステム１００は、プロセッサコア１０１が実行するソフトウェアの開発において用いられる。
【００１３】
デバッグシステム１００は、プロセッサコア１０１と、プロセッサコア１０１に接続するデバッグＩ／Ｆ制御部１０２と、ＩＣＥ１０３と、記憶部１０４とを有する。デバッグＩ／Ｆ制御部１０２と、ＩＣＥ１０３とが接続する。プロセッサコア１０１は、ソフトウェアとなる実行コード群を実行する。本実施の形態における実行コードは、１つのアドレスに関連付いた１命令であるとする。ＩＣＥ１０３は、実行コード群のいずれかの実行コードを実行中のプロセッサコア１０１の動作を模倣するエミュレータ装置である。
【００１４】
デバッグシステムにおいて、プロセッサコアとＩＣＥとの通信が秘匿されていないと、実行コード群の開発者以外の第三者は、プロセッサコアが含まれるシステム内部の情報を読み取り、読み取った情報を用いてリバースエンジニアリングすることができてしまう。たとえば、開発者以外の第三者は、プロセッサコアがアクセスするアドレス空間を虱潰しにアクセスして、システム内部の情報として、実行コード群を取得することができてしまう。
【００１５】
第三者による情報取得を困難にする技術として、下記２つの技術を例に示す。第１の技術として、ＩＣＥがＣＰＵを介しメモリへアクセスするアドレスと、プログラムコードから制御データを抜き取ったデータにより決定されるプログラムコードのメモリ上のアドレス空間とが一致すればＩＣＥからＣＰＵへのデータ転送を禁止するものがある。しかし、第１の技術を適用した場合、特殊なフォーマットによるプログラムコードを暗号化することになる。
【００１６】
また、第２の技術として、鍵情報を記憶する一度だけ書込可能な不揮発メモリの鍵情報を用いて暗号化を行う技術がある。しかし、第２の技術を適用したシステムでは、鍵情報の書き換えが行えないため、システムの安全性が低下する。また、鍵情報を紛失してしまうと、第２の技術を適用したシステムは、２度と暗号化、復号が行えなくなる。
【００１７】
そこで、本実施の形態にかかるデバッグシステム１００は、プロセッサコア１０１がアクセスする記憶部のデータの読出要求があった際に、実行コード群のうち実行中の実行コードを生成元とする共通鍵を用いてデータを暗号化してＩＣＥ１０３に送信する。これにより、デバッグシステム１００は、実行中の実行コードに応じて生成される共通鍵が変わるため、第三者による情報取得を難化できる。
【００１８】
デバッグシステム１００において、プロセッサコア１０１は、プロセッサコア１０１がアクセスする記憶部１０４に含まれる実行コード群１０５を実行する。また、ＩＣＥ１０３は、実行コード群１０５のいずれかの実行コードを実行中のプロセッサコア１０１の動作を模倣する。したがって、プロセッサコア１０１のプログラムカウンタ１０６とＩＣＥ１０３のプログラムカウンタ１０７とは同期しており、プログラムカウンタ１０６が示すアドレスと、プログラムカウンタ１０７が示すアドレスとは常に同一となる。図１の例では、プログラムカウンタ１０６が示すアドレスが０ｘ２０００００２Ｃであり、プログラムカウンタ１０７が示すアドレスも０ｘ２０００００２Ｃとなる。
【００１９】
デバッグＩ／Ｆ制御部１０２は、ＩＣＥ１０３から、プロセッサコア１０１がアクセスする記憶部１０４のいずれかのアドレスの読出要求を受信する。次に、デバッグＩ／Ｆ制御部１０２は、実行コード群１０５のうちのプロセッサコア１０１が実行中の実行コードを用いて、共通鍵１０８を生成する。続けて、デバッグＩ／Ｆ制御部１０２は、記憶部１０４から読み出した読出データ１０９を、共通鍵１０８を用いて暗号化する。なお、暗号化のアルゴリズムは、共通鍵方式を用いるものであればどのようなアルゴリズムであってもよい。そして、デバッグＩ／Ｆ制御部１０２は、暗号化した暗号化データ１１０をＩＣＥ１０３に送信する。
【００２０】
読出要求をデバッグＩ／Ｆ制御部１０２に送信したＩＣＥ１０３は、ＩＣＥ１０３が記憶する実行コード群１１１から、ＩＣＥ１０３の実行中の実行コードに基づいて、共通鍵１１２を生成する。そして、暗号化データ１１０を受信した際、ＩＣＥ１０３は、共通鍵１１２を用いて、暗号化データ１１０を復号する。共通鍵１０８と共通鍵１１２が同一の内容である場合に、暗号化データ１１０を復号したデータ１１３と、読出データ１０９とが同一の内容となる。このとき、実行コード群１０５と実行コード群１１１とが同一の内容であれば、共通鍵１０８と共通鍵１１２が同一の内容となる。実行コード群１０５と実行コード群１１１とが同一の内容になるのは、開発者によって操作されたコンパイラが生成した実行コード群が、実行コード群１１１としてＩＣＥ１０３内に記憶されるときである。したがって、第三者が用意した実行コード群がＩＣＥ１０３内に記憶された場合、データ１１３と、読出データ１０９とは異なる内容になることがほとんどとなる。
【００２１】
図２は、デバッグシステムの接続例を示す説明図である。デバッグシステム１００は、ターゲットシステム２０１と、ＩＣＥ１０３を含むエミュレーションシステム２０２とを含む。ターゲットシステム２０１は、開発対象のシステムである。ターゲットシステム２０１の内部については、図３にて説明する。
【００２２】
エミュレーションシステム２０２は、ＩＣＥ１０３と、ホストＰＣ２０３とを含む。ホストＰＣ２０３は、デバッグシステム１００を利用する利用者が操作するコンピュータである。ホストＰＣ２０３は、ＩＣＥ１０３を制御するＩＣＥ制御ソフトがインストールされている。また、ホストＰＣ２０３は、ターゲットシステム２０１が実行する実行コード群を生成するクロスコンパイラがインストールされている。ホストＰＣ２０３のハードウェアの構成は、図６で後述する。
【００２３】
図３は、ターゲットシステムのハードウェア構成例を示すブロック図である。ターゲットシステム２０１は、ＭＣＵ（Ｍｉｃｒｏ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）３０１と、ロジック回路３０２と、外部メモリ３０３と、ペリフェラル３０４と、デバッグＩ／Ｆ３０５と、を含む。ＭＣＵ３０１およびロジック回路３０２と、ＭＣＵ３０１および外部メモリ３０３と、ＭＣＵ３０１およびペリフェラル３０４と、はそれぞれ外部Ｉ／Ｆにより接続される。
【００２４】
ＭＣＵ３０１は、ターゲットシステム２０１を制御する装置である。ロジック回路３０２は、基本的な演算を実装する論理ゲートを組み合わせて、ある機能を実現する回路である。ロジック回路３０２は、たとえば、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）等である。
【００２５】
外部メモリ３０３は、ＭＣＵ３０１、ロジック回路３０２、ペリフェラル３０４からアクセスされる記憶装置である。ペリフェラル３０４は、ターゲットシステム２０１に何らかの機能を付加する装置である。ペリフェラル３０４は、たとえば、ディスプレイ、タッチパネル等である。デバッグＩ／Ｆ３０５は、エミュレーションシステム２０２とのデータの入出力を制御する制御装置である。
【００２６】
図４は、ＭＣＵの機能構成例を示すブロック図である。ＭＣＵ３０１は、プロセッサコア１０１に相当するＭＣＵコア４０１と、デバッグＩ／Ｆ制御部１０２と、実行コードメモリ４０２と、トレースメモリ４０３とを含む。そして、ＭＣＵ３０１は、周辺機器制御メモリ４０４にアクセス可能である。
【００２７】
ＭＣＵコア４０１は、デバッグ命令制御部４１１と、暗号化データ幅制御部４１２と、実行コードアドレス指定部４１３と、アドレス制御部４１４と、実行コードメモリＩ／Ｏ制御部４１５と、を含む。さらに、ＭＣＵコア４０１は、演算部４１６と、トレースメモリＩ／Ｏ制御部４１７と、周辺機器Ｉ／Ｏ制御部４１８とを含む。
【００２８】
実行コードメモリ４０２は、実行コード群を記憶する記憶領域である。実行コード群の具体例は、図７で後述する。トレースメモリ４０３は、実行コード群を実行した結果を記録する記憶領域である。周辺機器制御メモリ４０４は、ロジック回路３０２〜ペリフェラル３０４を制御するメモリである。具体的には、周辺機器制御メモリ４０４は、ロジック回路３０２〜ペリフェラル３０４の動作を制御するレジスタである。
【００２９】
デバッグＩ／Ｆ制御部１０２は、受信部４２１と、生成部４２２と、暗号化部４２３と、送信部４２４とを含む。
【００３０】
デバッグ命令制御部４１１は、受信部４２１が受信したデータを、暗号化データ幅制御部４１２、実行コードアドレス指定部４１３、実行コードメモリＩ／Ｏ制御部４１５〜周辺機器Ｉ／Ｏ制御部４１８のいずれかに振り分ける。
【００３１】
暗号化データ幅制御部４１２は、暗号化や復号を行う際の所定のデータ幅となる、暗号化データ幅群を記憶しておき、暗号化データ幅の取得要求があった場合に、暗号化データ幅を順に出力する。たとえば、暗号化データ幅制御部４１２が０ｘＦＦ、０ｘ１０と記憶してある状態で、先頭の暗号化データ幅の取得要求があった場合、暗号化データ幅制御部４１２は、０ｘＦＦを返す。続けて、次の暗号化データ幅の取得要求があった場合、暗号化データ幅制御部４１２は、０ｘ１０を返す。さらに、次の暗号化データ幅の取得要求があった場合、暗号化データ幅制御部４１２は、先頭に戻って０ｘＦＦを返してもよいし、予め決められた固定値を返してもよい。暗号化データ幅群の具体例は、図７で後述する。
【００３２】
実行コードアドレス指定部４１３は、ＩＣＥ１０３より指定されたアドレスが実行コードメモリ４０２のアドレスであれば、ＩＣＥ１０３より指定されたアドレスを格納しておく装置である。アドレス制御部４１４は、実行コードメモリ４０２か、トレースメモリ４０３か、周辺機器制御メモリ４０４かにアクセスする。
【００３３】
実行コードメモリＩ／Ｏ制御部４１５は、実行コードメモリ４０２のＩ／Ｏ制御を行う。演算部４１６は、実行コード群に従って処理を実行する。トレースメモリＩ／Ｏ制御部４１７は、トレースメモリ４０３のＩ／Ｏ制御を行う。周辺機器Ｉ／Ｏ制御部４１８は、周辺機器制御メモリ４０４のＩ／Ｏ制御を行う。
【００３４】
受信部４２１は、ＩＣＥ１０３から、ＭＣＵコア４０１がアクセスする記憶部のいずれかのアドレスの読出／書込要求を受信する。ＭＣＵコア４０１がアクセスする記憶部とは、実行コードメモリ４０２〜周辺機器制御メモリ４０４である。
【００３５】
また、受信部４２１は、ＩＣＥ１０３から、実行コード群と復号を行う際の所定のデータ幅とを受信する。受信部４２１は、ＩＣＥ１０３からのデータを記憶するバッファを有する。
【００３６】
生成部４２２は、受信部４２１が読出要求を受信した場合、実行コード群のうちの実行中の実行コードに基づいて、暗号化に用いる共通鍵を生成する。
【００３７】
また、生成部４２２は、ＩＣＥ１０３から、ＭＣＵコア４０１がアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、受信部４２１が受信した実行コード群のうちの実行中の実行コードに基づいて、暗号化に用いる共通鍵を生成してもよい。なお、生成した共通鍵は、生成部４２２が有する記憶領域に記憶される。
【００３８】
暗号化部４２３は、生成部４２２が生成した共通鍵を用いて、読出要求に応じてＭＣＵコア４０１がアクセスする記憶部から読み出したデータを暗号化する。具体的には、暗号化部４２３は、平文となる読み出したデータと、共通鍵との演算を行い暗号文とする。演算方法は後述するＩＣＥ１０３の復号部５０４と同じ手法であれば、どのような演算方法でもよい。
【００３９】
また、暗号化部４２３は、暗号化データ幅で読み出したデータを分割した分割データに対して共通鍵を用いて暗号化してもよい。
【００４０】
暗号化データ幅は、１つでもよいし複数でもよい。本実施の形態では、１つ、または複数どちらも含む、暗号化データ幅群とする。また、暗号化データ幅が示す値は、ビット数でもよいしバイト数でもよい。本実施の形態では、暗号化データ幅が示す値は、バイト数を示すものとする。さらに、暗号化データ幅が示す値は、暗号化を行うデータ幅そのもののバイト数でもよいし、１バイト少ないバイト数でもよい。本実施の形態では、暗号化データ幅が示す値は、１バイト少ないバイト数であるとする。
【００４１】
たとえば、暗号化データ幅が、０ｘＦＦ、０ｘ１０であるとする。このとき、暗号化部４２３は、読み出したデータの先頭から０ｘＦＦ＋１バイト分のデータと、共通鍵の先頭から０ｘＦＦ＋１バイト分のデータとの演算を行う。続けて、暗号化部４２３は、読み出したデータの先頭の０ｘ１０１バイト目から、０ｘ１０＋１バイト分のデータと、共通鍵の先頭から０ｘ１０＋１バイト分のデータとの演算を行う。このように、暗号化部４２３は、読み出したデータを、暗号化データ幅ごとに暗号化していく。
【００４２】
また、暗号化部４２３は、受信部４２１が受信した復号を行う際の暗号化データ幅でデータを分割した分割データに対して共通鍵を用いて暗号化してもよい。
【００４３】
送信部４２４は、暗号化部４２３が暗号化した暗号化データをＩＣＥ１０３に送信する。送信部４２４は、ＩＣＥ１０３に送信するデータを記憶するバッファを有する。
【００４４】
また、送信部４２４は、暗号化部４２３が分割データに対して暗号化した暗号化データをＩＣＥ１０３に送信してもよい。
【００４５】
図５は、ＩＣＥの機能構成例を示すブロック図である。ＩＣＥ１０３は、送信部５０１と、受信部５０２と、生成部５０３と、復号部５０４と、メモリ５０５と、エミュレーション制御部５０８とを含む。メモリ５０５には、実行コード群５０６と暗号化データ幅群５０７とが格納される。エミュレーション制御部５０８には、生成部５０３と復号部５０４とが格納される。エミュレーション制御部５０８では、ターゲットシステム２０１のＭＣＵ３０１のプロセッサコア１０１を模倣する動作の制御も行う。
【００４６】
送信部５０１は、ＭＣＵコア４０１がアクセスする記憶部のいずれかのアドレスの読出要求をＭＣＵコア４０１に送信する。送信部５０１は、ＭＣＵコア４０１に送信するデータを記憶するバッファを有する。
【００４７】
また、送信部５０１は、生成された実行コード群５０６と生成された暗号化を行う際の暗号化データ幅群５０７の各暗号化データ幅とをデバッグＩ／Ｆ制御部１０２に送信した後、デバッグＩ／Ｆ制御部１０２に読出要求を送信してもよい。生成された実行コード群５０６とは、ソースコードから、ホストＰＣ２０３により生成された実行コード群である。また、生成された暗号化を行う際の暗号化データ幅群５０７は、ＩＣＥ１０３またはホストＰＣ２０３によって、たとえば、乱数により生成される。
【００４８】
受信部５０２は、送信部５０１が読出要求を送信した結果、暗号化データをデバッグＩ／Ｆ制御部１０２から受信する。受信部５０２は、ＭＣＵコア４０１からのデータを記憶するバッファを有する。
【００４９】
生成部５０３は、送信部５０１が読出要求を送信した場合、実行中の実行コードに基づいて、復号に用いる共通鍵を生成する。
【００５０】
復号部５０４は、送信部５０１が読出要求を送信した結果、ＭＣＵ３０１が実行中の実行コードに基づいた共通鍵を用いて暗号化された暗号化データをＭＣＵ３０１から受信した場合、生成部５０３が生成した共通鍵を用いて暗号化データを復号する。具体的に、復号部５０４は、暗号化データと、共通鍵との演算を行い、平文を取得する。演算方法はデバッグＩ／Ｆ制御部１０２の暗号化部４２３と同じ手法であれば、どのような演算方法でもよい。
【００５１】
また、復号部５０４は、送信部５０１が読出要求を送信した結果、受信部５０２が暗号化データをＭＣＵ３０１から受信した場合、暗号化を行う際の暗号化データ幅群５０７の各暗号化データ幅で暗号化データを分割した分割データに対して復号してもよい。
【００５２】
また、復号部５０４は、送信部５０１が読出要求を送信した結果、暗号化データをＭＣＵ３０１から受信した場合、生成された暗号化を行う際の暗号化データ幅群５０７の各暗号化データ幅で暗号化データを分割した分割データに対して復号してもよい。
【００５３】
図６は、ホストＰＣのハードウェア構成例を示すブロック図である。図６において、ホストＰＣ２０３は、ＣＰＵ６０１と、ＲＯＭ６０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）６０３と、を含む。また、ホストＰＣ２０３は、ディスクドライブ６０４と、ディスク６０５と、通信インターフェース６０６と、を含む。また、ホストＰＣ２０３は、ディスプレイ６０７と、キーボード６０８と、マウス６０９とを含む。また、ＣＰＵ６０１〜マウス６０９はバス６１０によってそれぞれ接続される。
【００５４】
ＣＰＵ６０１は、ホストＰＣ２０３の全体の制御を司る演算処理装置である。ＲＯＭ６０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ６０３は、ＣＰＵ６０１のワークエリアとして使用される揮発性メモリである。
【００５５】
ディスクドライブ６０４は、ＣＰＵ６０１の制御に従ってディスク６０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ６０４には、たとえば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク６０５は、ディスクドライブ６０４の制御で書き込まれたデータを記憶する不揮発性メモリである。たとえばディスクドライブ６０４が磁気ディスクドライブである場合、ディスク６０５には、磁気ディスクを採用することができる。また、ディスクドライブ６０４が光ディスクドライブである場合、ディスク６０５には、光ディスクを採用することができる。また、ディスクドライブ６０４がソリッドステートドライブである場合、ディスク６０５には、半導体素子メモリを採用することができる。
【００５６】
通信インターフェース６０６は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース６０６は、通信回線を通じてネットワーク２１１となるＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどに接続され、ネットワーク２１１を介して他の装置に接続される。通信インターフェース６０６には、たとえば、モデムやＬＡＮアダプタなどを採用することができる。
【００５７】
ディスプレイ６０７は、マウスカーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ６０７には、たとえば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００５８】
キーボード６０８は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード６０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス６０９は、マウスカーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス６０９は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
【００５９】
図７は、ソースコードと実行コードとの一例を示す説明図である。ホストＰＣ２０３は、ソースコード７０１から、実行コード群７０２を生成する。実行コード群７０２は、“００  ＦＦ  ００  Ｂ８…”というバイト列である。そして、ホストＰＣ２０３は、実行コード群７０２に暗号化データ幅群７０３を付与する。
【００６０】
図７の例では、０ｘ２０００００００から０ｘ２００００６ＦＦまでのデータが実行コード群７０２であり、０ｘ２００００７００から０ｘ２００００７１Ｆまでのデータが暗号化データ幅群７０３である。
【００６１】
ホストＰＣ２０３は、ＩＣＥ１０３経由で、実行コード群７０２と暗号化データ幅群７０３とをデバッグＩ／Ｆ制御部１０２に送信する。ＩＣＥ１０３は、実行コード群７０２と暗号化データ幅群７０３とをメモリ５０５に格納する。また、デバッグＩ／Ｆ制御部１０２は、実行コード群７０２を実行コードメモリ４０２に格納するとともに、暗号化データ幅群７０３を暗号化データ幅制御部４１２の記憶領域に格納する。
【００６２】
図８は、トレースメモリの記憶内容の一例を示す説明図である。トレースメモリ４０３は、トレースメモリアドレスと、実行コードメモリアドレスと、バス上のデータと、アドレスステータスと、データステータスと、タイムスタンプと、という６つのフィールドを含む。
【００６３】
トレースメモリアドレスフィールドには、トレースメモリ４０３上の記録アドレスが格納される。記録する順序は、アプリによって降順、昇順いずれでもよい。実行コードメモリアドレスフィールドには、ターゲットシステムのバス上のアドレスが格納される。バス上のアドレスは、具体的には、実行コードメモリのアドレスか、Ｉ／Ｏアクセスのアドレスか、周辺機器制御メモリのアドレスかである。バス上のデータフィールドには、ターゲットシステムのバス上のデータが格納される。バス上のデータは、具体的には、実行コードメモリのデータか、Ｉ／Ｏアクセスによるデータか、周辺機器制御メモリのデータかである。
【００６４】
アドレスステータスフィールドには、ターゲットシステムのバス上で扱うアドレスのステータスが格納される。アドレスのステータスは、具体的には、たとえば、下記第１〜第５のアドレスのステータスがある。第１のアドレスのステータスは、バス上のアドレスがコードであることを示す“ＩＣＦ”である。第２のアドレスのステータスは、内部リードであることを示す“ＩＲＡ”である。第３のアドレスのステータスは、内部ライトであることを示す“ＩＷＡ”である。第４のアドレスのステータスは、外部リードであることを示す“ＥＲＡ”である。第５のアドレスのステータスは、外部ライトであることを示す“ＥＷＡ”である。
【００６５】
データステータスフィールドには、ターゲットシステムのバス上で扱うデータのステータスが格納される。データのステータスは、具体的には、たとえば、下記第１、第２のデータのステータスがある。第１のデータのステータスは、ターゲットシステムのバス上のデータが有効であることを示す“ＥＸＥＣＵＴＥ”である。第２のデータのステータスは、ターゲットシステムのバス上のデータが無効であることを示す“−−−−−−−”である。
【００６６】
タイムスタンプフィールドには、各コマンド実行時のサイクル数から、クロック周波数を元に実行時間を算出した結果が格納される。次に、図９、図１０を用いて、デバッグＩ／Ｆ制御部１０２によるデバッグコマンド受信処理の動作と、ＩＣＥ１０３による暗号化データの復号時の動作について説明する。ここで、デバッグコマンドは、ＩＣＥ１０３から発行されるコマンドである。デバッグコマンドには、ターゲットシステム２０１のあるアドレスの読出要求と、ターゲットシステム２０１のあるアドレスへの書込要求と、の２種類がある。
【００６７】
図９は、デバッグコマンド受信処理の一連の動作を示す説明図である。図９の（１）で示す処理において、デバッグＩ／Ｆ制御部１０２は、ＩＣＥ１０３から、ＭＣＵコア４０１がアクセスする記憶部として、０ｘ２０００００００の読出要求を受信する。このとき、０ｘ２０００００００から何バイト読み出すかについては、たとえば、デフォルトの値がデバッグシステム１００の利用者により指定される。また、ＩＣＥ１０３から、何バイト読み出すかという情報が付与されてもよい。
【００６８】
読出要求を受信した後、図９の（２）で示す処理において、デバッグＩ／Ｆ制御部１０２は、実行中の実行コードに基づいて、共通鍵９０１を生成する。実行中の実行コードは、実行コードメモリ４０２のうちの、プログラムカウンタが示すアドレスの実行コードである。図９の例では、プログラムカウンタが０ｘ２０００００２Ｃであるので、実行中の実行コードは、図７より、０ｘ２２００となる。デバッグＩ／Ｆ制御部１０２は、０ｘ２２００を用いて、共通鍵９０１を生成する。
【００６９】
続けて、図９の（３）で示す処理において、デバッグＩ／Ｆ制御部１０２は、暗号化データ幅制御部４１２から、先頭の暗号化データ幅を取得する。そして、図９の（４）で示す処理において、デバッグＩ／Ｆ制御部１０２は、読出アドレスを０ｘ２０００００００として、実行コードメモリ４０２の読出アドレスから、取得した暗号化データ幅である０ｘ７Ｆ＋１バイト分読み出す。続けて、図９の（５）で示す処理において、デバッグＩ／Ｆ制御部１０２は、共通鍵９０１を用いて、読み出したデータを暗号化する。次に、図９の（６）で示す処理において、デバッグＩ／Ｆ制御部１０２は、暗号化した暗号化データを、ＩＣＥ１０３に送信する。
【００７０】
同様に、デバッグＩ／Ｆ制御部１０２は、図９の（３）〜（６）で示す処理を繰り返し、読出要求のあったデータを暗号化してＩＣＥ１０３に送信する。
【００７１】
図１０は、暗号化データの復号時の一連の動作を示す説明図である。図１０で説明するＩＣＥ１０３のメモリ５０５に記憶される実行コード群５０６の内容は、実行コードメモリ４０２に記憶される実行コード群の内容と同一であるとする。また、ＩＣＥ１０３のメモリ５０５に記憶される暗号化データ幅群５０７の内容は、暗号化データ幅制御部４１２の記憶領域に格納された内容と同一であるとする。
【００７２】
図１０の（１）で示す処理において、ＩＣＥ１０３は、読出要求を送信後、実行コード群５０６のうちの実行中の実行コードに基づいて、共通鍵１００１を生成する。実行中の実行コードは、実行コードのうちの、プログラムカウンタが示すアドレスの実行コードである。図１０の例では、プログラムカウンタが０ｘ２０００００２Ｃであるので、実行中の実行コードは、図７より、０ｘ２２００となる。また、ＩＣＥ１０３のプログラムカウンタと、ＭＣＵコア４０１のプログラムカウンタとは同じ値となる。
【００７３】
デバッグＩ／Ｆ制御部１０２から暗号化データ１００２を受信した場合、図１０の（２）で示す処理において、ＩＣＥ１０３は、暗号化データ１００２の先頭から、暗号化データ幅群５０７の先頭の暗号化データ幅である０ｘ７Ｆ＋１バイト分のデータを取得する。そして、図１０の（３）で示す処理において、ＩＣＥ１０３は、復号部５０４によって、共通鍵１００１を用いて、取得したデータを復号する。同様に、ＩＣＥ１０３は、暗号化データ１００２の先頭の０ｘ８０バイト目から、暗号化データ幅群５０７の次の暗号化データ幅である０ｘ０＋１バイト分のデータを、共通鍵１００１を用いて復号する。復号したデータは、ホストＰＣ２０３に送信される。
【００７４】
図１１は、デバッグコマンド受信処理手順の一例を示すフローチャートである。デバッグコマンド受信処理は、ＩＣＥ１０３からデバッグコマンドを受信した際に行う処理である。
【００７５】
デバッグＩ／Ｆ制御部１０２は、デバッグコマンドを受信する（ステップＳ１１０１）。次に、デバッグＩ／Ｆ制御部１０２は、デバッグコマンドの種別が次に示す情報のいずれに一致するかを判断する（ステップＳ１１０２）。次に示す情報は、読出要求と、書込要求と、である。デバッグコマンドの種別が読出要求である場合（ステップＳ１１０２：読出要求）、デバッグＩ／Ｆ制御部１０２は、続けて、デバッグコマンドに含まれるアドレスから、読出先が次に示すメモリのいずれに一致するかを判断する（ステップＳ１１０３）。次に示すメモリは、実行コードメモリ４０２と、トレースメモリ４０３と、である。なお、図示していないが、読出先が周辺機器制御メモリ４０４である場合、デバッグＩ／Ｆ制御部１０２は、周辺機器制御メモリ４０４から読み出したデータを暗号化してもよいし、暗号化しなくてもよい。
【００７６】
読出先が実行コードメモリ４０２である場合（ステップＳ１１０３：実行コードメモリ）、デバッグＩ／Ｆ制御部１０２は、実行コードメモリ読出処理を実行する（ステップＳ１１０４）。実行コードメモリ読出処理は、図１２で後述する。一方、読出先がトレースメモリ４０３である場合（ステップＳ１１０３：トレースメモリ）、デバッグＩ／Ｆ制御部１０２は、トレースメモリ読出処理を実行する（ステップＳ１１０５）。トレースメモリ読出処理は、図１３で後述する。
【００７７】
ステップＳ１１０４、またはステップＳ１１０５の処理終了後、デバッグＩ／Ｆ制御部１０２は、デバッグＩ／Ｆ３０５を介して、暗号化データをＩＣＥ１０３に送信する（ステップＳ１１０６）。
【００７８】
デバッグコマンドの種別が書込要求である場合（ステップＳ１１０２：書込要求）、デバッグＩ／Ｆ制御部１０２は、通常の書込処理を実行する（ステップＳ１１０７）。ここで、通常の書込処理とは、デバッグコマンドに含まれる書込データを、書込先のアドレスに書き込む処理となる。
【００７９】
ステップＳ１１０６、またはステップＳ１１０７の処理終了後、デバッグＩ／Ｆ制御部１０２は、デバッグコマンド受信処理を終了する。デバッグコマンド受信処理を実行することにより、デバッグＩ／Ｆ制御部１０２は、ＩＣＥ１０３から読出要求を受信した際に、第三者による情報取得が難しくなるように暗号化してメモリの内容をＩＣＥ１０３に送信することができる。
【００８０】
図１２は、実行コードメモリ読出処理手順の一例を示すフローチャートである。実行コードメモリ読出処理は、読出先が実行コードメモリ４０２であるときの処理である。デバッグＩ／Ｆ制御部１０２は、デバッグコマンドの読出要求アドレスを、暗号化対象となる実行コードの読出アドレスに設定する（ステップＳ１２０１）。次に、デバッグＩ／Ｆ制御部１０２は、実行コードメモリ４０２から、現在のプログラムカウンタのアドレスが示す実行コードに基づいて、共通鍵を生成する（ステップＳ１２０２）。続けて、デバッグＩ／Ｆ制御部１０２は、暗号化データ幅制御部４１２から、先頭の暗号化データ幅を取得する（ステップＳ１２０３）。
【００８１】
次に、デバッグＩ／Ｆ制御部１０２は、実行コードメモリ４０２から、読出アドレスから取得した暗号化データ幅分の実行コードを読み出す（ステップＳ１２０４）。続けて、デバッグＩ／Ｆ制御部１０２は、読み出した実行コードを共通鍵で暗号化する（ステップＳ１２０５）。次に、デバッグＩ／Ｆ制御部１０２は、要求があった全ての実行コードを読み出したか否かを判断する（ステップＳ１２０６）。要求があった実行コードのうち、まだ読み出していない実行コードがある場合（ステップＳ１２０６：Ｎｏ）、デバッグＩ／Ｆ制御部１０２は、現在の読出アドレスに暗号化データ幅を加算した値を、読出アドレスに設定する（ステップＳ１２０７）。続けて、デバッグＩ／Ｆ制御部１０２は、暗号化データ幅制御部４１２から、次の暗号化データ幅を取得する（ステップＳ１２０８）。ステップＳ１２０８の処理終了後、デバッグＩ／Ｆ制御部１０２は、ステップＳ１２０４の処理に移行する。
【００８２】
要求があった全ての実行コードを読み出した場合（ステップＳ１２０６：Ｙｅｓ）、デバッグＩ／Ｆ制御部１０２は、実行コードメモリ読出処理を終了する。実行コードメモリ読出処理を実行することにより、デバッグシステム１００は、実行コードメモリ４０２に記憶された実行コード群に対して暗号化を行うことができる。
【００８３】
図１３は、トレースメモリ読出処理手順の一例を示すフローチャートである。トレースメモリ読出処理は、読出先がトレースメモリ４０３であるときの処理である。デバッグＩ／Ｆ制御部１０２は、トレースメモリ４０３の先頭アドレスを、暗号化対象の読出アドレスに設定する（ステップＳ１３０１）。次に、デバッグＩ／Ｆ制御部１０２は、実行コードメモリ４０２から、現在のプログラムカウンタが示すアドレスに対応する実行コードに基づいて、共通鍵を生成する（ステップＳ１３０２）。続けて、デバッグＩ／Ｆ制御部１０２は、暗号化データ幅制御部４１２から、先頭の暗号化データ幅を取得する（ステップＳ１３０３）。
【００８４】
次に、デバッグＩ／Ｆ制御部１０２は、トレースメモリ４０３から、読出アドレスから取得した暗号化データ幅分のデータを読み出す（ステップＳ１３０４）。続けて、デバッグＩ／Ｆ制御部１０２は、読み出したデータを共通鍵で暗号化する（ステップＳ１３０５）。次に、デバッグＩ／Ｆ制御部１０２は、要求があった全てのトレースメモリを読み出したか否かを判断する（ステップＳ１３０６）。要求があったトレースメモリ４０３のうち、まだ読み出していないデータがある場合（ステップＳ１３０６：Ｎｏ）、デバッグＩ／Ｆ制御部１０２は、現在の読出アドレスに暗号化データ幅を加算した値を、読出アドレスに設定する（ステップＳ１３０７）。続けて、デバッグＩ／Ｆ制御部１０２は、暗号化データ幅制御部４１２から、次の暗号化データ幅を取得する（ステップＳ１３０８）。ステップＳ１３０８の処理終了後、デバッグＩ／Ｆ制御部１０２は、ステップＳ１３０４の処理に移行する。
【００８５】
要求があった全てのトレースメモリを読み出した場合（ステップＳ１３０６：Ｙｅｓ）、デバッグＩ／Ｆ制御部１０２は、トレースメモリ読出処理を終了する。トレースメモリ読出処理を実行することにより、デバッグシステム１００は、トレースメモリ４０３に記憶されたデータについて暗号化することができる。
【００８６】
図１４は、デバッグコマンド送信処理手順の一例を示すフローチャートである。デバッグコマンド送信処理は、デバッグＩ／Ｆ制御部１０２にデバッグコマンドを送信する処理と、デバッグコマンドを送信したことによって発生する復号の処理とである。
【００８７】
ＩＣＥ１０３は、デバッグＩ／Ｆ制御部１０２にデバッグコマンドを送信する（ステップＳ１４０１）。次に、ＩＣＥ１０３は、デバッグＩ／Ｆ制御部１０２から暗号化データを受信したか否かを判断する（ステップＳ１４０２）。デバッグＩ／Ｆ制御部１０２から暗号化データを受信していない場合（ステップＳ１４０２：Ｎｏ）、ＩＣＥ１０３は、デバッグＩ／Ｆ制御部１０２からの応答を待ち、一定時間後、ステップＳ１４０２の処理を実行する。デバッグＩ／Ｆ制御部１０２から暗号化データを受信した場合（ステップＳ１４０２：Ｙｅｓ）、ＩＣＥ１０３は、実行コード群のうちの、ＩＣＥのプログラムカウンタが示すアドレスに対応する実行コードに基づいて、共通鍵を生成する（ステップＳ１４０３）。続けて、ＩＣＥ１０３は、暗号化データの先頭アドレスを、読出アドレスに設定する（ステップＳ１４０４）。次に、ＩＣＥ１０３は、暗号化データ幅群５０７のうちの先頭の暗号化データ幅を取得する（ステップＳ１４０５）。
【００８８】
続けて、ＩＣＥ１０３は、暗号化データの読出アドレスから、暗号化データ幅分の分割暗号化データを読み出す（ステップＳ１４０６）。次に、ＩＣＥ１０３は、共通鍵を用いて分割暗号化データを復号する（ステップＳ１４０７）。続けて、ＩＣＥ１０３は、暗号化データの全てを復号したか否かを判断する（ステップＳ１４０８）。暗号化データうち復号していないデータがある場合（ステップＳ１４０８：Ｎｏ）、ＩＣＥ１０３は、現在の読出アドレスに暗号化データ幅を加算した値を、読出アドレスに設定する（ステップＳ１４０９）。続けて、ＩＣＥ１０３は、暗号化データ幅群５０７から、次の暗号化データ幅を取得する（ステップＳ１４１０）。ステップＳ１４１０の処理終了後、ＩＣＥ１０３は、ステップＳ１４０６の処理に移行する。
【００８９】
暗号化データの全てを復号した場合（ステップＳ１４０８：Ｙｅｓ）、ＩＣＥ１０３は、復号したデータを出力する（ステップＳ１４１１）。出力先は、ホストＰＣ２０３となる。ステップＳ１４１１の処理終了後、ＩＣＥ１０３は、デバッグコマンド送信処理を終了する。デバッグコマンド送信処理を実行することにより、デバッグシステム１００は、暗号化データを復号することができる。また、デバッグコマンド送信処理において、実行コード群５０６の内容と、実行コードメモリ４０２に記憶される実行コード群の内容とが異なる場合、暗号化に用いられる共通鍵の内容と、復号に用いられる共通鍵の内容が異なるものとなる。したがって、この場合、ステップＳ１４１１の処理によって得られる復号したデータは、元のデータとは異なるので、デバッグシステム１００は、第三者による情報取得を困難にすることができる。
【００９０】
以上説明したように、デバッグシステム１００によれば、ターゲットシステム２０１のデータの読出要求があった際に、実行コード群のうち実行中の実行コードを生成元とする共通鍵を用いてデータを暗号化してＩＣＥ１０３に送信する。これにより、デバッグシステム１００は、実行中の実行コードに応じて生成される共通鍵が変わるため、第三者による情報取得を難化できる。また、デバッグシステム１００は、開発者でなければ持ち得ない実行コード群を利用するため、第三者による情報取得を困難にすることができる。第三者による情報取得を困難になることにより、第三者によるリバースエンジニアリングが行い難くなる。また、デバッグシステムは１００は、実行コード群を用いて共通鍵を生成するため、共通鍵を生成するための特別なデータを用意しなくてよい。
【００９１】
また、デバッグシステム１００によれば、読み込んだデータを暗号化データ幅で分割した分割データに対して暗号化を行ってもよい。暗号化データ幅が分からないと正しく復号することができないため、第三者による情報取得を、暗号化データ幅を用いない場合より困難にすることができる。
【００９２】
また、デバッグシステム１００によれば、コンパイル時にＩＣＥ１０３またはホストＰＣ２０３により生成された暗号化データ幅をデバッグＩ／Ｆ制御部１０２に送信し、デバッグＩ／Ｆ制御部１０２は、生成された暗号化データ幅を用いて暗号化してもよい。これにより、実行コード群がバージョンアップした際などに、暗号化データ幅を変更することができ、同一の暗号化データ幅を用いる期間を短くすることができるため、第三者による情報取得をより困難にすることができる。
【００９３】
また、デバッグシステム１００は、ＩＣＥ１０３からデバッグＩ／Ｆ制御部１０２へのデバッグコマンドが書込要求であれば、暗号化を行わないため、ターゲットシステム２０１の暗号化にかかる負荷を抑制することができる。また、ターゲットシステム２０１が古いバージョンに対応する実行コード群を記憶しており、ＩＣＥ１０３が新しいバージョンに対応する実行コード群が記憶しているとする。このとき、ホストＰＣ２０３は、古いバージョンに対応する実行コード群をＩＣＥ１０３に送信することにより、本実施の形態における暗号化、復号を行えるようになる。また、デバッグシステム１００では、プロセッサコア１０１とＩＣＥ１０３とで同期しているプログラムカウンタを用いて共通鍵を生成するため、共通鍵方式で問題となる鍵交換を行わなくてよい。
【００９４】
なお、本実施の形態で説明したデバッグ方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本デバッグプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本デバッグプログラムは、インターネット等のネットワークを介して配布してもよい。
【００９５】
また、本実施の形態で説明したデバッグＩ／Ｆ制御部１０２、ＩＣＥ１０３は、スタンダードセルやストラクチャードＡＳＩＣやＦＰＧＡなどのＰＬＤによっても実現することができる。具体的には、たとえば、上述したデバッグＩ／Ｆ制御部１０２の受信部４２１〜送信部４２４をＨＤＬ記述によって機能定義し、ＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、デバッグＩ／Ｆ制御部１０２を製造することができる。同様に、ＩＣＥ１０３の送信部５０１〜復号部５０４をＨＤＬ記述によって機能定義し、ＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、ＩＣＥ１０３を製造することができる。
【００９６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００９７】
（付記１）実行コード群を実行するプロセッサコアと、
前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成する生成部と、
前記生成部が生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化する暗号化部と、
前記暗号化部が暗号化した暗号化データを前記エミュレータに送信する送信部と、
を有することを特徴とするシステム。
【００９８】
（付記２）前記暗号化部は、
復号を行う際の所定のデータ幅で前記データを分割した分割データに対して前記共通鍵を用いて暗号化し、
前記送信部は、
前記暗号化部が前記分割データに対して暗号化した暗号化データを前記エミュレータに送信することを特徴とする付記１に記載のシステム。
【００９９】
（付記３）前記エミュレータから、実行コード群と復号を行う際の所定のデータ幅とを受信する受信部をさらに有し、
前記生成部は、
前記エミュレータから、前記記憶部のいずれかのアドレスの読出要求を受信した場合、前記受信部が受信した前記実行コード群のうちの実行中の実行コードに基づいて、暗号化に用いる共通鍵を生成し、
前記暗号化部は、
前記受信部が受信した復号を行う際の所定のデータ幅で前記データを分割した分割データに対して前記共通鍵を用いて暗号化することを特徴とする付記２に記載のシステム。
【０１００】
（付記４）実行コード群のいずれかの実行コードを実行中のプロセッサコアの動作を模倣するエミュレータにおいて、
前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を前記プロセッサコアに送信する送信部と、
前記送信部が前記読出要求を送信した場合、前記実行コードに基づいて、復号に用いる共通鍵を生成する生成部と、
前記送信部が前記読出要求を送信した結果、前記プロセッサコアが実行中の実行コードに基づいた共通鍵を用いて暗号化された暗号化データを前記プロセッサコアから受信した場合、前記生成部が生成した前記共通鍵を用いて前記暗号化データを復号する復号部と、
を有することを特徴とするエミュレータ。
【０１０１】
（付記５）前記復号部は、
前記送信部が前記読出要求を送信した結果、前記暗号化データを前記プロセッサコアから受信した場合、暗号化を行う際の所定のデータ幅で前記暗号化データを分割した分割データに対して復号することを特徴とする付記４に記載のエミュレータ。
【０１０２】
（付記６）前記送信部は、
生成された実行コード群と生成された暗号化を行う際の所定のデータ幅とを前記プロセッサコアに送信した後、前記生成された実行コード群のいずれかの実行コードを実行中の前記プロセッサコアに前記読出要求を送信し、
前記復号部は、
前記送信部が前記読出要求を送信した結果、前記暗号化データを前記プロセッサコアから受信した場合、前記生成された暗号化を行う際の所定のデータ幅で前記暗号化データを分割した分割データに対して復号することを特徴とする付記５に記載のエミュレータ。
【０１０３】
（付記７）実行コード群を実行するプロセッサコアと、
前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータと、
前記エミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成する生成部と、
前記生成部が生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化する暗号化部と、
前記暗号化部が暗号化した暗号化データを前記エミュレータに送信する送信部と、
を有することを特徴とするデバッグシステム。
【０１０４】
（付記８）実行コード群を実行するプロセッサコアを有するシステムと、前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータと、を有するデバッグシステムにおける方法において、
前記システムが、
前記エミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成し、
生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化し、
暗号化した暗号化データを前記エミュレータに送信する、
処理を実行することを特徴とするデバッグシステムにおける方法。
【符号の説明】
【０１０５】
１００  デバッグシステム
１０１  プロセッサコア
１０２  デバッグＩ／Ｆ制御部
１０３  ＩＣＥ
１０４  記憶部
２０１  ターゲットシステム
４２１  受信部
４２２  生成部
４２３  暗号化部
４２４  送信部
５０１  送信部
５０２  受信部
５０３  生成部
５０４  復号部
５０６  実行コード群
５０７  暗号化データ幅群
【図１】
2015026223.tif 000003
【図２】
2015026223.tif 000004
【図３】
2015026223.tif 000005
【図４】
2015026223.tif 000006
【図５】
2015026223.tif 000007
【図６】
2015026223.tif 000008
【図７】
2015026223.tif 000009
【図８】
2015026223.tif 000010
【図９】
2015026223.tif 000011
【図１０】
2015026223.tif 000012
【図１１】
2015026223.tif 000013
【図１２】
2015026223.tif 000014
【図１３】
2015026223.tif 000015
【図１４】
2015026223.tif 000016