以下、図面を参照して本発明の実施の形態について説明する。
図1は、本例のICカードシステムの構成・機能ブロック図である。
本例のICカードシステムは、基本的に図示の上位機器10とカードリーダライタ20とから成る(後述するように、これらをまとめて「カード利用機器」という場合もある)。また、本例のICカードシステムは、上位機器10はインターネット等のネットワーク1を介して管理サーバ2等の外部装置に接続する構成であってもよい。
管理サーバ2は上述したICカード発行・運用会社等のサーバ装置等である。よって、管理サーバ2の動作は特に詳細には説明しないが、簡単に説明するならば、ICカード決済処理に係わる各種情報(履歴等)や、暗号鍵(カードアクセス鍵等)の管理を行うものであり、特にカードアクセス鍵は、バージョンアップ等される場合があり、管理サーバ2はこのバージョンアップ版等の新たなカードアクセス鍵を、ネットワーク1を介して上位機器10へ配信する。あるいはカード利用機器側で運用中以外はカードアクセス鍵を消去している運用形態の場合には、定期的に(カード利用機器側の運用開始毎に)カードアクセス鍵をネットワーク1を介して上位機器10へ配信する。
上位機器10は、機器全体の動作制御を行なうCPU11、CPU11に実行させる所定のアプリケーションプログラムが格納されているプログラムメモリ12、処理中のデータを一時保管するデータメモリ13、予め登録されるカードアクセス鍵等の各種鍵情報を記憶する鍵情報格納用セキュアメモリ14、カードリーダライタ20とリーダライタコマンドによる通信を行なうためのカードリーダライタ通信制御部15及びカードリーダライタ接続I/F16、システム全体を監視している管理サーバ2との通信を行なうためのネットワーク通信制御部17及びネットワーク通信I/F18等から構成されている。
また、カードリーダライタ20は、当該カードリーダライタ20全体の動作制御を行なうCPU21、CPU21に実行させる所定のアプリケーションプログラムが格納されているプログラムメモリ22、処理中のデータを一時保管するデータメモリ23、非接触ICカード3との非接触の通信を行なうためのRF回路24及びアンテナ25、上位機器10と通信を行なうための上位機器通信制御部26及び上位機器接続I/F27等から構成されている。
カードリーダライタ接続I/F16と上位機器接続I/F27とを接続することによって上位機器10とカードリーダライタ20とが接続され、カードリーダライタ通信制御部15及び上位機器通信制御部26によって上位機器10−カードリーダライタ20間の通信が行われる。尚、上位機器10−カードリーダライタ20間の通信は上記の通りリーダライタコマンドによる通信であるが、カードリーダライタ20−非接触ICカード3間の通信はカードコマンドによる通信である。これらについては後に説明する。
ここで、非接触ICカード3との通信手順は、上記従来の特許文献1等に記載の様に、まず相互認証処理を行い、相互認証成功した場合にはカードアクセス処理(カード情報のリードライト等)を行う。相互認証処理は予め登録される所定のカードアクセス鍵を用いて行われる。相互認証成功後のリードライト処理等は相互認証処理の都度生成されるセッション鍵を用いて行われる。
ここで、本手法では、上記カードアクセス鍵をカードリーダライタ20が保持することはない。すなわち、カードリーダライタ20に予めカードアクセス鍵が登録されることは無いし、必要なときに上位機器10がカードアクセス鍵をカードリーダライタ20に渡すようなこともない。
本手法では、カードアクセス鍵は上位機器10に登録される。これより、上位機器10は、カードアクセス鍵の漏洩を防止するために、耐タンパ筐体によって保護されている。耐タンパ筐体は、図示しないが、例えば筐体の不正開封検知センサ等を有するものである。更に、鍵情報が格納されるメモリである上記鍵情報格納用セキュアメモリ14は、メモリチップ自身に耐タンパ機能が付与されているセキュアメモリ(耐タンパメモリ)を使用している。つまり、強固なセキュリティ対策を施してある。尚、強固なセキュリティ対策の方法として、必ず耐タンパ筐体と耐タンパメモリの両方を用いなければならないというわけではなく、どちらか一方のみであってもよい。
また、尚、図示していないが、耐タンパ筐体に付与されている筐体の不正開封検知センサからの警報を受信すると、鍵情報格納用セキュアメモリ14に記憶される鍵情報(特にカードアクセス鍵)を消去する機能も装備していることが望ましい。
一方、カードリーダライタ20に関しては、上記の通りカードアクセス鍵が予め登録される訳ではないし、非接触ICカード3との通信のときだけ上位機器10からカードアクセス鍵を渡されて一時的に保持するようなことも無い。つまり、カードリーダライタ20にカードアクセス鍵が保持されることは一切無い。よって、カードリーダライタ20からカードアクセス鍵が漏洩することはあり得ない。また、上位機器10のような鍵情報漏洩に対する強固なセキュリティ対策(上記耐タンパ筐体や不正開封検知センサや耐タンパメモリ)を施す必要もない。
但し、カードリーダライタ20に関しては、セッション鍵を一時的に記憶したり、場合によっては上位機器10との間の通信の暗号化を行なうための上位機器10との相互認証用の鍵が登録される場合があるため、図示していないが必要充分な情報漏洩対策は施される場合が一般的である(筐体による回路基板に対する解析防止、情報の暗号化保存、バスのスクランブル処理等)。しかし、カードリーダライタ20には、上記耐タンパ筐体や耐タンパメモリのような強固なセキュリティ対策を施すことまでは必要ない。
上記の通り、カードアクセス鍵は上位機器10が保持し、たとえ一時的であってもカードリーダライタ20が保持することはない。これより、本手法では、任意の1つの非接触ICカード3との一連の通信処理(セッション)において、カードアクセス鍵を用いる必要がある処理、すなわち上記相互認証処理に関しては、上位機器10が行う。但し、上位機器10は、非接触ICカード3と直接通信を行うことはできないので、カードリーダライタ20を介して行う。カードリーダライタ20は、相互認証処理の際に上位機器10−非接触ICカード3間で送受信するパケットを、中継する処理機能部(不図示)を備える。
一方、相互認証成功後のICカード3のデータ・リード/ライト処理等に関しては、上位機器10が、上記相互認証処理過程で得た特定情報(ここでは2つの乱数(乱数情報);但し特定情報は乱数に限らない。従来よりセッション鍵生成に用いることができた情報であれば何でもよい)をカードリーダライタ20に渡すことで、カードリーダライタ20がこの特定情報に基づいてセッション鍵を生成し、このセッション鍵を用いた暗号化通信により行う。尚、ICカード側も同じセッション鍵を生成できる。
尚、上記上位機器10のプログラムメモリ12には、ICカード3との上記相互認証処理や上記乱数情報をカードリーダライタ20に渡す処理等をCPU11により実行させる為のアプリケーションプログラムが記憶されている。また、上記カードリーダライタ20のプログラムメモリ22には、上記乱数情報に基づくセッション鍵生成処理や、セッション鍵を用いるカードアクセス処理(データ・リード/ライト処理等)や、ポーリング処理や、相互認証時の上位機器10−ICカード3間の通信を中継する処理(パケット中継・転送処理)を、CPU11により実行させる為のアプリケーションプログラムが記憶されている。
このように、本提案手法では、上位機器10は、カードアクセス鍵を保持すると共に、このカードアクセス鍵をカードリーダライタ20に引き渡すことなく、カードアクセス鍵を用いた暗号化通信によりICカード(本例では非接触ICカード3)との相互認証処理を行う。また、この相互認証成功後の当該セッションにおける当該ICカードとの間の通信(カードアクセス処理の為の通信)は、セッション鍵を用いた暗号化通信により行われる。
ここで、セッション鍵は、各セッション毎にそのセッションに限定して、ICカードとカード利用機器の両方で一時的に生成される通信用秘匿鍵であり、それ故、ICカードとカード利用機器の組合せが異なる場合には利用出来ないし、同じICカードとカード利用機器間の通信であっても、セッションが中断した場合には、次回以降のセッションでは再利用出来ない鍵である。
このため、カードリーダライタ20のセキュリティ性能が、強固なセキュリティ対策を施した場合に比べて劣っていることによってセッション鍵が漏洩したとしても、これは当該セッション終了後は利用する価値のない鍵情報となる。最悪、当該セッションを中断することなく、カードアクセスを不正に引き継ぐことが可能であったとしても、当該セッションで使用されている1枚のICカードに対してのみ、行われる不正となるため、鍵情報漏洩によるカードシステム全体(ICカードシステムの意味ではなく、例えば管理サーバ2が管理するシステム全体)のセキュリティ崩壊と言った事態は回避することが可能となる。
更に、ICカードを捕捉するためのポーリング処理や、セッション鍵の生成処理や、ICカードに対する実際のカードアクセス処理(リード/ライト処理等)は、カードリーダライタ20が代行するため、上位機器10側のプログラム処理の負荷増加分は抑えることが可能となる。
尚、上記“カード利用機器”とは、ここでは「上位機器10+カードリーダライタ20」である。
また、本方式の場合、ICカードとの相互認証処理の為のプログラムをカードリーダライタ20に搭載する必要が無いため、カードリーダライタ20が盗難等で解析された場合にカード認証のアルゴリズムが漏洩することも防止可能である。あるいは、複数のカード規格毎に異なる認証手順・認証時の暗号仕様をサポートする必要がある場合でも、カードリーダライタ20に多くの対応機能を搭載する必要がない。
更に、本手法では、カードリーダライタ20が、ICカード3−上位機器10間の相互認証処理過程で得られる特定情報(上記乱数情報等;例えば後述する乱数RndAと乱数RndB)に基づいてセッション鍵を生成して、上記カードアクセス処理(リード/ライト処理等)はこのセッション鍵を用いた暗号化通信により行う。もし、上位機器10がセッション鍵を生成してカードリーダライタ20に渡すようにすると、上位機器10−カードリーダライタ20間の通信路からセッション鍵が漏洩する可能性がある。これに対して、本手法では、上位機器10が上記特定情報をカードリーダライタ20に渡し、カードリーダライタ20がこの特定情報に基づいてセッション鍵を生成するので、上位機器10−カードリーダライタ20間の通信路からセッション鍵が漏洩するリスクを回避できる。
一般的に相互認証によるカードと利用機器間の相互認証処理については、多少時間が掛かっても安全性を重視した複雑な暗号方式等が採用されるが、生成されたセッション鍵によるその後のカードアクセスのための通信の暗号化は、比較的軽い処理により時間短縮することが要求されている。特に非接触ICカードの場合には、通信の処理時間がカード利用者の利便性に関わるため、ICカードがカードリーダライタ20と通信可能な距離に存在する間だけの、短時間のセッション中の通信に限定されると共に、セッション鍵による暗号化処理については処理時間の短縮が重要視される傾向にある。
すなわちカードアクセス鍵とそれを使った認証処理のプロセスは、多数のカードとの認証を行なうための重要な情報であるために、そのセキュリティ対策が重要視されるが、生成されたセッション鍵とそれを用いたセッション中に限定した暗号化通信は、利便性にも配慮した取り扱いが求められる。
本手法によれば、まず、カードアクセス鍵がカードリーダライタから漏洩することを防止することができる。更に、カードリーダライタに対して耐タンパ筐体、耐タンパメモリ等の強固なセキュリティ対策を施す必要がなく、コスト削減効果も得られる。更に、認証処理後のカードアクセス処理に関しては、当該カードアクセス処理に用いられるセッション鍵の生成に必要な特定情報(乱数情報等)をカードリーダライタに渡して、カードリーダライタによってセッション鍵の生成とカードアクセス処理を実行させるので、カードリーダライタによる中継処理は必要ない為に短時間での処理が可能となりカード利用者の利便性を損なうことがなく、且つ上位機器の処理負荷を軽減させることが可能となり、更に上位機器−カードリーダライタ間の通信路からセッション鍵が漏洩するリスクを回避できる。
以下、図2以降を参照して更に詳細に説明する。
図2は、カード利用機器−ICカード間の概略的な通信シーケンス例である。
尚、図2に示す概略的なシーケンス自体は、従来技術と略同様であってよい。また、後述する図3に示す相互認証処理の処理内容自体も、従来技術と略同様であってよい(但し、上記の通り、相互認証処理は、従来ではカードリーダライタ20が実行したが、本手法では上位機器10が実行する)。
また、上記の通り、“カード利用機器”とは、ここでは「上位機器10+カードリーダライタ20」であるが、物理的にICカードとの通信を行うのはカードリーダライタ20である。また、尚、本例では、図1に示すように、ICカードとして非接触ICカード3を例に示しており、それ故、カードリーダライタ20は非接触ICカードリーダライタであることになるが、この例に限るものではなく、例えば接触型のICカードに係るICカードシステムに関しても本手法は適用可能である。但し、ここでは、非接触ICカード3に係るICカードシステムを例にして説明するものとする。尚、以下の説明では、非接触ICカード3を単にICカード3等という場合もある。
また、「非接触ICカード」は、カード型の形態に限らず、例えばICタグやリストバンド等の形態であってもよく、あるいはICカード機能内蔵の携帯電話等の形態であってもよく、よってここでは「非接触ICカード」という言葉は、これら各種形態を含むものであるものとする。そして、上記の通り、「ICカード」とは、上記「非接触ICカード」に限らず、接触型ICカードも含まれる意味である。
図2に示すように、カード利用機器は、定期的にカード捕捉コマンドを発しており、これに対する応答(カード捕捉応答)がICカード3から返って来ることでカードの存在を確認する。このカード捕捉コマンド、カード捕捉応答は、平文通信であってよく、特に暗号化等は必要ない。
カード利用機器は、カード捕捉応答を受信すると、予め決められて登録されているカードアクセス鍵を使って相互認証処理を実施する。この相互認証処理に係るカード利用機器−ICカード3間の通信は、図示の通り、カード利用機器は、まず、第一相互認証コマンドを送信して、これに対するICカード3からの第一相互認証応答を受信すると、続いて、第二相互認証コマンドを送信して、これに対するICカード3からの第二相互認証応答を受信する。
上記相互認証処理は、カード利用機器、ICカード3の双方で生成した乱数を、カードアクセス鍵によって暗号化して交換することで、双方で有するカードアクセス鍵が一致していることを確認することで、互いに正当な接続相手であることを確認するものであり、その詳細な処理例は上記特許文献1等に記載されており、後に図3を参照して説明するものとする。そして、認証OKである場合には、カード利用機器、ICカード3の各々で、上記交換した乱数に基づいて以降の通信を秘匿暗号化するためのセッション鍵を生成する。(尚、カード利用機器側では、上位機器10がカードリーダライタ20に上記生成/交換した乱数情報(2つの乱数)を渡して、カードリーダライタ20においてセッション鍵を生成させる)。これより、認証成功後のカードデータアクセスの為のコマンド/応答(図示のカードアクセスコマンド、カードアクセス応答)は、このセッション鍵によって暗号化されて送受される。
図3は、上記相互認証処理の一例を示す図である。ここでは、上記の通り、上記特許文献1等に記載の処理例を示している。
図示の処理は、概略的には、カード利用機器側で任意に生成された乱数RndAと、ICカード3側で任意に生成された乱数RndBが、カード利用機器、カード双方で有するカードアクセス鍵Ka、Kbによって暗号化されて交換されるものである。双方で有するカードアクセス鍵Ka、Kbが同じであれば、自身の生成した乱数が相手より戻ってくることから、互いに相手が有するカードアクセス鍵が自身の有するカードアクセス鍵と同じであることを確認し、カードアクセス鍵が同じであることから互いに正当な通信相手であると判断する。
詳細には、まず、カード利用機器は乱数RndAを生成し(ステップS1)、このRndAを自己のカードアクセス鍵Kbによって暗号化して暗号化データ〔RndA〕Kbを生成し(ステップS2)、この〔RndA〕Kbを含む上記第一相互認証コマンドを生成して送信する(ステップS3)。
この第一相互認証コマンドを受信したICカード3は、上記〔RndA〕Kbを自己のカードアクセス鍵Kbで復号化することでRndAを得て(ステップS21)、このRndAをメモリ等に記憶すると共に(ステップS22)、このRndAを自己のカードアクセス鍵Kaで暗号化して暗号化データ〔RndA〕Kaを生成する(ステップS23)。更に、任意の乱数RndBを生成して(ステップS24)、このRndBを自己のカードアクセス鍵Kaで暗号化して暗号化データ〔RndB〕Kaを生成する(ステップS25)。そして、これら生成した〔RndA〕Ka及び〔RndB〕Kaを含む上記第一相互認証応答を生成して送信する(ステップS26)。
カード利用機器は、上記第一相互認証応答を受信すると、まず、その〔RndA〕Kaを自己のカードアクセス鍵Kaで復号化して(ステップS4)、この復号化データを上記ステップS1で生成した(記憶しておく)RndAと比較して、一致するか否かを判定する(ステップS5)。もし不一致であれば認証失敗として本処理を終了する。一致する場合には、続いて、上記第一相互認証応答の〔RndB〕Kaを自己のカードアクセス鍵Kaで復号化してRndBを得て(ステップS6)、このRndBを自己のメモリ等に記憶すると共に(ステップS7)、このRndBを自己のカードアクセス鍵Kbによって暗号化して暗号化データ〔RndB〕Kbを生成し(ステップS8)、この〔RndB〕Kbを含む上記第二相互認証コマンドを生成して送信する(ステップS9)。
この第二相互認証コマンドを受信したICカード3は、その〔RndB〕Kbを自己のカードアクセス鍵Kbで復号化して復号化データを得て(ステップS27)、この復号化データを上記ステップS24で生成した(記憶しておく)RndBと比較して一致するか否かを判定する(ステップS28)。もし、不一致であれば、上記第二相互認証応答として相互認証NG応答を送信し(不図示)、本処理は終了する。一致する場合には、上記第二相互認証応答として相互認証完了(OK)応答を送信すると共に(ステップS29)、上記ステップS22で記憶したRndAと上記ステップS24で生成した(記憶しておく)RndBとからセッション鍵Ksを生成する(ステップS30)。
また、カード利用機器側でも同様にして、上記相互認証完了応答を受信すると、認証成功したものとして、ステップS1で生成した(記憶しておく)RndAとステップS7で記憶した(記憶しておく)RndBとからセッション鍵Ksを生成する(ステップS10)。但し、本例では、上記の通り、上位機器10が上記生成/交換した2つの乱数(生成した乱数RndA、ICカードから得た乱数RndB)をカードリーダライタ20に渡し、カードリーダライタ20においてこれら2つの乱数RndA、RndBに基づいてセッション鍵Ksを生成する。
尚、セッション鍵Ksの生成方法は何でもよいが、カード利用機器側で生成するセッション鍵KsとICカード3側で生成するセッション鍵Ksとが同じとなるようにする(例えば単純にKs=RndA+RndB等とする)。
この様に、カード利用機器とICカード3の両方で、認証処理の際に交換された乱数RndA、RndBよりセッション鍵Ksを生成し、以降の通信はセッション鍵Ksによって暗号化することで秘匿化して行われる。
すなわち、以降、当該セッションの期間内は、上記ステップS10、S30で生成したセッション鍵Ksを用いて暗号化通信を行う。すなわち、カード利用機器側では、上記カードアクセスコマンドを上記ステップS10で生成したセッション鍵Ksで暗号化して送信する。このコマンドを受信したICカード3は、上記ステップS30で生成したセッション鍵Ksを用いて復号化する。同様に、上記カードアクセス応答は自己のセッション鍵Ksを用いて暗号化して送信し、カード利用機器は自己のセッション鍵Ksを用いてこの応答を復号化する。
このようにセッション鍵は、カード利用機器とICカード間で相互認証を行なう毎に生成されるため、相互認証を行なう毎に異なる鍵が生成されることから、セッション鍵は、カード利用機器とICカード間で相互認証が完了してから、ICカード3がカードリーダライタ20と通信可能な範囲から外れて動作を停止するまでの間に限定して有効な鍵情報である。
よって、各ICカードと通信する毎に異なるセッション鍵によって暗号化が行なわれるため、セッション鍵を不正取得することにより可能となる不正操作は、漏洩した鍵が使用される当該セッションの期間内(1つのICカードとの通信)に限られることになる。一方、カードアクセス鍵は一般的には同種の全てのICカードに共通であり、カードアクセス鍵が不正に取得された場合、当該ICカードと同種の他のICカードに対しても不正操作が行われる可能性がある(重大な不正操作が行われる可能性がある)。
このため、セッション鍵はカードアクセス鍵と比較して、漏洩に対するリスクが少ないことになる。本手法では、セッション鍵はそのセッションの期間(認証成功後の通信の期間)カードリーダライタ20内に保持されるが、カードアクセス鍵はカードリーダライタ20には一切保持させないことで、カードリーダライタ20に対しては上位機器10のような鍵情報漏洩に対する強固な対策(耐タンパ等)を施さなくても、上記の重大な不正操作に対してはこれを防止することができる。
図4は、本手法による上位機器−カードリーダライタ−ICカード間の通信シーケンス例である。
尚、特に図示及び説明を行わないが、図示の通信シーケンスが実行される前段の処理として、上位機器10−カードリーダライタ20間において相互認証が行われ、以降のリーダライタコマンド通信(上位機器10−カードリーダライタ20間の通信)は暗号化されて行われる場合もある。
また、尚、通信シーケンス例、パケット構成例においては、ACK/NACKパケットについては言及していないが、通信仕様に準拠して付与されるケースと不要なケースがあるが、本発明においては、これは特に関係ないものであり、どちらであっても構わないし、特に説明しないものとする。
また、尚、上位機器10−カードリーダライタ20間の通信はリーダライタコマンドによって行われ、カードリーダライタ20−ICカード間の通信はカードコマンドによって行われる。カードコマンドのパケット構成例は図5(a)に示し、リーダライタコマンドのパケット構成例は図6(a)に示す。これらについては、後に説明する。
図4において、まずカード捕捉に関する通信処理は従来と同様であってよい。
すなわち、上位機器10は、ICカードとの通信を開始する際に、カードリーダライタ20に対して上記リーダライタコマンドによるカード捕捉コマンドを送信する。カードリーダライタ20は、このカード捕捉コマンドを受信すると、上記カードコマンドによるカード捕捉コマンドを継続的に送信する。
ICカードが非接触ICカード3の場合、カードリーダライタ20による通信可能範囲にICカード3が入ると、上記カードコマンドによるカード捕捉コマンドを受信したICカード3は、カードコマンドによるカード捕捉応答をカードリーダライタ20に返信する。ICカード3からのカード捕捉応答を受信したカードリーダライタ20は、上位機器10に対して、リーダライタコマンドによるカード捕捉応答を送信する。
尚、本例では、上位機器10からのカード捕捉コマンド(リーダライタコマンド)を受信したカードリーダライタ20は、カード捕捉コマンド(カードコマンド)を、ICカード3からの応答が返って来るまで複数回送信し続けているが、1回のリーダライタコマンド受信に対して、カードコマンドを1回のみ発行する場合もある。このような、1つのリーダライタコマンドに対して、対応するカードコマンドを1回のみ送信する処理や、複数回あるいは複数種のコマンドを組合わせて送信するような処理は、カードリーダライタに搭載される機能に依存するが、本発明の本質には影響しない。
尚、これ以降の説明では、上記のような「リーダライタコマンドによる」、「カードコマンドによる」等の説明は逐一述べないが、上述したように、上位機器10−カードリーダライタ20間の通信は全てリーダライタコマンドで行われ、カードリーダライタ20−ICカード間の通信は全てカードコマンドで行われる。
カードの捕捉に成功した上位機器10は、捕捉したICカード3との相互認証処理を、カードリーダライタ20を介して行う。上位機器10は自身が保持しているカードアクセス鍵を使用して、図3で示した例のような手順で、ICカード3との間で相互認証処理を実施する。
その際、上位機器10とICカード3の間にはカードリーダライタ20が存在しているが、例えば上位機器10からの相互認証コマンドに対してカードリーダライタ20は、リーダライタコマンドからカードコマンドへの変換とパラメータ部(特に暗号化データ;例えば上記〔RndB〕Kb等)の中継は行うが、このパラメータ部自体には関与せずに(変換などしないで)そのままICカード3に引き渡す動作を実行する。ICカード3からの相互認証応答受信時も同様にして、カードリーダライタ20は、カードコマンドからリーダライタコマンドへの変換とパラメータ部の中継は行うが、このパラメータ部自体には関与せずにそのまま上位機器10に引き渡す動作を実行する。これらについては、後に詳細に説明する。
このような動作を行うことで、カードリーダライタ20がカードアクセス鍵を保持していなくても、上位機器10−ICカード3間での相互認証処理を実行することが可能となる。そして特に、カードアクセス鍵がカードリーダライタ20に渡されることなく、カードアクセス鍵で暗号化された乱数だけがカードリーダライタ20を介してICカード3と上位機器10間で交換されるため、カードリーダライタ20からカードアクセス鍵が漏洩するリスクが無くなる。
尚、既に図3で説明しているが、上記「上位機器10からの相互認証コマンド」は、図4に示す第一相互認証コマンドと第二相互認証コマンドであり、これら各コマンドに応じてICカード3は図示の第一相互認証応答、第二相互認証応答を返信するものである。
一般的に、非接触ICカードに電子マネー等の価値情報を記憶させて決済処理に利用する場合、ICカード利用者が自己のICカードをカードリーダライタ20に翳す(タッチする)ことで決済処理が行われる為、カードリーダライタ20はレジ横等の顧客の手が届き易い場所に置かれている場合が多い。更に、カードリーダライタ20は、通常、少なくとも上位機器10に比べると非常に小型である。一方、上位機器10は、具体例は例えばPOSレジ端末であり、カードリーダライタ20と比べると大型の機器であり、また金銭を保管する機能を有するため、盗難に対する対策が施されていることが一般的である。また、上記カードリーダライタ20のようにICカード利用者に操作させる必要はないので、ICカード利用者の目に触れない場所に設置することが可能である。このように、カードリーダライタ20は、上位機器10に比べて盗まれ易い状況にある。
従来では、上位機器10とカードリーダライタ20の両方に対しても耐タンパ筐体や耐タンパメモリ等による強固なセキュリティ対策を施していたが、カードリーダライタ20が盗まれた場合、カードリーダライタ20からカードアクセス鍵が漏洩する可能性があった(内部に保持されているので、可能性は0ではない)。一方、本手法では、カードリーダライタ20が(たとえ一時的であっても)カードアクセス鍵を保持することは無いので、たとえカードリーダライタ20が盗まれても、カードリーダライタ20からカードアクセス鍵が漏洩する可能性はない。更に、本手法ではカードリーダライタ20に対して上記の強固なセキュリティ対策を施す必要はないので、カードリーダライタ20に関するコスト削減効果も得られる。
尚、図1に示す構成例では、1台の上位機器10に対して1台のカードリーダライタ20が接続されているが(1対1の関係)、この例に限るものではなく、1台の上位機器10に対して複数台のカードリーダライタ20が接続された構成であってもよい(1対多の関係)。この様な構成の場合には、従来であれば複数台のカードリーダライタ20全てに対してそれぞれに強固なセキュリティ対策を施す必要があったが、本手法では必要ないので、上記コスト削減効果が更に顕著なものとなる。さらに、相互認証後のセッション鍵の生成やカードアクセス処理はカードリーダライタ20で実行させるため、1台の上位機器10で複数のカードリーダライタ20を制御する場合であっても、上位機器10の処理負荷を軽減させる効果が顕著である。
尚、上位機器10に関しては、カードアクセス鍵のバージョンアップや期限切れ等の為に管理サーバ2がネットワーク1を介して新たなカードアクセス鍵を上位機器10に配信してくる場合がある。この為、従来のようにカードアクセス鍵をカードリーダライタが保持する構成であっても、上位機器に上記配信時にカードアクセス鍵が存在することになる等の理由により、上位機器に対して耐タンパ筐体や耐タンパメモリ等による強固なセキュリティ対策を施していた。
この様に、従来では、上位機器とカードリーダライタの両方に強固なセキュリティ対策を施す必要があったが、本手法によればカードリーダライタに対してはこの様な対策は必要なくなる。
図4の説明を続ける。
上位機器10は、上述した動作によりICカード3との相互認証処理を行い、相互認証に成功すると(ケース1とする)、あるいはその前に(ケース2とする)、相互認証処理において得られた乱数(上記RndA、RndB)を、カードリーダライタ20へ送信する。これより、カードリーダライタ20が、これら2つの乱数に基づいて、上記セッション鍵Ksを生成する。
すなわち、上記ケース1の場合、上位機器10は、相互認証に成功すると、この相互認証処理において得られた2つ乱数(上記RndA、RndB)を、図4に示す交換乱数セットコマンドに含めて、カードリーダライタ20へ送信する。これを受信したカードリーダライタ20は、この乱数を正常受信したことを通知する為の交換乱数セット応答を返信する。更に、カードリーダライタ20は、受信した2つの乱数に基づいてセッション鍵Ksを生成して記憶する。
一方、上記ケース2の方法を用いる場合には、上記交換乱数セットコマンド/応答の送受信は行わない。代わりに、第二相互認証コマンドに2つ乱数(上記RndA、RndB)を含めて送信する。すなわち、ケース2の場合、相互認証処理の途中の第二相互認証コマンド送信の段階で、上位機器10は2つ乱数(RndA、RndB)をカードリーダライタ20に渡す。この場合、未だ、相互認証成功が確定しているわけではないが、相互認証が成功することを前提として見込みで、乱数情報(ここでは2つ乱数(RndA、RndB))をカードリーダライタ20に引き渡す。
カードリーダライタ20は、例えば、この2つ乱数(RndA、RndB)を記憶しておき、上記ケース1と同様に認証成功した段階で、この2つ乱数(RndA、RndB)に基づいてセッション鍵Ksを生成する。よって、この例では、もし相互認証が失敗した場合には(第二相互認証コマンドに対してICカード3が認証成功の応答を返さなかった場合等)、カードリーダライタ20に引渡された乱数は無効となり、セッション鍵Ksの生成処理は実行されない。勿論、この例に限らず、上記機器10から乱数情報を引き渡された時点でセッション鍵Ksを生成してもよく、この場合には相互認証失敗した時点で生成済みのセッション鍵を破棄する。何れにしても、セッション鍵Ksの生成処理は、上記機器10から乱数情報を引き渡された後になる。
基本的には、上記機器10から乱数情報を引き渡された直後にセッション鍵生成処理を行い、その後の上位機器10からのカードアクセスコマンドに迅速に対応してICカード3との通信(データリードライト処理等)を開始できるようにする。但し、応答性を考慮しなければ(あるいは、相互認証失敗時にはセッション鍵生成処理は必要ないことを考慮すれば)、後から(例えばカードアクセスコマンド受信後に)セッション鍵Ksを生成するようにしてもよい。何れにしても、これらセッション鍵生成タイミングについては、本発明の本質には影響しない。
上記ケース1、ケース2の何れかの方法でカードリーダライタ20に2つ乱数(RndA、RndB)を渡し、相互認証成功により正当なカードであることを確認した上位機器10は、ICカード3からのデータリード、ICカード3へのデータライト等のカードアクセス処理を、カードリーダライタ20で実行させるために、図4に示すカードアクセスコマンド(リードコマンドやライトコマンド等)を、カードリーダライタ20へ送信する。
上記カードアクセスコマンドを受信したカードリーダライタ20は、上記何れかの方法で上位機器10より入手した2つ乱数(RndA、RndB)に基づいて生成したセッション鍵Ksによって、ICカード3へのカードアクセスコマンドを暗号化する。ここで、相互認証成功した場合、ICカード3側においても上記カードリーダライタ20と同様に上記乱数(上記RndA、RndB)に基づくセッション鍵Ksの生成を行える。これより、上記カードアクセスコマンドを受信したICカード3は、これを自己のセッション鍵Ksを用いて復号化する。そして、このカードアクセスコマンドに応じた処理を実行し(指定された領域からのデータ読出し、あるいは指定された領域へのデータ書き込み等)、この処理結果に基づき、更に自己のセッション鍵Ksを用いて、暗号化されたカードアクセス応答を生成して送信する。これを受信したカードリーダライタ20は、このカードアクセス応答を自己のセッション鍵Ksを用いて復号化する。
上述したように、カードリーダライタ20は、ICカード3からのデータ・リード、あるいはICカード3へのデータ・ライト等のカードアクセス処理を、上位機器10からの指示に従って、セッション鍵Ksを用いた暗号化通信により実行する。
尚、図4に示す例では、カードリーダライタ20は、上位機器10からの1つのリーダライタコマンドに対して1つのカードコマンドを生成して送信するが、この例に限らない。例えば、カードリーダライタ20に、予め1つのリーダライタコマンドに対して複数種類のカードコマンドを登録しておくことで、カードリーダライタ20が、受信したリーダライタコマンドに対応する複数種類のカードコマンドを、順次、ICカード3に送信する構成としてもよい。
上記構成の場合、例えば、図4に示す上位機器10が送信するカードアクセスコマンドは、上述したリードコマンドまたはライトコマンドを意味するものではなく、文字通りの“カードアクセスコマンド”を意味するものであるとし、これを受信したカードリーダライタ20は、不図示のリードコマンド送信とその応答受信、ライトコマンド送信とその応答の受信を、連続的に実行する等の処理が考えられる。
図5(a)は上記“カードコマンド”のパケット構成例である。つまり、カードリーダライタ20−ICカード3間の通信に用いられるパケットの構成例である。尚、この構成例に限定されるものではなく、通常は使用するICカードの通信規格に準拠した構成となる。
図5(a)に示すカードコマンドパケット30は、通信データの通信タイミングの同期を取るためのプリアンブル部31、パケットの先頭部を検出するための同期コード部32、カードコマンドのデータ量を示すデータ長33、実際にカードリーダライタ20−ICカード3間で交換する各種コマンドデータ/応答データが格納されているカードコマンド部34、通信途中でパケットデータがノイズ等で変化しなかったかを確認するためのチェックコード35、通信の最後に付与されるポストアンブル部36等から構成されている。
図4に示すカードリーダライタ20−ICカード3間で送受信される各種コマンド/応答は、上記カードコマンドパケット30において上記カードコマンド部34に格納されるコマンドデータ/応答データとして、図5(b)〜(i)に示す各種コマンドデータ/応答データの何れかが格納されたものである。
例えば、図4に示すカードリーダライタ20がICカード3へ送信する「カード捕捉コマンド」は、上記カードコマンドパケット30において上記カードコマンド部34に図5(b)に示すカード捕捉コマンド40が格納されたものである。他の各種コマンド/応答についても同様であり、以下の図5(c)〜(i)の説明の際に説明するが、逐一説明しないが何れもカードリーダライタ20−ICカード3間の通信におけるコマンド/応答である。
以下、図5(b)〜(i)に示す各種コマンドデータ/応答データの構成例について説明する。尚、これらの構成例は一例であり、この例に限るものではない。
まず、図5(b)に示すカード捕捉コマンド40は、コマンド種別を示すコマンドコード(ここではカード捕捉コマンド・コマンドコード41)と、捕捉するICカード3の属性種別等を指定するためのパラメータであるコマンドパラメータ42等から構成されている。
コマンドパラメータ42は、例えば、捕捉したいカード種別を事前に指定することで、初めから応答させるICカード3を絞り込むために指定するパラメータとなる。尚、非接触ICカードを対象とした場合には、本パラメータ以外に、複数のICカードからの一斉応答に対応するための応答タイムスロット数の指定等が含まれる場合があるが、本発明の本質には影響しないため、詳細説明は割愛する。
上記カード捕捉コマンドに対するICカード3からの応答である、図4に示すカード捕捉応答は、上記カードコマンドパケット30において上記カードコマンド部34に図5(c)に示すカード捕捉応答50が格納されたものである。
図5(c)に示すカード捕捉応答50は、カード捕捉応答であることを示す応答コード(カード捕捉コマンド応答コード51)、カードID52で構成されている。カードIDは予め各ICカード3毎に一意に設定・記憶されている識別コードであり、上記カードID52は当該カード捕捉応答50のパケットの送信元のICカード3自身のカードIDである。カードID52は、カード捕捉コマンドに応答するICカード3が自身を識別させるために付与するものであり、上位機器10がICカード3との相互認証時に相互認証する対象となるICカード3を指定するための識別情報となる(例えばこのカードID52を後述する認証先カードID62とする)。
図4に示す第一相互認証コマンドは、上記カードコマンドパケット30において上記カードコマンド部34に図5(d)に示す第一相互認証コマンド60が格納されたものである。
図5(d)に示す第一相互認証コマンド60は、コマンド種別を示すコマンドコード(ここでは第一相互認証コマンド・コマンドコード61)、相互認証するICカード3を指定するための認証先カードID62、ICカード3と認証する際の条件を示す認証用条件情報63、認証用暗号化データA64(図3の例では上記〔RndA〕Kb(乱数RndAをカードアクセス鍵Kbで暗号化したデータ))から構成されている。
上記認証用条件情報63とは、ICカード3と相互認証する際に当該ICカード3の如何なる情報に対して認証を取るかを指定するためのパラメータであり、例えばカード内のどのサービスブロックをアクセスするための認証を実施するかを、指定するためのデータとなる。
図4に示す第一相互認証応答は、上記カードコマンドパケット30において上記カードコマンド部34に図5(e)に示す第一相互認証応答70が格納されたものである。
図5(e)に示す第一相互認証応答70は、第一相互認証コマンドに対する応答であることを示す応答コード(第一相互認証コマンド応答コード71)、認証用暗号化データB72(図3の例の〔RndA〕Ka(乱数RndAをカードアクセス鍵Kaで暗号化したデータ))、及び認証用暗号化データC73(図3の例の〔RndB〕Ka(乱数RndBをカードアクセス鍵Kaで暗号化したデータ))から構成されている。
尚、図示していないが、第一相互認証応答70や後述する第二相互認証応答90にも上記カードID52が含まれていてもよい。同様に、後述する第二相互認証コマンド80にも(図示していないが)上記認証先カードID62が含まれていてもよい。
図4に示す第二相互認証コマンドは、上記カードコマンドパケット30において上記カードコマンド部34に図5(f)に示す第二相互認証コマンド80が格納されたものである。
図5(f)に示す第二相互認証コマンド80は、コマンド種別を示すコマンドコード(ここでは第二相互認証コマンド・コマンドコード81)、認証用暗号化データD82(図3の例の〔RndB〕Kb(乱数RndBをカードアクセス鍵Kbで暗号化したデータ))から構成されている。
図4に示す第二相互認証応答は、上記カードコマンドパケット30において上記カードコマンド部34に図5(g)に示す第二相互認証応答90が格納されたものである。
図5(g)に示す第二相互認証応答90は、第二相互認証コマンドに対する応答であることを示す応答コード(第二相互認証コマンド応答コード91)、ICカード3による認証結果を示す(認証OK/NG等)認証結果データ92等から構成されている。
図4に示すカードアクセスコマンド(ここでは仮にカードリードコマンドであるものとする)は、上記カードコマンドパケット30において上記カードコマンド部34に図5(h)に示すカードアクセスコマンド100が格納されたものである。
図5(h)に示すカードアクセスコマンド100(カードリードコマンド例)は、コマンド種別を示すコマンドコード(カードリードコマンド・コマンドコード101)、読出し対象を指定するためのリード対象部指定情報102等から構成されている。この指定情報102は、ICカード3内のどの情報を読み出したいかを指定するための情報で、例えばカード内のメモリにおける読み出したいブロックのブロック番号等を指定する。尚、コマンドコード以外は一般的にはセッション鍵によって暗号化されて秘匿される。よって、上記リード対象部指定情報102は上記セッション鍵Ksによって暗号化された暗号化データである。
図5(h)に示すカードアクセスコマンド100に対する応答であるカードアクセス応答110の構成例を図5(i)に示す。尚、図示のカードアクセス応答110は上記カードコマンドパケット30において上記カードコマンド部34に格納される。
図5(i)に示すカードアクセス応答110は、上記カードリードコマンドに対する応答であることを示す応答コード(カードリードコマンド・応答コード111)、ICカード3から読み出されたデータであるリードデータ112等から構成されている。尚、カードアクセスコマンドと同様に、応答コード以外はセッション鍵によって暗号化されて秘匿される場合が一般的である。よって、上記リードデータ112は、ICカード3がリードデータを自己のセッション鍵Ksによって暗号化した暗号化データである。
図6(a)は上記“リーダライタコマンド”のパケット構成例である。つまり、カードリーダライタ20−上位機器10間の通信に用いられるパケットの構成例である。尚、この構成例に限定されるものではなく、一般的にはカードリーダライタ20と上位機器10間の通信インタフェースの規格に適したパケット構成が適用される。
図6(a)に示す例のリーダライタコマンドパケット120は、通信データの通信タイミングの同期を取るためのプリアンブル部121、パケットの先頭部を示すスタートコード部122、リーダライタコマンドのデータ量を示すデータ長123、実際に上位機器10とカードリーダライタ20間で交換する各種コマンドデータ/応答データが格納されているリーダライタコマンド部124、通信途中でパケットデータがノイズ等で変化しなかったかを確認するためのチェックコード125、通信の最後に付与されるポストアンブル部126等から構成されている。
ここで、カードリーダライタ20による上記カードコマンドからリーダライタコマンドへの変換は、上記図5(a)に示すパケット構成から上記図6(a)に示すパケット構成への変換である。同様に、カードリーダライタ20による上記リーダライタコマンドからカードコマンドへの変換は、上記図6(a)に示すパケット構成から上記図5(a)に示すパケット構成への変換である。
この変換処理に関しては、カードリーダライタ20はそもそも従来よりICカード3とは上記図5(a)に示すフォーマットのパケットで通信しており、同様に上位機器10とは図6(a)に示すフォーマットのパケットで通信しているので、単に例えばICカード3からの図5(a)のフォーマットのパケットを受信したら、その内容データを図6(a)のフォーマットのパケットにより上位機器10へ送信すればよい。内容データとは、例えば上記データ長33、カードコマンド部34であり、これらをデータ長123、リーダライタコマンド部124として格納すればよい。但し、この例に限定されるものではない。尚、特にカードコマンド部34/リーダライタコマンド部124における上記コマンドコード/応答コード以外の部分を、パラメータ部という場合もある。あるいは、そのなかでも特に暗号化データの部分を、パラメータ部という場合もある。
また、同じコマンド/応答であっても、カードコマンド部34におけるコマンドコード/応答コードと、リーダライタコマンド部124におけるコマンドコード/応答コードが同じであるとは限らないので、この場合にはコマンドコード/応答コードの変換も行う。
例えば、図5(b)、図6(b)に示すカード捕捉コマンド40、130を例にすると、“カードコマンド”においてカード捕捉コマンドを示すコード41は例えば‘01’であり、“リーダライタコマンド”においてカード捕捉コマンドを示すコード131は例えば‘0012’である等というように、同じ「カード捕捉コマンド」であってもコードが異なる場合もあり得る。各種コマンド/応答を示すコードは、予め“カードコマンド”、“リーダライタコマンド”それぞれにおいて決められているので、カードリーダライタ20においてこれらをそれぞれ対応付けて記憶しておくことで(上記の例では、カード捕捉コマンドに関して‘01’と‘0012’を記憶しておく)、上記コマンドコード/応答コードの変換を行うことができる。
図4に示すカードリーダライタ20−上位機器10間で送受信される各種コマンド/応答は、上記リーダライタコマンドパケット120において上記リーダライタコマンド部124に格納されるコマンドデータ/応答データとして、図6(b)〜(g)、図7(a)〜(f)に示す各種コマンドデータ/応答データの何れかが格納されたものである。
例えば、図4に示す上位機器10がカードリーダライタ20へ送信する「カード捕捉コマンド」は、上記リーダライタコマンドパケット120において上記リーダライタコマンド部124に図6(b)に示すカード捕捉コマンド130が格納されたものである。他の各種コマンド/応答についても同様であり、ここでは特に説明しないものとする。また、逐一説明しないが、図6(b)〜(g)、図7(a)〜(f)に示す各種コマンドデータ/応答データは、何れも、カードリーダライタ20−ICカード3間の通信におけるパケット120における各種コマンドデータ/応答データである。
以下、図6(b)〜(g)、図7(a)〜(f)に示す各種コマンドデータ/応答データの構成例について説明する。尚、これらの構成例は一例であり、この例に限るものではない。
まず、図6(b)に示すカード捕捉コマンド130は、コマンド種別を示すコマンドコード(ここではカード捕捉コマンド・コマンドコード131)、捕捉するICカードの属性種別等を指定するためのコマンドパラメータ132等から構成されている。
尚、図示の通り、本構成例では、上述したカードコマンドのカード捕捉コマンド40と同様の構成となっている。これは、他の各種コマンド/応答に関しても同様である。すなわち、カードコマンドと同じコマンド名のリーダライタコマンドについては、カードコマンドと同様な構成を構成例としている。但し、この例に限るものではなく、構成が異なる場合もあってよい(上記のようなコマンドコード/応答コードのみが異なるという意味ではなく、構成自体が異なる意味)。
本例では、上記のことから、図6(b)〜(g)、図7(a)〜(f)に示す各種コマンドデータの構成例について、“カードコマンド”に関して同様の構成がある場合には、既に上記“カードコマンド”に関して説明済みであるので、ここでは詳細に説明することなく簡単に説明するのみとする。
図6(c)に示すカード捕捉応答140は、上記カード捕捉コマンド130に応答するICカード3から返信され、その構成例としては、カード捕捉応答であることを示す応答コード(カード捕捉コマンド応答コード141)、そのICカード自身のカードID142等で構成されている。
図6(d)に示す第一相互認証コマンド150は、コマンド種別を示すコマンドコード(ここでは第一認証コマンド・コマンドコード151)、相互認証するICカードを指定するための認証先カードID152、ICカードと認証するための条件である認証用条件情報153、認証用暗号化データA154(図3の例の〔RndA〕Kb等)から構成されている。
図6(e)に示す第一相互認証応答160は、第一相互認証コマンドに対する応答であることを示す応答コード(第一認証コマンド応答コード161)、認証用暗号化データB162(図3の例の〔RndA〕Ka等)及び認証用暗号化データC163(図3の例の〔RndB〕Ka等)から構成されている。
図6(f)に示す第二相互認証コマンド170は、コマンド種別を示すコマンドコード(ここでは第二認証コマンド・コマンドコード171)、認証用暗号化データD172(図3の例の〔RndB〕Kb等)から構成されている。また、上述したケース2の場合には、更に、図示の乱数情報(RndA、RndB)173も含まれる。
乱数情報(RndA、RndB)173は上記の通り相互認証処理の際に生成/交換されたものである。上位機器10は、自身で生成した乱数RndAとICカード3から取得した乱数RndBとをカードリーダライタ20に引き渡すが、上記の通りケース2の場合には、この処理は相互認証処理完了前に行う為、2つ乱数(RndA、RndB)を第二相互認証コマンド170に付加するものである。
尚、上記ケース1,2の何れの場合でも、セッション鍵はカードリーダライタ20で生成される。よって、例えばセッション鍵を上位機器10で生成してカードリーダライタ20へ送信する方法では、途中でセッション鍵が漏洩する可能性があるが、本手法ではこの様なリスクを回避することができる。
図6(g)に示す第二相互認証応答180は、第二相互認証コマンドに対する応答であることを示す応答コード(第二認証コマンド応答コード181)、ICカード3側での認証結果を示す認証結果データ182(OK/NGに相当するデータ等)から構成されている。
上記第一相互認証コマンド150、第一相互認証応答160、第二相互認証コマンド170、第二相互認証応答180に付与されているパラメータ部(コマンドコード/応答コード部以外の部分(特に暗号化データ))は、カードリーダライタ20のコマンド中継処理によって、上述してあるように基本的には“カードコマンド”のパラメータ部としてそのまま“カードコマンド”に付与されてICカード3へ送信される(同様にICカード3からの“カードコマンド”による応答に付与されているパラメータ部は、“リーダライタコマンド”のパラメータ部にそのまま付与される)。
但し、第二相互認証コマンド170において上記乱数情報(RndA、RndB)173がある場合については、この乱数情報(RndA、RndB)173はカードリーダライタ20が記憶・保管するのであり、ICカード3への“カードコマンド”には付与しない。
一方、上記ケース1の場合には、相互認証中の通信内で乱数(RndA、RndB)をカードリーダライタ20に引き渡すことはないので、第二相互認証コマンド170のパラメータ部に乱数(RndA、RndB)は付与されていない。その代わりに図4で説明した交換乱数セットコマンドによって、乱数(RndA、RndB)が上位機器10からカードリーダライタ20に引き渡される。
図7(a)に交換乱数セットコマンドの構成例を示し、これに対する応答である交換乱数セット応答の構成例を図7(b)に示す。
図7(a)に示す例の交換乱数セットコマンド190は、コマンド種別を示すコマンドコード(ここでは交換乱数セットコマンド・コマンドコード191)、カードリーダライタ20に引き渡すべき乱数情報((RndA、RndB)192)から構成されている。
尚、既に述べた通り、図示の交換乱数セットコマンド190は、上記リーダライタコマンドパケット120のリーダライタコマンド部124に格納されてパケット送受信されるものである(これは後述する図7(b)〜図7(f)の各コマンド/応答についても同様である)。
また、尚、乱数情報(RndA、RndB)192は、乱数(RndA、RndB)が秘匿化(暗号化)されたものであってもよい。これは上記乱数情報(RndA、RndB)173の場合も同様である。この乱数情報の秘匿化は、例えば、上位機器10においてこれら乱数を秘匿化するための暗号化等の処理が追加される。あるいは、既に述べた通り、図4の通信シーケンスが実行される前段の処理として、上位機器10−カードリーダライタ20間において相互認証が行われ、以降のリーダライタコマンド通信が暗号化されるケースもあるので、この暗号化処理で乱数情報も秘匿化するに留めるようにしてもよい。何れにしても、秘匿化処理の有無及びその方式までは特定しない。また、万が一、乱数情報が漏洩しても、セッション鍵が漏洩するわけではない。
図7(b)に示す例の交換乱数セット応答200は、交換乱数セットコマンド190に対する応答であることを示す応答コード(交換乱数セットコマンド応答コード201)、乱数情報の引渡しに成功したか否かを示す、OK/NGに相当する結果データ202等から構成されている。
上記図4に示すリーダライタコマンドとしてのカードアクセスコマンド、カードアクセス応答の構成例を2例、図7(c)〜(f)に示す。すなわち、図7(c),(d)は
カードアクセスコマンド、カードアクセス応答の構成例(その1)であり、図7(e),(f)はカードアクセスコマンド、カードアクセス応答の構成例(その2)である。
まず、図7(c),(d)に示す構成例(その1)について説明する。
この構成例(その1)は、カードアクセスコマンドがICカード3からデータを読み出すためのカードリードコマンドである場合の例である。
図7(c)に示すカードアクセスコマンド(1)210(カードリードコマンド例)は、コマンド種別を示すコマンドコード(ここではカードリードコマンド・コマンドコード211)、読出し対象を指定するための情報であるリード対象部指定情報212等から構成されている。
また、上記コマンド210に対する上位機器10への応答である、図7(c)に示すカードアクセス応答(1)220(カードリードコマンド例)は、上記カードリードコマンド210に対する応答であることを示す応答コード(カードリードコマンド応答コード221、ICカードから読み出されたリードデータ222から構成されている。尚、このリードデータ222は、上記セッション鍵による暗号化データであるリードデータ112を、カードリーダライタ20が自己のセッション鍵によって復号化して得たものである。
次に、図7(e),(f)に示す構成例(その2)について説明する。
この構成例(その2)は、カードリーダライタ20で1つのリーダライタコマンドに対して複数のカードコマンドの処理を行う場合のコマンドとして、カードアクセスコマンドがカードライト&リードコマンドである場合の例である。このカードライト&リードコマンドは、ICカード3におけるこのコマンドにより指定した情報(アドレス等)に対してデータの書き込みを行う処理、書き込み完了後に書き込みを行った部分の読み返しを行う処理、及び読み返したデータを上位機器10に返信させる処理を、カードリーダライタ20に実行させるための処理コマンドである。
図7(e)に示すカードアクセスコマンド(2)230(カードライト&リードコマンド例)は、コマンド種別を示すコマンドコード(ここではカードライト&リードコマンド・コマンドコード231)、書き込み及び読み返しを行うカード内の情報部位(アドレス等)を示すライト&リード対象部指定情報232、書き込むべきデータであるライトデータ233等から構成されている。
また、上記コマンド230に対する上位機器10への応答である、図7(f)に示すカードアクセス応答(2)240(カードライト&リードコマンド例)は、カードライト&リードコマンドに対する応答であることを示す応答コード(カードライト&リードコマンド応答コード241)、ICカードから読み返されたリードデータである読み返しデータ242等から構成されている。
上記コマンド230を受信したカードリーダライタ20は、上記各種処理をそれぞれ実行する為のパケット(“カードコマンド”パケット30)を順次生成してICカード3へ送信する。すなわち、まず、カードライトコマンドに上記指定情報232、ライトデータ233をパラメータとして付与したパケット30を生成・送信し、続けて、カードリードコマンドに上記指定情報232をパラメータとして付与したパケット30を生成・送信することで、書き込んだデータの読み返しを行う。そして、カードリーダライタ20は、ICカード3から返信される読み返しデータ(セッション鍵で暗号化されている)を、自己のセッション鍵で復号化することで、上記読み返しデータ242を取得して、これを上記カードアクセス応答(2)240に付加して上位機器10へ送信する。
尚、これら複数のカードコマンドを実行するリーダライタコマンド例は、本例に限定されるものではなく、各種組合せ及びカードリーダライタ20による判断処理の付加が考えられる。
ここで、図8〜図11に、従来技術における通信シーケンス例やパケット構成例を示すことで、上述した本手法と従来技術との違いについて説明する。
尚、特に図示しないが、従来技術における上位機器、カードリーダライタにはそれぞれ符号4、5を与えるものとし、以下、上位機器4、カードリーダライタ5と記すものとする。尚、ICカード自体は同じであってよいので、ICカード3と記すものとする。
上記の通り、従来では、上位機器4だけでなく、カードリーダライタ5にも、上位機器4と同様の強固なセキュリティ対策(耐タンパ筐体、耐タンパメモリ等)を施している。そして、カードリーダライタ5内の上記耐タンパメモリにカードアクセス鍵が記憶される。これは、予め登録されて記憶される場合と、上位機器4から渡されて一時的に記憶する場合とがある。何れの場合でも、従来では、カードリーダライタ5が、このカードアクセス鍵を用いてICカード3との相互認証処理を実行していた。
図8は、従来例(その1)における通信シーケンス例である。
従来例(その1)は、カードアクセス鍵がカードリーダライタ5に登録されている場合のシーケンス例である。
尚、後述する従来例(その2)は、カードリータライタ5にはカードアクセス鍵は登録されていないが、必要なときに上位装置4からカードアクセス鍵を一時的に引渡す場合の例である。
従来例(その1)の通信シーケンスでは、図8に示すように、まず、カード捕捉時に関しては図4に示す本手法と略同様であってよく、ここでは説明しない。
ICカード3との相互認証時には、上位機器4からの相互認証実行指示により、カードリーダライタ5が、上記図3の処理を実行する。すなわち、例えば、カードコマンド、相互認証に必要な乱数生成、暗号化データの生成等を行う。また、ICカード3からの応答内容の判定(その際、暗号化データの復号化も行う)、及びセッション鍵の生成も、カードリーダライタ5が内部処理として実行する。上位機器4に対しては相互認証の結果として成否結果を通知するだけになる。
尚、上記の通り、従来でもカードリーダライタがセッション鍵を生成しているが、これは従来ではカードリーダライタが相互認証処理を行っているので、カードリーダライタが相互認証処理過程で乱数情報を得るので、これを用いてセッション鍵を生成できる。一方、本手法では、カードリーダライタは相互認証処理を行っていないので、上位機器が乱数情報をカードリーダライタに渡すことで、これを用いてセッション鍵を生成できる。
上記相互認証時の処理に関して上位機器4−カードリーダライタ5間あるいはカードリーダライタ5−ICカード3間で送受信するコマンド/応答は、図8に示す例では、まず上位機器4がカードリーダライタ5へ相互認証コマンドを送信する。このコマンドを受信したカードリーダライタ5は、まず、第一相互認証コマンドを生成してICカード3へ送信し、これに対するICカード3からの第一相互認証応答を受信すると、続いて、第二相互認証コマンドを生成してICカード3へ送信し、これに対するICカード3からの第二相互認証応答を受信すると、この応答内容(上記成否結果)を含む相互認証応答を生成して上位機器4へ送信する。
上記相互認証時の処理に関する暗号化データの生成や復号化は、上記の通りカードアクセス鍵はカードリーダライタ5が保持しているので、このカードアクセス鍵を用いて行う。
上記相互認証処理は、例えば上述した図3の処理を行うものであり、従来例(その1)では図3に示すカード利用機器の処理を全てカードリーダライタ5が実行することになる。ICカード3側の処理は図3に示す通りであり、本手法と同様であってよい。
そして、上記相互認証処理の結果、認証成功した場合には、以降のカードアクセスコマンドによるカードアクセス処理に関しては、カードリーダライタ5は自己が生成したセッション鍵を用いて、本手法と同様のシーケンスでカードアクセス処理(カードデータのリード/ライト等)を実行する。
図9(a)は、上記従来例(その1)における、上位機器4−カードリーダライタ5間の通信に用いられるリーダライタコマンドのパケット構成例である。
図示のリーダライタコマンドパケット250は、プリアンブル251、スタートコード252、データ長253、リーダライタコマンド部254、チェックコード255、及びポストアンブル256より成る。この様に、パケット構成自体は、上記図6(a)に示す本手法のリーダライタコマンドパケット120と同じであってよい。尚、特に図示しないが、従来例(その1)におけるカードコマンドパケットも、図5(a)に示す本手法のカードコマンドパケット30と同じであってよい。
ここで、カードコマンドパケットに関しては、そのカードコマンド部34の構成も、本手法と同じであってよい。すなわち、上記図5(b)〜(i)の構成と同じであってよい。
一方、リーダライタコマンドパケット250に関しては、そのリーダライタコマンド部254の構成が、本手法のリーダライタコマンド部124と異なる場合もあるので、これについて図9(b)〜(g)を参照して説明する。
図9(b)〜(g)は、上記リーダライタコマンド部254に格納される各種コマンドデータ/応答データの構成例である。
まず、図9(b)に示すカード捕捉コマンド260はカード捕捉コマンド・コマンドコード261、コマンドパラメータ262から成り、図9(c)に示すカード捕捉応答270はカード捕捉コマンド・応答コード271、カードID272から成る。この様に、カード捕捉に関しては、本手法の上記図6(b)、(c)に示す構成と同様であってよい。
本手法の構成例との差異は、基本的には相互認証コマンドに関する部分となる。
すなわち、本手法ではカードアクセス鍵が上位機器10に登録されており且つカードリーダライタ20に渡すことはないので、ICカード3との相互認証に必要な乱数生成や、生成した乱数に対するカードアクセス鍵による暗号化処理等は、上位機器10で実行されることになり、上位機器10は上記図6(d)〜図6(g)に示すコマンド/応答を含むパケットを送受信することになる。
一方、従来例(その1)の場合には、上記図8の説明で示したように、カードアクセス鍵がカードリーダライタ5に登録されているため、上位機器4はカードリーダライタ5に対して、カードと認証条件を指定して相互認証の開始を指示し、カードリーダライタ5から相互認証成否の結果を受取るだけになる。すなわち、図8で説明した相互認証コマンドを生成・送信して、相互認証応答を受信する。
図9(d)は、上記相互認証コマンドの構成例である。図示の相互認証コマンド280は、コマンド種別を示すコマンドコード(ここでは相互認証コマンド・コマンドコード281)、相互認証対象のICカードを指定するための認証先カードID282、ICカードと認証する際の任意の条件である認証用条件情報283から構成されている。上記のように上位機器4では認証のための暗号化乱数データは生成出来ないため、コマンド280には暗号化乱数データがパラメータとして付与されることはない。
図9(e)に示す相互認証応答290は、相互認証コマンドに対する応答であることを示す応答コード(相互認証コマンド・応答コード291)、認証結果(OK/NG;成否)を示す認証結果データ292から構成されている。
尚、図9(f)、(g)に示すカードアクセスコマンド300(リードコマンド)、カードアクセス応答310の構成例は、上記本手法の図7(c),(d)の構成と同様である。尚、特に図示しないが、ライトコマンドについても同様である。図9(f)に示すカードアクセスコマンド300は、カードリードコマンド・コマンドコード301、リード対象部指定情報302より成る。図9(g)に示すカードアクセス応答310は、カードリードコマンド応答コード311、リードデータ312より成る。
図10は、従来例(その2)における通信シーケンス例である。
ここでは、上記図8の従来例(その1)の通信シーケンスとの違いについてのみ説明する。
上記の通り、従来例(その2)は、カードアクセス鍵が上位機器4に登録されているが、ICカードとの通信を始める前の段階で、カードアクセス鍵をカードリーダライタ5に渡すものである。
すなわち、図10に示すように、上位機器4は、カード捕捉コマンドを送信する前の段階で、自己が保持するカードアクセス鍵を付加したカードアクセス鍵セットコマンドを、カードリーダライタ5へ送信する。このセットコマンドを受信したカードリーダライタ5は、カードアクセス鍵を取得して自己のメモリ(耐タンパメモリ)に記憶し、カードアクセス鍵セット応答を返信する。以降の通信シーケンスは従来例(その1)と同様となる。
図11(a)、(b)に、上記カードアクセス鍵セットコマンド、カードアクセス鍵セット応答の構成例を示す。勿論、これらコマンド/応答は、図9(a)に示すパケットのリーダライタコマンド部254に格納されるものである。尚、他のコマンド/応答に関しては、上記従来例(その1)と同様であり、既に図9(b)〜(g)に示して説明してあるので、ここでは特に図示・説明はしない。
図11(a)に示すカードアクセス鍵セットコマンド320は、コマンド種別を示すコマンドコード(ここではアクセス鍵セットコマンド・コマンドコード321)と、カードリーダライタ5に渡すべきカードアクセス鍵である鍵情報322から成る。尚、鍵情報322の秘匿化に関しては、本手法におけるセッション鍵の秘匿化と同様に、詳細方式については言及しない。
図11(b)に示すカードアクセス鍵セット応答330は、カードアクセス鍵セットコマンドに対する応答であることを示す応答コード(アクセス鍵セットコマンド・応答コード331)、カードアクセス鍵の記憶に成功したか否かを示す、OK/NGに相当する結果データ332から構成されている。
本手法では、カードアクセス鍵をカードリーダライタに渡すことはないので、当然、上記のようなコマンド320、応答330を生成・送受信する処理は必要ない。
以上説明したように、本手法によれば、まず、カードアクセス鍵がカードリーダライタから漏洩することを防止することができる。更に、カードリーダライタに対して耐タンパ筐体、耐タンパメモリ等の強固なセキュリティ対策を施す必要がなく、コスト削減効果も得られる。更に、認証処理後のカードアクセス処理に関しては、当該カードアクセス処理の生成に必要な特定情報(乱数情報等)をカードリーダライタに渡して、カードリーダライタによってセッション鍵の生成とカードアクセス処理を実行させるので、カード利用者の利便性を損なうことなく、且つ上位機器の処理負荷を軽減させることが可能となり、更に上位機器−カードリーダライタ間の通信路からセッション鍵が漏洩するリスクを回避できる。