(57)【要約】【課題】パターンカット等の後処理を行うことなく内部の鍵情報の推定やハードウェアの解析を困難とし、セキュリティ性の向上を図る。【解決手段】検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を初期値として格納する記憶手段と、暗号化処理を行う暗号化処理手段とを備え、上記暗号化処理手段は、検査モードの命令が外部から与えられるのに応じて、上記記憶手段に記憶された上記検査用データ、上記検査用パラメータ、上記検査用乱数及び上記検査用鍵を用いて暗号化処理を行う。【選択図】　図１
2004088632.tif 000002
【特許請求の範囲】
【請求項１】
検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を初期値として格納する記憶手段と、
暗号化処理を行う暗号化処理手段とを備え、
上記暗号化処理手段は、検査モードの命令が外部から与えられるのに応じて、上記記憶手段に記憶された上記検査用データ、上記検査用パラメータ、上記検査用乱数及び上記検査用鍵を用いて暗号化処理を行うことを特徴とする暗号化装置。
【請求項２】
上記記憶手段は、上記検査用データ、上記検査用パラメータ、上記検査用乱数及び上記検査用鍵を用いて暗号化処理を行ったときに生成する正しい値である期待値をさらに格納し、
上記暗号化処理手段は、上記検査用データ、上記検査用パラメータ、上記検査用乱数及び上記検査用鍵を用いた暗号化処理の結果と上記期待値とが一致するか否かを判断して判断結果を出力することを特徴とする請求項１記載の暗号化装置。
【請求項３】
上記暗号化処理手段は、公開鍵暗号化方式による暗号化処理を行うことを特徴とする請求項１記載の暗号化装置。
【請求項４】
上記暗号化処理手段は、暗号化処理として署名生成処理を行うことを特徴とする請求項３記載の暗号化装置。
【請求項５】
上記暗号化処理手段は、上記署名生成処理により生成した上記署名の署名検証処理を行い、当該署名検証処理の結果を出力することを特徴とする請求項４記載の暗号化装置。
【請求項６】
暗号化処理に用いるためのハッシュ値を生成するハッシュ値生成手段と、ハッシュ値生成手段によって生成したハッシュ値を格納するための第２の記憶手段とをさらに備え、上記暗号化処理手段は、上記第２の記憶手段に格納されたハッシュ値を読み出すことを特徴とする請求項１記載の暗号化装置。
【請求項７】
上記初期値は、必要な故障検出率から逆算されたものであることを特徴とする請求項１記載の暗号化装置。
【請求項８】
上記検査用データ、検査用パラメータ、検査用乱数及び検査用鍵は、実際の暗号化処理では運用されないことを特徴とする請求項１記載の暗号化装置。
【請求項９】
上記暗号化処理手段は、楕円曲線暗号化処理を行うことを特徴とする請求項１記載の暗号化装置。
【請求項１０】
上記ハッシュ値生成手段は、ＳＨＡ−１処理を行うことを特徴とする請求項６記載の暗号化装置。
【請求項１１】
通信機能を有する非接触型ＩＣカードに内蔵されたＩＣチップに組み込まれていることを特徴とする請求項１記載の暗号化装置。
【請求項１２】
ＦＰＧＡに組み込まれていることを特徴とする請求項１記載の暗号化装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、暗号化処理を行う暗号化装置に関する。
【０００２】
【従来の技術】
近年、例えばいわゆるインターネット等を利用した電子商取引やオンラインショッピングといった各種通信技術を利用した様々なサービスが普及しつつある。また、近年では、通信技術の進歩に伴い、端末を介した通信技術のみならず、例えば交通機関の料金徴収やいわゆる電子マネー等に利用するための通信機能を集積回路化した非接触型半導体メモリカードといったカード状のデバイスも開発されている。
【０００３】
このような通信機能を有するカード状のデバイス（以下、非接触型ＩＣ（Ｉｎｔｅｇｒａｔｅｄ　Ｃｉｒｃｕｉｔ）カードと称する。）を用いたサービスにおいては、セキュリティ性の向上が必要不可欠であるため、通常、通信相手の正当性を認証するための相互認証処理や、データ通信の安全性を確保するための暗号化処理が行われる。その際、非接触型ＩＣカードにおいては、処理の高速化が要求されることから、これらの機能をソフトウェアによって実装すると、高いクロックのＣＰＵ（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）を要することとなり、実用的でない。そのため、非接触型ＩＣカードにおいては、これらの機能をソフトウェアによって実装するのではなく、ハードウェアによって実装するのが望ましい。
【０００４】
ここで、このようなハードウェアによって上述した機能を実装する非接触型ＩＣカードにおいては、電力消費を極力抑制するために、例えばいわゆるＤＥＳ（Ｄａｔａ　Ｅｎｃｒｙｐｔｉｏｎ　Ｓｔａｎｄａｒｄ）暗号化方式といった比較的少ない回路規模及び電力消費で実装することができるいわゆる共通鍵暗号化方式を採用するものが多かった。
【０００５】
しかしながら、暗号化及び復号に共通の鍵を用いる共通鍵暗号化方式は、鍵データの授受を行う必要があるといった観点から、不正な第三者による攻撃に弱いという問題がある。そのため、非接触型ＩＣカードにおいては、将来的に金融サービスに適用する場合等の問題が懸念されていた。
【０００６】
そのため、非接触型ＩＣカードを用いたサービスにおいては、非接触型ＩＣカードとして、例えばいわゆるＲＳＡ（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ）暗号化方式や楕円曲線暗号化方式（Ｅｌｌｉｐｔｉｃ　Ｃｕｒｖｅ　Ｃｒｙｐｔｏｓｙｓｔｅｍ；ＥＣＣ）といったように、暗号化と復号とに用いる鍵を異なるものとし、秘密に保つ必要がある共通鍵を特定の１人が持てばよいいわゆる公開鍵暗号化方式を採用したセキュリティの高いシステムが要求されつつあり、公開鍵を用いた署名生成及び署名検証を行う非接触型ＩＣカードの開発も多く試みられている。
【０００７】
【発明が解決しようとする課題】
ところで、上述したような公開鍵暗号化方式を採用した非接触型ＩＣカード等に搭載されるためのＩＣチップを製造する際には、製造後に暗号化装置が正常に動作するか否かを確認するために、ＩＣチップの製造者又は検査をする者が出荷検査を行わなければならない。このため、非接触型ＩＣカードのＩＣチップには、暗号化装置に直接アクセスして暗号化装置の故障の有無を検査するための専用の外部バスである検査用外部入出力端子が設けられている。
【０００８】
ここで、通常の暗号化装置の検査用の回路は、図７のように構成されている。すなわち、各部を制御するＣＰＵと、このＣＰＵのワークエリアとして機能するメモリであるＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）と、各種プログラム等を記憶する読み出し専用のメモリであるＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）と、電気的に書き換え可能とされるメモリであるＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ　Ｅｒａｓａｂｌｅ　ＰｒｏｇｒａｍｍａｂｌｅＲｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）とを備えるＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭと、暗号化処理を行う暗号化処理手段としての暗号エンジンとを備え、ＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭ及び暗号エンジンがそれぞれ図示しない検査用外部入出力端子に接続されている。
【０００９】
そして暗号エンジンの検査をする際には、検査用外部入力端子から暗号エンジンに検査用データ及び検査用パラメータ等を直接入力する。ＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭの制御のもとに暗号エンジンが暗号化処理を行い、検査用外部出力端子から出力値が出力される。検査をする者は、出力値が正確であるか否かの答え合わせを行うことによって、暗号エンジンの故障の有無を判断する。
【００１０】
つまり、検査をする者は、少なくとも検査用データ、検査用パラメータ等の入力データ及び出力データの正しい値である期待値を知っておく必要がある。
【００１１】
ところで、専用の検査用外部入出力端子は、暗号化装置の検査のために必要不可欠である一方で、不正な第三者が暗号エンジンへアクセスし、上述した入力データや期待値等を利用して内部の鍵情報等を取得又は推定したり、上記のような検査を繰り返すことでハードウェアを解析する手段となり得るため、セキュリティ上の問題点となっている。
【００１２】
そこで、チップ製造後にこの検査用外部入出力端子を例えば機械的に切断するいわゆるパターンカットと呼ばれる手法や、検査用外部入出力端子を電気的に焼き切り使用不可能とする手法等により、暗号エンジンへのアクセスを不可能とする方法が一般的に採用されている。
【００１３】
しかしながら、これらの手法を実施すると、出荷後のＩＣチップに不良が発生した場合にこの不良品の検査や調査が不可能となり、不良原因が特定できなくなるという別の問題を生じたり、製品の歩留まりを悪化させる原因ともなる。
【００１４】
そこで本発明はこのような従来の問題点を解決するために提案されたものであり、パターンカット等の後処理を行うことなく内部の鍵情報の推定やハードウェアの解析を困難とし、セキュリティ性の向上を図ることが可能な暗号化装置を提供することを目的とする。
【００１５】
【課題を解決するための手段】
上述の目的を達成するために、本発明に係る暗号化装置は、検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を初期値として格納する記憶手段と、暗号化処理を行う暗号化処理手段とを備え、上記暗号化処理手段は、検査モードの命令が外部から与えられるのに応じて、上記記憶手段に記憶された上記検査用データ、上記検査用パラメータ、上記検査用乱数及び上記検査用鍵を用いて暗号化処理を行うことを特徴とする。
【００１６】
以上のような本発明に係る暗号化装置は、検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を初期値として記憶手段に格納しておき、外部から検査モードの命令が入力されたらこれらを読み出して暗号化処理し、結果を出力する。検査をする者は、出力結果の正しい値である期待値を知っていれば、この期待値と出力された結果とを比較することで暗号化装置の故障の有無を判定できる。このため、検査用データ等の入出力を繰り返すことによる暗号化装置に対する攻撃を回避できる。
【００１７】
【発明の実施の形態】
以下、本発明を適用した暗号化装置について、図面を参照しながら詳細に説明する。
【００１８】
本発明の暗号化装置は、例えば通信機能を集積回路化した非接触型半導体メモリカードといったカード状のデバイス（以下、非接触型ＩＣ（Ｉｎｔｅｇｒａｔｅｄ　Ｃｉｒｃｕｉｔ）カードと称する。）等に内蔵されるＩＣチップ等に適用することができるものであって、通信相手の正当性を認証するための相互認証処理や、データ通信の安全性を確保するための暗号化処理の機能を、ハードウェアによって実装したものである。
【００１９】
ここでは、最初に、暗号化装置の基本的な構成及び検査方法について説明し、次に、実際の非接触型ＩＣカードに搭載された暗号化装置において検査を行う場合の具体例について説明する。
【００２０】
先ず、本発明の暗号化装置の検査用回路の基本的な構成である第１の例について図１を参照しながら説明する。
【００２１】
図１に示す検査用回路は、各部を制御するＣＰＵと、このＣＰＵのワークエリアとして機能するメモリであるＲＡＭと、各種プログラム等を記憶する読み出し専用のメモリであるＲＯＭと、電気的に書き換え可能とされるメモリであるＥＥＰＲＯＭとを備えるＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭと、暗号化処理を行う暗号化処理手段としての暗号エンジンとを備え、ＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭの入力側が図示しない検査用外部入力端子に、及びＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭと暗号エンジンとの出力側が図示しない検査用外部出力端子に接続されている。
【００２２】
暗号エンジンは、シーケンサーを持たせることで、ＣＰＵの助けが無くても暗号化処理を行えるように自立的に構成する。
【００２３】
また、暗号エンジン内の記憶手段としてのＲＯＭ又はゲートに、初期値として検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を予め記憶させておく。これらの値を実際には運用されない検査専用の値としておけば、万が一何らかの情報が盗まれた場合であっても攻撃の対象になる等の問題を引き起こさないため安全である。
【００２４】
なお、ＲＯＭ又はゲートに記憶されたこれらの値は、ＣＰＵからアクセスできるレジスタ、メモリ領域等を制限することによりリバースエンジニアリングを困難とする等として極力外部から読みとれないようにしておく。
【００２５】
そして暗号エンジンの検査をする際には、検査用外部入出力端子から暗号エンジンの検査を行うモードである検査モードのコマンドをＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭに入力する。検査モードのコマンドがＣＰＵを介して暗号エンジンに受け渡されると、暗号エンジンは、ゲートに記憶された検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を読み出して暗号化処理を行い、検査用外部出力端子から出力値を出力する。そして検査をする者は、出力値が正確であるか否かの答え合わせを行うことによって、暗号エンジンの故障の有無を判断する。
【００２６】
なお、暗号エンジンが公開鍵暗号化方式による暗号化処理を行うものである場合、より具体的には、以下のようにして署名生成処理を行うことにより、暗号エンジンの検査を行う。
【００２７】
先ず、図示しない検査用外部入力端子から検査モードのコマンドをＣＰＵを介して暗号エンジンに与えると、暗号エンジンの内部のＲＯＭ又はゲートから初期値としての検査用データ、検査用パラメータ、検査用乱数及び検査用鍵としての検査用秘密鍵が読み出され、例えば後述するＡＬＵ　ＲＡＭ（Ａｒｉｔｈｍｅｔｉｃ　ａｎｄ　Ｌｏｇｉｃａｌ　Ｕｎｉｔ　Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）のような図示しない演算ＲＡＭに読み出された初期値が転送される。
【００２８】
次に、読み出された初期値を用いて暗号エンジンが実際に署名生成を行い、署名を生成する。署名生成に際しては、暗号エンジンが例えばＳＨＡ−１処理を行い検査用データのハッシュ値を算出し、算出されたハッシュ値と、検査用パラメータと、検査用乱数と、検査用秘密鍵とを用いて、例えば楕円曲線暗号化処理を行い、署名生成する。
【００２９】
次に、生成した署名を出力値として検査用外部出力端子から出力する。そして検査をする者は、出力値としての署名が正確であるか否かの答え合わせを行うことによって、暗号エンジンの故障の有無を判断する。
【００３０】
以上のように、暗号エンジンを検査する際には、内部データのみを用いて暗号化処理を行い、結果である出力値と正しい出力値である期待値とを比較することで暗号エンジンが正常に動作したか否かを判断できる。このとき、検査をする者は、期待値のみを知っていればよい。したがって、外部から暗号エンジンへ直接にデータやパラメータ等を入力するといったセキュリティ上の危険を冒すことなく、暗号エンジンの検査を安全に行うことができる。また、検査をする者が知っておく期待値は、その元になる検査用データ、検査用パラメータ等が外部からわからないので、鍵情報等の暗号エンジンの内部情報を取得しようとする攻撃者にとってあまり意味を持たない。
【００３１】
次に、上述の第１の例を変形した第２の例について図２を用いて説明する。この第２の例は、暗号化処理の結果をそのまま出力値として出力せずに、暗号化処理の結果が正しいか否かを結果フラグとして出力する点で、第１の例と異なるものである。
【００３２】
具体的には、図２に示す第２の例の検査用回路は、各部を制御するＣＰＵと、このＣＰＵのワークエリアとして機能するメモリであるＲＡＭと、各種プログラム等を記憶する読み出し専用のメモリであるＲＯＭと、電気的に書き換え可能とされるメモリであるＥＥＰＲＯＭとを備えるＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭと、暗号化処理を行う暗号化処理手段としての暗号エンジンとを備え、ＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭの入力側が図示しない検査用外部入力端子に、及びＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭと暗号エンジンとの出力側が図示しない検査用外部出力端子に接続されている。
【００３３】
暗号エンジンは、シーケンサーを持たせることで、ＣＰＵの助けが無くても暗号化処理を行えるように自立的に構成する。
【００３４】
また、暗号エンジン内の記憶手段としてのＲＯＭ又はゲートに初期値として検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を予め記憶させておく。これらの値を実際には運用されない検査専用の値としておけば、万が一何らかの情報が盗まれた場合であっても攻撃の対象になる等の問題を引き起こさないため安全である。
【００３５】
また、この第２の例においては、検査用データ、検査用パラメータ、検査用乱数及び検査用鍵に基づく期待値を記憶手段としてのＲＯＭ又はゲートに予め記憶させておく。
【００３６】
なお、ＲＯＭ又はゲートに記憶されたこれらの値は、ＣＰＵからアクセスできるレジスタ、メモリ領域等を制限することによりリバースエンジニアリングを困難とする等として極力外部から読みとれないようにしておく。
【００３７】
そして暗号エンジンの検査をする際には、検査用外部入力端子から検査開始のコマンドをＣＰＵ／ＲＡＭ／ＲＯＭ／ＥＥＰＲＯＭに入力する。検査モードのコマンドがＣＰＵを介して暗号エンジンに受け渡されると、暗号エンジンは記憶手段に記憶された検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を読み出して暗号化処理を行う。さらに、暗号エンジンは、暗号化処理の結果とＲＯＭ又はゲートに記憶された期待値とを比較し、検査用外部出力端子から一致又は不一致の結果フラグを出力する。そして検査をする者は、結果フラグによって暗号エンジンの故障の有無を判断する。
【００３８】
なお、暗号エンジンが公開鍵暗号化方式による暗号化処理を行うものである場合、より具体的には、以下のようにして署名生成処理を行うことにより、暗号エンジンの検査を行う。
【００３９】
先ず、図示しない検査用外部入力端子から検査モードのコマンドをＣＰＵを介して暗号エンジンに与えると、暗号エンジンの内部のＲＯＭ又はゲートから初期値として検査用データ、検査用パラメータ、検査用乱数、検査用鍵としての検査用秘密鍵及び期待値が読み出され、例えば後述するＡＬＵ　ＲＡＭのような図示しない演算ＲＡＭに読み出された初期値が転送される。
【００４０】
次に、読み出された初期値を用いて暗号エンジンが実際に署名生成を行い、署名を生成する。署名生成に際しては、暗号エンジンが例えばＳＨＡ−１処理を行い検査用データのハッシュ値を算出し、算出されたハッシュ値と、検査用パラメータと、検査用乱数と、検査用秘密鍵とを用いて、例えば楕円曲線暗号化処理を行い、署名生成する。
【００４１】
次に、暗号エンジンにおいて、生成した署名と演算ＲＡＭに読み出された期待値とを比較し、検査用外部出力端子から一致又は不一致の結果フラグを出力する。そして検査をする者は、結果フラグによって暗号エンジンの故障の有無を判断する。
【００４２】
なお、この第２の例の場合、上述した署名生成処理だけでなく、以下に述べるように署名生成処理と署名検証処理とをペアで行い、内部で答え合わせをすることで、２つの処理回路が正常に動作したか否かを１度の暗号エンジンの検査で調べることができる。
【００４３】
この方法では先ず、上述したように初期値を用いて署名生成を行う。次に生成した署名をそのまま用いて内部で署名検証を行い、署名が正しいことを確認し、結果フラグを出力する。署名生成及び署名検証のどちらも正常に動作した場合には、１ビットの結果フラグを出力するだけで、暗号エンジンが正常に動作したことを証明できる。
【００４４】
ただし、結果フラグを１ビットとした場合、署名生成及び署名検証の両方で特殊な値をとった場合等に確実性が低下するので、以下に述べるように署名生成後と署名検証後とにおいてそれぞれ結果フラグを出力するように暗号エンジンを構成することが好ましい。
【００４５】
具体的には、先ず、暗号エンジンの内部のＲＯＭ又はゲートから初期値として検査用データ、検査用パラメータ、検査用乱数、検査用鍵としての検査用秘密鍵及び期待値が読み出され、例えばＡＬＵ　ＲＡＭのような図示しない演算ＲＡＭに読み出された初期値がロードされる。
【００４６】
次に、読み出された初期値を用いて暗号エンジンが実際に署名生成を行い、署名を生成する。署名生成に際しては、暗号エンジンが例えばＳＨＡ−１処理を行い検査用データのハッシュ値を算出し、算出されたハッシュ値と、検査用パラメータと、検査用乱数と、検査用秘密鍵とを用いて、例えば楕円曲線暗号化処理を行い、署名生成する。
【００４７】
次に、暗号エンジンにおいて、生成した署名と演算ＲＡＭに読み出された期待値とを比較し、検査用外部出力端子から一致又は不一致の結果フラグを出力する。それとともに、暗号エンジンで生成した署名を、引き続く署名検証処理で用いるために、演算ＲＡＭに格納する。
【００４８】
次に、検査用外部入力端子から署名検証開始のコマンドをＣＰＵを介して暗号エンジンに与え、演算ＲＡＭに格納された署名を用いて署名検証処理を行う。署名検証に際しては、暗号エンジンが検査用パラメータ、検査用乱数、ハッシュ値及び検査用鍵としての検査用公開鍵を例えば演算ＲＡＭにロードする。次に暗号エンジンは、演算ＲＡＭにロードされた各種の値を用いて、例えば楕円曲線暗号化処理により署名検証処理を行う。そして、計算された署名と演算ＲＡＭに格納された署名とが一致しているか否かの結果フラグを、検査用外部出力端子から出力する。
【００４９】
以上のように、暗号エンジンを検査する際には、内部データのみを用いて暗号化処理を行い、さらに暗号化処理の結果と期待値との一致又は不一致を示す結果フラグを確認するだけで、暗号エンジンが正常に動作したか否かを判断できる。したがって、外部から暗号エンジンへ直接にデータやパラメータ等を入力するといったセキュリティ上の危険を冒すことなく、暗号エンジンの検査を安全に行うことができる。さらに、第２の例においては、検査をする者は、暗号エンジンの故障の有無を判断するにあたって、期待値も知る必要がないため、暗号化処理の結果をそのまま出力する第１の例に比べてセキュリティ性をさらに高めることができる。
【００５０】
また、署名生成処理と署名検証処理とをペアで行い、内部で答え合わせをすることで、２つの処理回路が正常に動作したか否かを１度の暗号コアの検査で調べることができるので、暗号エンジンの検査をより簡略化できる。
【００５１】
次に、上述の第２の例を変形した第３の例について図３を用いて説明する。この第３の例は、初期値を記憶する記憶手段が暗号エンジンの外にある点で、第２の例と異なるものである。
【００５２】
具体的には、第３の例は、各部を制御するＣＰＵと、このＣＰＵのワークエリアとして機能するメモリであるＲＡＭと、電気的に書き換え可能とされるメモリであるＥＥＰＲＯＭとを備えるＣＰＵ／ＲＡＭ／ＥＥＰＲＯＭと、暗号化処理を行う暗号化処理手段としての暗号エンジンとを備え、ＣＰＵ／ＲＡＭ／ＥＥＰＲＯＭの入力側、及びＣＰＵ／ＲＡＭ／ＥＥＰＲＯＭと暗号エンジンとの出力側が図示しない検査用外部入出力端子に接続されている。
【００５３】
暗号エンジンは、シーケンサーを持たせることで、ＣＰＵの助けが無くても暗号化処理を行えるように自立的に構成する。
【００５４】
また、この第３の例においては、各種プログラム等を記憶する読み出し専用のメモリであるＭＡＳＫ　ＲＯＭに、初期値として検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を予め記憶させておく。また、検査用データ、検査用パラメータ、検査用乱数及び検査用鍵に基づく暗号化処理の結果である期待値もＭＡＳＫ　ＲＯＭに予め記憶させておく。ＭＡＳＫ　ＲＯＭは、製造時にデータが書き込まれるＲＯＭであり、開発時に初期値を書き換える等の不正な改竄が不可能となる。これらの値を実際には運用されない検査専用の値としておけば、万が一何らかの情報が盗まれた場合であっても攻撃の対象になる等の問題を引き起こさないため安全である。
【００５５】
なお、ＭＡＳＫ　ＲＯＭに格納されたこれらの値は、ＣＰＵからアクセスできるレジスタ、メモリ領域等を制限することによりリバースエンジニアリングを困難とする等として極力外部から読みとれないようにしておく。
【００５６】
そして暗号エンジンの検査をする際には、検査用外部入力端子から検査モードのコマンドをＣＰＵ／ＲＡＭ／ＥＥＰＲＯＭに入力する。このとき、ＭＡＳＫ　ＲＯＭから初期値が読み出され、ＡＬＵ　ＲＡＭ等の図示しない演算ＲＡＭにこれらの値が転送される。検査モードのコマンドがＣＰＵを介して暗号エンジンに受け渡されると、暗号エンジンは演算ＲＡＭから初期値を読み出して暗号化処理を行う。さらに、暗号エンジンは、暗号化処理の結果と期待値とを比較し、検査用外部出力端子から一致又は不一致の結果フラグを出力する。そして検査をする者は、結果フラグによって暗号エンジンの故障の有無を判断する。
【００５７】
以上のように、暗号エンジンを検査する際には、内部データのみを用いて暗号化処理を行い、さらに暗号化処理の結果と期待値との一致又は不一致を示す結果フラグを確認するだけで、暗号エンジンが正常に動作したか否かを判断できる。したがって、外部から暗号エンジンへ直接にデータやパラメータ等を入力するといったセキュリティ上の危険を冒すことなく、暗号エンジンの検査を安全に行うことができる。さらに、検査をする者は、暗号エンジンの故障の有無を判断するにあたって、期待値も知る必要がないため、暗号化処理の結果をそのまま出力する第１の例に比べてセキュリティ性をさらに高めることができる。
【００５８】
なお、この第３の例の場合も、第２の例と同様にして署名生成と署名検証とをペアで行い、内部で答え合わせをすることで、２つの処理回路が正常に動作したか否かを１度の暗号コアの検査で調べることができる。
【００５９】
次に、第４の例として、ＦＰＧＡ（Ｆｉｅｌｄ　Ｐｒｏｇｒａｍｍａｂｌｅ　Ｇａｔｅ　Ａｒｒａｙ）に本発明の暗号化装置を適用した場合について、図４を参照しながら説明する。なお、以下では、説明の便宜上、このＦＰＧＡにおいては、暗号化装置が公開鍵暗号化方式による署名生成を行うものとする。
【００６０】
図４に示すように、ＦＰＧＡ内部には、演算用の内蔵ＲＡＭと、暗号化処理を行う暗号エンジンとを備え、暗号エンジンの入力側及び出力側が図示しない検査用外部入出力端子に接続されている。
【００６１】
暗号エンジンは、シーケンサーを持たせることで、ＣＰＵの助けが無くても暗号化処理を行えるように自立的に構成する。
【００６２】
ＦＰＧＡの内部には、例えばゲート等の図示しない記憶手段に、初期値として検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を予め記憶させておく。これらの値を実際には運用されない検査専用の値としておけば、万が一何らかの情報が盗まれた場合であっても攻撃の対象になる等の問題を引き起こさないため安全である。なお、記憶されたこれらの値は、ＣＰＵからアクセスできるレジスタ、メモリ領域等を制限することによりリバースエンジニアリングを困難とする等として極力外部から読みとれないようにしておく。
【００６３】
このような構成のＦＰＧＡを起動すると、内蔵ＲＡＭに上述した初期値が自動的にロードされる。
【００６４】
そして暗号エンジンの検査をする際には、先ず、図示しない検査用外部入力端子から検査モードのコマンドを暗号エンジンに与えると、ＦＰＧＡにロードされた初期値としての検査用データ、検査用パラメータ、検査用乱数及び検査用鍵としての検査用秘密鍵が暗号エンジンによって読み出される。次に、読み出された初期値を用いて暗号エンジンが実際に署名生成を行い、署名を生成する。署名生成に際しては、暗号エンジンが例えばＳＨＡ−１処理を行い検査用データのハッシュ値を算出し、算出されたハッシュ値と、検査用パラメータと、検査用乱数と、検査用秘密鍵とを用いて、例えば楕円曲線暗号化処理を行い、署名生成する。最後に、生成した署名を出力値として検査用外部出力端子から出力する。そして検査をする者は、出力値としての署名が正確であるか否かの答え合わせを行うことによって、暗号エンジンの故障の有無を判断する。
【００６５】
以上のように、暗号エンジンを検査する際には、内部データのみを用いて暗号化処理を行い、結果である出力値と期待値とを比較することで暗号エンジンが正常に動作したか否かを判断できる。このとき、検査をする者は、期待値のみを知っていればよい。したがって、ＦＰＧＡに内蔵された暗号化装置であっても、外部から暗号エンジンへ直接にデータやパラメータ等を入力するといったセキュリティ上の危険を冒すことなく、暗号エンジンの検査を安全に行うことができる。また、検査をする者が知っておく期待値は、その元になる検査用データ、検査用パラメータ等が外部からわからないので、鍵情報等の暗号エンジンの内部情報を取得しようとする攻撃者にとってあまり意味を持たない。
【００６６】
次に、第５の例として、実際の非接触型ＩＣカードに本発明の暗号化装置を適用した場合について図５を参照しながら説明する。
【００６７】
非接触型ＩＣカードに内蔵されたＩＣチップは、図５に示すように、各部を制御するＣＰＵ１０と、このＣＰＵ１０のワークエリアとして機能するメモリであるＲＡＭ２０と、各種プログラム等を記憶する読み出し専用のメモリであるＲＯＭ３０と、電気的に書き換え可能とされるメモリであるＥＥＰＲＯＭ４０と、電源回路用のアナログブロック５０と、暗号化処理を行う暗号コア６０と、公開鍵暗号化方式に用いられるいわゆるハッシュ値等を格納するＡＬＵ　ＲＡＭ７０と、暗号コア６０の故障の有無を検査するための専用の外部バスである検査用外部入出力端子８０と、ＣＰＵ１０と各部との間でデータの授受を行うためのバスであるＣＰＵインターフェース９０と、図示しない無線通信を行うためのＲＦ（Ｒａｄｉｏ　Ｆｒｅｑｕｅｎｃｙ）ブロックとを集積回路化したいわゆるＬＳＩ（Ｌａｒｇｅ　Ｓｃａｌｅ　Ｉｎｔｅｇｒａｔｉｏｎ）として構成される。
【００６８】
なお、以下では説明の便宜上、暗号化処理手段としての暗号コア６０は、公開鍵暗号化方式としていわゆる楕円曲線暗号化方式（Ｅｌｌｉｐｔｉｃ　Ｃｕｒｖｅ　Ｃｒｙｐｔｏｓｙｓｔｅｍ；ＥＣＣ）を採用し、認証やディジタル署名等に用いるハッシュ関数としていわゆるＳＨＡ−１（Ｓｅｃｕｒｅ　Ｈａｓｈ　Ａｌｇｏｒｉｔｈｍ−１）を用いるものとして説明する。
【００６９】
また、以下では、上述した第２の例のように、初期値として検査用データ、検査用パラメータ、検査用乱数及び検査用鍵としての検査用秘密鍵及び検査用公開鍵が暗号コア６０内のゲートに予め記憶されるとともに、暗号コア６０が暗号化処理の結果が正しいか否かを結果フラグとして出力する場合を例に挙げて説明する。
【００７０】
また、暗号コア６０の検査を具体的に説明するために、図６に示すように、図５に示す非接触ＩＣカードの各部を機能的に表現する。なお、同図においては、説明の便宜上、暗号コア６０を、楕円曲線暗号化処理及びＳＨＡ−１処理の機能を表すＥＣＣ／ＳＨＡ−１ブロック６０１と、トリプルＤＥＳ（Ｄａｔａ　Ｅｎｃｒｙｐｔｉｏｎ　Ｓｔａｎｄａｒｄ）暗号化処理の機能を表すＤＥＳブロック６０２とに大別して表現している。なお、ＤＥＳブロック６０２は、暗号化処理を行う際に必要となる鍵生成の過程等において用いる乱数を、共通鍵暗号化方式の１つであるいわゆるＤＥＳ（Ｄａｔａ　Ｅｎｃｒｙｐｔｉｏｎ　Ｓｔａｎｄａｒｄ）暗号化方式を用いて生成するブロックである。また、図６においては、図５に示す検査用外部入出力端子８０をテストブロック８０として表現している。
【００７１】
このような非接触型ＩＣカードに搭載された暗号コア６０の故障の有無を検査する際には、以下のようにして暗号コア６０により署名を生成し、生成した署名が正しいか否かを判断する。
【００７２】
先ず、検査用外部入出力端子８０から検査モードのコマンドをＣＰＵ１０を介して暗号コア６０に与えると、暗号コア６０の内部のゲートから初期値として検査用データ、検査用パラメータ、検査用乱数及び検査用鍵としての検査用秘密鍵が読み出され、ＡＬＵ　ＲＡＭ７０に格納される。
【００７３】
次に、ＡＬＵ　ＲＡＭ７０に格納された検査用データが読み出され、ＥＣＣ／ＳＨＡ−１ブロック６０１によるＳＨＡ−１処理によってハッシュ値が計算される。生成したハッシュ値はＡＬＵ　ＲＡＭ７０に格納される。
【００７４】
このとき、ＳＨＡ−１処理によって算出されたハッシュ値のＡＬＵ　ＲＡＭ７０上における格納場所を、後述する楕円曲線暗号化処理にて用いられるアドレスに予め設定しておくことにより、ＳＨＡ−１処理によるハッシュ値の算出後に、そのまま楕円曲線暗号化処理へと即座に移行することができることから、署名生成及び署名検証等の一連の動作の大半をハードウェアによって高速に実行することができる。したがって、暗号化装置においては、ＣＰＵの負荷を削減することができ、さらには、ソフトウェアの改竄等による攻撃に対する耐性も強固となる。通常、暗号化処理においては、途中の演算結果の授受をＣＰＵに委任した場合には、ソフトウェアを改竄することによって容易に成りすましを許容してしまう一方で、暗号化装置においては、このような演算途中におけるＣＰＵの介入による改竄を回避することができる。
【００７５】
次に、ハッシュ値、検査用パラメータ、検査用乱数及び検査用秘密鍵がＡＬＵＲＡＭ７０から読み出され、これらの値を用いてＥＣＣ／ＳＨＡ−１ブロック６０１によって楕円曲線暗号化処理が行われ、署名を生成する。
【００７６】
次に、得られた署名と、ＡＬＵ　ＲＡＭ７０に格納された期待値とを比較し、例えば１ビットの結果フラグを検査用外部入出力端子８０から出力する。
【００７７】
一方で、得られた署名は、引き続く署名検証処理で用いるために、ＡＬＵ　ＲＡＭ７０に格納される。
【００７８】
そして、検査用外部入出力端子８０から署名検証開始のコマンドがＣＰＵ１０を介してＥＣＣ／ＳＨＡ−１ブロック６０１に与えられると、ＡＬＵ　ＲＡＭ７０に格納された署名を用いた署名検証処理に移行する。
【００７９】
署名検証に際しては、先ず、検査用パラメータ、検査用乱数、ハッシュ値及び検査用鍵としての検査用公開鍵をＡＬＵ　ＲＡＭ７０にロードする。
【００８０】
次に、検査用パラメータ、検査用乱数、ハッシュ値及び検査用鍵としての検査用公開鍵がＡＬＵ　ＲＡＭ７０から読み出され、ＥＣＣ／ＳＨＡ−１ブロック６０１により、楕円曲線暗号化処理によって署名検証処理が行われる。
【００８１】
そして、計算された署名とＡＬＵ　ＲＡＭ７０に格納された署名とが一致しているか否かを示す結果フラグを、検査用外部入出力端子８０から出力する。
【００８２】
以上のように、暗号コア６０を検査する際には、内部データのみを用いて暗号化処理を行い、さらに暗号化処理の結果と期待値との一致又は不一致を示す結果フラグを確認するだけで、暗号コア６０が正常に動作したか否かを判断できる。すなわち、検査用外部入出力端子８０から暗号コア６０へ直接にデータやパラメータ等を入力するといったセキュリティ上の危険を冒すことなく、暗号コア６０の検査を安全に行うことができる。さらに、検査をする者は、暗号コア６０の故障の有無を判断するにあたって、期待値も知る必要がないため、暗号化処理の結果をそのまま出力する場合に比べてセキュリティ性をさらに高めることができる。
【００８３】
また、暗号コア６０の故障検出率を十分に確保できるテストパターンをシミュレーションで逆算しておき、このテストパターンを初期値としてゲートやＲＯＭ等の記憶手段に予め記憶させておくことが好ましい。通常、暗号コア６０の故障検出率を高めるために、非常に多くのテストパターンを外部から入力し、検査する必要があるが、シミュレーションで逆算されたテストパターンを初期値とすれば検査の回数を増やすことなく高い故障検出率が確保される。なお、レジスターやフラグ等は別途検査すればよい。したがって、本発明の暗号化装置を組み込んだ非接触型ＩＣカードは、量産にも十分に対応可能である。
【００８４】
また、本発明によればＩＣチップに設けられた検査用外部入出力端子８０からのデータの入出力による暗号コア６０の攻撃を回避できるので、検査用外部入出力端子８０のパターンカット等の製造後の加工が不要となる。
【００８５】
また、本発明の暗号化装置は上述のような構成をとるため、たとえＩＣテスタ等が不正な第三者によって盗難された場合であっても暗号機能の解析が不可能である。
【００８６】
なお、本発明は、上述した実施の形態に限定されるものではない。例えば、上述した実施の形態では、公開鍵暗号化方式として、楕円曲線暗号化方式を採用して説明したが、本発明は、例えばＲＳＡ暗号化方式等の他の公開鍵暗号化方式にも容易に適用することができる。
【００８７】
また、上述した実施の形態では、いわゆる公開鍵暗号化方式による暗号化処理を行う暗号化装置について説明したが、共通鍵暗号化方式による暗号化装置にも勿論適用することができる。
【００８８】
また、上述した実施の形態では、ハッシュ関数として、ＳＨＡ−１を用いるものとして説明したが、本発明は、例えばＭＤ５（Ｍｅｓｓａｇｅ　Ｄｉｇｅｓｔ　５）等の他のハッシュ関数にも容易に適用することができる。
【００８９】
さらにまた、上述した実施の形態では、暗号化装置の適用例として、ＦＰＧＡ及び非接触型ＩＣカードに内蔵されるＩＣチップを用いて説明したが、本発明は、同様の機能を要求する任意の装置やデバイスに適用することができるのは勿論である。
【００９０】
このように、本発明は、その趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【００９１】
【発明の効果】
以上の説明からも明らかなように、本発明に係る暗号化装置は、検査用データ、検査用パラメータ、検査用乱数及び検査用鍵を初期値として記憶手段に格納しておき、外部から検査モードの命令が入力されたらこれらを読み出して暗号化処理し、結果を出力する。検査をする者は、出力結果の正しい値である期待値を知っていれば、この期待値と出力された結果とを比較することで暗号化装置の故障の有無を判定できる。このため、検査用データ等の入出力を繰り返すことによる暗号化装置に対する攻撃を回避できる。したがって本発明によれば、検査の際に外部から検査用データ等を直接入力するといったセキュリティ上の危険を冒すことなく検査を確実に行うことが可能な暗号化装置を実現できる。
【図面の簡単な説明】
【図１】本発明の暗号化装置の第１の例であって、検査用回路の構成を示す図である。
【図２】本発明の暗号化装置の第２の例であって、検査用回路の構成を示す図である。
【図３】本発明の暗号化装置の第３の例であって、検査用回路の構成を示す図である。
【図４】本発明の第４の例であって、暗号化装置が組み込まれたＦＰＧＡの構成を示す図である。
【図５】本発明の第５の例であって、暗号化装置が組み込まれた非接触型ＩＣカードのＩＣチップの構成を示す図である。
【図６】図５に示す非接触型ＩＣカードのＩＣチップを機能的に表現したブロック図である。
【図７】従来の暗号化装置の検査用回路の構成を示す図である。
【符号の説明】
１０　　ＣＰＵ
２０　　ＲＡＭ
３０　　ＲＯＭ
４０　　ＥＥＰＲＯＭ
５０　　アナログブロック
６０　　暗号コア
７０　　ＡＬＵ　ＲＡＭ
８０　　検査用外部入出力端子（テストブロック）
９０　　インターフェース
【図１】
2004088632.tif 000003
【図２】
2004088632.tif 000004
【図３】
2004088632.tif 000005
【図４】
2004088632.tif 000006
【図５】
2004088632.tif 000007
【図６】
2004088632.tif 000008
【図７】
2004088632.tif 000009