(57)【特許請求の範囲】
【請求項１】
公開鍵証明書を圧縮してＩＣカードの書換え可能な不揮発性メモリに格納するデータ格納方法において、前記ＩＣカードは、前記不揮発性メモリに格納する前記公開鍵証明書のデータ構造の特徴に基いて定められる圧縮規則として、前記公開鍵証明書と共に前記不揮発性メモリに格納する秘密鍵の係数部を前記公開鍵証明書に含まれる公開鍵と共有化する規則を記憶し、前記ＩＣカードは、前記公開鍵証明書を前記不揮発性メモリに格納する際、前記圧縮規則を参照し、前記不揮発性メモリに前記秘密鍵が記憶されている場合、前記不揮発性メモリに格納する前記公開鍵証明書に含まれる前記公開鍵の係数部を削除することで、前記公開鍵証明書に含まれる公開鍵を圧縮し、圧縮した前記公開鍵証明書を前記不揮発性メモリに格納することを特徴するＩＣカードへのデータ格納方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＣカードの書換え可能な不揮発性メモリにデータを格納する方法に関し、更に詳しくは、公開鍵証明書のようにサイズの大きいデータを圧縮してＩＣカードに格納する方法に関する。
【背景技術】
【０００２】
ＩＣカードに実装されるＩＣチップの高機能化を受けて、近年、ＰＫＩ（Public Key Infrastructure）の機能を備えたＩＣカードが普及しつつある。ＩＣカードのＰＫＩの機能は、ネットワークの情報漏洩を防止するときに使用されたり（例えば、特許文献１）、マルチアプリケーションＩＣカードにおいては、アプリケーションをメモリ（例えば、ＥＥＰＲＯＭ）にセキュアにロードするときに使用されている（例えば、特許文献２）。
【０００３】
ＰＫＩの機能を備えたＩＣカードは、暗号クレデンシャルの一つとして、第三者機関である認証局が発行した電子証明書である公開鍵証明書をＩＣカードのメモリに記憶する。しかし、一般的な公開鍵証明書のサイズは１Kバイトから２Kバイト程度であり、ＩＣカードの一般的なメモリのサイズ（例えば、８Ｋバイトや１６Kバイト）と比較すると、公開鍵証明書のサイズは大きいため、一枚のＩＣカードに複数枚の公開鍵証明書を格納する事は大変難しかった。
【０００４】
ＩＣカードにデータを圧縮して格納する技術としては、特許文献３で、ＩＣカードに格納するデータ（例えば、画像データ）を圧縮してＩＣカードに記憶する発明が開示されている。しかしながら、ＩＣカードに格納するデータを圧縮するときに、パーソナルコンピュータの分野で利用されている圧縮技術（例えば、ＺＩＰ）を用いると、公開鍵証明書の圧縮率は、公開鍵証明書のデータの値に依存してしまうため、すべての公開鍵証明書について安定して圧縮を行うことができない問題がある。
【特許文献１】特開２００４−４０２７８号公報
【特許文献２】特開２００４−１６４２５９号公報
【特許文献３】特開平１０−１０５６５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
そこで本発明は、上述した問題を鑑みて、比較的サイズの大きい公開鍵証明書を、公開鍵証明書の値に依存することなく圧縮し、ＩＣカードに格納するデータ格納方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決する第１の発明は、公開鍵証明書を圧縮してＩＣカードの書換え可能な不揮発性メモリに格納するデータ格納方法において、前記ＩＣカードは、前記不揮発性メモリに格納する前記公開鍵証明書のデータ構造の特徴に基いて定められる圧縮規則として、前記公開鍵証明書と共に前記不揮発性メモリに格納する秘密鍵の係数部を前記公開鍵証明書に含まれる公開鍵と共有化する規則を記憶し、前記ＩＣカードは、前記公開鍵証明書を前記不揮発性メモリに格納する際、前記圧縮規則を参照し、前記不揮発性メモリに前記秘密鍵が記憶されている場合、前記不揮発性メモリに格納する前記公開鍵証明書に含まれる前記公開鍵の係数部を削除することで、前記公開鍵証明書に含まれる公開鍵を圧縮し、圧縮した前記公開鍵証明書を前記不揮発性メモリに格納することを特徴する。本発明によれば、前記公開鍵証明書のデータ構造の特徴として、前記公開鍵と前記秘密鍵は係数部が共通であることに着目し、前記公開鍵の係数部と前記秘密鍵の係数部と共有化することで、１００バイト以上も前記公開鍵証明書を圧縮できる。
【発明の効果】
【００１２】
本発明によれば、比較的サイズの大きい公開鍵証明書を公開鍵証明書の値に依存することなく圧縮し、ＩＣカードに格納するデータ格納方法を提供できる。
【発明を実施するための最良の形態】
【００１３】
ここから、ＩＣカードの書換え可能な不揮発性メモリ（例えば、ＥＥＰＲＯＭ）に公開鍵証明書を格納する例をとりながら、本発明に係るＩＣカードへのデータ格納方法について詳細に説明する。図１は、ＩＣカードに格納される公開鍵証明書１を説明する図である。
【００１４】
公開鍵証明書１とは、第三者機関である認証局（Certification Authority）が、公開鍵の正当性を保証するために発行した証明書で、図１に示したように、認証局が発行する公開鍵証明書１にはデータオブジェクト１０として、公開鍵証明書１のバージョン情報１０ａ、公開鍵証明書１のシリアル番号１０ｂ、公開鍵証明書１を発行した認証局の名前などの認証局情報１０ｃ、公開鍵証明書１の有効期限１０ｄ、公開鍵証明書１の所有者の名前・メールアドレスなどの所有者情報１０ｅ、公開鍵証明書１で正当性を保証する公開鍵１０ｆ、公開鍵証明書１に記述できる他の情報である拡張情報１０ｇ、認証局の秘密鍵を用いて生成され、公開鍵証明書１のデジタル署名１０ｉ、デジタル署名を生成したときのデジタル署名生成アルゴリズム１０ｈなどが記述される。
【００１５】
公開鍵証明書１に含まれるそれぞれのデータオブジェクト１０は、構造化されたデータ形式（例えば、ＡＮＳ．１）で表記され、一つのデータオブジェクト１０にはサブクラスのデータオブジェクトが含まれることがある。図２は、拡張情報１０ｇを除く公開鍵証明書１に含まれるデータオブジェクト１０を表記するデータ形式を説明する図である。
【００１６】
図２に示したように、公開鍵証明書１に含まれる情報を表記するデータオブジェクト１０は、タグフィールド１１、データオブジェクト１０に格納されるデータの長さを示すレングスフィールド１２、そしてデータが格納されるバリューフィールド１３で構成される。そして、一つのデータオブジェクト１０がサブクラスのデータオブジェクト１００を含む場合は、バリューフィールド１３にサブクラスのデータオブジェクト１００が記述される。
【００１７】
本発明に係るＩＣカードへのデータ格納方法は、これまで簡単に説明した公開鍵証明書１のデータ構造の特徴に基づいて、公開鍵証明書１を圧縮してＩＣカードに格納する方法である。ここから、公開鍵証明書１の特徴を説明しながら、公開鍵証明書１を圧縮する方法について説明する。
【００１８】
＜公開鍵証明書１の圧縮方法１：ＯＩＤの変換＞
一つ目の公開鍵証明書１の圧縮方法は、公開鍵証明書１に含まれるＯＩＤを１バイトのデータに変換することで、公開鍵証明書１を圧縮する方法である。公開鍵証明書１に含まれる認証局情報１０ｃや所有者情報１０ｅのデータオブジェクト１０には、認証局や所有者を特定するデータとして、ＥメールアドレスやＷｅｂサイトのＵＲＬなどが記述されるが、認証局や所有者を特定するデータとして、どのようなデータが記述されているか分からないので、認証局や所有者を特定するデータが何を意味しているのかを示すために、ＯＩＤが付加される。
【００１９】
図３は、所有者情報１０ｅのデータオブジェクトにＥメールアドレスを記述するときの一例である。図３に示したように、所有者情報１０ｅには、サブクラスのデータオブジェクトとして、Ｅメールアドレスの文字列を記述するデータオブジェクト１０２の前に、Ｅメールアドレスを示すＯＩＤ（1.2.840.113549.1.9.1）を表記するデータオブジェクト１０１（06 09 2A 86 48 86 F7 0D 01 09 01）が付加される。
【００２０】
同様に、公開鍵を表記するデータオブジェクト１０には、この公開鍵が対応する暗号アルゴリズムを示すＯＩＤ（例えばＲＳＡの場合は、rsaEncryption : 1.2.840.113549.1.1.1）を表記するデータオブジェクト（06 09 2A 86 48 86 F7 0D 01 01 01）が付加される。
【００２１】
ＯＩＤは、ＩＴＵ−ＯやＩＳＯで数多くが定義されているが、実際に公開鍵証明書１で使用されるＯＩＤは限定されるため、公開鍵証明書１で使用されるＯＩＤを１バイトのデータに変換することで、ＯＩＤを表記するデータオブジェクトを圧縮することができる。
【００２２】
具体的には、データオブジェクトのタグフィールド「０６ｈ」はＯＩＤを示すデータと定められているので、ＩＣカードはタグフィールド１１が「０６ｈ」を示す場合は、そのデータオブジェクト１０のバリューフィールド１３の値を、１バイトのデータに変換することで、公開鍵証明書１を圧縮することができる。
【００２３】
例えば、Ｅメールアドレスを示すＯＩＤの値を「０５ｈ」に変換する規則が定められている場合は、Ｅメールアドレスを示すＯＩＤを表記するデータオブジェクトの値、すなわち「06 09 2A 86 48 86 F7 0D 01 09 01」（１１バイト）は、「06 01 05 」（３バイト）に圧縮できる。
【００２４】
＜公開鍵証明書１の圧縮方法２：データのビット列化＞
図４は、公開鍵証明書１に含まれる拡張情報１０ｇの構造を説明する図である。他のデータオブジェクト１０とは異なり、公開鍵証明書１に含まれるそれぞれの拡張情報１０ｇは、拡張情報１０ｇを識別する識別子１０３、拡張情報１０ｇの重要度(critical)１０４、そして拡張情報１０ｇの値１０５から構成される。この重要度１０４の値は、１バイトのＢＯＯＬＥＡＮ型の真偽データで、１バイトで真偽（TrueもしくはFalse）を示す。ＢＯＯＬＥＡＮ型のデータは単に真偽を示すのみなので、拡張情報１０ｇの重要度(critical)１０４は、１バイトでなくても１ビットで表記できるため、重要度１０４の値を１ビット化し、公開鍵証明書１に記述された拡張情報の順にビット列化して表記することで、公開鍵証明書１を圧縮する。
【００２５】
例えば、Ｘ．５０９規格では公開鍵証明書１に最大１８個の拡張情報１０ｇのデータオブジェクトを記述できる。公開鍵証明書１に記述される拡張情報１０ｇが８個以下ならば、拡張情報１０ｇの重要度１０４は1オクテットで表記できるし、８個を超え１６個以下ならば、２オクテットで表記できる。
【００２６】
＜公開鍵証明書１の圧縮方法３：データの表記方法の変更＞
公開鍵証明書１の有効期限を表記するデータオブジェクト（発行日時と終了日時）のバリューフィールドは、年月日時分秒の1数字を1バイトで表すため、「ＹＹＹＹＭＭＤＤｈｈｍｍｓｓ」の１４バイトになるが、この日時の表記をＰａｃｋｅｄＢＣＤで表記することで、１４バイトのデータを半分（７バイト）に圧縮することができる。
【００２７】
＜公開鍵証明書１の圧縮方法４：データの共有化＞
ＩＣカードには、暗号クレデンシャルとして公開鍵証明書１に加え、公開鍵証明書１に記述された公開鍵と対になる秘密鍵が記憶されていることが多い。公開鍵と秘密鍵は係数部が共通であるため、公開鍵と秘密鍵は係数部を共通化し、公開鍵証明書１に含まれる公開鍵の係数部を削除することで、公開鍵証明書１を圧縮することができる。
【００２８】
例えば、１０２４ビットのＲＳＡ鍵の場合、公開鍵の係数部は１０２４ビット（１２８バイト）に及ぶため、暗号クレデンシャルとして記憶する秘密鍵と係数部を共有化することで、公開鍵の係数部に応じて、公開鍵証明書１を圧縮することができる。
【００２９】
＜公開鍵証明書を格納する手順＞
図５は、公開鍵証明書１を圧縮し、ＩＣカードに格納する手順を示したフロー図である。ＩＣカードに公開鍵証明書１を格納する手順の最初のステップＳ１０は、ＩＣカードが、ＩＣカードに格納するデータとして公開鍵証明書１のデータを受信するステップである。
【００３０】
このステップＳ１０においては、公開鍵証明書１のデータサイズはＩＣカードの揮発性メモリに設けられた受信バッファのサイズよりも大きいため、公開鍵証明書１のデータは分割されて、ＩＣカード発行装置などの端末装置からＩＣカードに送信され、ＩＣカードは、公開鍵証明書１が分割された分割データを受信するごとに、受信バッファに一時的に記憶する。
【００３１】
次のステップＳ１１は、ＩＣカードは、受信した公開鍵証明書１の分割データの中に、ＯＩＤが含まれているか確認するステップである。ＯＩＤが含まれている場合はステップＳ１１ａに進み、ＯＩＤが含まれていない場合は、ステップＳ１２に進む。
【００３２】
ステップＳ１１ａにおいては、公開鍵証明書１の分割データに含まれ、数バイトで記述されたＯＩＤを１バイトのデータに変換する。ＩＣカードは、数バイトで記述されたＯＩＤを１バイトのデータに変換する変換テーブルを備え、ＩＣカードはこの変換テーブルを参照しながら、揮発性メモリに記憶している公開鍵証明書１の分割データに含まれるＯＩＤを１バイトのデータに変換する。ＯＩＤをすべて変換した後、ステップＳ１２に進む。
【００３３】
ステップＳ１２は、ＩＣカードは、受信した公開鍵証明書１のデータの中に、１バイトのＢＯＯＬＥＡＮで表記される真偽データが含まれているか確認するステップである。１バイトのＢＯＯＬＥＡＮで表記される真偽データが含まれている場合はステップＳ１２ａに進み、真偽データが含まれていない場合は、ステップＳ１３に進む。
【００３４】
ステップＳ１２ａにおいては、公開鍵証明書１のデータに含まれる１バイトの真偽データを１ビットの真偽データに変換するステップである。ＩＣカードは、１バイトの真偽データを表記するための１オクテット以上のビットデータを、揮発性メモリに予め準備し、公開鍵証明書１の分割データの中に真偽データが含まれるごとに、このビットデータに１ビットの真偽値（ＴｒｕｅもしくはＦａｌｕｓｅ）を順に記述する。１バイトの真偽データをすべてビットデータに変換した後、ステップＳ１３に進む。
【００３５】
ステップＳ１３は、ＩＣカードは、受信した公開鍵証明書１の分割データの中に、日付データが含まれているか確認するステップである。日付データが含まれている場合はステップＳ１３ａに進み、日付データが含まれていない場合は、ステップＳ１４に進む。
【００３６】
ステップＳ１３ａにおいては、公開鍵証明書１の分割データに含まれる日付データをＰａｃｋｅｄＢＣＤの表記に変換するステップである。ＩＣカードは、YYYYMMDDhhmmssで表記された日付データがあるごとに、この日付データをＰａｃｋｅｄＢＣＤの表記に変換して記述する。揮発性メモリに記憶している公開鍵証明書１の分割データに含まれる日付データをすべて変換した後、ステップＳ１４に進む。
【００３７】
ステップＳ１４は、公開鍵証明書１のデータの中に、公開鍵本体のデータが含まれているか確認するステップである。公開鍵本体のデータが含まれている場合はステップＳ１４ａに進み、含まれていない場合は、ステップＳ１５に進む。
【００３８】
ステップＳ１４ａにおいては、すでにＩＣカードに、公開鍵証明書１に含まれる公開鍵と対になる秘密鍵が記憶されているか確認するステップである。秘密鍵が記憶されている場合はステップＳ１４ｂに進み、記憶されていない場合は、ステップＳ１５に進む。
【００３９】
ステップＳ１４ｂにおいては、公開鍵と秘密鍵の係数部を共通化するために、公開鍵本体のデータに含まれる係数部を削除する。揮発性メモリに記憶している公開鍵本体のの係数部を削除した後、ステップＳ１５に進む。
【００４０】
ステップＳ１５においては、揮発性メモリの受信バッファに記憶され、圧縮された公開鍵証明書１の分割データを、書換え可能な不揮発性メモリに記憶するステップである。このステップＳ１５においては、揮発性メモリに記憶された公開鍵証明書１のデータの中で、これまで述べたデータの変換や削除によって、不必要になるデータは書換え可能な不揮発性メモリに記憶しない。
【００４１】
次のステップＳ１６は、公開鍵証明書１の分割データがまだあるか確認するステップである。公開鍵証明書１の分割データがまだある場合は、ステップＳ１０に戻り、ない場合は、この手順は終了する。すなわち、ステップＳ１０からステップＳ１６までのステップが繰り返し実行されることで、すべての公開鍵証明書１のデータは圧縮されて書換え可能な不揮発性メモリに記憶される。
【００４２】
ここまでは、ＩＣカードに公開鍵証明書１を圧縮して格納する方法について記載した。ＩＣカードに圧縮された状態で格納された公開鍵証明書１を展開して利用するときは、例えば、１バイトに変換されたＯＩＤは、ＩＣカードに備えられた上述の変換テーブルを利用して、正規のＯＩＤに変換されることで、公開鍵証明書１のデータはもとのデータに展開される。
【００４３】
なお、本発明に係るデータの格納方法よりも、パーソナルコンピュータで利用されている圧縮技術の方が、圧縮効率が高い結果が得られるケースがある。しかしながら、パーソナルコンピュータで利用されている圧縮技術は公開鍵証明書１のデータ値に深く依存し、公開鍵証明書１のデータの値によっては全く圧縮されないケースがある。
【００４４】
これに対し、本発明に係るデータの格納方法は、これまで説明してきたように、公開鍵証明書１のデータ構造そのものに依存するため、すべての公開鍵証明書１を圧縮して格納できるメリットがある。
【図面の簡単な説明】
【００４５】
【図１】ＩＣカードに格納される公開鍵証明書を説明する図。
【図２】拡張情報を除くデータオブジェクトを説明する図。
【図３】Ｅメールアドレスを記述するときデータオブジェクトを説明する図。
【図４】拡張情報の構造を説明する図。
【図５】ＩＣカードに公開鍵証明書を格納する手順を示したフロー図。
【符号の説明】
【００４６】
１  公開鍵証明書
１０  データオブジェクト
１０ｅ  所有者情報
１０ｇ  拡張情報
【図１】
0004793549.tif 000002
【図２】
0004793549.tif 000003
【図３】
0004793549.tif 000004
【図４】
0004793549.tif 000005
【図５】
0004793549.tif 000006