説明

携帯可能電子装置およびICカード

【課題】プログラムコードの自己診断が特定のコマンド処理時間に影響を与えることを避けるための分散処理、および、本装置がほとんど非活性化〜(再)活性化されない利用シーンにおける、プログラムコード自己診断の定期実施を可能とする携帯可能電子装置およびICカードを提供する。
【解決手段】ROMに格納されたプログラムコードを自己診断する自己診断機能を持つICカードにおいて、プログラムコードの自己診断を1つのコマンド処理内で全て実行するのではなく、複数のコマンド処理に分けて分散実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、プログラムコード自己診断機能を持つ携帯可能電子装置およびICカードに関する。
【背景技術】
【0002】
一般に、携帯可能電子装置としてのICカードは、プラスチックなどで形成されたカード状の本体内に制御素子(CPU)および各種メモリなどを有するICチップが埋め込まれている。このようなICカードには、各種メモリに格納されているデータを自己診断する機能を有するものがある。
【0003】
ICカードの自己診断として、LSIがサポートする各種ハードウェアの診断、オペレーティングシステム(OS)やアプリケーションプログラムを含むプログラムコードの自己診断、OSやアプリケーションプログラムの動作に必要なデータを格納するデータ領域の自己診断、RAMの自己診断などが提案されている。
【0004】
上記各自己診断の中でもプログラムコードの自己診断は、対象とするプログラムコードのサイズに依存して自己診断の実行時間がかかり、将来的にICカードの持つ機能が多様化、複雑化していくと、プログラムコードのサイズはそれに比例して大きくなり、それに伴い自己診断時間も長くなることが想定される。
【0005】
そのため、この時間が長くなったプログラムコードの自己診断処理を、いつ実行するのか、という点が重要となっている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−310597号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記したように、プログラムコードの自己診断を一括して実行する場合、いつ実行するのかが重要となる。ICカードは、外部装置からのコマンド(命令)に応じて受動的に動作し、また、ISO/IEC7816等で規定されるように、コマンドに対するレスポンスデータを応答した後は、低消費電流モードに移行することが要求される場合がある。
【0008】
このため、一般的にICカードの自己診断は、コマンド受信終了後から、レスポンスデータ応答前までの間、つまりコマンド処理の一環として実行される。
また、プログラムコードの自己診断は、ICカードを活性化した後に1度、たとえば1番目に受信したコマンドなど、1つのコマンド処理中に実行される、あるいは、特定の処理を実行する前に、その対象となる領域の自己診断が実行されるという方法が提案されている。
【0009】
ここで、1つのコマンド処理中に実行される、という方式を使用した場合、たとえば、1番目に受信したコマンドに対するICカードの処理時間が、自己診断対象となるプログラムコードのサイズに応じて増加するため、将来的にプログラムコードのサイズが飛躍的に拡張すると、たとえば、外部装置側に何らかのICカードの処理が不正に長くなっているという判定を行なうための処理タイムアウト時間が設定されていた場合、このタイムアウト時間を超えてしまい、ICカードと外部装置との間の処理が正しく行なえなくなる、というような問題が発生する恐れがある。
【0010】
また、ICカードの活性化後に1回実行される、という方式については、たとえば、携帯電話機に挿入されて使用されるUIMカードなどの場合、携帯電話機の電源をオンした以降、ICカードは常に活性化された状態を保持するため、次の自己診断処理は、所有者が一旦、携帯電話機の電源をオフし、再度、携帯電話機の電源をオンした場合にのみ実行される、というように自己診断がほとんど行なわれなくなる、という問題がある。
【0011】
そこで、実施形態は、プログラムコードの自己診断が特定のコマンド処理時間に影響を与えることを避けるための分散処理、および、本装置がほとんど非活性化〜(再)活性化されない利用シーンにおける、プログラムコード自己診断の定期実施を可能とする携帯可能電子装置およびICカードを提供することを目的とする。
【課題を解決するための手段】
【0012】
実施形態に係る携帯可能電子装置は、外部装置と通信を行なうための通信手段と、この通信手段により受信した外部装置からのコマンドに応じた処理を行なう処理手段と、この処理手段で処理を行なうために実行されるプログラムコードを記憶する第1の記憶手段と、前記処理手段の実行結果を一時記憶するための第2の記憶手段と、前記プログラムコードが破壊されていないことを確認するためのチェックコード期待値をあらかじめ記憶している第3の記憶手段と、前記通信手段により外部装置から1つ目のコマンドを受信した際、前記第1の記憶手段に記憶されたプログラムコードに対するチェックコードの算出を当該プログラムコードが記憶された先頭アドレスから開始するチェックコード算出手段と、このチェックコード算出手段によるチェックコードの算出があらかじめ設定されたサイズまで終了したことを判断すると、その時点で全プログラムコードのチェックコード算出が終了していない場合、算出した中間までの中間チェックコードおよびチェックコードの算出が終了した最終チェック済アドレス情報を前記第2の記憶手段に一時記憶した後、前記通信手段により当該コマンドに対する処理結果を前記外部装置へ応答する手段と、前記1つ目のコマンドに続く後続のコマンドを受信した場合、前記第2の記憶手段に一時記憶した最終チェック済アドレスおよび中間チェックコードを用いて、前記第1の記憶手段に記憶されたチェックコードの算出が終了していないプログラムコードの先頭アドレスからチェックコードの算出を継続して行なうよう前記チェックコード算出手段を制御する手段と、前記チェックコード算出手段により前記第1の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した場合、前記第3の記憶手段に記憶されたチェックコード期待値と前記チェックコード算出手段により算出されたチェックコードとを比較する比較手段と、この比較手段による比較の結果、両者が一致した場合は自己診断終了と判断して、当該コマンドに対する処理結果を前記外部装置へ応答し、両者が不一致の場合は当該コマンドに対する処理結果を破棄して、自己診断異常を意味するエラーコードを前記外部装置へ応答する手段とを具備している。
【図面の簡単な説明】
【0013】
【図1】実施の形態に係る携帯可能電子装置としてのICカードの構成を示すブロック図。
【図2】データメモリ、RAMおよびROMの構成を概略的に示す模式図。
【図3】RAMに一時記憶される各種データの具体例を示す模式図。
【図4】第1の実施形態に係る動作を説明するフローチャート。
【図5】第1の実施形態に係る動作を説明するフローチャート。
【図6】第2の実施形態に係る動作を説明するフローチャート。
【図7】第2の実施形態に係る動作を説明するフローチャート。
【発明を実施するための形態】
【0014】
以下、実施形態について図面を参照して説明する。
図1は、本実施形態に係る携帯可能電子装置としてのICカードの構成を概略的に示すものである。このICカード1は、たとえば、ISO/IEC7816シリーズで規定される接触式通信機能をサポートしていて、ICカード本体1a内にICモジュール11が埋設されている。ICモジュール11は、ICチップ12および接触式通信手段としての接触端子13を有して構成されていて、これらは一体的にモジュール化されている。
ICカード1は、接触端子13を介して接触通信方式により接触式カードリーダ・ライタ(外部装置)2と通信を行なう。
【0015】
ICチップ12は、制御部として機能するCPU(セントラル・プロセッシング・ユニット)101、各種データを保持(記憶)するための記憶手段としてのデータメモリ102、ワーキングメモリとして機能する記憶手段としてのRAM(ランダム・アクセス・メモリ)103、CPU101が実行するプログラムなどを格納した記憶手段としてのROM(リード・オンリ・メモリ)104、および、接触端子11を介して接触式カードリーダ・ライタ2と行なわれる通信を制御する接触通信インタフェイス(I/F)105を有して構成される。
【0016】
データメモリ102は、たとえば、EEPROMやフラッシュメモリなどの不揮発性メモリにより構成されていて、本実施形態では、256Kバイトの容量を有している。
【0017】
図2は、データメモリ102、RAM103およびROM104の構成を模式的に示したものである。
【0018】
まず、ROM104には、プログラムコードおよびプログラムコードが破壊されていないことを確認するためのチェックコード期待値が格納されている。なお、プログラムコードは、ROM104内の全ての領域に渡り格納されているものとする。また、上記チェックコード期待値は、プログラムコードの一部としてプログラムコード内にあらかじめ格納されている。
【0019】
ROM104は、本実施形態では、たとえば、開始アドレスが[0x000000]、終了アドレスが[0x03FFFF]で、256Kバイトの容量を有している。
【0020】
次に、RAM103には、プログラムコード自己診断の結果情報である自己診断結果フラグを一時記憶するための領域103a、自己診断が終了したアドレスを一時記憶するための領域103b、中間結果あるいはチェックコード期待値と比較する最終結果となるチェックコード算出値を一時記憶するための領域103cが確保されている。
なお、RAM103は、本実施形態では、たとえば、40Kバイトの容量を有している。
【0021】
図3は、RAM103の領域103a,103b,領域103cに一時記憶される各種データの具体例を示したものである。
【0022】
領域103aに一時記憶される自己診断結果フラグは、たとえば、1バイトのデータで、プログラムコード自己診断状況(未実施、実施中、終了)、および終了している場合はその結果を示す情報である。
【0023】
領域103bに一時記憶される自己診断終了アドレスは、たとえば、3バイトのデータで、前回コマンド処理終了時点で、プログラムコードのどの部分までの自己診断が終了したか(未実施、実施中、終了)、を一時記憶するための情報である。具体的には、その時点で自己診断が終了した最終のメモリアドレスを情報として記憶する。
【0024】
領域103cに一時記憶されるチェックコード算出値は、たとえば、2バイトのデータで、自己診断終了アドレスが、終了(つまり、プログラムコードの最終アドレス)を示していない場合は、中間結果を、終了を示している場合は、自己診断の合否判定を行なうためにプログラムコード内にあらかじめ格納されたチェックコード期待値と比較するためのデータとして一時記憶される情報である。
【0025】
次に、このような構成において、第1の実施形態に係る動作について図4および図5に示すフローチャートを参照して説明する。なお、本フローチャートでは、ICカード1の全ての処理を詳細には記載せず、本実施形態の説明を行なう上で必要となる部分についてのみを記載している。
【0026】
CPU101は、ISO/IEC7816シリーズに規定された手順にしたがって活性化されることで、処理を開始する(ステップS1)。処理が開始されると、RAM103の初期化が行なわれる(ステップS2)。これにより、図3に示したような各一時記憶データも初期値に戻される。
【0027】
次に、CPU101は、ISO/IEC7816シリーズの規定にしたがい、ATR(アンサー・ツー・リセット)を外部装置である接触式カードリーダ・ライタ2へ送信する(ステップS3)。ATR送信後、CPU101は、接触式カードリーダ・ライタ2からのコマンドを待つための受信待ちモードへ進む(ステップS4)。接触式カードリーダ・ライタ2からコマンドが送信されない場合、本ステップS4に留まり続ける。
【0028】
接触式カードリーダ・ライタ2からコマンドを受信すると、CPU101は、まず、RAM103の領域103aに記憶されている自己診断結果フラグの状態をチェックし、「終了(異常)」か、または「終了(正常)」かを判定する(ステップS5)。
【0029】
この判定の結果、自己診断結果フラグが「終了(異常)」を示していた場合、CPU101は、それまでに既にプログラムコードの自己診断がエラーとなっているため、コマンドの処理を実行することなく、ステップS6へ進み、自己診断エラーを意味するステータスワード(SW)を接触式カードリーダ・ライタ2へ応答し(ステップS6)、再びステップS4のコマンド受信待ち状態へ戻る。
【0030】
ステップS5の判定の結果、自己診断結果フラグが「終了(異常)」でも「終了(正常)」でもない場合、CPU101は、自己診断を新規に開始するか、または中断状態から継続再開するかを判断する(ステップS7)。すなわち、自己診断結果フラグが「実施中」を示しているか、「未実施」を示しているかを判定する。
【0031】
ステップS7の判定の結果、自己診断結果フラグが、「実施中」を示していた場合、CPU101は、今回の処理で自己診断を再開するために、前回コマンドで行なった自己診断の中間情報をRAM103から復帰する。
【0032】
すなわち、RAM103の領域103cに記憶されているチェックコード算出値を初期値(0x0000)にセットし(ステップS8)、RAM103の領域103bに記憶されている自己診断終了アドレスに「+1」した値を自己診断開始アドレスにセットする(ステップS9)。
【0033】
次に、CPU101は、ROM104内のプログラムコードに対する自己診断を行なう(ステップS10)。なお、ステップS7の判定の結果、自己診断結果フラグが、「未実施」を示していた場合、ステップS8,S9をジャンプしてステップS10に進む。
【0034】
ステップS10におけるプログラムコード自己診断の方法として、本実施の形態では、たとえば、CRC16演算を利用することとする。この場合、CRC16の計算を開始するアドレスに前回までに終了したアドレスに「+1」した値を、CRC初期値として前回までに算出されたCRC算出値を使用する。
【0035】
ステップS10では、指定されたアドレスから指定されたCRC初期値を用いて、プログラムコードの自己診断を開始する。具体的な計算ロジックとしては、前述のとおりCRC16演算とする。
【0036】
また、開始アドレスおよび初期値が指定されていない場合は、あらかじめプログラムコードの内部に設定されたプログラムコード自己診断用の初期値を利用する。具体的には、開始アドレスはプログラムコード領域の先頭を示し、CRC初期値は例えば「0x0000」とする。
【0037】
ステップS10は、あらかじめプログラムコード内で指定されたサイズ分のプログラムコード自己診断処理を実行後、終了するものとする。たとえば、1回に行なうプログラムコード自己診断対象のデータサイズを64Kバイトとした場合、全プログラムコード領域に対する自己診断は、4回、つまり診断開始後、4コマンド目の処理時点で終了することとなる。
【0038】
次に、CPU101は、ROM104の最終アドレスまで自己診断が終了したかをチェックする(ステップS11)。このチェックの結果、ROM104の最終アドレスまで自己診断が終了している場合、CPU101は、算出されたチェックコードと、あらかじめROM104のプログラムコードに格納されたチェックコード期待値との比較を行なう(ステップS12)。
【0039】
ステップS12の比較の結果、両者の値が一致(自己診断成功)した場合(ステップS13)、CPU101は、全てのプログラムコードが正しい値を保持している、つまりプログラムコードが壊れたり、改竄されたりしていない、と判断し、RAM103の領域103aに記憶されている自己診断結果フラグを「終了(正常)」に設定し(ステップS14)、ステップS15へ進む。
【0040】
ステップS12の比較の結果、両者の値が不一致の場合(ステップS13)、CPU101は、プログラムコード自体に何らかの問題があると判断し、RAM103の領域103aに記憶されている自己診断結果フラグを「終了(異常)」に設定し(ステップS16)、ステップS6へ進む。
【0041】
ステップS11のチェックの結果、ROM104の最終アドレスまで自己診断が終了していない場合、CPU101は、中間状態を保存するために、自己診断が終了した時点のアドレス(自己診断終了アドレス)、および、自己診断が終了した時点のチェックコード算出値をRAM103の領域103b,103cに保存する(ステップS17)。
【0042】
次に、CPU101は、RAM103の領域103aに記憶されている自己診断結果フラグを「実施中」に設定し(ステップS18)、ステップS15へ進む。
【0043】
ステップS5の判定の結果、自己診断結果フラグが「終了(正常)」を示していた場合、CPU101は、ステップS7〜S14,S16〜S18をジャンプしてステップS15へ進む。
【0044】
ステップS15では、接触式カードリーダ・ライタ2から受信したコマンドの処理を開始する。次に、CPU101は、コマンド処理実行後、その処理結果に応じたステータスワード(SW)を接触式カードリーダ・ライタ2へ応答し(ステップS19)、再びステップS4のコマンド受信待ち状態へ戻る。
【0045】
以上説明したように上記第1の実施形態に係る動作によれば、ICカード1の活性化後、接触式カードリーダ・ライタ2から1つ目のコマンドを受信した場合に、プログラムコードのチェックコード算出を、ROM104に格納されたプログラムコードの先頭アドレスから開始し、あらかじめプログラムコードに設定されたサイズまでのチェックコード算出終了後に、その時点で全プログラムコードのチェックコード算出が終了していない場合は、算出した中間のチェックコード、および、チェックコードの算出が終了した領域の最終チェック済アドレス情報をRAM103に一時保存した後に、コマンドの処理結果を接触式カードリーダ・ライタ2へ応答する。
【0046】
さらに後続のコマンドを受信した場合に、前回一時保存した最終チェック済アドレスおよび中間チェックコードを用いて、チェックコード算出が終了していないプログラムコードの先頭アドレスから同様にチェックコード算出を継続する。
【0047】
最終的にプログラムコードの全てのチェックコード算出処理が終了した後で、あらかじめプログラムコード内に書込まれたチェックコード期待値と算出したチェックコードとを比較し、両者の値が一致した場合は、自己診断終了と判断して通常のコマンド処理結果を接触式カードリーダ・ライタ2へ応答し、不一致の場合は、コマンド処理結果を破棄して、自己診断異常を意味するエラーコードを接触式カードリーダ・ライタ2へ応答する。
このように、プログラムコードの自己診断を1つのコマンド処理内で全て実行するのではなく、複数のコマンド処理に分けて分散実行することを特徴とする。
【0048】
次に、第2の実施形態に係る動作について図6および図7に示すフローチャートを参照して説明する。なお、上述した第1の実施形態と同一ステップには同一符号を付して説明する。
【0049】
CPU101は、ISO/IEC7816シリーズに規定された手順にしたがって活性化されることで、処理を開始する(ステップS1)。処理が開始されると、RAM103の初期化が行なわれる(ステップS2)。これにより、図3に示したような各一時記憶データも初期値に戻される。
【0050】
次に、CPU101は、ISO/IEC7816シリーズの規定にしたがい、ATR(アンサー・ツー・リセット)を外部装置である接触式カードリーダ・ライタ2へ送信する(ステップS3)。ATR送信後、CPU101は、接触式カードリーダ・ライタ2からのコマンドを待つための受信待ちモードへ進む(ステップS4)。接触式カードリーダ・ライタ2からコマンドが送信されない場合、本ステップS4に留まり続ける。
【0051】
接触式カードリーダ・ライタ2からコマンドを受信すると、CPU101は、まず、RAM103の領域103aに記憶されている自己診断結果フラグの状態をチェックし、「終了(異常)」かを判定する(ステップS20)。
【0052】
この判定の結果、自己診断結果フラグが「終了(異常)」を示していた場合、CPU101は、それまでに既にプログラムコードの自己診断がエラーとなっているため、コマンドの処理を実行することなく、ステップS6へ進み、自己診断エラーを意味するステータスワード(SW)を接触式カードリーダ・ライタ2へ応答し(ステップS6)、再びステップS4のコマンド受信待ち状態へ戻る。
【0053】
ステップS20の判定の結果、自己診断結果フラグが「終了(異常)」でない場合、CPU101は、自己診断を新規に開始するか、または中断状態から継続再開するかを判断する(ステップS7)。すなわち、自己診断結果フラグが「実施中」を示しているか、「未実施」を示しているかを判定する。
【0054】
ステップS7の判定の結果、自己診断結果フラグが、「実施中」を示していた場合、CPU101は、今回の処理で自己診断を再開するために、前回コマンドで行なった自己診断の中間情報をRAM103から復帰する。
【0055】
すなわち、RAM103の領域103cに記憶されているチェックコード算出値を初期値(0x0000)にセットし(ステップS8)、RAM103の領域103bに記憶されている自己診断終了アドレスに「+1」した値を自己診断開始アドレスにセットする(ステップS9)。
【0056】
次に、CPU101は、ROM104内のプログラムコードに対する自己診断を行なう(ステップS10)。なお、ステップS7の判定の結果、自己診断結果フラグが、「未実施」を示していた場合、ステップS8,S9をジャンプしてステップS10に進む。
【0057】
ステップS10におけるプログラムコード自己診断の方法として、本実施の形態では、たとえば、CRC16演算を利用することとする。この場合、CRC16の計算を開始するアドレスに前回までに終了したアドレスに「+1」した値を、CRC初期値として前回までに算出されたCRC算出値を使用する。
【0058】
ステップS10では、指定されたアドレスから指定されたCRC初期値を用いて、プログラムコードの自己診断を開始する。具体的な計算ロジックとしては、前述のとおりCRC16演算とする。
【0059】
また、開始アドレスおよび初期値が指定されていない場合は、あらかじめプログラムコードの内部に設定されたプログラムコード自己診断用の初期値を利用する。具体的には、開始アドレスはプログラムコード領域の先頭を示し、CRC初期値は例えば「0x0000」とする。
【0060】
ステップS10は、あらかじめプログラムコード内で指定されたサイズ分のプログラムコード自己診断処理を実行後、終了するものとする。たとえば、1回に行なうプログラムコード自己診断対象のデータサイズを64Kバイトとした場合、全プログラムコード領域に対する自己診断は、4回、つまり診断開始後、4コマンド目の処理時点で終了することとなる。
【0061】
次に、CPU101は、ROM104の最終アドレスまで自己診断が終了したかをチェックする(ステップS11)。このチェックの結果、ROM104の最終アドレスまで自己診断が終了している場合、CPU101は、算出されたチェックコードと、あらかじめROM104のプログラムコードに格納されたチェックコード期待値との比較を行なう(ステップS12)。
【0062】
ステップS12の比較の結果、両者の値が一致(自己診断成功)した場合(ステップS13)、CPU101は、全てのプログラムコードが正しい値を保持している、つまりプログラムコードが壊れたり、改竄されたりしていない、と判断し、RAM103の領域103aに記憶されている自己診断結果フラグを「終了(正常)」に設定し(ステップS14)、ステップS15へ進む。
【0063】
ステップS12の比較の結果、両者の値が不一致の場合(ステップS13)、CPU101は、プログラムコード自体に何らかの問題があると判断し、RAM103の領域103aに記憶されている自己診断結果フラグを「終了(異常)」に設定し(ステップS16)、ステップS6へ進む。
【0064】
ステップS11のチェックの結果、ROM104の最終アドレスまで自己診断が終了していない場合、CPU101は、中間状態を保存するために、自己診断が終了した時点のアドレス(自己診断終了アドレス)、および、自己診断が終了した時点のチェックコード算出値をRAM103の領域103b,103cに保存する(ステップS17)。
【0065】
次に、CPU101は、RAM103の領域103aに記憶されている自己診断結果フラグを「実施中」に設定し(ステップS18)、ステップS15へ進む。
【0066】
ステップS15では、接触式カードリーダ・ライタ2から受信したコマンドの処理を開始する。次に、CPU101は、コマンド処理実行後、その処理結果に応じたステータスワード(SW)を接触式カードリーダ・ライタ2へ応答し(ステップS19)、再びステップS4のコマンド受信待ち状態へ戻る。
【0067】
以上説明したように上記第2の実施形態に係る動作によれば、1回目のプログラムコード自己診断終了後に、次のコマンドを受信した場合、第1の実施形態と同様な方法で行なわれるプログラムコードの自己診断処理を、再度最初から実行する点を特徴とする。この場合、プログラムコードの自己診断は、ICカード1が活性化された以降、ICカード1が非活性化されるまでの間、永続的に実行され続けることを意味する。
【0068】
なお、前記実施形態は一例であり、前記実施形態以外の形に変更することも可能である。たとえば、外部装置との通信方式は接触通信方式に限定するものではなく、ISO/IEC14443に規定されているような非接触通信方式をサポートしたICカードに対しても同様に適用可能である。
【0069】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行なうことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0070】
1…ICカード(携帯可能電子装置)、1a…ICカード本体、2…接触式カードリーダ・ライタ(外部装置)、11…ICモジュール、12…ICチップ、13…接触端子、101…CPU(制御素子)、102…データメモリ(記憶手段)、103…RAM(記憶手段)、104…ROM(記憶手段)、105…接触通信インタフェイス。

