(57)【要約】      （修正有）【課題】外部からの攻撃による改竄を、複雑な回路を必要とせずに、より効率良くチェックすることが可能な電子情報記憶媒体、ＩＣカード、改竄チェック方法、及びプログラムを提供する。【解決手段】セキュアエレメントは、アプリケーションが有するバイトコードにしたがって呼び出された関数による処理結果を改竄チェック対象となる第１データとしてアプリケーションメモリ領域Ｍ１に記憶し、当該処理の開始から終了に至るまでの何れかのタイミングで得られた第２データをＯＳメモリ領域Ｍ２に記憶し、第１データ及び第２データを用いて改竄チェックを実行する。【選択図】図４
2020135265.tif 000002
【特許請求の範囲】
【請求項１】
所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体であって、
前記処理結果を、改竄チェック対象となる第１データとして記憶する第１記憶部と、
前記処理の開始から終了に至るまでの何れかのタイミングで得られた第２データを記憶する第２記憶部と、
前記第１データ及び前記第２データを用いて改竄チェックを実行する改竄チェック部と、
を備えることを特徴とする電子情報記憶媒体。
【請求項２】
前記関数は、前記電子情報記憶媒体に搭載されたアプリケーションが有する前記命令コードにしたがって当該アプリケーションから呼び出される第１ＡＰＩ（Application Programming Interface）に含まれることを特徴とする請求項１に記載の電子情報記憶媒体。
【請求項３】
前記第１データは、前記第１ＡＰＩから前記アプリケーションに応答された戻り値であり、前記アプリケーションにより利用される前記第１記憶部に記憶され、
前記第２データは、前記電子情報記憶媒体に搭載されたオペレーティングシステムにより利用される前記第２記憶部に記憶されることを特徴とする請求項２に記載の電子情報記憶媒体。
【請求項４】
前記アプリケーションから呼び出される第２ＡＰＩであって前記第１ＡＰＩとは異なる当該第２ＡＰＩによる処理において、前記改竄チェック部は、前記第１データ及び前記第２データを用いて改竄チェックを実行することを特徴とする請求項３に記載の電子情報記憶媒体。
【請求項５】
前記アプリケーションから呼び出される第２ＡＰＩであって前記第１ＡＰＩとは異なる当該第２ＡＰＩによる処理において、前記第２記憶部から前記第２データが取得され、当該第２データが戻り値として前記アプリケーションに応答され、
前記アプリケーションによる処理において、前記改竄チェック部は、前記第１データ及び前記第２データを用いて改竄チェックを実行することを特徴とする請求項３に記載の電子情報記憶媒体。
【請求項６】
前記第２記憶部は、前記処理の終了に至った時点で得られた第２データを記憶し、
前記改竄チェック部は、前記第１データと前記第２データとが一致しているか否かを判定することで改竄チェックを実行することを特徴とする請求項１乃至５の何れか一項に記載の電子情報記憶媒体。
【請求項７】
前記第２記憶部は、前記処理の終了に至る前の時点で得られた第２データを記憶し、
前記改竄チェック部は、前記処理の終了に至る前の時点で得られた第２データに基づいて、前記処理の終了に至る前の時点から前記処理の終了に至った時点までに行われるべき処理により第３データを算出し、前記第１データと前記第３データとが一致しているか否かを判定することで改竄チェックを実行することを特徴とする請求項１乃至５の何れか一項に記載の電子情報記憶媒体。
【請求項８】
前記改竄チェック部は、前記第１データ、及び前記第２記憶部に直近に記憶された前記第２データを用いて改竄チェックを実行することを特徴とする請求項１乃至７の何れか一項に記載の電子情報記憶媒体。
【請求項９】
前記第２記憶部は、複数の前記関数のそれぞれによる処理に応じた前記第２データを前記関数毎に区別して記憶し、
前記改竄チェック部は、前記第１データ、及び前記第２記憶部により記憶された複数の前記第２データのうちから指定された関数による処理に応じた前記第２データを用いて改竄チェックを実行することを特徴とする請求項１乃至７の何れか一項に記載の電子情報記憶媒体。
【請求項１０】
所定の命令コードにしたがって第１ＡＰＩを呼び出し、呼び出された第１ＡＰＩによる処理を実行する電子情報記憶媒体であって、
チェック用となる複数の第２ＡＰＩのうち、前記第１ＡＰＩによる第１処理結果に応じた第２ＡＰＩを呼び出し、呼び出された第２ＡＰＩによる処理を実行し、
前記第１ＡＰＩによる第１処理結果と、前記第２ＡＰＩによる第２処理結果とを用いて改竄チェックを実行する改竄チェック部と、
を備えることを特徴とする電子情報記憶媒体。
【請求項１１】
所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶するＩＣカードであって、
前記処理結果を、改竄チェック対象となる第１データとして記憶する第１記憶部と、
前記処理の開始から終了に至るまでの何れかのタイミングで得られた第２データを記憶する第２記憶部と、
前記第１データ及び前記第２データを用いて改竄チェックを実行する改竄チェック部と、
を備えることを特徴とするＩＣカード。
【請求項１２】
所定の命令コードにしたがって第１ＡＰＩを呼び出し、呼び出された第１ＡＰＩによる処理を実行するＩＣカードであって、
チェック用となる複数の第２ＡＰＩのうち、前記第１ＡＰＩによる第１処理結果に応じた第２ＡＰＩを呼び出し、呼び出された第２ＡＰＩによる処理を実行し、
前記第１ＡＰＩによる第１処理結果と、前記第２ＡＰＩによる第２処理結果とを用いて改竄チェックを実行する改竄チェック部と、
を備えることを特徴とするＩＣカード。
【請求項１３】
所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体に含まれるコンピュータにより実行される改竄チェック方法であって、
前記処理結果を、改竄チェック対象となる第１データとして第１記憶部に記憶するステップと、
前記処理の開始から終了に至るまでの何れかのタイミングで得られた第２データを第２記憶部に記憶するステップと、
前記第１データ及び前記第２データを用いて改竄チェックを実行するステップと、
を含むことを特徴とする改竄チェック方法。
【請求項１４】
所定の命令コードにしたがって第１ＡＰＩを呼び出し、呼び出された第１ＡＰＩによる処理を実行する電子情報記憶媒体に含まれるコンピュータにより実行される改竄チェック方法であって、
チェック用となる複数の第２ＡＰＩのうち、前記第１ＡＰＩによる第１処理結果に応じた第２ＡＰＩを呼び出し、呼び出された第２ＡＰＩによる処理を実行するステップと、
前記第１ＡＰＩによる第１処理結果と、前記第２ＡＰＩによる第２処理結果とを用いて改竄チェックを実行するステップと、
を備えることを特徴とする改竄チェック方法。
【請求項１５】
所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体に含まれるコンピュータに、
前記処理結果を、改竄チェック対象となる第１データとして第１記憶部に記憶するステップと、
前記処理の開始から終了に至るまでの何れかのタイミングで得られた第２データを第２記憶部に記憶するステップと、
前記第１データ及び前記第２データを用いて改竄チェックを実行するステップと、
を実行させることを特徴とするプログラム。
【請求項１６】
所定の命令コードにしたがって第１ＡＰＩを呼び出し、呼び出された第１ＡＰＩによる処理を実行する電子情報記憶媒体に含まれるコンピュータに、
チェック用となる複数の第２ＡＰＩのうち、前記第１ＡＰＩによる第１処理結果に応じた第２ＡＰＩを呼び出し、呼び出された第２ＡＰＩによる処理を実行するステップと、
前記第１ＡＰＩによる第１処理結果と、前記第２ＡＰＩによる第２処理結果とを用いて改竄チェックを実行するステップと、
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部からの攻撃等による改竄を検知可能なＩＣカード等のセキュアエレメントの技術分野に関する。
【背景技術】
【０００２】
セキュリティ性が重要視されるセキュアエレメントでは、外部からの攻撃などによる不正動作に対する防止手段を備えている必要がある。外部からの攻撃とは、セキュアエレメントに誤動作を起こさせるための方法であり、代表的な攻撃方法としてＤＦＡ(Differential Fault Analysis)が知られている。この攻撃方法では、例えば、セキュアエレメントに対してレーザ照射を行って出力された誤演算結果を、正しい演算結果と比較して解析することにより、攻撃者はセキュアエレメント内部の情報を得ることが可能になっている。特許文献１には、レーザ照射により誤動作が発生する前にレーザ照射を検知して、攻撃を回避することが可能な誤動作発生攻撃検出回路が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２７９００３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、セキュアエレメントに搭載されるアプリケーションは、一般に、命令コードにしたがって関数を呼び出し、呼び出された関数による処理の結果を利用するように構築される。しかし、当該関数による処理の結果が外部からの攻撃により改竄されることが懸念される。そのため、このような改竄を、複雑な回路を必要とせずに、より効率良くチェックする仕組みが望まれる。
【０００５】
そこで、本発明は、外部からの攻撃による改竄を、複雑な回路を必要とせずに、より効率良くチェックすることが可能な電子情報記憶媒体、ＩＣカード、改竄チェック方法、及びプログラムを提供することを課題とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、請求項１に記載の発明は、所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体であって、前記処理結果を、改竄チェック対象となる第１データとして記憶する第１記憶部と、前記処理の開始から終了に至るまでの何れかのタイミングで得られた第２データを記憶する第２記憶部と、前記第１データ及び前記第２データを用いて改竄チェックを実行する改竄チェック部と、を備えることを特徴とする。
【０００７】
請求項２に記載の発明は、請求項１に記載の電子情報記憶媒体において、前記関数は、前記電子情報記憶媒体に搭載されたアプリケーションが有する前記命令コードにしたがって当該アプリケーションから呼び出される第１ＡＰＩ（Application Programming Interface）に含まれることを特徴とする。
【０００８】
請求項３に記載の発明は、請求項２に記載の電子情報記憶媒体において、前記第１データは、前記第１ＡＰＩから前記アプリケーションに応答された戻り値であり、前記アプリケーションにより利用される前記第１記憶部に記憶され、前記第２データは、前記電子情報記憶媒体に搭載されたオペレーティングシステムにより利用される前記第２記憶部に記憶されることを特徴とする。
【０００９】
請求項４に記載の発明は、請求項３に記載の電子情報記憶媒体において、前記アプリケーションから呼び出される第２ＡＰＩであって前記第１ＡＰＩとは異なる当該第２ＡＰＩによる処理において、前記改竄チェック部は、前記第１データ及び前記第２データを用いて改竄チェックを実行することを特徴とする。
【００１０】
請求項５に記載の発明は、請求項３に記載の電子情報記憶媒体において、前記アプリケーションから呼び出される第２ＡＰＩであって前記第１ＡＰＩとは異なる当該第２ＡＰＩによる処理において、前記第２記憶部から前記第２データが取得され、当該第２データが戻り値として前記アプリケーションに応答され、前記アプリケーションによる処理において、前記改竄チェック部は、前記第１データ及び前記第２データを用いて改竄チェックを実行することを特徴とする。
【００１１】
請求項６に記載の発明は、請求項１乃至５の何れか一項に記載の電子情報記憶媒体において、前記第２記憶部は、前記処理の終了に至った時点で得られた第２データを記憶し、前記改竄チェック部は、前記第１データと前記第２データとが一致しているか否かを判定することで改竄チェックを実行することを特徴とする。
【００１２】
請求項７に記載の発明は、請求項１乃至５の何れか一項に記載の電子情報記憶媒体において、前記第２記憶部は、前記処理の終了に至る前の時点で得られた第２データを記憶し、前記改竄チェック部は、前記処理の終了に至る前の時点で得られた第２データに基づいて、前記処理の終了に至る前の時点から前記処理の終了に至った時点までに行われるべき処理により第３データを算出し、前記第１データと前記第３データとが一致しているか否かを判定することで改竄チェックを実行することを特徴とする。
【００１３】
請求項８に記載の発明は、請求項１乃至７の何れか一項に記載の電子情報記憶媒体において、前記改竄チェック部は、前記第１データ、及び前記第２記憶部に直近に記憶された前記第２データを用いて改竄チェックを実行することを特徴とする。
【００１４】
請求項９に記載の発明は、請求項１乃至７の何れか一項に記載の電子情報記憶媒体において、前記第２記憶部は、複数の前記関数のそれぞれによる処理に応じた前記第２データを前記関数毎に区別して記憶し、前記改竄チェック部は、前記第１データ、及び前記第２記憶部により記憶された複数の前記第２データのうちから指定された関数による処理に応じた前記第２データを用いて改竄チェックを実行することを特徴とする。
【００１５】
請求項１０に記載の発明は、所定の命令コードにしたがって第１ＡＰＩを呼び出し、呼び出された第１ＡＰＩによる処理を実行する電子情報記憶媒体であって、チェック用となる複数の第２ＡＰＩのうち、前記第１ＡＰＩによる第１処理結果に応じた第２ＡＰＩを呼び出し、呼び出された第２ＡＰＩによる処理を実行し、前記第１ＡＰＩによる第１処理結果と、前記第２ＡＰＩによる第２処理結果とを用いて改竄チェックを実行する改竄チェック部と、を備えることを特徴とする。
【００１６】
請求項１１に記載の発明は、所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶するＩＣカードであって、前記処理結果を、改竄チェック対象となる第１データとして記憶する第１記憶部と、前記処理の開始から終了に至るまでの何れかのタイミングで得られた第２データを記憶する第２記憶部と、前記第１データ及び前記第２データを用いて改竄チェックを実行する改竄チェック部と、を備えることを特徴とする。
【００１７】
請求項１２に記載の発明は、所定の命令コードにしたがって第１ＡＰＩを呼び出し、呼び出された第１ＡＰＩによる処理を実行するＩＣカードであって、チェック用となる複数の第２ＡＰＩのうち、前記第１ＡＰＩによる第１処理結果に応じた第２ＡＰＩを呼び出し、呼び出された第２ＡＰＩによる処理を実行し、前記第１ＡＰＩによる第１処理結果と、前記第２ＡＰＩによる第２処理結果とを用いて改竄チェックを実行する改竄チェック部と、を備えることを特徴とする。
【００１８】
請求項１３に記載の発明は、所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体に含まれるコンピュータにより実行される改竄チェック方法であって、前記処理結果を、改竄チェック対象となる第１データとして第１記憶部に記憶するステップと、前記処理の開始から終了に至るまでの何れかのタイミングで得られた第２データを第２記憶部に記憶するステップと、前記第１データ及び前記第２データを用いて改竄チェックを実行するステップと、を含むことを特徴とする。
【００１９】
請求項１４に記載の発明は、所定の命令コードにしたがって第１ＡＰＩを呼び出し、呼び出された第１ＡＰＩによる処理を実行する電子情報記憶媒体に含まれるコンピュータにより実行される改竄チェック方法であって、チェック用となる複数の第２ＡＰＩのうち、前記第１ＡＰＩによる第１処理結果に応じた第２ＡＰＩを呼び出し、呼び出された第２ＡＰＩによる処理を実行するステップと、前記第１ＡＰＩによる第１処理結果と、前記第２ＡＰＩによる第２処理結果とを用いて改竄チェックを実行するステップと、を備えることを特徴とする。
【００２０】
請求項１５に記載の発明は、所定の命令コードにしたがって関数を呼び出し、呼び出された関数による処理を実行し、その処理結果を記憶する電子情報記憶媒体に含まれるコンピュータに、前記処理結果を、改竄チェック対象となる第１データとして第１記憶部に記憶するステップと、前記処理の開始から終了に至るまでの何れかのタイミングで得られた第２データを第２記憶部に記憶するステップと、前記第１データ及び前記第２データを用いて改竄チェックを実行するステップと、を実行させることを特徴とする。
【００２１】
請求項１６に記載の発明は、所定の命令コードにしたがって第１ＡＰＩを呼び出し、呼び出された第１ＡＰＩによる処理を実行する電子情報記憶媒体に含まれるコンピュータに、チェック用となる複数の第２ＡＰＩのうち、前記第１ＡＰＩによる第１処理結果に応じた第２ＡＰＩを呼び出し、呼び出された第２ＡＰＩによる処理を実行するステップと、前記第１ＡＰＩによる第１処理結果と、前記第２ＡＰＩによる第２処理結果とを用いて改竄チェックを実行するステップと、を実行させることを特徴とする。
【発明の効果】
【００２２】
本発明によれば、外部からの攻撃による改竄を、複雑な回路を必要とせずに、より効率良くチェックすることができる。
【図面の簡単な説明】
【００２３】
【図１】ＳＥのハードウェア構成例を示す図である。
【図２】ＳＥの論理構成例を示す図である。
【図３】ＳＥ内のメモリマップの一例を示す図である。
【図４】ＡＰＩ（１）による処理結果として得られた第１データがアプリケーションメモリ領域Ｍ１に記憶され、ＡＰＩ（１）による処理の終了に至った時点で得られた第２データがＯＳメモリ領域Ｍ２に記憶される様子を示す概念図である。
【図５】ＡＰＩ（１）による処理結果として得られた第１データがアプリケーションメモリ領域Ｍ１に記憶され、ＡＰＩ（１）による処理の終了に至る前の時点で得られた第２データがＯＳメモリ領域Ｍ２に記憶される様子を示す概念図である。
【図６】複数の関数のそれぞれによる処理に応じた第２データを含むリストを示す図である。
【図７】実施例１におけるアプリケーションによる処理の一例を示すフローチャートである。
【図８】実施例１におけるＯＳによる処理の一例を示すフローチャートである。
【図９】実施例２におけるアプリケーションによる処理の一例を示すフローチャートである。
【図１０】実施例２におけるＯＳによる処理の一例を示すフローチャートである。
【図１１】変形例における処理内容を疑似コードで表した図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、セキュアエレメント（以下、「ＳＥ」という）に対して本発明を適用した場合の実施の形態である。
【００２５】
［１．ＳＥの構成及び機能］
先ず、図１及び図２を参照して、本実施形態に係るＳＥ（本発明の電子情報記憶媒体の一例）の構成及び機能について説明する。図１は、ＳＥのハードウェア構成例を示す図であり、図２は、ＳＥの論理構成例を示す図である。図１に示すように、ＳＥは、ＣＰＵ（Central Processing Unit）１０、ＲＡＭ（Random Access Memory）１１、ＲＯＭ（Read Only Memory）１２、ＮＶＭ（Nonvolatile Memory）１３（不揮発性メモリ）、及びＩ／Ｏ回路１４などを備える。ただし、ＲＯＭ１２は備えられない場合もある。ＲＯＭ１２またはＮＶＭ１３には、各種プログラム及びデータが記憶される。これにより、ＳＥには、図２に示すように、アプリケーション、ＡＰＩ（１）〜（３）、及びオペレーティングシステム（以下、「ＯＳ」という）が搭載される。図２の例では、１つのアプリケーションが搭載された例を示しているが、複数のアプリケーションが搭載される場合もある。
【００２６】
なお、ＳＥは、ＩＣチップとしてＩＣカードに搭載されてもよいし、eUICC（Embedded Universal Integrated Circuit Card）として端末から容易に取り外しや取り換えができないように組み込み基盤上に実装（つまり、端末と一体的に形成）されてもよい。Ｉ／Ｏ回路１４は、ＳＥの通信相手となる外部装置とのインターフェースを担う。インターフェースの例として、ISO7816のインターフェース、ＳＷＰ（Single Wire Protocol）のインターフェース、及びＳＰＩ（Serial Peripheral Interface)などが挙げられる。外部装置の例として、サーバ、及び端末などが挙げられる。Ｉ／Ｏ回路１４には、例えば、アンテナ、及び変復調回路が備えられてもよい。
【００２７】
アプリケーションは、オブジェクトの振る舞いを定義するクラスから実体として作成され、ＯＳ上で実行されるインスタンスであり、複数のバイトコード（命令コードの一例）を含んで構成される。バイトコードは、ソースコードとネイティブコードとの間の中間コードである。アプリケーションの実行では、アプリケーションが有するバイトコードがＯＳの一機能として搭載される仮想マシン（例えば、Java（登録商標）Virtual Machine）により解釈（つまり、どのような命令であるかが特定）され、解釈されたバイトコードにしたがって処理（アプリケーションによる処理）が行われる。バイトコードにより特定される命令の例として、書き込み命令、読み出し命令、論理演算命令、条件分岐命令、関数呼び出し命令などが挙げられる。関数呼び出し命令を示すバイトコードの例としてINVOKEVIRTUALがあり、これは、ＡＰＩ（ＡＰＩ（１）〜（３）の何れか）を呼び出すことができる。
【００２８】
ＡＰＩ（１）〜（３）は、それぞれ、１以上の関数（メソッドともいう）により構成される。ＡＰＩ（１）〜（３）により提供される機能（アプリケーションを補助する機能）は互いに異なる。例えば、ＡＰＩ（１）は、第１ＡＰＩの一例であり、当該ＡＰＩ（１）による処理結果にはセキュリティ性の担保が求められる。ＡＰＩ（１）による処理例として、署名検証処理が挙げられる。この場合のＡＰＩ（１）を構成する関数として、例えば、boolean verifyCert（）が用いられる。boolean verifyCertの引数（入力）は、input（入力データ）、inputLen（入力データ長）、certificate（署名データ）、certLen（署名データ長）、及びalgo（署名（暗号演算）アルゴリズム）となる。boolean verifyCert（）による署名検証結果（つまり、出力としての処理結果）は、true（真）またはfalse（偽）となる。なお、ＡＰＩ（１）による処理結果は、boolean型の値に限定されるものではなく、例えば比較結果（例えば、一致、または不一致を示す値）や、暗号演算結果（例えば、'11 22 33…FF'(h)のようなデータ)など、処理結果に関するデータであれば、どのようなものでも適用可能である。一方、ＡＰＩ（２）は、第２ＡＰＩの一例であり、ＡＰＩ（１）による処理結果の改竄チェックに用いられる（つまり、第２ＡＰＩはチェック用となる）。なお、ＡＰＩ（３）による処理結果にはセキュリティ性の担保が求められないため、当該処理結果の改竄チェックは行われない。
【００２９】
ＯＳは、アプリケーションにより呼び出されたＡＰＩによる処理（つまり、当該ＡＰＩを構成する関数による処理）を実行し、その処理結果を戻り値としてアプリケーションに応答する。こうして応答された戻り値（処理結果）は、アプリケーションにより利用されるアプリケーションメモリ領域に記憶され、アプリケーションによる処理において用いられる。特に、ＡＰＩ（１）による処理結果は、改竄チェック対象となる第１データとしてアプリケーションメモリ領域に記憶される。
【００３０】
図３は、ＳＥ内のメモリマップの一例を示す図である。図３に示すように、ＳＥ内には、アプリケーションにより利用されるアプリケーションメモリ領域Ｍ１（第１記憶部の一例）と、ＯＳにより利用されるＯＳメモリ領域Ｍ２（第２記憶部の一例）とが、例えばＲＡＭ１１またはＮＶＭ１３に確保される。アプリケーションメモリ領域Ｍ１は、後入れ先出しの構造を有するスタック領域を含んで構成される。スタック領域には、ローカル変数、引数、戻り値などがフレーム単位で書き込まれ、その後、フレーム単位で取得される。ＯＳメモリ領域Ｍ２には、ＡＰＩ（１）による処理の開始から終了に至るまでの何れかのタイミングで得られた第２データが記憶される。例えば、ＡＰＩ（１）による処理の終了に至った時点で得られた第２データがＯＳメモリ領域Ｍ２に記憶される。或いは、ＡＰＩ（１）による処理の終了に至る前の時点で得られた第２データがＯＳメモリ領域Ｍ２に記憶される。そして、アプリケーションメモリ領域Ｍ１に記憶された第１データ、及びＯＳメモリ領域Ｍ２に記憶された第２データが用いられて改竄チェックが実行される。
【００３１】
図４は、ＡＰＩ（１）による処理結果として得られた第１データがアプリケーションメモリ領域Ｍ１に記憶され、ＡＰＩ（１）による処理の終了に至った時点で得られた第２データがＯＳメモリ領域Ｍ２に記憶される様子を示す概念図である。図４の例では、第１データと第２データは、互いに同じタイミングで得られたデータであるので、外部からの攻撃により何れか一方のデータが改竄されなければ互いに同じ値になる。そのため、この場合、アプリケーションメモリ領域Ｍ１に記憶された第１データと、ＯＳメモリ領域Ｍ２に記憶された第２データとが一致しているか否かを判定することで改竄チェックが実行され、第１データと第２データとが一致していなければデータが改竄されたものと判定される。なお、外部からの攻撃により、第１データと第２データとが同じ値に改竄される可能性は極めて低い。図４に示す構成によれば、改竄チェックに要する処理時間を、より短縮することができる。
【００３２】
一方、図５は、ＡＰＩ（１）による処理結果として得られた第１データがアプリケーションメモリ領域Ｍ１に記憶され、ＡＰＩ（１）による処理の終了に至る前の時点で得られた第２データがＯＳメモリ領域Ｍ２に記憶される様子を示す概念図である。図５の例では、第２データはＡＰＩ（１）による処理途中段階のデータ（この例では、関数２の戻り値）であるので、外部からの攻撃により何れか一方のデータが改竄されなくても互いに同じ値にならない。そのため、この場合、ＯＳメモリ領域Ｍ２に記憶された第２データ（つまり、ＡＰＩ（１）による処理の終了に至る前の時点で得られた第２データ）に基づいて、ＡＰＩ（１）による処理の終了に至る前の時点から当該処理の終了に至った時点までに行われるべき処理（図５の例では、処理α）により第３データが算出される。そして、アプリケーションメモリ領域Ｍ１に記憶された第１データと、当該算出された第３データとが一致しているか否かを判定することで改竄チェックが実行され、第１データと第３データとが一致していなければデータが改竄されたものと判定される。図５に示す構成によれば、第１データと第２データとは異なるタイミングで記憶され、かつ異なる値であるので、外部からの攻撃により、第１データと第２データとが同じ値に改竄される可能性をより一層低減することができる。
【００３３】
ところで、図４及び図５に示すように、第２データが記憶されるＯＳメモリ領域Ｍ２には、最新の第２データ（１回分の第２データ）が記憶されるとよい。つまり、ＯＳメモリ領域Ｍ２に既に記憶されている第２データが、ＡＰＩ（１）による後の処理で得られた第２データにより上書きされることで、第２データが最新に保たれる。これにより、第２データを記憶するために確保されるＯＳメモリ領域Ｍ２のサイズ（メモリ容量）を低減することができる。ＯＳメモリ領域Ｍ２のサイズは、ＡＰＩ（１）による処理で得られる第２データのサイズに応じて決定されるとよい。この場合、例えば、暗号演算結果が第２データとして記憶される場合のＯＳメモリ領域Ｍ２のサイズは、boolean型の値が第２データとして記憶される場合のＯＳメモリ領域Ｍ２のサイズよりも大きくなる。
【００３４】
なお、改竄チェックに用いられる第２データは、例えば、ＡＰＩ（２）による処理においてＯＳメモリ領域Ｍ２から取得される。この場合のＡＰＩ（２）を構成する関数として、例えば、boolean checkResult（）が用いられる。boolean checkResult（）は、ＯＳメモリ領域Ｍ２から直近に記憶された（つまり、直前の関数による処理で記憶された）最新の第２データを取得し、これを戻り値としてアプリケーションに応答することができる。この場合、boolean checkResult（）の引数は必要なく（第２データが記憶されたメモリ領域は固定であるため）、ＡＰＩ（２）による処理において取得された第２データが戻り値として第２データがアプリケーションに応答され、その後、アプリケーションによる処理において第１データ及び第２データが用いられて改竄チェックが実行される。つまり、この場合、アプリケーションが改竄チェック部として改竄チェックを行う。別の例として、ＡＰＩ（２）による処理において、第１データ及び第２データの取得、及び第１データ及び第２データを用いた改竄チェックが実行され、その改竄チェック結果（例えば、データ改竄無）がアプリケーションに応答されてもよい。この場合、ＯＳが改竄チェック部として改竄チェックを行うことになる。
【００３５】
また、ＡＰＩ（１）が複数の関数により構成される場合、例えば図５に示す複数の関数のそれぞれによる処理に応じた第２データ（例えば、それぞれの関数毎に最新の第２データ）が関数毎に区別されて記憶されてもよい。図６は、複数の関数のそれぞれによる処理に応じた第２データを含むリストを示す図である。このようなリストがＯＳメモリ領域Ｍ２に記憶されることになる。この場合、改竄チェックに用いる第２データとして、どの関数による処理に応じた第２データを用いるかを指定する必要がある。例えば、上述したboolean checkResult（）を用いる場合、引数により関数（または関数による処理に応じた第２データの記憶領域を示すアドレス）を指定することで、boolean checkResult（）の戻り値として、指定された関数による処理に応じた第２データがアプリケーションに応答され、その後、アプリケーションによる処理において第１データ及び第２データが用いられて改竄チェックが実行される。これにより、セキュリティ性をより一層向上することができる。この場合も、上述した別の例と同様に、ＡＰＩ（２）による処理において、第１データ及び第２データの取得、及び第１データ及び第２データを用いた改竄チェックが実行され、その改竄チェック結果（例えば、データ改竄無）がアプリケーションに応答されてもよい。
【００３６】
［２．ＳＥの動作］
次に、ＳＥの動作について、実施例１と実施例２とに分けて説明する。
【００３７】
（実施例１）
先ず、図７及び図８に基づいて、ＳＥの動作の実施例１について説明する。実施例１では、アプリケーションが改竄チェックを行う場合の例である。図７は、実施例１におけるアプリケーションによる処理の一例を示すフローチャートであり、図８は、実施例１におけるＯＳによる処理の一例を示すフローチャートである。
【００３８】
図７に示す処理は、ＳＥが外部装置から、例えば、署名検証の実行命令を示すコマンドを受信した場合に開始される。図７に示す処理が開始されると、アプリケーションは、上記コマンドに応じて、ＡＰＩ（１）を呼び出し（ステップＳ１）、呼び出されたＡＰＩ（１）による処理結果（つまり、第１データ）を戻り値として取得し、当該戻り値をアプリケーションメモリ領域Ｍ１に格納する（ステップＳ２）。次いで、アプリケーションは、ＡＰＩ（２）を呼び出し（ステップＳ３）、呼び出されたＡＰＩ（２）による処理結果（つまり、第２データ）を戻り値として取得し、当該戻り値をアプリケーションメモリ領域Ｍ１に格納する（ステップＳ４）。
【００３９】
次いで、アプリケーションは、ステップＳ２で格納された第１データと、ステップＳ４で格納された第２データとを用いて改竄チェックを実行してデータ改竄の有無を判定する（ステップＳ５）。改竄チェックでは、例えば、第１データと第２データとが一致しているか否かが判定され、第１データと第２データとが一致していない場合にデータ改竄有と判定される。或いは、改竄チェックでは、上述したように、第２データから第３データが算出され、第１データと第３データとが一致しているか否かが判定され、第１データと第３データとが一致していない場合にデータ改竄有と判定される。
【００４０】
そして、データ改竄有と判定された場合（ステップＳ５：有）、エラー処理が行われる（ステップＳ６）。エラー処理では、例えば、ＳＥの動作が停止され、外部装置に対してエラー応答が出力される。一方、データ改竄無と判定された場合（ステップＳ５：無）、アプリケーションによる処理が続行される（ステップＳ７）。
【００４１】
一方、図８に示す処理は、アプリケーションからＡＰＩの呼び出しがあった場合に開始される。図８に示す処理が開始されると、ＯＳは、呼び出しがあったＡＰＩが改竄チェック対象（検証対象）のＡＰＩ（１）であるか否かを判定する（ステップＳ１１）。呼び出しがあったＡＰＩがＡＰＩ（１）であると判定された場合（ステップＳ１１：ＹＥＳ）、ステップＳ１２へ進む。一方、呼び出しがあったＡＰＩがＡＰＩ（１）でないと判定された場合（ステップＳ１１：ＮＯ）、ステップＳ１５へ進む。
【００４２】
ステップＳ１２では、ＯＳは、アプリケーションにより呼び出されたＡＰＩ（１）による処理を開始する。次いで、ＯＳは、ＡＰＩ（１）による処理の終了に至った時点で得られた第２データ、または、ＡＰＩ（１）による処理の終了に至る前の時点で得られた第２データを、ＯＳメモリ領域Ｍ２に記憶する（ステップＳ１３）。次いで、ＯＳは、ＡＰＩ（１）による処理結果（つまり、第１データ）を戻り値としてアプリケーションに応答する（ステップＳ１４）。
【００４３】
ステップＳ１５では、ＯＳは、呼び出しがあったＡＰＩが改竄チェック用のＡＰＩ（２）であるか否かを判定する。呼び出しがあったＡＰＩがＡＰＩ（２）であると判定された場合（ステップＳ１５：ＹＥＳ）、ステップＳ１６へ進む。一方、呼び出しがあったＡＰＩがＡＰＩ（２）でないと判定された場合（ステップＳ１５：ＮＯ）、ステップＳ１９へ進む。
【００４４】
ステップＳ１６では、ＯＳは、アプリケーションにより呼び出されたＡＰＩ（２）による処理を開始する。そして、ＯＳは、ＯＳメモリ領域Ｍ２から最新の第２データ、または指定された関数による処理に応じた第２データを取得する（ステップＳ１７）。次いで、ＯＳは、ＡＰＩ（２）による処理結果（つまり、第２データ）を戻り値としてアプリケーションに応答する（ステップＳ１８）。一方、ステップＳ１９では、ＯＳは、呼び出しがあった通常のＡＰＩ（３）による処理を実行し、その処理結果を戻り値としてアプリケーションに応答する（ステップＳ２０）。
【００４５】
（実施例２）
次に、図９及び図１０に基づいて、ＳＥの動作の実施例２について説明する。実施例２では、ＯＳが改竄チェックを行う場合の例である。図９は、実施例２におけるアプリケーションによる処理の一例を示すフローチャートであり、図１０は、実施例２におけるＯＳによる処理の一例を示すフローチャートである。
【００４６】
図９に示す処理は、ＳＥが外部装置から、例えば、署名検証の実行命令を示すコマンドを受信した場合に開始される。図９に示す処理が開始されると、アプリケーションは、上記コマンドに応じて、ＡＰＩ（１）を呼び出し（ステップＳ２１）、呼び出されたＡＰＩ（１）による処理結果（つまり、第１データ）を戻り値として取得し、当該戻り値をアプリケーションメモリ領域Ｍ１に格納する（ステップＳ２２）。次いで、アプリケーションは、ＡＰＩ（２）を呼び出し（ステップＳ２３）、呼び出されたＡＰＩ（２）による処理結果（データ改竄無）を戻り値として取得し（ステップＳ２４）、処理を続行する（ステップＳ２５）。
【００４７】
一方、図１０に示す処理は、アプリケーションからＡＰＩの呼び出しがあった場合に開始される。図１０に示す処理が開始されると、ＯＳは、呼び出しがあったＡＰＩが改竄チェック対象のＡＰＩ（１）であるか否かを判定する（ステップＳ３１）。呼び出しがあったＡＰＩがＡＰＩ（１）であると判定された場合（ステップＳ３１：ＹＥＳ）、ステップＳ３２へ進む。一方、呼び出しがあったＡＰＩがＡＰＩ（１）でないと判定された場合（ステップＳ３１：ＮＯ）、ステップＳ３５へ進む。
【００４８】
ステップＳ３２では、ＯＳは、アプリケーションにより呼び出されたＡＰＩ（１）による処理を開始する。次いで、ＯＳは、ＡＰＩ（１）による処理の終了に至った時点で得られた第２データ、または、ＡＰＩ（１）による処理の終了に至る前の時点で得られた第２データを、ＯＳメモリ領域Ｍ２に記憶する（ステップＳ３３）。次いで、ＯＳは、ＡＰＩ（１）による処理結果（つまり、第１データ）を戻り値としてアプリケーションに応答する（ステップＳ３４）。
【００４９】
ステップＳ３５では、ＯＳは、呼び出しがあったＡＰＩが改竄チェック用のＡＰＩ（２）であるか否かを判定する。呼び出しがあったＡＰＩがＡＰＩ（２）であると判定された場合（ステップＳ３５：ＹＥＳ）、ステップＳ３６へ進む。一方、呼び出しがあったＡＰＩがＡＰＩ（２）でないと判定された場合（ステップＳ３５：ＮＯ）、ステップＳ４２へ進む。
【００５０】
ステップＳ３６では、ＯＳは、アプリケーションにより呼び出されたＡＰＩ（２）による処理を開始する。そして、ＯＳは、アプリケーションメモリ領域Ｍ１から第１データを取得する（ステップＳ３７）。次いで、ＯＳは、ＯＳメモリ領域Ｍ２から最新の第２データ、または指定された関数による処理に応じた第２データを取得する（ステップＳ３８）。次いで、ＯＳは、ステップＳ３７で取得された第１データと、ステップＳ３８で取得された第２データとを用いて改竄チェックを実行してデータ改竄の有無を判定する（ステップＳ３９）。この改竄チェックでは、上記ステップＳ５と同じように処理が行われる。
【００５１】
そして、データ改竄有と判定された場合（ステップＳ３９：有）、エラー処理が行われる（ステップＳ４０）。一方、データ改竄無と判定された場合（ステップＳ３９：無）、ＡＰＩ（２）による処理結果（つまり、データ改竄無）が戻り値としてアプリケーションに応答される（ステップＳ４１）。なお、ステップＳ４２では、呼び出しがあった通常のＡＰＩによる処理が実行され、その処理結果が戻り値としてアプリケーションに応答される（ステップＳ４３）。
【００５２】
以上説明したように、上記実施形態によれば、ＳＥは、アプリケーションが有するバイトコードにしたがって呼び出された関数による処理結果を改竄チェック対象となる第１データとしてアプリケーションメモリ領域Ｍ１に記憶し、当該処理の開始から終了に至るまでの何れかのタイミングで得られた第２データをＯＳメモリ領域Ｍ２に記憶し、第１データ及び第２データを用いて改竄チェックを実行するように構成したので、外部からの攻撃による改竄を、複雑な回路を必要とせずに、より効率良くチェックし、改竄が検出された場合にはエラー処理を行うことができる。
【００５３】
特に、セキュリティ性を担保することが必要な処理において汎用的な機能を担うＡＰＩが利用される場合、ＡＰＩによる処理結果が外部からの攻撃により改竄されることが懸念されるが、ＡＰＩの仕様は決まっているため、ＡＰＩ内で追加のセキュリティ対策を施すことが困難である。上記実施形態によれば、ＳＥは、セキュリティ性の担保が求められるＡＰＩ（１）による処理結果を改竄チェック対象となる第１データとしてアプリケーションメモリ領域Ｍ１に記憶し、当該処理の開始から終了に至るまでの何れかのタイミングで得られた第２データをＯＳメモリ領域Ｍ２に記憶し、第１データ及び第２データを用いて改竄チェックを実行するように構成したので、ＡＰＩ内で追加のセキュリティ対策を施すことが困難である場合であっても、外部からの攻撃による改竄を、より効率良くチェックし、改竄が検出された場合にはエラー処理を行うことができる。
【００５４】
さらに、上記実施形態によれば、セキュリティ性の担保が求められるＡＰＩ（１）による処理結果の改竄チェックを、別のＡＰＩ（２）を利用して実行するように構成したので、より簡単な構成で改竄チェックの機能をＳＥに実装することができる。
【００５５】
（変形例）
上記実施形態においては、ＡＰＩ（１）による処理結果を記憶するためのアプリケーションメモリ領域Ｍ１を用意した場合の例を説明したが、以下に説明する変形例によれば、このようなアプリケーションメモリ領域Ｍ１を用意することなく、外部からの攻撃による改竄を、より効率良くチェックするように構成することもできる。この場合、ＳＥは、アプリケーションが有するバイトコードにしたがってＡＰＩ（１）を呼び出し、呼び出されたＡＰＩ（１）による処理を実行し、チェック用となる複数のＡＰＩ（２）のうちＡＰＩ（１）による第１処理結果に応じたＡＰＩ（２）を呼び出し、呼び出されたＡＰＩ（２）による処理を実行し、ＡＰＩ（１）による第１処理結果と、ＡＰＩ（２）による第２処理結果とを用いて改竄チェックを実行する。この改竄チェックでは、第１処理結果と第２処理結果とが一致しているか否かが判定され、第１処理結果と第２処理結果とが一致していない場合にデータ改竄有と判定されることで、上述したように、エラー処理が行われる。
【００５６】
図１１は、変形例における処理内容を疑似コードで表した図である。図１１の例では、ＡＰＩ（１）を構成する関数はverifyCert()になっており、チェック用となる複数のＡＰＩ（２）を構成する関数は、それぞれ、isTrue()とisFalse()になっている。ＡＰＩ（１）による第１処理結果（trueまたはfalse）は、ＯＳにより保持される。そして、第１処理結果がtrueであれば、trueに応じたＡＰＩ（２）（換言すると、trueに対応するＡＰＩ（２））であるisTrue()が呼び出され、呼び出されたisTrue()による処理が実行されることで直前の処理結果が第２処理結果として取得される。そして、verifyCert()による第１処理結果（つまり、ＯＳが管理するメモリ領域に保持された第１処理結果）と、isTrue()による第２処理結果とが比較され、一致している場合には正常終了となる一方、一致していない場合には異常終了となる。他方、第１処理結果がfalseであれば、falseに応じたＡＰＩ（２）であるisFalse()が呼び出され、呼び出されたisFalse()による処理が実行されることで直前の処理結果が第２処理結果として取得される。そして、verifyCert()による第１処理結果（つまり、ＯＳにより保持された第１処理結果）と、isFalse()による第２処理結果とが比較され、一致している場合には正常終了となる一方、一致していない場合には異常終了となる。なお、変形例は、第１処理結果及び第２処理結果がtrue/falseのように２値以上で区別される値（例えば、同じ、大きい、小さい、マイナス、プラス、など）となるその他の例に対しても適用可能である。
【００５７】
なお、上記実施形態においては、バイトコードを解釈する仮想マシンが搭載されたＳＥに対して本発明を適用したが、バイトコード以外の命令コードを実行することが可能なＳＥに対しても本発明を適用可能である。
【符号の説明】
【００５８】
１０  ＣＰＵ
１１  ＲＡＭ
１２  ＲＯＭ
１３  ＮＶＭ
１４  Ｉ／Ｏ回路
【図１】
2020135265.tif 000003
【図２】
2020135265.tif 000004
【図３】
2020135265.tif 000005
【図４】
2020135265.tif 000006
【図５】
2020135265.tif 000007
【図６】
2020135265.tif 000008
【図７】
2020135265.tif 000009
【図８】
2020135265.tif 000010
【図９】
2020135265.tif 000011
【図１０】
2020135265.tif 000012
【図１１】
2020135265.tif 000013