(58)【調査した分野】(Int.Cl.,DB名)
実行コード群を実行するプロセッサコアを有するシステムと、前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータと、を有するデバッグシステムにおける方法において、
前記システムが、
前記エミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成し、
生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化し、
暗号化した暗号化データを前記エミュレータに送信する、
処理を実行することを特徴とするデバッグシステムにおける方法。
【発明を実施するための形態】
【0011】
以下に図面を参照して、開示のシステム、エミュレータ、デバッグシステムおよびデバッグシステムにおける方法の実施の形態を詳細に説明する。
【0012】
図1は、本実施の形態にかかるデバッグシステムの動作例を示す説明図である。デバッグシステム100は、デバッグシステム100に含まれるプロセッサコア101をデバッグするシステムである。デバッグシステム100は、プロセッサコア101が実行するソフトウェアの開発において用いられる。
【0013】
デバッグシステム100は、プロセッサコア101と、プロセッサコア101に接続するデバッグI/F制御部102と、ICE103と、記憶部104とを有する。デバッグI/F制御部102と、ICE103とが接続する。プロセッサコア101は、ソフトウェアとなる実行コード群を実行する。本実施の形態における実行コードは、1つのアドレスに関連付いた1命令であるとする。ICE103は、実行コード群のいずれかの実行コードを実行中のプロセッサコア101の動作を模倣するエミュレータ装置である。
【0014】
デバッグシステムにおいて、プロセッサコアとICEとの通信が秘匿されていないと、実行コード群の開発者以外の第三者は、プロセッサコアが含まれるシステム内部の情報を読み取り、読み取った情報を用いてリバースエンジニアリングすることができてしまう。たとえば、開発者以外の第三者は、プロセッサコアがアクセスするアドレス空間を虱潰しにアクセスして、システム内部の情報として、実行コード群を取得することができてしまう。
【0015】
第三者による情報取得を困難にする技術として、下記2つの技術を例に示す。第1の技術として、ICEがCPUを介しメモリへアクセスするアドレスと、プログラムコードから制御データを抜き取ったデータにより決定されるプログラムコードのメモリ上のアドレス空間とが一致すればICEからCPUへのデータ転送を禁止するものがある。しかし、第1の技術を適用した場合、特殊なフォーマットによるプログラムコードを暗号化することになる。
【0016】
また、第2の技術として、鍵情報を記憶する一度だけ書込可能な不揮発メモリの鍵情報を用いて暗号化を行う技術がある。しかし、第2の技術を適用したシステムでは、鍵情報の書き換えが行えないため、システムの安全性が低下する。また、鍵情報を紛失してしまうと、第2の技術を適用したシステムは、2度と暗号化、復号が行えなくなる。
【0017】
そこで、本実施の形態にかかるデバッグシステム100は、プロセッサコア101がアクセスする記憶部のデータの読出要求があった際に、実行コード群のうち実行中の実行コードを生成元とする共通鍵を用いてデータを暗号化してICE103に送信する。これにより、デバッグシステム100は、実行中の実行コードに応じて生成される共通鍵が変わるため、第三者による情報取得を難化できる。
【0018】
デバッグシステム100において、プロセッサコア101は、プロセッサコア101がアクセスする記憶部104に含まれる実行コード群105を実行する。また、ICE103は、実行コード群105のいずれかの実行コードを実行中のプロセッサコア101の動作を模倣する。したがって、プロセッサコア101のプログラムカウンタ106とICE103のプログラムカウンタ107とは同期しており、プログラムカウンタ106が示すアドレスと、プログラムカウンタ107が示すアドレスとは常に同一となる。
図1の例では、プログラムカウンタ106が示すアドレスが0x2000002Cであり、プログラムカウンタ107が示すアドレスも0x2000002Cとなる。
【0019】
デバッグI/F制御部102は、ICE103から、プロセッサコア101がアクセスする記憶部104のいずれかのアドレスの読出要求を受信する。次に、デバッグI/F制御部102は、実行コード群105のうちのプロセッサコア101が実行中の実行コードを用いて、共通鍵108を生成する。続けて、デバッグI/F制御部102は、記憶部104から読み出した読出データ109を、共通鍵108を用いて暗号化する。なお、暗号化のアルゴリズムは、共通鍵方式を用いるものであればどのようなアルゴリズムであってもよい。そして、デバッグI/F制御部102は、暗号化した暗号化データ110をICE103に送信する。
【0020】
読出要求をデバッグI/F制御部102に送信したICE103は、ICE103が記憶する実行コード群111から、ICE103の実行中の実行コードに基づいて、共通鍵112を生成する。そして、暗号化データ110を受信した際、ICE103は、共通鍵112を用いて、暗号化データ110を復号する。共通鍵108と共通鍵112が同一の内容である場合に、暗号化データ110を復号したデータ113と、読出データ109とが同一の内容となる。このとき、実行コード群105と実行コード群111とが同一の内容であれば、共通鍵108と共通鍵112が同一の内容となる。実行コード群105と実行コード群111とが同一の内容になるのは、開発者によって操作されたコンパイラが生成した実行コード群が、実行コード群111としてICE103内に記憶されるときである。したがって、第三者が用意した実行コード群がICE103内に記憶された場合、データ113と、読出データ109とは異なる内容になることがほとんどとなる。
【0021】
図2は、デバッグシステムの接続例を示す説明図である。デバッグシステム100は、ターゲットシステム201と、ICE103を含むエミュレーションシステム202とを含む。ターゲットシステム201は、開発対象のシステムである。ターゲットシステム201の内部については、
図3にて説明する。
【0022】
エミュレーションシステム202は、ICE103と、ホストPC203とを含む。ホストPC203は、デバッグシステム100を利用する利用者が操作するコンピュータである。ホストPC203は、ICE103を制御するICE制御ソフトがインストールされている。また、ホストPC203は、ターゲットシステム201が実行する実行コード群を生成するクロスコンパイラがインストールされている。ホストPC203のハードウェアの構成は、
図6で後述する。
【0023】
図3は、ターゲットシステムのハードウェア構成例を示すブロック図である。ターゲットシステム201は、MCU(Micro Control Unit)301と、ロジック回路302と、外部メモリ303と、ペリフェラル304と、デバッグI/F305と、を含む。MCU301およびロジック回路302と、MCU301および外部メモリ303と、MCU301およびペリフェラル304と、はそれぞれ外部I/Fにより接続される。
【0024】
MCU301は、ターゲットシステム201を制御する装置である。ロジック回路302は、基本的な演算を実装する論理ゲートを組み合わせて、ある機能を実現する回路である。ロジック回路302は、たとえば、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)等である。
【0025】
外部メモリ303は、MCU301、ロジック回路302、ペリフェラル304からアクセスされる記憶装置である。ペリフェラル304は、ターゲットシステム201に何らかの機能を付加する装置である。ペリフェラル304は、たとえば、ディスプレイ、タッチパネル等である。デバッグI/F305は、エミュレーションシステム202とのデータの入出力を制御する制御装置である。
【0026】
図4は、MCUの機能構成例を示すブロック図である。MCU301は、プロセッサコア101に相当するMCUコア401と、デバッグI/F制御部102と、実行コードメモリ402と、トレースメモリ403とを含む。そして、MCU301は、周辺機器制御メモリ404にアクセス可能である。
【0027】
MCUコア401は、デバッグ命令制御部411と、暗号化データ幅制御部412と、実行コードアドレス指定部413と、アドレス制御部414と、実行コードメモリI/O制御部415と、を含む。さらに、MCUコア401は、演算部416と、トレースメモリI/O制御部417と、周辺機器I/O制御部418とを含む。
【0028】
実行コードメモリ402は、実行コード群を記憶する記憶領域である。実行コード群の具体例は、
図7で後述する。トレースメモリ403は、実行コード群を実行した結果を記録する記憶領域である。周辺機器制御メモリ404は、ロジック回路302〜ペリフェラル304を制御するメモリである。具体的には、周辺機器制御メモリ404は、ロジック回路302〜ペリフェラル304の動作を制御するレジスタである。
【0029】
デバッグI/F制御部102は、受信部421と、生成部422と、暗号化部423と、送信部424とを含む。
【0030】
デバッグ命令制御部411は、受信部421が受信したデータを、暗号化データ幅制御部412、実行コードアドレス指定部413、実行コードメモリI/O制御部415〜周辺機器I/O制御部418のいずれかに振り分ける。
【0031】
暗号化データ幅制御部412は、暗号化や復号を行う際の所定のデータ幅となる、暗号化データ幅群を記憶しておき、暗号化データ幅の取得要求があった場合に、暗号化データ幅を順に出力する。たとえば、暗号化データ幅制御部412が0xFF、0x10と記憶してある状態で、先頭の暗号化データ幅の取得要求があった場合、暗号化データ幅制御部412は、0xFFを返す。続けて、次の暗号化データ幅の取得要求があった場合、暗号化データ幅制御部412は、0x10を返す。さらに、次の暗号化データ幅の取得要求があった場合、暗号化データ幅制御部412は、先頭に戻って0xFFを返してもよいし、予め決められた固定値を返してもよい。暗号化データ幅群の具体例は、
図7で後述する。
【0032】
実行コードアドレス指定部413は、ICE103より指定されたアドレスが実行コードメモリ402のアドレスであれば、ICE103より指定されたアドレスを格納しておく装置である。アドレス制御部414は、実行コードメモリ402か、トレースメモリ403か、周辺機器制御メモリ404かにアクセスする。
【0033】
実行コードメモリI/O制御部415は、実行コードメモリ402のI/O制御を行う。演算部416は、実行コード群に従って処理を実行する。トレースメモリI/O制御部417は、トレースメモリ403のI/O制御を行う。周辺機器I/O制御部418は、周辺機器制御メモリ404のI/O制御を行う。
【0034】
受信部421は、ICE103から、MCUコア401がアクセスする記憶部のいずれかのアドレスの読出/書込要求を受信する。MCUコア401がアクセスする記憶部とは、実行コードメモリ402〜周辺機器制御メモリ404である。
【0035】
また、受信部421は、ICE103から、実行コード群と復号を行う際の所定のデータ幅とを受信する。受信部421は、ICE103からのデータを記憶するバッファを有する。
【0036】
生成部422は、受信部421が読出要求を受信した場合、実行コード群のうちの実行中の実行コードに基づいて、暗号化に用いる共通鍵を生成する。
【0037】
また、生成部422は、ICE103から、MCUコア401がアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、受信部421が受信した実行コード群のうちの実行中の実行コードに基づいて、暗号化に用いる共通鍵を生成してもよい。なお、生成した共通鍵は、生成部422が有する記憶領域に記憶される。
【0038】
暗号化部423は、生成部422が生成した共通鍵を用いて、読出要求に応じてMCUコア401がアクセスする記憶部から読み出したデータを暗号化する。具体的には、暗号化部423は、平文となる読み出したデータと、共通鍵との演算を行い暗号文とする。演算方法は後述するICE103の復号部504と同じ手法であれば、どのような演算方法でもよい。
【0039】
また、暗号化部423は、暗号化データ幅で読み出したデータを分割した分割データに対して共通鍵を用いて暗号化してもよい。
【0040】
暗号化データ幅は、1つでもよいし複数でもよい。本実施の形態では、1つ、または複数どちらも含む、暗号化データ幅群とする。また、暗号化データ幅が示す値は、ビット数でもよいしバイト数でもよい。本実施の形態では、暗号化データ幅が示す値は、バイト数を示すものとする。さらに、暗号化データ幅が示す値は、暗号化を行うデータ幅そのもののバイト数でもよいし、1バイト少ないバイト数でもよい。本実施の形態では、暗号化データ幅が示す値は、1バイト少ないバイト数であるとする。
【0041】
たとえば、暗号化データ幅が、0xFF、0x10であるとする。このとき、暗号化部423は、読み出したデータの先頭から0xFF+1バイト分のデータと、共通鍵の先頭から0xFF+1バイト分のデータとの演算を行う。続けて、暗号化部423は、読み出したデータの先頭の0x101バイト目から、0x10+1バイト分のデータと、共通鍵の先頭から0x10+1バイト分のデータとの演算を行う。このように、暗号化部423は、読み出したデータを、暗号化データ幅ごとに暗号化していく。
【0042】
また、暗号化部423は、受信部421が受信した復号を行う際の暗号化データ幅でデータを分割した分割データに対して共通鍵を用いて暗号化してもよい。
【0043】
送信部424は、暗号化部423が暗号化した暗号化データをICE103に送信する。送信部424は、ICE103に送信するデータを記憶するバッファを有する。
【0044】
また、送信部424は、暗号化部423が分割データに対して暗号化した暗号化データをICE103に送信してもよい。
【0045】
図5は、ICEの機能構成例を示すブロック図である。ICE103は、送信部501と、受信部502と、生成部503と、復号部504と、メモリ505と、エミュレーション制御部508とを含む。メモリ505には、実行コード群506と暗号化データ幅群507とが格納される。エミュレーション制御部508には、生成部503と復号部504とが格納される。エミュレーション制御部508では、ターゲットシステム201のMCU301のプロセッサコア101を模倣する動作の制御も行う。
【0046】
送信部501は、MCUコア401がアクセスする記憶部のいずれかのアドレスの読出要求をMCUコア401に送信する。送信部501は、MCUコア401に送信するデータを記憶するバッファを有する。
【0047】
また、送信部501は、生成された実行コード群506と生成された暗号化を行う際の暗号化データ幅群507の各暗号化データ幅とをデバッグI/F制御部102に送信した後、デバッグI/F制御部102に読出要求を送信してもよい。生成された実行コード群506とは、ソースコードから、ホストPC203により生成された実行コード群である。また、生成された暗号化を行う際の暗号化データ幅群507は、ICE103またはホストPC203によって、たとえば、乱数により生成される。
【0048】
受信部502は、送信部501が読出要求を送信した結果、暗号化データをデバッグI/F制御部102から受信する。受信部502は、MCUコア401からのデータを記憶するバッファを有する。
【0049】
生成部503は、送信部501が読出要求を送信した場合、実行中の実行コードに基づいて、復号に用いる共通鍵を生成する。
【0050】
復号部504は、送信部501が読出要求を送信した結果、MCU301が実行中の実行コードに基づいた共通鍵を用いて暗号化された暗号化データをMCU301から受信した場合、生成部503が生成した共通鍵を用いて暗号化データを復号する。具体的に、復号部504は、暗号化データと、共通鍵との演算を行い、平文を取得する。演算方法はデバッグI/F制御部102の暗号化部423と同じ手法であれば、どのような演算方法でもよい。
【0051】
また、復号部504は、送信部501が読出要求を送信した結果、受信部502が暗号化データをMCU301から受信した場合、暗号化を行う際の暗号化データ幅群507の各暗号化データ幅で暗号化データを分割した分割データに対して復号してもよい。
【0052】
また、復号部504は、送信部501が読出要求を送信した結果、暗号化データをMCU301から受信した場合、生成された暗号化を行う際の暗号化データ幅群507の各暗号化データ幅で暗号化データを分割した分割データに対して復号してもよい。
【0053】
図6は、ホストPCのハードウェア構成例を示すブロック図である。
図6において、ホストPC203は、CPU601と、ROM602と、RAM(Random Access Memory)603と、を含む。また、ホストPC203は、ディスクドライブ604と、ディスク605と、通信インターフェース606と、を含む。また、ホストPC203は、ディスプレイ607と、キーボード608と、マウス609とを含む。また、CPU601〜マウス609はバス610によってそれぞれ接続される。
【0054】
CPU601は、ホストPC203の全体の制御を司る演算処理装置である。ROM602は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。RAM603は、CPU601のワークエリアとして使用される揮発性メモリである。
【0055】
ディスクドライブ604は、CPU601の制御に従ってディスク605に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ604には、たとえば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク605は、ディスクドライブ604の制御で書き込まれたデータを記憶する不揮発性メモリである。たとえばディスクドライブ604が磁気ディスクドライブである場合、ディスク605には、磁気ディスクを採用することができる。また、ディスクドライブ604が光ディスクドライブである場合、ディスク605には、光ディスクを採用することができる。また、ディスクドライブ604がソリッドステートドライブである場合、ディスク605には、半導体素子メモリを採用することができる。
【0056】
通信インターフェース606は、ネットワーク211と内部のインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース606は、通信回線を通じてネットワーク211となるLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどに接続され、ネットワーク211を介して他の装置に接続される。通信インターフェース606には、たとえば、モデムやLANアダプタなどを採用することができる。
【0057】
ディスプレイ607は、マウスカーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ607には、たとえば、CRT(Cathode Ray Tube)、TFT(Thin Film Transistor)液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0058】
キーボード608は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード608は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス609は、マウスカーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス609は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
【0059】
図7は、ソースコードと実行コードとの一例を示す説明図である。ホストPC203は、ソースコード701から、実行コード群702を生成する。実行コード群702は、“00 FF 00 B8…”というバイト列である。そして、ホストPC203は、実行コード群702に暗号化データ幅群703を付与する。
【0060】
図7の例では、0x20000000から0x200006FFまでのデータが実行コード群702であり、0x20000700から0x2000071Fまでのデータが暗号化データ幅群703である。
【0061】
ホストPC203は、ICE103経由で、実行コード群702と暗号化データ幅群703とをデバッグI/F制御部102に送信する。ICE103は、実行コード群702と暗号化データ幅群703とをメモリ505に格納する。また、デバッグI/F制御部102は、実行コード群702を実行コードメモリ402に格納するとともに、暗号化データ幅群703を暗号化データ幅制御部412の記憶領域に格納する。
【0062】
図8は、トレースメモリの記憶内容の一例を示す説明図である。トレースメモリ403は、トレースメモリアドレスと、実行コードメモリアドレスと、バス上のデータと、アドレスステータスと、データステータスと、タイムスタンプと、という6つのフィールドを含む。
【0063】
トレースメモリアドレスフィールドには、トレースメモリ403上の記録アドレスが格納される。記録する順序は、アプリによって降順、昇順いずれでもよい。実行コードメモリアドレスフィールドには、ターゲットシステムのバス上のアドレスが格納される。バス上のアドレスは、具体的には、実行コードメモリのアドレスか、I/Oアクセスのアドレスか、周辺機器制御メモリのアドレスかである。バス上のデータフィールドには、ターゲットシステムのバス上のデータが格納される。バス上のデータは、具体的には、実行コードメモリのデータか、I/Oアクセスによるデータか、周辺機器制御メモリのデータかである。
【0064】
アドレスステータスフィールドには、ターゲットシステムのバス上で扱うアドレスのステータスが格納される。アドレスのステータスは、具体的には、たとえば、下記第1〜第5のアドレスのステータスがある。第1のアドレスのステータスは、バス上のアドレスがコードであることを示す“ICF”である。第2のアドレスのステータスは、内部リードであることを示す“IRA”である。第3のアドレスのステータスは、内部ライトであることを示す“IWA”である。第4のアドレスのステータスは、外部リードであることを示す“ERA”である。第5のアドレスのステータスは、外部ライトであることを示す“EWA”である。
【0065】
データステータスフィールドには、ターゲットシステムのバス上で扱うデータのステータスが格納される。データのステータスは、具体的には、たとえば、下記第1、第2のデータのステータスがある。第1のデータのステータスは、ターゲットシステムのバス上のデータが有効であることを示す“EXECUTE”である。第2のデータのステータスは、ターゲットシステムのバス上のデータが無効であることを示す“−−−−−−−”である。
【0066】
タイムスタンプフィールドには、各コマンド実行時のサイクル数から、クロック周波数を元に実行時間を算出した結果が格納される。次に、
図9、
図10を用いて、デバッグI/F制御部102によるデバッグコマンド受信処理の動作と、ICE103による暗号化データの復号時の動作について説明する。ここで、デバッグコマンドは、ICE103から発行されるコマンドである。デバッグコマンドには、ターゲットシステム201のあるアドレスの読出要求と、ターゲットシステム201のあるアドレスへの書込要求と、の2種類がある。
【0067】
図9は、デバッグコマンド受信処理の一連の動作を示す説明図である。
図9の(1)で示す処理において、デバッグI/F制御部102は、ICE103から、MCUコア401がアクセスする記憶部として、0x20000000の読出要求を受信する。このとき、0x20000000から何バイト読み出すかについては、たとえば、デフォルトの値がデバッグシステム100の利用者により指定される。また、ICE103から、何バイト読み出すかという情報が付与されてもよい。
【0068】
読出要求を受信した後、
図9の(2)で示す処理において、デバッグI/F制御部102は、実行中の実行コードに基づいて、共通鍵901を生成する。実行中の実行コードは、実行コードメモリ402のうちの、プログラムカウンタが示すアドレスの実行コードである。
図9の例では、プログラムカウンタが0x2000002Cであるので、実行中の実行コードは、
図7より、0x2200となる。デバッグI/F制御部102は、0x2200を用いて、共通鍵901を生成する。
【0069】
続けて、
図9の(3)で示す処理において、デバッグI/F制御部102は、暗号化データ幅制御部412から、先頭の暗号化データ幅を取得する。そして、
図9の(4)で示す処理において、デバッグI/F制御部102は、読出アドレスを0x20000000として、実行コードメモリ402の読出アドレスから、取得した暗号化データ幅である0x7F+1バイト分読み出す。続けて、
図9の(5)で示す処理において、デバッグI/F制御部102は、共通鍵901を用いて、読み出したデータを暗号化する。次に、
図9の(6)で示す処理において、デバッグI/F制御部102は、暗号化した暗号化データを、ICE103に送信する。
【0070】
同様に、デバッグI/F制御部102は、
図9の(3)〜(6)で示す処理を繰り返し、読出要求のあったデータを暗号化してICE103に送信する。
【0071】
図10は、暗号化データの復号時の一連の動作を示す説明図である。
図10で説明するICE103のメモリ505に記憶される実行コード群506の内容は、実行コードメモリ402に記憶される実行コード群の内容と同一であるとする。また、ICE103のメモリ505に記憶される暗号化データ幅群507の内容は、暗号化データ幅制御部412の記憶領域に格納された内容と同一であるとする。
【0072】
図10の(1)で示す処理において、ICE103は、読出要求を送信後、実行コード群506のうちの実行中の実行コードに基づいて、共通鍵1001を生成する。実行中の実行コードは、実行コードのうちの、プログラムカウンタが示すアドレスの実行コードである。
図10の例では、プログラムカウンタが0x2000002Cであるので、実行中の実行コードは、
図7より、0x2200となる。また、ICE103のプログラムカウンタと、MCUコア401のプログラムカウンタとは同じ値となる。
【0073】
デバッグI/F制御部102から暗号化データ1002を受信した場合、
図10の(2)で示す処理において、ICE103は、暗号化データ1002の先頭から、暗号化データ幅群507の先頭の暗号化データ幅である0x7F+1バイト分のデータを取得する。そして、
図10の(3)で示す処理において、ICE103は、復号部504によって、共通鍵1001を用いて、取得したデータを復号する。同様に、ICE103は、暗号化データ1002の先頭の0x80バイト目から、暗号化データ幅群507の次の暗号化データ幅である0x0+1バイト分のデータを、共通鍵1001を用いて復号する。復号したデータは、ホストPC203に送信される。
【0074】
図11は、デバッグコマンド受信処理手順の一例を示すフローチャートである。デバッグコマンド受信処理は、ICE103からデバッグコマンドを受信した際に行う処理である。
【0075】
デバッグI/F制御部102は、デバッグコマンドを受信する(ステップS1101)。次に、デバッグI/F制御部102は、デバッグコマンドの種別が次に示す情報のいずれに一致するかを判断する(ステップS1102)。次に示す情報は、読出要求と、書込要求と、である。デバッグコマンドの種別が読出要求である場合(ステップS1102:読出要求)、デバッグI/F制御部102は、続けて、デバッグコマンドに含まれるアドレスから、読出先が次に示すメモリのいずれに一致するかを判断する(ステップS1103)。次に示すメモリは、実行コードメモリ402と、トレースメモリ403と、である。なお、図示していないが、読出先が周辺機器制御メモリ404である場合、デバッグI/F制御部102は、周辺機器制御メモリ404から読み出したデータを暗号化してもよいし、暗号化しなくてもよい。
【0076】
読出先が実行コードメモリ402である場合(ステップS1103:実行コードメモリ)、デバッグI/F制御部102は、実行コードメモリ読出処理を実行する(ステップS1104)。実行コードメモリ読出処理は、
図12で後述する。一方、読出先がトレースメモリ403である場合(ステップS1103:トレースメモリ)、デバッグI/F制御部102は、トレースメモリ読出処理を実行する(ステップS1105)。トレースメモリ読出処理は、
図13で後述する。
【0077】
ステップS1104、またはステップS1105の処理終了後、デバッグI/F制御部102は、デバッグI/F305を介して、暗号化データをICE103に送信する(ステップS1106)。
【0078】
デバッグコマンドの種別が書込要求である場合(ステップS1102:書込要求)、デバッグI/F制御部102は、通常の書込処理を実行する(ステップS1107)。ここで、通常の書込処理とは、デバッグコマンドに含まれる書込データを、書込先のアドレスに書き込む処理となる。
【0079】
ステップS1106、またはステップS1107の処理終了後、デバッグI/F制御部102は、デバッグコマンド受信処理を終了する。デバッグコマンド受信処理を実行することにより、デバッグI/F制御部102は、ICE103から読出要求を受信した際に、第三者による情報取得が難しくなるように暗号化してメモリの内容をICE103に送信することができる。
【0080】
図12は、実行コードメモリ読出処理手順の一例を示すフローチャートである。実行コードメモリ読出処理は、読出先が実行コードメモリ402であるときの処理である。デバッグI/F制御部102は、デバッグコマンドの読出要求アドレスを、暗号化対象となる実行コードの読出アドレスに設定する(ステップS1201)。次に、デバッグI/F制御部102は、実行コードメモリ402から、現在のプログラムカウンタのアドレスが示す実行コードに基づいて、共通鍵を生成する(ステップS1202)。続けて、デバッグI/F制御部102は、暗号化データ幅制御部412から、先頭の暗号化データ幅を取得する(ステップS1203)。
【0081】
次に、デバッグI/F制御部102は、実行コードメモリ402から、読出アドレスから取得した暗号化データ幅分の実行コードを読み出す(ステップS1204)。続けて、デバッグI/F制御部102は、読み出した実行コードを共通鍵で暗号化する(ステップS1205)。次に、デバッグI/F制御部102は、要求があった全ての実行コードを読み出したか否かを判断する(ステップS1206)。要求があった実行コードのうち、まだ読み出していない実行コードがある場合(ステップS1206:No)、デバッグI/F制御部102は、現在の読出アドレスに暗号化データ幅を加算した値を、読出アドレスに設定する(ステップS1207)。続けて、デバッグI/F制御部102は、暗号化データ幅制御部412から、次の暗号化データ幅を取得する(ステップS1208)。ステップS1208の処理終了後、デバッグI/F制御部102は、ステップS1204の処理に移行する。
【0082】
要求があった全ての実行コードを読み出した場合(ステップS1206:Yes)、デバッグI/F制御部102は、実行コードメモリ読出処理を終了する。実行コードメモリ読出処理を実行することにより、デバッグシステム100は、実行コードメモリ402に記憶された実行コード群に対して暗号化を行うことができる。
【0083】
図13は、トレースメモリ読出処理手順の一例を示すフローチャートである。トレースメモリ読出処理は、読出先がトレースメモリ403であるときの処理である。デバッグI/F制御部102は、トレースメモリ403の先頭アドレスを、暗号化対象の読出アドレスに設定する(ステップS1301)。次に、デバッグI/F制御部102は、実行コードメモリ402から、現在のプログラムカウンタが示すアドレスに対応する実行コードに基づいて、共通鍵を生成する(ステップS1302)。続けて、デバッグI/F制御部102は、暗号化データ幅制御部412から、先頭の暗号化データ幅を取得する(ステップS1303)。
【0084】
次に、デバッグI/F制御部102は、トレースメモリ403から、読出アドレスから取得した暗号化データ幅分のデータを読み出す(ステップS1304)。続けて、デバッグI/F制御部102は、読み出したデータを共通鍵で暗号化する(ステップS1305)。次に、デバッグI/F制御部102は、要求があった全てのトレースメモリを読み出したか否かを判断する(ステップS1306)。要求があったトレースメモリ403のうち、まだ読み出していないデータがある場合(ステップS1306:No)、デバッグI/F制御部102は、現在の読出アドレスに暗号化データ幅を加算した値を、読出アドレスに設定する(ステップS1307)。続けて、デバッグI/F制御部102は、暗号化データ幅制御部412から、次の暗号化データ幅を取得する(ステップS1308)。ステップS1308の処理終了後、デバッグI/F制御部102は、ステップS1304の処理に移行する。
【0085】
要求があった全てのトレースメモリを読み出した場合(ステップS1306:Yes)、デバッグI/F制御部102は、トレースメモリ読出処理を終了する。トレースメモリ読出処理を実行することにより、デバッグシステム100は、トレースメモリ403に記憶されたデータについて暗号化することができる。
【0086】
図14は、デバッグコマンド送信処理手順の一例を示すフローチャートである。デバッグコマンド送信処理は、デバッグI/F制御部102にデバッグコマンドを送信する処理と、デバッグコマンドを送信したことによって発生する復号の処理とである。
【0087】
ICE103は、デバッグI/F制御部102にデバッグコマンドを送信する(ステップS1401)。次に、ICE103は、デバッグI/F制御部102から暗号化データを受信したか否かを判断する(ステップS1402)。デバッグI/F制御部102から暗号化データを受信していない場合(ステップS1402:No)、ICE103は、デバッグI/F制御部102からの応答を待ち、一定時間後、ステップS1402の処理を実行する。デバッグI/F制御部102から暗号化データを受信した場合(ステップS1402:Yes)、ICE103は、実行コード群のうちの、ICEのプログラムカウンタが示すアドレスに対応する実行コードに基づいて、共通鍵を生成する(ステップS1403)。続けて、ICE103は、暗号化データの先頭アドレスを、読出アドレスに設定する(ステップS1404)。次に、ICE103は、暗号化データ幅群507のうちの先頭の暗号化データ幅を取得する(ステップS1405)。
【0088】
続けて、ICE103は、暗号化データの読出アドレスから、暗号化データ幅分の分割暗号化データを読み出す(ステップS1406)。次に、ICE103は、共通鍵を用いて分割暗号化データを復号する(ステップS1407)。続けて、ICE103は、暗号化データの全てを復号したか否かを判断する(ステップS1408)。暗号化データうち復号していないデータがある場合(ステップS1408:No)、ICE103は、現在の読出アドレスに暗号化データ幅を加算した値を、読出アドレスに設定する(ステップS1409)。続けて、ICE103は、暗号化データ幅群507から、次の暗号化データ幅を取得する(ステップS1410)。ステップS1410の処理終了後、ICE103は、ステップS1406の処理に移行する。
【0089】
暗号化データの全てを復号した場合(ステップS1408:Yes)、ICE103は、復号したデータを出力する(ステップS1411)。出力先は、ホストPC203となる。ステップS1411の処理終了後、ICE103は、デバッグコマンド送信処理を終了する。デバッグコマンド送信処理を実行することにより、デバッグシステム100は、暗号化データを復号することができる。また、デバッグコマンド送信処理において、実行コード群506の内容と、実行コードメモリ402に記憶される実行コード群の内容とが異なる場合、暗号化に用いられる共通鍵の内容と、復号に用いられる共通鍵の内容が異なるものとなる。したがって、この場合、ステップS1411の処理によって得られる復号したデータは、元のデータとは異なるので、デバッグシステム100は、第三者による情報取得を困難にすることができる。
【0090】
以上説明したように、デバッグシステム100によれば、ターゲットシステム201のデータの読出要求があった際に、実行コード群のうち実行中の実行コードを生成元とする共通鍵を用いてデータを暗号化してICE103に送信する。これにより、デバッグシステム100は、実行中の実行コードに応じて生成される共通鍵が変わるため、第三者による情報取得を難化できる。また、デバッグシステム100は、開発者でなければ持ち得ない実行コード群を利用するため、第三者による情報取得を困難にすることができる。第三者による情報取得を困難になることにより、第三者によるリバースエンジニアリングが行い難くなる。また、デバッグシステムは100は、実行コード群を用いて共通鍵を生成するため、共通鍵を生成するための特別なデータを用意しなくてよい。
【0091】
また、デバッグシステム100によれば、読み込んだデータを暗号化データ幅で分割した分割データに対して暗号化を行ってもよい。暗号化データ幅が分からないと正しく復号することができないため、第三者による情報取得を、暗号化データ幅を用いない場合より困難にすることができる。
【0092】
また、デバッグシステム100によれば、コンパイル時にICE103またはホストPC203により生成された暗号化データ幅をデバッグI/F制御部102に送信し、デバッグI/F制御部102は、生成された暗号化データ幅を用いて暗号化してもよい。これにより、実行コード群がバージョンアップした際などに、暗号化データ幅を変更することができ、同一の暗号化データ幅を用いる期間を短くすることができるため、第三者による情報取得をより困難にすることができる。
【0093】
また、デバッグシステム100は、ICE103からデバッグI/F制御部102へのデバッグコマンドが書込要求であれば、暗号化を行わないため、ターゲットシステム201の暗号化にかかる負荷を抑制することができる。また、ターゲットシステム201が古いバージョンに対応する実行コード群を記憶しており、ICE103が新しいバージョンに対応する実行コード群が記憶しているとする。このとき、ホストPC203は、古いバージョンに対応する実行コード群をICE103に送信することにより、本実施の形態における暗号化、復号を行えるようになる。また、デバッグシステム100では、プロセッサコア101とICE103とで同期しているプログラムカウンタを用いて共通鍵を生成するため、共通鍵方式で問題となる鍵交換を行わなくてよい。
【0094】
なお、本実施の形態で説明したデバッグ方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本デバッグプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本デバッグプログラムは、インターネット等のネットワークを介して配布してもよい。
【0095】
また、本実施の形態で説明したデバッグI/F制御部102、ICE103は、スタンダードセルやストラクチャードASICやFPGAなどのPLDによっても実現することができる。具体的には、たとえば、上述したデバッグI/F制御部102の受信部421〜送信部424をHDL記述によって機能定義し、HDL記述を論理合成してASICやPLDに与えることにより、デバッグI/F制御部102を製造することができる。同様に、ICE103の送信部501〜復号部504をHDL記述によって機能定義し、HDL記述を論理合成してASICやPLDに与えることにより、ICE103を製造することができる。
【0096】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0097】
(付記1)実行コード群を実行するプロセッサコアと、
前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成する生成部と、
前記生成部が生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化する暗号化部と、
前記暗号化部が暗号化した暗号化データを前記エミュレータに送信する送信部と、
を有することを特徴とするシステム。
【0098】
(付記2)前記暗号化部は、
復号を行う際の所定のデータ幅で前記データを分割した分割データに対して前記共通鍵を用いて暗号化し、
前記送信部は、
前記暗号化部が前記分割データに対して暗号化した暗号化データを前記エミュレータに送信することを特徴とする付記1に記載のシステム。
【0099】
(付記3)前記エミュレータから、実行コード群と復号を行う際の所定のデータ幅とを受信する受信部をさらに有し、
前記生成部は、
前記エミュレータから、前記記憶部のいずれかのアドレスの読出要求を受信した場合、前記受信部が受信した前記実行コード群のうちの実行中の実行コードに基づいて、暗号化に用いる共通鍵を生成し、
前記暗号化部は、
前記受信部が受信した復号を行う際の所定のデータ幅で前記データを分割した分割データに対して前記共通鍵を用いて暗号化することを特徴とする付記2に記載のシステム。
【0100】
(付記4)実行コード群のいずれかの実行コードを実行中のプロセッサコアの動作を模倣するエミュレータにおいて、
前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を前記プロセッサコアに送信する送信部と、
前記送信部が前記読出要求を送信した場合、前記実行コードに基づいて、復号に用いる共通鍵を生成する生成部と、
前記送信部が前記読出要求を送信した結果、前記プロセッサコアが実行中の実行コードに基づいた共通鍵を用いて暗号化された暗号化データを前記プロセッサコアから受信した場合、前記生成部が生成した前記共通鍵を用いて前記暗号化データを復号する復号部と、
を有することを特徴とするエミュレータ。
【0101】
(付記5)前記復号部は、
前記送信部が前記読出要求を送信した結果、前記暗号化データを前記プロセッサコアから受信した場合、暗号化を行う際の所定のデータ幅で前記暗号化データを分割した分割データに対して復号することを特徴とする付記4に記載のエミュレータ。
【0102】
(付記6)前記送信部は、
生成された実行コード群と生成された暗号化を行う際の所定のデータ幅とを前記プロセッサコアに送信した後、前記生成された実行コード群のいずれかの実行コードを実行中の前記プロセッサコアに前記読出要求を送信し、
前記復号部は、
前記送信部が前記読出要求を送信した結果、前記暗号化データを前記プロセッサコアから受信した場合、前記生成された暗号化を行う際の所定のデータ幅で前記暗号化データを分割した分割データに対して復号することを特徴とする付記5に記載のエミュレータ。
【0103】
(付記7)実行コード群を実行するプロセッサコアと、
前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータと、
前記エミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成する生成部と、
前記生成部が生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化する暗号化部と、
前記暗号化部が暗号化した暗号化データを前記エミュレータに送信する送信部と、
を有することを特徴とするデバッグシステム。
【0104】
(付記8)実行コード群を実行するプロセッサコアを有するシステムと、前記実行コード群のいずれかの実行コードを実行中の前記プロセッサコアの動作を模倣するエミュレータと、を有するデバッグシステムにおける方法において、
前記システムが、
前記エミュレータから、前記プロセッサコアがアクセスする記憶部のいずれかのアドレスの読出要求を受信した場合、前記実行コードに基づいて、暗号化に用いる共通鍵を生成し、
生成した前記共通鍵を用いて、前記読出要求に応じて前記プロセッサコアが前記記憶部から読み出したデータを暗号化し、
暗号化した暗号化データを前記エミュレータに送信する、
処理を実行することを特徴とするデバッグシステムにおける方法。