【特許請求の範囲】
【請求項1】
外部装置と通信を行なうための通信手段と、
この通信手段により受信した外部装置からのコマンドに応じた処理を行なう処理手段と、
この処理手段で処理を行なうために実行されるプログラムコードを記憶する第1の記憶手段と、
前記処理手段の実行結果を一時記憶するための第2の記憶手段と、
前記プログラムコードが破壊されていないことを確認するためのチェックコード期待値をあらかじめ記憶している第3の記憶手段と、
前記通信手段により外部装置から1つ目のコマンドを受信した際、前記第1の記憶手段に記憶されたプログラムコードに対するチェックコードの算出を当該プログラムコードが記憶された先頭アドレスから開始するチェックコード算出手段と、
このチェックコード算出手段によるチェックコードの算出があらかじめ設定されたサイズまで終了したことを判断すると、その時点で全プログラムコードのチェックコード算出が終了していない場合、算出した中間までの中間チェックコードおよびチェックコードの算出が終了した最終チェック済アドレス情報を前記第2の記憶手段に一時記憶した後、前記通信手段により当該コマンドに対する処理結果を前記外部装置へ応答する手段と、
前記1つ目のコマンドに続く後続のコマンドを受信した場合、前記第2の記憶手段に一時記憶した最終チェック済アドレスおよび中間チェックコードを用いて、前記第1の記憶手段に記憶されたチェックコードの算出が終了していないプログラムコードの先頭アドレスからチェックコードの算出を継続して行なうよう前記チェックコード算出手段を制御する手段と、
前記チェックコード算出手段により前記第1の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した場合、前記第3の記憶手段に記憶されたチェックコード期待値と前記チェックコード算出手段により算出されたチェックコードとを比較する比較手段と、
この比較手段による比較の結果、両者が一致した場合は自己診断終了と判断して、当該コマンドに対する処理結果を前記外部装置へ応答し、両者が不一致の場合は当該コマンドに対する処理結果を破棄して、自己診断異常を意味するエラーコードを前記外部装置へ応答する手段と、
を具備したことを特徴とする携帯可能電子装置。
【請求項2】
前記チェックコード算出手段により前記第1の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した後、さらに後続するコマンドを受信した場合、再度、前記第1の記憶手段に記憶されたプログラムコードの先頭アドレスからチェックコードの算出処理を開始するよう前記チェックコード算出手段を制御する手段をさらに具備したことを特徴とする請求項1記載の携帯可能電子装置。
【請求項3】
外部装置と通信を行なうための通信手段と、この通信手段により受信した外部装置からのコマンドに応じた処理を行なう処理手段と、この処理手段で処理を行なうために実行されるプログラムコードを記憶する第1の記憶手段と、前記処理手段の実行結果を一時記憶するための第2の記憶手段と、前記プログラムコードが破壊されていないことを確認するためのチェックコード期待値をあらかじめ記憶している第3の記憶手段と、前記通信手段により外部装置から1つ目のコマンドを受信した際、前記第1の記憶手段に記憶されたプログラムコードに対するチェックコードの算出を当該プログラムコードが記憶された先頭アドレスから開始するチェックコード算出手段と、このチェックコード算出手段によるチェックコードの算出があらかじめ設定されたサイズまで終了したことを判断すると、その時点で全プログラムコードのチェックコード算出が終了していない場合、算出した中間までの中間チェックコードおよびチェックコードの算出が終了した最終チェック済アドレス情報を前記第2の記憶手段に一時記憶した後、前記通信手段により当該コマンドに対する処理結果を前記外部装置へ応答する手段と、前記1つ目のコマンドに続く後続のコマンドを受信した場合、前記第2の記憶手段に一時記憶した最終チェック済アドレスおよび中間チェックコードを用いて、前記第1の記憶手段に記憶されたチェックコードの算出が終了していないプログラムコードの先頭アドレスからチェックコードの算出を継続して行なうよう前記チェックコード算出手段を制御する手段と、前記チェックコード算出手段により前記第1の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した場合、前記第3の記憶手段に記憶されたチェックコード期待値と前記チェックコード算出手段により算出されたチェックコードとを比較する比較手段と、この比較手段による比較の結果、両者が一致した場合は自己診断終了と判断して、当該コマンドに対する処理結果を前記外部装置へ応答し、両者が不一致の場合は当該コマンドに対する処理結果を破棄して、自己診断異常を意味するエラーコードを前記外部装置へ応答する手段とを有したICモジュールと、
このICモジュールを収納したICカード本体と、
を具備したことを特徴とするICカード。
【請求項4】
前記ICモジュールは、前記チェックコード算出手段により前記第1の記憶手段に記憶されたプログラムコードに対する全てのチェックコードの算出処理が終了した後、さらに後続するコマンドを受信した場合、再度、前記第1の記憶手段に記憶されたプログラムコードの先頭アドレスからチェックコードの算出処理を開始するよう前記チェックコード算出手段を制御する手段をさらに具備したことを特徴とする請求項3記載のICカード。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2012−150606(P2012−150606A)
【公開日】平成24年8月9日(2012.8.9)
【国際特許分類】
【出願番号】特願2011−8003(P2011−8003)
【出願日】平成23年1月18日(2011.1.18)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】