(57)【要約】【課題】複数のプログラムを組み合わせなくてもセキュリティ対策を施すことができ、プログラムのコードサイズを肥大化させない携帯可能情報処理装置及び情報処理プログラムを提供する。【解決手段】ＩＣカード１０は、引数データ、呼び出し元の関数に関する情報、呼び出し先の関数に関する情報、乱数値、コードが実行されたことを示す値等を含むデータを用いて第１の認証コード（ｃｏｄｅ）を生成し、生成した第１の認証コードを用いて第２の認証コード（ｃｏｄｅ）を生成する認証コード生成部１６と、認証コード生成部１６によって最終的に出力されるべき値である正当値を記憶しているＥＥＰＲＯＭ１５と、ＥＥＰＲＯＭ１５が記憶している正当値と認証コード生成部１６が最終的に出力した認証コードとを比較して、認証コード生成部１６が最終的に出力した第２の認証コードが正しいか否かを検証する検証部１７などとを備える。【選択図】図１
2009015434.tif 000002
【特許請求の範囲】
【請求項１】
所定のデータを用いて第ｎ（ｎは１以上の整数）の認証コードを生成し、生成した前記第ｎの認証コードを用いて第ｎ＋１の認証コードを生成する認証コード生成手段と、
前記認証コード生成手段によって最終的に出力されるべき値である正当値を記憶している記憶手段と、
前記記憶手段が記憶している正当値と、前記認証コード生成手段が最終的に出力した認証コードとを比較して、前記認証コード生成手段が最終的に出力した認証コードが正しいか否かを検証する検証手段と、
を備える携帯可能情報処理装置。
【請求項２】
請求項１に記載の携帯可能情報処理装置において、
前記所定のデータは、引数データ、呼び出し元の関数に関する情報、呼び出し先の関数に関する情報、乱数値、コードが実行されたことを示す値のうち少なくとも２つを含むデータであること、
を特徴とする携帯可能情報処理装置。
【請求項３】
コンピュータに、
所定のデータを用いて第ｎ（ｎは１以上の整数）の認証コードを生成させ、生成した前記第ｎの認証コードを用いて第ｎ＋１の認証コードを生成させる認証コード生成手順と、
前記認証コード生成手順によって最終的に出力されるべき値である正当値と、前記認証コード生成手順が最終的に出力した認証コードとを比較させて、前記認証コード生成手順が最終的に出力した認証コードが正しいか否かを検証させる検証手順と、
を実行させるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、携帯可能情報処理装置及び情報処理プログラムに関するものである。
【背景技術】
【０００２】
近年、動作中のＩＣカードのＩＣチップに対してレーザ照射などを行い、ＩＣカード内のソフトウェアを誤動作させ、機密情報を読み出したりする不正行為が知られている。
【０００３】
このような不正行為の対策として、レスポンスタイムを可変化したＩＣカード（例えば、特許文献１）を採用することが考えられ、また、以下のような対策方法も考えられる。
（１）条件分岐命令などで使用するメモリ上のデータを改ざんすることで本来と異なる分岐をさせる攻撃を防ぐため、データを二重化する方法。これは、データの保護につながる。
（２）条件分岐命令などのコードの読み出し時に命令バイトを改ざんすることで本来と異なる動作をさせる攻撃を防ぐため、条件分岐処理を二重化する方法。これは、コードの保護につながる。
【０００４】
（３）コードをスキップさせることでセキュリティ機能を実行させない攻撃を防ぐため、コードの要所に通過チェックを行う方法。これは、処理手順の保護につながる。
（４）攻撃のタイミングや場所を少しずつ変化させて解析する攻撃を回避するため、乱数やカウンタを用いて同じデータを使わないようにする方法。これは、セッション性の確保につながる。
【０００５】
しかし、上述した従来の技術では、以下のような問題があった。
上記（１）〜（４）や、その他の技術を実装するためには、複数のプログラムを組み合わせて総合的なセキュリティ対策を施す必要があるため、プログラムのコードサイズが大きくなり、小容量の安価なＩＣチップが利用できなくなる。
【特許文献１】特開２００６−２０１９００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の課題は、複数のプログラムを組み合わせなくてもセキュリティ対策を施すことができ、しかも、プログラムのコードサイズを肥大化させない携帯可能情報処理装置及び情報処理プログラムを提供することである。
【課題を解決するための手段】
【０００７】
本発明は、以下のような解決手段により、前記課題を解決する。なお、理解を容易にするために、本発明の実施例に対応する符号を付して説明するが、これに限定されるものではない。
請求項１の発明は、所定のデータを用いて第ｎ（ｎは１以上の整数）の認証コードを生成し、生成した前記第ｎの認証コードを用いて第ｎ＋１の認証コードを生成する認証コード生成手段（１６）と、前記認証コード生成手段（１６）によって最終的に出力されるべき値である正当値を記憶している記憶手段（１５）と、前記記憶手段（１５）が記憶している正当値と、前記認証コード生成手段（１６）が最終的に出力した認証コードとを比較して、前記認証コード生成手段（１６）が最終的に出力した認証コードが正しいか否かを検証する検証手段（１７）と、を備える携帯可能情報処理装置（１０）である。
請求項２の発明は、請求項１に記載の携帯可能情報処理装置（１０）において、前記所定のデータは、引数データ、呼び出し元の関数に関する情報、呼び出し先の関数に関する情報、乱数値、コードが実行されたことを示す値のうち少なくとも２つを含むデータであること、を特徴とする携帯可能情報処理装置（１０）である。
請求項３の発明は、コンピュータに、所定のデータを用いて第ｎ（ｎは１以上の整数）の認証コードを生成させ、生成した前記第ｎの認証コードを用いて第ｎ＋１の認証コードを生成させる認証コード生成手順（＃５）と、前記認証コード生成手順（＃５）によって最終的に出力されるべき値である正当値と、前記認証コード生成手順（＃５）が最終的に出力した認証コードとを比較させて、前記認証コード生成手順（＃５）が最終的に出力した認証コードが正しいか否かを検証させる検証手順（＃８，＃９）と、を実行させるための情報処理プログラム。
【発明の効果】
【０００８】
本発明によれば、以下のような効果がある。
（１）所定のデータを用いて第ｎの認証コードを生成し、第ｎの認証コードを用いて第ｎ＋１の認証コードを生成するので、前の認証コードの値が次の認証コードの値に反映され、セキュリティを高めることができる。
（２）最終的に出力されるべき値である正当値を記憶しておき、その正当値と最終的に出力された認証コードとを比較して、認証コードが正しいか否かを検証するので、携帯可能情報処理装置の内部で簡単に検証を行うことができる。
【０００９】
（３）引数データ、呼び出し元の関数に関する情報、呼び出し先の関数に関する情報、乱数値、コードが実行されたことを示す値のうち少なくとも２つを含むデータを用いて認証コードを生成するので、各データをまとめて処理することができる。これにより、複数のプログラムを組み合わせなくても、セキュリティ対策を施すことができ、しかも、データやコード、処理手順に関連する情報を別々に検証せずに、１つのコードで統合的に検証することで、プログラムのサイズを最小化することができる。また、動作中のＩＣカードのＩＣチップに対してレーザ照射などを行い、ＩＣカード内のソフトウェアを誤動作させ、機密情報を読み出したりする攻撃を防ぐことが可能になり、セキュリティの向上に貢献できる。
【発明を実施するための最良の形態】
【００１０】
以下、図面等を参照して、本発明の実施例について、さらに詳しく説明する。
【実施例】
【００１１】
図１は、本発明による携帯可能情報処理装置の実施例を示す図である。
本実施例のＩＣカード（携帯可能情報処理装置）１０は、通信部１１と、ＣＰＵ１２と、ＲＯＭ１３と、ＲＡＭ１４と、ＥＥＰＲＯＭ１５と、認証コード生成部１６と、検証部１７などとを備え、ＩＣカード１０に搭載されたＯＳのセキュリティ機能を強化したものである。
【００１２】
通信部１１は、外部装置としてのリーダライタ２０とコマンドやデータを送受信するための入出力インターフェースであり、例えば、接触式の接触端子や、非接触式のアンテナなどを備える。
ＣＰＵ１２は、通信部１１を介してリーダライタ２０と交信し、ＲＯＭ１３に記憶されているプログラム（制御プログラム，情報処理プログラムなど）に基づいてＩＣカード１０を統括制御する部分である。
【００１３】
ＲＯＭ１３は、不揮発性のメモリであり、ＣＰＵ１２によって実行されるプログラムが記憶されている。
ＲＡＭ１４は、揮発性のメモリであり、ＣＰＵ１２が制御を行う上で作業領域として使用される。
ＥＥＰＲＯＭ１５は、書き換え可能な不揮発性のメモリであり、ＩＣカード１０に記録されるデータを格納する。また、ＥＥＰＲＯＭ１５は、後述する認証コード生成部１６によって最終的に出力されるべき値である正当値を記憶している。
【００１４】
認証コード生成部１６は、ＣＰＵ１２の指示により、所定のデータを用いて第ｎ（ｎは１以上の整数）の認証コードを生成し、生成した第ｎの認証コードを用いて第ｎ＋１の認証コードを生成する。
ここで、所定のデータとは、引数データ、呼び出し元の関数に関する情報、呼び出し先の関数に関する情報、乱数値、コードが実行されたことを示す値等を含むデータである。
検証部１７は、ＥＥＰＲＯＭ１５が記憶している正当値と、認証コード生成部１６が最終的に出力した認証コードとを比較して、認証コード生成部１６が最終的に出力した認証コードが正しいか否かを検証する部分である。
【００１５】
図２は、ＩＣカード１０の動作を説明するフローチャートであり、図３は、ＩＣカード１０のプログラムの一例を示す図であり、本実施例では、以下の手順で処理が行われる。
ここでは、呼び出し元関数と、呼び出し先関数との２つの関数のやり取りを例にして説明する。
（＃１）呼び出し元関数では、（ａ）パスワードなどの引数データ、（ｂ）呼び出し元関数アドレス、（ｃ）呼び出し先関数アドレス、（ｄ）乱数値、（ｅ）呼び出し先の関数識別子などの情報から、ハッシュ関数などを使って認証コードＡを生成する。
【００１６】
（＃２）そして、呼び出し元関数は、「（ａ）引数データ、（ｂ）呼び出し元関数アドレス、（ｄ）乱数値、（ｆ）認証コードＡ」を引数として呼び出し先関数を呼び出す。
（＃３）呼び出し先関数では、引数に、「（ｃ）呼び出し先関数アドレス、（ｅ）呼び出し先の関数識別子」を付加して、検証用の認証コードＡ’を生成する。（ｃ）呼び出し先関数アドレス、（ｅ）呼び出し先の関数識別子を引数で受け渡さずに、呼び出し先関数で付加する理由は、呼び出し先関数が、（ｃ）呼び出し先関数アドレス、（ｅ）呼び出し先の関数識別子を把握しているからである。
【００１７】
（＃４）呼び出し先関数では、引数で受け取った認証コードＡと、生成した検証用の認証コードＡ’とを比較して、一致しない場合は、何らかの攻撃（意図しない箇所からの関数呼び出しや、データの改ざん）があったものと判断して異常終了する。異常終了時には、無応答又はエラー応答などの処理を行う。
【００１８】
（＃５；認証コード生成手順）呼び出し先関数では、処理の要所で、条件判定命令の結果レジスタなどのコードが実行されたことを示す値Ｘｎと、ここまでの認証コードＡから、この時点での新たな認証コードを生成する。
具体的に説明すると、処理の要所では、図３に示すように、関数ｆｕｎｃ１と関数ｆｕｎｃ２との２つの関数が用意されている。ここで、ｃｏｄｅ＝識別コードＡとする。
関数ｆｕｎｃ１の処理が開始されると、関数ｆｕｎｃ１のコードが実行されたことを示す値Ｘｎと識別コードとしてのｃｏｄｅとが、ハッシュ関数によって処理され、その演算結果がｃｏｄｅ（第１の認証コード）に代入される。
次に、そのｃｏｄｅを引数として関数ｆｕｎｃ２が呼び出される。
【００１９】
別の関数ｆｕｎｃ２では、関数ｆｕｎｃ２のコードが実行されたことを示す値Ｙｎとｃｏｄｅとが、再びハッシュ関数によって処理され、演算結果がｃｏｄｅ（第２の認証コード）に代入され、関数ｆｕｎｃ１にリターンする。
このように、識別コードとしてのｃｏｄｅは、行く先々で主要なデータと混ぜ合わせながら、次々に更新されていく。
ｃｏｄｅの最終的に出力されるべき値である正当値は、予め計算されてＥＥＰＲＯＭ１５に記憶されている。図の例では、正当値は、５３であり、演算結果として得られたｃｏｄｅが５３である場合には、正常フラグとしてのｆｌｇにＴＲＵＥ（１）がセットされ、ｃｏｄｅが５３以外の場合には、正常フラグとしてのｆｌｇにＦＡＬＳＥ（０）がセットされる。ｆｌｇ＝１であれば、正常に処理が行われたものとし、ｆｌｇ＝０であれば、不正行為が介在したものとする。
なお、このような処理は、任意の個所に適用し、その都度、ｃｏｄｅを更新していく。
【００２０】
（＃６）呼び出し先関数は、関数が終了する段階で、ここまでのｃｏｄｅと処理結果などの戻り値から、ハッシュ関数などによって最終的な認証コードＢを生成する。
（＃７）呼び出し先関数は、認証コードＢと処理結果などとを戻り値として呼び出し元関数に返し、処理の流れは呼び出し元に復帰する。
【００２１】
（＃８）呼び出し元関数では、認証コードＡと、関数内で正しく処理された場合のコードが実行された場合に想定される一連の値Ｚｎと、受け取った処理結果などから検証用の認証コードＢ’を生成する。
（＃９）呼び出し元関数は、引数で受け取った認証コードＢと、生成した検証用の認証コードＢ’を比較して、一致しない場合は、何らかの攻撃（実行コードの改ざんや、データの改ざん）があったものと判断して異常終了する。異常終了時には、無応答又はエラー応答などの処理を行う。
（＃１０）不正が行われず、改ざんもないことが検証された場合には、「処理結果」をそのまま使って以降の処理を継続して行うことができる。
【００２２】
このように、本実施例によれば、以下のような効果がある。
（１）コードが実行されたことを示す値Ｘｎを用いて認証コード（ｃｏｄｅ）を生成し、生成した認証コードとコードが実行されたことを示す値Ｙｎとを用いて新たな認証コードを生成するので、前の認証コードの値が次の認証コードの値に反映され、セキュリティを高めることができる。
（２）最終的に出力されるべき値である正当値を記憶しておき、その正当値と最終的に出力された認証コードとを比較して、認証コードが正しいか否かを検証するので、ＩＣカード１０の内部で簡単に検証を行うことができる。
【００２３】
（３）引数データ、呼び出し元関数アドレス、呼び出し先関数アドレス、乱数値、呼び出し先の関数識別子を用いて認証コードＡを生成するので、各データをまとめて処理することができる。これにより、複数のプログラムを組み合わせなくてもセキュリティ対策を施すことができ、しかも、データやコード、処理手順に関連する情報を別々に検証せずに統合的に検証することで、プログラムのサイズを最小化することができる。
従って、動作中のＩＣカード１０のＩＣチップに対してレーザ照射などを行い、ＩＣカード１０内のソフトウェアを誤動作させ、機密情報を読み出したりする攻撃を防ぐことが可能になり、セキュリティの向上に貢献できる。
また、データやコード、処理手順に対する攻撃を少ないコードで検知することができ、関数の呼び出し処理や復帰処理に対する攻撃を検知することもできる。
【００２４】
（４）関数呼び出し時に「呼び出し先関数アドレス」が改ざんされると認証コードＡが一致しないので、不正に呼び出し先を操作する攻撃を防ぐことができる。
（５）意図しない箇所から、関数が呼び出されると「呼び出し元関数アドレス」が異なるため認証コードＡが一致しなくなり、不正に呼び出し先を操作する攻撃を防ぐことができる。
（６）関数呼び出し時に「引数データ」が改ざんされると認証コードＡが一致しないので、不正なデータを使った処理を行わせる攻撃を防ぐことができる。
【００２５】
（７）処理の要所で、条件判定命令や処理分岐命令が改ざんされると認証コードＢが一致しないので、本来とは異なる動作をさせる攻撃を防ぐことができる。
（８）呼び出し先関数から呼び出し元関数に戻る時に、「処理結果」が改ざんされると認証コードＡが一致しないので、不正に処理結果を操作する攻撃を防ぐことができる。
【００２６】
（変形例）
以上説明した実施例に限定されることなく、種々の変形や変更が可能であって、それらも本発明の範囲内である。
（１）携帯可能情報処理装置は、ＩＣカードの例で説明したが、携帯電話機やＰＤＡ（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）などであってもよい。
（２）認証コードは、ハッシュ関数を用いて生成する例で説明したが、加算，減算などの任意の関数を用いて生成してもよい。また、認証コードは、更新する例で説明したが、更新せずに順に記憶させていってもいい。
【００２７】
（３）識別コードとしてのｃｏｄｅは、第１の認証コードと第２の認証コードの例で説明したが、第３，第４，第５・・といったように処理を継続させてもよい。
（４）上述したような制御を行う情報処理プログラムを携帯電話機やＰＤＡなどに配信するようにしてもよい。なお、本発明でいうコンピュータとは、記憶手段、制御手段などを備えた情報処理装置をいい、パーソナルコンピュータも、携帯電話機も、本発明のコンピュータの概念に含まれる。
【図面の簡単な説明】
【００２８】
【図１】本発明による携帯可能情報処理装置の実施例を示す図である。
【図２】ＩＣカード１０の動作を説明するフローチャートである。
【図３】ＩＣカード１０のプログラムの一例を示す図である。
【符号の説明】
【００２９】
１０  ＩＣカード（携帯可能情報処理装置）
１１  通信部
１２  ＣＰＵ
１３  ＲＯＭ
１４  ＲＡＭ
１５  ＥＥＰＲＯＭ
１６  認証コード生成部（認証コード生成手段）
１７  検証部（検証手段）
２０  リーダライタ
【図１】
2009015434.tif 000003
【図２】
2009015434.tif 000004
【図３】
2009015434.tif 000005