(57)【要約】【課題】セキュリティの向上を可能としたＩＣカードを提供する。【解決手段】格納したデータの書き換えが不可能なＲＯＭと、格納したデータの書き換えが１回のみ可能なＯＴＰ−ＲＯＭと、ＣＰＵとを備え、ＲＯＭは第１の鍵生成データを格納し、ＯＴＰ−ＲＯＭは第２の鍵生成データを格納する。ＣＰＵは、外部装置から送信されてくるコマンドに従って、第１の鍵生成データと第２の鍵生成データとをＸＯＲ演算して、暗号化、複合化及びカード認証の少なくとも１に用いるデータである秘密鍵を算出する機能と、予め設定した条件を満たすときに、ＯＴＰ−ＲＯＭに格納されている第２の鍵生成データを初期値から該初期値とは異なる値に書き換える機能と、を有する。【選択図】図１
2014155043.tif 000002
【特許請求の範囲】
【請求項１】
外部装置から送信されてくるコマンドに従って予め設定した処理を行うＩＣカードであって、
格納したデータの書き換えが不可能な第１の不揮発性メモリと、格納したデータの書き換えが１回のみ可能な第２の不揮発性メモリと、演算処理装置とを備え、
前記第１の不揮発性メモリは第１の鍵生成データを格納し、
前記第２の不揮発性メモリは第２の鍵生成データを格納し、
前記演算処理装置は、
前記外部装置から送信されてくるコマンドに従って、前記第１の鍵生成データと前記第２の鍵生成データとを予め設定したアルゴリズムで演算して、暗号化、複合化及びカード認証の少なくとも１に用いるデータである秘密鍵を算出する秘密鍵算出部と、
予め設定した条件を満たすときに、前記第２の不揮発性メモリに格納されている前記第２の鍵生成データを初期値から該初期値とは異なる値に書き換える鍵書換部と、を有することを特徴とするＩＣカード。
【請求項２】
前記演算処理装置は、
前記秘密鍵を用いて認証処理を試行する認証試行部と、
前記認証処理の試行回数をカウントするカウント部、をさらに有し、
前記鍵書換部は、前記予め設定した条件として前記カウント部によるカウント値が予め設定した上限値に達したときに、前記第２の鍵生成データを書き換えることを特徴とする請求項１に記載のＩＣカード。
【請求項３】
前記演算処理装置は、
前記秘密鍵の誤り検出用検査値を算出する検査値算出部と、
前記検査値算出部が算出した前記誤り検出用検査値と、前記第１の鍵生成データとの間に予め設定した関係が成立するときは前記秘密鍵の認証処理の試行を許可し、前記予め設定した関係が成立しないときは前記認証処理の試行を許可しない認証試行許可判定部と、をさらに有することを特徴とする請求項１又は請求項２に記載のＩＣカード。
【請求項４】
前記鍵書換部は、前記予め設定した条件として、当該ＩＣカードを使用できなくするための破棄コマンドを受信したときに、前記第２の不揮発性メモリに格納されている前記第２の鍵生成データを前記初期値から前記異なる値に書き換えることを特徴とする請求項１に記載のＩＣカード。
【請求項５】
前記演算処理装置は、当該ＩＣカードに対して行われるセキュリティアタックを検出する検出部、をさらに有し、
前記鍵書換部は、前記予め設定した条件として、前記検出部がセキュリティアタックを検出したときに、前記第２の不揮発性メモリに格納されている前記第２の鍵生成データを前記初期値から前記異なる値に書き換えることを特徴とする請求項１又は請求項４に記載のＩＣカード。
【請求項６】
格納したデータの書き換えが複数回可能な第３の不揮発性メモリ、をさらに備え、
前記演算処理装置は、
前記秘密鍵を用いてデータを暗号化して前記第３の不揮発性メモリに書き込むデータ書込部と、
前記第３の不揮発性メモリに書き込まれた前記データを読み出して前記秘密鍵を用いて復号化するデータ読出部と、をさらに有することを特徴とする請求項４又は請求項５に記載のＩＣカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＣカードに関し、特に、ＩＣカードのセキュリティを高めることを可能としたＩＣカードに関する。
【背景技術】
【０００２】
従来から、ＲＯＭの他に、データの書き換えが可能なＥＥＰＲＯＭを備えたＩＣカードが知られている（例えば、特許文献１参照。）この種のＩＣカードは、ＲＯＭやＥＥＰＲＯＭ等に複数の認証鍵を格納しており、外部装置から認証コマンドを受信した場合に該認証コマンドが指定する認証鍵の認証を行う。認証に成功すると、ＩＣカードは、ロック状態（例えば、データの書込み／読出しが不可能な状態）からロック開錠状態（例えば、データの書込み／読出しが可能な状態）となる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２４３０１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、ＩＣカードのセキュリティを高める方法として、認証試行回数に上限値を設定する方法がある。この方法では、ＩＣカードのＥＥＰＲＯＭに試行回数の上限値を予め格納しておく。また、実際に行われた認証試行回数をカウンター回路で計測し、その計測値がＥＥＰＲＯＭに格納されるようにしておく。そして、カウント値が試行回数の上限値に達すると、それ以上の認証行為を実施できなくなるように、ＩＣカードに予めプログラムしておく。
【０００５】
しかしながら、例えば、悪意ある第三者がＩＣカードを不正に入手し、レーザー照射などのセキュリティアタックをＥＥＰＲＯＭに加えると、ＥＥＰＲＯＭに格納されている試行回数の上限値やカウント値が書き換えられてしまう可能性がある。これにより、認証行為を無制限に行うことが可能となり、認証行為を繰り返す過程でＥＥＰＲＯＭに格納されている認証鍵の値（即ち、鍵値）が推測されたり、いずれ暴露されたりする可能性があった。
そこで、この発明はこのような事情に鑑みてなされたものであって、セキュリティの向上を可能としたＩＣカードの提供を目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明の一態様に係るＩＣカードは、外部装置から送信されてくるコマンドに従って予め設定した処理を行うＩＣカードであって、格納したデータの書き換えが不可能な第１の不揮発性メモリと、格納したデータの書き換えが１回のみ可能な第２の不揮発性メモリと、演算処理装置とを備え、前記第１の不揮発性メモリは第１の鍵生成データを格納し、前記第２の不揮発性メモリは第２の鍵生成データを格納し、前記演算処理装置は、前記外部装置から送信されてくるコマンドに従って、前記第１の鍵生成データと前記第２の鍵生成データとを予め設定したアルゴリズムで演算して、暗号化、複合化及びカード認証の少なくとも１に用いるデータである秘密鍵を算出する秘密鍵算出部と、予め設定した条件を満たすときに、前記第２の不揮発性メモリに格納されている前記第２の鍵生成データを初期値から該初期値とは異なる値に書き換える鍵書換部と、を有することを特徴とする。
【０００７】
また、上記のＩＣカードにおいて、前記演算処理装置は、前記秘密鍵を用いて認証処理を試行する認証試行部と、前記認証処理の試行回数をカウントするカウント部、をさらに有し、前記鍵書換部は、前記予め設定した条件として前記カウント部によるカウント値が予め設定した上限値に達したときに、前記第２の鍵生成データを書き換えることを特徴としてもよい。
【０００８】
また、上記のＩＣカードにおいて、前記演算処理装置は、前記秘密鍵の誤り検出用検査値を算出する検査値算出部と、前記検査値算出部が算出した前記誤り検出用検査値と、前記第１の鍵生成データとの間に予め設定した関係が成立するときは前記秘密鍵の認証処理の試行を許可し、前記予め設定した関係が成立しないときは前記認証処理の試行を許可しない認証試行許可判定部と、をさらに有することを特徴としてもよい。
【０００９】
また、上記のＩＣカードにおいて、前記鍵書換部は、前記予め設定した条件として、当該ＩＣカードを使用できなくするための破棄コマンドを受信したときに、前記第２の不揮発性メモリに格納されている前記第２の鍵生成データを前記初期値から前記異なる値に書き換えることを特徴としてもよい。
また、上記のＩＣカードにおいて、前記演算処理装置は、当該ＩＣカードに対して行われるセキュリティアタックを検出する検出部、をさらに有し、前記鍵書換部は、前記予め設定した条件として、前記検出部がセキュリティアタックを検出したときに、前記第２の不揮発性メモリに格納されている前記第２の鍵生成データを前記初期値から前記異なる値に書き換えることを特徴としてもよい。
【００１０】
また、上記のＩＣカードにおいて、格納したデータの書き換えが複数回可能な第３の不揮発性メモリ、をさらに備え、前記演算処理装置は、前記秘密鍵を用いてデータを暗号化して前記第３の不揮発性メモリに書き込むデータ書込部と、前記第３の不揮発性メモリに書き込まれた前記データを読み出して前記秘密鍵を用いて復号化するデータ読出部と、をさらに有することを特徴としてもよい。
【発明の効果】
【００１１】
本発明の一態様によれば、予め設定した条件を満たすとき（例えば、秘密鍵の認証試行回数が許容されている上限値に達したときや、カード運用中に不具合があり外部装置から破棄コマンドが送信されてきたとき、又は、ＩＣカードがセキュリティアタックを検出したとき）は、第２の鍵生成データが他の値（例えば、乱数）に書き換えられる。これにより、上記条件を満たすと、第１の鍵生成データと第２の鍵生成データとから算出される秘密鍵は当初の値（即ち、本来の値）とは異なる値となる。従って、上記条件を満たした後は、例えば悪意ある第三者がＩＣカードを不正に入手してセキュリティアタックを加えても、秘密鍵の当初の値を推測することは著しく困難となるので、ＩＣカードのセキュリティを高めることができる。
【図面の簡単な説明】
【００１２】
【図１】第１実施形態に係るＩＣカード１００の構成例を示すブロック図である。
【図２】「製造者鍵」の認証手順を示すフローチャートである。
【図３】第２実施形態に係るＩＣカード２００の構成例を示すブロック図である。
【図４】アクセス鍵及び機密データを暗号化してＥＥＰＲＯＭに格納する手順を示すフローチャートである。
【図５】ＥＥＰＲＯＭからアクセス鍵及び機密データを読み出して利用する手順を示すフローチャートである。
【図６】破棄モードへの遷移の手順を示すフローチャートである。
【図７】第３実施形態に係るＩＣカード３００の構成例を示すブロック図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について、図面を参照しつつ説明する。なお、以下に説明する各図において、同一の構成を有する部分には同一の符号を付し、その繰り返しの説明は省略する。
＜第１実施形態＞
（構成）
図１は、本発明の第１実施形態に係るＩＣカード１００の構成例を示すブロック図である。
【００１４】
このＩＣカード１００は、外部装置から送信されてくるコマンドに従って予め設定した（即ち、所定の）処理を行うカードである。図１に示すように、ＩＣカード１００は、例えば、格納したデータの書き換えが不可能なＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０と、格納したデータの書き換えが１回のみ可能なＯＴＰ（Ｏｎｅ  Ｔｉｍｅ  Ｐｒｏｇｒａｍｍａｂｌｅ）−ＲＯＭ２０と、格納したデータの書き換えが複数回可能なＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）３０と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０と、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５０と、を備える。
【００１５】
ＲＯＭ１０は、その機能部として、第１の製造者鍵（キー）値を格納するための第１製造者鍵格納部１１と、第１の製造者鍵値のＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）値を格納するための第１製造者鍵ＣＲＣ値格納部１３と、ＣＰＵ５０の演算プログラムを格納する演算プログラム格納部１５とを有する。ここで、第１の製造者鍵値は、例えば１６進数で表される。
【００１６】
ＯＴＰ−ＲＯＭ２０は、その機能部として、第２の製造者鍵値を格納するための第２製造者鍵格納部２１を有する。ここで、第２の製造者鍵値は、例えば１６進数で表される。なお、第２の製造者鍵値の初期値は固定値であり、例えばＡＬＬ０ｘ００（即ち、１６進数の各桁の値が全てゼロ）である。
ＣＰＵ５０は、その機能部として、コマンド受付部５１と、「製造者鍵」算出部５３と、カウント部５５と、第２製造者鍵書換部６５と、ＣＲＣ値算出部５７と、ＣＲＣ値比較部５９と、認証試行許可判定部６１と、を有する。
【００１７】
コマンド受付部５１は、ＩＣカード１００が外部装置から受信したコマンドを図示しない入出力ポートを介して受け付ける。「製造者鍵」算出部５３は、第１の製造者鍵値と第２の製造者鍵値とを予め設定した（即ち、所定の）アルゴリズムで演算処理して「製造者鍵」を算出する。ここで、「製造者鍵」とは、例えばＩＣカード１００の製造者側（発行者側）の管理者権限を認証するための鍵である。「製造者鍵」は、ＩＣカード１００のＲＯＭ１０やＥＥＰＲＯＭ３０に格納されている他の鍵よりも多くの権限を有し、例えばＩＣカード１００の発行、管理などのためにほぼ全ての操作を行う権限を有する。「製造者鍵」は、例えば１６進数で表される。また、所定のアルゴリズムとして例えば排他的論理和（ＸＯＲ）を用いることができ、その場合は、「製造者鍵」算出部５３が第１の製造者鍵値と第２の製造者鍵値とをＸＯＲ演算して「製造者鍵」を算出する。
【００１８】
カウント部５５は、ＩＣカード１００における「製造者鍵」の認証試行回数をカウントする。ここで、認証試行回数とは、認証の成功、失敗に関わらず、このＩＣカード１００において認証行為を実際に試行した回数のことである。
第２製造者鍵書換部６５は、カウント部５５によるカウント値が所定の上限値に達したときに、ＯＴＰ−ＲＯＭ２０に格納されている第２の製造者鍵値を初期値から、該初期値とは異なる他の値に書き換える。
ＣＲＣ値算出部５７は、「製造者鍵」のＣＲＣ値を算出する。また、ＣＲＣ値算出部５７は、「製造者鍵」のＣＲＣ値だけでなく、ＲＯＭ１０に格納されている第１の製造者鍵値のＣＲＣ値を算出することもできる。
【００１９】
ＣＲＣ値比較部５９は、第１の製造者鍵値のＣＲＣ値と「製造者鍵」のＣＲＣ値とを比較してその結果を出力する。認証試行許可判定部６１は、ＣＲＣ値比較部５９による比較の結果に基づいて、ＩＣカード１００における「製造者鍵」の認証試行を許可するか否かを判定する。例えば、ＯＴＰ−ＲＯＭ２０に格納されている第２の製造者鍵値が初期値：ＡＬＬ０ｘ００であり、初期値から他の値に書き換えられていない場合、第１の製造者鍵値と第２の製造者鍵値をＸＯＲ演算して得られる「製造者鍵」は、第１の製造者鍵値と同じ値となる。認証試行許可判定部６１は、第１の製造者鍵値のＣＲＣ値と「製造者鍵」のＣＲＣ値とが同じ値の場合は「製造者鍵」の認証試行を許可し、同じ値でない場合は認証試行を許可しない。
【００２０】
ＣＰＵ５０は、例えばＲＯＭ１０の演算プログラム格納部１５に格納された演算プログラムを読み込んで、上記した各機能部の処理を実行する。
ＥＥＰＲＯＭ３０は、その機能部として、認証試行回数格納部３１を有する。認証試行回数格納部３１は、カウント部５５によるカウント値（即ち、認証の成功、失敗に関わらず、このＩＣカード１００において認証行為を実際に試行した回数）を格納する。また、認証試行回数格納部３１は、認証試行の上限値も格納する。
【００２１】
（手順）
次に、図１に示したＩＣカード１００における「製造者鍵」の認証の手順について説明する。
図２は、ＩＣカード１００における「製造者鍵」の認証手順を示すフローチャートである。ここでは、ＯＴＰ−ＲＯＭ２０の第２製造者鍵格納部２１に格納されている第２の製造者鍵値は、その初期値がＡＬＬ０ｘ００に設定されている場合を想定する。
【００２２】
図２のステップＳ１０では、まず始めに、外部装置から送信されてくる「製造者鍵」の認証コマンドをコマンド受付部５１が受け付ける。次に、ステップＳ２０では、第１製造者鍵格納部１１に格納されている第１の製造者鍵値と、第２製造者鍵格納部２１に格納されている第２の製造者鍵値とをＸＯＲ演算して、「製造者鍵」を算出する。このＸＯＲ演算は、ＣＰＵ５０の「製造者鍵」算出部５３が行う。
【００２３】
次に、ステップＳ３０では、ＣＲＣ値算出部５７が「製造者鍵」のＣＲＣ値を算出する。算出したＣＲＣ値は例えばＲＡＭ４０に一時的に記憶させてもよい。なお、第１製造者鍵ＣＲＣ値格納部１３に第１の製造者鍵値のＣＲＣ値が格納されていない場合は、ＣＲＣ値算出部５７は、「製造者鍵」のＣＲＣ値だけでなく、第１の製造者鍵値のＣＲＣ値も算出し、算出した値を例えばＲＡＭ４０に一時的に記憶させてもよい。
【００２４】
次に、ステップＳ４０では、ＣＲＣ値比較部５９が、第１製造者鍵ＣＲＣ値格納部１３に格納されている（又は、ＲＡＭ４０が一時的に記憶している）第１の製造者鍵値のＣＲＣ値を読み出す。そして、ステップＳ５０では、ＣＲＣ値比較部５９が、読み出した第１の製造者鍵値のＣＲＣ値と、ＣＲＣ値算出部が算出した「製造者鍵」のＣＲＣ値とを比較する。両ＣＲＣ値が一致するときはステップＳ６０へ進み、一致しないときはステップＳ１１０へ進む。
【００２５】
ステップＳ６０では、認証試行許可判定部６１がＲＲＰＥＯＭの認証試行回数格納部３１から認証試行回数を読み出し、今回実施分の回数を追加した後に(すでに上限値に達している場合はそのまま)、読み出した値が所定の上限値に達しているか否かを判断する。ここで、所定の上限値とは、「１」以上の整数であり、望ましくは「１」又は「２」など、１に近い整数である。認証試行回数が上限値に達している場合はステップＳ７０へ進み、達していない場合はステップＳ８０へ進む。
【００２６】
ステップＳ７０では、第２製造者鍵書換部６５が、第２製造者鍵格納部２１に格納されている第２の製造者鍵値を、初期値から他の値に書き換える。ここで、他の値とは、初期値とは異なる値であり、例えばＣＰＵ５０で発生させる乱数値である。
ステップＳ８０では、認証試行部６３が「製造者鍵」の認証を試行する。認証が成功した場合はステップＳ１００へ進み、認証が失敗した場合はステップＳ１１０へ進む。ステップＳ１００では、「製造者鍵」の認証が成功しているため、ＩＣカード１００は、外部装置から送信されてくるコマンドに従って処理を続けることが可能となる。一方、ステップ１１０では、「製造者鍵」の認証が失敗している。このため、ＣＰＵ５０は「製造者鍵」の認証を必要とする処理を停止する。
【００２７】
この第１実施形態では、ＲＯＭ１０が本発明の第１の不揮発性メモリに対応し、ＯＴＰ−ＲＯＭ２０が本発明の第２の不揮発性メモリに対応し、ＣＰＵ５０が本発明の演算処理装置に対応している。また、第１の製造者鍵値が本発明の第１の鍵生成データに対応し、第２の製造者鍵値が本発明の第２の鍵生成データに対応する。さらに、「製造者鍵」算出部５３が本発明の秘密鍵算出部に対応し、第２製造者鍵書換部６５が本発明の鍵書換部に対応している。また、ＣＲＣ値が本発明の誤り検出用検査値に対応し、ＣＲＣ値算出部５７が本発明の検査値算出部に対応している。
【００２８】
（第１実施形態の効果）
本発明の第１実施形態は、以下の効果を奏する。
（１）「製造者」鍵の認証試行回数が許容されている上限値に達すると、第２の製造者鍵値は他の値（例えば、乱数）に書き換えられ、第１の製造者鍵値と第２の製造者鍵値とから算出される「製造者」鍵は当初の値とは異なる値となる。従って、「製造者」鍵の認証試行回数が許容されている上限値に達した後は、例えば悪意ある第三者がＩＣカード１００を不正に入手してセキュリティアタックを加えても、「製造者」鍵の当初の値を推測することは著しく困難となるので、ＩＣカードのセキュリティを高めることができる。
【００２９】
（２）また、ＩＣカードを発行する際の認証処理に「製造者」鍵を用いる場合は、「製造者」鍵の認証試行回数の上限値を「１」若しくは「２」など、１に近い数値に設定することが好ましい。これにより、ＩＣカード１００を発行した後の認証試行回数が少ないうちに、「製造者」鍵を当初の値とは異なる値に変えることができる。上限値が「１」の場合は、ＩＣカード１００を発行すると同時に、「製造者」鍵を本来の値とは異なる値に変えることができる。
【００３０】
（３）また、第１の製造者鍵値のＣＲＣ値と、「製造者」鍵のＣＲＣ値とが一致するときは「製造者」鍵を用いた認証処理の試行を許可し、一致しないときは認証処理の試行を許可しない。これにより、第２の製造者鍵値が書き換えられた後は、認証処理の試行そのものをさせないようにすることができる。例えば、ＥＥＰＲＯＭ３０がレーザーアタックされて、認証試行回数のカウント値がリセットされたり、認証試行回数の上限値が書き換えられたりして、再試行が可能な状態となったとしても、認証処理を試行する前の段階、つまり、「製造者鍵」を準備する段階でそのＣＲＣ値が異常となる。これにより、図１のステップＳ５０で両ＣＲＣ値は一致しないので、認証処理の試行段階に進ませないようにすることができる。
【００３１】
（変形例）
（１）上記の第１実施形態では、本発明の誤り検出用検査値としてＣＲＣ値を用いる場合について説明したが、これはあくまで一例である。本発明の誤り検出用検査値は、例えばハッシュ値でもよい。このような場合であっても、第１実施形態の効果（１）〜（３）と同様の効果を奏する。
【００３２】
（２）また、上記の第１実施形態では、第２の製造者鍵値の初期値をＡＬＬ０ｘ００に設定する場合について説明したが、これはあくまで一例である。第２の製造者鍵値の初期値は固定値であればよい。このような場合でも、ＣＲＣ値算出部５７が算出する「製造者鍵」のＣＲＣ値と、第１の製造者鍵値のＣＲＣ値との間に、所定の関係が成立する。
（３）また、上記の第１実施形態では、「製造者鍵」を算出するためのアルゴリズムとして、排他的論理和（ＸＯＲ）を用いる場合について説明したが、これはあくまで一例である。他のアルゴリズムを用いてもよく、その場合でも「製造者鍵」を算出することができる。
【００３３】
＜第２実施形態＞
上記の第１実施形態では、本発明の秘密鍵が、ＩＣカードの製造者側（発行者側）の管理者権限を認証するための「製造者鍵」である場合について説明した。しかしながら、本発明において、秘密鍵は「製造者鍵」に限定されるものではない。秘密鍵は、データを暗号化するための「暗号化鍵」でもよい。第２実施形態では、このような態様について説明する。
【００３４】
（構成）
図３は、本発明の第２実施形態に係るＩＣカード２００の構成例を示すブロック図である。
このＩＣカード２００は、外部装置から送信されてくるコマンドに従って所定の処理を行うカードである。図３に示すように、ＩＣカード２００は、例えば、格納したデータの書き換えが不可能なＲＯＭ１１０と、格納したデータの書き換えが１回のみ可能なＯＴＰ−ＲＯＭ１２０と、格納したデータの書き換えが複数回可能なＥＥＰＲＯＭ１３０と、ＲＡＭ１４０と、ＣＰＵ１５０と、を備える。
【００３５】
ＲＯＭ１１０は、その機能部として、第１の暗号化鍵（キー）値を格納するための第１暗号化鍵格納部１１１と、ＣＰＵ１５０の演算プログラムを格納する演算プログラム格納部１１３とを有する。ここで、第１の暗号化鍵値は、例えば１６進数で表される。
ＯＴＰ−ＲＯＭ１２０は、その機能部として、第２の暗号化鍵値を格納するための第２暗号化鍵格納部１２１を有する。ここで、第２の暗号化鍵値は、例えば１６進数で表される。なお、第２の暗号化鍵値の初期値は固定値であり、例えばＡＬＬ０ｘ００（即ち、１６進数の各桁の値が全てゼロ）である。
【００３６】
ＥＥＰＲＯＭ１３０は、その機能部として、機密データを格納するための機密データ格納部１３３と、機密データへのアクセス（例えば、機密データの読出し、書込み等）を可能とするアクセス鍵を格納するためのアクセス鍵格納部１３１と、ＩＣカード２００のライフサイクル（例えば、運用モード、破棄モードなど）に関するデータを格納するライフサイクル格納部１３５と、を有する。
ＣＰＵ１５０は、その機能部として、コマンド受付部１５１と、ライフサイクル読出部１５３と、「暗号化鍵」算出部１５５と、ＣＲＣ値算出部１５７と、データ書込部１５９と、データ読出部１６１と、ＣＲＣ値比較部１６３と、第２暗号化鍵書換部１６５と、セキュリティアタック検出部１６９と、ライフサイクル書換部１６７と、を有する。
【００３７】
ライフサイクル読出部１５３は、ライフサイクル格納部１３５に格納されているデータ、即ち、ＩＣカード２００のライフサイクルをモニターする。「暗号化鍵」算出部１５５は、第１の暗号化鍵値と第２の暗号化鍵値とを予め設定した（即ち、所定の）アルゴリズムで演算処理して「暗号化鍵」を算出する。ここで、「暗号化鍵」とは、例えば、機密データ格納部１３３に格納される機密データや、アクセス鍵格納部１３１に格納されるアクセス鍵を暗号化するための鍵である。「暗号化鍵」は、例えば１６進数で表される。また、所定のアルゴリズムとして例えば排他的論理和（ＸＯＲ）を用いることができ、その場合は、「暗号化鍵」算出部１５５が第１の暗号化鍵値と第２の暗号化鍵値とをＸＯＲ演算して「暗号化鍵」を算出する。
【００３８】
ＣＲＣ値算出部１５７は、機密データ格納部１３３に格納される機密データのＣＲＣ値や、アクセス鍵格納部１３１に格納されるアクセス鍵のＣＲＣ値を算出する。データ書込部１５９は、データ（平文）を「暗号化鍵」を用いて暗号化し、ＥＥＰＲＯＭ１３０に書き込む。データ読出部１６１は、暗号化されたデータ（暗号文）をＥＥＰＲＯＭ１３０から読み出し、「暗号化鍵」を用いて復号化する。
【００３９】
ＣＲＣ値比較部１６３は、アクセス鍵について、暗号化前のＣＲＣ値と複号化後のＣＲＣ値を比較し、その結果を出力する。また、ＣＲＣ値比較部１６３は、機密データについても、暗号化前のＣＲＣ値と複号化後のＣＲＣ値を比較し、その結果を出力する。
第２暗号化鍵書換部１６５は、外部装置から送信されてくる破棄コマンドを受信したとき（又は、セキュリティアタック検出部１６９がセキュリティアタックを検出したとき）に、ＯＴＰ−ＲＯＭ１２０に格納されている第２の暗号化鍵値を初期値から、該初期値とは異なる他の値に書き換える。
【００４０】
セキュリティアタック検出部１６９は、例えば、ＥＥＰＲＯＭ１３０へのレーザー照射によるデータ改変など、ＩＣカード２００へのセキュリティアタックを検出する。セキュリティアタックの検出方法としては、ＩＣカード２００が備える図示しないハードウエアを用いる方法や、ソフトウエアを用いる方法が挙げられる。より具体的には、例えばハードウエアでは温度センサ、光センサ、クロックセンサ、電圧センサなどが出力する信号がＣＰＵ１５０に入力され、この入力された信号に基づいて、セキュリティアタック検出部１６９が異常を検出する。また、例えばソフトウエアではメモリエリアの改竄チェック機能、実行処理の非バイパスチェック機能、演算処理の検算チェック機能などをセキュリティアタック検出部１６９に追加実装することで、異常処理を検出する。ライフサイクル書換部１６７は、例えば、ライフサイクル格納部１３５に格納されているライフサイクルを書き換える。
ＣＰＵ１５０は、例えばＲＯＭ１１０の演算プログラム格納部１１３に格納された演算プログラムを読み込んで、上記した各機能部の処理を実行する。
【００４１】
（手順）
次に、図３に示したＩＣカード２００において、アクセス鍵及び機密データの格納と利用、破棄モードへの遷移の各手順についてそれぞれ説明する。なお、以下の説明では、ＯＴＰ−ＲＯＭ１２０の第２暗号化鍵格納部１２１に格納されている第２の暗号化鍵値は、その初期値がＡＬＬ０ｘ００に設定されている場合を想定する。
【００４２】
図４は、ＩＣカード２００において、アクセス鍵及び機密データを暗号化してＥＥＰＲＯＭ１３０に格納する手順を示すフローチャートである。
図４のステップＳ２１０では、まず始めに、外部装置から送信されてくる、アクセス鍵及び機密データの格納コマンドをコマンド受付部１５１が受け付ける。次に、ステップＳ２２０、２３０では、ライフサイクル読出部１５３が、ライフサイクル格納部１３５に格納されているデータを読み出して、その内容をチェックする。読み出したライフサイクルが運用モードの場合はステップＳ２４０へ進み、破棄モードの場合はステップＳ２７０へ進む。
【００４３】
次に、ステップＳ２４０では、第１暗号化鍵格納部１１１に格納されている第１の暗号化鍵値と、第２暗号化鍵格納部１２１に格納されている第２の暗号化鍵値とをＸＯＲ演算して、「暗号化鍵」を算出する。このＸＯＲ演算は、ＣＰＵ１５０の「暗号化鍵」算出部１５５が行う。
次に、図４に示すように、アクセス鍵の書込み（ステップＳ２５０）と、機密データの書込み（ステップＳ２６０）を並列に（即ち、同時進行で）行う。また、その他のデータの書込み（ステップＳ２６５）を行う場合は、ステップＳ２５０、Ｓ２６０、Ｓ２６５を並列に行う。
【００４４】
ステップＳ２５０では、ＣＲＣ値算出部１５７がアクセス鍵のＣＲＣ値を算出する。算出したＣＲＣ値は例えばＲＡＭ１４０に一時的に記憶させてもよい。そして、データ書込部１５９が、アクセス鍵とそのＣＲＣ値（何れも、平文）を「暗号化鍵」を用いて暗号化して、アクセス鍵格納部１３１に書き込む。
【００４５】
ステップＳ２６０では、ＣＲＣ値算出部１５７が機密データのＣＲＣ値を算出する。算出したＣＲＣ値は例えばＲＡＭ１４０に一時的に記憶させてもよい。そして、データ書込部１５９が、機密データとそのＣＲＣ値（何れも、平文）を「暗号化鍵」を用いて暗号化して、機密データ格納部１３３に書き込む。ステップ２６５では、データ書込部１５９が、その他のデータを暗号化せずにそのままＥＥＰＲＯＭ１３０に書き込む。
一方、ステップＳ２７０では、ＩＣカード２００は破棄モードの状態にある。このため、ＣＰＵ１５０は、外部装置から送信されてくるコマンドの処理を停止する（即ち、コマンドを受け付けない。）。
【００４６】
図５は、ＩＣカード２００において、ＥＥＰＲＯＭ１３０からアクセス鍵及び機密データを読み出して利用する手順を示すフローチャートである。
図５のステップＳ３１０では、まず始めに、外部装置から送信されてくる、アクセス鍵及び機密データの利用コマンドをコマンド受付部１５１が受け付ける。次に、ステップＳ３２０、３３０では、ライフサイクル読出部１５３が、ライフサイクル格納部１３５に格納されているデータを読み出して、その内容をチェックする。読み出したライフサイクルが運用モードの場合はステップＳ３３５へ進み、破棄モードの場合はステップＳ３９０へ進む。ステップＳ３３５では、第１暗号化鍵格納部１１１に格納されている第１の暗号化鍵値と、第２暗号化鍵格納部１２１に格納されている第２の暗号化鍵値とをＸＯＲ演算して、「暗号化鍵」を算出する。このＸＯＲ演算は、ＣＰＵ１５０の「暗号化鍵」算出部１５５が行う。
【００４７】
次に、図５に示すように、アクセス鍵へのアクセス（ステップＳ３４０）と、機密データへのアクセス（ステップＳ３６０）を並列に行う。また、その他のデータへのアクセスを行う場合は、該データについては複号化等の処理を行わずにステップＳ３８０へ進む。
ステップＳ３４０では、データ読出部１６１が、アクセス鍵格納部１３１に格納されているアクセス鍵とそのＣＲＣ値（何れも暗号文）をＥＥＰＲＯＭ１３０から読み出し、「暗号化鍵」を用いて復号化する。ステップＳ３５０では、複号化後のアクセス鍵のＣＲＣ値と、暗号化前のＣＲＣ値（即ち、ステップＳ２５０で、ＣＲＣ値算出部１５７が算出したアクセス鍵のＣＲＣ値）とを比較し、両ＣＲＣ値が一致するか否かを判定する。この比較と判定は、ＣＲＣ値比較部１６３が行う。両ＣＲＣ値が一致するときはステップＳ３８０へ進み、一致しないときはステップＳ３９０へ進む。
【００４８】
ステップＳ３６０では、データ読出部１６１が、アクセス鍵格納部１３１に格納されている機密データとそのＣＲＣ値（何れも暗号文）をＥＥＰＲＯＭ１３０から読み出し、「暗号化鍵」を用いて復号化する。ステップＳ３７０では、複号化後の機密データのＣＲＣ値と、暗号化前のＣＲＣ値（即ち、ステップＳ２６０で、ＣＲＣ値算出部１５７が算出した機密データのＣＲＣ値）とを比較し、両ＣＲＣ値が一致するか否かを判定する。この比較と判定は、ＣＲＣ値比較部１６３が行う。両ＣＲＣ値が一致するときはステップＳ３８０へ進み、一致しないときはステップＳ３９０へ進む。
【００４９】
ステップＳ３８０では、ＩＣカード２００は、利用コマンドに従って、例えば、複号化されたアクセス鍵を用いて、複号化された機密データにアクセスするなどの処理を続けて行う。
一方、ステップＳ３９０では、ＩＣカード２００は破棄モード、或いは、暗号化前と複号化後でＣＲＣ値が異なり、機密データを正しく複号化できない状態にある。このため、ステップＳ３５０、Ｓ３７０の少なくとも一方からステップＳ３９０へ処理が進んだ場合は、ＣＰＵ１５０は、外部装置から送信されてくるコマンドの処理を停止する（即ち、コマンドを受け付けない。）。
【００５０】
図６は、ＩＣカード２００において、破棄モードへの遷移の手順を示すフローチャートである。図６のステップＳ４１０では、まず始めに、外部装置から送信されてくる破棄コマンドをコマンド受付部１５１が受け付ける（又は、セキュリティアタック検出部１６９が、ＥＥＰＲＯＭ１３０等に対するセキュリティアタックを検出する。）。次に、ステップＳ４２０では、第２暗号化鍵書換部１６５が、第２暗号化鍵格納部１２１に格納されている第２の暗号化鍵値を、初期値から他の値に書き換える。ここで、他の値とは、初期値とは異なる値であり、例えばＣＰＵ１５０で発生させる乱数値である。そして、ステップＳ４３０では、ライフサイクル書換部１６７が、ライフサイクル格納部１３５に格納されているライフサイクルを運用モードから破棄モードへと書き換える。
【００５１】
この第２実施形態では、ＲＯＭ１１０が本発明の第１の不揮発性メモリに対応し、ＯＴＰ−ＲＯＭ１２０が本発明の第２の不揮発性メモリに対応し、ＣＰＵ１５０が本発明の演算処理装置に対応している。また、第１の暗号化鍵値が本発明の第１の鍵生成データに対応し、第２の暗号化鍵値が本発明の第２の鍵生成データに対応する。さらに、「暗号化鍵」算出部１５５が本発明の秘密鍵算出部に対応し、第２暗号化鍵書換部１６５が本発明の鍵書換部に対応している。また、ＣＲＣ値が本発明の誤り検出用検査値に対応し、ＣＲＣ値算出部１５７が本発明の検査値算出部に対応している。セキュリティアタック検出部１６９が本発明の検出部に対応している。
【００５２】
（第２実施形態の効果）
本発明の第２実施形態は、以下の効果を奏する。
（１）ＩＣカードの運用中に不具合があり外部装置から破棄コマンドが送信されてきたときや、ＩＣカードがセキュリティアタックを検出したときは、第２の暗号鍵値は他の値（例えば、乱数）に書き換えられ、第１の暗号鍵値と第２の暗号鍵値とから算出される「暗号化鍵」は当初の値とは異なる値となる。従って、破棄コマンドを受信したり、セキュリティアタックを検出した後は、例えばサイドチャネル攻撃をするアタッカーなど、悪意ある第三者がＩＣカード１００を不正に入手してセキュリティアタックを加えても、多くの情報を与えないようにすることができ、「暗号化鍵」の当初の値を推測することは著しく困難となる。これにより、ＩＣカードのセキュリティを高めることができる。
【００５３】
（２）また、例えば、ＥＥＰＲＯＭ１３０がレーザーアタックされて、カードライフサイクルが破棄モードから運用モードに戻されたとしても、上記の処理により、機密データを暗号化したり、複号化したりする「暗号化鍵」は既に当初の値と異なる値に変えられている。これにより、アクセス鍵や機密データを正しく暗号化、複号化することはできない。
アクセス鍵と機密データを取り扱うことができないので、セキュリティ上安心である。
（３）ＩＣカードには、複数の鍵データや機密データが存在するが、それら全てを上記の仕組みにより同時に破壊する（使用不可にする）ことができる。
【００５４】
（変形例）
（１）第２実施形態では、第１実施形態の変形例（１）を適用してよい。このような場合であっても、第２実施形態の効果（１）〜（３）と同様の効果を奏する。
（２）また、上記の第２実施形態では、第２の暗号化鍵値の初期値をＡＬＬ０ｘ００に設定する場合について説明したが、これはあくまで一例である。第２の暗号化鍵値の初期値は固定値であればよい。このような場合でも、ＣＲＣ値算出部１５７が算出する「暗号化鍵」のＣＲＣ値と、第１の暗号化鍵値のＣＲＣ値との間に、所定の関係が成立する。
【００５５】
（３）また、上記の第１実施形態では、「暗号化鍵」を算出するためのアルゴリズムとして、排他的論理和（ＸＯＲ）を用いる場合について説明したが、これはあくまで一例である。他のアルゴリズムを用いてもよく、その場合でも「暗号化鍵」を算出することができる。
【００５６】
＜第３実施形態＞
また、本発明の実施形態では、第１実施形態と第２実施形態とを組み合わせてもよい。
（構成）
図７は、本発明の第３実施形態に係るＩＣカード３００の構成例を示すブロック図である。
図７に示すように、このＩＣカード３００は、例えば、格納したデータの書き換えが不可能なＲＯＭ２１０と、格納したデータの書き換えが１回のみ可能なＯＴＰ−ＲＯＭ２２０と、格納したデータの書き換えが複数回可能なＥＥＰＲＯＭ２３０と、ＲＡＭ２４０と、ＣＰＵ２５０と、を備える。
【００５７】
ＲＯＭ２１０は、その機能部として、第１製造者鍵格納部１１と、第１製造者鍵ＣＲＣ値格納部１３と、第１暗号化鍵格納部１１１と、演算プログラム格納部２１１とを有する。ＯＴＰ−ＲＯＭ２２０は、その機能部として、第２製造者鍵格納部２１と、第２暗号化鍵格納部１２１を有する。ＥＥＰＲＯＭ２３０は、その機能部として、認証試行回数格納部３１と、アクセス鍵格納部１３１と、機密データ格納部１３３と、ライフサイクル格納部１３５と、を有する。
【００５８】
また、ＣＰＵ２５０は、その機能部として、コマンド受付部２５１と、「製造者鍵」算出部５３と、カウント部５５と、ＣＲＣ値算出部２５３と、ＣＲＣ値比較部２５５と、認証試行許可判定部６１と、第２製造者鍵書換部６５と、ライフサイクル読出部１５３と、「暗号化鍵」算出部１５５と、データ書込部１５９と、データ読出部１６１と、第２暗号化鍵書換部１６５と、ライフサイクル書換部１６７と、セキュリティアタック検出部１６９と、を有する。
【００５９】
ここで、演算プログラム格納部２１１は、図１に示した演算プログラム格納部１５と図３に示した演算プログラム格納部１１３の両方の機能を有する。また、コマンド受付部２５１は、図１に示したコマンド受付部５１と図３に示したコマンド受付部１５１の両方の機能を有する。ＣＲＣ値算出部２５３は、図１に示したＣＲＣ値算出部５７と図３に示したＣＲＣ値算出部１５７の両方の機能を有する。ＣＲＣ値比較部２５５は、図１に示したＣＲＣ値比較部５９と図３に示したＣＲＣ値比較部１６３の両方の機能を有する。
この第３実施形態では、ＲＯＭ２１０が本発明の第１の不揮発性メモリに対応し、ＯＴＰ−ＲＯＭ２２０が本発明の第２の不揮発性メモリに対応し、ＣＰＵ２５０が本発明の演算処理装置に対応している。
【００６０】
（第３実施形態の効果）
本発明の第３実施形態は、第１実施形態の効果（１）〜（３）と、第２実施形態の効果（１）〜（３）の両方を奏する。
＜その他＞
本発明は、以上に記載した各実施形態に限定されるものではない。当業者の知識に基づいて各実施形態に設計の変更等を加えてもよく、そのような変更等を加えた態様も本発明の範囲に含まれる。
【符号の説明】
【００６１】
１０  ＲＯＭ
１１  第１製造者鍵格納部
１３  第１製造者鍵ＣＲＣ値格納部
１５、１１１、２１１  演算プログラム格納部
２１  第２製造者鍵格納部
３１  認証試行回数格納部
５１、１５１、２５１ コマンド受付部
５３   ［製造者鍵］算出部
５５   カウント部
５７、１５７、２５３ ＣＲＣ値算出部
５９、１６３、２５５ ＣＲＣ値比較部
６１   認証試行許可判定部
６３   認証試行部
６５   第２製造者鍵書換部
１００、２００、３００  ＩＣカード
１１１ 暗号化鍵格納部
１１３ 演算プログラム格納部
１２１ 第２暗号化鍵格納部
１３１ アクセス鍵格納部
１３３ 機密データ格納部
１３５ ライフサイクル格納部
１５１ コマンド受付部
１５３ ライフサイクル読出部
１５５ 「暗号化鍵」算出部
１５９ データ書込部
１６１ データ読出部
１６５ 第２暗号化鍵書換部
１６７ ライフサイクル書換部
１６９ セキュリティアタック検出部
【図１】
2014155043.tif 000003
【図２】
2014155043.tif 000004
【図３】
2014155043.tif 000005
【図４】
2014155043.tif 000006
【図５】
2014155043.tif 000007
【図６】
2014155043.tif 000008
【図７】
2014155043.tif 000009