(57)【特許請求の範囲】
【請求項１】
デバッグ処理部によるデバッグ処理の実行を制御するデータ処理装置であって、
前記デバッグ処理部を識別する識別子を取得する第１取得手段と、
不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得手段と、
前記デバッグ対象プログラムから取得された前記検証値と前記第１取得手段により取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定手段と、
許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御手段とを備え、
前記デバッグ対象プログラムの前記所定部分には、前記デバッグ対象プログラムを構成する各部分についてアクセスが許可または不許可であることを示すアクセス制御リストが含まれ、
前記第２取得手段は、前記デバッグ対象プログラムの前記所定部分に含まれる前記アクセス制御リストを取得するアクセス制御リスト取得部を含み、
前記データ処理装置は、さらに、前記取得した前記アクセス制御リストに基づいて、前記デバッグ対象プログラムの一部分のアクセスが許可されているかを判定するアクセス判定手段を備え、
前記制御手段は、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていないと判定された第１の場合、前記一部分のデバッグ処理の実行を禁止し、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていると判定された第２の場合、前記一部分のデバッグ処理を前記デバッグ処理部に実行させ、
前記判定手段は、比較値を不正アクセスから保護された状態で記憶する比較値保持部を含み、
前記検証値と前記識別子とを演算子として用いた所定の演算を行い、その演算結果が、前記記憶している前記比較値と一致した場合に、前記デバッグ処理が許可されていると判定する
ことを特徴とするデータ処理装置。
【請求項２】
前記アクセス制御リストに示される前記部分のそれぞれは、前記デバッグ対象プログラムをメモリにロードする場合におけるロード先メモリアドレスの前記部分それぞれに対応するアドレス範囲を示し、
前記アクセス制御リストには、前記部分それぞれに対応する前記アドレス範囲のそれぞれについて、アクセスの可否が対応づけられており、
前記アクセス判定手段は、前記デバッグ対象プログラムをメモリにロードする場合におけるロード先メモリアドレスの前記一部分に対応するアドレス範囲について、前記アクセス制御リストにおいて対応づけられているアクセスの可否を参照することにより前記判定を行う
ことを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記アクセス制御リストに示される前記部分のそれぞれは、前記デバッグ対象プログラムに含まれるシンボルを示し、
前記アクセス制御リストには、前記シンボルのそれぞれについて、アクセスの可否が対応づけられており、
前記アクセス判定手段は、前記デバッグ対象プログラムの前記一部分に含まれるシンボルについて、前記アクセス制御リストにおいて対応づけられているアクセスの可否を参照することにより前記判定を行う
ことを特徴とする請求項１記載のデータ処理装置。
【請求項４】
前記データ処理装置は、さらに、
表示部を備え、
前記制御手段は、前記第１の場合、前記一部分のデバッグ処理が禁止された旨を示す表示を前記表示部に行わせ、前記第２の場合、前記デバッグ処理の結果を前記表示部に表示させる表示制御部を含む
ことを特徴とする請求項１記載のデータ処理装置。
【請求項５】
デバッグ処理部によるデバッグ処理の実行を制御するデータ処理装置であって、
前記デバッグ処理部を識別する識別子を取得する第１取得手段と、
不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得手段と、
前記デバッグ対象プログラムから取得された前記検証値と前記第１取得手段により取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定手段と、
許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御手段とを備え、
前記デバッグ対象プログラムの前記所定部分には、前記デバッグ対象プログラムを構成する各部分についてアクセスが許可または不許可であることを示すアクセス制御リストが含まれ、
前記第２取得手段は、前記デバッグ対象プログラムの前記所定部分に含まれる前記アクセス制御リストを取得するアクセス制御リスト取得部を含み、
前記データ処理装置は、さらに、前記取得した前記アクセス制御リストに基づいて、前記デバッグ対象プログラムの一部分のアクセスが許可されているかを判定するアクセス判定手段を備え、
前記制御手段は、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていないと判定された第１の場合、前記一部分のデバッグ処理の実行を禁止し、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていると判定された第２の場合、前記一部分のデバッグ処理を前記デバッグ処理部に実行させ、
前記デバッグ対象プログラムの前記所定部分には、前記検証値が複数含まれ、
前記アクセス制御リストは、前記所定部分に１以上含まれ、前記アクセス制御リストのそれぞれは、前記検証値の少なくとも１つと対応づけられており、
前記判定手段は、前記検証値のそれぞれについて前記取得した識別子と比較して前記判定を行い、
前記アクセス判定手段は、前記判定手段により許可されていると判定された前記検証値に対応づけられている前記アクセス制御リストに基づいて前記判定を行う
ことを特徴とするデータ処理装置。
【請求項６】
デバッグ処理部によるデバッグ処理の実行を制御するデータ処理装置であって、
前記デバッグ処理部を識別する識別子を取得する第１取得手段と、
不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得手段と、
前記デバッグ対象プログラムから取得された前記検証値と前記第１取得手段により取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定手段と、
許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御手段とを備え、
前記判定手段は、比較値を不正アクセスから保護された状態で記憶する比較値保持部を含み、
前記検証値と前記識別子とを演算子として用いた所定の演算を行い、その演算結果が、前記記憶している前記比較値と一致した場合に、前記デバッグ処理が許可されていると判定する
ことを特徴とするデータ処理装置。
【請求項７】
デバッグ処理部によるデバッグ処理の実行を制御するデータ処理装置であって、
前記デバッグ処理部を識別する識別子を取得する第１取得手段と、
不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得手段と、
前記デバッグ対象プログラムから取得された前記検証値と前記第１取得手段により取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定手段と、
許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御手段とを備え、
前記判定手段は、比較値を不正アクセスから保護された状態で記憶する比較値保持部を含み、
前記検証値と前記識別子とを演算子として用いた所定の演算を行い、その演算結果が、前記記憶している前記比較値と一致した場合に、前記デバッグ処理が許可されていると判定し、
前記データ処理装置は、外部からの不正アクセスを防止する機構を備えたセキュアドメインを有し、
前記データ処理装置は、動作モードとして、通常モードとセキュアモードとを備え、前記通常モードと前記セキュアモードとを切り替えて動作し、前記セキュアモード時においてのみ前記セキュアドメインを用いて動作し、
前記データ処理装置は、さらに、前記通常モードと前記セキュアモードとを切り替える切替部を備え、
前記通常モードで動作するプログラムは、前記切替部を経由して所定の処理の要求を前記セキュアモードで動作するプログラムに通知することで前記セキュアモードで動作するプログラムにアクセス可能であり、
前記デバッグ対象プログラムは、前記セキュアドメインにおいて記憶され、
前記第２取得手段は、前記セキュアドメインにおいて前記デバッグ対象プログラムから前記検証値の前記取得を行い、
前記判定手段は、前記セキュアドメインにおいて前記判定を行う
ことを特徴とするデータ処理装置。
【請求項８】
デバッグ処理部によるデバッグ処理の実行を制御するデータ処理装置であって、
前記デバッグ処理部を識別する識別子を取得する第１取得手段と、
不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得手段と、
前記デバッグ対象プログラムから取得された前記検証値と前記第１取得手段により取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定手段と、
許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御手段とを備え、
前記データ処理装置は、外部からの不正アクセスを防止する機構を備えたセキュアドメインを有し、
前記データ処理装置は、動作モードとして、通常モードとセキュアモードとを備え、前記通常モードと前記セキュアモードとを切り替えて動作し、前記セキュアモード時においてのみ前記セキュアドメインを用いて動作し、
前記データ処理装置は、さらに、前記通常モードと前記セキュアモードとを切り替える切替部を備え、
前記通常モードで動作するプログラムは、前記切替部を経由して所定の処理の要求を前記セキュアモードで動作するプログラムに通知することで前記セキュアモードで動作するプログラムにアクセス可能であり、
前記デバッグ対象プログラムは、前記セキュアドメインにおいて記憶され、
前記第２取得手段は、前記セキュアドメインにおいて前記デバッグ対象プログラムから前記検証値の前記取得を行い、
前記判定手段は、前記セキュアドメインにおいて前記判定を行い、
前記デバッグ処理部は、前記セキュアドメインの外部にあって前記通常モードにおいて動作し、
前記データ処理装置は、さらに、前記セキュアモードにおいてデバッグ処理を実行するセキュアデバッガを備え、前記セキュアデバッガは、前記セキュアドメインに含まれ、
前記デバッグ処理部は、前記デバッグ対象プログラムのデバッグ処理要求を出力し、
前記制御手段は、前記デバッグ処理部が前記デバッグ処理要求を出力すると、前記判定手段に前記判定を行わせ、許可されていないと判定されたとき、前記デバッグ処理要求にかかる前記デバッグ対象プログラムに対する前記セキュアデバッガによるデバッグ処理を禁止する
ことを特徴とするデータ処理装置。
【請求項９】
前記デバッグ対象プログラムの前記所定部分には、前記デバッグ対象プログラムを構成する各部分についてアクセスが許可または不許可であることを示すアクセス制御リストが含まれ、
前記第２取得手段は、前記デバッグ対象プログラムの前記所定部分に含まれる前記アクセス制御リストを取得するアクセス制御リスト取得部を含み、
前記データ処理装置は、さらに、前記取得した前記アクセス制御リストに基づいて、前記デバッグ対象プログラムの前記一部分のアクセスが許可されているかを判定するアクセス判定手段を備え、
前記アクセス判定手段は、前記セキュアドメインにおいて前記判定を行い、
前記制御手段は、
前記デバッグ処理部が出力した前記デバッグ処理要求にかかる前記デバッグ対象プログラムについて、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていないと判定された場合、前記セキュアデバッガによる前記一部分の前記デバッグ処理の実行を禁止し、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていると判定された場合、前記一部分のデバッグ処理を前記セキュアデバッガに実行させる
ことを特徴とする請求項８記載のデータ処理装置。
【請求項１０】
前記デバッグ処理部は、前記通常プログラム、および、前記通常プログラムと連係する前記デバッグ対象プログラムに対してデバッグ処理を行う機能を有し、
前記デバッグ処理部による前記デバッグ対象プログラムのデバッグ処理は、前記デバッグ処理部がデバッグ処理要求を出力し、出力された前記デバッグ処理要求に対して前記セキュアデバッガにより行われたデバッグ処理の結果を前記切替部を介して前記デバッグ処理部が受け付けることにより行われる
ことを特徴とする請求項８記載のデータ処理装置。
【請求項１１】
前記デバッグ処理部は、自デバッグ処理部がアタッチされた通常プログラムを識別するプロセス識別子を出力し、
前記セキュアデバッガは、前記デバッグ処理部から出力された前記プロセス識別子に示される通常プログラムと連係動作するデバッグ対象プログラムのエントリポイントにある命令をブレーク命令へと変更する
ことを特徴とする請求項１０記載のデータ処理装置。
【請求項１２】
前記データ処理装置は、前記セキュアモードにおいて前記デバッグ対象プログラムの実行中にデバッグ例外が検出されると、前記切替部を介して前記デバッグ処理部にデバッグ例外の発生を通知し、
前記デバッグ処理部は、前記切替部から前記デバッグ例外の発生の通知を受け付けると、デバッグ処理の実行結果を示すデバッグ情報の取得要求を出力し、
前記セキュアデバッガは、前記デバッグ対象プログラムについて前記判定手段が肯定的な判定をしているときに前記デバッグ情報の取得要求を受け付けると、前記デバッグ対象プログラムのデバッグ処理を実行してデバッグ情報を取得し、取得したデバッグ情報を、前記切替部を介して前記デバッグ処理部に出力する
ことを特徴とする請求項１０記載のデータ処理装置。
【請求項１３】
前記データ処理装置は、さらに、
前記通常プログラムのデバッグ処理の結果を第１の表示領域に表示する第１の結果表示部と、
前記通常プログラムとの連係にかかるデバッグ対象プログラムのデバッグ処理の結果を、前記第１の表示領域とは異なる第２の表示領域に表示する第２の結果表示部とを備え、
前記第１および第２の結果表示部は、前記連係にかかるデバッグ対象プログラムと前記通常プログラムとが連係して動作しているとき、前記第１の表示領域および前記第２の表示領域に、前記デバッグ対象プログラムと前記通常プログラムのデバッグ処理の結果を表示する
ことを特徴とする請求項１０記載のデータ処理装置。
【請求項１４】
前記通常モードにおいては、通常OSが動作し、
前記セキュアモードにおいては、保護OSが動作し、
前記通常プログラムは、前記通常OSが生成するプロセスとして前記通常モードにおいて動作し、
前記デバッグ処理部は、前記通常OSで動作するデバッガとして前記通常モードにおいて動作し、
前記デバッグ対象プログラムは、前記保護OSが生成するプロセスとして前記セキュアモードにおいて動作し、
前記セキュアデバッガは、前記保護OSの有する機能として実装されている
ことを特徴とする請求項１０記載のデータ処理装置。
【請求項１５】
前記制御手段は、前記デバッグ処理部が前記デバッグ処理要求を出力すると、前記判定手段に前記判定を行わせ、許可されていないと判定されたとき、前記デバッグ処理の実行の禁止を示すデバッグ処理不可通知を前記デバッグ処理部へ出力する
ことを特徴とする請求項８記載のデータ処理装置。
【請求項１６】
データ処理装置のデバッグ処理部によるデバッグ処理の実行を制御するデータ処理方法であって、
前記デバッグ処理部を識別する識別子を取得する第１取得ステップと、
不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得ステップと、
前記デバッグ対象プログラムから取得された前記検証値と前記第１取得ステップにおいて取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定ステップと、
許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御ステップとを含み、
前記データ処理装置は、比較値を不正アクセスから保護された状態で記憶する比較値保持部を含み、
前記判定ステップにおいて、前記検証値と前記識別子とを演算子として用いた所定の演算を行い、その演算結果が、前記記憶している前記比較値と一致した場合に、前記デバッグ処理が許可されていると判定する
ことを特徴とするデータ処理方法。
【請求項１７】
デバッグ処理部によるデバッグ処理の実行の制御をデータ処理装置に行わせる、コンピュータ読み取り可能な制御プログラムであって、
コンピュータである前記データ処理装置に、
前記デバッグ処理部を識別する識別子を取得する第１取得ステップと、
不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得ステップと、
前記デバッグ対象プログラムから取得された前記検証値と前記第１取得ステップにおいて取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定ステップと、
許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御ステップとを実行させ、
前記データ処理装置は、比較値を不正アクセスから保護された状態で記憶する比較値保持部を含み、
前記判定ステップにおいて、前記検証値と前記識別子とを演算子として用いた所定の演算を行い、その演算結果が、前記記憶している前記比較値と一致した場合に、前記デバッグ処理が許可されていると判定する
ことを特徴とする制御プログラム。
【請求項１８】
デバッグ処理部によるデバッグ処理の実行を制御するデータ処理装置において用いられる集積回路であって、
前記デバッグ処理部を識別する識別子を取得する第１取得部と、
不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得部と、
前記デバッグ対象プログラムから取得された前記検証値と前記第１取得手段により取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定部と、
許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御部とを含み、
前記判定部は、比較値を不正アクセスから保護された状態で記憶する比較値保持部を含み、
前記検証値と前記識別子とを演算子として用いた所定の演算を行い、その演算結果が、前記記憶している前記比較値と一致した場合に、前記デバッグ処理が許可されていると判定する
ことを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの保護に関し、特に、プログラムのデバッグ処理の実行を制御する技術に関する。
【背景技術】
【０００２】
著作権管理のためのプログラムのような、不正な解析などの不正行為がなされるのが望ましくないプログラム（以下、「保護プログラム」という）を保護する技術が広く用いられている。保護が不十分であると、プログラムの権利者に限らず様々な方面で損害が発生しうるからである。
例えば、暗号化されたディジタルコンテンツの復号処理を行って再生するプログラムを不正者が不正に解析して改ざんすることができると、ディジタルコンテンツが不正に利用されるおそれが出てくる。すなわち、不正者がディジタルコンテンツを不正に再生したり、ディジタルコンテンツの複製回数や再生回数を制限していても、その制限を無効化したりする。
【０００３】
不正者による不正な解析等からプログラム等のデータを保護する技術として、下記の非特許文献１には、外部からの不正アクセスを防止する機構を有するセキュアドメインを構築し、セキュアドメインにおいて処理を行うセキュアモードと、セキュアドメインを用いないで処理を行う通常モードとを備え、通常モードとセキュアモードとを切り換えて動作するLSI（LargeScale Integration）技術が開示されている。この技術によると、セキュアモード時においてのみ保護プログラムを動作させることで、保護プログラムを不正な解析等から保護することができる。
【０００４】
ところで、セキュアドメインにおいて動作するプログラムを開発する場合、動作の検証や不具合の修正を行うために前記プログラムのデバッグが必要となる。かといって、誰でも前記プログラムをデバッグできるようにすると、不正者がデバッグして不正な解析等の足がかりとされてしまうので、デバッグ可能な者を前記プログラムの開発者などの関係者のみに限定する必要がある。
【０００５】
そこで、従来は、所定の認証コードを知っている者のみが、セキュアドメインにおいて動作しているプログラムをデバッグ可能とする技術が用いられている（下記の特許文献１参照）。具体的には、特許文献１の技術は、認証コードを用いた認証に成功した者のみが、デバッグ処理を実行できることとしている。
こうすることで、認証コードを知らない者は、認証に失敗するので、セキュアドメインにおいて動作するプログラムを不正者がデバッグすることを防ぐことができる。
【特許文献１】特開２００４−１７１５６５号公報
【非特許文献１】TrustZone - Integrated Hardware and SoftwareSecurity(http://www.arm.com/pdfs/TZ Whitepaper.pdf)
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記特許文献１の技術によると、プログラムの開発関係者が例えば自社内のみの特定のグループに限られている場合は、認証コードの管理が適切になされている限り、プログラムの保護を実現することができる。
一方、近年では、プログラム開発の負担を和らげるために、複数のプログラムがそれぞれ別の権利者により開発され、これらプログラムが連係して動作する場合がある。例えば、OMADRM（Open Mobile Alliance Digital Rights Management）規格で配信された音楽コンテンツを、SDメモリカード（SecureDigital Memory Card）にSD-Audio規格でエクスポートする場合、OMA DRM規格に基づいた処理を行うプログラムとSD-Audio規格に基づいた処理を行うプログラムとがそれぞれ別の権利者によって開発され、これらプログラムが連係して動作する。
【０００７】
これら連係動作する複数のプログラムの開発時に不具合が発生し、連係動作にかかるプログラムの少なくとも一部が保護プログラムである場合、開発者は、保護プログラムと別のプログラムとを同時にデバッグする必要がある。そうすると、これらプログラムの権利者がそれぞれのプログラムで異なる場合、ある権利者の保護プログラムを、他の権利者側の開発者がデバッグすることが必要となる。
【０００８】
しかし、上記特許文献１の技術は、セキュアドメインにおいて動作するプログラムをデバッグして良いか否かを、認証コードを用いて制御している。認証コードを知っている者は、セキュアドメインにおいて動作する全てのプログラムをデバッグできる。
そうすると、前記他の権利者側の開発者は、認証コードを知っていると、連係動作にかかるプログラムに限らず、あらゆる保護プログラムをデバッグすることができる。その結果、デバッグされることを前記ある権利者が望まない保護プログラムをも、前記他の権利者側の開発者は、その保護プログラムを入手することができればデバッグできてしまう。したがって、前記ある権利者は、連係動作するプログラム群を共同開発する場合、デバッグされることを望まない他の保護プログラムが解析等されて機密情報が外部に流出するかもしれないという多大なリスクを抱えることとなる。このようなリスクを伴うために、連係動作するプログラム群を、プログラムを保護しつつそれぞれ異なる権利者が共同で開発するのは困難である。
【０００９】
そこで、本発明は、プログラムを保護しつつ、異なる権利者が共同でプログラムを開発することを容易にするデータ処理装置、データ処理方法、集積回路、デバッグ処理の実行を制御するプログラム、プログラム生成装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明は、デバッグ処理部によるデバッグ処理の実行を制御するデータ処理装置であって、前記デバッグ処理部を識別する識別子を取得する第１取得手段と、不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得手段と、前記デバッグ対象プログラムから取得された前記検証値と前記第１取得手段により取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定手段と、許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御手段とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明のデータ処理装置は、取得した検証値とデバッグ処理部の識別子とを比較して、比較結果に応じてデバッグ処理部によるデバッグ処理の実行の可否を制御する。すなわち、ある検証値をプログラムの権利者が当該プログラムに含ませると、当該プログラムのデバッグ処理が許可されるデバッグ処理部の識別子が定まる。
したがって、当該プログラムの権利者は、当該プログラムのデバッグ処理を行うことが可能なデバッグ処理部の識別子を、自身がそのプログラムに含ませた検証値によって指定することができる。
【００１２】
つまり、当該プログラムの権利者は、当該プログラムのデバッグ処理が可能な識別子を有するデバッグ処理部を、自身が希望するように限定することができるので、当該識別子を有さないデバッグ処理部を保持している利害関係者等に当該プログラムが不要にデバッグされることを回避することができる。
ところで、プログラムの権利者としては、当該プログラムを他の権利者等にデバッグさせることを許容するとしても、そのプログラムのデバッグを制限したいことがある。例えば、当該プログラムに秘匿しておきたい情報が含まれている場合は、その秘匿部分が暴露されると様々な方面で損害が発生しうるため、その秘匿部分については解析されないようにしたいものである。
【００１３】
そこで、前記デバッグ対象プログラムの前記所定部分には、前記デバッグ対象プログラムを構成する各部分についてアクセスが許可または不許可であることを示すアクセス制御リストが含まれ、前記第２取得手段は、前記デバッグ対象プログラムの前記所定部分に含まれる前記アクセス制御リストを取得するアクセス制御リスト取得部を含み、前記データ処理装置は、さらに、前記取得した前記アクセス制御リストに基づいて、前記デバッグ対象プログラムの一部分のアクセスが許可されているかを判定するアクセス判定手段を備え、前記制御手段は、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていないと判定された第１の場合、前記一部分のデバッグ処理の実行を禁止し、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていると判定された第２の場合、前記一部分のデバッグ処理を前記デバッグ処理部に実行させることとしてもよい。
【００１４】
これにより、プログラムの権利者は、当該プログラムにおいて秘匿しておきたい情報が含まれている部分をデバッグされないようにすることができる。
具体的には、前記アクセス制御リストに示される前記部分のそれぞれは、前記デバッグ対象プログラムをメモリにロードする場合におけるロード先メモリアドレスの前記部分それぞれに対応するアドレス範囲を示し、前記アクセス制御リストには、前記部分それぞれに対応する前記アドレス範囲のそれぞれについて、アクセスの可否が対応づけられており、前記アクセス判定手段は、前記デバッグ対象プログラムをメモリにロードする場合におけるロード先メモリアドレスの前記一部分に対応するアドレス範囲について、前記アクセス制御リストにおいて対応づけられているアクセスの可否を参照することにより前記判定を行うこととしてもよい。
【００１５】
これにより、特定のメモリアドレスに配置される秘匿情報に対するデバッグを制限することができる。
この他に、前記アクセス制御リストに示される前記部分のそれぞれは、前記デバッグ対象プログラムに含まれるシンボルを示し、前記アクセス制御リストには、前記シンボルのそれぞれについて、アクセスの可否が対応づけられており、前記アクセス判定手段は、前記デバッグ対象プログラムの前記一部分に含まれるシンボルについて、前記アクセス制御リストにおいて対応づけられているアクセスの可否を参照することにより前記判定を行うこととしてもよい。
【００１６】
これにより、特定のシンボルへのデバッグを制限することができ、シンボルを指定するという簡単な処理で、シンボルが秘匿情報を扱う場合に秘匿情報を保護することができる。
ところで、利害関係者によってプログラムの保護の強度を柔軟に設定したい場合がある。例えば、関連会社の有するデバッグ処理部に対しては、広くデバッグ処理の実行を許可し、部外者のデバッグ処理部に対しては、秘匿情報を含めてデバッグ処理の実行を制限したい場合などである。
【００１７】
そこで、前記デバッグ対象プログラムの前記所定部分には、前記検証値が複数含まれ、前記アクセス制御リストは、前記所定部分に１以上含まれ、前記アクセス制御リストのそれぞれは、前記検証値の少なくとも１つと対応づけられており、前記判定手段は、前記検証値のそれぞれについて前記取得した識別子と比較して前記判定を行い、前記アクセス判定手段は、前記判定手段により許可されていると判定された前記検証値に対応づけられている前記アクセス制御リストに基づいて前記判定を行うこととしてもよい。
【００１８】
これにより、検証値それぞれに対応する識別子を有するデバッグ処理部ごとに、デバッグ対象プログラムのデバッグ可能な部分を指定することができる。すなわち、プログラムの権利者は、デバッグ処理部の識別子に応じて、プログラムの保護する部分を設定することができる。
また、前記データ処理装置は、さらに、表示部を備え、前記制御手段は、前記第１の場合、前記一部分のデバッグ処理が禁止された旨を示す表示を前記表示部に行わせ、前記第２の場合、前記デバッグ処理の結果を前記表示部に表示させる表示制御部を含むとすることが望ましい。
【００１９】
こうすることで、デバッグを行う者は、デバッグが許可されたか否かを知ることができる。
上述のデータ処理装置においては、判定手段による判定の仕方は、前記判定手段は、前記検証値と前記識別子とを比較し、前記検証値と前記識別子とが一致した場合に、前記デバッグ処理が許可されていると判定する、とするとよい。
【００２０】
これにより、プログラムの権利者はデバッグ処理の実行を許可するデバッグ処理部を前記検証値によって指定することができる。また、前記検証値と前記識別子とが一致するか否かという簡単な演算によって判定を行うので、判定に要する時間が短くて済む。
この他に、判定の仕方としては、前記判定手段は、比較値を不正アクセスから保護された状態で記憶する比較値保持部を含み、前記検証値と前記識別子とを演算子として用いた所定の演算を行い、その演算結果が、前記記憶している前記比較値と一致した場合に、前記デバッグ処理が許可されていると判定する、としてもよい。
【００２１】
こうすると、仮に前記検証値が何らかの不正な手段により暴露されたとしても、所定の演算と比較値とを用いて前記判定を行うため、前記検証値からは、デバッグ処理が許可されているデバッグ処理部の識別子を得ることが難しい。すなわち、上述の構成によると、プログラムの保護の強度を上げることができる。
このデータ処理装置は、具体的には、前記データ処理装置は、外部からの不正アクセスを防止する機構を備えたセキュアドメインを有し、前記データ処理装置は、動作モードとして、通常モードとセキュアモードとを備え、前記通常モードと前記セキュアモードとを切り替えて動作し、前記セキュアモード時においてのみ前記セキュアドメインを用いて動作し、前記データ処理装置は、さらに、前記通常モードと前記セキュアモードとを切り替える切替部を備え、前記通常モードで動作するプログラムは、前記切替部を経由して所定の処理の要求を前記セキュアモードで動作するプログラムに通知することで前記セキュアモードで動作するプログラムにアクセス可能であり、前記デバッグ対象プログラムは、前記セキュアドメインにおいて記憶され、前記第２取得手段は、前記セキュアドメインにおいて前記デバッグ対象プログラムから前記検証値の前記取得を行い、前記判定手段は、前記セキュアドメインにおいて前記判定を行う、という構成で実現することもできる。
【００２２】
上述の構成によると、前記デバッグ対象プログラムはセキュアドメインにおいて記憶され、また、前記検証値は、前記第２取得手段により、セキュアドメインにおいて取得される。
したがって、前記検証値は、データ処理装置がこれを取得する過程において、利害関係者や不正者等、何人も知得することが難しい。そのため、不正者等は、プログラムを入手したとしても、プログラムのデバッグ処理が可能な識別子を有するデバッグ処理部を特定することが困難となるので、プログラムが不正にデバッグされる可能性を小さくすることができる。また、プログラムに前記検証値が含まれているので、デバッグの可否を制御するための情報を予めデータ処理装置に記憶させておく必要もない。
【００２３】
この構成において、前記デバッグ処理部は、前記セキュアドメインの外部にあって前記通常モードにおいて動作し、前記データ処理装置は、さらに、前記セキュアモードにおいてデバッグ処理を実行するセキュアデバッガを備え、前記セキュアデバッガは、前記セキュアドメインに含まれ、前記デバッグ処理部は、前記デバッグ対象プログラムのデバッグ処理要求を出力し、前記制御手段は、前記デバッグ処理部が前記デバッグ処理要求を出力すると、前記判定手段に前記判定を行わせ、許可されていないと判定されたとき、前記デバッグ処理要求にかかる前記デバッグ対象プログラムに対する前記セキュアデバッガによるデバッグ処理を禁止することとするとよい。
【００２４】
上述の構成によると、通常モードで動作するデバッグ処理部と、セキュアモードで動作するセキュアデバッガとを備えているので、デバッグ処理部が不正に改ざん等されても、セキュアデバッガには影響がなく、セキュアモードで動作するプログラムへの不正な解析を防ぐことができる。
また、この構成においても、前記デバッグ対象プログラムの前記所定部分には、前記デバッグ対象プログラムを構成する各部分についてアクセスが許可または不許可であることを示すアクセス制御リストが含まれ、前記第２取得手段は、前記デバッグ対象プログラムの前記所定部分に含まれる前記アクセス制御リストを取得するアクセス制御リスト取得部を含み、前記データ処理装置は、さらに、前記取得した前記アクセス制御リストに基づいて、前記デバッグ対象プログラムの前記一部分のアクセスが許可されているかを判定するアクセス判定手段を備え、前記アクセス判定手段は、前記セキュアドメインにおいて前記判定を行い、前記制御手段は、前記デバッグ処理部が出力した前記デバッグ処理要求にかかる前記デバッグ対象プログラムについて、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていないと判定された場合、前記セキュアデバッガによる前記一部分の前記デバッグ処理の実行を禁止し、前記判定手段により許可されていると判定され、かつ、前記アクセス判定手段により許可されていると判定された場合、前記一部分のデバッグ処理を前記セキュアデバッガに実行させることとしてもよい。
【００２５】
これにより、プログラムの権利者は、当該プログラムにおいて秘匿しておきたい情報が含まれている部分をデバッグされないようにすることができる。
また、プログラムが連係して動作する場合には、以下の構成とするとよい。
すなわち、前記デバッグ処理部は、前記通常プログラム、および、前記通常プログラムと連係する前記デバッグ対象プログラムに対してデバッグ処理を行う機能を有し、前記デバッグ処理部による前記デバッグ対象プログラムのデバッグ処理は、前記デバッグ処理部がデバッグ処理要求を出力し、出力された前記デバッグ処理要求に対して前記セキュアデバッガにより行われたデバッグ処理の結果を前記切替部を介して前記デバッグ処理部が受け付けることにより行われることとしてもよい。
【００２６】
これにより、連係して動作するプログラムが通常モードで動作するものであってもセキュアモードで動作するものであっても通常モードで動作するデバッグ処理部でデバッグ処理を同時に実行できるので、連係動作するプログラムを効率良く開発できる。
ところで、通常モードで動作しているプログラムからは、セキュアモードで動作しているプログラムに直接アクセスできないので、セキュアモードにおいて通常モードで動作しているデバッグ処理部は、いつからセキュアモードにおいてデバッグ対象プログラムが動作したかがわからない。そのため、プログラムの開発者にとって、セキュアモードで動作するデバッグ対象プログラムのデバッグが困難となっている。
【００２７】
そこで、前記デバッグ処理部は、自デバッグ処理部がアタッチされた通常プログラムを識別するプロセス識別子を出力し、前記セキュアデバッガは、前記デバッグ処理部から出力された前記プロセス識別子に示される通常プログラムと連係動作するデバッグ対象プログラムのエントリポイントにある命令をブレーク命令へと変更するとしてもよい。
こうすることで、デバッグ対象プログラムが動作を開始すると、ブレーク命令によりいったん動作が止まるので、プログラムの開発者に対してデバッグ処理の実行のための設定等を行わせることが可能となる。
【００２８】
また、前記データ処理装置は、前記セキュアモードにおいて前記デバッグ対象プログラムの実行中にデバッグ例外が検出されると、前記切替部を介して前記デバッグ処理部にデバッグ例外の発生を通知し、前記デバッグ処理部は、前記切替部から前記デバッグ例外の発生の通知を受け付けると、デバッグ処理の実行結果を示すデバッグ情報の取得要求を出力し、前記セキュアデバッガは、前記デバッグ対象プログラムについて前記判定手段が肯定的な判定をしているときに前記デバッグ情報の取得要求を受け付けると、前記デバッグ対象プログラムのデバッグ処理を実行してデバッグ情報を取得し、取得したデバッグ情報を、前記切替部を介して前記デバッグ処理部に出力するとするとよい。
【００２９】
こうすることで、プログラムの開発者は、デバッグ処理が許可されていれば、セキュアモードで動作するプログラムに対するデバッグ処理の結果を知ることができる。
また、前記データ処理装置は、さらに、前記通常プログラムのデバッグ処理の結果を第１の表示領域に表示する第１の結果表示部と、前記通常プログラムとの連係にかかるデバッグ対象プログラムのデバッグ処理の結果を、前記第１の表示領域とは異なる第２の表示領域に表示する第２の結果表示部とを備え、前記第１および第２の結果表示部は、前記連係にかかるデバッグ対象プログラムと前記通常プログラムとが連係して動作しているとき、前記第１の表示領域および前記第２の表示領域に、前記デバッグ対象プログラムと前記通常プログラムのデバッグ処理の結果を表示するとしてもよい。
【００３０】
これにより、プログラムの開発者は、通常プログラムとデバッグ対象プログラムの両方の動作を確認しながらデバッグを行うことができる。
また、前記通常モードにおいては、通常OSが動作し、前記セキュアモードにおいては、保護OSが動作し、前記通常プログラムは、前記通常OSが生成するプロセスとして前記通常モードにおいて動作し、前記デバッグ処理部は、前記通常OSで動作するデバッガとして前記通常モードにおいて動作し、前記デバッグ対象プログラムは、前記保護OSが生成するプロセスとして前記セキュアモードにおいて動作し、前記セキュアデバッガは、前記保護OSの有する機能として実装されているとしてもよい。
【００３１】
また、前記制御手段は、前記デバッグ処理部が前記デバッグ処理要求を出力すると、前記判定手段に前記判定を行わせ、許可されていないと判定されたとき、前記デバッグ処理の実行の禁止を示すデバッグ処理不可通知を前記デバッグ処理部へ出力するとしてもよい。
これにより、デバッグ処理部を用いてデバッグしているユーザは、デバッグ対象プログラムのデバッグが許可されていない場合に、その旨を知ることができる。
【００３２】
また、上述のプログラムは、以下のようにして生成される。
すなわち、プログラム生成装置は、秘匿すべき保護情報を含んだプログラムを取得するプログラム取得手段と、取得した前記プログラムに対するデバッグ処理をデバッグ処理部の識別子に応じて許可するか否かを判定するための検証値を生成する検証値生成手段と、前記プログラムについて前記検証値生成手段で生成された検証値を前記プログラムに付加して保護プログラムを生成する保護プログラム生成手段とを備えることを特徴とする。
【００３３】
ここで、前記プログラム生成装置は、さらに、前記プログラムを構成する各部分についてアクセスが許可または不許可であることを示すアクセス制御リストを取得するアクセス制御リスト取得部を含み、前記保護プログラム生成手段は、前記取得したアクセス制御リストを、前記プログラムに付加するアクセス制御リスト付加部を含むとしてもよい。
この構成によると、プログラムの開発者自身が前記検証値をプログラムに含ませるので、開発者の意図したようにプログラムのデバッグ処理の実行を制御することができる。
【００３４】
また、本発明は、デバッグ処理部によるデバッグ処理の実行を制御するデータ処理方法であって、前記デバッグ処理部を識別する識別子を取得する第１取得ステップと、不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得ステップと、前記デバッグ対象プログラムから取得された前記検証値と前記第１取得ステップにおいて取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定ステップと、許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御ステップとを含むことを特徴とするデータ処理方法でもある。
【００３５】
また、本発明は、デバッグ処理部によるデバッグ処理の実行の制御をデータ処理装置に行わせる、コンピュータ読み取り可能な制御プログラムであって、前記デバッグ処理部を識別する識別子を取得する第１取得ステップと、不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得ステップと、前記デバッグ対象プログラムから取得された前記検証値と前記第１取得ステップにおいて取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定ステップと、許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御ステップとを含むことを特徴とする制御プログラムでもある。
【００３６】
また、本発明は、デバッグ処理部によるデバッグ処理の実行を制御するデータ処理装置において用いられる集積回路であって、前記デバッグ処理部を識別する識別子を取得する第１取得部と、不正アクセスから保護された状態にあるデバッグ対象プログラムの所定部分に含まれる検証値を取得する第２取得部と、前記デバッグ対象プログラムから取得された前記検証値と前記第１取得手段により取得された前記識別子とを比較し、その比較結果に応じて、前記デバッグ対象プログラムに対するデバッグ処理が許可されているか判定する判定部と、許可されていないと判定されたとき、前記デバッグ対象プログラムに対するデバッグ処理の実行を禁止する制御部とを含むことを特徴とする集積回路でもある。
【００３７】
また、本発明は、秘匿すべき保護情報を含んだプログラムを取得するプログラム取得ステップと、取得した前記プログラムに対するデバッグ処理をデバッグ処理部の識別子に応じて許可するか否かを判定するための検証値を生成する検証値生成ステップと、前記プログラムについて前記検証値生成ステップで生成された検証値を前記プログラムに付加して保護プログラムを生成する保護プログラム生成ステップとを含むことを特徴とするプログラム生成方法でもある。
【００３８】
また、本発明は、プログラムを生成する処理をプログラム生成装置に行わせるための、コンピュータ読み取り可能な制御プログラムであって、秘匿すべき保護情報を含んだプログラムを取得するプログラム取得ステップと、取得した前記プログラムに対するデバッグ処理をデバッグ処理部の識別子に応じて許可するか否かを判定するための検証値を生成する検証値生成ステップと、前記プログラムについて前記検証値生成ステップで生成された検証値を前記プログラムに付加して保護プログラムを生成する保護プログラム生成ステップとを含むことを特徴とする制御プログラムでもある。
【００３９】
また、本発明は、プログラムを生成するプログラム生成装置において用いられる集積回路であって、秘匿すべき保護情報を含んだプログラムを取得するプログラム取得部と、取得した前記プログラムに対するデバッグ処理をデバッグ処理部の識別子に応じて許可するか否かを判定するための検証値を生成する検証値生成部と、前記プログラムについて前記検証値生成手段で生成された検証値を前記プログラムに付加して保護プログラムを生成する保護プログラム生成部とを含むことを特徴とする集積回路でもある。
【発明を実施するための最良の形態】
【００４０】
以下本発明の実施の一形態について、図面を参照しながら説明する。
１  実施の形態１
図１は、本発明の実施の形態１におけるデータ処理装置１の概略図である。データ処理装置１は、保護機構を持つＬＳＩ２と切替機構３、保護ＯＳ６、デバッグ機能７、保護プログラム８（８ａ、８ｂ、・・）、通常ＯＳ１１、通常プログラム１２（１２ａ、１２ｂ、・・）、切替デバイスドライバ１３（以下、「切替デバドラ１３」という）、デバッガ１４、デバッガ用切替デバイスドライバ１５（以下、「デバッガ用切替デバドラ１５」という）から構成される。
【００４１】
１．１  実施の形態１における各機能ブロックの説明
１．１．１  ＬＳＩ２
図１において、ＬＳＩ２は、プログラムの不正な解析や改竄から保護するための機構である保護機構を搭載している。保護機構は、外部からの不正アクセスを防止するハードウェア機構を有している。保護機構の具体的な例としては、外部からのアクセスを一時的に遮断する等が挙げられる。
【００４２】
ＬＳＩ２は、動作モードとして保護モード（または、「セキュアモード」と呼ぶこととしてもよい）と通常モードとを備えており、保護モードと通常モードとを切り替えて動作する。動作モードの切り替えは、後述する切替機構３を用いて行う。
保護モードとは、保護機構によってプログラムが不正な解析や改ざんから保護される特殊なモードであり、保護ＯＳ６や保護プログラム８が動作する。一方、通常モードとは、保護機構によってプログラムが保護されない一般的なモードであり、通常ＯＳ１１や通常プログラム１２が動作する。
【００４３】
保護モードから通常モードへの切替は、保護ＯＳ６が切替機構３を用いて行う。通常モードから保護モードへの切替は、通常ＯＳ１１にある切替デバドラ１３等が切替機構３を用いて行う。
１．１．２  切替機構３
切替機構３は、保護ＯＳ６や通常ＯＳ１１からの、動作モードの切り替え指示を受け付けて、動作モード切り替えに必要な処理を行うためのハードウェア機構を有する。動作モードの切り替え処理は、例えば、非特許文献１に記載の技術を適用することができる。
【００４４】
この場合、切替機構３は、通常モードにおいても保護モードにおいても動作し、通常モードおよび保護モードがともにアクセス可能な記憶領域を有している。通常モードでＬＳＩ２が動作している場合に、通常モードで動作する通常プログラム１２から保護モードで動作する保護プログラム８への要求等を、上記記憶領域にいったん格納させる。動作モードが切り替わってから、保護ＯＳ６や保護プログラム８が、前記格納された情報を読み出すことで、通常モードで動作するプログラムと保護モードで動作するプログラムとの間の通信を実現する。
【００４５】
１．１．３  保護ＯＳ６
保護ＯＳ６は、ＬＳＩ２が保護モードの時の、データ処理装置１の動作を制御するＯＳである。
保護ＯＳ６は、保護モード上で動作する保護プログラム８の管理（プロセス管理）やリソース管理、メモリ管理ユニット（ＭＭＵ）を用いた保護プログラム間のアクセス制御、割り込み処理、切替機構３を用いた通常モードへの切替処理、保護プログラムをデバッグするためにデバッグ機能７を用いたデバッグ処理などを行う。
【００４６】
１．１．４  デバッグ機能７
デバッグ機能７は、デバッガ１４が保護プログラム８に対するデバッグ処理を行う際に、そのデバッグ処理の実行を制御する。
すなわち、デバッグ機能７は、デバッガ１４が保護プログラム８をデバッグするときに、デバッガ１４による保護プログラム８のデバッグが許可されているかどうかを判定する。判定の結果、許可されている場合には、デバッガ１４からの要求に従い、デバッグ情報の取得やブレークポイントの設定、レジスタ値やメモリ値の取得・設定などの処理を保護プログラム８に対して行う。なお、デバッグ情報とは、プログラムのデバッグのための情報であり、オブジェクトファイル中のプログラムコードとソースコードの対応関係などを示す。また、デバッグ機能７は、停止フラグを用いて、保護プログラム８のデバッグ処理の前処理を行う。なお、デバッグ機能７の詳細については、後述する。
【００４７】
１．１．５  保護プログラム８
保護プログラム８は、不正な解析や改ざんから保護しなければならない情報（以下、秘匿情報）を含むアプリケーションプログラムである。
秘匿情報の例としては暗号化されたディジタルコンテンツを復号するための復号鍵や復号アルゴリズム、再生やコピーに関する権利を格納する権利情報等がある。また、保護プログラム８は不正な解析を防止するため、実行が開始されるまでは暗号化された状態で保持されており、実行開始時に保護ＯＳ６によって復号化される。
【００４８】
１．１．５．１  保護プログラム８の補足
保護プログラム８は、実行が開始されるまでは、図５に示す暗号化された保護プログラム７３のように、暗号化された状態で保持されている。
図５に示すように、暗号化された保護プログラム７３は、保護プログラム本体５１と、許可デバッガＩＤ情報５２と、アクセス制御リスト５３と、復号化用ヘッダ情報５４とから構成される。暗号化された保護プログラム７３を、復号化用ヘッダ情報５４を用いて復号すると、保護プログラム８が得られる。保護プログラム８は、保護プログラム本体５１と、許可デバッガＩＤ情報５２と、アクセス制御リスト５３とからなる。
【００４９】
１．１．５．２  保護プログラム本体５１
保護プログラム本体５１は、プログラムの実行コードである。
１．１．５．３  許可デバッガＩＤ情報５２
許可デバッガＩＤ情報５２は、保護プログラム８に対するデバッグ処理を許可するか否かを判定するための検証値である。この実施形態では、許可デバッガＩＤ情報５２とは、保護プログラム８に対するデバッグ処理が許可されているデバッガの識別子（デバッガＩＤ）を示していることとする。すなわち、許可デバッガＩＤ情報５２に示される値と同一のデバッガＩＤを有するデバッガが、保護プログラム８に対するデバッグ処理を行うことができる。デバッグ機能７の前記判定に際しては、この許可デバッガＩＤ情報５２が用いられる。
【００５０】
１．１．５．４  アクセス制御リスト５３
アクセス制御リスト５３は、保護プログラム８の所定領域に対するアクセスが許可されているか否かを示すリストである。アクセス制御リスト５３とは、要するに、保護プログラム８を構成する各部分のそれぞれについて、アクセスを許可するか否かを対応づけたものである。アクセス制御リスト５３の詳細は後述する。
【００５１】
１．１．５．５  復号化用ヘッダ情報５４
復号化用ヘッダ情報５４は、暗号化された保護プログラム７３の復号化に必要な情報を示す。例えば、暗号化に用いられたアルゴリズムや、保護プログラム８をメモリにロードするアドレスなどが復号化用ヘッダ情報５４には含まれる。なお、暗号化されたプログラムに、復号化に必要な情報を付加してプログラムの復号を行う技術は従来広く知られており、本発明の主要な構成要件ではないため詳細な説明を省略する。
【００５２】
１．１．５．６  各データの配置
保護プログラム８のうち、許可デバッガＩＤ情報５２やアクセス制御リスト５３や保護プログラム本体５１は、どのように配置してもよい。具体的には、どのように許可デバッガＩＤ情報５２等を配置しているかという情報を、ヘッダ等の情報としてプログラムに付加してもよい。
【００５３】
また、予め保護プログラムのどの部分に含まれるかを定義しておき、その定義に従ってデータ処理装置１のデバッグ機能７が許可デバッガＩＤ情報５２を読み出すこととしてもよい。例えば、許可デバッガＩＤ情報５２を示すビットの数（またはバイト数）と、アクセス制御リスト５３を示すビットの数とを予め定義しておき、保護プログラム８の先頭から所定ビットまでを許可デバッガＩＤ情報５２とし、そこから後続する所定ビットまでをアクセス制御リスト５３とする。
【００５４】
なお、許可デバッガＩＤ情報５２とアクセス制御リスト５３とからなる組が複数ある場合は、保護プログラムの先頭に、これら組がいくつあるかを示す情報を含ませておくとしてもよい。
また、これら許可デバッガＩＤ情報５２等を、保護プログラム８内にどのように配置するかを、復号化用ヘッダ情報５４に含めてもよい。デバッグ機能７は、これら許可デバッガＩＤ情報５２等の保護プログラム８に占める位置を示す情報を読み取る等することで、許可デバッガＩＤ情報５２やアクセス制御リスト５３を取得することができる。
【００５５】
なお、保護プログラム８の詳細については、実施の形態２でその生成方法とともに詳しく説明する。
１．１．６  通常ＯＳ１１
通常ＯＳ１１は、ＬＳＩ２が通常モードの時の、データ処理装置１の動作を制御するＯＳである。
【００５６】
すなわち、通常ＯＳ１１は、通常モードで動作している時に、通常モードで動作する通常プログラム１２の管理（プロセス管理）やリソース管理、割り込み処理等を行う。
１．１．７  切替デバドラ１３
切替デバドラ１３は、通常ＯＳ１１のデバイスドライバとして動作し、通常プログラム１２が保護プログラム８との通信を行うときに使用する。なお、後述するが、デバッガ１４がデバッグ機能７との通信を行う場合は、デバッガ用切替デバドラ１５が利用される。
【００５７】
具体的には、切替デバドラ１３は、通常プログラム１２と保護プログラム８との間の通信データの受け渡し処理と、通常モードから保護モードへの切替処理を行う。通信データの受け渡し処理とは、要するに、通常プログラム１２が出力するデータを受け付けて、切替機構３を経由して保護プログラム８へ出力し、また、保護プログラム８から出力されたデータを、切替機構３を経由して取得し、取得したデータを通常プログラム１２へ出力する処理のことである。
【００５８】
切替デバドラ１３の詳細については後述する。
１．１．８  デバッガ用切替デバドラ１５
デバッガ用切替デバドラ１５は、通常ＯＳ１１のデバイスドライバとして動作し、デバッガ１４がデバッグ機能７との通信を行うときに使用する。
デバッガ用切替デバドラ１５は、デバッガ１４とデバッグ機能７の通信データの受け渡し処理と、通常モードから保護モードへの切替処理を行う。
【００５９】
１．１．９  通常プログラム１２
通常プログラム１２（１２ａ、１２ｂ、・・）は、通常ＯＳ１１上で動作するアプリケーションプログラムである。
通常プログラム１２は、切替デバドラ１３を利用して保護モードで動作する保護プログラム８と通信を行い、保護プログラム８と連携して動作する。
【００６０】
１．１．１０  デバッガ１４
デバッガ１４は、通常プログラム１２に対してデバッグ処理を行う機能と、保護プログラム８に対してデバッグ処理を行う機能とを有する。デバッガ１４は、自身を識別するための識別子であるデバッガＩＤを有している。デバッグ機能７による、デバッグが許可されているか否かの判定に際しては、このデバッガＩＤが用いられる。なお、デバッガ１４のデバッガＩＤの管理等に関しては、実施の形態３で詳しく説明する。
【００６１】
デバッガ１４の通常プログラム１２をデバッグする機能は、例えばＬｉｎｕｘ（登録商標）で使用されるＧＤＢなどのアプリケーションデバッガと同様の機能とすることで実現できる。
また、保護プログラム８に対してデバッグ処理を行う機能とは、デバッガ１４が、デバッガ用切替デバドラ１５を介して保護ＯＳ６のデバッグ機能７と通信し、デバッグ機能７が保護プログラム８に対してデバッグ情報の取得やブレークポイントの設定、レジスタ値やメモリ値の取得・設定などのデバッグ処理を行い、そのデバッグ処理の結果を受け付ける機能のことである。
【００６２】
なお、以下の説明では、デバッガ１４は、通常モードで動作する通常プログラム１２にアタッチし、アタッチした通常プログラム（例えば、通常プログラム１２ａ）、および、その通常プログラムと連携動作している保護プログラム（例えば、保護プログラム８ａ）に対してデバッグ処理を行うものとする。
なお、本実施の形態１におけるデバッガ１４は、通常ＯＳ１１上で動作するアプリケーションデバッガとしたが、これに限定するものではなく、例えばＬｉｎｕｘ（登録商標）で使用されるＫＧＤＢ等のカーネルモードデバッガとし通常モードや保護モードで動作するデバイスドライバのデバッグを可能としてもよい。
【００６３】
１．２  デバッグ機能７の詳細な説明
「１．１．４  デバッグ機能７」で説明したデバッグ機能７の詳細を、以下、説明する。
図２はデバッグ機能７の詳細なブロック図である。デバッグ機能７は、制御部２１、デバッガＩＤ判定部２２、アクセス判定部２３、セキュアデバッガ２４とを有している。セキュアデバッガ２４は、デバッグ情報取得部２５、ブレークポイント設定部２６、レジスタ値取得設定部２７、メモリ値取得設定部２８とを有している。
【００６４】
なお、「１．１．５  保護プログラム８」で説明したように、保護プログラム８には許可デバッガＩＤ情報５２とアクセス制御リスト５３が含まれており、「１．１．１０  デバッガ１４」で説明したように、デバッガ１４は、デバッガＩＤを有している。
なお、以下のデバッグ機能７の説明では、デバッグ対象の保護プログラムについて、どのプログラムがデバッグ対象か特定せず、デバッグ対象の保護プログラム８と総称して説明する。
【００６５】
１．２．１  デバッガＩＤ判定部２２
図２において、デバッガＩＤ判定部２２は、デバッガ１４が、デバッグ対象の保護プログラム８に対するデバッグ処理を許可されているか否かを判定する。
すなわち、デバッガＩＤ判定部２２は、デバッガ１４の持つデバッガＩＤと、デバッグ対象の保護プログラム８に含まれる許可デバッガＩＤ情報５２とを取得する。取得したデバッガＩＤと許可デバッガＩＤ情報５２とを比較する。その比較の結果に応じて、デバッグ対象の保護プログラム８のデバッグ（すなわち、デバッガ１４によるデバッグ対象の保護プログラムに対するデバッグ処理の実行）がデバッガ１４に許可されているか否か判定を行う。
【００６６】
１．２．１．１  デバッガＩＤ判定部２２の詳細な説明
図３はデバッガＩＤ判定部２２の詳細なブロック図である。
図３に示すように、デバッガＩＤ判定部２２は、デバッガＩＤ比較部３１とデバッガＩＤ演算部３２、比較値保持部３３とを有している。デバッガＩＤ判定部２２は、デバッガ１４のデバッガＩＤとデバッグ対象の保護プログラム８に含まれる許可デバッガＩＤ情報５２に示される値とが一致しているかどうかを判定する。
【００６７】
具体的に説明すると、図３に示すように、デバッガＩＤ演算部３２は、デバッガ１４のデバッガＩＤとデバッグ対象の保護プログラム８に含まれる許可デバッガＩＤ情報５２を受け付ける。デバッガＩＤから許可デバッガＩＤ情報５２に示される値を引く。引いた結果を演算結果としてデバッガＩＤ比較部３１へ出力する。
デバッガＩＤ比較部３１は、デバッガＩＤ演算部３２の演算結果と、比較値保持部３３の保持している比較値とを比較し、一致している場合に「デバッグ可」を制御部２１に通知し、一致しなかった場合に「デバッグ不可」を制御部２１に通知する。なお、比較値保持部３３は、デバッガＩＤ演算部３２の演算結果と比較するための比較値として"０"を保持している。
【００６８】
１．２．１．２  デバッガＩＤ判定部２２の補足説明
なお、本実施の形態１におけるデバッガＩＤ判定部２２は、デバッガ１４のデバッガＩＤとデバッグ対象の保護プログラム８に含まれる許可デバッガＩＤ情報５２に示される値とが一致しているかどうかを判定するとしたが、デバッガＩＤの一致を判定することに限定するものではない。すなわち、デバッガＩＤ演算部３２では減算以外に乗算や暗復号演算を行ってもよい。また、比較値保持部３３では"０"以外の値を保持するとしてもよい。
【００６９】
要するに、デバッガＩＤ判定部２２は、デバッガ１４の識別子と、デバッグ対象の保護プログラム８に含まれる検証値とを演算子として所定の演算を行い、その結果が、比較値保持部３３に保持されている比較値と一致すれば「デバッグ可」と判定し、一致しなければ「デバッグ不可」と判定すればよい。
また、この他に、図示しないデバッガＩＤ保持部に予め保護プログラム８の許可デバッガＩＤ情報５２に示される値を保持しておき、デバッガＩＤ判定部２２がデバッガ１４から受け付けたデバッガ１４のデバッガＩＤと、デバッガＩＤ保持部に保持している値とを比較するとしてもよい。この場合、デバッガＩＤ演算部３２は特に演算を行わない。
【００７０】
１．２．２  アクセス判定部２３
図２に戻って説明を続ける。
アクセス判定部２３は、デバッガ１４がデバッグ対象の保護プログラム８の所定領域に対してアクセスを要求している場合に、そのアクセスが許可されているか判定する。
すなわち、アクセス判定部２３は、デバッグ対象の保護プログラム８からアクセス制御リスト５３を取得し、取得したアクセス制御リスト５３に基づいて、デバッガ１４がアクセスしようとしている領域へのアクセスが許可されているかどうか判定を行う。
【００７１】
１．２．２．１  アクセス制御リスト５３の詳細な説明
ここで、アクセス制御リスト５３の詳細について説明する。
図６は、アクセス判定部２３が取得するアクセス制御リスト５３のデータ構造の例を示す図である。
アクセス制御リスト５３は、アクセス制御を行う領域と、その領域に関するアクセス許可情報の２つの部分からなる。以下の説明では、メモリアドレスでアクセス制御を行う場合のアクセス制御リスト５３ａと、シンボルによってアクセス制御を行う場合のアクセス制御リスト５３ｂとについて説明する。なお、シンボルとは、プログラムに含まれる変数や関数などを識別する識別子のことである。
【００７２】
１．２．２．２  メモリアドレスでアクセス制御を行う場合
図６（ａ）は、アクセス制御を行う領域をメモリアドレスで指定するときのアクセス制御リスト５３ａのデータ構造であり、アクセス制御を行う領域は開始アドレスと終了アドレスで指定される。
図６（ａ）に示すように、アクセス制御リスト５３ａの１件のレコードは、開始アドレス６１ａと、終了アドレス６２ａと、アクセス許可情報６３ａとを含む。
【００７３】
開始アドレス６１ａと終了アドレス６２ａとは、アクセス制御を行うメモリ領域の開始アドレスと終了アドレスとを示す。
アクセス許可情報６３ａは、開始アドレス６１ａと終了アドレス６２ａとに示されるメモリ領域へのアクセスを許可するか否かを示す。許可する場合は「アクセス可」、許可しない場合は「アクセス不可」を例えば１ビットの情報で示す。アクセス制御リスト５３ａには、開始アドレス６１ａおよび終了アドレス６２ａにより示されるメモリ領域の組を複数含んでおり、これら組のそれぞれに、アクセスを許可するか否かを対応づけて記憶している。
【００７４】
なお、リストの先頭には、開始アドレス６１ａと終了アドレス６２ａとにより示されていない領域を「default」と定義している。「default」の領域へのアクセスは、本実施形態では、「アクセス不可」としている。
また、開始アドレス６１ａ等に示されるアドレスは、本実施形態では、相対的なアドレスである。すなわち、保護プログラム８の復号化用ヘッダ情報５４には、保護プログラム８をメモリにロードする際のメモリアドレスが示されており、このメモリアドレスの先頭を０とした相対的なアドレスが、開始アドレス６１ａ等に示されている。もちろん、開始アドレス６１ａ等に示されるアドレスは、メモリの絶対アドレスとしてもよい。
【００７５】
１．２．２．３  メモリアドレスでアクセス制御を行う場合の動作
アクセス判定部２３は、アクセス制御リスト５３ａと保護プログラム８ａのデバッグ情報を取得する。また、デバッガ１４がアクセスを要求しているシンボルを、保護プログラム８ａのデバッグ情報を用いてアドレスに変換する。
アクセス判定部２３は、変換したアドレスが、アクセス制御リスト５３ａ中の開始アドレス６１ａおよび終了アドレス６２ａにより示されるメモリ領域それぞれに含まれるかどうかをリストの上から順に判定する。含まれると判定されると、その領域に対応づけられたアクセス許可情報６３ａを取得し、アクセス許可情報６３ａに示される情報、すなわち「アクセス可」か「アクセス不可」かを制御部２１に通知する。また、リスト中のメモリ領域に含まれなかった場合には、リスト先頭の「default」と対応づけられているアクセス許可情報６３ａに基づいて「アクセス可」か「アクセス不可」かを制御部２１に通知する。
【００７６】
１．２．２．４  シンボルによってアクセス制御を行う場合
図６（ｂ）は、アクセス制御を行う領域をシンボル名で指定するときのアクセス制御リスト５３ｂのデータ構造であり、アクセス制御を行う領域はシンボル名で指定される。
図６（ｂ）に示すように、アクセス制御リスト５３ｂの１件のレコードは、シンボル名６４ｂと、アクセス許可情報６５ｂとを含む。
【００７７】
シンボル名６４ｂは、アクセス制御の対象となるシンボルの名称を示す。
アクセス許可情報６５ｂは、シンボル名６４ｂに示されるシンボルに対するアクセスを許可するか否かを示す。
図６（ｂ）に示すように、アクセス制御リスト５３ｂには、シンボルそれぞれについて、アクセスを許可するか否かが示されている。
【００７８】
なお、リストの先頭には、シンボル名６４ｂに示されていないシンボルを「default」と定義している。「default」のシンボルへのアクセスは、本実施形態では、「アクセス不可」としている。
１．２．２．５  シンボルによってアクセス制御を行う場合の動作
アクセス判定部２３は、アクセス制御リスト５３ｂを取得する。デバッガ１４がアクセスを要求しているシンボルの名称が、アクセス制御リスト５３ｂ中のシンボル名６４ｂに示されるシンボル名と一致するかをリストの上から順に判定する。リスト中のシンボル名と一致した場合にはそのシンボル名に対応づけられたアクセス許可情報６５ｂを取得し、アクセス許可情報６５ｂに示される情報、すなわち「アクセス可」か「アクセス不可」かを制御部２１に通知する。リスト中のシンボル名と一致しなかった場合には、リストの先頭の「default」と対応づけられているアクセス許可情報６５ｂに基づいて「アクセス可」か「アクセス不可」かを制御部２１に通知する。
【００７９】
１．２．２．６  補足説明
なお、本実施の形態１におけるアクセス制御リスト５３ａ、５３ｂは、そのリストの先頭に、アクセス制御リスト５３ａ、５３ｂに示されていないシンボルを「default」として、「default」に対応づけてアクセス許可情報６３ａ、６５ｂを記憶することとしているが、これに限定するものではない。
【００８０】
すなわち、アクセス判定部２３において、アクセス制御リスト５３ａ、５３ｂに含まれないメモリ領域やシンボル名の場合には常に「アクセス可」と判定するものとしてもよいし、逆に「アクセス不可」と判定するものとしてもよい。
また、デバッガ１４は、シンボルによりアクセスを要求するとしたが、シンボルに限定するものではない。例えば、デバッガ１４はメモリのアドレスによりアクセスする領域を指定してもよい。
【００８１】
この場合、上記の例ではアクセス制御リスト５３ａを用いたアクセス許可の判定において、デバッガ１４から指定されたシンボルを一旦アドレスに変換する処理を行っていたが、デバッガ１４から指定されたアドレスによって直接判定することとなる。
１．２．３  セキュアデバッガ２４
セキュアデバッガ２４は、デバッガ１４からの依頼に応じて、様々なデバッグ処理を行う。
【００８２】
セキュアデバッガ２４は、デバッグ情報取得部２５、ブレークポイント設定部２６、レジスタ値取得設定部２７、メモリ値取得設定部２８を含んでいる。
デバッグ処理としては、デバッグ情報取得部２５により、デバッグ対象の保護プログラム８からシンボル情報などのデバッグ情報を取得する処理を行う。
また、ブレークポイント設定部２６により、デバッグ対象の保護プログラム８にブレークポイントを設定する処理を行う。
【００８３】
また、レジスタ値取得設定部２７により、デバッグ対象の保護プログラム８が使用しているレジスタ値を取得し、あるいはデバッグ対象の保護プログラム８が使用するレジスタ値を設定する。
また、メモリ値取得設定部２８により、デバッグ対象の保護プログラム８が使用しているメモリの値を取得し、あるいはデバッグ対象の保護プログラム８が使用するメモリの値を設定する。
【００８４】
１．２．４  制御部２１
制御部２１はデバッガＩＤ判定部２２とアクセス判定部２３との判定結果に基づいて、デバッガ１４によるデバッグ対象の保護プログラム８に対するデバッグ処理の実行が許可されているかを確認する。
確認の結果、デバッグ処理の実行が許可されていれば、制御部２１は、デバッガ１４からの依頼に応じてセキュアデバッガ２４に含まれる各処理（デバッグ情報取得部２５、ブレークポイント設定部２６、レジスタ値取得設定部２７、メモリ値取得設定部２８）を呼び出す。
【００８５】
制御部２１は、デバッガＩＤ判定部２２により、デバッグ対象の保護プログラム８をデバッガ１４がデバッグ処理することが不許可と判定された場合や、アクセス判定部２３により、デバッガ１４によるアクセスを禁止されている領域へのアクセスと判定された場合には、デバッガ１４から依頼された要求を処理しない。すなわち、セキュアデバッガ２４に含まれる各処理を呼び出さない。なお、このとき、セキュアデバッガ２４に含まれる各処理を呼び出さなかったことをデバッガ１４に通知するために、デバッグ処理の実行が許可されなかったことを示すデバッグ処理不可通知をデバッガ１４へ出力することとしてもよい。こうすることで、デバッガ１４では、デバッグ処理の実行が許可されなかったことをデバッガ１４のユーザに示す等の処理を行うことができる。
【００８６】
なお、上述のように、許可デバッガＩＤ情報５２とアクセス制御リスト５３とを用いてデバッグ処理の実行の制御を行うとして説明したが、保護プログラム８に含まれる許可デバッガＩＤ情報５２に示されるデバッガＩＤは、１つでもよいし複数でもよい。デバッガＩＤを複数含ませることで、複数の開発者にデバッグ処理を許可することができる。例えば、複数の開発者が共同でプログラムを開発する場合などが考えられる。
【００８７】
また、許可デバッガＩＤ情報５２とアクセス制御リスト５３とを対応づけた組が、複数、保護プログラム８に含まれることとしてもよい。
もちろん、１のデバッガＩＤが含まれる許可デバッガＩＤ情報５２を複数含み、それぞれの許可デバッガＩＤ情報５２に、アクセス制御リスト５３を対応づけることとしてもよい。この場合、アクセス制御リスト５３は、それぞれの許可デバッガＩＤ情報５２ごとに異なるアクセス制限を示すものであってもよい。こうすると、デバッガＩＤごとに、異なるアクセス制限を課すことができる。
【００８８】
制御部２１は、デバッガＩＤ判定部２２に、保持している複数の許可デバッガＩＤ情報５２に示されるデバッガＩＤそれぞれについて判定を行わせ、デバッグ許可と判定されたデバッガＩＤがあれば、アクセス判定部２３に、そのデバッガＩＤに対応したアクセス制御リストによるアクセス判定を依頼する。すべてのデバッガＩＤがデバッグ不許可と判定された場合には、デバッガ１４から依頼された要求を処理しない。
【００８９】
１．３  切替デバドラ１３の詳細な説明
「１．１．７  切替デバドラ１３」で説明した切替デバドラ１３の詳細を、以下、説明する。
図４は切替デバドラ１３のブロック図である。切替デバドラ１３は、切替操作部４１、要求振り分け部４２、通常要求受付部４３、デバッグ要求受付部４４とを有している。
【００９０】
１．３．１  切替操作部４１
切替操作部４１は、通常モードで使用しているレジスタ値などを保存することで通常モードでのデータ処理装置の状態を退避し、その後、切替機構３を使用して通常モードから保護モードへ切り替える処理を行う。
さらに、保護モードから通常モードへ切り替わったときに、退避しておいた状態の復帰処理を行い、切り替え時に発生した保護モードからの要求を要求振り分け部４２に通知する。なお、この要求としては、デバッグ例外によるデバッグ要求と、通常プログラム１２への要求とがある。
【００９１】
１．３．２  要求振り分け部４２
要求振り分け部４２は、保護モードからの要求が、保護モード動作中に発生したデバッグ例外によるデバッグ要求か、通常プログラム１２への要求かを判断する。
判断の結果、デバッグ要求の場合にはデバッグ要求受付部４４にデバッグ要求を通知し、通常プログラム１２への要求の場合は通常要求受付部４３に保護モードからの要求を通知する。
【００９２】
１．３．３  通常要求受付部４３
通常要求受付部４３は、保護ＯＳ６や保護プログラム８等の保護モードで動作しているプログラムと、通常プログラム１２との通信を仲介する。
すなわち、保護モードで動作しているプログラムからの要求を通常プログラム１２へ通知したり、反対に通常プログラム１２からの要求を保護モードで動作しているプログラムへ通知したりする。
【００９３】
１．３．４  デバッグ要求受付部４４
デバッグ要求受付部４４は、保護プログラム８中に設定されたブレークポイントにより発生したデバッグ例外を、保護プログラム８と連係動作中の通常プログラム１２をデバッグしているデバッガ１４に通知する。
切替デバドラ１３を上述の様な構成にすることにより、通常プログラム１２と保護プログラム８との通信を仲介しつつ、保護プログラム８で発生したデバッグ例外を適切なデバッガ１４に通知することが可能となる。こうすることで、保護プログラム８に含まれる秘匿情報を無関係なデバッガに通知することによる秘匿情報の流出を防ぐことができる。
【００９４】
１．３．５  切替デバドラ１３の補足
なお、本実施の形態１における切替デバドラ１３は、切替操作部４１以外に要求振り分け部４２や通常要求受付部４３、デバッグ要求受付部４４から構成されるとしたが、この様な構成に限定するものではない。例えば、切替デバドラ１３は切替操作部４１だけからなり、要求振り分け部４２や通常要求受付部４３、デバッグ要求受付部４４は通常プログラム１２にライブラリとして組み込まれていてもよい。この場合、要求振り分け部４２や通常要求受付部４３、デバッグ要求受付部４４の動作は、通常プログラム１２の実行中に呼び出されるライブラリが行うこととなる。
【００９５】
１．４  動作
続いて、データ処理装置１の動作について説明する。
以下の説明では、まず、本発明の特徴でもある、デバッグ機能７の動作を「１．４．１  デバッグ機能７の動作」で説明する。
次に、全体の動作として、デバッグ処理を行わない場合の動作を「１．４．２  デバッグ処理を行わない場合の動作」で説明する。すなわち、通常プログラム１２と保護プログラム８との連係動作を説明する。
【００９６】
続いて、デバッガ１４が、通常プログラム１２と保護プログラム８とに対してデバッグ処理を行う場合の動作を、その前処理とあわせて「１．４．３  デバッグ処理の前処理」「１．４．４  デバッグ処理」で説明する。
なお、保護プログラム８は保護モードで動作するプログラムのため、通常モードで動作するプログラムおよびデバッガは保護プログラム８へ直接にはアクセスできない。そのため、セキュアデバッガ２４が保護プログラム８へのデバッグ処理を行って、デバッガ１４は、その結果を受け付ける。
【００９７】
１．４．１  デバッグ機能７の動作
図７は、デバッグ機能７の動作を示す図である。
デバッガＩＤ判定部２２は、デバッガ１４のデバッガＩＤと保護プログラム８の許可デバッガＩＤ情報５２とに基づいて、デバッガ１４による保護プログラム８のデバッグが許可されているかどうか判定する（Ｓ１０１）。
【００９８】
制御部２１は、デバッガＩＤ判定部２２の判定結果に基づいて処理を切り替える（Ｓ１０２）。すなわち、デバッガＩＤ判定部２２の判定結果が「デバッグ不可」であった場合には（Ｓ１０２：ＮＯ）、デバッグ処理を中止する。
デバッガＩＤ判定部２２の判定結果が「デバッグ可」であった場合には（Ｓ１０２：ＹＥＳ）、アクセス判定部２３は、デバッガ１４がアクセスしようとしている保護プログラム８の領域が、デバッガ１４によるアクセスが許可されているかを、保護プログラム８のアクセス制御リスト５３に基づいて判定する（Ｓ１０３）。
【００９９】
制御部２１は、アクセス判定部２３の判定結果に基づいて処理を切り替える（Ｓ１０４）。すなわち、アクセス判定部２３の判定結果が「アクセス不可」であった場合には（Ｓ１０４：ＮＯ）、デバッグ処理を中止する。
アクセス判定部２３の判定結果が「アクセス可」であった場合には（Ｓ１０４：ＹＥＳ）、デバッグ機能７は、セキュアデバッガ２４の各処理部（デバッグ情報取得部２５、ブレークポイント設定部２６、レジスタ値取得設定部２７、メモリ値取得設定部２８）を呼び出して処理を行わせる（Ｓ１０５）。
【０１００】
１．４．２  デバッグ処理を行わない場合の動作
図８は、本発明の実施の形態１における、デバッグを行わない場合の通常プログラム１２および保護プログラム８の実行のフローチャートである。
１．４．２．１  保護プログラム８のロード処理
まず、保護プログラム８のロード処理についての説明を行う。なお、以下では、通常プログラム１２と保護プログラム８とは、連係して動作するものとする。通常プログラム１２は、通常ＯＳ１１のデバイスドライバである切替デバドラ１３と保護ＯＳ６を経由して、保護プログラム８を呼び出す。以下の説明では、通常プログラム１２ａが、保護プログラム８ａと連係して動作する場合を例にして説明する。なお、通常プログラム１２ｂが動作する場合や、保護プログラム８ｂが連係して動作する場合も同様である。
【０１０１】
図８に示すように、まず通常プログラム１２ａが起動される。起動された通常プログラム１２ａは、動作モードを保護モードに切り替えるための前処理として、切替デバドラ１３をｏｐｅｎする（ステップＳ２０１）。ｏｐｅｎするとは、切替デバドラ１３が、保護ＯＳ６等の、保護モードで動作するプロセスと通信可能な状態にするということである。
通常プログラム１２ａは、保護プログラム８ａを動作させるために、暗号化された保護プログラムを指定し、その指定にかかる暗号化された保護プログラムをメモリへロードさせる要求を、切替デバドラ１３を経由して、保護ＯＳ６へ通知する（ステップＳ２０２）。なお、ここでは、暗号化された保護プログラムを復号すると、保護プログラム８ａが生成されることとする。
【０１０２】
保護ＯＳ６は、暗号化された保護プログラムのロードの要求を受け付けて、暗号化された保護プログラムの復号化用ヘッダ情報から、ロードに必要な情報を取得する（ステップＳ２０３）。ロードに必要な情報には、暗号化された保護プログラムに含まれる、保護プログラム本体のロード先アドレスなど、暗号化された保護プログラムの復号化に必要な情報などが含まれる。
【０１０３】
保護ＯＳ６は、取得にかかる、ロードに必要な情報に基づいて、暗号化された保護プログラムを復号化する。復号により得られた保護プログラム８ａを、保護モードで管理しているメモリ領域へロードし（ステップＳ２０４）、保護プログラム８ａを実行できる状態にする。
保護プログラム８ａが実行できる状態になると、保護ＯＳ６から切替デバドラ１３を経由して通常プログラム１２ａへリターンする（ステップＳ２０５）。すなわち、通常プログラム１２ａにプロセスの実行権が移り、通常プログラム１２ａの実行が再開される。
【０１０４】
１．４．２．２  保護プログラム８の実行
続いて、通常ＯＳ１１において通常プログラム１２ａが実行している時に、通常プログラム１２ａが保護プログラム８ａの有する機能の実行が必要になった場合の処理を説明する。
図９は、通常プログラム１２が、保護プログラム８の機能の実行を必要とする場合の動作を示すフローチャートである。
【０１０５】
なお、図９に示す処理の説明においては、上述の図８で示した処理が既に行われていて、保護プログラム８が実行できる状態にあるとする。
通常プログラム１２ａは、保護プログラム８ａの実行の要求を、切替デバドラ１３を経由して、保護ＯＳ６へ通知する（ステップＳ２０６）。前記実行の要求には、保護プログラム８ａが行うべき命令や処理が示されている。
【０１０６】
保護ＯＳ６は、保護プログラム８ａの実行の要求を受け付けて、保護プログラム８ａを実行し、前記実行の要求に応じた処理を行う（ステップＳ２０７）。
保護プログラム８ａが処理を終えると、保護プログラム８ａから保護ＯＳ６、切替デバドラ１３を経由して、通常プログラム１２ａへリターンする（ステップＳ２０８）。保護プログラム８ａの処理結果を通常プログラム１２ａが利用することがあれば、切替機構３や切替デバドラ１３を経由して保護プログラム８ａと通常プログラム１２ａとの間で処理結果の受け渡しが行われる。
【０１０７】
保護プログラム８ａの有する機能の実行が必要となるたびに、上述のステップＳ２０６からステップＳ２０８の処理が行われる。
１．４．２．３  保護プログラム８の使用の終了
続いて、通常プログラム１２ａが保護プログラム８ａの使用を終了する場合の動作を説明する。
【０１０８】
図１０は、通常プログラム１２ａが保護プログラム８ａの使用を終了する場合の動作を示すフローチャートである。
図１０に示すように、通常プログラム１２ａが保護プログラム８ａの使用を終了すると、通常プログラム１２ａは、保護プログラム８ａの削除の要求を、切替デバドラ１３を経由して、保護ＯＳ６へ出力する（ステップＳ２０９）。なお、削除の要求には、削除の対象となる保護プログラム８が示されている。本実施形態では、削除の要求により保護プログラム８ａを削除することとする。
【０１０９】
保護ＯＳ６は、削除の要求を受け付けて、保護プログラム８ａを削除する（ステップＳ２１０）。その後、保護ＯＳ６から切替デバドラ１３を経由して通常プログラム１２ａへリターンする。この削除の操作により、保護プログラム８ａの機能は再び保護プログラム８ａがロードされるまで使用できなくなる。また、平文の状態である保護プログラム８ａがメモリから無くなるため、不正解析を受けにくくすることができる。
【０１１０】
その後、通常プログラム１２ａにおいて、保護モードへ切り替わる必要がなくなれば、切替デバドラ１３をｃｌｏｓｅする（Ｓ２１１）。ｃｌｏｓｅするとは、切替デバドラ１３が保護ＯＳ６等との通信を行わない状態にすることである。
１．４．３  デバッグ処理の前処理
次に、通常プログラム１２と保護プログラム８とに対して、デバッガ１４がデバッグ処理を行う場合の動作を説明する。まず、デバッグ処理の前処理を説明する。
【０１１１】
１．４．３．１  前処理
図１１は、デバッガ１４が、通常プログラム１２と保護プログラム８とに対するデバッグ処理を行うための前処理を示すフローチャートである。
なお、以下の説明では、通常プログラム１２ａと保護プログラム８ａとが連係して動作するものとし、デバッガ１４は、通常プログラム１２ａと保護プログラム８ａとに対してデバッグ処理を行うこととする。
【０１１２】
デバッガ１４は、プログラム開発者のアタッチの操作を受け付けて、通常プログラム１２ａに対してデバッグ処理を行うために通常プログラム１２ａにアタッチされる（Ｓ３０１）。
デバッガ１４は、デバッグ処理実行時に保護モードで動作しているデバッグ機能７と通信するために、デバッガ用切替デバドラ１５をｏｐｅｎする（Ｓ３０２）。
【０１１３】
デバッガ１４は、デバッグ機能７に通常プログラム１２ａのプロセスＩＤを通知するために、デバッガ用切替デバドラ１５を経由して、通常プログラム１２ａのプロセスＩＤを、保護モードで動作するデバッグ機能７に通知する（Ｓ３０３）。
デバッグ機能７は、通知されたプロセスＩＤを保存し、保護プログラム８ａを実行するときに、実行開始直後に保護プログラムを停止するかどうかを示す停止フラグを有効にする（Ｓ３０４）。なお、停止フラグを有効にする処理を行う理由は後述の「１．４．３．２  前処理の補足」で説明する。停止フラグは、１ビットの情報であり、保護機構内でレジスタやメモリ等の記憶領域に記憶される。
【０１１４】
デバッガ１４は、プログラム開発者から、デバッグ処理にかかる操作を受け付けて、通常プログラム１２ａに対するデバッグ処理を行う。必要な処理を終えると、デバッガ１４は、プログラム開発者からプログラムの実行再開の操作を受け付けて、デバッグ対象である通常プログラム１２ａの実行を再開する（Ｓ３０５）。
実行が再開された通常プログラム１２ａは、切替デバドラ１３をｏｐｅｎし、保護プログラム８ａのロード処理（Ｓ３０６）と、保護プログラム８ａの実行処理（Ｓ３０７）とを切替デバドラ１３を経由して保護ＯＳ６に要求する。
【０１１５】
なお、ステップＳ３０６のロード処理は、図７に示したステップＳ２０２、Ｓ２０３、Ｓ２０４とほぼ同様である。また、ステップＳ３０７の実行処理は、図８のステップＳ２０６、Ｓ２０７、Ｓ２０８とほぼ同様である。異なるのは、デバッガ１４動作時には、通常プログラム１２ａがデバッグされているかどうかをデバッグ機能７が判断するために、各処理で受け渡しするデータと一緒に通常プログラム１２ａのプロセスＩＤが通知される（Ｓ３０３）、という点である。
【０１１６】
また、保護ＯＳ６が保護プログラム８ａの実行の要求を受け付けたとき、保護ＯＳ６は、デバッグ機能７に前処理の実行を要求する（Ｓ３０８）。デバッグ機能７は、要求を受け付けて前処理を行う。ここで、前処理とは、デバッグ機能７が、プロセスＩＤに対応する停止フラグが有効であるか判断し（Ｓ３０９）、有効になっている場合は（Ｓ３０９：ＹＥＳ）、保護プログラム８ａのエントリポイントにある命令をブレーク命令へ変更することをいう（Ｓ３１０）。なお、停止フラグが有効でなければ（Ｓ３０９：ＮＯ）、デバッグ機能７は、エントリポイントの命令を変更しない。
【０１１７】
保護ＯＳ６は、保護プログラム８ａを実行する（Ｓ３１１）。
１．４．３．２  前処理の補足
なお、上記の動作では、ステップＳ３０４で、停止フラグを有効にさせているが、このような処理を行っているのは、要するにプログラム開発者が容易にデバッグできるようにするためである。
【０１１８】
以下、このような処理を行っている理由を示すと、本実施の形態１では、デバッグを行わない場合の処理の説明にて述べたように、保護プログラム８ａは通常プログラム１２ａに呼び出された時にロードされ、必要なくなるとメモリ上から削除される。ここで、本実施の形態１のプログラムは通常プログラム１２ａの実行から開始するため、プログラム開発者は、保護プログラム８ａへ実行が切り替わったことを確認することが困難である。
【０１１９】
また、本実施の形態１のデバッガ１４は、通常プログラムにアタッチするものとしているので、プログラム開発者は、保護プログラム８ａに対して直接ブレークポイントを設定することもできず、保護プログラム８ａのデバッグが難しくなる。
そのため、プログラム開発者に保護プログラム８ａへ処理が移ったことを知らせ、保護プログラム８ａに対してブレークポイントの設定を可能とする機会等を与えるために、保護プログラム８ａが読み出された際には処理が停止するものとしている。
【０１２０】
１．４．４  デバッグ処理
図１２は、保護プログラム８ａ実行中にブレークポイントによるデバッグ例外が発生し、デバッガ１４を用いて保護プログラム８ａに対してデバッグ処理を行うときのフローチャートである。
１．４．４．１  デバッグ処理
図１２に示すように、保護プログラム８ａ実行中に、保護プログラム８ａに設定されたブレークポイントによるデバッグ例外が発生すると、保護ＯＳ６にデバッグ例外が通知される（Ｓ４０１）。
【０１２１】
保護ＯＳ６は、デバッグ例外の通知を受け付けて、切替デバドラ１３にデバッグ例外の発生を通知する（Ｓ４０２）。
切替デバドラ１３は、デバッグ例外の発生の通知を受け付けると、デバッガ１４にデバッグ処理を行わせるために、デバッグ要求受付部４４によりデバッガ１４へデバッグ処理実行を要求する（Ｓ４０３）。
【０１２２】
デバッガ１４は、デバッグ処理実行の要求を受け付けると、プログラム開発者へデバッグ情報を提供するために、デバッガ用切替デバドラ１５を経由して、保護ＯＳ６にデバッグ情報の取得を要求する（Ｓ４０４）。このとき、デバッガ１４のデバッガＩＤや、図示しないデバッグ用の通信領域の通知も保護ＯＳ６に要求する。ここで、デバッグ用の通信領域は、通常モードと保護モードとの両方がアクセス可能な領域であり、保護モードから通常モードへデバッグ情報を受け渡す際に使用する。
【０１２３】
保護ＯＳ６は、デバッグ機能７にデバッグ情報の取得を要求する（Ｓ４０５）。
デバッグ機能７は、保護プログラム８ａに対するデバッグ処理と、保護プログラム８ａの、デバッグ処理にかかる所定部分へのアクセスとが許可されているかどうかをデバッガＩＤ判定部２２およびアクセス判定部２３により判定する（Ｓ４０６）。
ステップＳ４０６において、デバッグ処理およびアクセスが許可されていたと判定された場合には（Ｓ４０６：ＹＥＳ）、デバッグ情報取得部２５は、保護プログラム８ａのデバッグ情報を取得し、デバッグ情報をデバッグ用通信用領域にコピーする（Ｓ４０７）。コピー後、デバッグ機能７は、デバッグ情報の取得の完了を、保護ＯＳ６、デバッガ用切替デバドラ１５を経由してデバッガ１４へと通知して、デバッグ機能７からデバッガ１４へと処理が戻る（Ｓ４０８）。
【０１２４】
デバッガ１４は、デバッグ用通信用領域にコピーされたデバッグ情報を取得し、図示しない表示部に表示することでプログラム開発者にデバッグ情報を示す（Ｓ４０９）。
その後、プログラム開発者が、デバッグ情報を参照して必要な処理を終えると、デバッガ１４は、プログラム開発者から所定の操作を受け付けて、デバッグ対象である保護プログラム８ａの実行再開を、切替デバドラ１３を経由して保護ＯＳ６に要求する（Ｓ４１０）。
【０１２５】
保護ＯＳ６は、実行再開の要求を受け付けて、保護プログラム８ａの実行を再開する（Ｓ４１１）。
この後、再びデバッグ例外が発生した場合には、同様のフローで処理が行われる。
１．４．４．２  デバッグ処理の補足
以上の例では、保護プログラム８ａ実行中にブレークポイントによるデバッグ例外が発生した場合の処理について説明した。この他にも、デバッグ機能７を使ったデバッグ処理のパターンとしては、様々なものが考えられる。具体的には、プログラム開発者によってブレークポイントの設定処理やレジスタ値・メモリ値の設定や取得処理などの他のデバッグ処理が要求され、この要求に応じてデバッグ機能７がデバッグ処理を行う。これらの場合にも、上記と同様のフローでデバッグ機能７（厳密には、セキュアデバッガ２４の持つ各機能部）により処理が行われるが、基本的な処理は同様であるので、詳細な説明は省略する。
【０１２６】
なお、本実施の形態１においては、デバッグ例外発生時に、その例外発生にかかる保護プログラム８ａに対するデバッグ処理を行えるとしたが、これは保護プログラム８に限定するものではない。デバッガ１４がデバッグしている通常プログラム１２ａなどの通常プログラムに対するデバッグ処理も行えるとしてもよい。
２  実施の形態２
以下、実施の形態２について説明する。実施の形態２では、特に、保護プログラム８の生成方法、および、保護プログラム８を生成するプログラム生成装置について説明する。
【０１２７】
２．１  プログラムの生成方法の概略
図１３は、本発明にかかる保護プログラム８の生成方法を説明するための図である。
保護プログラム８は、暗号化されて生成される。暗号化された保護プログラム７３が生成されるのに、保護プログラムソースコード７１と、保護プログラム生成装置７２と、保護プログラムに付加される情報である許可デバッガＩＤ格納ファイル７４とアクセス制御リスト格納ファイル７５、そして秘匿情報領域格納ファイル７６が用いられる。
【０１２８】
図１３に示す保護プログラムソースコード７１は、保護プログラム８の動作を記述したソースコードである。
保護プログラム生成装置７２は、保護プログラムソースコード７１のコンパイルとリンクを行う。生成された実行ファイルに許可デバッガＩＤ情報とアクセス制御リストを付加し、暗号化を行う。さらに、復号化に必要な情報を復号化用ヘッダ情報として付加することで、暗号化された保護プログラム７３を生成する。具体的には、後述する。
【０１２９】
暗号化された保護プログラム７３は、保護プログラム生成装置７２により生成されたプログラムである。
許可デバッガＩＤ格納ファイル７４とアクセス制御リスト格納ファイル７５は、それぞれ、保護プログラム８に対してデバッグが行われる時にデバッグ機能７やデバッガ１４が使用する許可デバッガＩＤ情報、アクセス制御リストを含むデータである。
【０１３０】
秘匿情報領域格納ファイル７６は、プログラム中の各情報の領域と、その領域に関する情報が秘匿情報か否かを示す秘匿情報区分から構成される。
保護プログラム開発者は、保護プログラムソースコード７１を作成する。また、ソースコード中でデバッガからのアクセスを許可する領域と不許可にする領域とをアクセス制御リストとして作成し、アクセス制御リスト格納ファイル７５に記す。さらに、秘匿情報の領域とそうでない領域を、秘匿情報領域格納ファイル７６に記す。許可デバッガＩＤ格納ファイル７４は、別途入手する。入手した許可デバッガＩＤ格納ファイル７４と保護プログラムソースコード７１、アクセス制御リスト格納ファイル７５、秘匿情報領域格納ファイル７６を入力として保護プログラム生成装置７２を動作させる。その結果、暗号化された保護プログラム７３が生成される。
【０１３１】
２．２  保護プログラム生成装置７２の構成
図１４は、保護プログラム生成装置７２の構成図である。
保護プログラム生成装置７２は、コンパイラ７７と、リンカ７８、保護プログラム化ツール７９から構成される。
２．２．１  コンパイラ７７
図１４に示すコンパイラ７７は、入力された保護プログラムソースコード７１をコンパイルしてオブジェクトファイルを生成する。変数や関数の配置を示すシンボル情報や、オブジェクトファイル中のプログラムコードとソースコードの対応関係などをデバッグ情報として作成し、オブジェクトファイルに付加する。
【０１３２】
２．２．２  リンカ７８
リンカ７８は、コンパイラ７７により生成されたオブジェクトファイルとライブラリとをリンクし、実行可能なファイルを生成する。さらに、リンカ７８は、生成された実行可能なファイル中のどこにどの変数や関数を配置したかを示すシンボルファイルを生成する。
【０１３３】
２．２．３  保護プログラム化ツール７９
保護プログラム化ツール７９は、リンカ７８が作成した実行可能ファイルのヘッダに、保護プログラム生成装置７２に入力される許可デバッガＩＤ格納ファイル７４に格納されている許可デバッガＩＤ情報と、アクセス制御リスト格納ファイル７５に格納されているアクセス制御リストとを付加する。さらに、秘匿情報領域格納ファイル７６に記載された各領域が秘匿情報であるか否かの情報をデバッグ情報に追加し、保護プログラムを生成する。
【０１３４】
保護プログラム化ツール７９は、生成された保護プログラムを、保護ＯＳ６と保護プログラム生成装置７２とで共通に保持している鍵により暗号化を行い、保護プログラムをロードするアドレスなどを復号化用ヘッダ情報として付加する。
なお、暗号化は、保護ＯＳ６と保護プログラム生成装置７２とが共通に保持している鍵を用いる（いわゆる共通鍵暗号方式）こととしたが、互いに異なる鍵を保持することとなる公開鍵暗号方式などを用いてもよいことは言うまでもない。
【０１３５】
なお、アクセス制御リストがシンボル名とアクセス許可情報の組という形式で与えられていた場合は、リンカ７８が出力したシンボルファイルを使用して、シンボル名からそのシンボルが配置されている領域を求め、アクセス制御リストのシンボル名を、その領域（つまり、実行可能なファイル中のどこかを示す情報）へ変更してもよい。
なお、暗号化された保護プログラム７３の構成は、実施の形態１において、図５を用いて説明した通りである。暗号化された保護プログラム７３は、保護プログラム本体５１と許可デバッガＩＤ情報５２、アクセス制御リスト５３、復号化用ヘッダ情報５４から構成され、許可デバッガＩＤ情報５２とアクセス制御リスト５３が保護プログラム本体５１のヘッダに付加され、暗号化された構造になっている。復号化用ヘッダ情報５４は復号に必要なデータを格納しているために暗号化はされない。
【０１３６】
２．３  保護プログラム生成装置７２の動作
次に、保護プログラム生成装置７２による、暗号化された保護プログラム７３を生成する処理について説明する。
図１５は、保護プログラム生成装置７２が、暗号化された保護プログラム７３を生成する処理を示すフローチャートである。
【０１３７】
なお、保護プログラムソースコード７１、アクセス制御リスト格納ファイル７５、秘匿情報領域格納ファイル７６は、プログラム開発者が既に作成しているものとする。すなわち、プログラム開発者は、保護プログラムソースコード７１を記述する。また、ソースコード中でデバッガのアクセスを不可にする領域と可能にする領域を決定してアクセス制御リストを作成し、アクセス制御リスト格納ファイル７５として記述する。また、秘匿情報が記されている領域を秘匿情報領域格納ファイルに記述する。
【０１３８】
また、プログラム開発者は、許可デバッガＩＤ格納ファイル７４を、別途入手しているものとする。
保護プログラム生成装置７２の動作について説明すると、保護プログラム生成装置７２は、保護プログラムソースコード７１と、許可デバッガＩＤ格納ファイル７４と、アクセス制御リスト格納ファイル７５と、秘匿情報領域格納ファイル７６とを入力として受け付ける（Ｓ５０１）。
【０１３９】
保護プログラム生成装置７２は、コンパイラ７７とリンカ７８を用いて、入力された保護プログラムソースコード７１のコンパイルとリンクを行う（Ｓ５０２）。
保護プログラム化ツール７９は、保護プログラムソースコード７１のコンパイルとリンクにより生成された保護プログラム本体５１に、アクセス制御リスト格納ファイル７５に格納されているアクセス制御リスト５３と、デバッガＩＤ格納ファイル７４に格納されている許可デバッガＩＤ情報５２とを付加し（Ｓ５０３）、さらに、秘匿情報領域格納ファイル７６に記載された各領域が秘匿情報であるか否かの情報をデバッグ情報に追加して、暗号化を行う（Ｓ５０４）。
【０１４０】
保護プログラム化ツール７９は、暗号化されたプログラムに保護プログラム本体５１のロード先アドレスなど復号に必要な情報を復号化用ヘッダ情報５４として付加し、暗号化された保護プログラム７３として出力する（Ｓ５０５）。
２．４  実施の形態２の補足説明
なお、上記の説明では、秘匿情報領域格納ファイル７６への書き込みをプログラム開発者が行うものとしたが、これに限られない。例えば、コンパイラ等のコンピュータプログラムが自動的にこれらのアクセス制御リストや秘匿情報格納ファイルの作成等を行ってもよい。より具体的には、ソースコードに対して秘匿情報のある箇所に予め何らかの印をつけておき、コンパイラがその印の有無に従って秘匿情報格納ファイルへの書き込みを行ったりしてもよい。
【０１４１】
また、上記の説明では、保護プログラムソースコードのコンパイルから保護プログラムの作成までの全ての処理を保護プログラム生成装置７２が行っているが、これに限られない。例えば、保護プログラムの生成と、アクセス制御リスト等の付加とを異なる装置で行うとしてもよい。この場合、保護プログラム生成装置７２は、保護プログラムソースコード７１をコンパイルおよびリンクして保護プログラム本体５１を生成する装置と、生成された保護プログラム本体５１を取得してアクセス制御リスト等を付加する装置との組として構成されることとなる。上述の構成では、保護プログラム本体５１を生成する装置は、入力として保護プログラムソースコード７１のみがあれば十分である。
【０１４２】
また、アクセス制御リスト等を付加する装置には、保護プログラム本体５１が与えられるので、保護プログラムソースコード７１の入力は不要である。このような構成だと、保護プログラム本体５１の作成とアクセス制御リスト等の付加を別々に行えるので、それぞれの作業を別会社等に委託することでプログラムの開発効率の向上を図ることなどができる。
【０１４３】
３  実施の形態３
以下、実施の形態３について説明する。実施の形態３では、特に、デバッガＩＤをどのように管理するかについて説明する。なお、実施の形態３においては、デバッガＩＤは、デバッガＩＤ管理サーバによって管理されているものとして説明する。
図１６は、デバッガＩＤ管理サーバによるデバッガＩＤの管理方法を説明するための図である。
【０１４４】
３．１  構成の説明
３．１．１  デバッガＩＤ管理サーバ８１
図１６に示すデバッガＩＤ管理サーバ８１は、デバッガＩＤを管理している。デバッガＩＤの管理は、後述するデバッガＩＤ管理ファイル９０を用いて行う。
保護プログラム開発者が誰であるかに応じて（または、保護プログラム開発者の用いる保護プログラム開発装置８２に応じて）デバッグ処理の実行可否を制御するためには、デバッガＩＤは、保護プログラム開発者ごと（または、保護プログラム開発装置８２ごと）にそれぞれ異なる値にすることが望ましい。そのため、デバッガＩＤ管理サーバ８１は、複数の保護プログラム開発者（または、保護プログラム開発装置８２）に同じデバッガＩＤが付与されないように管理する必要がある。
【０１４５】
デバッガＩＤ管理サーバ８１は、デバッガＩＤを管理する会社（デバッガＩＤ管理会社）が持つサーバである（なお、「会社」としているが、これに限るものではなく、デバッガＩＤを管理する管理者であれば、会社以外の組織や個人であってもよいことは言うまでもない）。
デバッガＩＤ管理サーバ８１は保護プログラム開発装置８２からの要求により、過去に発行したデバッガＩＤと異なるデバッガＩＤを発行し、発行したデバッガＩＤを格納したデバッガＩＤ格納ファイルを保護プログラム開発装置８２に提供する。また、デバッガＩＤ管理会社は、デバッガＩＤに対応したＩＤを持つデバッガを作成して保護プログラム開発装置８２に提供する。
【０１４６】
３．１．２  保護プログラム開発装置８２
保護プログラム開発装置８２は、保護プログラム生成装置７２を用いて保護プログラムを作成する。
具体的には、保護プログラム開発装置８２は、保護プログラム解析装置８３から、デバッガＩＤ格納ファイルを受け付ける。受け付けたデバッガＩＤ格納ファイルに示されるデバッガＩＤを取得して、許可デバッガＩＤ格納ファイル７４として、実施の形態２で説明した保護プログラム生成装置７２へ入力することで、取得したデバッガＩＤに示されるデバッガへのデバッグを許可する保護プログラム８を生成する。
【０１４７】
なお、保護プログラム開発装置８２は、保護プログラムを開発するプログラム開発者（個人もしくは組織）が所有している。
３．１．３  保護プログラム解析装置８３
保護プログラム解析装置８３は、保護プログラムに含まれる不具合の解析を行うための装置である。保護プログラム解析装置８３は、個人もしくは組織が所有している。
【０１４８】
具体的には、保護プログラム解析装置８３は、デバッガＩＤ管理サーバ８１からデバッガＩＤを発行してもらい、入手したデバッガＩＤ格納ファイルを、解析対象の保護プログラムを開発した保護プログラム開発装置８２に提供する。
デバッガＩＤ格納ファイルを提供した保護プログラム開発装置８２が、デバッガＩＤ格納ファイルに基づいて保護プログラムを生成すると、保護プログラム開発装置８２から、デバッグ可能な保護プログラムを入手し、その保護プログラムを解析する。
【０１４９】
３．２  デバッガＩＤ管理ファイル９０のデータ構造
図１７は、デバッガＩＤ管理サーバ８１がデバッガＩＤの管理に用いるデバッガＩＤ管理ファイル９０のデータ構造である。
デバッガＩＤ管理ファイル９０の１件のレコードは、管理番号９１と、デバッガＩＤ９２と、保護プログラムの開発者名９３と、連絡先９４とから構成される。
【０１５０】
管理番号９１には、デバッガＩＤ管理サーバ８１で発行済みのデバッガＩＤを管理するための番号が格納される。
デバッガＩＤ９２には、管理番号９１で管理されている発行済みのデバッガＩＤの値が格納される。なお、デバッガＩＤ９２は、各プログラム開発者（または、保護プログラム開発装置８２のそれぞれ）を識別でき、かつ、デバッガのデバッグＩＤをなりすましてデバッグ処理を行うなりすまし攻撃を防ぐために、十分な長さの数値列とすることが望ましい。
【０１５１】
保護プログラムの開発者名９３には、デバッガＩＤの発行を申請してきたプログラム開発者の名前が格納される。
連絡先９４には、デバッガＩＤの発行を申請してきたプログラム開発者の連絡先が格納される。
３．３  実施の形態３の補足説明
なお、実施の形態３において、デバッガＩＤ管理サーバ８１は、保護プログラム開発装置８２にデバッガを提供するとしたが、デバッガの提供先を保護プログラム開発装置８２に限定するものではない。例えば、保護プログラム解析装置８３に提供してもよい。
【０１５２】
また、デバッガＩＤ管理ファイル９０は発行済みのデバッガＩＤを管理するためのファイルとしたが、発行済みのデバッガＩＤに限定するものではなく、未発行のデバッグＩＤも一緒に管理してもよい。
さらに、デバッガＩＤ管理ファイル９０で発行済みデバッガＩＤの発行先のプログラム開発者の名前やその連絡先も管理するとしたが、発行済みのデバッガＩＤのみを管理するとしても良い。
【０１５３】
また、デバッガは、必ずしもデバッガＩＤ管理会社から提供されるものではなく、デバッグ管理会社からデバッガの開発を委託された他者のサーバ等から提供されるものとしてもよい。この場合、その他者は、デバッガＩＤの情報を、デバッガＩＤ管理サーバ８１から取得する。
４  実施の形態４
以下の実施の形態では、上述のデバッガ１４等が行ったデバッグ処理の結果を、どのように表示するかについて説明する。
【０１５４】
実施の形態４は、実施の形態１のデバッガに対して、プログラムの動作情報をグラフィカルユーザインターフェースに表示する表示手段を付加したものである。デバッガ本体の機能は実施の形態１と同様であるので、説明を省略する。
ここで、プログラムの動作情報とは、デバッグ対象となっているプログラムをデバッグするために参照する情報、つまり、プログラムの動作に関連する情報のことを指す。具体的には、以下の例では、動作情報は、プログラムのコードや、プログラムを実行しているプロセッサの各レジスタの値、ローカル変数のシンボル名とその値、シンボルにより指定された変数とその値、メモリの使用量等の値、関数の呼び出し階層、および、保護モードと通常モードのどちらのモードで動作しているかの情報などを指す。なお、実施の形態１を例とすると、保護プログラム８の動作情報は、デバッガ１４がデバッグ機能７を介して取得する情報に基づいて得られ、通常プログラム１２の動作情報は、デバッガ１４が直接取得する情報に基づいて得られる。
【０１５５】
４．１  ＧＵＩ１５０ａの説明
図１８は、プログラムの動作情報を表示するためのグラフィカルユーザインターフェース（ＧＵＩ）を示す。
図１８（ａ）には、デバッガ１４が通常プログラム１２にアタッチし、通常プログラム１２をデバッグしているときの表示手段の画面構成であるＧＵＩ１５０ａを示す。また、図１８（ｂ）には、通常プログラム１２が保護プログラム８を実行し、通常プログラム１２と保護プログラム８をデバッグしているときの表示手段の画面構成であるＧＵＩ１５０ｂを示す。
【０１５６】
図１８（ａ）に示すように、ＧＵＩ１５０ａは、コード表示部１５１、レジスタ表示部１５２、メモリ表示部１５３、シンボル表示部１５４、ウォッチポイント表示部１５５、コールスタック表示部１５６、ウィンドウタイトル表示部１５７、メニュー表示部１５８で構成される。
コード表示部１５１は、デバッグ対象のプログラムのコードを表示するための表示部で、ソースコードやアセンブラコード、マシン語が表示される。
【０１５７】
レジスタ表示部１５２には、プログラムを実行しているプロセッサの各レジスタの値が表示される。
メモリ表示部１５３には、メモリの値が表示される。
シンボル表示部１５４は、デバッグ対象のプログラムにおいて、停止した関数内で使用されているローカル変数のシンボル名とその値を表示する。
【０１５８】
ウォッチポイント表示部１５５は、シンボルにより指定された変数とその値を表示する。
コールスタック表示部１５６は、デバッグ対象のプログラムにおいて、停止させられた関数が呼び出されるまでの呼び出し階層を表示する。
ウィンドウタイトル表示部１５７は、ウィンドウのタイトルを表示するための表示部で、デバッガやデバッグ対象のプログラムのプログラム名やプログラムの状態が表示される。
【０１５９】
メニュー表示部１５８は、デバッガのメニューを表示する。メニューとしては、デバッグ対象のプログラムのオープンやアタッチ、デバッガの終了、デバッガの動作やプログラムの動作情報の表示方法を設定する設定画面の表示、デバッグ対象プログラムの実行や中断、再開、ステップ実行等がある。
モード表示部１５９は、プログラムがブレークポイント等により停止した時に、プログラムが実行されていたモードを表示するための表示部であり、通常プログラム実行中に停止した場合には通常モードであることを示すために「通常モード」と表示し、保護プログラム実行中に停止した場合には保護モードであることを示すために「保護モード」と表示する。
【０１６０】
４．２  ＧＵＩ１５０ａの説明の補足
なお、実施の形態４においては、通常プログラム１２と保護プログラム８のどちらでデバッグ例外が発生したかを表示するために、モード表示部に「通常モード」や「保護モード」と表示するとしているが、これに限られない。例えば、モードの表示を「通常モード」や「保護モード」の文字列に限定するものではなく、異なるモードであることが分かるような表示であれば、どのようなものでもよい。具体的な例を挙げると、アイコンなどであってもよい。さらに、表示箇所もモード表示部に限定するものではなく、ウィンドウ全体で表示してもよく、ウィンドウの色などで区別させるとしてもよい。また、モード表示用のウィンドウを別途設けるとしてもよい。
【０１６１】
これらの表示部には、デバッガ１４が通常プログラムにアタッチした直後や、通常プログラムがブレークポイント命令で停止し、デバッガ１４によるデバッグが可能な状態の時に、実行を停止している通常プログラムの停止時点での各種状態や、デバッガ１４の実行中にデバッガ１４の実行状態が表示される。さらにレジスタやメモリ、変数等に設定されている値をユーザからの入力等により変更することも出来る。
【０１６２】
４．３  ＧＵＩ１５０ｂの説明
図１８（ｂ）に示すように、ＧＵＩ１５０ｂは、通常プログラム用デバッグウィンドウ１６０と保護プログラム用デバッグウィンドウ１６１から構成される。
通常プログラム用デバッグウィンドウ１６０は、通常プログラム１２の各種情報を表示するためのウィンドウである。
【０１６３】
保護プログラム用デバッグウィンドウ１６１は、保護プログラムの各種情報を表示するためのウィンドウである。どちらのウィンドウ（通常プログラム用デバッグウィンドウ１６０、保護プログラム用デバッグウィンドウ１６１）もウィンドウ内には、図１８（ａ）の各表示部（コード表示部１５１、レジスタ表示部１５２、メモリ表示部１５３、シンボル表示部１５４、ウォッチポイント表示部１５５、コールスタック表示部１５６）が表示される構成になる。なお、図面が煩雑となるため、図１８（ｂ）では、これらの各表示部は載せていない。
【０１６４】
この様な表示手段を持つデバッガを用いて、デバッガのユーザが通常プログラム１２と保護プログラム８をデバッグするときには、デバッガの起動直後や、通常プログラムにアタッチした直後の状態では図１８（ａ）に示すような画面構成になっている。
その後、通常プログラム１２が保護プログラム８を実行し、保護プログラム８の実行中にブレークポイントによるデバッグ例外が発生した場合には、保護プログラムの各種情報を表示するために、図１８（ａ）の画面を２つに分割し、図１８（ｂ）に示すような画面構成に変更する。
【０１６５】
このとき、保護プログラム８のデバッグであることをユーザに知らせるために、ポップアップ表示を行い、さらにビープ音などの特定の音やユーザにより設定された音を鳴らし、モード表示部１５９に「保護モード」と表示することで、ユーザに保護モードであることを意識させる。
４．４  実施の形態４の補足
なお、実施の形態４において、保護プログラム８デバッグ時にデバッガのウィンドウが２つに分割されるとしたが、分割されることに限定するものではない。例えば、保護プログラムのデバッグ用に新しくウィンドウを生成してもよいし、タブやメニューにより通常プログラム用デバッグウィンドウ１６０と保護プログラム用デバッグウィンドウ１６１を切り替えられるようにしてもよい。
【０１６６】
保護プログラム８の実行中にデバッグ例外が発生し、デバッグ可能な状態になった場合には、保護プログラム用デバッグウィンドウ１６１にフォーカスが移り、保護プログラムに対してブレークポイントの設定やメモリ・レジスタ値の変更などが実施できる。さらに通常プログラム１２に対しても同様の設定や変更の操作を行うことが可能である。
なお、実施の形態４において、保護プログラム８の実行中にデバッグ例外が発生した場合に保護プログラム８のデバッグと通常プログラム１２のデバッグをデバッガのユーザが同時に行えるとしたが、同時にデバッグが行えることに限定するものではない。例えば、デバッグが行うことができる対象を保護プログラムのみに限定してもよく、通常プログラムのデバッグウィンドウ１６０にアクセスできないように制限してもよい。
【０１６７】
また、実施の形態１で述べたように、デバッガ１４とデバッグ機能７を用いた保護プログラム８のデバッグは、デバッガ１４によっては制限される。このため、保護プログラム８に対するデバッグ処理が許可されていない場合や、アクセス制御リストによりアクセスが許可されていない領域を表示しようとした場合など、各表示部に情報を表示できない場合がある。
【０１６８】
この様に、表示できない情報を要求された場合には、表示できないことを、デバッガを使用しているユーザに知らせる必要がある。この様な表示できない情報があることを知らせる方法として、表示できない旨のポップアップ表示を行い、さらにビープ音などの特定の音やユーザにより設定された音を鳴らし、表示できない部分を「＊」など特定の文字列で表示する。
【０１６９】
なお、上記では、表示できない部分を「＊」などの特定の文字列で表示するとしたが、特定の文字列で表示することに限定するものではなく、アイコンを表示してもよいし、何も表示しなくてもよい。また、表示できない部分の背景色を、表示できる部分の背景色と異なるようにしてもよい。
また、保護プログラム８をデバッグするときには、保護プログラム８の中の秘匿情報や、通常プログラム１２と保護プログラム８との通信用の共有領域など、プログラムの開発や解析にあたって重要な情報や領域が存在する。このためデバッガ１４では、この様な注意しなければならない情報や領域の表示方法を工夫することで、デバッガを使用しているユーザに注意を促すことが望ましい。
【０１７０】
秘匿情報の表示方法としては、デバッガ１４が保護プログラム８に対するデバッグ処理の実行時に、保護プログラム８のデバッグ情報に含まれている秘匿情報領域に関する情報を取得し、各表示部に情報を表示する時に表示しようとしているコードやデータが秘匿情報領域に含まれているかどうかを判定する。
判定の結果、秘匿情報であった場合には、ユーザによる設定で秘匿情報を表示しないと設定されていた場合には、秘匿情報を表示せず、その部分が空白になった状態で表示される。
【０１７１】
一方、秘匿情報を表示すると設定されていた場合には、その秘匿情報を表示するときの文字の色をユーザにより設定された色（例えば赤色）にすることで、秘匿情報であることを強調する。さらに、情報を表示する時に秘匿情報を表示する旨のポップアップ表示を行い、ビープ音などの特定の音やユーザにより設定された音を鳴らす。この様に動作することで、ユーザに秘匿情報であると注意を促す。
【０１７２】
なお、実施の形態４において、秘匿情報を表示しないと設定されていた場合にはその部分が空白になった状態で表示されるとしたが、空白の状態で表示することに限定するものではなく、秘匿情報が表示される部分を背景色と別の色で塗りつぶしてもよく、アイコンを用いてもよい。すなわち、ユーザから秘匿情報の内容が見えない状態に出来ればどのような表示方法でもよい。
【０１７３】
通常プログラム１２と保護プログラム８とで共有する情報である共有情報の表示方法としては、デバッガ１４が保護プログラム８に対するデバッグ処理の実行時に、保護ＯＳ６から通常モードと保護モードで情報を共有している領域に関する情報を取得し、各表示部に情報を表示する時に表示しようとしているコードやデータの領域が共有情報の領域に含まれているかどうかをチェックする。
【０１７４】
共有情報の領域であった場合には、その領域の情報を表示するときの文字の色をユーザにより設定された色（例えば黄色）にすることで、共有情報であることを強調する。さらに、情報を表示する時に共有情報を表示する旨のポップアップ表示を行い、ビープ音などの特定の音やユーザにより設定された音を鳴らす。この様に動作することで、ユーザに共有情報であると注意を促す。
【０１７５】
なお、共有情報についても秘匿情報と同様に多様な表示方法を適用するとしてもよいが、共有情報と秘匿情報とが区別できるように秘匿情報とでは異なる表示方法を用いた方がよい。
なお、本実施の形態４において、秘匿情報や共有情報を表示するときの文字の色をユーザにより設定された色にするとしたが、文字の色を変更することに限定するものではなく、背景の色を変更してもよいし、太字や斜体など文字のスタイルを変更したり、下線や網掛けなど字飾りを付けてもよく、さらに、秘匿情報や共有情報全体を囲うなどしてもよい。
【０１７６】
５  実施の形態５
実施の形態５は、実施の形態１のデバッガに対して、実施の形態４とは異なり、プログラムの動作情報をキャラクタベースのユーザインタフェースに表示する表示手段を付加したものである。実施の形態５でも、デバッガ本体の機能は実施の形態１と同様であるので、説明を省略する。
【０１７７】
５．１  ＣＵＩの説明
図１９は、本発明実施の形態５におけるキャラクタベースユーザインターフェース（ＣＵＩ１７０）の表示方法の説明図である。
デバッガ１４は、起動されると、コンソールと異なる、例えば「（ｄｂｇ）」の様なプロンプトを表示し、デバッガ１４が使用できる状態にあることを示す。この状態は、通常プログラム１２がデバッグ可能であることを示している（デバッグ処理結果の表示例１７１ａ）。
【０１７８】
通常プログラム１２が実行され、通常プログラム１２により保護プログラム８が実行されると、実施の形態１で述べた動作に従い、一番最初の実行時に保護プログラムのエントリポイントに設定されたブレークポイントでデバッグ例外が発生される。
この時デバッガ１４は、保護プログラム８がデバッグ可能であることを示すために、通常プログラム１２のデバッグ時とは異なる、例えば「（ｄｂｇ−ｓｅｃ）」の様なプロンプトを表示することでユーザが区別できるようにする。なお、プロンプトと、デバッガ１４からのメッセージとの表示は、ユーザが区別できるように表示する。例えば、図示するように、括弧を用いてプロンプトを表すこととしてもよい。
【０１７９】
また、デバッガ１４は、保護プログラム８の実行中に停止した場合には、プロンプトやデバッガ１４からのメッセージ、ユーザから入力された文字のスタイルを斜体に変更することで、保護プログラム８の実行中に停止していることを表示し、ユーザが区別出来るようにする（デバッグ処理結果の表示例１７１ｂ）。
上記の状態では、実行が停止したプログラムを対象としたデバッグが可能となるが、実施の形態５では通常プログラム１２と保護プログラム８とが連係動作している状態を対象としたデバッグを行うので、通常プログラム１２の実行中に保護プログラム８をデバッグしたり、逆に保護プログラム８の実行中に通常プログラム１２をデバッグできるようにすることが望ましい。
【０１８０】
以下、このような場合に用いるインタフェースについて説明を行う。
まず、通常プログラム１２の実行中にデバッグ例外が発生し、通常プログラム１２がデバッグ可能な状態の時、通常プログラム１２のデバッグではなく、保護プログラム８のデバッグをデバッガ１４のユーザが行いたい場合がある。この場合は、通常プログラム１２がデバッグ可能な状態で、「ｓｅｃｕｒｅ」というコマンドを入力することにより、データ処理装置１が保護モードに移行して保護プログラム８がデバッグ可能な状態になる。
【０１８１】
このとき、プロンプトは、「（ｄｂｇ）」から「（ｄｂｇ−ｓｅｃ）」へ変更されるが、通常プログラム１２の実行中に停止したという状態は変わらないので、字体は斜体などに変化しない（デバッグ処理結果の表示例１７１ｃ）。
逆に、保護プログラム８の実行中にデバッグ例外が発生し、保護プログラムがデバッグ可能な状態の時、保護プログラムのデバッグではなく、通常プログラムのデバッグが行いたい場合には、「ｎｏｒｍａｌ」というコマンドを入力することにより、通常プログラムがデバッグ可能な状態になる。
【０１８２】
このとき、プロンプトは、「（ｄｂｇ−ｓｅｃ）」から「（ｄｂｇ）」へ変更されるが、保護プログラム８の実行中に停止したという状態は変わらないので、字体は斜体で表示されたままであり、通常の字体に戻ったりはしない（デバッグ処理結果の表示例１７１ｄ）。
デバッガ１４のユーザが保護プログラム８のデバッグをしようとした場合に、デバッグが許可されていなかったり、アクセスが禁止されている領域の情報を表示しようとした場合には、コマンドを入力した時に、「Ａｃｃｅｓｓ  ｉｎｖａｌｉｄ」などを表示することで、ユーザにデバッグが許可されていないことやアクセスが禁止されていることを通知する。
【０１８３】
５．２  実施の形態５の補足
なお、実施の形態５において、通常プログラム１２がデバッグ可能か保護プログラム８がデバッグ可能かを区別するために表示されるプロンプトを変更するとしたが、プロンプトを変更することに限定するものではない。
例えば、プロンプトとは別にユーザから要求された処理が終わるたびに現在の状態を示す文字を表示してもよい。また、プロンプトやデバッガからのメッセージ、ユーザから入力された文字のスタイルを太字や斜体に変更するとしてもよいし、文字の色や背景色を変更するとしてもよいし、下線や網掛けなど字飾りを付けてもよい。
【０１８４】
さらに、通常プログラム１２の実行中に停止したか保護プログラム実行中に停止したかを区別するために文字のスタイルを斜体に変更するとしたが、文字のスタイルを斜体にすることに限定するものではない。
例えば、太字などの他のスタイルに変更するとしてもよいし、文字の色や背景色を変更するとしてもよいし、下線や網掛けなど字飾りを付けてもよい。さらに、行頭に通常プログラム１２の実行中に停止したのか保護プログラム８の実行中に停止したのかが分かるような文字列を表示してもよい。
【０１８５】
また、通常プログラム１２か保護プログラム８が停止し、ユーザがコマンドを入力可能になる度や通常プログラム１２のデバッグと保護プログラム８のデバッグが切り替わる度に、以前の出力をすべて消すとしてもよい。
なお、本実施形態では、コマンドやメッセージの一例を以下のようにしている。
メッセージ「Ｃｈａｎｇｅ  ｔｏ  Ｓｅｃｕｒｅ  ｍｏｄｅ．」は、データ処理装置１が保護モードに移行したことを示すものである。メッセージ「Ｃｈａｎｇｅ  ｔｏ  Ｎｏｒｍａｌ  ｍｏｄｅ．」は、データ処理装置１が通常モードに移行したことを示すものである。メッセージは、ユーザの入力したコマンドに応じた処理をデータ処理装置１が行った後、その処理の結果を通知するものである。
【０１８６】
なお、コマンド「ｓｅｃｕｒｅ」は、保護モードに移行するためのコマンドで、コマンド「ｎｏｒｍａｌ」は、通常モードに移行するためのコマンドであるとする。
なお、デバッガに対して入力できるコマンドや、コマンドに応じて出力されるメッセージは、各デバッガに応じて異なるため、詳細な説明は省略する。
６  補足
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）上述の実施の形態では、許可デバッガＩＤ情報５２やアクセス制御リスト５３は、保護プログラム８に含まれることとしたが、これに限らず、許可デバッガＩＤ情報５２やアクセス制御リスト５３を、データ処理装置の外部から取得することとしてもよい。この場合、取得にかかる許可デバッガＩＤ情報５２等が、どの保護プログラム８と対応しているかを示す情報を併せて取得するとよい。
【０１８７】
こうすることで、保護プログラム８に対するデバッグ処理実行の可否の判定を容易に行うことができる。
なお、許可デバッガＩＤ情報５２等は、デバッグ可能なデバッガＩＤや、アクセス可能な領域を示すものであるため、解析されると、保護プログラム８の保護が図れなくなるため、不正アクセスによって暴露されないよう、データ処理装置において保護機構等の安全な領域で記憶する必要がある。
【０１８８】
また、許可デバッガＩＤ情報５２等の取得も、不正者の盗聴等により不正取得されないよう安全に行われる必要があることは言うまでもない。
（２）上記の実施の形態では、保護プログラム８や通常プログラム１２は保護ＯＳ６や通常ＯＳ１１上で動作するものとしたが、これに限られるものではない。例えば、ＯＳを介さずに直接動作するものとしてもよい。
【０１８９】
この場合、デバッグ機能７や切替デバドラ１３およびデバッガ用切替デバドラ１５はＬＳＩ２の機能等として設けられ、各ＯＳが行っていた割り込みの監視等の処理も行うこととなる。また、デバッガ１４も直接的にＬＳＩ２上のＣＰＵ等で実行可能な言語で作成されたものとすること等が考えられる。
（３）上記の実施の形態では、デバッガ１４、切替デバドラ１３、デバッガ用切替デバドラ１５、デバッグ機能７等はＬＳＩ２上で動作するソフトウェアとして実装されているものとしたが、これに限られるものでない。例えば、ＬＳＩ２の機能として実現したり、ＬＳＩ２と相互に通信しあうハードウェア等の形で実現してもよい。また、各構成要素の一部のみをＬＳＩ２の機能として実現したり、ハードウェアとして実現したりしてもよい。
（４）上記の実施の形態３では、複数の保護プログラム開発装置８２を所有する組織等のために、保護プログラム開発装置８２を介して送信される要求に応じて、同一のデバッガＩＤを複数の保護プログラム開発装置８２に付与したりしてもよい。
（５）上記の実施の形態４および実施の形態５では、図１８および図１９を参照してユーザインタフェースの例を紹介したが、ユーザインタフェースの表示は、図１８および図１９に示されるようなものに限られない。
【０１９０】
すなわち、インタフェースを構成する一部の構成要素を表示しないとしてもよいし、各構成要素の表示位置を適宜入れ替えたり、文字等の書体を別のものにしたりしてもよいことは言うまでもない。
（６）上記の実施の形態では、デバッグ機能７は、デバッガＩＤの確認によりデバッグが許可されていることを確認し、アクセス制御リストの確認により要求している領域へのアクセスが許可されている場合のみ、デバッグを行うことが許可されるとしたが、いずれか一方の確認のみでデバッグを許可されるとしてもよい。
【０１９１】
また、確認の順序もデバッガＩＤの確認の後にアクセス制御リストの確認を行うという順序に限らず、どちらを先に確認してもよい。
（７）上記の実施の形態では、デバッガ１４は、通常プログラム１２にアタッチし、その通常プログラム１２と連係動作する保護プログラム８に対するデバッグ処理を行うものとしたが、これに限られるものではない。例えば、保護プログラム８に直接アタッチできるデバッガであるとしてもよい。
【０１９２】
この場合、デバッガ１４はロードされていないプログラムにアタッチできないので、保護プログラム８は予めメモリ上にロードされ、保護プログラム８で発生したデバッグ例外はデバッガ用切替デバドラ１５を経由してデバッガ１４に通知される。
さらに、データ処理装置が保護モードで使用可能な入出力装置を有している場合には、デバッガは通常モードではなく保護モードで動作するようにしてもよい。この場合、デバッグ機能７とデバッガ１４は、デバッガ用切替デバドラ１５を経由することなく、直接通信する。
（８）上記の実施の形態では、前処理において停止フラグを有効にすることで、保護プログラム８等の実行開始時に必ずプログラムが停止するものとしているが、これに限られるものではない。
【０１９３】
例えば、変形例（７）のようにデバッガ１４が直接保護プログラム８にアタッチしてブレークポイントを設定できる場合や、通常プログラム１２のみをデバッグしたい場合には、保護プログラム８の実行開始時に必ずプログラムが停止すると不便である。そのため、前処理時に常に停止フラグを有効にするのではなく、ユーザの選択により有効にするか否かを決定できるとしてもよい。
（９）上記の実施の形態では、デバッガＩＤの生成の仕方について特に言及していないが、以下のようにすることが考えられる。
【０１９４】
例えば、デバッガＩＤ管理サーバ８１が乱数を生成してデバッガＩＤとしてデバッガに割り当てることとしても良い。
また、この他には、例えば、保護プログラム８の一部または全体のハッシュ値をデバッガＩＤとして用いてもよい。
この場合、デバッガＩＤ判定部２２は、比較値保持部３３に、デバッガ１４のデバッガＩＤを保持しておく。デバッガ１４からデバッグが要求されると、デバッガＩＤ演算部３２は、デバッグ要求の対象となっている保護プログラム８のハッシュ値を計算し、計算結果と、比較値保持部３３が保持している値とをデバッガＩＤ比較部３１が比較することにより判定を行う。
【０１９５】
これにより、保護プログラム８の中身が変化している場合にはハッシュ値とデバッガＩＤとの比較が成功しないため、保護プログラム８をアップデートすると自動的に古いデバッガによるデバッグを禁止することが出来る。
なお、この場合、実施の形態３における保護プログラム開発装置８２は、デバッガＩＤ管理サーバ８１に対して、保護プログラム８のうち、ハッシュ値が取られる箇所が完成した時点でその保護プログラム８を送信する。デバッガＩＤ管理サーバ８１は、保護プログラム８のハッシュ値を計算し、そのハッシュ値をデバッガＩＤとして保護プログラム開発装置８２に返送する。返送されたデバッガＩＤは、保護プログラム８の開発者のみが知りうる情報である。したがって、デバッガの作者は、この保護プログラム８のデバッグに対応したデバッガを作成するには、かかるデバッガＩＤを保護プログラム８の開発者から通知してもらい、通知により取得したデバッガＩＤを、デバッガ１４に割り当てる必要がある。ただし、上記の場合でも、デバッガＩＤ管理サーバ８１の所有者とデバッガの作者とが同一である場合は、デバッガの作者はデバッガＩＤの通知を受けなくともデバッガを作成できる。なぜなら、デバッガの作者は自身が所有するデバッガＩＤ管理サーバ８１からデバッガＩＤを知ることが出来るからである。
【０１９６】
また、上述のようにハッシュ値を用いる場合、ハッシュ値を計算することにより、保護プログラム８に対するデバッグ処理が可能なデバッガのデバッガＩＤが算出されるので、保護プログラム８に許可デバッガＩＤ情報５２を含ませておく必要がない。
さらに、デバッガＩＤには、プログラム開発者ごとの値とプログラムごとの値とが含まれることとしてもよい。この場合、プログラム開発者ごとの値のチェックによりプログラム開発者単位でのデバッグ許可／不許可を確認し、プログラム開発者単位でのデバッグ許可がある場合にのみ、プログラム単位の値をチェックすることによりプログラム単位でのデバッグ許可を確認する等とすることで、より細かなデバッグ制御を実現できる。
（１０）上述の実施の形態では、保護プログラム８ａ実行中にブレークポイントによるデバッグ例外が発生したことを検出して保護プログラム８ａに対するデバッグ処理を行う場合を説明した。これに限らず、保護プログラム８の実行中に一般的なエラー割り込みが発生した場合に、その割り込みが検出されることでデバッガ１４によるデバッグ処理が行われるとしても良い。一般的なエラー割り込みとは、例えば、保護プログラム８実行中に０による除算が発生した場合や、オーバーフローが発生した場合などがある。一般的なエラー割り込みが発生した場合に、保護ＯＳ６がデバッグ例外の発生を切替デバドラ１３に通知する等の処理を行うことにより（Ｓ４０２等）、デバッガ１４は、保護プログラム８に対するデバッグ処理を行うことができる。
（１１）上述の実施の形態では、保護プログラム８に対するデバッグ処理の実行の可否を制御することとしたが、これに限らず、通常プログラム１２についても、デバッグ処理を許可するデバッガのデバッガＩＤを割り当てて、通常プログラム１２に対するデバッグ処理の実行の可否を制御することとしてもよい。
（１２）上述した構成要素の一部、または全部をＬＳＩ等の集積回路として実現してもよい。この場合の集積回路はＬＳＩ２と同一の集積回路であってもよいし、異なる集積回路であってもよい。
【０１９７】
なお、ＬＳＩは集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもあるが、システムＬＳＩ２を上記のいずれの集積度で実現した場合も本発明に含まれることは言うまでもない。また、ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
【０１９８】
さらには、半導体技術の進歩または派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて構成要素の集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
（１３）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をＣＰＵの処理として実現するプログラムであるとしてもよいし、前記コンピュータプログラムからなるディジタル信号であるとしてもよい。
（１４）また、本発明は、前記コンピュータプログラムまたは前記ディジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙＤｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記ディジタル信号であるとしてもよい。
（１５）これらの実施の形態および変形例の組合せであってもよい。
【産業上の利用可能性】
【０１９９】
本発明にかかるデータ処理装置は、デバッグ処理の実行の可否を制御することでプログラムの保護を図ることができ、特に、プログラムを保護しつつ開発を支援するための装置として有用である。
【図面の簡単な説明】
【０２００】
【図１】本発明の実施の形態１におけるデータ処理装置１の概略図。
【図２】デバッグ機能７の詳細なブロック図。
【図３】デバッガＩＤ判定部２２の詳細なブロック図。
【図４】切替デバドラ１３のブロック図。
【図５】暗号化された保護プログラム７３を示す図。
【図６】アクセス判定部２３が取得するアクセス制御リスト５３のデータ構造の例を示す図。
【図７】デバッグ機能７の動作を示す図。
【図８】本発明の実施の形態１における、デバッグを行わない場合の通常プログラム１２および保護プログラム８の実行のフローチャート。
【図９】通常プログラム１２が、保護プログラム８の機能の実行を必要とする場合の動作を示すフローチャート。
【図１０】通常プログラム１２ａが保護プログラム８ａの使用を終了する場合の動作を示すフローチャート。
【図１１】デバッガ１４が、通常プログラム１２と保護プログラム８とに対するデバッグ処理を行うための前処理を示すフローチャート。
【図１２】保護プログラム８ａ実行中にブレークポイントによるデバッグ例外が発生し、デバッガ１４を用いて保護プログラム８ａに対してデバッグ処理を行うときのフローチャート。
【図１３】本発明にかかる保護プログラム８の生成方法を説明するための図。
【図１４】保護プログラム生成装置７２の構成図。
【図１５】保護プログラム生成装置７２が、暗号化された保護プログラム７３を生成する処理を示すフローチャート。
【図１６】デバッガＩＤ管理サーバによるデバッガＩＤの管理方法を説明するための図。
【図１７】デバッガＩＤ管理サーバ８１がデバッガＩＤの管理に用いるデバッガＩＤ管理ファイル９０のデータ構造を示す図。
【図１８】プログラムの動作情報を表示するためのグラフィカルユーザインターフェース（ＧＵＩ）を示す図。
【図１９】本発明実施の形態５におけるキャラクタベースユーザインターフェース（ＣＵＩ）の表示方法の説明図。
【符号の説明】
【０２０１】
１  データ処理装置
２  ＬＳＩ
３  切替機構
６  保護ＯＳ
７  デバッグ機能
８  保護プログラム
１１  通常ＯＳ
１２  通常プログラム
１３  切替デバイスドライバ
１４  デバッガ
１５  デバッガ用切替デバイスドライバ
２１  制御部
２２  デバッガＩＤ判定部
２３  アクセス判定部
２４  セキュアデバッガ
２５  デバッグ情報取得部
２６  ブレークポイント設定部
２７  レジスタ値取得設定部
２８  メモリ値取得設定部
３１  デバッガＩＤ比較部
３２  デバッガＩＤ演算部
３３  比較値保持部
４１  切替操作部
４２  要求振り分け部
４３  通常要求受付部
４４  デバッグ要求受付部
５１  保護プログラム本体
５２  許可デバッガＩＤ情報
５３  アクセス制御リスト
５４  復号化用ヘッダ情報
６０  アクセス制御リスト
６１  開始アドレス
６２  終了アドレス
６３  アクセス許可情報
６４  シンボル名
６５  アクセス許可情報
７１  保護プログラムソースコード
７２  保護プログラム生成装置
７３  暗号化された保護プログラム
７４  許可デバッガＩＤ格納ファイル
７５  アクセス制御リスト格納ファイル
７６  秘匿情報領域格納ファイル
７７  コンパイラ
７８  リンカ
７９  保護プログラム化ツール
８１  デバッガＩＤ管理サーバ
８２  保護プログラム開発装置
８３  保護プログラム解析装置
９０  デバッガＩＤ管理ファイル
９１  管理番号
９２  デバッガＩＤ
９３  保護プログラムの開発者名
９４  連絡先
１５０  ＧＵＩ
１５１  コード表示部
１５２  レジスタ表示部
１５３  メモリ表示部
１５４  シンボル表示部
１５５  ウォッチポイント表示部
１５６  コールスタック表示部
１５７  ウィンドウタイトル表示部
１５８  メニュー表示部
１５９  モード表示部
１６０  通常プログラム用デバッグウィンドウ
１６１  保護プログラム用デバッグウィンドウ
１７０  ＣＵＩ
１７１  デバッグ処理結果の表示例
【図１】
0004814319.tif 000002
【図２】
0004814319.tif 000003
【図３】
0004814319.tif 000004
【図４】
0004814319.tif 000005
【図５】
0004814319.tif 000006
【図６】
0004814319.tif 000007
【図７】
0004814319.tif 000008
【図８】
0004814319.tif 000009
【図９】
0004814319.tif 000010
【図１０】
0004814319.tif 000011
【図１１】
0004814319.tif 000012
【図１２】
0004814319.tif 000013
【図１３】
0004814319.tif 000014
【図１４】
0004814319.tif 000015
【図１５】
0004814319.tif 000016
【図１６】
0004814319.tif 000017
【図１７】
0004814319.tif 000018
【図１８】
0004814319.tif 000019
【図１９】
0004814319.tif 000020