(57)【特許請求の範囲】
【請求項１】
外部機器からコマンドを受信する受信部と、
受信したコマンドに対応した処理を実行するアプリケーション部と、
特定の処理機能をハードウェアで構成したモジュールを複数有するハードウェアモジュール部と、
前記アプリケーション部からの指示に基づいて前記モジュールを制御してその結果を取得して前記アプリケーション部に返信するＡＰＩ（アプリケーション・プログラミング・インターフェース）部と、
前記アプリケーション部から前記コマンドの処理結果を取得して前記外部機器に送信する送信部と、を備え
少なくとも一つの前記モジュールは、前記携帯可能電子装置が動作する環境に関する情報を検知し、
前記アプリケーション部は、前記ＡＰＩ部を介して取得した前記環境に関する情報に基づいて前記コマンドに対応した処理を実行する方法を選択する、
ことを特徴とする携帯可能電子装置。
【請求項２】
前記ハードウェアモジュール部は、環境に関する情報を検知するモジュールとして、
外部から供給されるクロック周波数を検知するクロック検知モジュール、前記携帯可能電子装置の周辺温度を検知する温度検知モジュール、及び外部から供給される電源電圧を検知する電圧検知モジュールを備えたことを特徴とする請求項１に記載の携帯可能電子装置。
【請求項３】
前記ハードウェアモジュール部は、暗号の生成と解読を処理する暗号モジュール、及び乱数を生成する乱数生成モジュールを備え、
前記アプリケーション部は、前記環境に関する情報に基づいて前記暗号モジュール、及び乱数生成モジュールの動作可否、あるいはソフトウェアによる代替を選択して処理を実行することを特徴とする請求項１に記載の携帯可能電子装置。
【請求項４】
前記ハードウェアモジュール部は、前記携帯可能電子装置の内部クロックを発生する内部クロックモジュールを更に有し、
前記アプリケーション部は、
前記ＡＰＩ部を介して電圧検知モジュールから取得した電源電圧が第１の所定値以上のときは、前記ＡＰＩ部を介して前記内部クロックモジュールが発生するクロック周波数を増加させ、
前記ＡＰＩ部を介して電圧検知モジュールから取得した電源電圧が前記第１の所定位置よりも小さい第２の所定値以下のときは、前記ＡＰＩ部を介して前記内部クロックモジュールが発生するクロック周波数を減少させることを特徴とする請求項２に記載の携帯可能電子装置。
【請求項５】
前記アプリケーション部は、ソースプログラムが高級言語であるソフトウェアで構成され、前記ソフトウェアは追加、削除可能であることを特徴とする請求項１乃至４の何れか１項に記載の携帯可能電子装置。
【請求項６】
請求項１乃至５の内のいずれか１項に記載の各部を有するＩＣモジュールと、
このＩＣモジュールを収納したＩＣカード本体と
を備えたことを特徴とするＩＣカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施の形態は、ハードウェア（ＨＷ）モジュールとＡＰ（アプリケションプログラム）との間で情報の授受を行うＡＰＩ（アプリケーション・プログラミング・インタフェース）を備えた携帯可能電子装置及びＩＣカードに関する。
【背景技術】
【０００２】
一般的に、携帯可能電子装置として用いられるＩＣカードは、プラスチックなどで形成されたカード状の本体と本体に埋め込まれたＩＣモジュールとを備えている。ＩＣモジュールは、ＩＣチップを有している。ＩＣチップは、電源が無い状態でもデータを保持することができるＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）またはフラッシュＲＯＭなどの不揮発性メモリと、種々の演算を実行するＣＰＵとを有している。
【０００３】
ＩＣカードは、携帯性に優れ、且つ、外部装置との通信及び複雑な演算処理を行う事ができる。また、偽造が難しい為、ＩＣカードは、機密性の高い情報などを格納してセキュリティシステム、電子商取引などに用いられることが想定される。
【０００４】
ＩＣカードは、上位端末から電源・磁界・クロックを供給されることにより動作する。
【０００５】
既存のＩＣカードでは、これらの外部から供給される電源・磁界・クロックがＩＣカードの動作に十分なだけ供給されているかをＩＣカード内に搭載された検知モジュールにて検知し、十分であれば動作し、十分でなければ動作を止める制御を行っていた。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−４８６４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、ＩＣカードは携帯電話端末、テレビ受像機、自動改札機など多様な上位端末と接続して情報を授受する。これら上位端末から供給される電源・磁界・クロックは、上位端末が使用される環境、条件によってそれぞれ異なる。例えば、携帯電話端末では電源が限られているため、携帯電話端末から供給される電源電圧が低い。従って、ＩＣカードとアプリケーションとの組み合わせがその条件に対応していない場合には、動作が出来ない。また、供給される電源電圧が高く、クロック周波数も高い場合ではＩＣカード内部の温度が上昇する。その結果、温度検知モジュールが温度高を検知してＩＣカードの動作が停止する。
【０００８】
逆に、供給される電源・磁界・クロックに十分な余裕があり、ＩＣカードを高電圧、高クロックで動作させることが可能であったとしても、そのような高負荷状態を継続すると、消費電力が高くなり、電源を供給する端末の電源負荷を増大させる。
【０００９】
一方、ＩＣカードにおいては、メモリの高密度化、ＣＰＵの高速化が図られている。その結果、ＩＣカード発行後に送受信インターフェースを介してアプリケーションの追加・削除を行うことが出来るＩＣカードも登場している。またアプリケーションが高級言語で記述され、準拠しているＩＣカードプラットフォーム仕様が同じであれば、ＬＳＩの種類によらずアプリケーションを搭載することが可能となりつつある。しかしながら、ＩＣカードプラットフォーム仕様が同じであっても上述のようにアプリケーションが動作する環境は多様であり、更にＬＳＩには性能差があるため、ＩＣカードによっては、アプリケーションの機能を完全には実行出来ない、あるいはアプリケーションの動作が不安定になる等の制約が発生していた。
【００１０】
従って、多種多様な動作環境に柔軟に対応することのできる携帯可能電子装置及びＩＣカードに対するニーズがある。
【課題を解決するための手段】
【００１１】
上記課題を解決するための本発明の実施の形態によれば、外部機器からコマンドを受信する受信部と、受信したコマンドに対応した処理を実行するアプリケーション部と、特定の処理機能をハードウェアで構成したモジュールを複数有するハードウェアモジュール部と、前記アプリケーション部からの指示に基づいて前記モジュールを制御してその結果を取得して前記アプリケーション部に返信するＡＰＩ（アプリケーション・プログラミング・インターフェース）部と、前記アプリケーション部から前記コマンドの処理結果を取得して前記外部機器に送信する送信部とを備えた携帯可能電子装置が提供される。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態のＩＣカードを利用した処理システムの構成を示す図。
【図２】本実施の形態のＩＣカードの構成例について説明するための図。
【図３】本実施の形態のＩＣカードの通信部の接続端子構成を示す図。
【図４】従来技術のＩＣカードのソフトウェア構成例を示す図。
【図５】本実施の形態のＩＣカードのソフトウェア構成例を示す図。
【図６】従来技術におけるコマンド送受信シーケンス例を示す図。
【図７】本実施の形態におけるコマンド送受信シーケンス例を示す図。
【図８】ＨＷモジュール部の各モジュールに対応する入力パラメータの例を示す図。
【発明を実施するための形態】
【００１３】
（第１の実施形態）  
以下、図面を参照しつつ本実施の形態の携帯可能電子装置について説明する。なお、本実施の形態では、携帯可能電子装置はＩＣカードとして説明するが、ＩＣカードに限られない。
【００１４】
図１は、本実施の形態のＩＣカードを利用した処理システム１００の構成を示す図である。この処理システム１００は、ＩＣカード１０１、カードリーダ／ライタ１０２、端末１０３、キーボード１０４、モニタ１０５及びプリンタ１０６を備える。ＩＣカード１０１はカードリーダ／ライタ１０２と接続可能である。端末１０３は、カードリーダ／ライタ１０２、キーボード１０４、モニタ１０５及びプリンタ１０６を接続して構成される。
【００１５】
カードリーダライタ１０２は、ＩＣカード１０１と通信を行うためのインターフェース装置である。カードリーダライタ１０２は、ＩＣカード１０１に対して、電源供給、クロック供給、リセット制御、及びデータの送受信を行う。
【００１６】
端末１０３は、カードリーダライタ１０２を介してＩＣカード１０１に対して種々のコマンドを入力する。ＩＣカード１０１は、例えば、カードリーダライタ１０２からデータの書き込みコマンドを受信した場合、受信したデータを内部の不揮発性メモリに書き込む処理を行う。また、端末１０３は、ＩＣカード１０１に読み取りコマンドを送信することにより、ＩＣカード１０１からデータを読み出す。端末１０３は、ＩＣカード１０１から受信したデータに基づいて種々の処理を行う。
【００１７】
モニタ１０５は、端末１０３によって制御されて種々の情報を表示する。キーボード１０４は、処理システム１００の操作者による操作を信号に変換して端末１０３に出力する。プリンタ１０６は、端末１０３からの情報を印字出力する。
【００１８】
図２は、本実施の形態のＩＣカード１０１の構成例について説明するための図である。  
ＩＣカード１０１は、カード状の本体と、本体に内蔵されたＩＣモジュール２００とを備えている。そしてＩＣモジュール２００には、メモリ部２００ａ、ＨＷ（ハードウェア）モジュール部２００ｂ、制御素子２０１及び通信部２０６が設けられている。
【００１９】
制御素子２０１は、例えばＣＰＵ、レジスタなどを備え、ＩＣカード１０１における処理を統括して制御する。通信部２０６は、カードリーダ／ライタ１０２との間の通信処理を実行する。通信方式は、接触式に限られず、無線式、ＳＷＰ式、ＵＳＢ式のいずれを採用しても良い。
【００２０】
メモリ部２００ａは、記憶内容が消去可能な不揮発性のデータメモリ２０２、ワーキングメモリ２０３、プログラムメモリ２０４及びコプロメモリ２０５を備えている。
【００２１】
データメモリ２０２は、各種データの記憶に使用され、たとえば、ＥＥＰＲＯＭ、Ｆｌａｓｈ  Ｍｅｍｏｒｙなどで構成されている。ワーキングメモリ２０３は、制御素子２０１が処理を行う際の処理データを一時的に保持するためのメモリであり、たとえば、ＲＡＭなどで構成される。プログラムメモリ２０４は、たとえば、マスクＲＯＭで構成されており、制御素子２０１のプログラムなどを記憶するものである。コプロメモリ２０５は、暗号処理を行う際の処理データを一時的に保持するためのメモリであり、たとえば、ＲＡＭなどで構成される。
【００２２】
ＨＷモジュール部２００ｂには、暗号処理を行う暗号モジュール２０７、乱数を生成する乱数生成モジュール２０８、電源端子に供給された電源電圧を検知する電圧検知モジュール２０９、クロック端子に供給されるクロック周波数を検知するクロック検知モジュール２１０、ＩＣカード１０１の温度状態を検知する温度検知モジュール２１１及び内部クロックモジュール２１２が備えられている。
【００２３】
暗号モジュール２０７は、暗号計算を実行する。暗号モジュール２０７は、たとえば、ＤＥＳ、ＲＳＡ、ＡＥＳのコプロセッサ、転置回路などで構成される。乱数生成モジュール２０８は、乱数を生成する。電圧検知モジュール２０９は、供給される電源の電圧値を検知し、予め設定されたＩＣカード動作可能範囲を電圧が外れた場合に、ＩＣカード１０１の動作を停止する信号を制御素子２０１に送信する。クロック検知モジュール２１０は、供給されるクロック周波数を検知し、予め設定されたＩＣカード動作可能範囲をクロック周波数が外れた場合に、ＩＣカード１０１の動作を停止する信号を制御素子２０１に送信する。
【００２４】
温度検知モジュール２１１は、ＩＣカード１０１の温度を検知し、予め設定されたＩＣカード動作可能範囲をＩＣカード１０１の温度が外れた場合に、ＩＣカード１０１の動作を停止する信号を制御素子２０１に送信する。内部クロックモジュール２１２は、カードリーダ／ライタ１０２から供給されるクロック（外部クロックと定義する。）とは別に、ＩＣカード構成例２００の内部で利用するクロック（内部クロックと定義する。）を生成し、制御素子２０１とＨＷモジュール部２００ｂの各モジュール２０７、２０８に供給する。
【００２５】
図３は、本実施の形態のＩＣカード１０１の通信部２０６の接続端子構成を示す図である。なお、上述のように、通信部２０６の通信方式は、接触式に限られず、無線式、ＳＷＰ式、ＵＳＢ式のいずれを採用しても良い。
【００２６】
電源端子３０１は、カードリーダ／ライタ１０２から供給電源を受け入れる。リセット端子３０２は、カードリーダ／ライタ１０２からリセット信号を受信する。クロック端子３０３は、カードリーダ／ライタ１０２から供給されるクロックを受信する。グランド端子３０５は、カードリーダ／ライタ１０２を経由して接地される、通信端子３０７は、カードリーダ／ライタ１０２と通信信号を授受する。なお、未使用端子３０４、３０６、３０８は、Ｉ無線式、ＳＷＰ式、ＵＳＢ式により通信端子として利用される場合がある。
【００２７】
図４は、従来技術のＩＣカードのソフトウェア構成例を示す図である。ＩＣカード１０１は、ソフトウェアとして、通信ドライバ部４０１、ＩＣカードＯＳ部４０２及びアプリケーション部４０３を備えている。
【００２８】
通信ドライバ部４０１は、通信部２０６を制御する。ＩＣカードＯＳ部４０２は、ＩＣカードに搭載されたＨＷの制御、メモリ管理、アプリケーション管理、コマンド管理を行う。アプリケーション部４０３は、受信したコマンドに対応した処理を実行する。
【００２９】
図５は、本実施の形態のＩＣカードのソフトウェア構成例を示す図である。ＩＣカード１０１は、ソフトウェアとして、通信ドライバ部５０１、ＩＣカードＯＳ部５０２、アプリケーション部５０３及びＡＰＩライブラリ部５０４を備えている。
【００３０】
通信ドライバ部５０１は、通信部２０６を制御する。ＩＣカードＯＳ部５０２は、ＩＣカードに搭載されたＨＷの制御、メモリ管理、アプリケーション管理、コマンド管理を行う。アプリケーション部５０３は、受信したコマンドに対応した処理を実行する。ＡＰＩライブラリ部５０４は、ＡＰＩ（アプリケーション・プログラミング・インタフェース）を備える。ＡＰＩは、ソフトウェアアプリケーションが使用できる命令、関数の集合である。アプリケーション部５０３のアプリケーションＡ，Ｂ，Ｃは、ＡＰＩを用いて通信部２０６、暗号モジュール２０７、乱数生成モジュール２０８、各検知モジュール２０９、２１０、２１１、内部クロックモジュール２１２を利用することができる。即ち、ＡＰＩは、アプリケーション部５０３とＨＷモジュール部との間で、情報を取得して授受する機能を備えている。
【００３１】
なお、アプリケーションＡ、Ｂ、Ｃは、高級言語で記述されるＩＣカード用アプリケーションである。通信部２０６は、アプリケーションＡ、Ｂ、Ｃをデータとして受信する。ＩＣカードＯＳ部５０２は、ＩＣカード発行後であってもアプリケーションＡ、Ｂ、ＣをＩＣカード１０１に追加・削除することができる。アプリケーションＡ、Ｂ、Ｃは、同じ高級言語の仕様に準拠した別のＩＣカードにも搭載可能である。ここで、本実施の形態では、高級言語とは、機械語、アセンブリ言語と比べてＯＳ、ＩＣカードの構成に依存することの少ないプログラミング言語のことを意味する。
【００３２】
続いて、ＩＣカード１０１の動作を説明する。
【００３３】
図１のＩＣカードを利用した処理システム１００に示すように、ＩＣカード１０１は、カードリーダ／ライタ１０２と接続される。接続方法が接触方式の場合は、図３に示すＩＣカード１０１の接続端子と、対応するカードリーダ／ライタ１０２の端子とが接続される。接続が完了すると、カードリーダ／ライタ１０２は、電源、クロックをＩＣカード１０１に供給し、リセット信号（ＲＳＴ）を送信する。ＩＣカード１０１は供給された電源、クロックと、温度が予め設定された動作可能範囲内であることを検知回路により検知し、リセット信号をリセット端子３０２で受信したことを通知する信号（ＡＴＲ）を通信端子３０７より送信する。なお、電源、クロック、温度いずれかが、動作可能範囲外となった場合、検知モジュールにより検知され、ＩＣカード１０１の動作は停止する。
【００３４】
この後、カードリーダ／ライタ１０２とＩＣカード１０１は通信端子を介してデータの送受信を行う。
【００３５】
図６は、従来技術におけるコマンド送受信シーケンス例を示す図である。
【００３６】
上述の初期応答が完了し、ＩＣカード１０１で処理を実行するアプリケーションが起動した後、カードリーダ／ライタ１０２は、コマンドをＩＣカード１０１に対して送信する。ステップ６０１において、通信ドライバ部４０１はコマンドを含む受信データを受信する。ステップ６０２において、通信ドライバ部４０１は受信処理を実行する。通信ドライバ部４０１は受信データに含まれるプロトコルを解釈してコマンドデータを抽出する。通信ドライバ部４０１は、抽出したコマンドデータをＩＣカードＯＳ部４０２とアプリケーション部４０３で使用する形式に変換を行い、ステップ６０３において、変換したコマンドデータをＩＣカードＯＳ部４０２に送信する。
【００３７】
ステップ６０４において、ＩＣカードＯＳ部４０２は、受け取ったコマンドデータに対応した処理をコマンド処理として実行する。コマンド処理ごとに、アプリケーションが割当てられている。そして、ステップ６０５において、ＩＣカードＯＳ部４０２は、対応した処理を実行するための関数を呼び出す。関数とは、例えば暗号計算を実行する、メモリの内容を書き換えるなどのＨＷを直接制御する処理である。ステップ６０６において、アプリケーションは指定された関数を実行する。関数は、ＩＣカードＯＳ部４０２の制御の下で実行される。即ち、ＨＷモジュール部はＩＣカードＯＳ部４０２により制御される。ステップ６０７において、アプリケーション部４０３は、関数を実行した結果を戻り値としてＩＣカードＯＳ部４０２に返信する。
【００３８】
ステップ６０８において、ＩＣカードＯＳ部４０２は、戻り値を通信用のフォーマットに変換すると共に、コマンド処理が成功したか否かを表すステータスワードを付加してレスポンスデータを生成する。ステップ６０９において、ＩＣカードＯＳ部４０２は、通信ドライバ部４０１にレスポンスデータを送信する。ステップ６１０において、通信ドライバ４０１は、レスポンスデータ６０９にプロトコル情報などカードリーダ／ライタとの通信に必要な情報を付加する送信処理を実行する。ステップ６１１において、カードリーダ／ライタ１０２は、通信ドライバ部４０１から送信された送信データを受信する。
【００３９】
以上のように、従来技術では検知モジュール２０９、２１０、２１１を含むＨＷモジュール部２００ｂは、ＩＣカードＯＳ部４０２により制御されている。従って、ＨＷモジュールの取扱を変更しようとするとそれに整合するようにＩＣカードＯＳ部４０２を変更する必要がある。更にアプリケーションが後で追加された場合、そのアプリケーションでＨＷモジュールを取り扱うことをＩＣカードＯＳ部４０２に規定して整合を図らなければならない。
【００４０】
図７は、本実施の形態におけるコマンド送受信シーケンス例を示す図である。
【００４１】
初期応答が完了し、ＩＣカード１０１で処理を実行するアプリケーションが起動した後、カードリーダ／ライタ１０２は、コマンドをＩＣカード１０１に対して送信する。ステップ７０１において、通信ドライバ部５０１はコマンドを含む受信データを受信する。ステップ７０２において、通信ドライバ部５０１は受信処理を実行する。通信ドライバ部５０１は受信データに含まれるプロトコルを解釈してコマンドデータを抽出する。通信ドライバ部５０１は、抽出したコマンドデータをＩＣカードＯＳ部５０２とアプリケーション部５０３で使用する形式に変換を行い、ステップ７０３において、変換したコマンドデータをＩＣカードＯＳ部５０２に送信する。
【００４２】
ステップ７０４において、ＩＣカードＯＳ部５０２は、受信したコマンドデータが起動しているアプリケーションが処理するコマンドかどうかを確認する。確認がＯＫの場合、ステップ７０５おいて、アプリケーション部５０３に受信したコマンドデータを送信する。従って、ＩＣカードＯＳ部５０２は、従来のようにコマンドデータを解釈してＨＷモジュールを制御する関数を指定する動作を実行しない。
【００４３】
ステップ７０６おいて、アプリケーション部５０３に所属するアプリケーションは、受信したコマンドにＨＷモジュールを制御する命令が含まれているかどうかを調べる。そのような命令が含まれていた場合は、ステップ７０７おいて、アプリケーションは、ＡＰＩライブラリ部５０４に入力パラメータを送信する。この入力パラメータによってどのＨＷモジュールをどのように制御するかを指定することができる。例えば、ＡＰＩライブラリ部５０４に検知回路から情報を取得するＡＰＩが存在していた場合、電圧回路から電圧を取得したいときは、入力パラメータに０１を設定して当該ＡＰＩを起動する。クロック回路からクロック数を取得したいときは入力パラメータに０２を設定して当該ＡＰＩを起動する。
【００４４】
ステップＳ７０８において、ＡＰＩはＡＰＩ処理を実行する。ＡＰＩ処理では、ＡＰＩは、入力パラメータを解析し、該当するＨＷモジュールが処理できる形の入力パラメータに変換してＨＷモジュール部２００ｂに送信する。さらに、ＨＷモジュール部２００ｂからの処理結果を受信する。
【００４５】
ＡＰＩとＨＷモジュール部２００ｂとの情報授受を具体的に説明する。例えば、電源電圧を検知する場合、ステップ７０９において、ＡＰＩは、「現在発生している電圧が何ボルトであるかを検知せよ」との指示を表す入力パラメータをＨＷモジュール部２００ｂに送信する。ステップ７１０において、ＨＷモジュール部２００ｂは、電源電圧を測定し、ステップ７１１において、測定した電源電圧値をＡＰＩに送信する。
【００４６】
図８は、ＨＷモジュール部２００ｂの各モジュールに対応する入力パラメータの例を示す図である。なお、図８の各検知モジュールに記載した動作遮断指示とは、それぞれの検知モジュールがＩＣカード１０１の動作を遮断する機能を有効にする指示である。例えば、クロック検知モジュール２１０には、クロック数が１ＭＨｚ〜数ＭＨｚの範囲を超えている場合は、ＩＣカード１０１の動作を停止させる機能を備えている。このような動作遮断もＡＰＩは指示することができる。
【００４７】
ステップ７１２において、ＡＰＩライブラリ部５０４に所属するＡＰＩはアプリケーションに戻り値を送信する。ＡＰＩは、電圧が正常に取得できたときは戻り値に電圧値を表すコードを設定し、正常に電圧が設定できなかったときはそのことを表すコードを戻り値に設定する。アプリケーションは、送信された戻り値に従って処理を進める。たとえば、電源電圧がソフトウェア実行上の制限となる状態であるかどうかを調べる場合、アプリケーションは、ＡＰＩライブラリ部５０４に所属するＡＰＩを介して電圧検知モジュール２０９を用いて検知した電圧値を取得し、ソフトウェアが実行可能かを判定する。アプリケーションは、処理結果に応じて別のＡＰＩを呼び出して次の処理を実行させることもできるし、繰返しＡＰＩを呼び出すこともできる。
【００４８】
従来は図６で示したように、ＩＣカードＯＳ部５０２がＨＷモジュールを制御していた。しかし上述のように、アプリケーションがＡＰＩを介してＨＷモジュールを制御するように構成することで、ＩＣカード１０１は、より柔軟にＨＷモジュールを制御することができる。
【００４９】
例えば、カードリーダ／ライタ１０２がＩＣカード１０１に供給可能な電圧値が、５Ｖ、３Ｖ、１．８Ｖの３段階であって、カードリーダ／ライタ１０２が、５Ｖを供給していたとする。ＡＰＩは戻り値（＝“０ｘ０３”）を返却する。この戻り値（＝“０ｘ０３”）は、この電圧（＝５Ｖ）の下では、ＨＷモジュールが全て実行可能であり、ソフトウェアの実行には制限が設けられていないことを意味する。このように、アプリケーションは、取得した戻り値により、現在カードリーダ／ライタ１０２が供給している電圧値を知るだけでなく、ＩＣカード１０１に搭載されている全てのＨＷモジュールを実行可能であることも知ることが出来る。
【００５０】
またアプリケーションは、電源電圧が５Ｖと、３Ｖ、１．８Ｖに対して十分に供給されているため、一般的に消費電力が高くなる暗号処理や、高クロック動作を実行することができる判断する。更に、アプリケーションは、これらの機能を用いて、一連の処理を高速に行うことが可能と判断する。
【００５１】
ステップ７１３において、アプリケーションは、コマンド実行結果を作成し、ＩＣカードＯＳ部５０２に送信する。コマンド実行結果には、ＨＷモジュールが動作して取得した値、ＨＷモジュールの動作が成功か失敗かの結果などが含まれる。ステップ７１４において、ＩＣカードＯＳ部５０２は、レスポンス処理によりレスポンスデータを作成し、ステップ７１５において、通信ドライバ部５０１へ送信する。レスポンスデータには、コマンド実行結果とともに、コマンド処理が成功か否かを表す、ＩＣカードの規格で定められるステータスワードが付加されている。
【００５２】
ステップ７１６において、通信ドライバ部５０１は、レスポンスデータ７１５にプロトコル情報などカードリーダ／ライタ１０２との通信に必要なプロトコル情報を付加して送信データを生成する。ステップ７１７において、通信ドライバ部５０１は、カードリーダ／ライタ１０２に対して送信処理を行う。
【００５３】
上述のように、アプリケーションはＨＷモジュールの測定値に基づいてＩＣカード１０１が動作する環境を判断する。動作環境を判断するために用いられる物理量には、ＩＣカード１０１周辺の温度、外部からＩＣカード１０１に供給される電源電圧、クロック周波数などがある。また、アプリケーションは、この測定値によってＨＷモジュールの動作を制限する。動作制限を受けるＨＷモジュールには、暗号モジュール２０７、乱数生成モジュール２０８、内部クロックモジュール２１２などがある。
【００５４】
次に、アプリケーションが実施するコマンド処理は以下に説明するようにフレキシブルに構成することが可能である。アプリケーションは、供給されている電圧・クロック情報に基づいて、処理方法を柔軟に選択することができる。
【００５５】
（１）供給される電圧・クロックに応じて、ＨＷモジュールを制御するＡＰＩにより内部クロックモジュールを制御し、内部クロックを変更する。電圧が所定値よりも低い、またはクロック周波数が所定値よりも低い場合、内部クロック周波数を低くする。
【００５６】
（２）供給される電圧・クロックに応じて、サポート可能な暗号の鍵長を変更する。電圧が所定値よりも高い、またはクロック周波数が所定値よりも高い場合、暗号の鍵長を長くする。電圧が低い、またはクロック周波数が低い場合、暗号の鍵長を短くする。
【００５７】
（３）供給される電圧・クロックに応じて、アプリケーションが実行可能かを判断し、実行不可の場合、エラーを送信する。例えば、電圧が所定電圧以上かつクロック周波数が所定の周波数以上である場合は、ハードウェア暗号モジュールの使用を可能とし、そうでない場合は、ハードウェア暗号モジュールの使用を不可としてエラーを送信する。
【００５８】
（４）供給される電圧・クロックに応じて、アプリケーションが実行可能かを判断し、実行不可の場合、実行可能となる電圧・クロックの値をレスポンスデータとして応答する。例えば、電圧が所定電圧以下あるいはクロック周波数が所定の周波数以下である場合、ハードウェア暗号モジュールの使用を不可とし、さらにレスポンスデータに所定電圧、所定周波数を設定する。
【００５９】
（５）供給される電圧・クロックに応じて、アプリケーションが実行可能かを判断し、実行不可の場合、実行可能となるように内部クロックモジュール、暗号モジュール、乱数生成モジュールの機能を、ＨＷモジュールを制御するＡＰＩにより順次停止する。例えば、電圧が第１の所定値以下になったときはまず内部クロックモジュールを停止する。さらに電圧が第２所定値以下になったときは暗号モジュールを停止する。そして、電圧が第３所定値以下になったときは乱数生成モジュールを停止する。
【００６０】
（６）供給される電圧・クロックに応じて、アプリケーションが実行可能かを判断し、実行不可の場合、ＨＷモジュールの実行を禁止し、ソフトウェアによる代替機能用いる。例えば、電圧が所定電圧以下あるいはクロック周波数が所定の周波数以下である場合、暗号モジュール、乱数生成モジュールをハードウェアの機能からソフトウェアの機能に切換える。即ち、暗号モジュールに対しては、ソフトウェアによる暗号処理関数を使用し、乱数生成モジュールに対しては、ソフトウェアによる乱数生成関数を用いる。
【００６１】
また本実施の形態の携帯可能電子装置は、つぎのような機能を備えることができる。  
ＡＰＩ内処理においてソフトウェア継続実行不可と判断した場合、ＡＰＩを呼び出したソフトウェア処理へ制御を渡すことなく外部へ特定の結果を出力する。  
ソフトウェア継続実行不可との判断が供給電力不足に起因し、暗号モジュールの動作が継続できず、外部からの指示を処理できないときは、外部へ電力供給不足である旨を出力する。
【００６２】
［効果］  
以上説明した実施の形態によれば、種々の効果を奏することができる。
【００６３】
アプリケーションは、ＨＷモジュールの状態を取得し、ＩＣカードの制限事項を参照してアプリケーションの動作を制御することが出来る。そのためアプリケーションは、ＩＣカードシステムの状態に適した最適な動作を実行することができる。例えば、電源電圧が高く安定していて、制限が設けられていない場合には、内部クロックを上げてアプリケーション実行速度を上げることが可能であり、また、ハードウェアの暗号モジュールの機能を利用して暗号計算処理を高速に行うことも可能である。  
一方で電源電圧が低く安定しないためＨＷモジュールの動作に制限がある場合、例えば、電圧が低くクロックを下げないと暗号モジュールが動作しない場合は、アプリケーションは、内部クロックモジュールを制御するＡＰＩを利用して内部クロックを下げて実行速度を遅くし、暗号モジュール実行ＡＰＩの利用を止めて、暗号処理をソフトウェア処理に切り替えることで、消費電力を抑えることが可能である。  
このような対応が柔軟に追加削除変更できることは顕著な効果として挙げられる。
【００６４】
また、アプリケーションは、同一の高級言語仕様に準拠したＩＣカード上で動作する。そして、アプリケーションは高級言語仕様に準拠したＡＰＩによりＨＷ状態を検知し、ソフトウェア実行上の制限事項を取得し、ハードウェアの制御を行うことが出来る。このため、個別のハードウェア仕様を意識せずにアプリケーションをプログラミングすることができる。
【００６５】
なお、上述の各実施の形態で説明した機能は、ハードウェアを用いて構成するに留まらず、ソフトウェアを用いて各機能を記載したプログラムをコンピュータに読み込ませて実現することもできる。また、各機能は、適宜ソフトウェア、ハードウェアのいずれかを選択して構成するものであっても良い。
【００６６】
尚、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。  
上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
［１］
外部機器からコマンドを受信する受信部と、
受信したコマンドに対応した処理を実行するアプリケーション部と、
特定の処理機能をハードウェアで構成したモジュールを複数有するハードウェアモジュール部と、
前記アプリケーション部からの指示に基づいて前記モジュールを制御してその結果を取得して前記アプリケーション部に返信するＡＰＩ（アプリケーション・プログラミング・インターフェース）部と、
前記アプリケーション部から前記コマンドの処理結果を取得して前記外部機器に送信する送信部と
を備えたことを特徴とする携帯可能電子装置。
［２］
少なくとも一つの前記モジュールは、前記携帯可能電子装置が動作する環境に関する情報を検知し、
前記アプリケーション部は、前記ＡＰＩ部を介して取得した前記環境に関する情報に基づいて前記コマンドに対応した処理を実行する方法を選択すること
を特徴とする［１］に記載の携帯可能電子装置。
［３］
前記ハードウェアモジュール部は、環境に関する情報を検知するモジュールとして、
外部から供給されるクロック周波数を検知するクロック検知モジュール、前記携帯可能電子装置の周辺温度を検知する温度検知モジュール、及び外部から供給される電源電圧を検知する電圧検知モジュールを備えたことを特徴とする［２］に記載の携帯可能電子装置。
［４］
前記ハードウェアモジュール部は、暗号の生成と解読を処理する暗号モジュール、及び乱数を生成する乱数生成モジュールを備え、
前記アプリケーション部は、前記環境に関する情報に基づいて前記暗号モジュール、及び乱数生成モジュールの動作可否、あるいはソフトウェアによる代替を選択して処理を実行することを特徴とする［２］に記載の携帯可能電子装置。
［５］
前記ハードウェアモジュール部は、前記携帯可能電子装置の内部クロックを発生する内部クロックモジュールを更に有し、
前記アプリケーション部は、
前記ＡＰＩ部を介して電圧検知モジュールから取得した電源電圧が第１の所定値以上のときは、前記ＡＰＩ部を介して前記内部クロックモジュールが発生するクロック周波数を増加し、
前記ＡＰＩ部を介して電圧検知モジュールから取得した電源電圧が前記第１の所定位置よりも小さい第２の所定値以下のときは、前記ＡＰＩ部を介して前記内部クロックモジュールが発生するクロック周波数を減少することを特徴とする［３］に記載の携帯可能電子装置。
［６］
［１］乃至［５］の内のいずれか１項に記載の各部を有するＩＣモジュールと、
このＩＣモジュールを収納したＩＣカード本体と
を備えたことを特徴とするＩＣカード。
［７］
前記アプリケーション部は、ソースプログラムが高級言語であるソフトウェアで構成され、前記ソフトウェアは追加、削除可能であることを特徴とする［６］に記載のＩＣカード。
【符号の説明】
【００６７】
１０１…ＩＣカード、１０２…リーダライタ、１０３…端末、１０４…キーボード、１０５…モニタ、１０６…プリンタ、２００…ＩＣモジュール、２００ａ…メモリ部、２００ｂ…ハードウェアモジュール部、２０１…制御素子、２０２…データメモリ、２０３…ワーキングメモリ、２０４…プログラムメモリ、２０５…コプロメモリ、２０６…通信部、２０７…暗号モジュール、２０８…乱数生成モジュール、２０９…電圧検知モジュール、２１０…クロック検知モジュール、２１１…温度検知モジュール、２１２…内部クロックモジュール、５０１…通信ドライバ部、５０３…アプリケーション部、５０４…ＡＰＩライブラリ部。
【図１】
0005444143.tif 000002
【図２】
0005444143.tif 000003
【図３】
0005444143.tif 000004
【図４】
0005444143.tif 000005
【図５】
0005444143.tif 000006
【図６】
0005444143.tif 000007
【図７】
0005444143.tif 000008
【図８】
0005444143.tif 000009