(58)【調査した分野】(Int.Cl.,DB名)
ICカードごとに割り当てられた固有のカードIDに対応する値と、外部から入力される秘密情報とに基づきハッシュ値を算出し、算出したハッシュ値を補間式に代入して求められる前記補間式の解に基づき、前記ICカードの認証処理に用いられる秘密鍵を求める秘密鍵生成部と、
前記秘密鍵によって暗号化されたコマンド情報を外部から入力した場合、前記秘密鍵生成部が求めた前記秘密鍵に基づき、前記暗号化されたコマンド情報を復号する復号部と、
を備えることを特徴とするICカード。
ICカードごとに割り当てられた固有のカードIDに対応する値と、外部から入力される秘密情報とに基づきハッシュ値を算出し、算出したハッシュ値を補間式に代入して求められる前記補間式の解に基づき、前記ICカードの認証処理に用いられる秘密鍵を求める秘密鍵生成ステップと、
前記秘密鍵によって暗号化されたコマンド情報を外部から入力した場合、前記秘密鍵生成ステップにおいて求めた前記秘密鍵に基づき、前記暗号化されたコマンド情報を復号する復号ステップと、
を備えることを特徴とするICカードの認証処理方法。
【発明を実施するための形態】
【0011】
[第1実施形態]
以下、本発明の一実施形態について、図面を参照して説明する。
本実施形態によるICチップ発行システム1は、複数の工程処理を経て市場に提供されるICチップを備えたICカードを発行する。
図1は、本実施形態の各工程処理を行う工程処理者(エンティティ)を示す図である。
符号aのエンティティは、ICカードOS(Operating System)や、ICカードのROM内に記憶させておく秘密鍵生成情報を開発するカード開発者aである(ICカード開発工程A)。カード開発者aは、秘密鍵生成情報等を渡して、ICカードの製造を依頼する。この秘密鍵生成情報は、入力する情報に基づきICチップが秘密鍵を求めるためのロジック等の情報を含む。この秘密鍵は、ICカードの発行処理において入力されるコマンドを復号するための鍵である。なお、秘密鍵生成情報及についての詳細な説明は後述する。
【0012】
符号bのエンティティは、発行するICカードのハードウェア面を総合的に管理する管理者(以下、カードベンダという)である。このカードベンダbは、カード開発者aから受け取った秘密鍵生成情報等を渡してICチップの製造を依頼し、ICベンダによって製造されたICチップをICカードに搭載して、ICカードを製造する(ICカード製造工程B)。
符号cのエンティティは、ICカードOSや秘密鍵生成情報等が記憶されたICチップを物理的に製造するICチップベンダcである(ICチップ製造工程C)。このICチップベンダcは、受け取った秘密鍵生成情報等をICチップに書き込み作成したICチップを、カードベンダbに納品する。
【0013】
符号dのエンティティは、カードベンダによって製造されたICカードにデータ構造を記憶させる製造者(以下、0次発行者dという)である(0次発行処理工程D)。この0次発行者dは、カード開発者aから受け取ったコマンドや秘密情報を、カードベンダbによって製造されたICカードに入力して、0次発行を行う。
符号eのエンティティは、製造者によって製造されたICカードにサービスプログラムを記憶させる生産者eである(サービス製造工程E)。
符号fのエンティティは、製造されたICカードを用いてサービスを提供するサービス提供者である(サービス提供工程F)。
ここでは、ICカード開発工程Aと、ICチップ製造工程Cと、ICカード製造工程Bと、0次発行処理工程Dとは、主にICカードのハードウェア面の製造を行う工程である。一方、サービス製造工程Eと、サービス提供工程Fとは、主にICカードを用いて提供するサービスのソフトウェア面の製造を行う工程である。
【0014】
本実施形態では、0次発行者処理工程Dにおいて、秘密鍵により暗号化されたコマンドに基づく認証処理を行う。この秘密鍵は、ICチップに直接書き込まれない情報であって、入力される秘密情報等に基づきICチップが求める情報である。よって、ICチップベンダcには、ICチップに書き込まれる情報として、秘密鍵を求めるための情報(秘密鍵生成情報)が提供されるのみで、秘密鍵は提供されない。また、0次発行者dにも、秘密鍵で暗号化されたコマンドや秘密情報は提供されるが、秘密鍵は提供されない。これにより、本発明に係るICチップ発行システム1は、例えば、ICチップベンダcに提供された情報が、0次発行者dに流出したとしても、0次発行者dが秘密鍵を得ることができないシステムを提供することができる。
【0015】
次に、
図2を参照して、本実施形態に係るICチップ発行システム1において実行される処理の概要について説明する。
図2は、本実施形態に係るICチップ発行システム1において実施される処理の概要について説明するための図である。
図2に示す通り、本実施形態に係るICチップ発行システム1は、主に、カード開発者端末10と、カードベンダ端末20と、ICチップベンダ端末30と、0次発行者端末40と、ICチップ50とを備える。
カード開発者端末10は、カード開発者aによって操作され、ICカード開発工程Aを実行する端末である。カードベンダ端末20は、カードベンダbによって操作され、ICカード製造工程Bを実行する端末である。ICチップベンダ端末30は、ICチップベンダcによって操作され、ICチップ製造工程Cを実行する端末である。0次発行者端末40は、0次発行者dによって操作され、0次発行処理工程Dを実行する端末である。ICチップ50は、ICチップベンダcによって製造されるICチップである。なお、本実施形態において、ICチップ製造工程Cは、カードベンダbからの委託を受けたICチップベンダcがICチップ50を製造する工程であるから、ICカード製造処理Bに含まれる処理である。
【0016】
カード開発者aは、カード開発者端末10を用いて、ICカードの開発を行い、ICカードOSと秘密鍵生成情報とを作成する。そして、カード開発者aは、作成したカードOSと秘密鍵生成情報を、カードベンダb側に渡す。なお、カードOSと秘密鍵生成情報は、セキュリティが確保されたネットワークを介して、カード開発者端末10からカードベンダ端末20に送信されるものであってもよく、郵送等によりカード開発者aからカードベンダbに引き渡されるものであってもよい。
【0017】
カードベンダbは、カードOSと秘密鍵生成情報をICチップベンダc側に渡し、ICチップの製造を依頼する。なお、カードOSと秘密鍵生成情報は、セキュリティが確保されたネットワークを介して、カードベンダ端末20からICチップベンダ端末30に送信されるものであってもよく、郵送等によりカードベンダbからICチップベンダcに引き渡されるものであってもよい。
【0018】
ICチップベンダcは、カードベンダbからICチップの製造を依頼された場合、カードOSと秘密鍵生成情報とを書き込んだICチップ50を製造し、製造したICチップ50をカードベンダbに納品する。
【0019】
カードベンダbは、ICチップベンダcから納品されたICチップ50を内蔵するICカードを製造する。なお、カードベンダbは、製造されたICカードの表面に、各ICチップ50に書き込まれているカードIDと同じ情報を印字してもよい。そして、カードベンダbは、製造したICカードを、0次発行者dに渡す。
【0020】
一方、カード開発者aは、発行コマンドを秘密鍵で暗号化した暗号化発行コマンドを生成し、生成した暗号化発行コマンドを、秘密情報とともに、0次発行者dに渡す。なお、本実施形態において、暗号化発行コマンドと秘密情報とを、発行処理に必要な情報という。暗号化発行コマンドと秘密情報は、セキュリティが確保されたネットワークを介して、カード開発者端末10から0次発行者端末40に送信されるものであってもよく、郵送等によりカード開発者aから0次発行者dに引き渡されるものであってもよい。
0次発行者dは、0次発行者端末40に、暗号化発行コマンドと秘密情報とを入力し、ICカードの発行処理を実行する。この0次発行者端末40は、暗号化発行コマンドと秘密情報とを入力し、入力した情報を一時的に記憶部に格納しておき、発行対象であるICカードごとに、対応する情報を記憶部から読み出して、発行処理を実行するものであってもよい。
【0021】
ここで、ICチップ50に書き込む秘密鍵生成情報について詳細に説明する。
この秘密鍵生成情報には、例えば、カードIDを示す情報と、“カードIDからロットIDを求めるためのロジック”、“秘密情報rとロットID(又はカードID)からハッシュ値Rを求めるためのロジック”、“補間式g(R)にハッシュ値Rを代入して鍵変換式解を求めるためのロジック”、及び、“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”が含まれている。
なお、鍵変換式とは、秘密鍵Keyの値を含む方程式であって、この方程式により秘密鍵Keyを算出することができる式である。また、本実施形態において、鍵変換式の解は、鍵変換解sと称し、補間式g(R)の解と同一の値である。
【0022】
なお、ICチップ50は、鍵変換式の解を求める方法として異なる方法を用いる場合、各方法に応じてそれぞれ異なる種類の情報を、秘密鍵生成情報として含む。
本実施形態において、ICチップ発行システム1は、鍵変換式の解を求める方法として、以下に示す2つの方法を利用することができる。
一つの方法として、ICチップ発行システム1は、ロットIDに基づくハッシュ値を補間式に代入して鍵変換式の解(つまり、鍵変換式解)を求める方式(以下、ロットIDに応じた鍵変換方法という)を利用することができる。この場合、秘密鍵生成情報は、“カードIDからロットIDを求めるためのロジック”を含み、“秘密情報rとロットIDからハッシュ値Rを求めるためのロジック”を含む。
また、他の方法として、ICチップ発行システム1は、カードIDに基づくハッシュ値を補間式に代入して鍵変換式の解(つまり、鍵変換式解)を求める方式(以下、カードIDに応じた鍵変換方法という)を利用することができる。この場合、秘密鍵生成情報は、“カードIDからロットIDを求めるためのロジック”を含まず、“秘密情報rとカードIDからハッシュ値Rを求めるためのロジック”を含む。
なお、上の二つ方法において共通する点として、いずれの方法においても、秘密鍵生成情報は、“補間式g(R)にハッシュ値Rを代入して鍵変換式解を求めるためのロジック”、及び、“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”は備える。
【0023】
また、本実施形態において、秘密鍵Keyは、異なるカードIDが割り当てられた複数のICカード間で共通の情報である。
さらに、本実施形態において、補間式g(R)は、異なるカードIDが割り当てられた複数のICカード間で共通の情報である。
さらにまた、本実施形態において、補間式g(R)は、異なる秘密鍵Keyを求める複数のICカード(つまり、“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”により異なる秘密鍵Keyを求めるICカード)間で共通の情報である。
【0024】
カードID(Identification)とは、個々のカードを識別するための固有の個体識別情報である。本実施形態において、カード開発者a(又は、カード開発者端末10)は、各カードに対して、シーケンシャルな番号、例えば、カードID:001,002,003・・・のような3ケタの番号をカードIDとして割り当てる。なお、本発明はこれに限られず、カードIDは、3ケタ以上の情報であってもよく、数字だけ、アルファベットだけ、又は、数字とアルファベットの組み合わせからなる情報であってもよい。なお、本実施形態において、同一の補間式g(R)を共有するICカードの数はI個であって、本明細書中では、カードID
i(i=1,2,3,・・・,I)とも記す。
【0025】
また、ロットIDとは、予め決められた数の複数のICカードが属するグループごとに割り当てられる固有のグループ識別情報である。同一のロットIDが割り当てられたグループには、それぞれ、同一の秘密情報r
jと秘密鍵Key
jが割り当てられる。なお、同一のロットIDが割り当てられたグループに属するICカードの数は、カード開発者aによって、任意に設定可能である。また、本実施形態において、同一の補間式g(R)を共有するロットIDの数はJ個であって、本明細書中では、ロットID
j(j=1,2,3,・・・,J)とも記す。
【0026】
“カードIDからロットIDを求めるためのロジック”とは、カードIDからロットIDを求めるための演算式(又はカードIDからロットIDを求めるための条件に基づく処理)を実行するプログラムである。本実施形態において、カード開発者aは、カードID:001〜100のICカードにロットID=1を、カードID:101〜300のICカードにロットID=2を、それぞれ割り当てる。この場合、カードID:001〜100からはロットID=1を求めるロジックと、カードID:101〜300からはロットID=2を求めるためのロジックが、カード開発者aにより作成される。
【0027】
“秘密情報rとロットID(又はカードID)からハッシュ値Rを求めるためのロジック”とは、秘密情報rとロットID(又はカードID)からハッシュ値Rを算出するための演算式(又は秘密情報rとロットID(又はカードID)からハッシュ値Rを算出するための条件に基づく処理)を実行するプログラムである。なお、ハッシュ値Rは、補間式g(R)に代入される変数である。
ロットIDに応じた鍵変換方法の場合、“秘密情報rとロットIDからハッシュ値R
jを求めるためのロジック”が、カードIDに応じた鍵変換方法の場合、“秘密情報rとカードIDからハッシュ値Rを求めるためのロジック”が、それぞれICチップ50に格納されている。
【0028】
ロットIDに応じた鍵変換方法の場合の“秘密情報rとロットIDからハッシュ値Rを求めるためのロジック”は、以下の式で定義され、ロットIDごとにハッシュ値Rを求めるための演算式である。
【0030】
なお、上述の式において、Lot_ID
jはロットIDであり、以下、ロットIDと記す。また、秘密情報rとロットIDに基づくハッシュ値Rを、以下、ハッシュ値R
jと記す。ロットIDに応じた鍵変換方法で利用される秘密情報rを、以下、秘密情報r
jと記す。
【0031】
一方、カードIDに応じた鍵変換方法の場合の“秘密情報rとカードIDからハッシュ値Rを求めるためのロジック”は、以下の式で定義され、カードIDごとにハッシュ値Rを求めるための演算式である。
【0033】
なお、上述の式において、Card_ID
iはカードID
iである。また、秘密情報rとカードIDに基づくハッシ値Rを、以下、ハッシュ値R
iと記す。一方、本実施形態において、秘密情報rは、ロットIDごとに決められる情報であるため、秘密情報r
jである。
【0034】
“補間式g(R)にハッシュ値Rを代入して鍵変換式解sを求めるためのロジック”とは、補間式g(R)にハッシュ値Rを代入して、補間式g(R)の一の解である鍵変換式解sを求めるための演算式(又は補間式g(R)の一の解である鍵変換式解sを求めるための条件に基づく処理)を実行するプログラムである。この補間式g(R)は、異なる秘密鍵Keyが割り当てられた複数のICカード間で共通に利用される式である。また、この補間式g(R)は、鍵変換式の解である鍵変換式解sを求める補間式であって、例えば、ラグランジェ補間式である。この補間式g(R)において、未知数は、ハッシュ値Rである。なお、鍵変換式解sは、補間式の解でもある。
【0035】
ロットID
jに応じた鍵変換方法の場合の“補間式g(R)にハッシュ値Rを代入して鍵変換式解sを求めるためのロジック”は、以下の式で定義され、ロットID
jごとに鍵変換式解s
jを求めるための演算式である。
【0037】
なお、上述の式において、c及びb
1〜b
J−1は係数である。また、ロットIDに応じた鍵変換方法で求められる鍵変換式解sを、以下、鍵変換式解s
jと記す。
【0038】
一方、カードIDに応じた鍵変換方法の場合の“補間式g(R)にハッシュ値Rを代入して鍵変換式解sを求めるためのロジック”は、以下の式で定義され、カードIDごとに鍵変換式解s
iを求めるための演算式である。
【0040】
なお、上述の式において、c及びb
1〜b
I−1は係数である。また、カードIDに応じた鍵変換方法で求められる鍵変換式解sを、以下、鍵変換式解s
iと記す。
【0041】
“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”とは、鍵変換式の解である鍵変換式解sに基づき、秘密鍵Keyを求める演算式(又は鍵変換式解sに基づき秘密鍵Keyを求めるための条件に基づく処理)を実行するプログラムである。この鍵変換式としては、異なる秘密鍵Key同士でも共通の1つの式が利用される。なお、この鍵変換式には、鍵変換式パラメータ(任意の法p及び任意の整数k)が含まれている。この任意の整数kは、ロットID又はカードIDごとに、異なる値である。また、任意の法pは、素数であって、全ての秘密鍵Key
jよりも大きい値である。例えば、秘密鍵Key
jが128bitである場合、任意の法pは129bitの素数のうち最も小さい値である。このように、任意の法pのビット数を秘密鍵Key
jのビット数に応じて決定することにより、算出される秘密鍵Key
jのビット数を任意の法p以下のサイズに固定化することが可能となる。
【0042】
ロットIDに応じた鍵変換方法の場合の鍵変換式解sは、以下の式で定義されている。
【0044】
なお、上述の式において、pは大きな素数であり、秘密鍵Key
jはpの要素に含まれる。また、k
jは、Key
j≡s
j mod pを満たす任意の整数である。
【0045】
また、ロットIDに応じた鍵変換方法の場合の“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”は、以下の式で定義され、ロットIDごとに秘密鍵Key
jを求めるための演算式である。
【0047】
一方、カードIDに応じた鍵変換方法の場合の鍵変換式解sは、以下の式で定義されている。
【0049】
なお、上述の式において、pは大きな素数であり、秘密鍵Key
jはpの要素に含まれる。また、k
iは、Key
j≡s
i mod pを満たす任意の整数である。
【0050】
また、カードIDに応じた鍵変換方法の場合の“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”は、以下の式で定義され、カードIDごとに秘密鍵Key
jを求めるための演算式である。
【0052】
次に、
図3を参照して、本実施形態に係るICチップ発行システム1の構成の一例について説明する。
図3は、本実施形態に係るICチップ発行システム1の構成を示すブロック図である。
上述の通り、ICチップ発行システム1は、カード開発者端末10と、カードベンダ端末20と、ICチップベンダ端末30と、0次発行者端末40と、ICチップ50とを備える。なお、本発明に係るICチップ発行システム1は、サービス製造工程Eを実行する端末や、サービス提供工程Fを実行する端末を備えるものであってもよいが、ここでの説明は省略する。
【0053】
カード開発者端末10は、例えば、パーソナルコンピュータであって、入力部11と、演算処理部12と、出力部13と、記憶部14とを備える。
カードベンダ端末20は、例えば、パーソナルコンピュータであって、入力部21と、演算処理部22と、出力部23と、記憶部24とを備える。
ICチップベンダ端末30は、例えば、パーソナルコンピュータであって、入力部31と、演算処理部32と、出力部33と、記憶部34とを備える。
0次発行者端末40は、例えば、パーソナルコンピュータであって、入力部41と、演算処理部42と、出力部43と、記憶部44とを備える。
【0054】
入力部11,21,31,41は、例えば、ユーザからの操作を受け付けるマウスやキーボード等の操作部や、データの入力を受け付ける端子等を含む。
演算処理部12,22,32,42は、例えば、CPU(Central Processing Unit)であって、記憶部14に格納されているプログラムを実行する。
出力部13,23,33,43は、例えば、外部のメモリ媒体やネットワークを介して接続される外部装置にデータを出力する端子等を含む。
記憶部14,24,34,44は、各装置が実行するプログラムや種々の情報を格納する。
【0055】
ICチップ50は、ICチップベンダcによって生成されるICチップである。このICチップ50は、入力部51と、記憶部52と、秘密鍵生成部53と、復号部54と、コマンド実行部55と、出力部56とを備える。
入力部51は、例えば、0次発行者端末40の出力部43と接続されており、この出力部43からの情報を入力する。
記憶部52は、例えば、カードID(個体識別番号)を示す情報と、“カードIDからロットIDを求めるためのロジック”、“秘密情報rとロットID(又はカードID)からハッシュ値Rを求めるためのロジック”、“補間式g(R)にハッシュ値Rを代入して鍵変換式解を求めるためのロジック”、及び、“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”を格納する。
【0056】
秘密鍵生成部53は、入力部51を介して秘密情報rを外部から入力した場合、記憶部52から読み出したカードID(又は、カードIDから求められるロットID)と秘密情報rとに基づくハッシュ値Rを求める。この秘密鍵生成部53は、求めたハッシュ値Rを補間式g(R)に代入して鍵変換式の解である鍵変換式解sを求め、求めた鍵変換式解sに基づき、秘密鍵Keyを求める。
【0057】
例えば、ロットIDに応じた鍵変換方法を利用する場合、秘密鍵生成部53は、カードIDに基づき、予め決められた数の複数のICカードが属する一つのグループごとに割り当てられた固有のロットIDを求める。また、秘密鍵生成部53は、求めたロットIDと秘密情報r
jとに基づくハッシュ値R
jを求め、求めたハッシュ値R
jを補間式g(R
j)に代入して鍵変換式の解である鍵変換式解s
jを求める。そして、秘密鍵生成部53は、求めた鍵変換式解s
jを、予め決められた値(以下に説明する素数p)で除算した余りを、秘密鍵Key
jとする。
【0058】
一方、カードIDに応じた鍵変換方法を利用する場合、秘密鍵生成部53は、カードIDと秘密情報r
jとに基づくハッシュ値R
iを求め、求めたハッシュ値R
iを補間式g(R
i)に代入して鍵変換式の解である鍵変換式解s
iを求める。そして、秘密鍵生成部53は、求めた鍵変換式解s
iを、予め決められた値(以下に説明する素数p)で除算した余りを、秘密鍵Key
iとする。
【0059】
復号部54は、秘密鍵Keyによって暗号化された暗号化発行コマンドを0次発行者端末40から入力した場合、秘密鍵生成部53によって求められた秘密鍵Keyに基づき、暗号化発行コマンドを復号する。
【0060】
コマンド実行部55は、認証が成功した後、発行コマンドを受け入れ、発行コマンドに応じた処理を実行する。このコマンド実行部55は、例えば、以下のようなICカードコマンドに応じた処理を実行することができる。
・GETCHALLENGE
・EXTERNAL AUTHENTICATE
・INTERNAL AUTHENTICATE
本実施形態において、0次発行者dが秘密情報rをカードに送信するコマンドや、コマンドを復号した結果から使用された復号鍵(秘密鍵Key)が正しいか否かの認証処理(つまり、正しい0次発行者dであるか否かの認証)を指示するコマンド等(以下、発行時認証用コマンドという)は、一般的なコマンドではない独自コマンドである。また、発行時認証用コマンドは、暗号化されていない非暗号化コマンドである。
これら独自コマンドは、秘密鍵Keyにより暗号化可能である。なお、コマンドを暗号化することにより、コマンド送信時に添付する秘密データを保護したり、独自コマンドを保護したり、コマンドシーケンスを保護することができる。
【0061】
出力部56は、例えば、0次発行者端末40の入力部41と接続されており、この入力部41へ情報を出力する。
【0062】
次に、
図4,5を参照して、秘密鍵Keyを求めるためのロジックを作成するための情報を格納するテーブルの一例について説明する。
図4は、ロットIDに応じた鍵変換方法の場合に用意されるテーブルであって、ロットIDごとに、秘密鍵Key
jを求めるためのロジックを作成するための情報を格納するテーブルの一例を示す図である。
図4に示すテーブルは、ロットIDごとに、カードID、秘密情報r
j、秘密鍵Key
j、ハッシュ値R
j、鍵変換式解s
j、及び補間式g(R
j)を、それぞれ対応付けて格納するテーブルである。この
図4に示すテーブルには、ロットID:1〜Jのそれぞれに対応するJ個の補間式が格納されている。
【0063】
一方、
図5は、カードIDに応じた鍵変換方法の場合に用意されるテーブルであって、カードIDごとに、秘密鍵Key
jを求めるためのロジックを作成するための情報を格納するテーブルの一例を示す図である。
図5に示すテーブルは、カードIDごとに、ロットID、秘密情報r
j、秘密鍵Key
j、ハッシュ値R
i、鍵変換式解s
i、及び補間式g(R
i)を、それぞれ対応付けて格納するテーブルである。この
図5に示すテーブルには、カードID:001〜Iのそれぞれに対応するI個の補間式が格納されている。
【0064】
これら
図4,5に示す通り、秘密情報r
jと秘密鍵Key
jは、ロットIDごとに決められている。これら
図4,5に示すテーブルは、例えば、カード開発者端末10の記憶部14に格納されている。
このカード開発者端末10は、ロットIDごとに異なるハッシュ値R
jを用いて秘密鍵Key
jを求めるためのロジックを作成する場合、
図4に示すテーブルに格納されているj個の補間式g(R
1),g(R
2),・・・,(R
j)の連立方程式を計算することにより、ロットID:1〜Jが割り当てられた全てのICカードに共通の補間式を求めることができる。
一方、カードIDごとに異なるハッシュ値R
iを用いて秘密鍵Key
jを求めるためのロジックを作成する場合、カード開発者端末10は、
図5に示すテーブルに格納されているI個の補間式g(R
001),g(R
002),・・・,(R
I)の連立方程式を計算することにより、カードID:001〜Iが割り当てられた全てのICカードに共通の補間式を求めることができる。
【0065】
次に、
図6を参照して、本実施形態に係るカード開発者a(又はカード開発者端末10)によって実行される処理の一例について説明する。
図6は、本実施形態に係るカード開発者a(又はカード開発者端末10)によって実行される処理の一例について説明するためのフローチャートである。なお、ここでは、ロットIDに応じた鍵変換方法に用いられる秘密鍵生成情報を生成するための処理と、カードIDに応じた鍵変換方法に用いられる秘密鍵生成情報を生成するための処理とを、同時に説明する。
(ステップST101)
まず、カード開発者aは、各カードのカードIDを決定する。このカードIDは、個々のカードを識別するための固有の情報である。例えば、カード開発者aは、カードID:001,002,003,・・・100,101,・・・,300,・・・,i,・・・Iを割り当てる。
【0066】
(ステップST102)
次に、カード開発者aは、同一の秘密鍵Key
jを利用するカードの数を、秘密鍵Key
jごとに決定する。言い換えると、カード開発者aは、異なるICカード間で共通の秘密鍵Key
jを利用する一のグループに含まれるカード数を決定する。このカード開発者aは、例えば、カードID:001〜100の100枚のカードを1つのグループとし、カードID:101〜300の200枚のカードを1つのグループとすることを決定する。
【0067】
(ステップST103)
そして、カード開発者aは、同一の秘密鍵Key
jを利用するグループそれぞれに対して、個々のグループを識別するためのロットIDを割り当てる。このカード開発者aは、例えば、カードID:001〜100のグループに対してロットID:1を割り当てる。また、カード開発者aは、例えば、カードID:101〜300のグループに対してロットID:2を割り当てる。
【0068】
(ステップST104)
次いで、カード開発者aは、それぞれ対応するロットIDとカードIDとを、入力部11を介してカード開発者端末10に入力し、対応するロットIDとカードID同士をそれぞれ対応付けて記憶部14に登録する。つまり、カード開発者端末10の演算処理部12は、入力するロットIDとカードIDとを、それぞれ対応付けて、記憶部14のテーブルに書き込む。
また、カード開発者端末10の演算処理部12は、“カードIDからロットIDを求めるためのロジック”を生成し、記憶部14に格納する。
【0069】
(ステップST105)
そして、カード開発者aは、各グループ(つまり、同一のロットIDが割り当てられた複数のカード)に、同一の秘密情報r
jを割り当て、カード開発者端末10に入力する。つまり、カード開発者aは、それぞれのロットID(j=1,2,・・・)に対して、発行処理時の認証用に使用する秘密情報r
jを決定し、カード開発者端末10の記憶部14に登録する。
例えば、カード開発者aは、ロットID:1のグループには秘密情報r
1=XXXXXXを、ロットID:2のグループには秘密情報r
2=YYYYYYを、それぞれ割り当てる。つまり、カード開発者端末10の演算処理部12は、入力する秘密情報r
jとロットIDとをそれぞれ対応付けて、記憶部14のテーブルに書き込む。なお、秘密情報r
jは、安全に生成された乱数であることが好ましく、例えば、カード開発者端末10の演算処理部12によって発行される任意の数字(又はアルファベット、数字とアルファベットの組み合わせ)であってもよい。
【0070】
(ステップST106)
次いで、カード開発者端末10の演算処理部12は、補間式に代入する未知数であるハッシュ値Rを求める。つまり、この演算処理部12は、ロットIDごとにハッシュ値R
jを求めるとともに(ロットIDに応じた鍵変換方法に対応)、カードIDごとにハッシュ値R
iを求める(カードIDに応じた鍵変換方法に対応)。
例えば、ロットIDごとにハッシュ値R
jを求める場合(ロットIDに応じた鍵変換方法に対応)、カード開発者端末10の演算処理部12は、以下の式に従って、テーブルにおいてそれぞれ対応付けられているロットIDと秘密情報r
jとに基づくハッシュ値R
jをロットIDごとに求める。
【0072】
つまり、カード開発者端末10の演算処理部12が、ロットID:1,2,・・・,j,・・・ごとに、ハッシュ値R
1,R
2,・・・,R
j,・・・を生成する。
【0073】
一方、カードIDごとにハッシュ値R
iを求める場合(カードIDに応じた鍵変換方法に対応)、カード開発者端末10の演算処理部12は、以下の式に従って、テーブルにおいてそれぞれ対応付けられているカードIDと秘密情報r
jとに基づくハッシュ値R
iをカードIDごとに求める。
【0075】
つまり、カード開発者端末10の演算処理部12が、カードID:001,002,003,・・・,i,・・・ごとに、ハッシュ値R
001,R
002,R
003,・・・,R
i,・・・を求める。
【0076】
また、カード開発者端末10の演算処理部12は、“秘密情報rとロットID(又はカードID)からハッシュ値Rを求めるためのロジック”を生成し、記憶部14に格納する。
【0077】
(ステップST107)
そして、カード開発者端末10の演算処理部12は、ロットIDごとに、秘密鍵Key
jを生成する。なお、この秘密鍵Key
jは、演算処理部12によって生成される任意の乱数であってもよく、カード開発者aにより決められカード開発者端末10に入力される情報であってもよい。
そして、カード開発者端末10の演算処理部12は、生成した秘密鍵Key
jを、ロットIDに対応付けて、記憶部14のテーブルに書き込む。
【0078】
(ステップST108)
次いで、カード開発者端末10の演算処理部12は、鍵変換式に含まれる鍵変換式パラメータ(任意の法pと任意の整数k)を生成する。なお、任意の整数kは、ロットIDごとに決められた任意の整数k
j、又は、カードIDごとに決められた任意の整数k
iを含む。
【0079】
また、カード開発者端末10の演算処理部12は、“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”を生成し、記憶部14に格納する。
本実施形態において、ロットIDごとに鍵変換式を用意する場合(ロットIDに応じた鍵変換方法に対応)、カード開発者端末10の演算処理部12は、以下に示す鍵変換式を生成し、記憶部14に格納する。
【0081】
そして、演算処理部12は、以下の式で示す“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”を生成し、記憶部14に格納する。
【0083】
一方、カードIDごとに鍵変換式を用意する場合(カードIDに応じた鍵変換方法に対応)、カード開発者端末10は、以下に示す鍵変換式を生成し、記憶部14に格納する。
【0085】
そして、演算処理部12は、以下の式で示す“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”を生成し、記憶部14に格納する。
【0087】
(ステップST109)
そして、カード開発者端末10の演算処理部12は、鍵変換式に、ステップST107で生成した秘密鍵Key
jと、ステップST108において生成した鍵変換式パラメータ(p,k)を代入して、補間式g(R)の解である鍵変換式解sを求める。
言い換えると、カード開発者端末10の演算処理部12は、秘密鍵Key
jを、任意の整数kを用いて、任意の法pのもとで合同な別の値sに変換する。
【0088】
例えば、ステップST107において、ロットIDごとにハッシュ値R
jが生成されている場合、カード開発者端末10の演算処理部12は、ステップST106において生成したハッシュ値R
1を補間式g(R
1)に代入して、c,b
1,b
2,・・・,b
J−1を含む数値で表される鍵変換式解s
1を算出する。つまり、カード開発者端末10は、以下の式に示す鍵変換式解s
1を算出する。
【0090】
(ステップST110)
次いで、カード開発者端末10の演算処理部12は、全てのロットID:1,2,・・・,Jについて、ステップST109の処理を実行したか否かを判定する。全てのロットIDについてステップST109の処理が終了していない場合、カード開発者端末10の演算処理部12は、ステップST109に戻って、ステップST109の処理を繰り返す。
【0091】
例えば、カード開発者端末10の演算処理部12は、ステップST109の処理に戻って、ステップST106において生成したハッシュ値R
2を補間式g(R
2)に代入して、以下の式に示す鍵変換式解s
2を算出する。
【0093】
そして、この処理を繰り返し、カード開発者端末10の演算処理部12は、ステップST106において生成したハッシュ値R
jを補間式g(R
j)に代入して、以下の式に示す鍵変換式解s
jを算出する。
【0095】
(ステップST111)
ステップST110において、全てのロットID:1,2,・・・,JについてステップST109の処理が終了したと判定した場合、カード開発者端末10の演算処理部12は、ステップST109において算出した全ての鍵変換式s
1,s
2,・・・,s
Jの連立方程式を解くことにより、補間式に含まれる係数c,b
1,b
2,・・・,b
J−1を求める。
これにより、カード開発者端末10の演算処理部12は、補間式g(R
j)=c+b
1・R
j+b
2・(R
j)
2+,・・・,b
J−1・(R
j)
J−1を得ることができる。つまり、カード開発者端末10の演算処理部12は、“補間式g(R)にハッシュ値Rを代入して鍵変換式解sを求めるためのロジック”を生成し、記憶部14に格納することができる。
【0096】
なお、カード開発者端末10の演算処理部12は、ステップST106において、カードIDごとにハッシュ値R
iが生成されている場合(つまり、カードIDに応じた鍵変換方法を用いる場合)も、上述と同様にして、補間式g(R
i)=c+b
1・R
i+b
2・(R
i)
2+,・・・,b
I−1・(R
i)
I−1を得ることができる。
【0097】
簡単に説明すると、カード開発者端末10は、ステップST109の処理を繰り返すことにより、以下の式に示す鍵変換式解s
001,s
002,・・・,s
i,・・・を算出する。
【0099】
そして、全てのカードIDについてステップST109の処理が終了したと判定した場合、カード開発者端末10は、ステップST109において算出した全ての鍵変換式s
001,s
002,・・・,s
i,・・・の連立方程式を解くことにより、補間式に含まれる係数c,b
1,b
2,・・・,b
I−1を求める。
これにより、カード開発者端末10の演算処理部12は、補間式g(R
i)=c+b
1・R
i+b
2・(R
i)
2+,・・・,b
I−1・(R
i)
I−1を得ることができる。
カード開発者端末10の演算処理部12は、“補間式g(R)にハッシュ値Rを代入して鍵変換式解sを求めるためのロジック”を生成し、記憶部14に格納する。
【0100】
そして、カード開発者端末10の演算処理部12は、これら処理によって得られた情報、つまり、カードIDを示す情報と、“カードIDからロットIDを求めるためのロジック、“秘密情報rとロットID(又はカードID)からハッシュ値Rを求めるためのロジック”、“補間式g(R)にハッシュ値Rを代入して鍵変換式解sを求めるためのロジック”、及び、“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”を、ソースコードに実装する。
【0101】
(ステップST112)
次いで、カード開発者端末10の演算処理部12は、作成したソースコードを、所定のメモリ媒体に書き込み、又は、セキュリティが確保されたネットワークを介してカードベンダ端末20に送信する。これにより、カードOSや秘密鍵生成情報等を含むソースコードが書き込まれた所定のメモリ媒体をカードベンダb側に渡すこと、又は、カードOSや秘密鍵生成情報等を含むソースコードをネットワークを介してカードベンダ端末20に渡すことができる。
【0102】
(ステップST113)
また、カード開発者端末10の演算処理部12は、ステップST107において生成した秘密鍵Key
jにより、発行処理に用いられる発行コマンドを暗号化する。そして、カード開発者端末10は、暗号化した発行コマンドと秘密情報r
jとを、共通するロットIDごとに対応付けた情報を所定のメモリ媒体に書き込み、又は、セキュリティが確保されたネットワークを介して0次発行者端末40に送信する。これにより、秘密鍵Key
jにより暗号化された発行コマンドと秘密情報r
jとを、0次発行者d側に渡すこと、又は、秘密鍵Key
jにより暗号化された発行コマンドと秘密情報r
jとを、ネットワークを介して0次発行者d側に渡すことができる。
【0103】
次に、
図7を参照して、本実施形態に係る0次発行者d(又は0次発行者端末40)によって実行される処理の一例について説明する。
図7は、本実施形態に係る0次発行者d(又は0次発行者端末40)によって実行される処理の一例について説明するためのフローチャートである。なお、ここでは、0次発行者端末40と、発行処理の対象であるICチップ50が、通信可能に接続されている。
【0104】
(ステップST201)
例えば、0次発行者dは、入力部41を介して、0次発行者端末40に、秘密情報r
1を入力する。0次発行者端末40の演算処理部42は、入力した秘密情報r
1を、記憶部44に書き込む。なお、0次発行者端末40の演算処理部42は、秘密情報r
1が記憶されたメモリ媒体が入力部41に接続された場合、このメモリ媒体から読み出した情報を、記憶部44に書き込むものであってもよい。
(ステップST202)
次いで、0次発行者dは、入力部41を介して、0次発行者端末40の演算処理部42に、発行時認証用コマンドを入力する。
(ステップST203)
発行時認証用コマンドを入力すると、0次発行者端末40の演算処理部42は、発行時認証用コマンドを、出力部43を介して、発行対象であるICチップ50に出力する。また、演算処理部42は、発行時認証用コマンドとともに、ステップST201で入力した秘密情報r
1も、ICチップ50に出力する。
【0105】
(ステップST204)
次いで、発行処理の対象であるICチップ50は、入力部51を介して、0次発行者端末40から、発行時認証用コマンドの認証を指示するコマンドと秘密情報r
1を入力する。なお、本実施形態において、発行時認証用コマンドは非暗号化コマンドであるため、ICチップは、この発行時認証用コマンドに従って、以下の処理を実行する。(ステップST205)
ICチップ50の秘密鍵生成部53は、記憶部52に“カードIDからロットIDを求めるためのロジック”が記憶されている場合、このロジックを参照して、カードIDからロットIDを求める。
例えば、ICチップ50の記憶部52には、カードID:001と、“カードIDからロットIDを求めるためのロジック”とが書き込まれている。この場合、秘密鍵生成部53は、“カードIDからロットIDを求めるためのロジック”を参照して、カードID:001からロットID:1を求める。
【0106】
(ステップST206)
次いで、秘密鍵生成部53は、記憶部52に記憶されている“秘密情報rとロットIDからハッシュ値Rを求めるためのロジック”を参照する。
(ステップST207)
そして、ICチップ50の秘密鍵生成部53は、秘密情報r
1と、ステップST205において算出したロットIDとに基づき、“秘密情報rとロットIDからハッシュ値Rを求めるためのロジック”からハッシュ値R
1を求める。
【0107】
(ステップST208)
次いで、秘密鍵生成部53は、記憶部52に保存されている“補間式g(R)にハッシュ値Rを代入して鍵変換式解sを求めるためのロジック”に従って、この補間式g(R)にハッシュ値R
1を代入して、鍵変換式解s
1を算出する。
【0108】
(ステップST209)
そして、秘密鍵生成部53は、記憶部52に保存されている“補間式g(R)の解である鍵変換式解sに基づき秘密鍵Keyを求めるためのロジック”に従って、ステップST208によって算出した鍵変換式解s
1を素数pで除算した余り秘密鍵Key
1を算出する。
【0109】
(ステップST210)
次いで、秘密鍵生成部53は、秘密鍵Keyの算出に成功したことを示すレスポンスを0次発行者端末40に出力する。例えば、秘密鍵生成部53は、正常に処理が実行されたことを示すレスポンス(9000)を、0次発行者端末40に出力する。
【0110】
(ステップST211)
そして、0次発行者dは、入力部41を介して、0次発行者端末40に、秘密鍵Keyによって暗号化されている暗号化発行コマンドを入力する。
(ステップST212)
0次発行者端末40の演算処理部42は、入力した暗号化発行コマンドを、出力部43を介して、ICチップ50に出力する。
【0111】
(ステップST213)
そして、ICチップ50の復号部54は、入力部51を介して入力された暗号化発行コマンドを、ステップST209において生成された秘密鍵Key
1により復号する。
(ステップST214)
次いで、復号部54は、復号された発行コマンドが、正しく復号されたか否かを検証する。
【0112】
(ステップST215
、ST216)
復号された発行コマンドが、正しく復号されているとの検証結果が得られた場合、復号部54は、暗号化発行コマンドの認証が成功したことを判定し、コマンド実行部55に通知する。また、ICチップ50のコマンド実行部55は、認証が成功した後、発行コマンドを受け入れ、発行コマンドに応じた処理を実行する。
(ステップST21
5、ST217)
一方、復号された発行コマンドが、正しく復号されていないとの検証結果が得られた場合、復号部54は、暗号化発行コマンドの認証を失敗したことを判定し、コマンド実行部55にエラーを通知する。
【0113】
なお、ステップST205において、記憶部52に“カードIDからロットIDを求めるためのロジック”が記憶されていない場合、秘密鍵生成部53は、カードIDからロットIDを求める処理はしない。また、この場合、記憶部52には、“秘密情報rとカードIDからハッシュ値Rを求めるためのロジック”が記憶されている。このため、秘密鍵生成部53は、ステップST206において、“秘密情報rとカードIDからハッシュ値Rを求めるためのロジック”を参照し、ステップST207において、秘密情報r
1とカードID:001とに基づき、ハッシュ値R
001を求める。次いで、秘密鍵生成部53は、ステップST208において、記憶部52に保存されている“補間式g(R)にハッシュ値Rを代入して鍵変換式解を求めるためのロジック”に従って、この補間式g(R)にハッシュ値R
001を代入して、鍵変換式解s
001を算出する。そして、秘密鍵生成部53は、ステップST209において、算出した鍵変換式解s
001を素数pで除算した余り秘密鍵Key
1を算出する。以降、上述のロットIDに応じた鍵変換方法を採用している場合と同様にして、ステップST210〜216の処理を実行する。
【0114】
上述の通り、本実施形態に係るICカードは、内蔵するICチップ50に、暗号化された発行コマンドを復号するための秘密鍵Keyを直接記憶せずに、外部から入力する情報に基づき秘密鍵Keyを求めるロジックを記憶する。これにより、ICチップ50を製造するICチップベンダcに秘密鍵Keyを秘密にしておくことができる。
また、ICチップは秘密鍵Keyを求めるロジックを記憶することにより、暗号化された発行コマンドを復号する際に、0次発行者dは、秘密鍵KeyをICカードに入力するのではなく、秘密鍵Keyを求めるための情報、例えば、秘密情報rやカードIDを入力する。これにより、0次発行処理工程Dを実行する0次発行者dに秘密鍵Keyを秘密しておくことができる。よって、例えば、ICチップベンダcに提供された情報が、0次発行者dに流出したとしても、0次発行者dが秘密鍵Keyを得ることができないシステムを提供することができる。
【0115】
また、本実施形態に係るICカードは、異なるICカード間で共通の秘密鍵Keyを用いている。これにより、秘密鍵Keyごとにカード開発者aによって実施される検査処理の労力を削減することができる。
【0116】
さらに、本実施形態に係るICカードは、異なるICカード間で共通の補間式を用いている。これにより、補間式ごとにカード開発者aによって実施される検査処理の労力を削減することができる。
【0117】
また、本実施形態に係るICカードは、一のロットIDが割り当てられるICカードの枚数を、カード開発者aによって決められた任意の数とすることができる。つまり、一の秘密鍵Keyを共有しているICカードの枚数を、カード開発者aによって決められた任意の数に制限することができる。これにより、仮に、秘密鍵Keyが漏えいした場合であっても、攻撃が成功する範囲を制限し、漏えいが影響する範囲を制限することができる。
【0118】
なお、本発明は上記内容に限られない。例えば、
図6の処理において、ステップST101〜ST103は、カード開発者端末10によって実行されるものであってもよい。例えば、カード開発者端末10は、固有のカードIDを各カードに割り当て、予め決められたロッドに含まれるカードの枚数(例えば、100枚)ごとに、カードIDが割り当てられた複数のカードのグループに区分して、区分した各グループに固有のロッドIDを割り当てるものであってもよい。
また、
図7の処理において、0次発行者端末40が、ICカードに対応する秘密情報rと暗号化発行コマンドを選択し、入力するものであってもよい。例えば、0次発行者dは、入力部41を介して、0次発行者端末40に、全ての秘密情報r
1,r
2,・・・,r
Jと、秘密鍵Key
1,Key
2,・・・,Key
Jによって暗号化された暗号化発行コマンドを入力し、0次発行者端末40の演算処理部42が、入力した情報を、記憶部44に書き込む。そして、ICチップ50は、自身に割り当てられたカードIC又はロットIDを0次発行者端末40に送信し、自身に割り当てられたカードIC又はロットIDに対応する秘密情報rと暗号化発行コマンドの送信を要求するものであってもよい。この場合、0次発行者dが、対象となるICカードごとに、秘密情報rや暗号化発行コードを選択する手間が省ける。
【0119】
なお、本発明における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより工程毎の認証処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0120】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。