(57)【特許請求の範囲】
【請求項１】
少なくとも１つのＲＯＭを含む１又は２以上のメモリと、前記ＲＯＭが格納するプログラムにしたがい動作するＣＰＵと、を備えるＩＣカードであって、
前記ＲＯＭは、前記メモリに格納されている情報を暗号化する暗号化プログラムを有し、
前記ＣＰＵは、外部からの命令に基づいて、前記暗号化プログラムを実行し、その結果を外部へ出力するＩＣカードにおいて、
前記暗号化プログラムは、情報を暗号化するデータ暗号化方法のローテーション演算における、データをローテーションするビット数を、外部から指定できること、
前記暗号化プログラムは、暗号化するメモリの範囲が外部から指定され、
前記暗号化するメモリの範囲（長さは２ｎバイトとする）を２バイト毎に区切り、１番目の２バイトデータを指定されたビット数だけ左にローテーションし、前記暗号化するメモリの範囲における前記１番目の２バイトデータと、これに続く２番目の２バイトデータとを排他的論理和し、その演算結果を指定されたビット数だけ左にローテーションして、２番目の２バイトデータまで加算した２バイトデータを得、ｉ＝２から（ｎ−１）まで、ｉ番目（１＜ｉ＜ｎ）の２バイトデータまで加算した２バイトデータと（ｉ＋１）番目の２バイトデータとを排他的論理和し、その演算結果を指定されたビット数だけ左にローテーションして、（ｉ＋１）番目の２バイトデータまで加算して２バイトデータを得る演算を繰り返し、ｎ番目の２バイトデータまで加算して得られた２バイトデータを暗号データにすること、を特徴とするＩＣカード。
【請求項２】
少なくとも１つのＲＯＭを含む１又は２以上のメモリを備えたＩＣカードの、前記メモリに格納されている情報を検査するＩＣカード検査方法であって、
外部からの命令に基づいて前記メモリ内の情報を暗号化し、
前記暗号化により得られた結果を外部へ出力するＩＣカード検査方法において、
外部より前記メモリの範囲を指定され、前記指定された範囲内において、前記メモリに格納されている情報を暗号化すること、
外部より前記暗号化のデータ暗号化方法を指定され、前記指定されたデータ暗号化方法のローテーション演算における、データをローテーションするビット数を、外部から指定して暗号化を行うこと、及び、
前記暗号化するメモリの範囲（長さは２ｎバイトとする）を２バイト毎に区切り、１番目の２バイトデータを指定されたビット数だけ左にローテーションし、前記暗号化するメモリの範囲における前記１番目の２バイトデータと、これに続く２番目の２バイトデータとを排他的論理和し、その演算結果を指定されたビット数だけ左にローテーションして、２番目の２バイトデータまで加算した２バイトデータを得、ｉ＝２から（ｎ−１）まで、ｉ番目（１＜ｉ＜ｎ）の２バイトデータまで加算した２バイトデータと（ｉ＋１）番目の２バイトデータとを排他的論理和し、その演算結果を指定されたビット数だけ左にローテーションして、（ｉ＋１）番目の２バイトデータまで加算して２バイトデータを得る演算を繰り返し、ｎ番目の２バイトデータまで加算して得られた２バイトデータを暗号データにすること、
を特徴とするＩＣカード検査方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＲＯＭその他のメモリに格納されている情報に改竄が加えられているか否かの検査が行えるＩＣカード及びＩＣカード検査方法に関する。
【０００２】
【従来の技術】
ＩＣカードは、磁気カードに代わる新しい情報記憶媒体として、近年注目を集めている。特に、ＣＰＵを内蔵したＩＣカードは、高度なセキュリティを実現できることから、高度情報化社会の種々の分野において利用されることが期待されている。
【０００３】
一般にＩＣカードは、ＣＰＵを制御するための制御プログラムをＲＯＭに格納している。ＩＣカードがリーダ／ライタに接続され、リーダ／ライタからＩＣカードにコマンドが送信されると、ＣＰＵは、ＲＯＭに格納されている制御プログラムに従いＥＥＰＲＯＭ等に対しデータの読み出し／書き込み処理を行い、その結果をレスポンスとしてリーダ／ライタに送信する。
【０００４】
上記制御プログラムは、ＩＣカード製造者がＩＣカードの利用態様に合わせてプログラミングするものである。ＩＣカード製造者は、プログラミングした制御プログラムをＲＯＭ製造メーカーに引き渡し、ＲＯＭ製造者の下で制御プログラムを内蔵したＲＯＭが生産される。
【０００５】
つまり、ＩＣカードのＲＯＭを生産する過程において、制御プログラムは必ずＩＣカード製造者と異なる第三者の手に渡る。このために、制御プログラムが、第三者により改竄されてＲＯＭに格納される可能性がある。そこで、ＩＣカード製造者は、ＩＣカードを市場に出荷する前に、ＲＯＭその他のメモリに格納された制御プログラムが、不正な改竄を加えられていない、正規のプログラムであるか否かを何らかの方法により検査する必要があった。
【０００６】
【発明が解決しようとする課題】
しかし、上記検査を行うために、ＲＯＭ内の制御プログラムを直接外部に読み出すことを可能とすれば、第三者が不正に制御プログラムを取得、解読し、それにより得た知識をＩＣカードの不正使用に用いる恐れがある。このようなことは、高度なセキュリティをその大きな特徴とするＩＣカードでは許されないことである。したがって、ＲＯＭその他のメモリ内のプログラム又はデータを検査するために、製造されたＲＯＭから直接制御プログラムを読み出すことができないという問題があった。
一方、制御プログラムの検査を行う方法の一つとして、ＲＯＭ内に一般の制御プログラムと共に、制御プログラムを検査するためのプログラムを格納することが考えられる。しかし、この検査用のプログラムもＩＣカード製造者と異なる第三者の手によりＲＯＭ内に格納される。したがって、第三者は、検査プログラムの内容を解明し、そのプログラムでは発見されない手法により制御プログラムを改竄することが可能である。このために、検査用のプログラムが有効に機能しない恐れがあるという問題もあった。
【０００７】
そこで、本発明は、ＩＣカードのセキュリティを維持しつつ、ＲＯＭその他のメモリに格納されている情報を確実に検査できるＩＣカード及びＩＣカード検査方法を提供することを課題とする。
【０００８】
前記課題を解決するために、請求項１の発明は、少なくとも１つのＲＯＭを含む１又は２以上のメモリと、前記ＲＯＭが格納するプログラムにしたがい動作するＣＰＵと、を備えるＩＣカードであって、前記ＲＯＭは、前記メモリに格納されている情報を暗号化する暗号化プログラムを有し、前記ＣＰＵは、外部からの命令に基づいて、前記暗号化プログラムを実行し、その結果を外部へ出力するＩＣカードにおいて、前記暗号化プログラムは、情報を暗号化するデータ暗号化方法のローテーション演算における、データをローテーションするビット数を、外部から指定できること、前記暗号化プログラムは、暗号化するメモリの範囲が外部から指定され、前記暗号化するメモリの範囲（長さは２ｎバイトとする）を２バイト毎に区切り、１番目の２バイトデータを指定されたビット数だけ左にローテーションし、前記暗号化するメモリの範囲における前記１番目の２バイトデータと、これに続く２番目の２バイトデータとを排他的論理和し、その演算結果を指定されたビット数だけ左にローテーションして、２番目の２バイトデータまで加算した２バイトデータを得、ｉ＝２から（ｎ−１）まで、ｉ番目（１＜ｉ＜ｎ）の２バイトデータまで加算した２バイトデータと（ｉ＋１）番目の２バイトデータとを排他的論理和し、その演算結果を指定されたビット数だけ左にローテーションして、（ｉ＋１）番目の２バイトデータまで加算して２バイトデータを得る演算を繰り返し、ｎ番目の２バイトデータまで加算して得られた２バイトデータを暗号データにすること、を特徴とするＩＣカードである。
【００１０】
請求項２に係る発明は、少なくとも１つのＲＯＭを含む１又は２以上のメモリを備えたＩＣカードの、前記メモリに格納されている情報を検査するＩＣカード検査方法であって、外部からの命令に基づいて前記メモリ内の情報を暗号化し、前記暗号化により得られた結果を外部へ出力するＩＣカード検査方法において、外部より前記メモリの範囲を指定され、前記指定された範囲内において、前記メモリに格納されている情報を暗号化すること、外部より前記暗号化のデータ暗号化方法を指定され、前記指定されたデータ暗号化方法のローテーション演算における、データをローテーションするビット数を、外部から指定して暗号化を行うこと、及び、前記暗号化するメモリの範囲（長さは２ｎバイトとする）を２バイト毎に区切り、１番目の２バイトデータを指定されたビット数だけ左にローテーションし、前記暗号化するメモリの範囲における前記１番目の２バイトデータと、これに続く２番目の２バイトデータとを排他的論理和し、その演算結果を指定されたビット数だけ左にローテーションして、２番目の２バイトデータまで加算した２バイトデータを得、ｉ＝２から（ｎ−１）まで、ｉ番目（１＜ｉ＜ｎ）の２バイトデータまで加算した２バイトデータと（ｉ＋１）番目の２バイトデータとを排他的論理和し、その演算結果を指定されたビット数だけ左にローテーションして、（ｉ＋１）番目の２バイトデータまで加算して２バイトデータを得る演算を繰り返し、ｎ番目の２バイトデータまで加算して得られた２バイトデータを暗号データにすること、を特徴とするＩＣカード検査方法である。
【００１２】
【発明の実施の形態】
以下、図面等を参照して、本発明に係る一実施形態について、さらに詳しく説明する。
図１は、本発明に係るＩＣカードの構成を示す図である。
図１に示されるように、ＩＣカード１０は、ＲＯＭ１２、ＲＡＭ１４、ＥＥＰＲＯＭ１６及びＣＰＵ１８を備えている。ＣＰＵ１８は、外部から与えられるコマンドに従い、上記３つのメモリに対して、データの読み出し／書き込み処理を行う中央処理素子である。ＥＥＰＲＯＭ１６は、随時書換え可能な不揮発性メモリであり、種々のアプリケーションに対応したデータがこのＥＥＰＲＯＭ１６に保存される。ＲＡＭ１４は揮発性メモリであり、ＣＰＵ１８がコマンドの実行を行う際の作業領域として使用される。一方、ＲＯＭ１２は、読み出し専用のメモリであり、ＣＰＵ１８がコマンドを解釈実行するためのプログラムが格納されている。
【００１３】
また、ＩＣカード１０は、リーダ／ライタ（不図示）と電気信号等の授受を行うための複数の接点（Ｖｃｃ〜ＧＮＤ）を備えている。ＩＣカードをリーダ／ライタに挿入すると、リーダ／ライタの接点がこのＩＣカードの接点と接続され、電気信号の授受が行われる。各接点には、それぞれ異なる電気信号が割り付けられている。例えば、ＶｃｃはＩＣが動作するために必要な電源電圧の供給を受けるための接点であり、Ｉ／０は、ＣＰＵがリーダ／ライタと通信を行うための接点（シリアルポート）である。
【００１４】
図２は、本実施形態の各メモリーに割り付けられているアドレスの一例を示す図である。本実施形態では、例えばＲＯＭ１２にＨ’００００〜Ｈ’５ＦＦＦ、ＲＡＭ１４にＨ’６０００〜Ｈ’６ＦＦＦ、ＥＥＰＲＯＭ１６にＨ’７ＦＦＦ〜Ｈ’ＦＦＦＦなるアドレス（いずれも１６進数）を割り当てている。
【００１５】
前述のように、ＲＯＭ１２にはＣＰＵ１８が解釈実行するためのプログラムが格納されている。ＣＰＵ１８は、外部よりコマンドを送信され、そのコマンドに対応したＲＯＭ１２内のプログラムを実行する。
ところで、一般に、ＲＯＭ１２に格納されているプログラムには、ＲＯＭ１２内の情報をＩＣカード外部へ読み出す機能を有するものは含まれていない。これは、ＲＯＭ１２内の情報を第三者が不正に取得し、ＥＥＰＲＯＭ１６へのアクセス方法を解読することにより、ＩＣカードのセキュリティが害される事態を防止するためである。
【００１６】
これに対し、本実施形態では、ＲＯＭ１２に格納されている情報の正当性を検査することを目的として、ＲＯＭ１２内の情報を暗号化し、外部へ送信するプログラム（以下「暗号化プログラム」という）をＲＯＭ１２に格納することとしている。この暗号化プログラムは、外部より、ＣＰＵ１８に対し特定のコマンド（以下「Authenticate memory dataコマンド」という）を与えることにより実行される。
【００１７】
図３は、Authenticate memory dataコマンドのフォーマットを示す図である。
本実施形態では、ＩＣカード１０に与えられるコマンドは、全てその先頭の１バイトに当該コマンドの種別を示すコード（以下「ＩＮＳ」という）を備えている。ＩＮＳには、「０１」、「０２」等のコード番号がセットされる。コマンドを受けたＣＰＵ１８は、まずコマンドのＩＮＳを確認し、次にＲＯＭ１２に格納されているプログラムのうち、ＩＮＳのコード番号に対応するプログラムを実行するのである。
【００１８】
図３に示されるように、Authenticate memory dataコマンドにおいても、第１バイト目はこのＩＮＳとなっている。また、同コマンドは、ＩＮＳに続いてaddress data、length data 及びbit rotation data の３つの、いずれも２バイトからなるデータをパラメータとして備えている。
【００１９】
３つのデータのうち、address data及びlength data は、暗号化されるべきメモリ範囲を指定するデータである。すなわち、address dataはそのメモリ範囲の先頭アドレスを表し、length data は、address dataに示されるアドレスからみたメモリ範囲の長さを表している。
一方、bit rotation data は、指定されたメモリ範囲内の情報を暗号化処理する際に必要とされるパラメータである。このbit rotation data については後述する。
【００２０】
図４は、ＲＯＭ１２に格納されているプログラムの流れ図である。以下、図４に基づき、ＩＣカード１０の動作の概要について説明する。
本実施形態では、ＩＣカード１０がリーダ／ライタに接続され、リーダ／ライタからリセットコマンドが送信されると、ＣＰＵ１８等がリセットされ、ＲＯＭ１２内のプログラムの実行が開始される（Ｓ４００）。
【００２１】
プログラムの実行が開始されると、ＣＰＵ１８は、まずリーダ／ライタへＡＴＲ（Answer To Reset ）をレスポンスとして送信し（Ｓ４００）、その後、次コマンドの入力待ち状態となる（Ｓ４０４〜Ｓ４０６）。入力待ち状態中に、リーダ／ライタからコマンドが与えられると（Ｓ４０６：Ｙｅｓ）、ＣＰＵ１８は、そのコマンドの第１バイト目、すなわちＩＮＳを確認し、当該コマンドがAuthenticate memory dataコマンドであるか否かを判断する（Ｓ４０８）。
【００２２】
この結果、当該コマンドはAuthenticate memory dataコマンド以外のコマンドであると判断されると（Ｓ４０８：Ｎｏ）、該当するコード番号のコマンドが実行される（Ｓ４１０）。そして、コマンドの実行が終了すると、コマンド実行の結果がレスポンスとしてリーダ／ライタへ送信される（Ｓ４１２）。
【００２３】
一方、ステップ４０８において、当該コマンドはAuthenticate memory dataコマンドであると判断されると（Ｓ４０８：Ｙｅｓ）、Authenticate memory dataコマンドに対応するプログラム、すなわち暗号化プログラムの実行が開始される。これにより、指定されたメモリ範囲の情報は、後述する手順に従い暗号化される（Ｓ４１４）。次に、暗号化処理の結果得られたデータは、レスポンスとしてリーダ／ライタへ送信され（Ｓ４１６）、その後、ＣＰＵ１８は再びコマンドの入力待ち状態となる（Ｓ４０４〜Ｓ４０６）。
【００２４】
図５は、Authenticate memory dataコマンドの処理内容を示す流れ図である。また、図６は、本実施形態で用いるデータ暗号化方法を説明する図である。図６において、指定範囲データ６０は、Authenticate memory dataコマンドにより指定された、暗号化されるべきメモリ範囲のデータを意味している。
図４のステップＳ４１４においてAuthenticate memory dataコマンドの実行が開始されると、まずコマンドのパラメータであるaddress data、length data 及びbit rotation data の内容は、それぞれ暗号化プログラム内の変数名address ＿data、length＿data及びbit ＿rotation＿dataにセットされる（Ｓ５０２〜Ｓ５０６）。
【００２５】
次に、Address ＿dataが示すアドレスに格納されているデータ、すなわち暗号化されるべきメモリ範囲における、最初の２バイトのデータ（図６中のデータ６１及び６２）が変数名memory＿dataにセットされる（Ｓ５０８）。
【００２６】
次に、memory＿dataのビットは、bit ＿rotation＿dataで指定されるビット数だけ左にローテーションされる（図６、Ｐ−７０）。例えば、図６（Ｂ）に示すように、memory＿dataに格納されているデータが「Ｈ’２４５Ａ」であって、bit ＿rotation＿dataが「０２」である場合には、memory＿data内の各ビットは左に２ビットだけシフトされ、データが「Ｈ’９１６８」に変化する。ローテーションを行って得られた結果は、変数名result＿dataにセットされる（Ｓ５１０）。
【００２７】
ステップ５１０が終了すると、address ＿dataの値が２だけ加算される（Ｓ５１２）。これにより、address ＿dataは、暗号化する次のデータ、すなわちデータ６３のアドレスを示すようになる。一方、lenngth ＿dataの値は既にステップ５１０において暗号化されたバイトの数、すなわち２だけ減算される（Ｓ５１４）。
【００２８】
次に、減算を行った後のlength＿dataが１未満であるか否かの判断がなされる（Ｓ５１６）。ここで、length＿dataが１未満でなければ、まだ暗号処理されていないデータが存在することになる。したがって、その時点でaddress ＿dataが示すアドレスから２バイトのデータ（データ６３、６４）がmemory＿dataにセット  される（Ｓ５１８）。
【００２９】
次に、ステップ５２０において、memory＿dataに前述のresult＿dataが排他的論理和により加算される（図６、Ｐ−７２及び図６（Ｃ）参照）。さらに、ステップ５１０へ戻り、memory＿dataの内容は再びbit ＿rotation＿dataで指定されるビット数だけ左にローテーションされ（図６、Ｐ−７４）、その結果がresult＿dataにセットされる。以後、ステップ５１０からステップ５２０までの処理は、ステップ５１６においてlength＿dataが１未満となるまで、つまり、暗号化すべきメモリ範囲に未処理のデータがなくなるまで継続される。
【００３０】
一方、ステップ５１６において、length＿dataが１未満となると、指定されたメモリ範囲の全情報が暗号化されてresult＿dataに目的とする暗号データが取得されたと判断される（Ｓ５２２）。この結果、一連の暗号化処理は終了される（Ｓ５２４）。この後、result＿dataにセットされている暗号データは、前述のように図４のステップ４１６において、暗号化処理の結果得られた暗号データとしてリーダ／ライタに送信される。
【００３１】
以上説明したように、本実施形態では、ＲＯＭ１２に、Authenticate memory dataコマンドにより実行され、ＲＯＭ１２内の情報を暗号化する暗号化プログラムを格納し、その結果得られた２バイトの暗号データをレスポンスとしてリーダ／ライタへ送信することとしている。したがって、ＩＣカード製造者は、上記レスポンスの内容を確認することにより、ＲＯＭ１２内のプログラムに改竄が加えられているか否かを、プログラム自体をＲＯＭ１２の外部へ読み出すことなく確認することが可能である。すなわち、本実施形態では、ＩＣカード１０のセキュリティを維持しつつ、ＲＯＭ１２に格納されているプログラムの検査を行うことが可能となっている。
【００３２】
また、本実施形態で採用した暗号化プログラムは、暗号化すべき情報（以下「原情報」という）を２バイトごとに区切り、その全ての２バイトについて加算処理を行い、結果として２バイトの暗号データを得ることとしている。したがって、ＩＣカード１０の外部へ送信される暗号データは、原情報の内容を全て反映するものの、それより原情報を復元することは不可能である。よって、本実施形態では、例え第三者に暗号データを知得されても、ＲＯＭ１２が格納するプログラムの内容を知られることはない。
【００３３】
さらに、上記暗号データは、原情報よりデータ量が少ないダイジェストデータであるので、暗号データを一時記憶するＲＡＭ１４において消費されるメモリ量は少なく、また、暗号データをリーダ／ライタに送信する際の送信時間も短い。これより、本実施形態では、容量が比較的小さいＩＣカードのメモリを有効に利用する共に、検査に必要とされる通信時間を最小限に抑制して、検査効率を向上させている。
【００３４】
さらにまた、本実施形態では、暗号化するメモリの範囲、及びデータをローテーションするビット数を外部から指定できることとしている。つまり、ＩＣ製造者は、検査に使用するメモリの範囲、及びローテーションのビット数を検査時に任意に選択できる。したがって、例え暗号化プログラムの内容を第三者に知得されても、暗号化されるメモリ範囲、及びローテーションのビット数は特定されないことから、本実施形態により発見できない改竄を制御プログラムに加えることは不可能となっている。
【００３５】
（その他の実施形態）
なお、本発明は、上記実施形態に限定されるものではない。上記実施形態は、例示であり、本発明の特許請求の範囲に記載された技術的思想と実質的に同一な構成を有し、同様な作用効果を奏するものは、いかなるものであっても本発明の技術的範囲に包含される。
【００３６】
上記実施形態において、暗号化プログラムは、memory＿data及びresult＿dataに２バイトのデータをセットし、２バイトの暗号データを生成することとしているが、これは、暗号データのデータ量を限定するものではない。生成する暗号データは、４バイト、８バイト等、任意の大きさとしてよい。なお、暗号データのデータ量を増大させると、より正確な検査を行うことが可能となる。
【００３７】
また、上記実施形態では、主にＲＯＭに格納されている情報の検査について説明したが、これは、本発明の適用範囲をなんら限定するものではない。本発明の技術的思想は、ＲＯＭに限らず、例えばＲＡＭ、ＥＥＰＲＯＭその他のＣＰＵがアクセス可能なメモリの検査にも適用可能である。
【００３８】
なお、本明細書において、「ＩＣカード」とは、ＣＰＵと、このＣＰＵによってアクセスされるメモリとを備え、ＣＰＵは、そのメモリに格納されているプログラムにしたがい動作する携帯可能な情報記録媒体を意味する。したがって、「ＩＣカード」は、例えばその形状が平面的かつ四角形であるいわゆるカード状に限定されるものではなく、コイン形状等の媒体にＣＰＵ及びメモリを備えたものであってもよい。
【００３９】
【発明の効果】
以上詳しく説明したように、本発明によれば、以下のような効果がある。
（１）ＩＣカードのセキュリティを維持しつつ、メモリに格納されている情報の検査を行うことが可能となる。そして、メモリ内の情報に加えられた改竄を確実に発見することが可能となる。
（２）第三者が、暗号化されたデータに基づいて、メモリに格納されているプログラムの内容を知ることを防止すると共に、ＩＣカードのメモリを有効に利用しつつ検査を効率的に行うことが可能となる。
【図面の簡単な説明】
【図１】本発明に係るＩＣカードの構成を示す図である。
【図２】本発明に係るＩＣカードの各メモリーに割り付けられているアドレスの一例を示す図である。
【図３】本発明に係るＩＣカードにおいて使用するAuthenticate memory dataコマンドのフォーマットを示す図である。
【図４】本発明に係るＩＣカードのＲＯＭ１２に格納されているプログラムの流れ図である。
【図５】  Authenticate memory dataコマンドの処理内容を示す流れ図である。
【図６】本実施形態で用いるデータ暗号化方法を示す説明図である。
【符号の説明】
１０  ＩＣカード
１２  ＲＯＭ
１４  ＲＡＭ
１６  ＥＥＰＲＯＭ
１８  ＣＰＵ
【図１】
0004447059.tif 000002
【図２】
0004447059.tif 000003
【図３】
0004447059.tif 000004
【図４】
0004447059.tif 000005
【図５】
0004447059.tif 000006
【図６】
0004447059.tif 000007