(57)【特許請求の範囲】
【請求項１】
端末からの要求によりＩＣカード内のファイルからデータを読み出す際の読出しデータ長の指定方法であって、
ＩＣカードからのレスポンスがＴＬＶ構造をなし、そのＬのフィールド長が可変である場合において、端末は、要求するデータ長に、そのデータ長に応じて決まる所定の値を加算し、その加算値をＩＣカードに通知し、
ＩＣカードは、その加算値から前記所定の値を減算することにより前記データ長を算出する、
ことを特徴とする読出しデータ長の指定方法。
【請求項２】
端末からの要求によりＩＣカード内のファイルからデータを読み出す際の読出しデータ長の指定方法であって、
ＩＣカードからのレスポンスがＴＬＶ構造をなし、そのＬのフィールド長が可変である場合において、端末は要求するデータ長に前記Ｌのフィールド長の最大値を加算し、その加算値をＩＣカードに通知し、
ＩＣカードは、その加算値から前記最大値を減算することにより前記データ長を算出する、
ことを特徴とする読出しデータ長の指定方法。
【請求項３】
請求項２記載の読出しデータ長の指定方法において、
ＩＣカードが必ず前記最大長を用いてＬのフィールドを符号化する、
ことを特徴とする読出しデータ長の指定方法。
【請求項４】
請求項２記載の読出しデータ長の指定方法において、
ＩＣカードがデータの長さに応じて可変長でＬのフィールドを符号化する、
ことを特徴とする読出しデータ長の指定方法。
【請求項５】
請求項２記載の読出しデータ長の指定方法において、
前記最大値を、端末またはＩＣカードがもう一方へ通知する、
ことを特徴とする読出しデータ長の指定方法。
【請求項６】
端末からの要求によりＩＣカード内のファイルからデータを読み出す際の読出しデータ長の指定方法であって、
ＩＣカードからのレスポンスがＴＬＶ構造をなし、そのＬのフィールド長が可変である場合において、端末は要求するデータ長に応じて、複数の計算式から一つの計算式を選択し、その選択された計算式に基づいて前記データ長を変換し、その変換値をＩＣカードに通知し、ＩＣカードは、その変換値に応じて、端末が有する前記計算式と対をなす複数の計算式から一つの計算式を選択し、その選択された計算式によって前記変換値から前記データ長を算出する第１の読出しデータ長の指定方法と、
ＩＣカードからのレスポンスがＴＬＶ構造をなし、そのＬのフィールド長が可変である場合において、端末は要求するデータ長に前記Ｌのフィールド長の最大値を加算し、その加算値をＩＣカードに通知し、ＩＣカードは、その加算値から前記最大値を減算することにより前記データ長を算出する第２の読出しデータ長の指定方法と、
のいずれを適用するかを識別するための情報を、端末またはＩＣカードがもう一方へ知らせ、該情報に従い、端末及びＩＣカード間における読出しデータ長の指定方法を切り換える、
ことを特徴とする読出しデータ長の指定方法。
【請求項７】
端末からの要求によりＩＣカード内のファイルからデータを読み出す際の読出しデータ長の指定方法であって、
ＩＣカードからのレスポンスがＴＬＶ構造をなし、そのＬのフィールド長が可変である場合において、端末からＩＣカードへのコマンドは第一のフィールドと第二のフィールドを有し、端末はＩＣカードからのレスポンスのデータフィールドの最大長を前記第一のフィールドで指定し、かつ要求するデータ長を前記第二のフィールドで指定する、
ことを特徴とする読出しデータ長の指定方法。
【請求項８】
請求項７記載の読出しデータ長の指定方法において、
前記ファイルに格納されているデータが第一のＴＬＶ構造をなしており、ＩＣカードからのレスポンスが、前記第一のＴＬＶ構造のデータを入れ子にした形式の第二のＴＬＶ構造をなす場合において、前記第一のＴＬＶ構造のＬの積算値を前記第二のフィールドで指定する、
ことを特徴とする読出しデータ長の指定方法。
【請求項９】
請求項８記載の読出しデータ長の指定方法において、
前記ファイルが空き領域を有する場合において、レスポンスを生成する際に、前記ＩＣカードがこの空き領域を読み飛ばす、
ことを特徴とする読出しデータ長の指定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＩＣカードのファイルからデータを読み出す際のデータ長の指定方法に関する。
【背景技術】
【０００２】
近年、磁気カードに代わるハイセキュリティなデバイスとしてＩＣカードが実用化されつつある。ＩＣカードは不揮発性メモリを有し、そこにファイル形式でデータを格納することができる。ＩＣカードのファイルにはいくつかの種類があるが、最も簡易で汎用的に使用されているものが透過型ファイルと呼ばれる形式のものである。これは図１４に示すように、ファイルの先頭アドレスを０番地とし、そこからのオフセット値（開始アドレス）とデータ長とを指定してアクセスするタイプのものである。
【０００３】
透過型ファイル９からデータ読出しを行う場合、ＩＣカードに対する通常の読出しコマンド１５００は、図１５に示す構造をとる。コマンドヘッダ１５１にはコマンド名の他、読み出したい開始アドレスを指定する。Ｌｅ１５２は本コマンドに対する応答としてＩＣカードから返されるレスポンスにおいて、どれだけの長さのデータを要求するかを指定するためのものであり、本コマンドの場合は、透過型ファイル９から読み出したいデータ長を設定する。
【０００４】
本コマンド１５００に対するレスポンス１６００は、図１６に示す構造をとる。データ１６１は、透過型ファイル９から読み出されたデータであり、コマンドのＬｅ１５２で指定された分の長さを有する。ステータス１６２はコマンドの実行結果を示すものであり、通常は「正常終了」を示す情報が設定される。
【０００５】
ここでＬｅ１５２の意味合いをより詳しく説明すると、Ｌｅ１５２はレスポンスデータ１６１として要求する長さの最大長を指定するものである。例えば、Ｌｅ分の長さのデータを読み出す前に透過型ファイル９の終端に達した場合、ＩＣカードは透過型ファイル９の終端までのデータを読み出す。この場合、ステータス１６２として「正常終了」を示す代わりに、透過型ファイル９の終端に達したことを示す警告情報を返してもよい。このようにＬｅ１５２は要求する最大長を示すものであり、ＩＣカードはＬｅ１５２を超える長さのデータを返してはならない。逆に、Ｌｅ以内であればＩＳＯ／ＩＥＣ規格を満たしていることになる。なお、Ｌｅ１５２の値として“００”（１６進表記、以下同様）が指定された場合は、２５６バイトを意味し、最大２５６バイトまでのデータ１６１を１回のコマンドで読み出すことができる。
【０００６】
また、詳細な説明は割愛するが、２５６バイトを超える長さのデータを読み出したい場合は、３バイトでＬｅ１５２を表す。これを拡張Ｌｅと呼ぶ。特にＬｅ１５２として“００００００”（３バイト）を設定することにより最大６４Ｋバイト（６５，５３６）まで読み出すことが可能となる。
【０００７】
コマンドヘッダ１５１は４バイトで構成され、そのうち１５ビットが開始アドレスを指定するために使用される。したがって、最大３２Ｋバイト（３２，７６７）までの指定が可能である。最近ではＩＣカードの用途の広がりに伴ってファイルサイズが大きくなる傾向にあり、３２Ｋバイトを超える透過型ファイルを扱うためには、上記で説明したコマンド（以下、通常読出しコマンドと記す）の機能を拡張したコマンド（以下、拡張読出しコマンドと記す）が必要となる。この拡張読出しコマンド１７００の構造を、図１７に示す。
【０００８】
コマンドヘッダ１７１にはコマンド名を指定する。Ｌｃ１７２は後続のＴＬＶオブジェクトの長さを示す。一般にＴＬＶオブジェクトは、タグ（Ｔａｇ）と、長さ情報（Ｌｅｎｇｔｈ）と、値（Ｖａｌｕｅ）の３要素で構成される（それぞれの頭文字をとって“ＴＬＶ”と呼ぶ。）。タグＴはそのオブジェクトの種別を示し、長さ情報Ｌは後続の値Ｖの長さを示す。また値Ｖはこのオブジェクトの情報本体である。本コマンドの場合、値Ｖ１７５には読み出したい開始アドレスＡｄｄｒを設定する。タグＴ１７３には、このデータオブジェクトが開始アドレスを指定するものであるということを示す固定値を設定する。長さ情報Ｌ１７４は、値Ｖ（Ａｄｄｒ）１７５の長さによって可変である。この構造であれば、例えば値Ｖ（Ａｄｄｒ）１７５を３バイトで表現すれば、１６Ｍまでのアドレス指定が可能となる。最後に、Ｌｅ１７６は前述したように、レスポンスデータとして要求する最大長を示す。
【０００９】
拡張読出しコマンド１７００に対するレスポンス１８００は、図１８に示す構造をとる。該レスポンス１８００もＴＬＶ構造をとり、読み出されるデータを値Ｖ１８３としてカプセル化する。タグＴ１８１には、このデータオブジェクトが読出しデータであるということを示す固定値を設定する。長さ情報Ｌ１８２は、値Ｖ１８３の長さを示すが、下記の規則に従ってコード化される（図１９参照）。
【００１０】
Ｖ１８３の長さが０〜１２７の範囲にあるとき、Ｌ１８２は１バイトで構成され、最上位ビットを‘０’（２進表記）に設定し、残りの７ビットでＶ１８３の長さを表す。また、Ｖ１８３の長さが１２８以上の場合、Ｌ１８２は複数バイトで構成され、最上位バイトの最上位ビットを‘１’（２進表記）に設定し、残りの７ビットで、後続するＬのバイト数を表す。そして、後続するＬにＶ１８３の長さを設定する。例えばＬ１８２が３バイトで構成される場合、最上位バイトと後続する２バイトで構成され、最上位バイトには“８２”という値を設定し、後続する２バイトでＶ１８３の長さを設定する。この規則に拠れば、Ｌ１８２を１〜３バイトで表現した場合、取り得るＶ１８３の長さの範囲は、それぞれ０〜１２７、０〜２５５、０〜６５，５３５となる。
【００１１】
ここで説明した従来技術は、下記の非特許文献に詳しく記載されている。
【非特許文献１】ＩＳＯ／ＩＥＣ７８１６−４  Ｆｉｒｓｔ  Ｅｄｉｔｉｏｎ  ５．３節
【非特許文献２】ＩＳＯ／ＩＥＣ７８１６−４  Ｓｅｃｏｎｄ  Ｅｄｉｔｉｏｎ  ７．２節
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかし、従来技術には以下のような問題点がある。前述したように、拡張読出しコマンド１７００のＬｅ１７６は、レスポンスのうちステータス１８４を除く部分全体（以下、データフィールドと呼ぶ）の最大長であるため、Ｔ１８１およびＬ１８２の分を含み、純粋にＶ１８３のみの長さではない。ここでＴ１８１のフィールド長は１バイト固定であるが、Ｌ１８２のフィールド長に関しては、図１９に示すように、Ｌ１８２の値が０から１２７の時、Ｌ１８２のフィールド長は１バイトから３バイトまでのいずれのバイト数でも表すことが可能であり、また、L１８２の値が１２８から２５５の時、Ｌ１８２のフィールド長は、２バイトあるいは３バイトのどちらで表すことも可能である。このように、同じＬ１８２の値であってもＩＣカードによってＬ１８２のフィールド長が変わる可能性があり、それによってレスポンスとして返されるＶ１８３自身の長さが変わってしまう。このため、端末が要求した長さ分のデータが得られない可能性があり、端末とＩＣカード間での相互運用性を損なうという問題があった。
【課題を解決するための手段】
【００１３】
上記の課題を解決するため、本発明の読出しデータ長の指定方法は、端末が要求するデータ長に、そのデータ長に応じて決まる所定の値を加算し、その加算値をＩＣカードに知らせるとともに、ＩＣカードが、その加算値から前記所定の値を減算することにより前記データ長を算出することを特徴とする。この方法により、端末とＩＣカードが共通の規則に従って処理を行うため、端末が要求する長さのデータを確実に読み取ることができる。
【００１４】
また、本発明の読出しデータ長の指定方法は、端末が、要求するデータ長にＬのフィールド長の最大値を加算し、その加算値をＩＣカードに知らせるとともに、ＩＣカードが、その加算値から前記最大値を減算することにより前記データ長を算出することを特徴とする。この方法により、端末とＩＣカードが共通の簡易な規則に従って処理を行うため、より効率的に、端末が要求する長さのデータを確実に読み取ることができる。
【００１５】
さらに、前記最大値を、端末またはＩＣカードがもう一方へ知らせる手段を有することにより、最大値を固定化する必要がなくなり、マルチアプリケーション環境にもシングルアプリケーションにおける将来拡張にも対応できる。
【００１６】
また、前記第一の読出しデータ長の指定方法と前記第二の読出しデータ長の指定方法のどちらを適用するかを識別するための情報を、端末またはＩＣカードがもう一方へ知らせる手段を有することにより、指定方法を固定化する必要がなくなり、マルチアプリケーション環境にもシングルアプリケーションにおける将来拡張にも対応できる。
【００１７】
また、本発明の読出しデータ長の指定方法は、端末からＩＣカードへのコマンドが第一のフィールドと第二のフィールドを有し、端末がＩＣカードからのレスポンスのデータフィールドの最大長を前記第一のフィールドで指定し、かつ、要求するデータ長を前記第二のフィールドで指定することを特徴とする。この方法により、端末が要求する正味のデータ長をＩＣカードが明確に知ることができるため、端末が要求する長さのデータを確実に読み取ることができる。また、この方法では、必要な情報が全てコマンドの形で端末からＩＣカードに明示的に伝達されるため、マルチアプリケーション環境においてもシングルアプリケーションにおける将来拡張にも所要の対応を行なうことができる。
【００１８】
さらに、ＩＣカードのファイルに格納されているデータが第一のＴＬＶ構造をなしており、ＩＣカードからのレスポンスが、前記第一のＴＬＶ構造のデータを入れ子にした形式の第二のＴＬＶ構造をなす場合は、前記第一のＴＬＶ構造のＬの積算値を前記第二のフィールドで指定する。この方法により、ＩＣカードのファイル内の各ＴＬＶオブジェクトの長さ情報が拡張されているか否かを端末が意識することなく、正味のデータ長のみの総和を要求することにより、端末が要求する長さのデータを確実に読み取ることができる。
【００１９】
また、前記ファイルが空き領域を有する場合は、レスポンスを生成する際に、前記ＩＣカードがこの空き領域を読み飛ばす手段を有することにより、効率良い伝送が行えることとなる。
【発明の効果】
【００２０】
上記の手段により、端末とＩＣカードが共通の規則に従って処理を行うため、端末が要求する長さのデータを確実に読み取ることができることとなり、相互運用性が確保される。また、端末とＩＣカード間の暗黙的な了解事項をなくし、マルチアプリケーション環境にもシングルアプリケーションにおける将来拡張にも所要の対応を行なうことができる。さらに、ＩＣカードのファイルに格納されているデータがＴＬＶ構造をなす場合にもこれに対応可能である。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の実施の形態について、図面を参照しながら説明する。
（実施の形態１）
図１は本発明の実施の形態１による読出しデータ長の指定方法を実施するＩＣカードシステム１００の構成を示す図である。
図１において、１は端末、２はＩＣカードであり、端末１内において、３は上位アプリ、４はコマンド組立て部、５はＬｖ／Ｌｅ変換部、６はレスポンス解析部、７は送受信部である。また、ＩＣカード２において、８はコマンド処理部、９は透過型ファイル、１０はコマンド解析部、１１はＬｅ／Ｌｖ変換部、１２はレスポンス組立て部、１３は送受信部である。
【００２２】
図１に示されるＩＣカードシステム１００において、端末１の上位アプリ３は、ＩＣカード２に格納されている透過型ファイル９からデータを読み出したい時、開始アドレスと、データ長を、コマンド組立て部４に指示する。
【００２３】
以下、上記端末１内のコマンド組立て部４における処理内容について、図２の処理フローに基づいて説明する。コマンド組立て部４は、上位アプリ３から与えられる開始アドレスが３２Ｋバイト以内であるか否かを判断し（ステップＳ２１）、３２Ｋバイト以内であれば通常読出しコマンドが使用可能であるため、図１５に示す構造の通常読出しコマンド１５００を組み立てる。すなわち、コマンドヘッダ１５１には通常読出しコマンドのコマンド名と、上位アプリ３から与えられた開始アドレスを設定する（ステップＳ２２）。また、Ｌｅ１５２には、上位アプリ３から与えられたデータ長をそのまま設定する（ステップＳ２３）。このようにして組み立てた通常読出しコマンド１５００を送受信部７に渡す（ステップＳ２４）。
【００２４】
一方、コマンド組立て部４は、上位アプリ３から指示される開始アドレスが３２Ｋバイトを超える場合、図１７に示す構造の拡張読出しコマンド１７００を組み立てる。すなわち、コマンドヘッダ１７１には、拡張読出しコマンドのコマンド名を設定する（ステップＳ２５）。また、Ｖ（Ａｄｄｒ）１７５に、上位アプリ３から与えられた開始アドレスを設定し、Ｌ１７４には、その長さを設定する。Ｔ１７３にはこのデータオブジェクトが開始アドレスを指定するものであることを示す固定値を設定する。また、Ｌｃ１７２にはこのＴＬＶオブジェクトの長さを設定する（ステップＳ２６）。
【００２５】
次にＬｅ１７６に関しては、Ｌｖ／Ｌｅ変換部５が、図３に示す規則に従って符号化する（ステップＳ２７）。Ｌｖは、上位アプリ３から与えられたデータ長であり、上位アプリ３が要求する正味のデータ長である。このＬｖの値に応じ、図３の規則に従ってＬｅを符号化する。すなわち、Ｌｖが１〜１２７の範囲にある時は、ＩＣカード２からのレスポンス４００ａの構造が、図４（ａ）に示すようにＬ４２が１バイトで表されるため、Ｔ４１の１バイト分と合わせ、ＬｅにはＬｖに２を加算した値を設定することになる。また、Ｌｖが１２８〜２５５の範囲にある時は、ＩＣカード２からのレスポンス４００ｂの構造が、図４（ｂ）に示すようにＬ４４が２バイトで表されるため、Ｔ４３の１バイト分と合わせ、ＬｅにはＬｖに３を加算した値を設定することになる。また、Ｌｖが２５６〜６５，５３５の範囲にある時は、ＩＣカード２からのレスポンス４００ｃの構造が、図４（ｃ）に示すようにＬ４６が３バイトで表されるため、Ｔ４５の１バイト分と合わせ、ＬｅにはＬｖに４を加算した値を設定することになる。このようにＬｖの値に応じた計算式が適用され、Ｌｅの値が一意に決定される。
【００２６】
コマンド組立て部４は、このＬｅ１７６を付加して組み立てた拡張読出しコマンド１７００を送受信部７に渡す（ステップＳ２４）。
【００２７】
送受信部７は、コマンド組立て部４から渡された通常読出しコマンドまたは拡張読出しコマンドをＩＣカードの送受信部１３に送信する。
【００２８】
ＩＣカードの送受信部１３は端末１からの上記コマンドを受け取ると、コマンド解析部１０に処理を引き渡す。
【００２９】
以下、本実施の形態１におけるコマンド解析部１０の処理内容について、図５の処理フローに基づいて説明する。コマンド解析部１０は、端末１が要求する開始アドレスと、データ長を判別することが役割であり、まず、受け取ったコマンドのコマンドヘッダを見て、当該コマンドが通常読出しコマンド１５００であるか、拡張読出しコマンド１７００であるかを判断し、それぞれに応じて処理を分岐する（ステップＳ５１）。通常読出しコマンド１５００である場合は、コマンドヘッダ１５１から開始アドレスを取り出し、コマンドのＬｅ１５２をそのままデータ長として、コマンド処理部８に渡す（ステップＳ５２〜５４）。
【００３０】
一方、拡張読出しコマンド１７００である場合は、ＴＬＶオブジェクト１７３，１７４，１７５から開始アドレスを取り出す（ステップＳ５５）。データ長に関しては、ＩＣカード２も端末１と同様に、図３の計算式を処理するＬｅ／Ｌｖ変換部１１を有しており、端末１のＬｖ／Ｌｅ変換部５のちょうど逆演算を行うことにより、ＬｅからＬｖ（端末１が要求する正味のデータ長）を算出する（ステップＳ５６）。このようにして得られた開始アドレスとデータ長をコマンド処理部８に渡す（ステップＳ５４）。
【００３１】
コマンド処理部８は当該コマンドが通常読出しコマンド１５００であるか拡張読出しコマンド１７００であるかを意識することなく、与えられた開始アドレスとデータ長に従い、透過型ファイル９からデータを読み出し、レスポンス組立て部１２に引き渡す。
【００３２】
レスポンス組立て部１２はコマンド解析部１０から、当該コマンドが通常読出しコマンド１５００であるか拡張読出しコマンド１７００であるかの情報を得ており、それに従って、図１６あるいは図１８で示す構造のレスポンス１６００，１８００を組み立てる。
【００３３】
このようにして組み立てられたレスポンス１６００あるいは１８００は、ＩＣカード２の送受信部１３および端末１の送受信部７を介してレスポンス解析部６に渡される。レスポンス解析部６もまた、コマンド組立て部４から当該コマンドが通常読出しコマンド１５００であるか拡張読出しコマンド１７００であるかの情報を得ており、それに従って、レスポンスの構造を解析し、データを上位アプリ３に引き渡す。
【００３４】
このようにして、図３に示す変換規則を、端末１とＩＣカード２が共有することにより、端末１が要求する長さのデータを、ＩＣカード２の透過型ファイル９から確実に読み出すことが可能となる。
【００３５】
以上のように、本実施の形態１による読出しデータ長の指定方法によれば、端末が要求するデータ長に応じてＬｅの値を決定する変換式を、端末とＩＣカードに共有させることとしたので、端末が要求する長さのデータを、ＩＣカードから確実に読み出すことが可能となる。
【００３６】
なお、上記の説明では、データ長が１バイトのＬｅで表わすことができる場合を想定しているが、データ長が２５６バイトを超える場合は、３バイトに符号化された拡張Ｌｅを使用することになる。
【００３７】
また、上記の説明では、データ長が３２Ｋバイト以内であれば、通常読出しコマンド１５００を使用するとしたが、３２Ｋバイト以内であっても拡張読出しコマンド１７００を用いてもよい。その場合は、コマンドの種類に応じて分岐する処理（ステップＳ２１およびステップＳ５１）と、通常読出しコマンドに関する処理（ステップＳ２２，Ｓ２３およびステップＳ５２，Ｓ５３）は不要となる。
【００３８】
（実施の形態２）
本実施の形態２による読出しデータ長の指定方法は、ＩＣカードシステムの構成は、前記実施の形態１におけると同様、図１に示される通りのものを有し、Ｌｖ／Ｌｅ変換部５およびＬｅ／Ｌｖ変換部１１の処理内容を異なるものとしたものである。
【００３９】
即ち、前記実施の形態１では、端末１が要求するデータ長Ｌｖに従って変換式を変えたが、本実施の形態２では、Ｌｖ／Ｌｅ変換部５およびＬｅ／Ｌｖ変換部１１における変換式は、常に一定のものとしたものである。例えば、この変換式には、Ｌｖの値にかかわらず、Ｌのフィールド長として３バイトを想定した計算式Ｌｅ＝Ｌｖ＋４を必ず適用することとしたものである。すなわち、端末１は、要求するデータ長Ｌｖに常に４を加算してＬｅを算出し、そのＬｅを設定したコマンドを、ＩＣカード２に送る。一方、ＩＣカード２では、常にＬｅから４を減算した値を、端末１が要求しているデータ長であるとみなす。
【００４０】
このような本実施の形態２においても、一つの変換規則を端末１とＩＣカード２で共有することとなり、前記実施の形態１におけると同様、端末１が要求する長さのデータを、ＩＣカード２の透過型ファイル９から確実に読み出すことが可能となる。かつ、前記実施の形態１と比較した場合には、データ長による分岐が不要となり、端末１およびＩＣカード２の処理が軽減され、処理効率、およびプログラムサイズの面で利点がある。
【００４１】
以上のように、本実施の形態２による読出しデータ長の指定方法は、端末よりの読出しデータ長に関わらず、端末とＩＣカードとで共有するＬｅの変換式を一定のものとしたので、端末が要求する長さのデータを、確実、かつ効率的にＩＣカードより読み出すことが可能となる。
【００４２】
なお、読み出されるデータ長が２５５バイト以下の場合、ＩＣカード２からのレスポンスのＬ１８２は、１バイトないしは２バイトで符号化することができる。また、ＩＣカード２は、データ長に応じてＬ１８２のフィールド長を可変（１〜３バイト）としてもよいし、３バイト固定としてもよい。Ｌ１８２のフィールド長を１バイトないし２バイトとした場合は、レスポンスのデータフィールド長（Ｔ１８１，Ｌ１８２，Ｖ１８３全体の長さ）は、コマンドで指定されるＬｅ１７６より短くなるが、Ｌｅ１７６は要求する最大長を示すため、ＩＳＯ／ＩＥＣの規格を満たしている。また、いずれの方法であっても、Ｌ１８２は図１９の規則１９００に従って符号化されるため、端末１はレスポンスデータの正しい長さを知ることができる。
【００４３】
（実施の形態３）
前記実施の形態２では、読み出すデータ長が必ず２５６バイト以内に収まる場合は、Ｌ１８２のフィールド長として２バイトを想定した計算式Ｌｅ＝Ｌｖ＋３を適用することができる。計算式Ｌｅ＝Ｌｖ＋４を適用するか、あるいは計算式Ｌｅ＝Ｌｖ＋３を適用するかは、そのアプリケーションが一つのコマンドで最大何バイトのデータを読み出すかによって決まるため、アプリケーションに依存する。ＩＣカード２が一つのアプリケーションのみで使用される場合は、どちらの計算式を適用するかを端末１とＩＣカード２が共に知っているという状況を想定することができるが、マルチアプリケーション環境でＩＣカードを使用する場合は、どちらの計算式を適用するかを、端末１とＩＣカード２間で共有する手段を設けることが必要となる。
【００４４】
本実施の形態３による読出しデータ長の指定方法は、上記実施の形態２によるデータ長の指定方法において、何れの計算式を用いるのかを、端末１からＩＣカード２に送るコマンドの中で指定するものであり、これにより、マルチアプリケーション環境への対応を可能とするものである。
【００４５】
以下、本実施の形態３に係る読出しデータ長の指定方法について、図６を用いて説明する。図６は本実施の形態３による読出しデータ長の指定方法において用いられる拡張読出しコマンド６００の構造を示す図である。
【００４６】
コマンドヘッダ６１では、コマンド名を指定する。Ｌｃ６２は、後続の２つのＴＬＶオブジェクト全体の長さを示す。最初のＴＬＶオブジェクトに関しては、図１７と同様、値Ｖｐ（Ａｄｄｒ）６５に読み出したい開始アドレスを設定する。タグＴｐ６３にはこのデータオブジェクトが開始アドレスを指定するものであることを示す固定値を設定し、長さ情報Ｌｐ６４にはＶｐ（Ａｄｄｒ）６５の長さを設定する。二番目のＴＬＶオブジェクトが本実施の形態３の特徴を示すものであり、適用する計算式を識別するための情報を、値Ｖｑ（Ｆｏｒｍ）６８に設定する。具体的には、例えば値Ｖｑ（Ｆｏｒｍ）６８に“０１”を設定すれば、計算式Ｌｅ＝Ｌｖ＋３を適用する（Ｌ１８２のフィールド長の最大値は２バイトである）ことを示し、“０２”を設定すれば計算式Ｌｅ＝Ｌｖ＋４を適用する（Ｌ１８２のフィールド長の最大値は３バイトである）ことを示すものとする。タグＴｑ６６には、このデータオブジェクトが適用する計算式を指定するものであることを示す固定値を設定し、長さ情報Ｌｑ６７には、Ｖｑ（Ｆｏｒｍ）６８の長さを設定する。最後に、Ｌｅ６９には、Ｖｑ（Ｆｏｒｍ）６８で指定された計算式に基づき、端末１が要求するデータ長から算出した値を設定する。
【００４７】
このような本実施の形態３による読出しデータ長の指定方法によれば、Ｌｅを算出するための複数の計算式のうち、どの計算式を適用するかを、端末１とＩＣカード２間で通信開始後に決定することができるため、マルチアプリケーション環境に対応可能となる。また、シングルアプリケーションにおいても、将来拡張に対応できることとなる。
【００４８】
なお、上記で示したＶｑ（Ｆｏｒｍ）６８の値は、単なる例であることは言うまでもない。また、上記の説明では、２つのＴＬＶオブジェクトを連結する場合を示したが、これに限定されるものではなく、例えば、１つのＴＬＶにＶｐ（Ａｄｄｒ）とＶｑ（Ｆｏｒｍ）
の情報をまとめる等、様々な実現例が可能である。さらに、本実施の形態３では、レスポンスデータのＬ１８２のフィールド長が最大３バイトまでであるケースについて説明したが、将来的にＬのフィールド長がより大きなサイズに拡張されたとした場合にも容易にこれに対応することが可能である。
【００４９】
また、上述した読出しデータ長の指定方法は、端末により、適用する計算式を特定するものであるが、適用する計算式を識別するための情報を、ＩＣカード２に持たせても同様の効果を得ることができる。例えば、端末１とＩＣカード２間の通信開始時の初期化処理に、適用する計算式を識別するための情報をＩＣカード２から端末１に送ればよく、あるいは、ある特定のコマンドのレスポンスとして、この情報をＩＣカード２から端末１に送ってもよい。
【００５０】
（実施の形態４）
前記実施の形態３による読出しデータ長の指定方法は、適用する計算式を識別するための情報を、端末１と、ＩＣカード２間で共有する方法であった。ここで、上記実施の形態３と同様にＴＬＶオブジェクトを用いて、実施の形態１で説明した方法と実施の形態２で説明した方法のいずれを適用するかを識別する情報を、端末１とＩＣカード２間で共有することも考えられる。前述したように、ひとつのアプリケーションのみに限定して考える場合は、実施の形態１で説明した方法を適用するか、あるいは実施の形態２で説明した方法を適用するかについては、端末１とＩＣカード２が共に知っているという状況を想定することができるが、マルチアプリケーション環境でＩＣカードを使用する場合は、いずれの方法を適用するかを、端末１とＩＣカード２間で共有する手段を設けることが必要となる。また、この手段はシングルアプリケーション環境においても将来拡張性を考慮した場合において必要となる。
【００５１】
本実施の形態４による読出しデータ長の指定方法は、上記実施の形態１、及び上記実施の形態２によるデータ長の指定方法の何れを用いるのかを、端末１からＩＣカード２に送るコマンドの中で指定し、端末とＩＣカード間で、上記実施の形態１、及び上記実施の形態２によるデータ長の指定方法のいずれかを実行するものである。
【００５２】
上記実施の形態１の方法（以下、「第１のデータ長の指定方法」とする。）と、実施の形態２の方法（以下、「第２のデータ長の指定方法」とする。）のいずれを適用するかを、端末１からＩＣカード２へのコマンドで指定する場合は、図７に示すように、図６の拡張読出しコマンド６００を変形したもの７００を用いることができる。図７では、図６のＶｑ（Ｆｏｒｍ）のＴＬＶオブジェクト（Ｔｑ６６／Ｌｑ６７／Ｖｑ６８）に代え、適用する方法を識別するためのＴＬＶオブジェクト（Ｔｒ７６／Ｌｒ７７／Ｖｒ７８）を用いる。具体的には、例えば値Ｖｒ（Ｍｅｔｈ）７８に“０１”を設定すれば、第１のデータ長の指定方法を適用することを示し、“０２”を設定すれば、第２のデータ長の指定方法を適用することを示すものとする。タグＴｒ７６にはこのデータオブジェクトが適用する方法を指定するものであることを示す固定値を設定し、長さ情報Ｌｒ７７には、Ｖｒ（Ｍｅｔｈ）７８の長さを設定する。最後にＬｅ７９には、適用した方法に基づき、端末１が要求するデータ長から算出した値を設定する。
【００５３】
このような本実施の形態４による読出しデータ長の指定方法によれば、上記第１のデータ長の指定方法と、第２のデータ長の指定方法のいずれを適用するかを、端末１とＩＣカード２間で通信開始後に決定することができるため、マルチアプリケーション環境下において、第１のデータ長の指定方法、及び第２のデータ長の指定方法のいずれかを実行することが可能となる。また、シングルアプリケーションにおいても、将来拡張に対応できることとなる。
【００５４】
なお、Ｖｒ（Ｍｅｔｈ）７８により特定される読出しデータ長の指定方法は、上述したものに限らず、本実施の形態４と上記実施の形態３とを組み合わせた様々な読出しデータの指定方法を特定するものとしてもよい。例えば、値Ｖｒ（Ｍｅｔｈ）に“０１”を設定すれば、第１のデータ長の指定方法を適用することを示し、“０２”を設定すれば、第２のデータ長の指定方法で、かつ計算式Ｌｅ＝Ｌｖ＋３を適用することを示し、“０３”を設定すれば、第２のデータ長の指定方法で、かつ計算式Ｌｅ＝Ｌｖ＋４を適用することを示すこととしてもよい。
【００５５】
あるいは、コマンドにＶｑ（Ｆｏｒｍ）のＴＬＶオブジェクトが存在すれば、第２のデータ長の指定方法を適用することを示し、かつＶｑ（Ｆｏｒｍ）の値により適用される計算式が決まり、コマンドにＶｒ（Ｍｅｔｈ）のＴＬＶオブジェクトが存在すれば、第１のデータ長の指定方法を適用することを示す（この場合、Ｖｒ（Ｍｅｔｈ）の値自体は意味を持たない。）ようにしても良い。この場合、Ｖｑ（Ｆｏｒｍ）のＴＬＶオブジェクトとＶｒ（Ｍｅｔｈ）のＴＬＶオブジェクトのいずれも存在しないか、あるいは両方が存在した場合は、エラーとなる。
【００５６】
また、前記実施の形態３におけると同様、適用する方法を識別するための情報を、ＩＣカード２に持たせるようにしてもよい。この識別情報は、端末１とＩＣカード２間の通信開始時の初期化処理、あるいはある特定のコマンドのレスポンスとして、ＩＣカード２から端末１に送られる。
【００５７】
（実施の形態５）
本実施の形態５による読出しデータ長の指定方法は、端末が要求する正味のデータ長Ｌｖを、コマンド内のＬｅ以外の別のフィールドで明確に指定するようにした方法である。この方法には、図８のように、図６の拡張読出しコマンド６００を変形したもの８００を用いることができる。図８では、図６のＶｑ（Ｆｏｒｍ）のＴＬＶオブジェクト（Ｔｑ６６／Ｌｑ６７／Ｖｑ６８）に代え、正味のデータ長Ｌｖを指定するためのＴＬＶオブジェクト（Ｔｓ８６／Ｌｓ８７／Ｖｓ８８）を用いる。具体的には、Ｖｓ（Ｌｅｎ）８８にＬｖをそのまま設定する。タグＴｓ８６にはこのデータオブジェクトがＬｖを指定するものであることを示す固定値を設定し、長さ情報Ｌｓ８７には、Ｖｓ（Ｌｅｎ）８８の長さを設定する。
【００５８】
本実施の形態５の場合、端末が要求するデータ長はＶｓ（Ｌｅｎ）８８で示されるため、Ｌｅ８９は重要な意味を持たない。ただしＩＳＯ／ＩＥＣの規格上、Ｌｅ８９には端末が要求する最大長を設定する決まりがあるため、適切な値を設定する必要がある。Ｖｓ（Ｌｅｎ）８８の値に４を加算した値を設定するのも一つの方法ではあるが、より望ましくは、最大長を示す“００”を設定するのがよい。これであれば、都度Ｖｓ（Ｌｅｎ）８８の値に４を加算する等の計算をする必要もなくなり、処理が簡単になる。なお、“００”の場合は最大２５６バイトまでしか返せないため、２５６バイトを超える可能性がある場合は、拡張Ｌｅの最大長“００００００”（３バイト）を設定する。
【００５９】
このような本実施の形態５によるデータ長の指定方法によれば、端末が要求する正味のデータ長をＩＣカードが明確に知ることができるため、端末が要求する長さのデータをＩＣカードの透過型ファイルから確実に読み出すことが可能となる。さらに、この方法では、必要な情報が全てコマンドの形で端末からＩＣカードに明示的に伝達されるため、マルチアプリケーション環境にもシングルアプリケーションにおける将来拡張にも対応できる。
【００６０】
（実施の形態６）
本実施の形態６による読出しデータ長の指定方法は、上記実施の形態５において、透過型ファイルに格納されているデータ自身が図９のようにＴＬＶ構造となっている場合に、端末が要求する正味のデータ長Ｌｖを、コマンド内のＬｅ以外の別のフィールドで明確に指定するようにした方法である。
【００６１】
図９に示す本実施の形態６による読出しデータ長の指定方法において用いる透過型ファイル９００では、ｎ個のＴＬＶオブジェクト（Ｔ１／Ｌ１／Ｖ１〜Ｔｎ／Ｌｎ／Ｖｎ）が格納されている。
【００６２】
この透過型ファイル９００からデータを読み出した場合、本実施の形態６におけるレスポンス１０００ａの構造は、図１０（ａ）のようになる。図１０（ａ）におけるレスポンス１０００ａは、ｋ個分のＴＬＶオブジェクト（Ｔ１／Ｌ１／Ｖ１〜Ｔｋ／Ｌｋ／Ｖｋ）１０３に相当する長さのＬｖが、図８のＶｓ（Ｌｅｎ）８８で指定された場合を示している。このように、この場合のレスポンス１０００ａは、ＴＬＶ構造を二重化した入れ子構造（即ち、Ｔ１０１，Ｌ１０２，及びその値（Ｖａｌｕｅ）部よりなるＴＬＶ構造を持つとともに、そのうちの値（Ｖａｌｕｅ）部内に、Ｔ１／Ｌ１／Ｖ１〜Ｔｋ／Ｌｋ／ＶｋのＴＬＶ構造を持つ。）となる。タグＴ１０１は、このデータオブジェクトが読出しデータであるということと、入れ子構造になっていることを示す固定値である。長さ情報Ｌ１０２は、後続のｋ個のＴＬＶオブジェクト全体の長さを示す。Ｔ１／Ｌ１／Ｖ１〜Ｔｋ／Ｌｋ／Ｖｋ１０３は、ＩＣカードの透過型ファイルから読み出されたデータである。
【００６３】
ＩＣカードの透過型ファイルに格納されている複数のＴＬＶオブジェクトの各長さ情報が、例えば全て１バイトで表されているような場合は、この方法で問題はないが、一部の長さ情報が２バイト（あるいは３バイト）に拡張されていて、かつ端末がそのことを認識せずに、長さ情報が全て１バイトであることを前提に、Ｖｓ（Ｌｅｎ）８８を指定したとすると、ＩＣカードはＶｓ（Ｌｅｎ）８８で指定された長さを超えてレスポンスデータを返すことができないため、Ｌ１，Ｌ２，・・・，Ｌｋの一部が拡張された分、ｋ個分のＴＬＶオブジェクトのうちの最後の一部が欠けてしまうことになる。
【００６４】
この問題を解決するために、本実施の形態６では、図１０（ｂ）に示すように、各ＴＬＶオブジェクトの長さ情報のみを加算した値を、Ｖｓ（Ｌｅｎ）８８に設定する方法（すなわち、Ｖｓ（Ｌｅｎ）＝Ｌ１＋Ｌ２＋Ｌ３＋・・・＋Ｌｋとする）をとる。
【００６５】
このようにすれば、ＩＣカードの透過型ファイル内の各ＴＬＶオブジェクトの長さ情報が拡張されているか否かを端末が意識することなく、正味のデータ長のみの総和を要求することにより、端末が要求する長さのデータを確実に読み取ることができることとなる。一方、ＩＣカードにとって、各ＴＬＶオブジェクトのＶ部のみを加算していき、Ｖｓ（Ｌｅｎ）に達するところまでをレスポンスのデータとして返すといった処理を行うことは容易に実現可能である。
【００６６】
（実施の形態７）
本実施の形態７による読出しデータ長の指定方法は、上記実施の形態６において、透過型ファイルに格納されているＴＬＶオブジェクトの一部が書き換えられた場合に、端末が要求する正味のデータ長Ｌｖを、コマンド内のＬｅ以外の別のフィールドで明確に指定するようにした方法である。
【００６７】
図１１は、本実施の形態７における二番目のＴＬＶオブジェクトが書き換えられた場合の透過型ファイル１１００を示している。該透過型ファイル１１００においては、タグＴ２は書き換えられていないが、Ｖ２が元のデータより短い長さのＶ２’に書き換えられており、これに伴い、長さ情報もＶ２’の長さを示すＬ２’に書き換えられている。短い長さに書き換えられたことによって生じた空き領域は“００”で埋められる。“００”はタグとして使用できない値であるため、ＩＣカードはこの“００”で埋められた領域が空き領域であることを認識することができる。
【００６８】
このような透過型ファイル１１００からデータを読み出した場合、本実施の形態７においては、二通りのレスポンスの構造が考えられる。一番目の構造は、図１２（ａ）に示すように、透過型ファイルに格納されるタグ、長さ情報、および空き領域を含めた全体の長さを、Ｖｓ（Ｌｅｎ）８８として指定するものである。また、二番目の構造は、図１２（ｂ）に示すように、正味のデータ長のみの総和を、Ｖｓ（Ｌｅｎ）８８として指定するものである。この場合、ＩＣカードは“００”を空き領域であると判断し、レスポンスデータからカットする。このＩＣカードの処理について、図１３のフロー図を用いて説明する。図１３は、本実施の形態７におけるレスポンスデータの組立てについて説明したものである。
【００６９】
まず、ＩＣカードは透過型ファイル１１００から１バイト読み出し（ステップＳ１３１）、そのデータが“００”であるか否かをチェックする（ステップＳ１３２）。そのデータが“００”であれば、それはタグではなく空き領域であるとみなし、次の１バイトを読み出す。“００”が続く間は空き領域であるとして読み飛ばす。一方、“００”以外であれば、そのバイトはタグであるとみなし、レスポンスデータとしてセットする（ステップＳ１３３）。その後、長さ情報であるところの次の１バイトを読み出し（ステップＳ１３４）、図１９の規則に則った処理を行う。すなわち、その１バイトが“００”〜“７ｆ”の範囲内にあれば（ステップＳ１３５）、そのデータは１バイトで表された長さ情報であるとみなし、その１バイトをレスポンスデータにセットする（ステップＳ１３６）。また、その１バイトが“８１”であれば（ステップＳ１３７）、後続の１バイトが長さ情報であるとみなし、“８１”と後続の１バイトをレスポンスデータにセットする（ステップＳ１３８）。同様に、その１バイトが“８２”であれば（ステップＳ１３９）、後続の２バイトが長さ情報であるとみなし、“８２”と後続の２バイトをレスポンスデータにセットする（ステップＳ１４０）。それ以外の値であればエラーとして処理する（ステップＳ１４１）。次に、透過型ファイル１１００から後続の長さ情報分のデータを読み出し、レスポンスデータにセットする（ステップＳ１４２）。
【００７０】
このようにして１つのＴＬＶオブジェクトをレスポンスデータとしてセットした後、ＴＬＶオブジェクトのＬの値を加算し（ステップＳ１４３）、それまでの積算値がＶｓ（Ｌｅｎ）に達したか否かをチェックする（ステップＳ１４４）。累積値がＶｓ（Ｌｅｎ）に達していない場合は、次のＴＬＶオブジェクトの読み出し処理へと進み、同様の処理を行う。一方、積算値がＶｓ（Ｌｅｎ）に達した場合は、端末から要求された分の読出しが完了したとして処理を終了する。
【００７１】
このように、本実施の形態７による読出しデータ長の指定方法によれば、ＩＣカードの透過型ファイル内の各ＴＬＶオブジェクトの長さ情報が拡張されているか否かを端末が意識することなく、正味のデータ長のみの総和を要求することができ、しかも、端末にとって不要な空き領域のデータ“００”を、レスポンスデータからカットすることにより効率良い伝送を行うことができる。
【産業上の利用可能性】
【００７２】
本発明にかかる方法は、容量の大きな透過型ファイルを有するＩＣカードを用いたシステムに有用である。
【図面の簡単な説明】
【００７３】
【図１】図１は、本実施の形態１によるＩＣカードシステムの構成図である。
【図２】図２は、本実施の形態１における端末１におけるコマンド組立て部４の処理フロー図である。
【図３】図３は、本実施の形態１における変換規則を説明する図でえある。
【図４】図４は、本実施の形態１における拡張読出しコマンド１７００に対するレスポンス４００ａ，４００ｂ，４００ｃの構造を示す図である。
【図５】図５は、本実施の形態１にかかるＩＣカード２におけるコマンド解析部１０の処理フローを示す図である。
【図６】図６は、本実施の形態３における拡張読出しコマンド６００の構造を示す図である。
【図７】図７は、本実施の形態４における拡張読出しコマンドの構造図である。
【図８】図８は、本実施の形態５における拡張読出しコマンドの構造図である。
【図９】図９は、本実施の形態６における透過型ファイルの構成図である。
【図１０】図１０は、本実施の形態６における拡張読出しコマンドに対するレスポンスの構造図である。
【図１１】図１１は、本実施の形態７における透過型ファイルの構成図である。
【図１２】図１２は、本実施の形態７における拡張読出しコマンドに対するレスポンスの構造図である。
【図１３】図１３は、本実施の形態７におけるレスポンス組立て部の処理フロー図である。
【図１４】図１４は、一般的なＩＣカードの透過型ファイルの構造図である。
【図１５】図１５は、一般的な通常読出しコマンド１５００の構造を示す図である。
【図１６】図１６は、一般的な通常読出しコマンド１５００に対するレスポンス１６００の構造を示す図である。
【図１７】図１７は、一般的な拡張読出しコマンド１７００の構造を示す図である。
【図１８】図１８は、一般的な拡張読出しコマンド１７００に対するレスポンス１８００の構造を示す図である。
【図１９】図１９は、一般的なＴＬＶ構造の長さ情報に関する符号化規則の説明図である。
【符号の説明】
【００７４】
１    端末
２    ＩＣカード
３    上位アプリ
４    コマンド組立て部
５    Ｌｖ／Ｌｅ変換部
６    レスポンス解析部
８    コマンド処理部
９    透過型ファイル
１０    コマンド解析部
１１    Ｌｅ／Ｌｖ変換部
１２    レスポンス組立て部
【図１】
0004667459.tif 000002
【図２】
0004667459.tif 000003
【図３】
0004667459.tif 000004
【図４】
0004667459.tif 000005
【図５】
0004667459.tif 000006
【図６】
0004667459.tif 000007
【図７】
0004667459.tif 000008
【図８】
0004667459.tif 000009
【図９】
0004667459.tif 000010
【図１０】
0004667459.tif 000011
【図１１】
0004667459.tif 000012
【図１２】
0004667459.tif 000013
【図１３】
0004667459.tif 000014
【図１４】
0004667459.tif 000015
【図１５】
0004667459.tif 000016
【図１６】
0004667459.tif 000017
【図１７】
0004667459.tif 000018
【図１８】
0004667459.tif 000019
【図１９】
0004667459.tif 000020