図1は、本発明の認証システムの構成例を示している。この構成例においては、システムが、コントローラ1、リーダライタ2、およびICカード3により構成されている。ICカード3は、各ユーザが、例えば定期券などの代わりに所持するものであり、リーダライタには、このICカード3を利用する鉄道会社の改札口に設けられているものである。なお、本明細書において、システムの用語は、複数の装置で構成されている全体の装置を総称して使用する場合に、適宜用いる。
コントローラ1は、メモリ11を有し、そこにICカード3のメモリ31の各エリアにアクセスするのに必要な暗号鍵と、それに対応するプロバイダ番号を記憶している。通信部12は、リーダライタ2の通信部21との間で有線または無線で、通信を行う。縮退処理部13は、メモリ11に記憶されている複数の暗号鍵の中から、所定の数の暗号鍵を読み出し、1つの縮退鍵を生成する処理を行う。制御部14は、コントローラ1の各部の動作を制御する他、認証処理を行うようになされている。
リーダライタ2の通信部21は、有線または無線で、コントローラ1の通信部12、またはICカード3の通信部33と通信を行うようになされている。暗号化部22は、乱数生成部23で生成した乱数を暗号化するとともに、ICカード3から伝送されてきた暗号化されている乱数を復号化する処理を行う。制御部24は、リーダライタ2の各部の動作を制御するとともに、認証処理を行うようになされている。
ICカード3は、メモリ31を有し、このメモリ31は、複数のエリア(図1の例の場合、5個のエリア)に区分されている。各エリアには、各プロバイダ(例えば各鉄道会社)が個別にアクセスし、適宜データを書き込み、または読み出すようになされている。ただし、各エリア毎に異なる暗号鍵が対応付けされており、所定のエリアiにアクセスするには、対応する暗号鍵iが必要となる。
縮退処理部32は、複数の暗号鍵を縮退処理し、1つの縮退鍵を生成する処理を行う。暗号化部34は、乱数生成部35で生成した乱数を暗号化する処理を行うとともに、リーダライタ2より供給されてきた、暗号化されているデータを復号化する処理を行う。制御部36は、ICカード3の各部の動作を制御するとともに、認証処理を行うようになされている。
図2は、ICカード3のメモリ31のデータ構造のより詳細な例を表している。この例においては、エリア51は共通領域とされ、各プロバイダに共通のデータが記憶されるようになされている。また、エリア52は、個々のプロバイダ専用の領域とされ、個々の対応するプロバイダのみが、その領域にアクセスすることができるようになされている。
エリア53は、エリア51とエリア52を管理するのに必要な情報が記録されるようになされている。その情報とは、この例の場合、個々のプロバイダに割り付けられているプロバイダ番号、そのプロバイダに対して割り付けられている領域を示すブロック割り付け情報、読み出しのみ可能、書き込みのみ可能、読み出しと書き込みの両方が可能といった許可情報、暗証鍵、および暗証鍵のバージョンとされている。
例えば、プロバイダ番号00は、各プロバイダ共通のものとされ、そのブロック割り付け情報には、共通領域としてのエリア51のアドレスが書き込まれている。また、その許可情報としては、共通領域としてのエリア51に対してアクセス可能な情報が規定されている。さらに、その暗号鍵とそのバージョンとしては、共通領域としてのエリア51に対してアクセスするのに必要な暗号鍵と、そのバージョンが規定されている。
エリア54は、システムIDブロックとされ、このICカード3を適用するシステムのIDが書き込まれる。
なお、コントローラ1のメモリ11には、この図2に示す、プロバイダ番号、許可情報、暗号鍵バージョン、および暗号鍵が記憶されている。
図3は、縮退処理部13(または縮退処理部32)の構成例を示している。ただし、この処理は、実際には、ソフトウエアにより行われる。
すなわち、縮退処理部13または32においては、ICカード3にn個の暗号鍵が存在する場合、2入力縮退回路81−1乃至81−(n−1)の(n−1)個の回路が設けられており、それぞれに2つのデータが入力され、1つのデータを出力するようになされている。2入力縮退回路81−1には、プロバイダ1(鉄道会社1)の暗号鍵とプロバイダ2(鉄道会社2)の暗号鍵が入力されている。2入力縮退回路81−1は、この2つの暗号鍵から1つの縮退鍵を生成し、後段の2入力縮退回路81−2に供給する。2入力縮退回路81−2は、2入力縮退回路81−1より入力された縮退鍵と、プロバイダ3(鉄道会社3)の暗号鍵を縮退処理して、後段の2入力縮退回路81−3(図示せず)に出力する。以下、同様の処理が、各2入力縮退回路81−iにおいて行われ、最後の2入力縮退回路81−(n−1)で生成された縮退鍵が、最終的な1つの縮退鍵とされる。
なお、n=1の場合(暗号鍵が1個の場合)、入力された暗号鍵が、そのまま縮退鍵として出力される。
図4乃至図6は、図3に示した2入力縮退回路81−iの構成例を表している。図4の暗号化回路81−iは、前段からの入力を、予め用意されている暗号鍵に対応して暗号化し、後段に出力するようになされている。例えば、2入力縮退回路81−1を、この暗号化回路81−iで構成する場合、プロバイダ1の暗号鍵がデータとして入力され、プロバイダ2の暗号鍵が暗号鍵として入力される。そしてプロバイダ2の暗号鍵を用いて、プロバイダ1の暗号鍵(データ)を暗号化して、2入力縮退回路81−2に出力する。
図5の暗号化回路81−iは、前段からの入力を暗号鍵として受け取り、予め用意されている暗号鍵をデータとして受け取り、暗号化処理を行って、後段に出力する。例えば、この暗号化回路81−iを、図3の2入力縮退回路81−1に応用すると、プロバイダ2の暗号鍵がデータとして入力され、プロバイダ1の暗号鍵が暗号鍵として入力される。そして、プロバイダ2の暗号鍵をプロバイダ1の暗号鍵を利用して暗号化し、縮退鍵として、後段の2入力縮退回路81−2に出力する。
なお、図4と図5に示す暗号化方法としては、例えば、DES(Data Encryption Standard),FEAL(Fast Data Encipherment Algorithm)などを用いることができる。
図6では、暗号化回路81−iが、排他的論理和回路(XOR)により構成されている。例えば、この暗号化回路81−iを、図3の2入力縮退回路81−1に応用すると、プロバイダ1の暗号鍵とプロバイダ2の暗号鍵の排他的論理和が演算され、その演算結果が、縮退鍵として、後段の2入力縮退回路81−2に出力されることになる。
図3において、各プロバイダの暗号鍵は、例えば、30バイトで表されるディジタルデータのうちの1つとされる、この場合、縮退鍵も同一のバイト数のディジタルデータとなる。暗号鍵は、30バイトで規定される数字の中の1つであるから、すべての組み合わせの中から所定の1つの数字を選択し、順番にテストして行けば、暗号鍵を見破ることは、理論的には可能である。しかしながら、その演算を行うのには、膨大な時間がかかり、30バイトで表される数字のどれが、実際の暗号鍵であるのかを調べるのは実質的には不可能である。
次に、図7のタイミングチャートを参照して、その動作について説明する。なお、コントローラ1とリーダライタ2は、ここでは別の装置として示されているが、一体的な装置とすることも可能である。
コントローラ1の制御部14は、ステップS1において、通信部12を制御し、リーダライタ2に対して充分短い周期(ICカード3を所持するユーザが、鉄道駅の改札口を通過するのを検知できる周期)でポーリングを指令する。リーダライタ2の制御部24は、通信部21を介してこの指令を受けたとき、ステップS2において、通信部21を制御し、ICカード3に対するポーリングを実行する。ICカード3の制御部36は、通信部33を介してリーダライタ2の通信部21からポーリングの指令を受けたとき、ステップS3において、自己の存在を通知する。リーダライタ2の制御部24は、通信部21を介して、ICカード3からこの通知を受けたとき、ステップS4において、ICカード3の存在をコントローラ1に通知する。
コントローラ1の制御部14は、通信部12を介してこの通知を受けたとき、ステップS5で縮退処理部13を制御し、ICカード3のメモリ31のうち、アクセスすべきエリアの暗号鍵をメモリ11から読み出させる。例えば、図1の例においては、エリア1、エリア2、およびエリア4にアクセスするため、暗号鍵1、暗号鍵2、および暗号鍵4が、縮退処理部13に呼び出されている。縮退処理部13は、この3つの暗号鍵を用いて縮退処理を行う。すなわち、図3に示したように、2入力縮退回路81−1において、暗号鍵1を暗号鍵2で暗号化し、2入力縮退回路81−2に出力する。2入力縮退回路81−2は、2入力縮退回路81−1より供給された暗号鍵1と暗号鍵2を縮退した結果得られた縮退鍵を、暗号鍵3で暗号化する。そして、得られた縮退鍵が、最終的な縮退鍵とされる。
制御部14は、このように1つの縮退鍵が生成されると、これをプロバイダ番号(鍵の番号)とプロバイダの数(鍵の数)、および縮退処理の順序とともに、ステップS6において、リーダライタ2に通知させる。リーダライタ2の制御部24は、通信部21を介してコントローラ1の通信部12から、この情報の入力を受けたとき、ステップS7において、乱数生成部23に、乱数r1を生成させる。制御部24はこの乱数r1を、ステップS8で通信部21からICカード3に、通知させる。このとき、制御部24は、コントローラ1から提供を受けたプロバイダ数とプロバイダ番号も、合わせてICカード3に通知する。
ICカード3の制御部36は、このような通知を受けたとき、ステップS9で、まず縮退鍵生成処理を実行する。すなわち、制御部36は、リーダライタ2から転送されてきたプロバイダ番号(鍵番号)に対応する暗号鍵をメモリ31から読み出し、これを縮退処理部32に供給し、縮退処理を実行させる。図1の例の場合、暗号鍵1、暗号鍵2、および暗号鍵4に対応するプロバイダ番号が転送されてくるので、縮退処理部32は、これらのプロバイダ番号に対応する暗号鍵1、暗号鍵2、および暗号鍵4をメモリ31から読み出し、縮退処理部32に供給する。縮退処理部32は、これらの3つの暗号鍵を、指定された順序(例えば、入力されたプロバイダの順序)で縮退処理し、最終的に1つの縮退鍵を生成する。これにより、コントローラ1が、ステップS5で生成した縮退鍵と同一の縮退鍵が、ICカード3において生成されたことになる。
次に、ステップS10で、制御部36は、リーダライタ2から通知を受けた乱数r1と、縮退処理部32で生成された縮退鍵を暗号化部34に出力し、乱数r1を縮退鍵で暗号化させる。そして、暗号化した乱数R1を生成させる。
次に、ステップS11において、制御部36は、乱数生成部35で、所定の乱数r2を生成させる。そして、ステップS12において、制御部36は、通信部33を制御し、ステップS10で、暗号化した乱数R1と、ステップS11で生成した乱数r2をリーダライタ2に転送させる。
リーダライタ2の制御部24は、通信部21を介して、乱数r2と暗号化された乱数R1の供給を受けたとき、ステップS13で、暗号化部22を制御し、暗号化されている乱数R1をコントローラ1より供給を受けた縮退鍵を利用して復号化させる。制御部24は、復号化した結果得られた乱数が、ステップS7で生成した乱数r1と等しいか否かをさらにチェックし、等しくない場合、ICカード3は適正なICカードではないとして、ステップS14において、コントローラ1に対して、その旨を通知する。このとき、コントローラ1はエラー処理を実行する(例えば、ユーザの改札口の通過を禁止する)。
これに対して、ステップS13において、復号化された乱数と乱数r1が等しいと判定された場合、ステップS15に進み、制御部24は、暗号化部22を制御し、ICカード3より供給を受けた乱数r2を、コントローラ1より供給を受けた縮退鍵を用いて暗号化させ、暗号化された乱数R2を生成させる。さらに、制御部24は、このようにして生成した、暗号化した乱数R2を、ステップS16で、ICカード3に転送させる。
ICカード3の制御部36は、このように暗号化された乱数R2の供給を受けたとき、ステップS17で、暗号化部34を制御し、暗号化されている乱数R2を、ステップS9で生成した縮退鍵を用いて復号化させる。そして、復号化された乱数が、ステップS11で生成した乱数r2と等しいか否かを判定する。そして、判定した結果を、ステップS18で、通信部33を介してリーダライタ2に転送させる。
リーダライタ2の制御部24は、ICカード3から認証結果の通知を受けたとき、ステップS19で、これをさらに通信部21からコントローラ1に通知する。
コントローラ1の制御部14は、通信部12を介して、この通知を受けたとき、この通知がNGであるとされている場合には、エラー処理を実行する。これに対してOKであるとされている場合(ICカード3が適正なものである場合)には、ステップS20において、読み出しまたは書き込みなどの必要なコマンドをリーダライタ2に出力する。リーダライタ2は、このコマンドの転送を受けたとき、ステップS21で、さらにICカード3に対して、読み出しまたは書き込みの指令を出力する。いまの場合、このようにして、ICカード3のエリア1、エリア2、およびエリア4の読み出しまたは書き込みが指令される。
その結果、ICカード3の制御部36は、エリア1、エリア2、またはエリア4に書き込みが指令されている場合には、書き込み処理を実行する。そして、読み出しが指令されている場合には、読み出し処理を実行する。読み出されたデータは、ステップS22で、ICカード3からリーダライタ2に転送され、さらに、リーダライタ2からコントローラ1に、ステップS23で転送される。
以上のように、複数のエリアにアクセスする場合に、個々に必要となる暗証鍵を個々に認証するのではなく(例えば図1の例の場合、暗号鍵1、暗号鍵2、暗号鍵4について、個々に認証処理を行う(すなわち、合計3回の認証処理を行う)のではなく)、複数の暗証鍵から1つの縮退鍵を生成し、この1つの縮退鍵で1回だけ認証処理を行うようにしたので、迅速な認証処理が可能となる。
なお、縮退鍵は、暗号鍵と同一のバイト数(長さ)としたが、異なるバイト数とすることも可能である。ただし、この縮退鍵は、認証に用いるだけなので、その縮退鍵から元の複数の暗号鍵を復元することが可能である必要はない。
図8は、縮退鍵を生成する他の方法を表している。この例においては、プロバイダ1乃至プロバイダnそれぞれに、暗号鍵K1乃至Knが割り当てられる他、最初の2入力縮退回路81−1に、予め含められた秘密(各プロバイダに共通のデータとされるので、必ずしも秘密でなくともよいが)のデータD0が入力され、2入力縮退回路81−1は、このデータD0を、プロバイダ1の暗号鍵K1に基づいて暗号化するようになされている。そして、2入力縮退回路81−2が、2入力縮退回路81−1の出力D1を、プロバイダ2の暗号鍵K2に基づいて暗号化するようになされている。以下、順次、同様の処理が、2入力縮退回路81−iにおいて行われ、最終段の2入力縮退回路81−nの出力が最終的な縮退鍵とされる。
図3に示すように縮退鍵を生成する場合、プロバイダ2は、プロバイダ1の暗号鍵を知らないと、縮退鍵を生成することができない。基本的に、各プロバイダは独立しているので、所定のプロバイダの暗号鍵を他のプロバイダに知らせるようにすることは、秘密性を確保する上で好ましいことではない。
これに対して、図8に示すように縮退鍵を生成すると、自分自身の暗号鍵を他のプロバイダに通知しなくても、他のプロバイダは、縮退鍵を生成することができる。
図9乃至図11は、図8に示すように、縮退鍵を生成する場合のプロバイダ1、プロバイダ2、またはプロバイダ4の、コントローラ1およびリーダライタ2と、ICカード3の構成例を表している。
これらの図に示すように、ICカード3には、メモリ31に、エリア1乃至エリア5に対応する暗号鍵K1乃至暗号鍵K5の他、所定のデータ(共通データ)D0が予め記憶されている。
そして、プロバイダ1のメモリ11には、自分自身の暗号鍵K1とデータD024が記憶されており(図9)、プロバイダ2のメモリ11には、自分自身の暗号鍵K2とデータD014が記憶されており(図10)、プロバイダ4のメモリ11には、自分自身の暗号鍵K4とデータD012が記憶されている(図11)。
これらのデータ(個別データ)D024,D014,D012は、図12乃至図14に示す方法で生成されたものである。
すなわち、プロバイダ1は、データD024を得るために、予め定めたデータD0を、プロバイダ2により、その暗号鍵K2を用いて、2入力縮退回路81−1で縮退して、データD02を生成してもらう。そして、このデータD02をプロバイダ4に提供して、その暗号鍵K4で2入力縮退回路81−2で縮退して、データD024を生成してもらう。プロバイダ1は、このデータD024をプロバイダ4から提供を受け、メモリ11に記憶させる。
なお、この場合、データD0を先にプロバイダ4に提供し、暗号鍵K4で縮退して、データD04を生成してもらい、このデータD04をプロバイダ2に提供して、暗号鍵K2で縮退して、データD042を生成してもらい、これをメモリ11に記憶させるようにしてもよい。そこで、プロバイダ1は、いずれの順序で縮退を行ったのかを示す縮退の順番もメモリ11に記憶しておく。
また、図13に示すように、プロバイダ2は、プロバイダ1に依頼して、その暗号鍵K1でデータD0を縮退したデータD01を生成してもらう。そして、このデータD01をプロバイダ4に提供して、暗号鍵K4で縮退してもらい、データD014を生成してもらう。そして、このデータD014をメモリ11に記憶させる。なお、この場合も、先にプロバイダ4に縮退処理を依頼して、暗号鍵K4を用いて生成されたデータD04をプロバイダ1に提供し、これをさらに暗号鍵K1を用いて縮退してもらい、データD041を得て、これをメモリ11に記憶させるようにしてもよい。プロバイダ2は、縮退の順番もメモリ11に記憶させる。
さらに、図14に示すように、プロバイダ4は、プロバイダ1に依頼して、データD0を暗号鍵K1を用いて縮退し、データD01を生成してもらう。そして、このデータD01をプロバイダ2に提供して、暗号鍵K2を用いて縮退し、データD012を生成してもらう。このデータD012をメモリ11に記憶させる。この場合も同様に、先にプロバイダ2にデータD0を暗号鍵K2を用いて縮退し、データD02を生成し、このデータD02をプロバイダ1により暗号鍵K1を用いて縮退し、データD021を生成してもらうようにしてもよい。プロバイダ4も、縮退の順序をメモリ11に記憶させておく。
各プロバイダは、次のように認証処理を行うことができる。例えば、プロバイダ1においては、図9に示すように、制御部14が縮退処理部13を制御し、メモリ11からデータD024と暗号鍵K1を読み出し、縮退鍵を生成させる。この縮退鍵は、リーダライタ2に転送される。このとき、リーダライタ2には、プロバイダの数(この例の場合、3)、プロバイダ番号(いまの場合、プロバイダ1、プロバイダ2、およびプロバイダ4)、並びに、縮退の順序(いまの場合、プロバイダ2、プロバイダ4、プロバイダ1の順)を通知する。制御部24は、通信部21を制御し、コントローラ1の制御部14から転送されてきたこれらのプロバイダ数、プロバイダ番号、および縮退順序の情報を、ICカード3に通知する。
ICカード3においては、通信部33でこれらの情報を受信すると、制御部36は、これらの情報に対応して縮退処理部32を制御し、縮退鍵を生成させる。縮退処理部32は、メモリ31からデータD0を読み出し、これを指定された順序と指定されたプロバイダの番号の暗号鍵を用いて、順次縮退する。すなわち、データD0を暗号鍵K2を用いて縮退し、データD02を得る。このデータD02を暗号鍵K4を用いて縮退し、データD024を得る。さらに、このデータD024を暗号鍵K1を用いて、縮退鍵を生成する。このようにして生成された縮退鍵は、コントローラ1の縮退処理部13が生成した縮退鍵と同一の縮退鍵となっている。
従って、以下、図7を参照して説明した場合と同様に、ステップS10以降の処理を行って、認証処理を行うことができる。そして、プロバイダ1のリーダライタ2は、ICカード3のメモリ31のエリア1、エリア2、およびエリア4にアクセスすることが可能となる。
一方、プロバイダ2においては、図10に示すように、制御部14は、縮退処理部13を制御し、メモリ11からデータD014を読み出し、これを、やはりメモリ11から読み出した暗号鍵K2を用いて縮退させる。そして、生成した縮退鍵をリーダライタ2に転送する。このとき、リーダライタ2には、プロバイダ数(いまの場合、3)、プロバイダ番号(いまの場合、プロバイダ1、プロバイダ2、およびプロバイダ4)、および縮退処理の順番(いまの場合、プロバイダ1、プロバイダ4、プロバイダ2の順番)が、リーダライタ2に通知される。
リーダライタ2は、これらの情報をICカード3に転送する。ICカード3においては、これらの情報に対応して、縮退鍵が生成される。
すなわち、ICカード3の縮退処理部32は、メモリ31から、データD0を読み出し、これを最初に暗号鍵K1を用いて縮退し、データD01を得る。そして、このデータD01がさらに暗号鍵K4を用いて縮退され、データD014が生成される。このデータD014は、さらに暗号鍵K2を用いて縮退される。このようにして生成された縮退鍵は、コントローラ1において生成された縮退鍵と同一の縮退鍵となっている。従って、プロバイダ2のリーダライタ2は、ICカード3のメモリ31のエリア1、エリア2、およびエリア4に対してアクセスすることができる。
さらに、図11に示すように、プロバイダ4においても、コントローラ1の制御部14が縮退処理部13を制御し、メモリ11に記憶されているデータD012を暗号鍵K4を用いて縮退鍵を生成し、これをリーダライタ2に転送する。このとき、プロバイダ数(いまの場合、3)、プロバイダ番号(いまの場合、プロバイダ1、プロバイダ2、およびプロバイダ4)、および縮退順序(いまの場合、プロバイダ1、プロバイダ2、プロバイダ4の順番)が通知される。これらの情報は、ICカード3に転送される。ICカード3は、これらの情報に基づいて、縮退処理を実行する。
すなわち、縮退処理部32は、メモリ31からデータD0を読み出し、これを暗号鍵K1を用いてデータD01を生成する。次に、このデータD01を暗号鍵K2を用いて縮退し、データD012を生成する。そして、このデータD012が、さらに暗号鍵K4を用いて縮退され、最終的な縮退鍵が生成される。このようにして生成された縮退鍵は、コントローラ1において生成された縮退鍵と同一となっている。従って、リーダライタ2は、ICカード3のメモリ31のエリア1、エリア2、およびエリア4に対してアクセスすることができる。
図15は、さらに他の縮退鍵生成の方法を表している。この方法においては、最終的な縮退鍵を生成する2入力縮退回路81−nに入力されるデータDn−1と、ICカード3が予め保持しているID番号とを演算して、その演算結果に対して暗号鍵Knを用いて縮退鍵を生成するようにしている。その他の処理は、図8における場合と同様である。
図16は、図15に示す方法に従って、縮退鍵を生成する場合のコントローラ1、リーダライタ2、およびICカード3の構成例を表している。なお、この構成は、プロバイダ4の構成を表している。同図に示すように、コントローラ1のメモリ11は、データD012と暗号鍵K4、並びに縮退順序を記憶している。リーダライタ2は、通信部21が受信したデータからIDを取得するID取得部211を有している。また、ICカード3は、メモリ201(メモリ31と同一のメモリとすることもできる)に、ICカード3に固有のID番号が予め記憶されている。
このように、ID番号を用いて認証処理を行うようにすると、同一のプロバイダの組み合わせ(例えばプロバイダ1、プロバイダ2、およびプロバイダ4の組み合わせ)のICカードを所持している複数のユーザが、近接した状態で、所定のプロバイダの改札口を通過するような場合の混乱を避けることができる。
すなわち、複数のICカード3が所定のプロバイダのリーダライタ2の近傍を通過するとき、リーダライタ2からの要求に対して、複数のICカード3がそれぞれ応答することになり、リーダライタ2がいずれのICカードからの応答であるのかを判別することができず、誤った処理が行われるおそれがある。これに対して、ID番号を用いると、このような混乱を避けることができる。
例えば、図17に示すように、ICカード3AとICカード3Bが、リーダライタ2の近傍を通過しようとすると、リーダライタ2が、ステップS41において、ICカード3に対してIDを要求する。この要求は、ICカード3Aの通信部33だけでなく、ICカード3Bの通信部33でも受信される。ICカード3Aの制御部36は、このようにしてID要求信号を受信すると、ステップS42において、乱数生成部35を制御し、所定の乱数を発生させる。そして、ステップS43において、発生された乱数に対応するタイムスロットの割当処理を実行する。すなわち、リーダライタ2とICカード3の間の通信は、時分割多重動作で行われ、ICカード3Aは、その複数のタイムスロットのうち、発生された乱数に対応するタイムスロットを、自己の通信のタイムスロットとして割り当てる。そして、割り当てたタイムスロットのタイミングにおいて、ICカード3Aの制御部36がメモリ201から読み出したID番号(IDA)を、通信部33を介して、ステップS44でリーダライタ2に送信させる。
同様の処理が、他のICカード3Bにおいても実行される。すなわち、ICカード3Bの制御部36は、リーダライタ2からID要求信号を受信すると、ステップS45で乱数生成部35を制御し、乱数を発生させる。そして、ステップS46において、生成された乱数に対応するタイムスロットを、自己のタイムスロットとして割り当てる。ステップS47において、メモリ201に記憶されているID番号(IDB)を読み出し、割り当てられたタイムスロットのタイミングで、リーダライタ2に転送する。
リーダライタ2においては、ICカード3A,3Bから送信されてきたID番号を通信部21で受信すると、これをID取得部211に供給し、記憶させる。そして、ステップS48において、制御部24は、乱数生成部23を制御し、乱数r1を生成させる。さらに、ステップS49において、制御部24は、取得したIDのうち、例えば先に取得した方を選択する。制御部24は、さらに、コントローラ1のメモリ11から、データD012、暗号鍵K4、および縮退順序の情報の提供を受ける。そして、これらの情報に対応して、縮退鍵を生成する。
最初に、制御部24は、データD012に、この選択したID(例えば、ICカード3のIDA)に対して、所定の演算を施す。この演算は、加算、排他的論理和の演算などとすることができる。制御部24は、この演算結果を暗号鍵K4を用いて縮退し、縮退鍵を生成する。
さらに、ステップS50において、プロバイダ数、プロバイダ番号、縮退順序、および乱数r1が、ICカード3に送信される。この情報は、ICカード3Aと、ICカード3Bの両方において受信される。ICカード3Bは、この情報を受信したとき、ステップS51で、指定された順序に従って、データD0を暗号鍵K1で縮退し、データD01を得、これを暗号鍵K2で縮退して、データD012を得る。そして、さらに、メモリ201からIDBを読み取り、データD012と演算した結果を、暗号鍵K4で縮退する。
このようにして生成した縮退鍵を用いて、暗号化部34が、暗号化されている乱数r1を復号化する。しかしながら、この乱数r1は、IDAを用いて生成した縮退鍵で暗号化されているため、IDBを用いて生成した縮退鍵では復号化することができない。従って、ICカード3Bは、以後、リーダライタ2からの送信に対して応答しない。
これに対して、ICカード3Aにおいては、ステップS52で、制御部36が、リーダライタ2から転送されてきた情報に対応して、縮退鍵を生成する。すなわち、指定された縮退順序に従って、ICカード3Aの縮退処理部32は、最初にメモリ31から読み出したデータD0を、エリア1から読み出した暗号鍵K1を用いて縮退し、データD01を生成する。そして、このデータD01をエリア2から読み出した暗号鍵K2を用いて縮退し、データD012を生成する。さらに、このデータD012とメモリ201から読み出したID番号(IDA)とに
対して所定の演算を施し、その演算結果に対して、メモリ31のエリア4から読み出した暗号鍵K4を用いて縮退処理を行い、縮退鍵を生成する。このようにして生成した縮退鍵は、リーダライタ2がステップS49で生成した縮退鍵と同一の縮退鍵となる。
従って、以後、ステップS53乃至ステップS59に示す、図7におけるステップS10乃至ステップS17に対応する処理を実行して、認証処理を行うことができる。その処理は、図7において説明した場合と同様であるので、その説明は省略する。
図18は、暗号鍵を変更する方法を表している。例えば、プロバイダ1がその暗号鍵K1を変更しようとする場合、所定の乱数e1を発生し、これを新たな鍵K1’とする。このように、自分自身の暗号鍵を変更したとき、プロバイダ1は、自分自身のリーダライタ2を利用するユーザのICカード3のメモリ31に記憶されているエリア1の暗号鍵K1は、適宜自分でこれを更新することができる。しかしながら、他のプロバイダ2、またはプロバイダ4のリーダライタ2を使用するユーザのICカード3の暗号鍵K1も更新する必要がある。この場合、プロバイダ1は、他のプロバイダ2またはプロバイダ4に対して、新たな暗号鍵K1’を教えずに、暗号鍵K1を新たな暗号鍵K1’に更新させることができる。
この場合、プロバイダ1は、最初に次式を演算して、データC1,C2を生成する。
C1=E(e1,K1)
C2=E(e2,K1)
なお、ここで、E(A,B)は、データAを鍵Bを用いて暗号化することを意味する。暗号化の方法としては、DES,FEALなどを用いることができる。
また、e2は、次式を満足する値である。
e1+e2=F
なお、この値Fは、予め定められている値であり、他のプロバイダ2、プロバイダ4も、自分自身の暗号鍵を変更する場合に用いるものとして知っている値であり、ICカード3にも、メモリ31に予め記憶されている。
プロバイダ1は、このようにして、データC1,C2を生成すると、この値を、自分自身の暗号鍵K1に割り当てられている鍵番号(いまの場合、鍵番号1)とともに、他のプロバイダに通知する。各プロバイダは、これらのデータを用いて、そのリーダライタ2を使用するICカード3のメモリ31内の鍵K1を、次のようにして更新する。この更新処理について、プロバイダ4を例として次に説明する。
すなわち、プロバイダ4のリーダライタ2は、ICカード3に対して、データC1,C2を送信する。ICカード3の暗号化部34は、次式を演算して、e1,e2を求める。
e1=D(C1,K1)
e2=D(C2,K1)
なお、ここで、D(A,B)は、データAを鍵Bを用いて復号化することを意味する。
すなわち、ICカード3は、メモリ31に記憶されている鍵K1を用いて、データC1,C2を復号化し、データe1,e2を得ることができる。
制御部36は、さらに、以上のようにして得たe1とe2を加算し、その加算結果がメモリ31に予め記憶されている所定の値Fと等しいか否かを判定する。等しい場合には、データC1を復号して得られるデータe1を、鍵K1に代わる新たな鍵K1’として更新する。
これに対して、e1とe2の和がFと異なる場合、不正な更新の要求であるとして、更新処理を行わないようにする。
例えば、悪意を持ったプロバイダが、プロバイダ1の暗号鍵K1を改ざんしようとして、次式を演算して、e1’,e2’を得たとする。
e1’=D(C1’,K1)
e2’=D(C2’,K1)
このC1’,C2’は、改ざんを試みたプロバイダが適当に設定した値である。
しかしながら、このようにして生成されたe1’とe2’を加算しても、その加算結果は、一般的には、値Fには等しくならない。この値Fになるe1’,e2’の組み合わせを発見するには、相当の時間を必要とし、実質的には極めて困難である。従って、第3者が、他人の暗号鍵を改ざんすることが防止される。
なお、プロバイダ2も同様の処理を行って、そのリーダライタ2を利用するICカード3のメモリ31の暗号鍵K1を更新する。
なお、以上のようにして、プロバイダ1の暗号鍵K1が変更された場合、プロバイダ1、プロバイダ2、およびプロバイダ4は、図12乃至図14を参照して説明した場合と同様の処理を再び行い、それぞれに記憶するデータD024,D014,D012を更新する。
図19は、認証処理のさらに他の方法を示している。なお、この図19のリーダライタ2は、プロバイダ4のリーダライタを表している。
この例においては、制御部24が、メモリ11に記憶されている暗号鍵K4とデータD012を用いて、縮退鍵Ksを生成する。そして、制御部24は、例えば、暗号鍵K4の偶数ビットと縮退鍵Ksの奇数ビットとを合成し、第1の縮退鍵K4s1を生成し、暗号鍵K4の奇数ビットと縮退鍵Ksの偶数ビットとを合成し、第2の縮退鍵K4s2を生成する。
第1の縮退鍵K4s1は、暗号化部22の暗号化部22Aに入力され、乱数生成部23で生成された乱数を暗号化するのに用いられる。この暗号化された乱数は、ICカード3に送信される。また、このとき、上述した場合と同様にして、縮退鍵を生成するのに必要な情報が、同時にICカード3に送信される。
ICカード3は、この情報を用いて、メモリ31からデータD0を読み出し、さらに暗号鍵K1,K2,K4を順次適用して、縮退鍵Ksを生成する。この縮退鍵Ksは、リーダライタ2が生成した縮退鍵Ksと同一の値となっている。
制御部36は、リーダライタ2と同様の処理を行うことで、第1の縮退鍵K4s1と第2の縮退鍵K4s2を生成する。
そして、暗号化部34の復号化部34Bは、リーダライタ2より送信されてきた暗号化されている乱数を復号化し、この復号化した乱数を暗号化部34Aに転送する。暗号化部34Aにおいては、第2の縮退鍵K4s2を用いて暗号化し、リ
ーダライタ2に送信する。
リーダライタ2においては、暗号化部22の復号化部22Bで、ICカード3より送信されてきた暗号化されている乱数を、第2の縮退鍵K4s2を用いて復号化する。復号結果は、制御部24に転送される。
このようにして復号された乱数は、ICカード3が適正なものであれば、乱数生成部23で生成した乱数と同一の乱数となっている。従って、この受信した乱数が生成した乱数と等しいか否かを調べることで、認証処理を行うことができる。
1 コントローラ, 2 リーダライタ, 3 ICカード, 11 メモリ, 12 通信部, 13 縮退処理部, 14 制御部, 21 通信部, 22 暗号化部, 23 乱数生成部, 24 制御部, 31 メモリ, 32 縮退処理部, 33 通信部, 34 暗号化部, 35 乱数生成部, 36 制御部