(57)【要約】【課題】機能安全が考慮されたセキュアなデータ授受を行うことができる半導体装置を提供する。【解決手段】半導体装置は、認証処理を行うハードウェアセキュリティモジュール回路と、少なくともハードウェアセキュリティモジュール回路で処理される第１のデータに対してエラー検出処理を行うために使用されるエラー検出回路とを有する。エラー検出回路に関するメモリ領域は、少なくとも第１のデータに対してエラー検出処理が行われる際に、ハードウェアセキュリティモジュール回路からのみアクセス可能となるように構成されている。【選択図】図１
2019095969.tif 000002
【特許請求の範囲】
【請求項１】
認証処理を行うハードウェアセキュリティモジュール回路と、
少なくとも前記ハードウェアセキュリティモジュール回路で処理される第１のデータに対してエラー検出処理を行うために使用されるエラー検出回路と
を有し、
前記エラー検出回路に関するメモリ領域は、少なくとも前記第１のデータに対して前記エラー検出処理が行われる際に、前記ハードウェアセキュリティモジュール回路からのみアクセス可能となるように構成されている
半導体装置。
【請求項２】
前記エラー検出回路は、前記ハードウェアセキュリティモジュール回路に専用のハードウェア回路である
請求項１に記載の半導体装置。
【請求項３】
前記メモリ領域へのアクセス制御を行うアクセス制御回路
をさらに有する請求項１に記載の半導体装置。
【請求項４】
前記ハードウェアセキュリティモジュール回路は、前記メモリ領域に対し、前記アクセス制御回路による指定によらないで、データの読み出し又は書き込みが可能となるように構成されている
請求項３に記載の半導体装置。
【請求項５】
前記アクセス制御回路は、前記メモリ領域に対する、読出し、書込み及び実行のそれぞれの動作の可否の状態を設定し、
前記アクセス制御回路は、第１の状態から、前記第１の状態よりも可能な動作が多くない第２の状態に遷移するように、制御を行う
請求項３に記載の半導体装置。
【請求項６】
前記半導体装置の外部の機器から、前記半導体装置に転送対象データが転送される場合、
前記ハードウェアセキュリティモジュール回路は、前記メモリ領域を介して前記転送対象データに関する認証用データを前記機器から受信及び前記機器に送信することで、相互認証を行い、
前記エラー検出回路は、前記認証用データに対して、エラー検出処理を行い、
前記アクセス制御回路は、前記認証用データを前記メモリ領域に書き込む際又は前記メモリ領域から読み出す際に、アクセス制御を行う
請求項４に記載の半導体装置。
【請求項７】
前記ハードウェアセキュリティモジュール回路は、エラー検出処理の結果、エラーが検出されなかった前記第１のデータを前記メモリ領域に格納するときに、前記メモリ領域を書込み可能とする
請求項４に記載の半導体装置。
【請求項８】
前記ハードウェアセキュリティモジュール回路は、前記メモリ領域に格納した前記第１のデータに対してエラー検出処理を行うため、前記メモリ領域を読出し可能として、前記第１のデータを前記メモリ領域から読み出す
請求項４に記載の半導体装置。
【請求項９】
前記第１のデータを前記メモリ領域から読み出し前記エラー検出処理を行ってエラーが検出された場合に、前記ハードウェアセキュリティモジュール回路は、前記メモリ領域を書込み可能且つ実行不可として、前記メモリ領域に書き込んだ前記第１のデータを消去する
請求項８に記載の半導体装置。
【請求項１０】
前記第１のデータには、セッション情報及び乱数の少なくとも一方が付加され、
前記ハードウェアセキュリティモジュール回路は、前記セッション情報又は乱数が改竄された場合に、データ授受シーケンスが継続しないように構成されている
請求項３に記載の半導体装置。
【請求項１１】
前記機器から、前記転送対象データが分割されて転送される場合、
前記ハードウェアセキュリティモジュール回路は、前記転送対象データの転送前に、前記機器と相互認証を行い、
前記ハードウェアセキュリティモジュール回路は、前記機器によって前記転送対象データの全体に対してエラー検出用データの付加及び認証処理がなされた前記認証用データを、分割して受信し、
前記ハードウェアセキュリティモジュール回路は、前記転送対象データの転送後に、前記機器と相互認証を行う
請求項６に記載の半導体装置。
【請求項１２】
前記ハードウェアセキュリティモジュール回路は、前記転送対象データの転送後、前記機器の認証が成功した場合に、分割された暗号データを結合して前記転送対象データを復号する
請求項１１に記載の半導体装置。
【請求項１３】
前記認証用データは、暗号化されないで前記機器から送信され、
前記ハードウェアセキュリティモジュール回路は、前記相互認証を、暗号化及び復号を伴わないで行う
請求項６に記載の半導体装置。
【請求項１４】
前記半導体装置の外部の機器と通信可能なサーバから、前記機器を介して、前記半導体装置に対して、前記半導体装置と前記機器との通信のみに用いられる鍵情報が発行され、
前記ハードウェアセキュリティモジュール回路は、前記メモリ領域を介して前記鍵情報に関する認証用データを前記機器から受信及び前記機器に送信することで、前記サーバ及び前記機器と相互認証を行い、
前記エラー検出回路は、前記認証用データに対して、エラー検出処理を行い、
前記アクセス制御回路は、前記認証用データを前記メモリ領域に書き込む際又は前記メモリ領域から読み出す際に、アクセス制御を行う
請求項４に記載の半導体装置。
【請求項１５】
第１の機器と、
前記第１の機器と通信可能な第２の機器と
を有し、
前記第１の機器から前記第２の機器に対して、転送対象データが転送され、
前記第２の機器は、
認証処理を行うハードウェアセキュリティモジュール回路と、
少なくとも前記ハードウェアセキュリティモジュール回路で処理される前記転送対象データに対してエラー検出処理を行うために使用されるエラー検出回路と
を有し、
前記エラー検出回路に関するメモリ領域は、少なくとも前記転送対象データに対して前記エラー検出処理が行われる際に、前記ハードウェアセキュリティモジュール回路からのみアクセス可能となるように構成されている
認証システム。
【請求項１６】
前記第２の機器は、
前記メモリ領域へのアクセス制御を行うアクセス制御回路
をさらに有し、
前記ハードウェアセキュリティモジュール回路は、前記メモリ領域に対し、前記アクセス制御回路による指定によらないで、データの読み出し又は書き込みが可能となるように構成されている
請求項１５に記載の認証システム。
【請求項１７】
前記ハードウェアセキュリティモジュール回路は、前記メモリ領域を介して前記転送対象データに関する認証用データを前記第１の機器から受信及び前記第２の機器に送信することで、相互認証を行い、
前記エラー検出回路は、前記認証用データに対して、エラー検出処理を行い、
前記アクセス制御回路は、前記認証用データを前記メモリ領域に書き込み又は前記メモリ領域から読み出す際に、アクセス制御を行う
請求項１６に記載の認証システム。
【請求項１８】
第１のデータに対して、認証処理を行い、
前記第１のデータに対してエラー検出処理を行い、
前記エラー検出処理に関するメモリ領域に対してアクセス制御がなされ、
前記第１のデータに対してエラー検出処理が行われる際に、前記メモリ領域に対し、前記アクセス制御による指定によらないで、前記認証処理を行う回路がデータの読み出し又は書き込みが可能となるようにする
認証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置、認証システム及び認証方法に関し、例えばハードウェアセキュリティモジュール回路を有する半導体装置、認証システム及び認証方法に関する。
【背景技術】
【０００２】
機器間でデータを授受する場合においてセキュアなデータロード方式が提案されている。例えば、特許文献１は、公開鍵・秘密鍵によるデジタル署名及びＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ；メッセージ認証コード）値をデータに付加したデータ構造と、本構造を用いてデータロード時に認証処理又はデータ改竄有無確認を実施する方法とを開示する。また、特許文献２は、車載ネットワークでの不正なフレームを検知するための検知ルールの更新を可能とする技術を開示する。
【０００３】
また、誤り符号訂正技術を取り入れた暗号復号方式が提案されている。特許文献３は、誤り符号訂正技術を取り入れた暗号復号方式を開示する。特許文献３においては、平文に誤り符号化処理を施し、この誤り符号化データに対して訂正可能な範囲でのランダムビットエラーを起こした後で暗号化して暗号文を作成する。また、この暗号文を復号し、復号化後に誤り符号訂正を施して、平文を得る。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４８５６０８０号公報
【特許文献２】特開２０１６−１３４９１４号公報
【特許文献３】特開２００２−  ７７１３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の特許文献１及び２にかかる技術では、通信におけるデータ誤り又はハードウェア故障によるデータ誤りに対する有無確認又は誤り符号といった、機能安全面への対応について考慮されていない。また、上記の特許文献３にかかる技術では、誤り符号訂正は暗号解読法への対策を目的として導入されており、機能安全面への対応のためになされたわけではない。したがって、上記の特許文献にかかる技術では、機能安全が考慮されたセキュアなデータ授受を行うことができないおそれがあった。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、半導体装置は、認証処理を行うハードウェアセキュリティモジュール回路と、少なくとも前記ハードウェアセキュリティモジュール回路で処理される第１のデータに対してエラー検出処理を行うために使用されるエラー検出回路とを有し、前記エラー検出回路に関するメモリ領域は、少なくとも前記第１のデータに対して前記エラー検出処理が行われる際に、前記ハードウェアセキュリティモジュール回路からのみアクセス可能となるように構成されている半導体装置である。
【０００８】
なお、上記実施の形態の装置を方法やシステムに置き換えて表現したもの、該装置または該装置の一部の処理をコンピュータに実行せしめるプログラム、該装置を備えた撮像装置なども、本態様としては有効である。
【発明の効果】
【０００９】
前記一実施の形態によれば、機能安全が考慮されたセキュアなデータ授受を行うことができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１にかかる半導体装置のハードウェア構成を示す図である。
【図２】実施の形態１にかかるハードウェアセキュリティモジュール回路のハードウェア構成を示す図である。
【図３】実施の形態１にかかる、アクセス制御回路を有する半導体装置を示す図である。
【図４】実施の形態１にかかる、アクセス制御回路を有する半導体装置を示す図である。
【図５】図３及び図４に示されたアクセス制御回路に設けられる属性制御ステートマシンを示す図である。
【図６】図５に示した属性制御ステートマシンによって実現される状態遷移図である。
【図７】（Ｒ，Ｗ，Ｅ）属性制御機構とメモリ空間との接続構成の一例を示す。
【図８】実施の形態１にかかる、ハードウェアセキュリティモジュール回路、エラー検出回路に設けられたアクセス制御回路、及びＣＰＵに設けられたアクセス制御回路の接続構成を示す図である。
【図９】図４に示した、複数の構成要素にアクセス制御回路が設けられる場合の、データ読出しユニット及び命令フェッチユニットの構成を示す図である。
【図１０】実施の形態１にかかるデータ授受シーケンスが行われる認証システムを示す図である。
【図１１】実施の形態１にかかるデータ授受シーケンスを示すシーケンス図である。
【図１２】実施の形態１にかかるデータ授受シーケンスを示すシーケンス図である。
【図１３】実施の形態１にかかるデータ授受シーケンスを示すシーケンス図である。
【図１４】実施の形態１の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図１５】実施の形態１の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図１６】実施の形態１の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図１７】実施の形態１の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図１８】実施の形態１の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図１９】実施の形態１の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図２０】実施の形態２にかかる認証システムにおいて実行されるデータ授受シーケンスである。
【図２１】実施の形態２にかかる認証システムにおいて実行されるデータ授受シーケンスである。
【図２２】実施の形態２にかかる認証システムにおいて実行されるデータ授受シーケンスである。
【図２３】実施の形態２の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図２４】実施の形態２の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図２５】実施の形態２の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図２６】実施の形態２の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図２７】実施の形態２の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図２８】実施の形態２の変形例にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図２９】実施の形態３にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図３０】実施の形態３にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図３１】実施の形態３にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図３２】実施の形態３にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図３３】実施の形態３にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【図３４】実施の形態３にかかる認証システムにおいて実行されるデータ授受シーケンスを示すシーケンス図である。
【発明を実施するための形態】
【００１１】
以下、実施形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１２】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１３】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１４】
また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
【００１５】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１６】
（実施の形態の概要）
本実施の形態の説明に先立って、本実施の形態の概要について説明する。
機能安全対応では、授受データの保護が重要である。つまり、エラーに対して授受データが破壊されないようにすることが望まれる。したがって、データ送信側での適切なＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）又はＥＣＣ（Ｅｒｒｏｒ−Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）の付加（エラー検出用データの付加）、及び、データ受信側での適切なＣＲＣ又はＥＣＣのチェックが必要となる。
【００１７】
以下に説明する実施の形態では、データ受信側でのＣＲＣ又はＥＣＣの処理をＨＳＭ（Ｈａｒｄｗａｒｅ  Ｓｅｃｕｒｉｔｙ  Ｍｏｄｕｌｅ；ハードウェアセキュリティモジュール）以外から隠蔽することで、改竄耐性に加えて秘匿性まで保証可能なデータ授受シーケンスを実現可能である。また、本実施の形態では、ＨＳＭ専用のＣＲＣ又はＥＣＣの処理機構が、ソフトウェア又はハードウェアで設けられている。なお、このようなＨＳＭ専用の処理機構が設けられていない場合、機能安全対応で改竄耐性を持つデータ授受シーケンスが構成可能であるが、秘匿耐性が実現できないおそれがある。これに対し、本実施の形態では、ＨＳＭに専用のＣＲＣ又はＥＣＣの処理機構をソフトウェア又はハードウェアにより具備する構成、及び当該構成により機能安全対応で改竄耐性及び秘匿性を持つデータ授受シーケンスを開示する。
【００１８】
ここで、授受対象のデータはプログラムを含むものとする。また、以下に示すデータ授受シーケンスは、機能安全対応のセキュアなデータの格納及びプログラムの格納を含み、特に、プログラム保護のための、実行可能であるが読出し不可なメモリ領域への格納を含む。
【００１９】
また、本実施の形態では、データ格納において、格納先の（Ｒ，Ｗ，Ｅ）属性（アクセス属性）の指定が、Ｗ不可やＲ不可となっている場合であっても、機能安全対応かつセキュアな書込みが可能である。ここで、Ｒ，Ｗ，Ｅは下記を表す。
Ｒ：読出し可否の指定：  １で可能、０で不可
Ｗ：書込み可否の指定：  １で可能、０で不可
Ｅ：実行可否の指定：    １で可能、０で不可
つまり、アクセス属性は、そのメモリ領域に格納されたデータの読出しが可能であるか否か、そのメモリ領域にデータの書込みが可能であるか否か、及び、そのメモリ領域に格納されたデータ（プログラム）の実行が可能であるか否か、を示している。
【００２０】
（Ｒ，Ｗ，Ｅ）属性指定は、例えばＵＮＩＸ（登録商標）又はＬｉｎｕｘ（登録商標）などが提供するソフトウェアでの属性設定変更手段を用いてもよいし、以下に説明する本実施の形態における（Ｒ，Ｗ，Ｅ）属性制御機構を用いてもよい。特に、ソフトウェアで（Ｒ，Ｗ，Ｅ）属性の設定変更が可能な場合は、チャレンジレスポンスなどの適切な暗号認証を伴う（Ｒ，Ｗ，Ｅ）属性変更機構であることが望ましい。
【００２１】
本実施の形態において、アクセス制御機構の利用を前提とする記述があるが、アクセス制御機構としては、例えば、ＳＥＬｉｎｕｘが提供する強制アクセス制御機構での実現であってもよいし、ＡＴＭｅｇａ１２８が提供するようなメモリ領域毎のロックビット設定による方式であってもよい。また、本実施の形態で開示する（Ｒ，Ｗ，Ｅ）属性制御機構と既存のアクセス制御機構の併用による実現であってもよい。特に、ソフトウェアでアクセス制御設定変更が可能な場合は、チャレンジレスポンスなどの適切な暗号認証を伴うアクセス制御機構であることが望ましい。
【００２２】
また、本実施の形態において、（Ｒ，Ｗ，Ｅ）属性及びアクセス制御の設定は、ＨＳＭに内蔵されたＣＰＵ又は制御ステートマシンによって行われてもよいし、ＨＳＭの外部の非セキュア部に配置されたＣＰＵによって行われてもよい。いずれの場合であっても、この設定を実行するソフトウェアは、その実行に先立ってセキュアブートなどで改竄がないことが確認されているものとする。なお、ＨＳＭでの実行の場合は、ＨＳＭに内蔵されたＣＰＵ又は制御ステートマシンが実行するものとする。
【００２３】
（実施の形態１）
図１は、実施の形態１にかかる半導体装置１のハードウェア構成を示す図である。半導体装置１は、例えば、車両等に搭載されるＭＣＵ（Ｍｉｃｒｏ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ；マイクロコントローラ）である。半導体装置１は、ＣＰＵ２と、プログラムメモリ３と、エラー検出回路４と、入出力インタフェース５（入出力Ｉ／Ｆ）と、ワークメモリ６と、ハードウェアセキュリティモジュール回路１０（ＨＳＭ）とを有する。ＣＰＵ２、プログラムメモリ３、エラー検出回路４、入出力インタフェース５、ワークメモリ６、及びハードウェアセキュリティモジュール回路１０は、バス９を介して互いに接続されている。なお、半導体装置１のハードウェアセキュリティモジュール回路１０以外の構成要素（特にメモリ領域）を、非セキュア部と称することがある。
【００２４】
ＣＰＵ２は、演算処理及びプログラムの実行処理を行う。プログラムメモリ３は、ＣＰＵ２で実行されるプログラムを格納する。ワークメモリ６は、プログラムの実行などの処理を実行する際に用いられる。入出力インタフェース５は、外部との入出力を行うための処理を行う。なお、入出力インタフェース５には、パケットに対して、プロトコルで規定されるＣＲＣ／ＥＣＣを処理するための機能が具備されているものとする。
【００２５】
エラー検出回路４は、半導体装置１で処理されるデータに対してエラー検出処理（ＣＲＣ／ＥＣＣ処理）を行う。具体的には、エラー検出回路４は、半導体装置１の内部のバス９上の通信データに対するＣＲＣ／ＥＣＣの生成及び付加（エラー検出用データの生成及び付加）、及びＣＲＣ／ＥＣＣの処理（チェック）を行う。また、エラー検出回路４は、入出力インタフェース５とやり取りするデータに対するＣＲＣ／ＥＣＣの生成及び付加、及びＣＲＣ／ＥＣＣの処理（チェック）を行う。
【００２６】
また、半導体装置１は、ハードウェアセキュリティモジュール回路１０に専用の専用エラー検出回路８を有してもよい。専用エラー検出回路８は、ハードウェアセキュリティモジュール回路１０とのみ接続されている。したがって、専用エラー検出回路８には、ハードウェアセキュリティモジュール回路１０のみが、アクセス可能である。言い換えると、専用エラー検出回路８は、ハードウェアセキュリティモジュール回路１０に専用のハードウェア回路である。専用エラー検出回路８は、エラー検出回路４と実質的に同様の機能を有する。
【００２７】
したがって、専用エラー検出回路８は、ハードウェアセキュリティモジュール回路１０で処理されるデータ（第１のデータ）に対してエラー検出処理を行う。つまり、専用エラー検出回路８は、ハードウェアセキュリティモジュール回路１０におけるセキュリティ関連処理で実行されるＣＲＣ／ＥＣＣ処理（エラー検出処理）に用いられる。そして、専用エラー検出回路８に関するメモリ領域は、ハードウェアセキュリティモジュール回路１０によってＣＲＣ／ＥＣＣ処理が実行されているとき、ハードウェアセキュリティモジュール回路１０からのみアクセス可能となるように構成されている。
【００２８】
ここで、専用エラー検出回路８が配置されていない場合、エラー検出回路４が、ハードウェアセキュリティモジュール回路１０におけるセキュリティ関連処理で実行されるＣＲＣ／ＥＣＣ処理（エラー検出処理）に用いられ得る。つまり、実施の形態１にかかるエラー検出回路４は、少なくともハードウェアセキュリティモジュール回路１０で処理されるデータ（第１のデータ）に対してエラー検出処理を行う。この場合、ハードウェアセキュリティモジュール回路１０によってＣＲＣ／ＥＣＣ処理が実行されているとき、ＣＰＵ２は、適切なアクセス制御により、エラー検出回路４に関するデータへのアクセスが禁止されているように構成されている。なお、アクセス制御は、ハードウェアセキュリティモジュール回路１０によって、後述する授受シーケンス内で設定されることが望ましい。
【００２９】
図２は、実施の形態１にかかるハードウェアセキュリティモジュール回路１０のハードウェア構成を示す図である。ハードウェアセキュリティモジュール回路１０は、ＣＰＵ１１と、入出力インタフェース１２（入出力Ｉ／Ｆ）と、暗号処理部１３と、ワークメモリ１４と、コード用不揮発性メモリ１５と、データ用不揮発性メモリ１６とを有する。
【００３０】
ＣＰＵ１１は、演算処理を行う。具体的には、ＣＰＵ１１は、後述するデータ授受シーケンスで実行される処理（アクセス制御等）を行う。なお、ハードウェアセキュリティモジュール回路１０は、ＣＰＵ１１を有しなくてもよい。この場合、ハードウェアセキュリティモジュール回路１０は、何らかの制御ステートマシンを有してもよい。
【００３１】
入出力インタフェース１２は、外部との入出力を行うための処理を行う。暗号処理部１３は、暗号化、復号化又は認証処理等の暗号処理を行う。また、暗号処理部１３は、署名検証を行うための処理を行ってもよい。ワークメモリ１４は、ハードウェアセキュリティモジュール回路１０における処理を実行する際に用いられる。コード用不揮発性メモリ１５は、ハードウェアセキュリティモジュール回路１０で実行されるコードを格納する。データ用不揮発性メモリ１６は、ハードウェアセキュリティモジュール回路１０における処理で用いられるデータを格納する。
【００３２】
なお、コード用不揮発性メモリ１５及びデータ用不揮発性メモリ１６は、それらの一部の領域がハードウェアセキュリティモジュール回路１０の外部から何らの認証なしにアクセス可能に構成されていてもよい。つまり、コード用不揮発性メモリ１５及びデータ用不揮発性メモリ１６の一部の領域は、保護されていなくても（セキュアでなくても）よい。言い換えると、コード用不揮発性メモリ１５及びデータ用不揮発性メモリ１６は、それらの一部の領域が、セキュリティ領域として、ハードウェアセキュリティモジュール回路１０の管理下となるように配置されていてもよい。
【００３３】
ここで、実施の形態１にかかる動作の概要について説明する。
半導体装置１が専用エラー検出回路８を有している場合、専用エラー検出回路８は、ハードウェアセキュリティモジュール回路１０内で復号されたデータに付加されたＥＣＣ／ＣＲＣ値を用いたＥＣＣ／ＣＲＣチェック処理を行う。また、専用エラー検出回路８は、ハードウェアセキュリティモジュール回路１０内での暗号化対象データにＥＣＣ／ＣＲＣ値を生成（発行）し、生成されたＥＣＣ／ＣＲＣ値を暗号化対象データに付加して暗号化を行う。
【００３４】
一方、半導体装置１が専用エラー検出回路８を有していない場合、バス９に接続されたエラー検出回路４が、上述した専用エラー検出回路８の処理と同様の処理を行う。ここで、ハードウェアセキュリティモジュール回路１０での復号データを対象としたＥＣＣ／ＣＲＣチェックは、エラー検出回路４がハードウェアセキュリティモジュール回路１０のみからアクセス可能となるように制御することで、実現され得る。同様に、暗号化処理は、ハードウェアセキュリティモジュール回路１０からのみアクセス可能となるように制御することで、実現され得る。なお、アクセス制御の詳細については後述する。
【００３５】
機能安全対応では、授受データの保護が重要であり、したがって、データ送信側での適切なＣＲＣ又はＥＣＣの付加と、データ受信側での適切なＣＲＣ又はＥＣＣのチェックとが必要となる。このとき、これらの処理を行うエラー検出回路は、ハードウェアセキュリティモジュール回路１０以外からのアクセスが禁止されていることで、セキュリティ（秘匿性）が向上する。したがって、本実施の形態にかかる半導体装置１は、機能安全が考慮されたセキュアなデータ授受を行うことができる。
【００３６】
ここで、専用エラー検出回路８を具備する半導体装置１では、ハードウェア構成を拡張することで、上記の処理を実現可能としている。したがって、ＣＲＣ／ＥＣＣ付加及びＣＲＣ／ＥＣＣチェック（エラー検出処理）の際に、専用エラー検出回路８は、ハードウェアセキュリティモジュール回路１０以外からのアクセスが禁止される。したがって、本実施の形態にかかる半導体装置１は、機能安全が考慮されたセキュアなデータ授受を行うことができる。そして、専用エラー検出回路８を設けることによって、後述するようなアクセス制御を行うことが不要となる。したがって、アクセス制御を行う場合と比較して処理内容が簡素となる。
【００３７】
また、半導体装置１が専用エラー検出回路８を具備しない場合、つまりハードウェア構成を拡張しない場合、エラー検出回路４は、適切なアクセス制御によってハードウェアセキュリティモジュール回路１０からのみアクセス可能とする。これにより、ＣＲＣ／ＣＣ付加及びＣＲＣ／ＥＣＣチェック（エラー検出処理）の際に、エラー検出回路４は、ハードウェアセキュリティモジュール回路１０以外からのアクセスが禁止される。したがって、本実施の形態にかかる半導体装置１は、機能安全が考慮されたセキュアなデータ授受を行うことができる。また、アクセス制御を行うことで、専用エラー検出回路８を設けることが不要となるので、専用エラー検出回路８を設ける場合と比較して、半導体装置１のハードウェア構成が簡素となる。つまり、エラー検出回路４が、ハードウェアセキュリティモジュール回路１０以外に関する処理も行い得る構成のままで、セキュリティの低下を抑制しつつ、機能安全に対応することができる。
【００３８】
（アクセス制御）
次に、アクセス制御について説明する。
図３及び図４は、実施の形態１にかかる、アクセス制御回路を有する半導体装置１を示す図である。アクセス制御回路２０は、保護が要求される構成要素に設けられる。また、アクセス制御回路４０は、ＣＰＵ２（バスマスタ）に設けられる。図３に示す半導体装置１は、エラー検出回路４のみにアクセス制御回路２０が設けられるように構成されている。言い換えると、図３に示す例では、エラー検出回路４のみが、アクセス制御（強制アクセス制御）の対象となっている。
【００３９】
一方、図４に示す半導体装置１は、エラー検出回路４だけでなく複数の構成要素にアクセス制御回路２０（アクセス制御回路２０Ａ〜２０Ｄ）が設けられるように構成されている。言い換えると、図４に示す例では、エラー検出回路４を含む複数の構成要素が、アクセス制御（強制アクセス制御）の対象となっている。なお、図４では、全ての構成要素にアクセス制御回路２０が設けられているが、保護の必要がない構成要素には、アクセス制御回路２０を設けなくてもよい。なお、図４に示す例では、アクセス制御回路２０の配置数に応じてアクセス制御回路４０を構成してもよい。なお、ＣＰＵ２（バスマスタ）が複数ある場合は、それぞれのＣＰＵ２（バスマスタ）にアクセス制御回路４０を設けてもよい。
【００４０】
図５は、図３及び図４に示されたアクセス制御回路２０に設けられる属性制御ステートマシン２２を示す図である。図５に示した属性制御ステートマシン２２は、上述した（Ｒ，Ｗ，Ｅ）属性制御機構の一例である。属性制御ステートマシン２２は、（Ｒ，Ｗ，Ｅ）値をレジスタ設定するためのステートマシンである。属性制御ステートマシン２２は、ＣＰＵ２等から（Ｒ＿ｉｎ，Ｗ＿ｉｎ，Ｅ＿ｉｎ）の３ｂｉｔ入力信号を受けると状態遷移を実施し、遷移先の状態を（Ｒ＿ｏｕｔ，Ｗ＿ｏｕｔ，Ｅ＿ｏｕｔ）として３ｂｉｔ信号を出力する。なお、（Ｒ＿ｉｎ，Ｗ＿ｉｎ，  Ｅ＿ｉｎ）の値は、ＣＰＵ２等からのレジスタ設定で更新され得る。
【００４１】
また、属性制御ステートマシン２２は、状態遷移が発生する度に不揮発性メモリに更新された状態を格納するハードウェア制御機構である状態保持レジスタを有する。電源遮断又はリセット等が発生すると、状態保持レジスタの値は（０，０，０）に一旦初期化される。一方、電源が投入されると、状態保持レジスタは、発生する起動信号を検知し、不揮発性メモリへ格納した値を読み出し設定する。なお、状態格納読出し先の不揮発性メモリ領域へのアクセス保護を目的として、本機構及び不揮発性メモリ領域を、ハードウェアセキュリティモジュール回路１０からのみアクセス可能としてもよい。
【００４２】
図６は、図５に示した属性制御ステートマシン２２によって実現される状態遷移図である。各状態Ｓ０〜Ｓ７の状態（Ｒ，Ｗ，Ｅ）を、以下に示す。なお、Ｒ，Ｗ，Ｅは、それぞれ、「１」で実行可能であり、「０」で実行不可である。
Ｓ０：（１，１，１）：全実行可能
Ｓ１：（１，１，０）：読出し可能及び書込み可能
Ｓ２：（１，０，１）：読出し可能及び実行可能
Ｓ３：（１，０，０）：読出し可能
Ｓ４：（０，１，０）：書込み可能
Ｓ５：（０，０，１）：実行可能
Ｓ６：（０，０，０）：全実行不可
Ｓ７：（０，１，１）：書込み可能及び実行可能
【００４３】
ここで、状態Ｓ０が初期状態である。また、状態Ｓ７では、攻撃者等がプログラムを書き込んでそのプログラムを実行すると、システムに多大な影響を及ぼすおそれがある。したがって、状態Ｓ７には遷移しない。また、状態Ｓ６にも遷移しない。なお、状態Ｓ５では、プログラム（命令）を実行するためだけにプログラム（命令）を読み出すこと（フェッチ）は可能である。
【００４４】
図６に示すように、Ｓ０から、Ｓ０，Ｓ１，Ｓ２，Ｓ３，Ｓ４，Ｓ５に遷移し得る。Ｓ１から、Ｓ１，Ｓ２，Ｓ３，Ｓ５に遷移し得る。Ｓ２から、Ｓ１，Ｓ２，Ｓ４，Ｓ５に遷移し得る。Ｓ３から、Ｓ３，Ｓ４，Ｓ５に遷移し得る。Ｓ４から、Ｓ３，Ｓ４，Ｓ５に遷移し得る。そして、Ｓ５からは、Ｓ５にのみ遷移し得る。つまり、Ｓ１とＳ２との間での遷移及びＳ３とＳ４と間での遷移が認められている以外は、より厳しい（つまり可能な動作の多くない）（Ｒ，Ｗ，Ｅ）属性への変更のみが許容されている。なお、図６では、Ｓ１とＳ２との間での遷移が認められているとしたが、Ｓ１とＳ２との間での遷移は、認められていなくてもよい。
【００４５】
このように、本実施の形態にかかる属性制御ステートマシン２２は、電源遮断又はリセット後の状態再設定により、より厳しい（Ｒ，Ｗ，Ｅ）属性に一旦遷移すると、それより厳しい属性へのみ遷移可能である。つまり、本実施の形態にかかる属性制御ステートマシン２２は、第１の状態から、第１の状態よりも可能な動作が多くない第２の状態に遷移可能である。したがって、堅牢なハードウェア機構となっている。さらに、この属性制御ステートマシン２２を有するアクセス制御回路２０を、高々メモリ領域の数だけ配置することで、保護が必要となる各メモリ領域の（Ｒ，Ｗ，Ｅ）属性制御を行うことが可能となる。例えば、Ｂｏｏｔｌｏａｄｅｒなどクリティカルなソフトウェアを配置する不揮発性メモリ領域を、本実施の形態にかかるアクセス制御回路２０によって、ソフトウェア書込み（Ｓ１ｏｒＳ４）→読出しによる書込み確認（Ｓ１ｏｒＳ３）→実行のみ許可（Ｓ５）と制御することで、ソフトウェアの盗用及びソフトウェアによる攻撃を抑制することが可能となる。
【００４６】
図７は、（Ｒ，Ｗ，Ｅ）属性制御機構とメモリ空間との接続構成の一例を示す。図７に示す接続構成は、図５に示した属性制御ステートマシン２２の信号に加えて、以下に示す信号を用いて構成される。
【００４７】
Ｄ＿ｉｎは、メモリ（保護対象のメモリ領域）への入力データ信号である。Ｄ＿ｏｕｔは、メモリからの出力データ信号である。Ｄｅｃ＿Ａｄｄｒ［ｉ］は、メモリ内で生成するアドレスのデコード信号である。ここで、Ｄｅｃ＿Ａｄｄｒ［ｉ］が「１」であるとき、入力アドレスが該当メモリエレメント［ｉ］を指し示すことを示す。Ｄｅｃ＿Ａｄｄｒ［ｉ］が「０」であるとき、入力アドレスが該当メモリエレメント［ｉ］を指し示さないことを示す。
【００４８】
また、Ｒ＿ｄｅｃ：＝Ｄｅｃ＿Ａｄｄｒ［ｉ］  ∧  Ｒ＿ｏｕｔである。また、Ｗ＿ｄｅｃ：＝Ｄｅｃ＿Ａｄｄｒ［ｉ］  ∧  Ｗ＿ｏｕｔである。また、Ｒ＿ｏｕｔ’は、複数の対象メモリ領域のうち、アドレス上位ビット列などで識別される領域に付随するＲ＿ｏｕｔであるが、（Ｒ，Ｗ，Ｅ）属性の指定対象外の場合は「１」となる信号である。Ｅ＿ｏｕｔ’は、複数の対象メモリ領域のうち、アドレス上位ビット列などで識別される領域に付随するＥ＿ｏｕｔであるが、（Ｒ，Ｗ，Ｅ）属性の指定対象外の場合は「１」となる信号である。
【００４９】
図７に記載された構成により、Ｗ＿ｏｕｔが１のときのみ、セレクタ２３によって、メモリセル／レジスタ２４内の、アドレスで指定された対象メモリ領域内へデータが書き込まれる。また、Ｒ＿ｏｕｔ及びＥ＿ｏｕｔの少なくとも一方が１のときのみ、メモリセル／レジスタ２４から、セレクタ２５によって、データの読み出しがなされる。
【００５０】
読み出されたデータは、バス９を介して、例えばＣＰＵ２等に転送される。このとき、ＣＰＵ２に設けられたデータ読出しユニット４１は、Ｒ＿ｏｕｔが１のとき（又は（Ｒ，Ｗ，Ｅ）属性の指定対象外の場合）のみ、セレクタ４２によってデータの読み出しが可能である。また、命令フェッチユニット４３は、Ｅ＿ｏｕｔが１のとき（又は（Ｒ，Ｗ，Ｅ）属性の指定対象外の場合）のみ、セレクタ４４によって命令フェッチが可能である。このとき、ＣＰＵ２は、読出しデータを命令として実行することが可能である。ここで、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）などのバスマスタを用いた場合でも同様なデータ読み出し制御がなされる。
【００５１】
このように、図６及び図７に示した構成を組み合わせることで、（Ｒ，Ｗ，Ｅ）属性にあった実行のみが可能となる。つまり、図６及び図７に示した構成を組み合わせることで、保護が必要となる各メモリ領域の（Ｒ，Ｗ，Ｅ）属性制御が可能となり、適切なアクセス権限を持つハードウェア又はソフトウェアのみが、保護が必要となるメモリ領域への読出し、実行、書込み、の動作を行うことが可能となる。上述したように、一旦、より厳しいアクセス制限が設定されると、（Ｒ，Ｗ，Ｅ）属性制御への入力信号または入力レジスタ設定変更では、より柔軟なアクセス制限には戻せない。そして、このアクセス制限が、電源遮断又はリセットを実施しても維持され得る。仮に、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が、クラックされ、不正に特権昇格がなされ、悪意あるソフトウェアが実行されたとしても、（Ｒ，Ｗ，Ｅ）属性制御が定めた保護対象領域のアクセス制御に従ったアクセスしか、悪意あるソフトウェアは実行できない。したがって、適切なアクセス制御でのメモリ保護が可能となる。したがって、この図６及び図７に示した構成を図３に適用することで、ハードウェアセキュリティモジュール回路１０のみからエラー検出回路４へのアクセスが実現可能となる。以下、説明する。
【００５２】
図８は、実施の形態１にかかる、ハードウェアセキュリティモジュール回路１０、エラー検出回路４に設けられたアクセス制御回路２０、及びＣＰＵ２に設けられたアクセス制御回路４０の接続構成を示す図である。図８に示す接続構成は、図５に示した属性制御ステートマシン２２の信号に加えて、以下に示す信号を用いて構成される。
【００５３】
Ｄ＿ｉｎは、セレクタ２３に入力される、メモリへの入力データ信号である。Ｄ＿ｏｕｔは、セレクタ２５から出力される、メモリからの出力データ信号である。また、Ｒ＿ＨＳＭは、ハードウェアセキュリティモジュール回路１０内で発行（生成）された強制Ｒｅａｄ信号である。Ｒ＿ＨＳＭは、「１」のとき読出しが実行可能であり、「０」のとき読出しが実行不可であることを示す。また、Ｗ＿ＨＳＭは、ハードウェアセキュリティモジュール回路１０内で発行（生成）された強制Ｗｒｉｔｅ信号である。Ｗ＿ＨＳＭは、「１」のとき書込みが実行可能であり、「０」のとき書込みが実行不可であることを示す。
【００５４】
また、Ｒ＿ｅ＝Ｒ＿ｏｕｔ  ∨  Ｒ＿ＨＳＭであり、Ｒ＿ｅは、「１」のとき読出しが実行可能であり、「０」のとき読出しが実行不可であることを示す。Ｗ＿ｅ＝Ｗ＿ｏｕｔ  ∨  Ｗ＿ＨＳＭであり、Ｗ＿ｅは、「１」のとき書込みが実行可能であり、「０」のとき書込みが実行不可であることを示す。また、Ｄｅｃ＿Ａｄｄｒ［ｉ］は、メモリ内で生成するアドレスのデコード信号である。ここで、Ｄｅｃ＿Ａｄｄｒ［ｉ］が「１」であるとき、入力アドレスが該当メモリエレメント［ｉ］を指し示すことを示す。Ｄｅｃ＿Ａｄｄｒ［ｉ］が「０」であるとき、入力アドレスが該当メモリエレメント［ｉ］を指し示さないことを示す。
【００５５】
また、Ｒ＿ｅ２：＝Ｄｅｃ＿Ａｄｄｒ［ｉ］  ∧  Ｒ＿ｅである。また、Ｗ＿ｅ２：＝Ｄｅｃ＿Ａｄｄｒ［ｉ］  ∧  Ｗ＿ｅである。また、Ｅ＿ｅ２：＝Ｄｅｃ＿Ａｄｄｒ［ｉ］  ∧  Ｅ＿ｏｕｔである。また、Ｄｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｊ］は、対象メモリ領域は複数存在し得るため、アドレス上位ビット列などで対応する領域を識別するためのアドレスデコード信号である。また、Ｒ＿ｅ’：＝Ｄｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｊ］  ∧  Ｒ＿ｅである。Ｒ＿ｅ’は、複数の対象メモリ領域のうち、アドレス上位ビット列などで識別される領域に付随するＲ＿ｅであるが、（Ｒ，Ｗ，Ｅ）属性の指定対象外の場合は「１」となる信号である。また、Ｅ＿ｏｕｔ’：＝Ｄｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｊ］  ∧  Ｅ＿ｏｕｔである。Ｅ＿ｏｕｔ’は、複数の対象メモリ領域のうち、アドレス上位ビット列などで識別される領域に付随するＥ＿ｏｕｔであるが、（Ｒ，Ｗ，Ｅ）属性の指定対象外の場合は「１」となる信号である。
【００５６】
図８に記載された構成により、Ｗ＿ｏｕｔ及びＷ＿ＨＳＭの少なくとも一方が１のときのみ、セレクタ２３によって、メモリセル／レジスタ２４内の、アドレスで指定した対象メモリ領域内へデータが書き込まれる。つまり、（Ｒ，Ｗ，Ｅ）属性でＲ＿ｏｕｔ指定値が０であっても、ハードウェアセキュリティモジュール回路１０が強制的に書込み可能とすることができる。また、Ｒ＿ｏｕｔ、Ｅ＿ｏｕｔ、Ｒ＿ＨＳＭの少なくともいずれかが１のときのみ、メモリセル／レジスタ２４から、セレクタ２５によって、データが読み出される。つまり、（Ｒ，Ｗ，Ｅ）属性でＲ＿ｏｕｔ指定値及びＥ＿ｏｕｔ指定値の両方が０であっても、ハードウェアセキュリティモジュール回路１０が強制的に読み出し可能とすることができる。
【００５７】
読み出されたデータは、バス９を介して、例えばＣＰＵ２等に転送される。このとき、ＣＰＵ２に設けられたアクセス制御回路４０のデータ読出しユニット４１は、Ｒ＿ｏｕｔ及びＲ＿ＨＳＭの少なくとも一方が１のとき（又は（Ｒ，Ｗ，Ｅ）属性の指定対象外の場合）のみ、セレクタ４２によってデータの読み出しが可能である。つまり、（Ｒ，Ｗ，Ｅ）属性でＲ＿ｏｕｔ指定値が０であっても、ハードウェアセキュリティモジュール回路１０が強制的にＣＰＵ２でのデータの読み出しを可能とすることができる。一方、アクセス制御回路４０の命令フェッチユニット４３は、Ｅ＿ｏｕｔが１のとき（又は（Ｒ，Ｗ，Ｅ）属性の指定対象外の場合）のみ、セレクタ４４によって命令フェッチが可能である。つまり、ＣＰＵ２は、読出しデータを命令として実行する事が可能である。
【００５８】
このように、図６及び図８に示した構成を組み合わせることで、図７に示した構成による効果に加えて、（Ｒ，Ｗ，Ｅ）属性が何であれ、ハードウェアセキュリティモジュール回路１０内で生成する信号Ｒ＿ＨＳＭ及びＷ＿ＨＳＭによる、対象メモリ領域への読み出し及び書込みの実行が可能となる。つまり、図８に示した構成によって、ハードウェアセキュリティモジュール回路１０のみからは、（Ｒ，Ｗ，Ｅ）属性制御で定められた保護対象領域のアクセス制御を無視したメモリ領域への読出し、実行、書込み、の動作を行うことが可能となる。これにより、書込み不可となった領域へのデータ又はプログラムの書込みなどが、実現可能となる。通常、プログラムの秘匿性を保証する目的で実行のみ可能とした場合、そのプログラムの更新が不可能となるが、図８に示した構成では、ハードウェアセキュリティモジュール回路１０からのみ更新可能となる。ここで、このようなアクセス制御を無視したハードウェアセキュリティモジュール回路１０からの保護対象メモリ領域へのデータ書込みは、後述するデータ授受シーケンス内でのみ実施されることが望ましい。そして、この図６及び図８に示した構成を図３に適用することで、ハードウェアセキュリティモジュール回路１０のみからエラー検出回路４へのアクセスが実現可能となる。
【００５９】
図９は、図４に示した、複数の構成要素にアクセス制御回路２０が設けられる場合の、データ読出しユニット４１及び命令フェッチユニット４３の構成を示す図である。図９は、２つのアクセス制御回路２０Ａ，２０Ｂ（（Ｒ，Ｗ，Ｅ）属性制御機構＃１）から、それぞれ、Ｒ＿ｅＡ，Ｅ＿ｏｕｔＡ及びＲ＿ｅＢ，Ｅ＿ｏｕｔＢが受信される構成を示している。また、Ｄｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｊ］は、アクセス制御回路２０Ａに関する領域を識別するためのアドレスデコード信号である。Ｄｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｉ］は、アクセス制御回路２０Ｂに関する領域を識別するためのアドレスデコード信号である。
【００６０】
図９に示すように、データ読出しユニット４１は、アクセス制御回路２０Ａ，２０Ｂごとに、セレクタ４２Ａ，４２Ｂを有する。セレクタ４２Ａは、アクセス制御回路２０Ａにおいて、Ｒ＿ｏｕｔ及びＲ＿ＨＳＭの少なくとも一方が１のとき（Ｒ＿ｅＡ＝１）のみ、データを読み出す。また、セレクタ４２Ｂは、アクセス制御回路２０Ｂにおいて、Ｒ＿ｏｕｔ及びＲ＿ＨＳＭの少なくとも一方が１のとき（Ｒ＿ｅＢ＝１）のみ、データを読み出す。そして、セレクタ５１は、アドレスデコード信号（Ｄｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｊ］又はＤｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｉ］）に応じて、セレクタ４２Ａ又はセレクタ４２Ｂから読み出されたデータを出力する。
【００６１】
また、命令フェッチユニット４３は、アクセス制御回路２０Ａ，２０Ｂごとに、セレクタ４４Ａ，４４Ｂを有する。セレクタ４４Ａは、アクセス制御回路２０Ａにおいて、Ｅ＿ｏｕｔＡが１のときのみ、命令フェッチを行う。また、セレクタ４４Ｂは、アクセス制御回路２０Ｂにおいて、Ｅ＿ｏｕｔＢが１のときのみ、命令フェッチを行う。そして、セレクタ５３は、アドレスデコード信号（Ｄｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｊ］又はＤｅｃ＿ＵｐｐｅｒＡｄｄｒ［ｉ］）に応じて、セレクタ４４Ａ又はセレクタ４４Ｂから読み出されたデータを出力する。
【００６２】
なお、図９には、２つのアクセス制御回路２０Ａ，２０Ｂ（（Ｒ，Ｗ，Ｅ）属性制御機構＃１）から、それぞれ、Ｒ＿ｅＡ，Ｅ＿ｏｕｔＡ及びＲ＿ｅＢ，Ｅ＿ｏｕｔＢを受信する構成の例が示されているが、アクセス制御回路２０の個数は任意である。Ｎ個（Ｎ＞２の整数）のアクセス制御回路２０への拡張は、上位アドレスデコード結果信号を追加し、バス９からの読出し制御部（セレクタ４２，４４）を追加し、最終段のセレクタ５１，５３を、Ｎ個のアドレスデコード結果に応じて、１つの信号出力を行うセレクタに置き換えることで、実現可能である。
【００６３】
（データ授受シーケンス）
次に、実施の形態１にかかる半導体装置１によってなされるデータ授受シーケンスについて説明する。以下に説明するデータ授受シーケンスは、改竄耐性及び秘匿性を持つ機能安全考慮のデータ授受プロトコルの動作である。ここで、機能安全考慮とは、通信路でのデータ誤り及びハードウェア故障でのデータ誤りへの対応を示す。
【００６４】
図１０は、実施の形態１にかかるデータ授受シーケンスが行われる認証システム１００を示す図である。認証システム１００は、例えば、自動車等の車両に適用される車載ネットワークシステムである。認証システム１００は、サーバ１０４、機器Ａ１０２（第１の機器）及び機器Ｂ１１０（第２の機器）を有する。
【００６５】
機器Ａ１０２及び機器Ｂ１１０は、車両内部に設けられている。サーバ１０４は、車両の外部に設けられている。機器Ａ１０２は、例えば、車両の外部（サーバ１０４等）からの信号を受信するゲートウェイ（セントラルゲートウェイ）である。機器Ｂ１１０は、例えば、車両の各部品（ブレーキ、モータ、エンジン、ステアリング等）を制御するＭＣＵである。機器Ａ１０２は、サーバ１０４と無線等を介して通信可能に接続されている。機器Ａ１０２と機器Ｂ１１０とは、有線又は無線を介して通信可能に接続されている。また、機器Ｂ１１０は、実施の形態１にかかる半導体装置１に対応する。つまり、機器Ａ１０２は、半導体装置１の外部の機器である。機器Ｂ１１０は、ハードウェアセキュリティモジュール回路１０と、ハードウェアセキュリティモジュール回路１０以外の非セキュア部１２０（ＣＰＵ２、プログラムメモリ３、エラー検出回路４、入出力インタフェース５、ワークメモリ６等）とを有する。なお、機器Ａ１０２も、機器Ｂ１１０と同様の構成要素を有してもよい。
【００６６】
図１１〜図１３は、実施の形態１にかかるデータ授受シーケンスを示すシーケンス図である。なお、機器Ａ１０２及び機器Ｂ１１０に対する共通対称鍵の初期設定として、下記設定が事前になされているものとする。
【００６７】
セキュリティパラメータをｋ（ｋ＝１２８又は２５６）とし、機器Ａ１０２は、１＾ｋを入力とする。機器Ａ１０２は、認証識別子ＩＤｉ∈｛０，１｝＾ｋが割り振られている機器Ｂ１１０に対して対称鍵ｓｋｉ←｛０，１｝＾ｋ（つまりｓｋｉのビット長はｋ）を選び、（ｓｋｉ，ＩＤｉ）を送付する。機器Ｂ１１０は、（ｓｋｉ，ＩＤｉ）を不揮発性メモリに保存する。また、機器Ｂ１１０は、認証識別子ＩＤｉの集合ＩＤを機器Ａ１０２に送付する。ここで、機器Ｂ１１０の総数をＮとし、ｉ∈［１，Ｎ］とする。例えば、機器Ｂ１１０を出荷する前にこれらの初期設定を実行することで、各機器Ｂ１１０に個別の鍵を設定するとともに、機器Ａ１０２に同鍵を格納してもよい。また、機器Ｂ１１０の非セキュア部１２０は、機器Ｂ１１０に内蔵されたハードウェアセキュリティモジュール回路１０に格納されたＩＤｉを読み出すことが可能であるとする。但し、上書き変更や消去は、適切なアクセス制御によりできないものとする。
【００６８】
（１）機器認証情報の機器Ａでの構築：
機器Ｂ１１０の非セキュア部１２０は、ハードウェアセキュリティモジュール回路１０からＩＤｉを取得する（ステップＳ１０１）。非セキュア部１２０は、ハードウェアセキュリティモジュール回路１０からＩＤｉを読み出してもよいし、ハードウェアセキュリティモジュール回路１０からＩＤｉを受信してもよい。非セキュア部１２０は、ＩＤｉを得ると、セッション管理のためにセッション情報ｒｐ∈｛０，１｝＾ｋを選択し（ステップＳ１０２）、（１，ｒｐ，ＩＤｉ）を機器Ａ１０２に送付する（ステップＳ１０３）。ここで、「１」は、セッション情報ｒｐにおける１番目の処理を示す。機器Ａ１０２は、（１，ｒｐ，ＩＤｉ）を受け取ると、下記の処理を実施する（ステップＳ１０４）。これにより、機器Ｂ１１０が認証される。
【００６９】
１．ｒｐ，ＩＤｉ∈｛０，１｝＾ｋであるか、そしてＩＤｉ∈ＩＤであるかを検証する。つまり、ｒｐ，ＩＤｉのビット長の検証及びＩＤｉが登録されたものであるか否かの検証を行う。もし異なっていれば処理を終了する。もし満たしていれば、以下を実行する。
２．現在の時刻をｔｓｓ←ＴｉｍｅＳｔａｍｐとして選ぶ。
３．乱数をｒｈ１←｛０，１｝＾ｋとして選ぶ。
４．送信データｄａｔａに対して、ＣＲＣまたはＥＣＣを算出し、例えばＣＲＣを算出したとして、ｄａｔａ＿ｃｒｃ：＝ＣＲＣ（ｄａｔａ）とする。
５．ｃ１：＝ＡＥ．Ｅｎｃ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ）を計算する。
【００７０】
そして、機器Ａ１０２は、Ｄａｔａ１：＝（ｔｓｓ，ＩＤｉ，ｃ１）として、機器Ｂ１１０の非セキュア部１２０に、（１，ｒｐ，Ｄａｔａ１）を送付する（ステップＳ１０５）。ここで、演算子「｜｜」はビット連接を表す。また、ｃ１は、認証付き暗号データである。また、ＡＥ．Ｅｎｃは、認証付き暗号であり、ＡＥＳ−ＧＣＭ又はＡＥＳ−ＣＣＭであってもよい。
【００７１】
あるいは、ＡＥ．Ｅｎｃは、例えば暗号とＣＭＡＣ値との組合せとして、例えば下記で構成されていてもよい。これは、特に、認証付き暗号が使用できない場合等に効果的である。
乱数をｒｈ０←｛０，１｝＾ｍとして選ぶ。ここで、ｍ：＝ｓｉｚｅｏｆ（ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ）である。
ｒ１’：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｒｈ０｜｜２）
ｃ１’：＝Ｅｎｃ（ｒ１’，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ）
ｒ１：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｃ１’｜｜１）
この場合、Ｄａｔａ１内のｃ１は、ｃ１：＝（ｒｈ１，ｒｈ０，ｃ１’，ｒ１）となる。ここで、ＰＲＦは疑似ランダム関数であり、ＣＭＡＣ値として用いている。また、Ｅｎｃは共通鍵ブロック暗号であり、例えばＡＥＳ−ＣＢＣである。なお、ｒ１’は、疑似ランダム関数用の、署名を発行するための共通鍵であり、ｒ１は、署名付きの暗号結果である。
【００７２】
（２）機器Ｂでのデータ復号とデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ１を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を、例えば上述したアクセス制御回路２０により、（１，１，０）または（０，１，０）に設定する（ステップＳ１０６）。つまり、アクセス制御回路２０は、（Ｒ，Ｗ，Ｅ）属性を、書込み可且つプログラムの実行不可と設定する。また、非セキュア部１２０は、現在の時刻をｔｓｐ←ＴｉｍｅＳｔａｍｐとして選び、Ｄａｔａ１を受け取ると、非セキュア部１２０のメモリ領域の（Ｒ，Ｗ，Ｅ）属性を、例えばアクセス制御回路２０により、（１，０，０）に設定する（ステップＳ１０７）。つまり、アクセス制御回路２０は、（Ｒ，Ｗ，Ｅ）属性を、読出しのみ可と設定する。
【００７３】
その後、非セキュア部１２０は、（ｒｐ，ｔｓｐ，Ｄａｔａ１）を機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に送付する（ステップＳ１０８）。このとき、送付が完了すると、非セキュア部１２０は、非セキュア部１２０のメモリ領域の（Ｒ，Ｗ，Ｅ）属性を、例えばアクセス制御回路２０により（０，１，０）に設定した後でＤａｔａ１を消去する（ステップＳ１０９）。ここで、（Ｒ，Ｗ，Ｅ）属性の変更は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に内蔵されたＣＰＵ１１によって実行されてもよいし、非セキュア部１２０のＣＰＵ２によって実行されてもよい。いずれの場合であっても、設定ソフトウェアは、その実行に先立って、セキュアブートなどにより、改竄がないことが確認されているものとする。
【００７４】
さて、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、（ｒｐ，ｔｓｐ，Ｄａｔａ１＝（ｔｓｓ，ＩＤｉ，ｃ１））を受け取ると、ｍをｄａｔａ｜｜ｄａｔａ＿ｃｒｃのサイズとして、ｒｈ２←｛０，１｝＾ｍとして（つまりｒｈ２のビット長をｍとして）、以下を実施する（ステップＳ１１０）。これにより、機器Ａ１０２の認証、受信されたデータの検証及びデータの復号処理がなされる。
【００７５】
１．ｒｐ，ｔｓｐ，ｔｓｓ，ＩＤｉ，ｃ１∈｛０，１｝＾ｋであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、さらに、ＩＤｉが自身のものと一致するかを確かめる。これにより、簡単なスクリーニングがなされる。なお、ｃ１：＝（ｒｈ１，ｒｈ０，ｃ１’，ｒ１）の場合は、ｒｈ１，ｒｈ０，ｃ１’，ｒ１∈｛０，１｝＾ｋであるかの検証も併せて実施する。
もし満たしていなければ、ｒｅｓｕｌｔ１：＝０００，ｒｃ←｛０，１｝＾（ｋ−３），ｒｃ：＝ｒｃ｜｜ｒｅｓｕｌｔ１とする。そして、後述するような処理はこれ以上実行されない。ここで、ｒｅｓｕｌｔ１の値「０００」は、不正なアクセスがされたことを示す。もし満たしている場合は、以下の操作を実行する。
【００７６】
２．ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ＝ＡＥ．Ｄｅｃ（ｓｋｉ，ｃ１）、つまり認証付き暗号での復号を実施し、認証が満たされるかを検証する。もし満たさない場合、ｒｅｓｕｌｔ１を、認証付き暗号の結果が不合格であることを示すｒｅｓｕｌｔ１：＝１１０とする。もし満たしていた場合は、３．以降を実行する。
なお、ｃ１：＝（ｒｈ１，ｒｈ０，ｃ１’，ｒ１）の場合は、ｒ１＝ＰＲＮ（ｓｋｉ，ｔｓｓ｜｜ＩＤ｜｜ｒｈ１｜｜ｃ１’｜｜１）が満たされるか否かを検証する（つまり署名チェックを行う）。もし満たさない場合、ｒｅｓｕｌｔ１：＝１１０とする。もし満たしていた場合は、以下の操作を実行する。すなわち、復号処理として、ｒ１’：＝ＰＲＮ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｒｈ０｜｜２），ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ：＝Ｄｅｃ（ｒ１’，ｃ１’）を実施後、３．以降を実行する。ここで、Ｄｅｃは、共通鍵ブロック暗号での復号あり、例えばＡＥＳ−ＣＢＣでの復号である。
【００７７】
３．例えばアクセス制御回路２０により、アクセス制御設定が、ハードウェアセキュリティモジュール回路１０のみがエラー検出回路４へアクセス可能と設定される。エラー検出回路４を用いて、復号して得られたｄａｔａのＣＲＣをＣＲＣ（ｄａｔａ）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。一致しない場合、ｒｅｓｕｌｔ１を、ＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ１：＝１００とする。もし満たしていた場合は、以下の操作を実行する。
【００７８】
４．復号で得られたｄａｔａを格納する領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可及び実行不可に）設定し、ｄａｔａを領域Ａ１に格納する（書き込む）。これにより、ＣＲＣチェックで合格した（つまりエラーが検出されなかった）データを書き込む際に、ハードウェアセキュリティモジュール回路１０のみが書込み可と設定されるので、攻撃者等からデータを改竄されることを抑制できる。そして、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）に（つまり読出し可且つ書込み不可に）設定し、ｄａｔａをＡ１から再度読み出してｄａｔａ’とする。ｄａｔａ’のＣＲＣをＣＲＣ（ｄａｔａ’）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。不揮発性メモリにデータを書き込むときにデータが壊れる可能性があるため、耐故障性を向上させるため、このように、データの書込みの後でデータを読み出してＣＲＣチェックを行う。ここで、このとき、ハードウェアセキュリティモジュール回路１０のみが読出し可と設定されるので、データを書き込む際のエラーを検出するためにデータを読み出すときに、攻撃者等からデータを改竄されることを抑制できる。
【００７９】
ＣＲＣ（ｄａｔａ’）とｄａｔａ＿ｃｒｃとが一致する場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）または（０，０，１）に（つまり書込み不可に）設定する。領域Ａ１が不揮発性メモリ部なら活性化処理を実施する。さらに、ｒｅｓｕｌｔ１を、全ての処理が成功したことを示すｒｅｓｕｌｔ１：＝００１とする。ｄａｔａがクリティカルなプログラムであり秘匿性が必要な場合は、（０，０，１）と設定することで実行のみ可能とする。一致しない場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可且つ実行不可に）設定し、領域Ａ１に書き込んだｄａｔａを消去する。これにより、不適切なデータの実行又は読み取りを抑制することができる。そして、ｒｅｓｕｌｔ１を、再度のＣＲＣチェックが失敗した（書込みに失敗した）ことを示すｒｅｓｕｌｔ１：＝０１０とする。
【００８０】
５．例えばアクセス制御回路２０により、アクセス制御設定が、エラー検出回路４の処理を必要とするＣＰＵ２など他のモジュールがエラー検出回路４へアクセス可能と設定される。そして、乱数をｒｃ←｛０，１｝＾（ｋ−３）として選び、ｒｃ：＝ｒｃ｜｜ｒｅｓｕｌｔ１∈｛０，１｝＾ｋとする。
【００８１】
６．ｒ２：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｉ｜｜ｒｈ２｜｜ｒｃ）を求める。そして、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、Ｄａｔａ２：＝（ｔｓｓ，ＩＤｉ，ｒｈ２，ｒｃ，ｒ２）として、（ｒｐ，ｔｓｐ，Ｄａｔａ２）を、機器Ｂ１１０の非セキュア部１２０に送付する（ステップＳ１２０）。
【００８２】
７．機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ２を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定した後（ステップＳ１２１）、（２，ｒｐ，ｔｓｐ，Ｄａｔａ２）を機器Ａ１０２に送付する（ステップＳ１２２）。ここで、「２」は、セッション情報ｒｐにおける２番目の処理を示す。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定し、その後、Ｄａｔａ２を消去する（ステップＳ１２３）。
【００８３】
なお、（Ｒ，Ｗ，Ｅ）属性の更新は、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構（アクセス制御回路２０）を用いて行われてもよい。なお、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構を用いない場合は、メモリプロテクションユニット（Ｍｅｍｏｒｙ  Ｐｒｏｔｅｃｔｉｏｎ  Ｕｎｉｔ；ＭＰＵ）又はメモリ管理ユニット（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ；ＭＭＵ）を用いて設定が行われてもよい。また、図６の機構を用いる場合、Ｒ属性とＷ属性がたとえ０となっていてもハードウェアセキュリティモジュール回路１０の設定で読出し及び書込みを可能とできるため、これを考慮した属性変更を行う必要がある。図６においてＳ１とＳ２との遷移がなされない場合は、更新可能な範囲が制限されるため、その制限に沿った形で属性変更を行う必要がある。
【００８４】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０への送付に時間制約がある場合であってｔｓｐが信頼できるときは、上記１．のサイズチェック時に、ｔｓｓとｔｓｐとを比較することで、時間制約の確認を実施してもよい。また、認証対象端末での認証処理への時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐと認証端末からの認証結果の受け取り時刻（以下、ｔｓｐ２と記載）とを比較することで、時間制約の確認を実施してもよい。これにより、処理にあまりにも長い時間を要した場合に、不適切な処理を検出することができる。
【００８５】
（３）機器Ａでの認証結果の検証：
機器Ｂ１１０の非セキュア部１２０は、（２，ｒｐ，ｔｓｐ，Ｄａｔａ２）を機器Ａ１０２に送付する（Ｓ１２２）。機器Ａ１０２は、（２，ｒｐ，ｔｓｐ，Ｄａｔａ２＝（ｔｓｓ，ＩＤｉ，ｒｈ２，ｒｃ，ｒ２））を受け取ると、以下の処理を実行する（ステップＳ１２４）。これにより、機器Ａ１０２と機器Ｂ１１０との相互認証が行われることとなる。
【００８６】
機器Ａ１０２は、ｒｐ，ｔｓｓ，ｔｓｐ，ＩＤｉ，ｒｃ，ｒ２∈｛０，１｝＾ｋ、且つｒｈ２∈｛０，１｝＾ｍであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、満たしていなければ、ｒｅｓｕｌｔ２：＝０００とする。もし満たしていれば、機器Ａ１０２は、ｒ２＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｉ｜｜ｒｈ２｜｜ｒｃ）であるか（つまり署名が正しいか否か）を検証する。機器Ａ１０２は、もし正しければｒｅｓｕｌｔ２：＝ｒｃの下位３ｂｉｔ（つまりｒｅｓｕｌｔ１の値）とし、そうでなければｒｅｓｕｌｔ２：＝０００とする。
【００８７】
そして、機器Ａ１０２は、ｒｅｓｕｌｔ２を認証結果として出力し、これを記録する。ここで、ｒｅｓｕｌｔ２が「００１」を示す場合、データｄａｔａが中間者に改竄されることも漏洩することもなく、またデータが欠損することもなく、機器Ｂ１１０のデータ格納領域にデータ格納を行うことが成功したことを意味する。また、ｒｅｓｕｌｔ２が「０１０」を示す場合、書込みでのデータ欠損による書込み失敗を意味する。また、ｒｅｓｕｌｔ２が「１００」を示す場合、認証・復号は成功したが書込み前にデータ欠損が発生したことを意味する。また、ｒｅｓｕｌｔ２が「１１０」を示す場合、受信エラー（メッセージ改竄の可能性あり）が発生したことを意味する。
【００８８】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０へ認証付き暗号データを送付後、機器Ａ１０２が機器Ｂ１１０の非セキュア部１２０からの認証付き暗号データを取得するまでの間に時間制約がある場合、上記サイズチェック時に、ｔｓｓと機器Ａ１０２での現在時刻とを比較する事で、その時間制約の確認を実施してもよい。また、機器Ｂ１１０の非セキュア部１２０からの認証付き暗号データに対する復号操作の成功可否の機器Ａ１０２への送付に時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ２が追加されたデータを機器Ｂ１１０の非セキュア部１２０から機器Ａ１０２へ送付し、ｔｓｐ２とｔｓｓとを比較する事で、その時間制約の確認を実施してもよい。
【００８９】
実施の形態１にかかる半導体装置１（機器Ｂ１１０）は、外部の機器である機器Ａ１０２から、機器Ｂ１１０に転送対象データが転送される場合に、ハードウェアセキュリティモジュール回路１０が、非セキュア部１２０のメモリ領域を介して、認証用データ（Ｄａｔａ１，Ｄａｔａ２）を、機器Ａ１０２から受信し、機器Ａ１０２に送信する。これにより、半導体装置１（機器Ｂ１１０）は、機器Ａ１０２と相互認証を行うことができる。ここで、非セキュア部１２０のメモリ領域は、アクセス制御により、攻撃者等からのアクセスがなされないように構成されている。したがって、転送対象データが転送されるときに、攻撃者等が相手側の機器になりすますことを抑制することが可能となる。
【００９０】
実施の形態１にかかるデータ授受シーケンスは、ｒｐが改竄されると、対応するセッションが非存在となるか、存在したとしても異なるセッションでの機器Ｂ１１０における認証の失敗のためシーケンスが継続しないため、フェールセーフである。また、実施の形態１にかかるデータ授受シーケンスは、ｒｈ２が改竄されると、機器Ａ１０２の認証付き暗号の復号処理可否に対する検証が失敗するため、フェールセーフである。また、実施の形態１にかかるデータ授受シーケンスでは、機器Ａ１０２での認証付き暗号の復号操作の成功可否に対する検証手段により、攻撃者等がｒｃの値を改竄しても、機器Ａ１０２で検証合格とすることはできない。また、実施の形態１にかかるデータ授受シーケンスでは、ｔｓｐが改竄された場合も、機器Ａ１０２での認証結果の検証手段により、機器Ａ１０２で検証合格とすることはできない。つまり、ｒｐ、ｒｈ２、ｔｓｐの何れを改竄しても、攻撃者等は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０で構成した認証付き暗号の復号処理可否を、書込み成功や検証合格とすることができない。したがって、実施の形態１においては、ｒｐ，ｒｈ２，ｒｃの全てまたは何れかが改竄された場合、何らかの改竄があったことを検知することが可能となる。なお、改竄による認証失敗又は検証不合格を効率よく検出する目的で、ｔｓｐに対してハッシュ値を付加してもよい。
【００９１】
（実施の形態１の変形例）
次に、実施の形態１の変形例について説明する。図１１〜図１３に示したシーケンス図は、機器Ａ１０２から機器Ｂ１１０へ、転送対象データを一回で転送するためのシーケンスである。ここで、転送対象データのデータサイズが転送可能サイズよりも大きいためデータを分割して複数回に分けて転送することが必要な場合は、図１１〜図１３に記載したシーケンスをそのまま用いる場合、その回数分、認証等の処理を実行する必要がある。
【００９２】
ここで、転送可能サイズに制限がある場合、転送対象データ全体を認証付き暗号方式で暗号化し、その暗号化されたデータ全体を分割して転送する方が、転送回数ごとに暗号化して転送するよりも、効率がよいと考えらえる。例えば、不揮発性メモリへのデータ格納を考えた場合、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０にデータが十分蓄積されてから、認証付き暗号方式での復号を実施し、データ領域への書込みを実施した方が、効率がよい。ここで、認証付き暗号方式は、暗号化と署名生成とで異なる鍵を用いる事を前提とした、ブロック暗号方式での暗号と暗号結果に対する署名とを付加する方式であってもよい。
【００９３】
図１４〜図１９は、実施の形態１の変形例にかかる認証システム１００において実行されるデータ授受シーケンスを示すシーケンス図である。なお、実施の形態１の変形例にかかる認証システム１００の構成は、図１０に示した実施の形態１にかかる認証システム１００と実質的に同様であるので、説明を省略する。
【００９４】
図１４〜図１９のシーケンス図を用いて、改竄耐性と秘匿性を持つ機能安全考慮のデータ一括での暗号化とその暗号化されたデータの分割転送でのデータ授受を可能とするプロトコルの動作を説明する。ここで、図１４〜図１９のシーケンスは、（１）転送回数の通知を伴う相互認証処理（Ｓ２０１〜Ｓ２２４）、（２）全体で暗号化したデータの繰返し分割転送処理（Ｓ２３１〜Ｓ２５７）、及び、（３）結合データの復号とデータ格納を伴う相互認証処理（Ｓ２６２〜Ｓ２８６）を有する。なお、機器Ａ１０２及び機器Ｂ１１０に対する共通対称鍵の初期設定として、下記設定が事前になされているものとする。
【００９５】
セキュリティパラメータをｋとし、機器Ａ１０２は１＾ｋを入力とする。機器Ａ１０２は、認証識別子ＩＤｉ∈｛０，１｝＾ｋが割り振られている機器Ｂ１１０に対して対称鍵ｓｋｉ←｛０，１｝＾ｋを選び、（ｓｋｉ，ＩＤｉ）を送付する。機器Ｂ１１０は、（ｓｋｉ，ＩＤｉ）を不揮発性メモリに保存する。また、認証識別子ＩＤｉの集合ＩＤを機器Ａ１０２に送付する。ここで、機器Ｂ１１０の総数をＭとし、ｉ∈［１，Ｍ］とする。例えば、機器Ｂ１１０を出荷する前にこれら処理を実施する事で、各機器Ｂ１１０に個別の鍵を設定するとともに、機器Ａ１０２に同鍵を格納してもよい。また、機器Ｂ１１０の非セキュア部１２０は、機器Ｂ１１０に内蔵されたハードウェアセキュリティモジュール回路１０に格納されたＩＤｉを読み出し可能とする。但し、上書き変更や消去は、適切なアクセス制御によりできないものとする。
【００９６】
（１）転送回数の通知を伴う相互認証処理：
（１−１）機器認証情報の機器Ａでの構築：
機器Ｂ１１０の非セキュア部１２０は、ハードウェアセキュリティモジュール回路１０からＩＤｉを取得する（ステップＳ２０１）。非セキュア部１２０は、ハードウェアセキュリティモジュール回路１０からＩＤｉを読み出してもよいし、ハードウェアセキュリティモジュール回路１０からＩＤｉを受信してもよい。非セキュア部１２０は、ＩＤｉを得ると、セッション管理のためにセッション情報ｒｐ∈｛０，１｝＾ｋを選択し（ステップＳ２０２）、（１，ｒｐ，ＩＤｉ）を機器Ａ１０２に送付する（ステップＳ２０３）。ここで、「１」は、セッション情報ｒｐにおける１番目の処理を示す。機器Ａ１０２は、（１，ｒｐ，ＩＤｉ）を受け取ると、下記を実施する（ステップＳ２０４）。これにより、機器Ｂ１１０が認証され、転送回数に署名が付される。
【００９７】
１．ｒｐ，ＩＤｉ∈｛０，１｝＾ｋであるか、そしてＩＤｉ∈ＩＤであるかを検証する。もし異なっていれば処理を終了する。もし満たしていれば、以下を実行する。
２．現在の時刻をｔｓｓ１←ＴｉｍｅＳｔａｍｐとして選ぶ。
３．乱数２つをｒｈ０←｛０，１｝＾ｋ、ｒｈ１←｛０，１｝＾ｋとして選ぶ。
４．セッション鍵として、ｒ１’：＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ＩＤｉ｜｜ｒｈ０｜｜１）を計算する。ここで、「ｓｋｉ」は、署名検証用の鍵である。
５．送信データ（転送対象データ）ｄａｔａの全体に対して、ＣＲＣまたはＥＣＣを算出し、例えばＣＲＣを算出したとして、ｄａｔａ＿ｃｒｃ：＝ＣＲＣ（ｄａｔａ）とする。
６．ｃ１：＝ＡＥ．Ｅｎｃ（ｒ１’，ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ）を計算する。そして、機器Ａ１０２は、ｃ１を、転送サイズを考慮してＮ個に分割し、｛ｃ１［ｊ］；ｊ＝１，・・・，Ｎ｝を構成する。ここで、演算子「｜｜」はビット連接を表す。また、上述した例と同様に、ＡＥ．Ｅｎｃは、認証付き暗号であり、ＡＥＳ−ＧＣＭ又はＡＥＳ−ＣＣＭであってもよいし、例えば暗号とＣＭＡＣ値の組合せとしてもよい。
７．分割転送個数Ｎの通知を行うために、ｒ１：＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ＩＤｉ｜｜ｒｈ１｜｜Ｎ｜｜１）を計算する。ここで、ｒ１は、転送対象データに対する署名ではなく、転送回数Ｎに対する署名である。
８．Ｄａｔａ１：＝（ｔｓｓ，ＩＤｉ，ｒｈ１，ｒ１，Ｎ）として、機器Ｂ１１０の非セキュア部１２０に、（１，ｒｐ，Ｄａｔａ１）を送付する（ステップＳ２０５）。
【００９８】
（１−２）機器Ｂでのデータ復号とデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ１を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に設定する（ステップＳ２０６）。つまり、（Ｒ，Ｗ，Ｅ）属性は、書込み可且つプログラムの実行不可と設定される。また、（Ｒ，Ｗ，Ｅ）属性の変更は、例えば上述したアクセス制御回路２０を用いて行われてもよい。また、非セキュア部１２０は、現在の時刻をｔｓｐ１←ＴｉｍｅＳｔａｍｐとして選び、Ｄａｔａ１を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定する（ステップＳ２０７）。つまり、アクセス制御回路２０は、（Ｒ，Ｗ，Ｅ）属性を、読出しのみ可と設定する。
【００９９】
その後、非セキュア部１２０は、（ｒｐ，ｔｓｐ１，Ｄａｔａ１）を機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に送付する（ステップＳ２０８）。送付が完了すると、非セキュア部１２０は、非セキュア部１２０のメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ１を消去する（ステップＳ２０９）。ここで、（Ｒ，Ｗ，Ｅ）属性の変更は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に内蔵されたＣＰＵ１１によって実行されてもよいし、非セキュア部１２０のＣＰＵ２によって実行されてもよい。いずれの場合であっても、設定ソフトウェアは、その実行に先立って、セキュアブートなどにより、改竄がないことが確認されているものとする。
【０１００】
さて、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、（ｒｐ，ｔｓｐ１，Ｄａｔａ１＝（ｔｓｓ１，ＩＤｉ，ｒｈ１，ｒ１，Ｎ））を受け取ると、ｒｈ２←｛０，１｝＾ｋとして、以下を実施する（ステップＳ２１０）。これにより、機器Ａ１０２及び転送回数Ｎの認証がなされる。
１．ｒｐ，ｔｓｐ１，ｔｓｓ１，ＩＤｉ，ｒｈ１，ｒ１∈｛０，１｝＾ｋであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、さらに、ＩＤｉが自身のものと一致するかを確かめる。もし満たしていなければ、ｒｅｓｕｌｔ１：＝００，ｒｃ１←｛０，１｝＾（ｋ−２），ｒｃ１：＝ｒｃ１｜｜ｒｅｓｕｌｔ１とする。そして、後述するような処理はこれ以上実行されない。ここで、ｒｅｓｕｌｔ１の値「００」は、不正なアクセスがされたことを示す。もし満たしている場合は、以下の操作を実行する。
【０１０１】
２．ｒ１＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ＩＤｉ｜｜ｒｈ１｜｜Ｎ｜｜１）を満たすかを検証する。もし満たしている場合は、ｒｅｓｕｌｔ１を、機器Ａ１０２及び転送回数Ｎの認証に成功したことを示すｒｅｓｕｌｔ１：＝０１とし、満たさない場合は、ｒｅｓｕｌｔ１を、機器Ａ１０２及び転送回数Ｎの認証に失敗したことを示すｒｅｓｕｌｔ１：＝１０とする。なお、分割数「Ｎ」がハードウェアセキュリティモジュール回路１０に送付されたので、ハードウェアセキュリティモジュール回路１０は、機器Ａ１０２からデータが何回送られてくるか（つまりデータが何個に分割されたか）を把握することができる。
【０１０２】
３．乱数ｒｃ１←｛０，１｝＾ｋ−２とし、ｒｃ１：＝ｒｃ１｜｜ｒｅｓｕｌｔ１とする。
４．ｒ２：＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ｔｓｐ１｜｜ＩＤｉ｜｜ｒｈ２｜｜ｒｃ１｜｜Ｎ）を計算する。ここで、ｒ２は、転送回数Ｎに対する署名である。そして、機器Ｂ１１０は、Ｄａｔａ２：＝（ｔｓｓ１，ＩＤｉ，ｒｈ２，ｒｃ１，Ｎ，ｒ２）として、（ｒｐ，ｔｓｐ１，Ｄａｔａ２）を、機器Ｂ１１０の非セキュア部１２０に送付する（ステップＳ２２０）。
【０１０３】
５．機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ２を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定した後（ステップＳ２２１）、（２，ｒｐ，ｔｓｐ１，Ｄａｔａ２）を機器Ａ１０２に送付する（ステップＳ２２２）。ここで、「２」は、セッション情報ｒｐにおける２番目の処理を示す。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ２を消去する。さらに、非セキュア部１２０は、機器Ａ１０２からのＤａｔａ３の受信に備えて、Ｄａｔａ３を配置するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定する（ステップＳ２２３）。
【０１０４】
なお、（Ｒ，Ｗ，Ｅ）属性の更新は、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構（アクセス制御回路２０）を用いて行われてもよい。なお、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構を用いない場合は、メモリプロテクションユニット（ＭＰＵ）又はメモリ管理ユニット（ＭＭＵ）を用いて設定が行われてもよい。また、図６の機構を用いる場合、Ｒ属性とＷ属性がたとえ０となっていてもハードウェアセキュリティモジュール回路１０の設定で読出し及び書込みを可能とできるため、これを考慮した属性変更を行う必要がある。図６においてＳ１とＳ２との遷移がなされない場合は、更新可能な範囲が制限されるため、その制限に沿った形で属性変更を行う必要がある。このことは、後述する実施の形態２の変形例でも同様である。
【０１０５】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０への送付に時間制約がある場合であってｔｓｐが信頼できるときは、上記１．のサイズチェック時に、ｔｓｓ１とｔｓｐ１とを比較することで、時間制約の確認を実施してもよい。また、認証対象端末での認証処理への時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ１と認証端末からの認証結果の受け取り時刻（以下、ｔｓｐ’と記載）とを比較することで、時間制約の確認を実施してもよい。これにより、処理にあまりにも長い時間を要した場合に、不適切な処理を検出することができる。このことは、後述する実施の形態２の変形例でも同様である。
【０１０６】
（１−３）機器Ａでの認証結果の検証：
機器Ｂの非セキュア部１２０は、（２，ｒｐ，ｔｓｐ１，Ｄａｔａ２）を機器Ａ１０２に送付する（Ｓ２２２）。機器Ａ１０２は、（２，ｒｐ，ｔｓｐ１，Ｄａｔａ２＝（ｔｓｓ１，ＩＤｉ，ｒｈ２，ｒｃ１，Ｎ，ｒ２））を受け取ると、以下の処理を実行する（ステップＳ２２４）。これにより、転送対象データを転送する前に、機器Ａ１０２と機器Ｂ１１０との相互認証が行われることとなる。
【０１０７】
機器Ａ１０２は、ｒｐ，ｔｓｓ１，ｔｓｐ１，ＩＤｉ，ｒｈ２，ｒｃ１，ｒ２∈｛０，１｝＾ｋ、且つ、Ｎ∈｛０，１｝＾ｌであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、満たしていなければ、ｒｅｓｕｌｔ２：＝１１とする。もし満たしていれば、機器Ａ１０２は、ｒ２＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ｔｓｐ１｜｜ＩＤｉ｜｜ｒｈ２｜｜ｒｃ１｜｜Ｎ）であるか（つまり署名が正しいか否か）を検証する。機器Ａ１０２は、もし正しければｒｅｓｕｌｔ２：＝ｒｃ１の下位２ｂｉｔとし、そうでなければ、ｒｅｓｕｌｔ２を、相互認証に失敗したことを示すｒｅｓｕｌｔ２：＝１１とする。
【０１０８】
そして、機器Ａ１０２は、ｒｅｓｕｌｔ２を認証結果として出力し、これを記録する。ここで、ｒｅｓｕｌｔ２が「０１」を示す場合、データ分割数Ｎが改竄される事なく機器Ａ１０２から機器Ｂ１１０へ通知され、機器Ａ１０２と機器Ｂ１１０との間での相互認証が成功したことを意味する。ｒｅｓｕｌｔ２が「１０」を示す場合、受信エラー（メッセージ改竄の可能性あり）が発生したことを意味する。そして、機器Ａ１０２は、ｒｅｓｕｌｔ２＝０１である場合、転送回数を表すインデックス変数ｊをｊ＝１（初期値）とする。そうでない場合、処理は終了する。
【０１０９】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０へ認証データを送付後、機器Ａ１０２が機器Ｂ１１０の非セキュア部１２０からの認証データを取得するまでの間に時間制約がある場合、上記サイズチェック時に、ｔｓｓ１と機器Ａ１０２での現在時刻とを比較することで、その時間制約の確認を実施してもよい。また、機器Ｂ１１０の非セキュア部１２０からの認証データの検証成功可否の機器Ａ１０２への送付に時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ’が追加されたデータを機器Ｂ１１０の非セキュア部１２０から機器Ａ１０２へ送付し、ｔｓｐ’とｔｓｓ１とを比較することで、その時間制約の確認を実施してもよい。このことは、後述する実施の形態２の変形例でも同様である。
【０１１０】
実施の形態１の変形例にかかる半導体装置１（機器Ｂ１１０）は、外部の機器である機器Ａ１０２から、機器Ｂ１１０に転送対象データが転送される場合に、ハードウェアセキュリティモジュール回路１０が、非セキュア部１２０のメモリ領域を介して、認証用データ（Ｄａｔａ１，Ｄａｔａ２）を、機器Ａ１０２から受信し、機器Ａ１０２に送信する。これにより、半導体装置１（機器Ｂ１１０）は、機器Ａ１０２と相互認証を行うことができる。したがって、転送対象データが転送されるときに、攻撃者等が相手側の機器になりすますことを抑制することが可能となる。
【０１１１】
実施の形態１の変形例にかかるデータ授受シーケンスは、ｒｐが改竄されると、対応するセッションが非存在となるか、存在したとしても異なるセッションでの機器Ｂ１１０での認証が実施されて認証が失敗するため、フェールセーフである。また、実施の形態１の変形例にかかるデータ授受シーケンスは、ｒｈ２が改竄された場合も、機器Ａ１０２の認証付き暗号の復号処理可否に対する検証が失敗するため、フェールセーフである。また、実施の形態１の変形例にかかるデータ授受シーケンスは、機器Ａ１０２でのＰＲＦを用いた検証手段により、攻撃者等がｒｃ１の値を改竄しても、機器Ａ１０２で検証合格とすることはできない。また、実施の形態１の変形例にかかるデータ授受シーケンスは、ｔｓｐ１が改竄された場合も、機器Ａ１０２での認証結果の検証手段により、機器Ａ１０２で検証合格とすることはできない。つまり、ｒｐ、ｒｈ２、ｔｓｐ１の何れを改竄しても、攻撃者等は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０で構成したＤａｔａ２を検証合格とすることができない。したがって、ｒｐ，ｒｈ２，ｒｃ１の全てまたは何れかが改竄された場合、何らかの改竄があったことを検知することが可能となる。なお、改竄による認証失敗や検証不合格を効率よく検出する目的で、ｔｓｐ１に対してハッシュ値を付加しても良い。
【０１１２】
（２）全体で暗号化したデータの繰返し分割転送処理：
以下、処理（２−１）〜（２−３）が、機器Ａ１０２から機器Ｂ１１０への分割データ｛ｃ１［ｊ］；ｊ＝１，・・・，Ｎ｝の転送が完了するまで、繰返し実行される。ここで、機器Ａ１０２と機器Ｂ１１０との相互認証は、データの分割転送処理では行われない。
【０１１３】
（２−１）転送データの機器Ａでの構築：
機器Ａ１０２は、ｊ＝１として、下記を実施する。
１．Ｄａｔａ３：＝（ｔｓｓ１，ＩＤｉ，Ｎ，ｊ，ｃ１［ｊ］）を生成し（ステップＳ２３１）、機器Ｂ１１０の非セキュア部１２０に、（ｊ＋２，ｒｐ，Ｄａｔａ３）を送付する（ステップＳ２３２）。
【０１１４】
（２−２）機器Ｂでのデータ復号とデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、現在の時刻をｔｓｐｊ←ＴｉｍｅＳｔａｍｐとして選び、Ｄａｔａ３を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定する（ステップＳ２３３）。非セキュア部１２０は、その後、（ｒｐ，ｔｓｐｊ，Ｄａｔａ３）を機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に送付する（ステップＳ２３４）。
【０１１５】
送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ３を消去する。さらに、非セキュア部１２０は、機器Ｂ１１０からのＤａｔａ４の受信に備えて、Ｄａｔａ４を配置するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定する（ステップＳ２３５）。ここで、（Ｒ，Ｗ，Ｅ）属性の変更は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に内蔵されたＣＰＵ１１によって実行されてもよいし、非セキュア部１２０のＣＰＵ２によって実行されてもよい。いずれの場合であっても、設定ソフトウェアは、その実行に先立ってセキュアブートなどで改竄がないことが確認されているものとする。
【０１１６】
さて、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、（ｒｐ，ｔｓｐｊ，Ｄａｔａ３＝（ｔｓｓ１，ＩＤｉ，Ｎ，ｊ，ｃ１［ｊ］））を受け取ると、ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃ：＝｛｝として、以下を実施する（ステップＳ２４０）。
１．ｒｐ，ｔｓｓ１，ｔｓｐｊ，ＩＤｉ，ｃ１［ｊ］∈｛０，１｝＾ｋ、かつＮ，ｊ∈｛０，１｝＾ｌ、であるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証する。さらに、ＩＤｉが自身のものと一致するかを確かめる。もし満たしていなければ、ｒｅｓｕｌｔ１：＝００，ｒｃ←｛０，１｝＾（ｋ−２），ｒｃ１：＝ｒｃ１｜｜ｒｅｓｕｌｔ１とする。もし満たしている場合は、以下の操作を実行する。
【０１１７】
２．ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃ：＝ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃ∪ｃ１［ｊ］を算出し、ｒｅｓｕｌｔ１：＝０１とする。
３．乱数ｒｃ１←｛０，１｝＾ｋ−２とし、ｒｃ１：＝ｒｃ１｜｜ｒｅｓｕｌｔ１とする。
４．機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、Ｄａｔａ４：＝（ｔｓｓ１，ＩＤｉ，ｒｃ１，Ｎ，ｊ）として、（ｒｐ，ｔｓｐｊ，Ｄａｔａ４）を機器Ｂ１１０の非セキュア部１２０に送付する（ステップＳ２５０）。もし、ｊ＝Ｎ且つｒｃ１の最下位ビットが１であれば、Ｎ分割したデータの受信動作を完了する。
【０１１８】
５．機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ４を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定し（ステップＳ２５２）、その後、（ｊ＋２，ｒｐ，ｔｓｐｊ，Ｄａｔａ４）を機器Ａ１０２に送付する（ステップＳ２５４）。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後Ｄａｔａ４を消去する。ｊ＜Ｎの場合、機器Ａ１０２からのＤａｔａ３の受信に備えて、Ｄａｔａ３を配置するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定する（ステップＳ２５６）。
【０１１９】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０への送付に時間制約がある場合であってｔｓｐｊが信頼できる場合は、上記１のサイズチェック時に、ｔｓｓ１とｔｓｐｊとを比較することで、その時間制約の確認を実施してもよい。また、認証対象端末での認証処理への時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐｊと認証端末からの認証結果の受取り時刻（以下、ｔｓｐ’と記載）とを比較することで、その時間制約の確認を実施してもよい。
【０１２０】
（２−３）機器Ａでの認証結果の検証：
機器Ｂ１１０の非セキュア部１２０は、（ｊ＋２，ｒｐ，ｔｓｐｊ，Ｄａｔａ４）を機器Ａ１０２に送付する（Ｓ２５４）。機器Ａ１０２は、（ｊ＋２，ｒｐ，ｔｓｐｊ，Ｄａｔａ４＝（ｔｓｓ１，ＩＤｉ，ｒｃ１，Ｎ，ｊ））を受け取ると、以下の処理を実行する（ステップＳ２５７）。
機器Ａ１０２は、ｒｐ，ｔｓｓ１，ｔｓｐｊ，ＩＤｉ，ｒｃ１∈｛０，１｝＾ｋ、且つ、Ｎ，ｊ∈｛０，１｝＾ｌであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、満たしていなければ、ｒｅｓｕｌｔ２：＝００とする。もし満たしていれば、機器Ａ１０２は、ｒｅｓｕｌｔ２：＝ｒｃの下位２ｂｉｔとする。機器Ａ１０２は、ｒｅｓｕｌｔ２＝０１であれば、ｊ：＝ｊ＋１とする。そして、機器Ａ１０２は、ｊ＞Ｎのとき、機器Ａ１０２からの分割データの転送を完了する。ここで、ｒｅｓｕｌｔ２が「０１」を示す場合、データｃ１［ｊ］がサイズを維持したまま、機器Ｂ１１０のデータ格納領域へのデータｃ１［ｊ］の格納が成功したことを意味する。ｒｅｓｕｌｔ２が「００」を示す場合、データサイズが不一致であったことを意味する。
【０１２１】
尚、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０へ分割した認証付き暗号データを送付後、機器Ａ１０２が機器Ｂ１１０の非セキュア部１２０からの応答を取得するまでの間に時間制約がある場合、上記サイズチェック時に、ｔｓｓ１と機器Ａ１０２での現在時刻とを比較することで、その時間制約の確認を実施してもよい。また、機器Ｂ１１０の非セキュア部１２０からの分割した認証付き暗号データのサイズチェック成功可否の機器Ａ１０２への送付に時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ’が追加されたデータを機器Ｂ１１０の非セキュア部１２０から機器Ａ１０２へ送付し、ｔｓｐ’とｔｓｓ１とを比較することで、その時間制約の確認を実施してもよい。
【０１２２】
実施の形態１の変形例にかかるデータ授受シーケンスは、後に述べる（３）結合データの復号とデータ格納を伴う相互認証処理での、分割した認証付き暗号データを全て結合後、認証付き暗号方式での認証と復号を実施する。したがって、｛ｃ１［ｊ］；ｊ＝１，・・・，Ｎ｝の全てまたは何れかが改竄された場合、何らかの改竄があったことを検知することが可能である。
【０１２３】
（３）結合データの復号とデータ格納を伴う相互認証処理：
（３−１）機器認証情報の機器Ａでの構築：
（２）の繰返し実行にて、機器Ａ１０２は、ｊ＞Ｎが満たされると、（２）の繰返し実行完了を識別し、下記を実施する（ステップＳ２６２）。
１．現在の時刻をｔｓｓ２←ＴｉｍｅＳｔａｍｐとして選ぶ。
２．乱数をｒｈ３←｛０，１｝＾ｋとして選ぶ。
３．ｒ３：＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ｔｓｓ２｜｜ＩＤｉ｜｜ｒｈ０｜｜ｒｈ３｜｜Ｎ｜｜Ｎ＋１）を計算する。ここで、最後の「Ｎ＋１」は、分割データの転送が終了したので転送対象データを復号する旨を指示するためのものである。そして、機器Ａ１０２は、Ｄａｔａ５：＝（ｔｓｓ１，ｔｓｓ２，ＩＤｉ，ｒｈ０，ｒｈ３，ｒ３，Ｎ，Ｎ＋１）として、機器Ｂ１１０の非セキュア部１２０に、（ｊ＋２，ｒｐ，Ｄａｔａ５）を送付する（ステップＳ２６３）。ここで、演算子「｜｜」はビット連接を表す。
【０１２４】
（３−２）機器Ｂでのデータ復号とデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ５を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定する（ステップＳ２６４）。つまり、（Ｒ，Ｗ，Ｅ）属性は、書込みのみ可と設定される。また、非セキュア部１２０は、現在の時刻をｔｓｐＮ＋１←ＴｉｍｅＳｔａｍｐとして選び、Ｄａｔａ５を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定する（ステップＳ２６５）。つまり、（Ｒ，Ｗ，Ｅ）属性は、読出しのみ可と設定される。
【０１２５】
その後、非セキュア部１２０は、（ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ５）を機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に送付する（ステップＳ２６６）。送付が完了すると、非セキュア部１２０は、非セキュア部１２０のメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ５を消去する（ステップＳ２６７）。また、非セキュア部１２０は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０から受信するＤａｔａ６を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定しておく（ステップＳ２８１）。ここで、（Ｒ，Ｗ，Ｅ）属性の変更は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に内蔵されたＣＰＵ１１によって実行されてもよいし、非セキュア部１２０のＣＰＵ２によって実行されてもよい。いずれの場合であっても、設定ソフトウェアは、その実行に先立って、セキュアブートなどにより、改竄がないことが確認されているものとする。
【０１２６】
さて、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、（ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ５＝（ｔｓｓ１，ｔｓｓ２，ＩＤｉ，ｒｈ０，ｒｈ３，ｒ３，Ｎ，Ｎ＋１））を受け取ると、ｒｈ４←｛０，１｝＾ｋとして、以下を実施する（ステップＳ２７０）。これにより、機器Ａ１０２の認証、受信されたデータの検証及びデータの復号処理がなされる。
【０１２７】
１．ｒｐ，ｔｓｐＮ＋１，ｔｓｓ１，ｔｓｓ２，ＩＤｉ，ｒｈ０，ｒｈ３，ｒ３∈｛０，１｝＾ｋ、且つ、Ｎ，Ｎ＋１∈｛０，１｝＾ｌであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証する。さらに、ＩＤｉが自身のものと一致するかを確かめる。もし満たしていなければ、ｒｅｓｕｌｔ２：＝００００，ｒｃ２←｛０，１｝＾（ｋ−４），ｒｃ２：＝ｒｃ２｜｜ｒｅｓｕｌｔ２とする。もし満たしている場合は、以下の操作を実行する。そして、後述するような処理はこれ以上実行されない。ここで、ｒｅｓｕｌｔ２の値「００００」は、不正なアクセスがされたことを示す。
【０１２８】
２．ｒ３＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ｔｓｓ２｜｜ＩＤｉ｜｜ｒｈ０｜｜ｒｈ３｜｜Ｎ｜｜Ｎ＋１）を満たすか検証する。満たさない場合、ｒｅｓｕｌｔ２を、署名検証の結果が不合格であることを示すｒｅｓｕｌｔ２：＝１１００とする。満たす場合、ｒ１’＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ＩＤｉ｜｜ｒｈ０｜｜１）を計算し、以下の操作を実行する。
【０１２９】
３．ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ＝ＡＥ．Ｄｅｃ（ｒ１’，ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃ）、つまり認証付き暗号について、（３）の繰返し実行で｛ｃ１［ｊ］；ｊ＝１，・・・，Ｎ｝を連接したｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃの復号を実施し、認証が満たされるかを検証する。もし満たさない場合、ｒｅｓｕｌｔ２を、データの認証の結果が不合格であることを示すｒｅｓｕｌｔ２：＝１０００とする。もし満たしていた場合は、以下の操作を実行する。
【０１３０】
４．アクセス制御設定が、ハードウェアセキュリティモジュール回路１０のみがエラー検出回路４へアクセス可能と設定される。復号して得られたｄａｔａのＣＲＣをＣＲＣ（ｄａｔａ）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。一致しない場合、ｒｅｓｕｌｔ２を、ＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ２：＝０１００とする。もし満たしていた場合は、以下の操作を実行する。
【０１３１】
５．復号で得られたｄａｔａを格納する領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可及び実行不可に）設定し、ｄａｔａを領域Ａ１に格納する（書き込む）。これにより、ＣＲＣチェックで合格した（つまりエラーが検出されなかった）データを書き込む際に、攻撃者等からデータを改竄されることを抑制できる。そして、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）に（つまり読出し可且つ書込み不可に）設定し、ｄａｔａをＡ１から再度読出してｄａｔａ’とする。ｄａｔａ’のＣＲＣをＣＲＣ（ｄａｔａ）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。不揮発性メモリにデータを書き込むときにデータが壊れる可能性があるため、耐故障性を向上させるため、このように、データの書込みの後で書き込んだデータを読み出してＣＲＣチェックを行う。このような処理により、データを書き込む際のエラーを検出するためにデータを読み出すときに、攻撃者等からデータを改竄されることを抑制できる。
【０１３２】
ＣＲＣ（ｄａｔａ’）とｄａｔａ＿ｃｒｃとが一致する場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）または（０，０，１）に（つまり書込み不可に）設定する。そして、領域Ａ１が不揮発性メモリ部なら活性化処理を実施する。さらに、ｒｅｓｕｌｔ２を、全ての処理が成功したことを示すｒｅｓｕｌｔ２：＝０００１とする。ｄａｔａがクリティカルなプログラムであり秘匿性が必要な場合は、（０，０，１）と設定することで実行のみ可能とする。一致しない場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可且つ実行不可に）設定し、領域Ａ１に書き込んだｄａｔａを消去する。これにより、不適切なデータの実行又は読み取りを抑制することができる。そして、ｒｅｓｕｌｔ２を、再度のＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ２：＝００１０とする。
【０１３３】
６．アクセス制御設定が、エラー検出回路４の処理を必要とするＣＰＵ２など他のモジュールがエラー検出回路４へアクセス可能とする（「Ｄｅｆａｕｌｔ」）。そして、乱数をｒｃ２←｛０，１｝＾（ｋ−３）として選び、ｒｃ２：＝ｒｃ２｜｜ｒｅｓｕｌｔ２∈｛０，１｝＾ｋとする。
【０１３４】
７．ｒ４：＝ＰＲＦ（ｓｋｉ，ｔｓｓ２｜｜ｔｓｐＮ＋１｜｜ＩＤｉ｜｜ｒｈ４｜｜ｒｃ２｜｜０）を求める。そして、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、Ｄａｔａ６：＝（ｔｓｓ２，ＩＤｉ，ｒｈ４，ｒｃ２，ｒ４）として、（ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ６）を機器Ｂ１１０の非セキュア部１２０に送付する（ステップＳ２８２）。
【０１３５】
８．機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ６を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定した後（ステップＳ２８３）、（ｊ＋２，ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ６）を機器Ａ１０２に送付する（ステップＳ２８４）。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ６を消去する（ステップＳ２８５）。
【０１３６】
なお、（Ｒ，Ｗ，Ｅ）属性の更新は、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構（アクセス制御回路２０）を用いて行われてもよい。なお、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構を用いない場合は、メモリプロテクションユニット（ＭＰＵ）又はメモリ管理ユニット（ＭＭＵ）を用いて設定が行われてもよい。また、図６の機構を用いる場合、Ｒ属性とＷ属性がたとえ０となっていてもハードウェアセキュリティモジュール回路１０の設定で読出し及び書込みを可能とできるため、これを考慮した属性変更を行う必要がある。図６においてＳ１とＳ２との遷移がなされない場合は、更新可能な範囲が制限されるため、その制限に沿った形で属性変更を行う必要がある。
【０１３７】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０への送付に時間制約がある場合であってｔｓｐＮ＋１が信頼できる場合は、上記１のサイズチェック時に、ｔｓｓ２とｔｓｐＮ＋１とを比較することで、その時間制約の確認を実施してもよい。また、認証対象端末での認証処理への時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐＮ＋１と認証端末からの認証結果の受取り時刻（以下、ｔｓｐ’と記載）とを比較することで、その時間制約の確認を実施しても良い。これにより、処理にあまりにも長い時間を要した場合に、不適切な処理を検出することができる。
【０１３８】
（３−３）機器Ａでの認証結果の検証：
機器Ｂ１１０の非セキュア部１２０は、（ｊ＋２，ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ６）を機器Ａ１０２に送付する（Ｓ２８４）。機器Ａ１０２は、（ｊ＋２，ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ６＝（ｔｓｓ２，ＩＤｉ，ｒｈ４，ｒｃ２，ｒ４））を受け取ると、以下の処理を実行する（ステップＳ２８６）。これにより、機器Ａ１０２と機器Ｂ１１０との相互認証が行われることとなる。
【０１３９】
機器Ａ１０２は、ｒｐ，ｔｓｓ２，ｔｓｐＮ＋１，ＩＤｉ，ｒｈ４，ｒｃ２，ｒ４∈｛０，１｝＾ｋであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、満たしていなければ、ｒｅｓｕｌｔ２：＝１１１０とする。もし満たしていれば、機器Ａ１０２は、ｒ４＝ＰＲＦ（ｓｋｉ，ｔｓｓ２｜｜ｔｓｐＮ＋１｜｜ＩＤｉ｜｜ｒｈ４｜｜ｒｃ２｜｜０）であるか（つまり署名が正しいか否か）を検証する。機器Ａ１０２は、もし正しければｒｅｓｕｌｔ２：＝ｒｃ２の下位４ｂｉｔとし、そうでなければｒｅｓｕｌｔ２：＝１１１０とする。
【０１４０】
そして、機器Ａ１０２は、ｒｅｓｕｌｔ２を認証結果として出力し、これを記録する。ここで、ｒｅｓｕｌｔ２が「０００１」を示す場合、機器Ａ１０２と機器Ｂ１１０との間での相互認証が成功し、データｄａｔａが中間者に改竄されることも漏洩することもなく、またデータが欠損することもなく、機器Ｂ１１０のデータ格納領域にデータ格納を行うことが成功したことを意味する。また、ｒｅｓｕｌｔ２が「００１０」を示す場合、書込みでのデータ欠損による書込み失敗を意味する。また、ｒｅｓｕｌｔ２が「０１００」を示す場合、認証・復号は成功したが書込み前にデータ欠損が発生したことを意味する。また、ｒｅｓｕｌｔ２が「１０００」を示す場合、ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃの認証付き暗号方式での認証が失敗したこと、つまり、｛ｃ１［ｊ］；ｊ＝１，・・・，Ｎ｝の何れかの改竄の可能性があることを意味する。また、ｒｅｓｕｌｔ２が「１１００」を示す場合、受信エラー（メッセージ改竄の可能性あり）が発生したことを意味する。
【０１４１】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０へ認証データを送付後、機器Ａ１０２が機器Ｂ１１０の非セキュア部１２０からの認証データを取得するまでの間に時間制約がある場合、上記サイズチェック時に、ｔｓｓ２と機器Ａ１０２での現在時刻とを比較することで、その時間制約の確認を実施してもよい。また、機器Ｂ１１０の非セキュア部１２０からの認証付き暗号データへの復号操作の成功可否の機器Ａ１０２への送付に時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ’が追加されたデータを機器Ｂ１１０の非セキュア部１２０から機器Ａ１０２へ送付し、ｔｓｐ’とｔｓｓ２とを比較することで、その時間制約の確認を実施してもよい。
【０１４２】
実施の形態１の変形例にかかるデータ授受シーケンスは、ｒｐが改竄されると、対応するセッションが非存在となるか、存在したとしても異なるセッションでの機器Ｂ１１０での認証が実施されて認証が失敗するためシーケンスが継続しないので、フェールセーフである。また、実施の形態１の変形例にかかるデータ授受シーケンスは、ｒｈ４が改竄された場合も、機器Ａ１０２の認証付き暗号の復号処理可否に対する検証が失敗するため、フェールセーフである。また、実施の形態１の変形例にかかるデータ授受シーケンスは、機器Ａ１０２での認証付き暗号の復号操作の成功可否に対する検証手段により、攻撃者等がｒｃ２の値を改竄しても、機器Ａ１０２で検証合格とすることはできない。また、実施の形態１の変形例にかかるデータ授受シーケンスでは、ｔｓｐＮ＋１が改竄された場合も、機器Ａ１０２での認証結果の検証手段により、機器Ａ１０２で検証合格とすることはできない。つまり、ｒｐ、ｒｈ４、ｔｓｐＮ＋１の何れを改竄しても、攻撃者等は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０で構成した認証付き暗号の復号処理可否を、書込み成功や検証合格とすることができない。したがって、ｒｐ，ｒｈ４，ｒｃ２の全てまたは何れかが改竄された場合、何らかの改竄があったことを検知することが可能となる。なお、改竄による認証失敗や検証不合格を効率よく検出する目的で、ｔｓｐＮ＋１に対してハッシュ値を付加してもよい。
【０１４３】
また、実施の形態１の変形例にかかるデータ授受シーケンスは、データサイズに制限がある場合、転送対象データの転送の前後で相互認証を行い、転送対象データ全体にＣＲＣを付加して認証付き暗号方式で暗号化し、その暗号化されたデータ全体を分割して転送している。したがって、分割されたデータそれぞれの転送の際に、相互認証が不要となる。したがって、実施の形態１の変形例にかかるデータ授受シーケンスでは、転送回数ごとに暗号化して転送するよりも、効率よく転送することが可能である。
【０１４４】
（実施の形態２）
次に、実施の形態２について説明する。図１１〜図１３に示したシーケンス図は、認証付き暗号方式を用いた、改竄耐性と秘匿性を持つ機能安全考慮のデータ授受プロトコルを実現する。一方、改竄耐性のみの保証が必要な場合は、署名発行検証だけで機能安全考慮のシーケンスが構成可能である。ここで、機能安全考慮とは、通信路でのデータ誤りやハードウェア故障によるデータ誤りへの対応を示す。
【０１４５】
図２０〜図２２は、実施の形態２にかかる認証システム１００において実行されるデータ授受シーケンスである。なお、実施の形態２にかかる認証システム１００の構成は、図１０に示した実施の形態１にかかる認証システム１００と実質的に同様であるので、説明を省略する。なお、機器Ａ１０２及び機器Ｂ１１０に対する共通対称鍵の初期設定として、下記設定が事前になされているものとする。
【０１４６】
セキュリティパラメータをｋとし、機器Ａ１０２Ａは、１＾ｋを入力とする。機器Ａ１０２は、認証識別子ＩＤｉ∈｛０，１｝＾ｋが割り振られている機器Ｂ１１０に対して対称鍵ｓｋｉ←｛０，１｝＾ｋを選び、（ｓｋｉ，ＩＤｉ）を送付する。機器Ｂ１１０は、（ｓｋｉ，ＩＤｉ）を不揮発性メモリに保存する。また、機器Ｂ１１０は、認証識別子ＩＤｉの集合ＩＤを機器Ａ１０２に送付する。ここで、機器Ｂ１１０の総数をＮとし、ｉ∈［１，Ｎ］とする。例えば、機器Ｂ１１０を出荷する前にこれらの初期設定を実行することで、各機器Ｂ１１０に個別の鍵を設定するとともに、機器Ａ１０２に同鍵を格納してもよい。また、機器Ｂ１１０の非セキュア部１２０は、機器Ｂ１１０に内蔵されたハードウェアセキュリティモジュール回路１０に格納されたＩＤｉを読み出すことが可能であるとする。但し、上書き変更や消去は、適切なアクセス制御によりできないものとする。
【０１４７】
（１）機器認証情報の機器Ａでの構築：
機器Ｂ１１０の非セキュア部１２０は、ハードウェアセキュリティモジュール回路１０からＩＤｉを取得する（ステップＳ３０１）。非セキュア部１２０は、ハードウェアセキュリティモジュール回路１０からＩＤｉを読み出してもよいし、ハードウェアセキュリティモジュール回路１０からＩＤｉを受信してもよい。非セキュア部１２０は、ＩＤｉを得ると、セッション管理のためにセッション情報ｒｐ∈｛０，１｝＾ｋを選択し（ステップＳ３０２）、（１，ｒｐ，ＩＤｉ）を機器Ａ１０２に送付する（ステップＳ３０３）。ここで、「１」は、セッション情報ｒｐにおける１番目の処理を示す。機器Ａ１０２は、（１，ｒｐ，ＩＤｉ）を受け取ると、下記の処理を実施する（ステップＳ３０４）。これにより、機器Ｂ１１０が認証される。
【０１４８】
１．ｒｐ，ＩＤｉ∈｛０，１｝＾ｋであるか、そしてＩＤｉ∈ＩＤであるかを検証する。つまり、ｒｐ，ＩＤｉのビット長の検証及びＩＤｉが登録されたものであるか否かの検証を行う。もし異なっていれば処理を終了する。もし満たしていれば、以下を実行する。
２．現在の時刻をｔｓｓ←ＴｉｍｅＳｔａｍｐとして選ぶ。
３．乱数をｒｈ１←｛０，１｝＾ｋとして選ぶ。
４．送信データｄａｔａに対して、ＣＲＣまたはＥＣＣを算出し、例えばＣＲＣを算出したとして、ｄａｔａ＿ｃｒｃ：＝ＣＲＣ（ｄａｔａ）とする。
５．ｒ１：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ｜｜１）を計算する。ここで、ｒ１は、データｄａｔａに対する署名である。このように、実施の形態２ではｃ１（認証付き暗号データ）を生成しない。言い換えると、実施の形態２では、データを暗号化しない。
そして、機器Ａ１０２は、Ｄａｔａ１：＝（ｔｓｓ，ＩＤｉ，ｒｈ１，ｒ１，ｄａｔａ，ｄａｔａ＿ｃｒｃ）として、機器Ｂ１１０の非セキュア部１２０に、（１，ｒｐ，Ｄａｔａ１）を送付する（ステップＳ３０５）。
【０１４９】
（２）機器Ｂでのデータ署名検証とデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ１を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を、例えば上述したアクセス制御回路２０により、（１，１，０）または（０，１，０）に設定する（ステップＳ３０６）。つまり、アクセス制御回路２０は、（Ｒ，Ｗ，Ｅ）属性を、書込み可且つプログラムの実行不可と設定する。また、非セキュア部１２０は、現在の時刻をｔｓｐ←ＴｉｍｅＳｔａｍｐとして選び、Ｄａｔａ１を受け取ると、非セキュア部１２０のメモリ領域の（Ｒ，Ｗ，Ｅ）属性を、例えばアクセス制御回路２０により、（１，０，０）に設定する（ステップＳ３０７）。つまり、アクセス制御回路２０は、（Ｒ，Ｗ，Ｅ）属性を、読出しのみ可と設定する。
【０１５０】
その後、非セキュア部１２０は、（ｒｐ，ｔｓｐ，Ｄａｔａ１）を機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に送付する（ステップＳ３０８）。このとき、送付が完了すると、非セキュア部１２０は、非セキュア部１２０のメモリ領域の（Ｒ，Ｗ，Ｅ）属性を、例えばアクセス制御回路２０により（０，１，０）に設定した後でＤａｔａ１を消去する（ステップＳ３０９）。ここで、（Ｒ，Ｗ，Ｅ）属性の変更は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に内蔵されたＣＰＵ１１によって実行されてもよいし、非セキュア部１２０のＣＰＵ２によって実行されてもよい。いずれの場合であっても、設定ソフトウェアは、その実行に先立って、セキュアブートなどにより、改竄がないことが確認されているものとする。
【０１５１】
さて、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、（ｒｐ，ｔｓｐ，Ｄａｔａ１＝（ｔｓｓ，ＩＤｉ，ｒｈ１，ｒ１，ｄａｔａ，ｄａｔａ＿ｃｒｃ））を受け取ると、ｍをｄａｔａ｜｜ｄａｔａ＿ｃｒｃのサイズとして、ｒｈ２←｛０，１｝＾ｍとして（つまりｒｈ２のビット長をｍとして）、以下を実施する（ステップＳ３１０）。これにより、機器Ａ１０２の認証及び受信されたデータの検証がなされる。
【０１５２】
１．ｒｐ，ｔｓｐ，ｔｓｓ，ＩＤｉ，ｒｈ１，ｒ１，ｄａｔａ，ｄａｔａ＿ｃｒｃ∈｛０，１｝＾ｋであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証する。さらに、ＩＤｉが自身のものと一致するかを確かめる。これにより、簡単なスクリーニングがなされる。
もし満たしていなければ、ｒｅｓｕｌｔ１：＝０００，ｒｃ←｛０，１｝＾（ｋ−３），ｒｃ：＝ｒｃ｜｜ｒｅｓｕｌｔ１とする。そして、後述するような処理はこれ以上実行されない。ここで、ｒｅｓｕｌｔ１の値「０００」は、不正なアクセスがされたことを示す。もし満たしている場合は、以下の操作を実行する。
【０１５３】
２．ｒ１＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ１｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ｜｜１）、つまり、認証（署名検証）が満たされるかを検証する。もし満たさない場合、ｒｅｓｕｌｔ１を、署名検証が失敗したことを示すｒｅｓｕｌｔ１：＝１１０とする。もし満たしていた場合は、以下の操作を実行する。
【０１５４】
３．例えばアクセス制御回路２０により、アクセス制御設定が、ハードウェアセキュリティモジュール回路１０のみがエラー検出回路４へアクセス可能と設定される。ｄａｔａのＣＲＣをｄａｔａ＿ｃｒｃとは別にＣＲＣ（ｄａｔａ）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。一致しない場合、ｒｅｓｕｌｔ１を、ＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ１：＝１００とする。もし満たしていた場合は、以下の操作を実行する。
【０１５５】
ここで、アクセス制御機構がない場合は、機器Ｂ１１０内の非セキュア部１２０に配置されているエラー検出回路４にＣＲＣチェックを依頼することとなる。その場合は、ハードウェアセキュリティモジュール回路１０は、乱数ｒｈ２’←｛０，１｝＾ｋを選択し、ｒ０：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ２’｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ｜｜２）として、ｄａｔａを機器Ｂ１１０内の非セキュア部１２０に配置されているエラー検出回路４に送付する。これにより、ハードウェアセキュリティモジュール回路１０は、ＣＲＣチェックをエラー検出回路４に委譲し、結果及びｄａｔａ＿ｃｒｃ２を受け取る。次いで、ハードウェアセキュリティモジュール回路１０は、データ改竄がない事の確認として、ｒ０＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ２’｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ２｜｜２）が満たされるかを検証し、満たさない場合又は受け取り結果がＮＧの場合は、ｒｅｓｕｌｔ１：＝１００とする。もし満たしており結果がＯＫの場合は、以下の操作を実行する。
【０１５６】
４．ｄａｔａを格納する領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可及び実行不可に）設定し、ｄａｔａを領域Ａ１に格納する（書き込む）。これにより、ＣＲＣチェックで合格した（つまりエラーが検出されなかった）データを書き込む際に、攻撃者等からデータを改竄されることを抑制できる。そして、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）に（つまり読出し可且つ書込み不可に）設定し、ｄａｔａをＡ１から再度読み出してｄａｔａ’とする。ｄａｔａ’のＣＲＣをＣＲＣ（ｄａｔａ’）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。不揮発性メモリにデータを書き込むときにデータが壊れる可能性があるため、耐故障性を向上させるため、このように、データの書込みの後でデータを読み出してＣＲＣチェックを行う。このような処理により、データを書き込む際のエラーを検出するためにデータを読み出すときに、攻撃者等からデータを改竄されることを抑制できる。
【０１５７】
ＣＲＣ（ｄａｔａ’）とｄａｔａ＿ｃｒｃとが一致する場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）または（０，０，１）に（つまり書込み不可に）設定する。領域Ａ１が不揮発性メモリ部なら活性化処理を実施する。さらに、ｒｅｓｕｌｔ１を、全ての処理が成功したことを示すｒｅｓｕｌｔ１：＝００１とする。ｄａｔａがクリティカルなプログラムであり秘匿性が必要な場合は、（０，０，１）と設定することで実行のみ可能とする。一致しない場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可且つ実行不可に）設定し、領域Ａ１に書き込んだｄａｔａを消去する。これにより、不適切なデータの実行又は読み取りを抑制することができる。そして、ｒｅｓｕｌｔ１を、再度のＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ１：＝０１０とする。
【０１５８】
ここで、エラー検出回路４に対するアクセス制御設定が出来ない場合は、エラー検出回路４にＣＲＣチェックを依頼することとなる。この場合、以下のような処理を行ってもよい。すなわち、ハードウェアセキュリティモジュール回路１０は、乱数ｒｈ２’’←｛０，１｝＾ｋを選択し、ｒ０’：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ２’’｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ｜｜３）として、ｄａｔａを機器Ｂ１１０内の非セキュア部１２０に配置されているエラー検出回路４に送付する。これにより、ハードウェアセキュリティモジュール回路１０は、ＣＲＣチェックをエラー検出回路４に委譲し、結果及びｄａｔａ＿ｃｒｃ２’を受け取る。次いで、ハードウェアセキュリティモジュール回路１０は、データ改竄がない事の確認として、ｒ０’＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ２’’｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ２’｜｜３）が満たされるかを検証する。満たさない場合又は受け取り結果がＮＧの場合は、ハードウェアセキュリティモジュール回路１０は、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（１，０，０）または（０，１，０）に設定し、領域Ａ１に書き込んだｄａｔａを消去し、ｒｅｓｕｌｔ１：＝０１０とする。もし満たしており結果がＯＫの場合は、ハードウェアセキュリティモジュール回路１０は、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（１，０，０）または（０，０，１）に設定する。さらに、ハードウェアセキュリティモジュール回路１０は、領域Ａ１が不揮発性メモリ部なら活性化処理を実施する。さらに、ハードウェアセキュリティモジュール回路１０は、ｒｅｓｕｌｔ１：＝００１とする。ｄａｔａがクリティカルなプログラムであり秘匿性が必要な場合は、（０，０，１）と設定する事で実行のみ可能とする。
【０１５９】
５．例えばアクセス制御回路２０により、アクセス制御設定が、エラー検出回路４の処理を必要とするＣＰＵ２など他のモジュールがエラー検出回路４へアクセス可能と設定される。そして、乱数をｒｃ←｛０，１｝＾（ｋ−３）として選び、ｒｃ：＝ｒｃ｜｜ｒｅｓｕｌｔ１∈｛０，１｝＾ｋとする。
【０１６０】
６．ｒ２：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｉ｜｜ｒｈ２｜｜ｒｃ）を求める。そして、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、Ｄａｔａ２：＝（ｔｓｓ，ＩＤｉ，ｒｈ２，ｒｃ，ｒ２）として、（ｒｐ，ｔｓｐ，Ｄａｔａ２）を、機器Ｂ１１０の非セキュア部１２０に送付する（ステップＳ３２０）。
【０１６１】
７．機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ２を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定した後（ステップＳ３２１）、（２，ｒｐ，ｔｓｐ，Ｄａｔａ２）を機器Ａ１０２に送付する（ステップＳ３２２）。ここで、「２」は、セッション情報ｒｐにおける２番目の処理を示す。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定し、その後、Ｄａｔａ２を消去する（ステップＳ３２３）。
【０１６２】
なお、（Ｒ，Ｗ，Ｅ）属性の更新は、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構（アクセス制御回路２０）を用いて行われてもよい。なお、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構を用いない場合は、メモリプロテクションユニット（ＭＰＵ）又はメモリ管理ユニット（ＭＭＵ）を用いて設定が行われてもよい。また、図６の機構を用いる場合、Ｒ属性とＷ属性がたとえ０となっていてもハードウェアセキュリティモジュール回路１０の設定で読出し及び書込みを可能とできるため、これを考慮した属性変更を行う必要がある。図６においてＳ１とＳ２との遷移がなされない場合は、更新可能な範囲が制限されるため、その制限に沿った形で属性変更を行う必要がある。
【０１６３】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０への送付に時間制約がある場合であってｔｓｐが信頼できるときは、上記１．のサイズチェック時に、ｔｓｓとｔｓｐとを比較することで、時間制約の確認を実施してもよい。また、認証対象端末での認証処理への時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐと認証端末からの認証結果の受け取り時刻（以下、ｔｓｐ２と記載）とを比較することで、時間制約の確認を実施してもよい。これにより、処理にあまりにも長い時間を要した場合に、不適切な処理を検出することができる。
【０１６４】
（３）機器Ａでの認証結果の検証：
機器Ｂ１１０の非セキュア部１２０は、（２，ｒｐ，ｔｓｐ，Ｄａｔａ２）を機器Ａ１０２に送付する（Ｓ３２２）。機器Ａ１０２は、（２，ｒｐ，ｔｓｐ，Ｄａｔａ２＝（ｔｓｓ，ＩＤｉ，ｒｈ２，ｒｃ，ｒ２））を受け取ると、以下の処理を実行する（ステップＳ３２４）。これにより、機器Ａ１０２と機器Ｂ１１０との相互認証が行われることとなる。なお、データの暗号化は行われていないので、復号はなされない。
【０１６５】
機器Ａ１０２は、ｒｐ，ｔｓｓ，ｔｓｐ，ＩＤｉ，ｒｃ，ｒ２∈｛０，１｝＾ｋ、且つｒｈ２∈｛０，１｝＾ｍであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、満たしていなければ、ｒｅｓｕｌｔ２：＝０００とする。もし満たしていれば、機器Ａ１０２は、ｒ２＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｉ｜｜ｒｈ２｜｜ｒｃ）であるか（つまり署名が正しいか否か）を検証する。機器Ａ１０２は、もし正しければｒｅｓｕｌｔ２：＝ｒｃの下位３ｂｉｔ（つまりｒｅｓｕｌｔ１の値）とし、そうでなければｒｅｓｕｌｔ２：＝０００とする。
【０１６６】
そして、機器Ａ１０２は、ｒｅｓｕｌｔ２を認証結果として出力し、これを記録する。ここで、ｒｅｓｕｌｔ２が「００１」を示す場合、データｄａｔａが中間者に改竄されることなく、またデータが欠損することもなく、機器Ｂ１１０のデータ格納領域にデータ格納を行うことが成功したことを意味する。また、ｒｅｓｕｌｔ２が「０１０」を示す場合、書込みでのデータ欠損による書込み失敗を意味する。また、ｒｅｓｕｌｔ２が「１００」を示す場合、認証は成功したが書込み前にデータ欠損が発生したことを意味する。また、ｒｅｓｕｌｔ２が「１１０」を示す場合、受信エラー（メッセージ改竄の可能性あり）が発生したことを意味する。
【０１６７】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０へ認証付き暗号データを送付後、機器Ａ１０２が機器Ｂ１１０の非セキュア部１２０からの認証付き暗号データを取得するまでの間に時間制約がある場合、上記サイズチェック時に、ｔｓｓと機器Ａ１０２での現在時刻とを比較する事で、その時間制約の確認を実施してもよい。また、機器Ｂ１１０の非セキュア部１２０からの署名データに対する署名検証の成功可否の機器Ａ１０２への送付に時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ２が追加されたデータを機器Ｂ１１０の非セキュア部１２０から機器Ａ１０２へ送付し、ｔｓｐ２とｔｓｓとを比較する事で、その時間制約の確認を実施してもよい。
【０１６８】
実施の形態２にかかる半導体装置１（機器Ｂ１１０）は、外部の機器である機器Ａ１０２から、機器Ｂ１１０に転送対象データが転送される場合に、ハードウェアセキュリティモジュール回路１０が、非セキュア部１２０のメモリ領域を介して、認証用データ（Ｄａｔａ１，Ｄａｔａ２）を、機器Ａ１０２から受信し、機器Ａ１０２に送信する。これにより、半導体装置１（機器Ｂ１１０）は、機器Ａ１０２と相互認証を行うことができる。ここで、非セキュア部１２０のメモリ領域は、アクセス制御により、攻撃者等からのアクセスがなされないように構成されている。したがって、転送対象データが転送されるときに、攻撃者等が相手側の機器になりすますことを抑制することが可能となる。
【０１６９】
実施の形態２にかかるデータ授受シーケンスは、ｒｐが改竄されると、対応するセッションが非存在となるか、存在したとしても異なるセッションでの機器Ｂ１１０における認証の失敗のためシーケンスが継続しないため、フェールセーフである。また、実施の形態２にかかるデータ授受シーケンスは、ｒｈ２が改竄されると、機器Ａ１０２の署名データに対する署名検証が失敗するため、フェールセーフである。また、実施の形態２にかかるデータ授受シーケンスでは、機器Ａ１０２での署名データに対する署名の検証手段により、攻撃者等がｒｃの値を改竄しても、機器Ａ１０２で検証合格とすることはできない。また、実施の形態２にかかるデータ授受シーケンスでは、ｔｓｐが改竄された場合も、機器Ａ１０２での認証結果の検証手段により、機器Ａ１０２で検証合格とすることはできない。つまり、ｒｐ、ｒｈ２、ｔｓｐの何れを改竄しても、攻撃者等は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０で構成した署名データに対する署名検証を、書込み成功や検証合格とすることができない。したがって、実施の形態２においては、ｒｐ，ｒｈ２，ｒｃの全てまたは何れかが改竄された場合、何らかの改竄があったことを検知することが可能となる。なお、改竄による認証失敗又は検証不合格を効率よく検出する目的で、ｔｓｐに対してハッシュ値を付加してもよい。
【０１７０】
さらに、実施の形態２においては、転送対象データを暗号化していない。しかしながら、非セキュア部１２０に対するアクセス制御を行っているため、データ転送時に、攻撃者等がデータを読み出すこと、及び攻撃者等がデータ（プログラム）を実行することを抑制することが可能となる。さらに、たとえ改竄がなされたとしても、ＣＲＣチェックによって、改竄があったことを検出することは可能である。したがって、転送対象データを暗号化することなしに、署名検証のみで、セキュアで機能安全を考慮したデータ授受を実現できる。これにより、転送対象データを暗号化するための処理及びハードウェアを削減することが可能となる。
【０１７１】
（実施の形態２の変形例）
次に、実施の形態２の変形例について説明する。図２０〜図２２に示したシーケンス図は、機器Ａ１０２から機器Ｂ１１０へ、転送対象データを一回で転送するためのシーケンスである。ここで、転送対象データのデータサイズが転送可能サイズよりも大きいためデータを分割して複数回に分けて転送することが必要な場合は、図２０〜図２２に記載したシーケンスをそのまま用いる場合、その回数分、署名検証等の処理を実行する必要がある。
【０１７２】
ここで、転送可能サイズに制限がある場合、転送対象データ全体に対して署名データ等を付加し、その署名データ等が付加されたデータ全体を分割して転送する方が、転送回数ごとに署名データ等を付加して転送するよりも、効率がよいと考えらえる。例えば、不揮発性メモリへのデータ格納を考えた場合、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０にデータが十分蓄積されてから、署名検証等を実施し、データ領域への書込みを実施した方が、効率がよい。
【０１７３】
図２３〜図２８は、実施の形態２の変形例にかかる認証システム１００において実行されるデータ授受シーケンスを示すシーケンス図である。なお、実施の形態２の変形例にかかる認証システム１００の構成は、図１０に示した実施の形態１にかかる認証システム１００と実質的に同様であるので、説明を省略する。
【０１７４】
図２３〜図２８のシーケンス図を用いて、改竄耐性と秘匿性を持つ機能安全考慮のデータ一括での署名データ等の付加と署名データ等が付加されたデータの分割転送でのデータ授受を可能とするプロトコルの動作を説明する。ここで、図２３〜図２８のシーケンスは、（１）転送回数の通知を伴う相互認証処理（Ｓ４０１〜Ｓ４２４）、（２）全体で署名が付加されたデータの繰返し分割転送処理（Ｓ４３１〜Ｓ４５７）、及び、（３）結合データの署名検証とデータ格納を伴う相互認証処理（Ｓ４６２〜Ｓ４８６）を有する。なお、機器Ａ１０２及び機器Ｂ１１０に対する共通対称鍵の初期設定として、下記設定が事前になされているものとする。
【０１７５】
セキュリティパラメータをｋとし、機器Ａ１０２は１＾ｋを入力とする。機器Ａ１０２は、認証識別子ＩＤｉ∈｛０，１｝＾ｋが割り振られている機器Ｂ１１０に対して対称鍵ｓｋｉ←｛０，１｝＾ｋを選び、（ｓｋｉ，ＩＤｉ）を送付する。機器Ｂ１１０は、（ｓｋｉ，ＩＤｉ）を不揮発性メモリに保存する。また、認証識別子ＩＤｉの集合ＩＤを機器Ａ１０２に送付する。ここで、機器Ｂ１１０の総数をＭとし、ｉ∈［１，Ｍ］とする。例えば、機器Ｂ１１０を出荷する前にこれら処理を実施する事で、各機器Ｂ１１０に個別の鍵を設定するとともに、機器Ａ１０２に同鍵を格納してもよい。また、機器Ｂ１１０の非セキュア部１２０は、機器Ｂ１１０に内蔵されたハードウェアセキュリティモジュール回路１０に格納されたＩＤｉを読み出し可能とする。但し、上書き変更や消去は、適切なアクセス制御によりできないものとする。
【０１７６】
（１）転送回数の通知を伴う相互認証処理：
（１−１）機器認証情報の機器Ａでの構築：
機器Ｂ１１０の非セキュア部１２０は、ハードウェアセキュリティモジュール回路１０からＩＤｉを取得する（ステップＳ４０１）。非セキュア部１２０は、ハードウェアセキュリティモジュール回路１０からＩＤｉを読み出してもよいし、ハードウェアセキュリティモジュール回路１０からＩＤｉを受信してもよい。非セキュア部１２０は、ＩＤｉを得ると、セッション管理のためにセッション情報ｒｐ∈｛０，１｝＾ｋを選択し（ステップＳ４０２）、（１，ｒｐ，ＩＤｉ）を機器Ａ１０２に送付する（ステップＳ４０３）。ここで、「１」は、セッション情報ｒｐにおける１番目の処理を示す。機器Ａ１０２は、（１，ｒｐ，ＩＤｉ）を受け取ると、下記を実施する（ステップＳ４０４）。これにより、機器Ｂ１１０が認証され、転送回数に署名が付される。
【０１７７】
１．ｒｐ，ＩＤｉ∈｛０，１｝＾ｋであるか、そしてＩＤｉ∈ＩＤであるかを検証する。もし異なっていれば処理を終了する。もし満たしていれば、以下を実行する。
２．現在の時刻をｔｓｓ１←ＴｉｍｅＳｔａｍｐとして選ぶ。
３．乱数をｒｈ１←｛０，１｝＾ｋとして選ぶ。
４．送信データｄａｔａに対して、ＣＲＣまたはＥＣＣを算出し、例えばＣＲＣを算出したとして、ｄａｔａ＿ｃｒｃ：＝ＣＲＣ（ｄａｔａ）とする。そして、機器Ａ１０２は、ｄａｔａ｜｜ｄａｔａ＿ｃｒｃを、転送サイズを考慮してＮ個に分割し、｛ｄ［ｊ］；ｊ＝１，・・・，Ｎ｝を構成する。
５．分割転送個数Ｎの通知を行うために、ｒ１：＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ＩＤｉ｜｜ｒｈ１｜｜Ｎ｜｜１）を計算する。ここで、ｒ１は、転送対象データに対する署名ではなく、転送回数Ｎに対する署名である。また、「ｓｋｉ」は、署名検証用の鍵である。
６．Ｄａｔａ１：＝（ｔｓｓ，ＩＤｉ，ｒｈ１，ｒ１，Ｎ）として、機器Ｂ１１０の非セキュア部１２０に、（１，ｒｐ，Ｄａｔａ１）を送付する（ステップＳ４０５）。
【０１７８】
（１−２）機器Ｂでのデータ署名検証とデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ１を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に設定する（ステップＳ４０６）。つまり、（Ｒ，Ｗ，Ｅ）属性は、書込み可且つプログラムの実行不可と設定される。また、（Ｒ，Ｗ，Ｅ）属性の変更は、例えば上述したアクセス制御回路２０を用いて行われてもよい。また、非セキュア部１２０は、現在の時刻をｔｓｐ１←ＴｉｍｅＳｔａｍｐとして選び、Ｄａｔａ１を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定する（ステップＳ４０７）。つまり、アクセス制御回路２０は、（Ｒ，Ｗ，Ｅ）属性を、読出しのみ可と設定する。
【０１７９】
その後、非セキュア部１２０は、（ｒｐ，ｔｓｐ１，Ｄａｔａ１）を機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に送付する（ステップＳ４０８）。送付が完了すると、非セキュア部１２０は、非セキュア部１２０のメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ１を消去する（ステップＳ４０９）。ここで、（Ｒ，Ｗ，Ｅ）属性の変更は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に内蔵されたＣＰＵ１１によって実行されてもよいし、非セキュア部１２０のＣＰＵ２によって実行されてもよい。いずれの場合であっても、設定ソフトウェアは、その実行に先立って、セキュアブートなどにより、改竄がないことが確認されているものとする。
【０１８０】
さて、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、（ｒｐ，ｔｓｐ１，Ｄａｔａ１＝（ｔｓｓ１，ＩＤｉ，ｒｈ１，ｒ１，Ｎ））を受け取ると、ｒｈ２←｛０，１｝＾ｋとして、以下を実施する（ステップＳ４１０）。これにより、機器Ａ１０２及び転送回数Ｎの認証がなされる。
【０１８１】
１．ｒｐ，ｔｓｐ１，ｔｓｓ１，ＩＤｉ，ｒｈ１，ｒ１∈｛０，１｝＾ｋであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証する。さらに、ＩＤｉが自身のものと一致するかを確かめる。もし満たしていなければ、ｒｅｓｕｌｔ１：＝００，ｒｃ１←｛０，１｝＾（ｋ−２），ｒｃ１：＝ｒｃ１｜｜ｒｅｓｕｌｔ１とする。そして、後述するような処理はこれ以上実行されない。ここで、ｒｅｓｕｌｔ１の値「００」は、不正なアクセスがされたことを示す。もし満たしている場合は、以下の操作を実行する。
【０１８２】
２．ｒ１＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ＩＤｉ｜｜ｒｈ１｜｜Ｎ｜｜１）を満たすかを検証する。もし満たしている場合は、ｒｅｓｕｌｔ１を、機器Ａ１０２及び転送回数Ｎの認証に成功したことを示すｒｅｓｕｌｔ１：＝０１とし、満たさない場合は、ｒｅｓｕｌｔ１を、機器Ａ１０２の認証に失敗したことを示すｒｅｓｕｌｔ１：＝１０とする。なお、分割数「Ｎ」がハードウェアセキュリティモジュール回路１０に送付されたので、ハードウェアセキュリティモジュール回路１０は、機器Ａ１０２からデータが何回送られてくるか（つまりデータが何個に分割されたか）を把握できる。
【０１８３】
３．乱数ｒｃ１←｛０，１｝＾ｋ−２とし、ｒｃ１：＝ｒｃ１｜｜ｒｅｓｕｌｔ１とする。
４．ｒ２：＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ｔｓｐ１｜｜ＩＤｉ｜｜ｒｈ２｜｜ｒｃ１｜｜Ｎ）を計算する。ここで、ｒ２は、転送回数Ｎに対する署名である。そして、機器Ｂ１１０は、Ｄａｔａ２：＝（ｔｓｓ１，ＩＤｉ，ｒｈ２，ｒｃ１，Ｎ，ｒ２）として、（ｒｐ，ｔｓｐ１，Ｄａｔａ２）を、機器Ｂ１１０の非セキュア部１２０に送付する（ステップＳ４２０）。
【０１８４】
５．機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ２を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定した後（ステップＳ４２１）、（２，ｒｐ，ｔｓｐ１，Ｄａｔａ２）を機器Ａ１０２に送付する（ステップＳ４２２）。ここで、「２」は、セッション情報ｒｐにおける２番目の処理を示す。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ２を消去する。さらに、非セキュア部１２０は、機器Ａ１０２からのＤａｔａ３の受信に備えて、Ｄａｔａ３を配置するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定する（ステップＳ４２３）。
【０１８５】
（１−３）機器Ａでの認証結果の検証：
機器Ｂの非セキュア部１２０は、（２，ｒｐ，ｔｓｐ１，Ｄａｔａ２）を機器Ａ１０２に送付する（Ｓ４２２）。機器Ａ１０２は、（２，ｒｐ，ｔｓｐ１，Ｄａｔａ２＝（ｔｓｓ１，ＩＤｉ，ｒｈ２，ｒｃ１，Ｎ，ｒ２））を受け取ると、以下の処理を実行する（ステップＳ４２４）。これにより、機器Ａ１０２と機器Ｂ１１０との相互認証が行われることとなる。
【０１８６】
機器Ａ１０２は、ｒｐ，ｔｓｓ１，ｔｓｐ１，ＩＤｉ，ｒｈ２，ｒｃ１，ｒ２∈｛０，１｝＾ｋ、且つ、Ｎ∈｛０，１｝＾ｌであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、満たしていなければ、ｒｅｓｕｌｔ２：＝１１とする。もし満たしていれば、機器Ａ１０２は、ｒ２＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ｔｓｐ１｜｜ＩＤｉ｜｜ｒｈ２｜｜ｒｃ１｜｜Ｎ）であるか（つまり署名が正しいか否か）を検証する。機器Ａ１０２は、もし正しければｒｅｓｕｌｔ２：＝ｒｃ１の下位２ｂｉｔとし、そうでなければｒｅｓｕｌｔ２：＝１１とする。
【０１８７】
そして、機器Ａ１０２は、ｒｅｓｕｌｔ２を認証結果として出力し、これを記録する。ここで、ｒｅｓｕｌｔ２が「０１」を示す場合、データ分割数Ｎが改竄される事なく機器Ａ１０２から機器Ｂ１１０へ通知され、機器Ａ１０２と機器Ｂ１１０との間での相互認証が成功したことを意味する。ｒｅｓｕｌｔ２が「１０」を示す場合、受信エラー（メッセージ改竄の可能性あり）が発生したことを意味する。そして、機器Ａ１０２は、ｒｅｓｕｌｔ２＝０１である場合、転送回数を表すインデックス変数ｊをｊ＝１（初期値）とする。そうでない場合、処理は終了する。
【０１８８】
実施の形態２の変形例にかかるデータ授受シーケンスは、ｒｐが改竄されると、対応するセッションが非存在となるか、存在したとしても異なるセッションでの機器Ｂ１１０での認証が実施されて認証が失敗するため、フェールセーフである。また、実施の形態２の変形例にかかるデータ授受シーケンスは、ｒｈ２が改竄された場合も、機器Ａ１０２の署名検証が失敗するため、フェールセーフである。また、実施の形態２の変形例にかかるデータ授受シーケンスは、機器Ａ１０２でのＰＲＦを用いた検証手段により、攻撃者等がｒｃ１の値を改竄しても、機器Ａ１０２で検証合格とすることはできない。また、実施の形態２の変形例にかかるデータ授受シーケンスは、ｔｓｐ１が改竄された場合も、機器Ａ１０２での認証結果の検証手段により、機器Ａ１０２で検証合格とすることはできない。つまり、ｒｐ、ｒｈ２、ｔｓｐ１の何れを改竄しても、攻撃者等は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０で構成したＤａｔａ２を検証合格とすることができない。したがって、ｒｐ，ｒｈ２，ｒｃ１の全てまたは何れかが改竄された場合、何らかの改竄があったことを検知することが可能となる。なお、改竄による認証失敗や検証不合格を効率よく検出する目的で、ｔｓｐ１に対してハッシュ値を付加しても良い。
【０１８９】
（２）全体で署名が付加されたデータの繰返し分割転送処理：
以下、処理（２−１）〜（２−３）が、機器Ａ１０２から機器Ｂ１１０への分割データ｛ｄ［ｊ］；ｊ＝１，・・・，Ｎ｝の転送が完了するまで、繰返し実行される。ここで、機器Ａ１０２と機器Ｂ１１０との相互認証は、データの分割転送処理では行われない。
（２−１）転送データの機器Ａでの構築：
機器Ａ１０２は、ｊ＝１として、下記を実施する。
１．Ｄａｔａ３：＝（ｔｓｓ１，ＩＤｉ，Ｎ，ｊ，ｄ［ｊ］）を生成し（ステップＳ４３１）、機器Ｂ１１０の非セキュア部１２０に、（ｊ＋２，ｒｐ，Ｄａｔａ３）を送付する（ステップＳ４３２）。
【０１９０】
（２−２）機器ＢでのＣＲＣチェックとデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、現在の時刻をｔｓｐｊ←ＴｉｍｅＳｔａｍｐとして選ぶ。また、非セキュア部１２０は、（ｊ＋２，ｒｐ，Ｄａｔａ３＝（ｔｓｓ１，ＩＤｉ，Ｎ，ｊ，ｄ［ｊ］））を受け取ると、ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃ：＝｛｝として、以下を実施する（ステップＳ４３３）。
【０１９１】
１．ｒｐ，ｔｓｐｊ，ｔｓｓ１，ＩＤｉ，ｄ［ｊ］∈｛０，１｝＾ｋ、かつ、Ｎ，ｊ∈｛０，１｝＾ｌ、であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証する。さらに、ＩＤｉが自身のものと一致するかを確かめる。もし満たしていなければ、ｒｃ１［０］：＝０とする。もし満たしている場合は、以下の操作を実行する。
２．ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃ：＝ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃ∪ｄ［ｊ］を算出し、ｒｃ１［０］：＝１とする。
３．非セキュア部１２０は、（２，ｒｐ，ｔｓｐｊ，ｒｃ１［０］）をＤａｔａ３格納領域に書き込み、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定する。
【０１９２】
非セキュア部１２０は、その後、（ｊ＋２，ｒｐ，ｔｓｐｊ，ｒｃ１［０］）を機器Ａ１０２に送付する（ステップＳ４５４）。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、ｒｃ１［０］を消去する（ステップＳ４５６）。なお、ｊ＜Ｎの場合、機器Ａ１０２からのＤａｔａ３の受信に備えて、Ｄａｔａ３を配置するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定する。
【０１９３】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０への送付に時間制約がある場合であってｔｓｐｊが信頼できる場合は、上記１のサイズチェック時に、ｔｓｓ１とｔｓｐｊとを比較することで、その時間制約の確認を実施してもよい。また、認証対象端末での認証処理への時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐｊと認証端末からの認証結果の受取り時刻（以下、ｔｓｐ’と記載）とを比較することで、その時間制約の確認を実施してもよい。
【０１９４】
（２−３）機器Ａでの認証結果の検証：
機器Ｂ１１０の非セキュア部１２０は、（ｊ＋２，ｒｐ，ｔｓｐｊ，ｒｃ１［０］）を機器Ａ１０２に送付する（Ｓ４５４）。機器Ａ１０２は、（ｊ＋２，ｒｐ，ｔｓｐｊ，ｒｃ１［０］）を受け取ると、以下の処理を実行する（ステップＳ４５７）。
機器Ａ１０２は、ｒｐ，ｔｓｐｊ∈｛０，１｝＾ｋ、且つ、ｒｃ１［０］∈｛０，１｝＾１であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、ｒｃ１［０］＝１を満たすかを検証する。全て満たしていれば、ｊ：＝ｊ＋１とする。そして、ｊ＞Ｎなら機器Ａ１０２からの分割データの転送を完了する。
【０１９５】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０へ分割した署名付きデータを送付後、機器Ａ１０２が機器Ｂ１１０の非セキュア部１２０からの応答を取得するまでの間に時間制約がある場合、上記サイズチェック時に、ｔｓｓ１と機器Ａ１０２での現在時刻とを比較する事で、その時間制約の確認を実施しても良い。また、機器Ｂ１１０の非セキュア部１２０からの分割した署名付きデータのサイズチェック成功可否の機器Ａ１０２への送付に時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ’が追加されたデータを機器Ｂ１１０の非セキュア部から機器Ａ１０２へ送付し、ｔｓｐ’とｔｓｓ１とを比較する事で、その時間制約の確認を実施しても良い。
【０１９６】
実施の形態２の変形例にかかるデータ授受シーケンスは、後に述べる（３）結合データの署名検証とデータ格納を伴う相互認証処理での、分割した署名付きデータを全て結合後、署名検証を実施する。したがって、｛ｄ［ｊ］；ｊ＝１，・・・，Ｎ｝の全てまたは何れかが改竄された場合、何らかの改竄があったことを検知することが可能である。
【０１９７】
（３）結合データの署名検証とデータ格納を伴う相互認証部：
（３−１）機器認証情報の機器Ａでの構築：
（２）の繰返し実行にて、機器Ａ１０２は、ｊ＞Ｎが満たされると、（２）の繰返し実行完了を識別し、下記を実施する（ステップＳ４６２）。
１．現在の時刻をｔｓｓ２←ＴｉｍｅＳｔａｍｐとして選ぶ。
２．乱数をｒｈ０←｛０，１｝＾ｋとして選ぶ。
３．ｒ３：＝ＰＲＦ（ｓｋｉ，ｔｓｓ２｜｜ＩＤｉ｜｜ｒｈ０｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ｜｜Ｎ｜｜Ｎ＋１）を計算する。ここで、最後の「Ｎ＋１」は、分割データの転送が終了したので転送対象データに対して署名検証を行う旨を指示するためのものである。また、ｒ３は、転送対象データに対する署名である。そして、機器Ａ１０２は、Ｄａｔａ５：＝（ｔｓｓ１，ｔｓｓ２，ＩＤｉ，ｒｈ０，ｒ３，Ｎ，Ｎ＋１）として、機器Ｂ１１０の非セキュア部１２０に、（ｊ＋２，ｒｐ，Ｄａｔａ５）を送付する（ステップＳ４６３）。ここで、演算子「｜｜」はビット連接を表し、ＰＲＦは疑似ランダム関数を表す。
【０１９８】
（３−２）機器Ｂでの署名検証とデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ５を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定する（ステップＳ４６４）。つまり、（Ｒ，Ｗ，Ｅ）属性は、書込みのみ可と設定される。また、非セキュア部１２０は、現在の時刻をｔｓｐＮ＋１←ＴｉｍｅＳｔａｍｐとして選び、Ｄａｔａ５を受け取ると、Ｄａｔａ５：＝Ｄａｔａ５∪ｄａｔａ｜｜ｄａｔａ＿ｃｒｃを計算する。さらに、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定する（ステップＳ４６５）。つまり、（Ｒ，Ｗ，Ｅ）属性は、読出しのみ可と設定される。
【０１９９】
その後、非セキュア部１２０は、（ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ５）を機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に送付する（ステップＳ４６６）。送付が完了すると、非セキュア部１２０は、非セキュア部１２０のメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ５を消去する（ステップＳ４６７）。また、非セキュア部１２０は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０から受信するＤａｔａ６を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定しておく（ステップＳ４８１）。ここで、（Ｒ，Ｗ，Ｅ）属性の変更は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に内蔵されたＣＰＵ１１によって実行されてもよいし、非セキュア部１２０のＣＰＵ２によって実行されてもよい。いずれの場合であっても、設定ソフトウェアはその実行に先立ってセキュアブートなどにより、改竄がないことが確認されているものとする。
【０２００】
さて、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は（ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ５＝（ｔｓｓ１，ｔｓｓ２，ＩＤｉ，ｒｈ０，ｒｈ３，ｒ３，Ｎ，Ｎ＋１，ｄａｔａ，ｄａｔａ＿ｃｒｃ））を受け取ると、ｒｈ４←｛０，１｝＾ｋとして、以下を実施する（ステップＳ４７０）。これにより、機器Ａ１０２の認証及び受信されたデータの署名検証がなされる。
【０２０１】
１．ｒｐ，ｔｓｐＮ＋１，ｔｓｓ１，ｔｓｓ２，ＩＤｉ，ｒｈ０，ｒ３，ｄａｔａ，ｄａｔａ＿ｃｒｃ∈｛０，１｝＾ｋ、且つ、Ｎ，Ｎ＋１∈｛０，１｝＾ｌであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証する。さらに、ＩＤｉが自身のものと一致するかを確かめる。もし満たしていなければ、ｒｅｓｕｌｔ２：＝０００，ｒｃ２←｛０，１｝＾（ｋ−３），ｒｃ２：＝ｒｃ２｜｜ｒｅｓｕｌｔ２とする。もし満たしている場合は、以下の操作を実行する。そして、後述するような処理はこれ以上実行されない。ここで、ｒｅｓｕｌｔ２の値「０００」は、不正なアクセスがされたことを示す。
【０２０２】
２．ｒ３＝ＰＲＦ（ｓｋｉ，ｔｓｓ１｜｜ｔｓｓ２｜｜ＩＤｉ｜｜ｒｈ０｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ｜｜Ｎ｜｜Ｎ＋１）を満たすか検証する。満たさない場合、ｒｅｓｕｌｔ２を、署名検証の結果が不合格であることを示すｒｅｓｕｌｔ２：＝１１０とする。満たす場合、以下の操作を実行する。
【０２０３】
３．アクセス制御設定で、ハードウェアセキュリティモジュール回路１０のみがエラー検出回路４へアクセス可能と設定される。復号して得られたｄａｔａのＣＲＣをＣＲＣ（ｄａｔａ）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。一致しない場合、ｒｅｓｕｌｔ２を、ＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ２：＝０１０とする。もし満たしていた場合は、以下の操作を実行する。
【０２０４】
ここで、アクセス制御機構がない場合は、機器Ｂ１１０内の非セキュア部１２０に配置されているエラー検出回路４にＣＲＣチェックを依頼することとなる。その場合は、ハードウェアセキュリティモジュール回路１０は、乱数ｒｈ２’←｛０，１｝＾ｋを選択し、ｒ０：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ２’｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ｜｜２）として、ｄａｔａを機器Ｂ１１０内の非セキュア部１２０に配置されているエラー検出回路４に送付する。これにより、ハードウェアセキュリティモジュール回路１０は、ＣＲＣチェックをエラー検出回路４に委譲し、結果とｄａｔａ＿ｃｒｃ２を受け取る。次いで、ハードウェアセキュリティモジュール回路１０は、データ改竄がない事の確認として、ｒ０＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ２’｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ２｜｜２）が満たされるかを検証し、満たさない場合又は受け取り結果がＮＧの場合は、ｒｅｓｕｌｔ１：＝１００とする。もし満たしており結果がＯＫの場合は、以下の操作を実行する。
【０２０５】
４．署名検証で得られたｄａｔａを格納する領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可及び実行不可に）設定し、ｄａｔａをＡ１に格納する（書き込む）。これにより、ＣＲＣチェックで合格した（つまりエラーが検出されなかった）データを書き込む際に、攻撃者等からデータを改竄されることを抑制できる。そして、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）に（つまり読出し可且つ書込み不可に）設定し、ｄａｔａをＡ１から再度読出してｄａｔａ’とする。ｄａｔａ’のＣＲＣをＣＲＣ（ｄａｔａ）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。不揮発性メモリにデータを書き込むときにデータが壊れる可能性があるため、耐故障性を向上させるため、このように、データの書込みの後で書き込んだデータを読み出してＣＲＣチェックを行う。このような処理により、データを書き込む際のエラーを検出するためにデータを読み出すときに、攻撃者等からデータを改竄されることを抑制できる。
【０２０６】
ＣＲＣ（ｄａｔａ’）とｄａｔａ＿ｃｒｃとが一致する場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）または（０，０，１）に（つまり書込み不可に）設定する。そして、領域Ａ１が不揮発性メモリ部なら活性化処理を実施する。さらに、ｒｅｓｕｌｔ２を、全ての処理が成功したことを示すｒｅｓｕｌｔ２：＝００１とする。ｄａｔａがクリティカルなプログラムであり秘匿性が必要な場合は、（０，０，１）と設定する事で実行のみ可能とする。一致しない場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可且つ実行不可に）設定し、領域Ａ１に書き込んだｄａｔａを消去する。これにより、不適切なデータの実行又は読み取りを抑制することができる。そして、ｒｅｓｕｌｔ２を、再度のＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ２：＝０１０とする。
【０２０７】
ここで、エラー検出回路４に対するアクセス制御設定が出来ない場合は、エラー検出回路４にＣＲＣチェックを依頼することとなる。この場合、以下のような処理を行ってもよい。すなわち、ハードウェアセキュリティモジュール回路１０は、乱数ｒｈ２’’←｛０，１｝＾ｋを選択し、ｒ０’：＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ２’’｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ｜｜３）として、ｄａｔａ’を機器Ｂ１１０内の非セキュア部１２０に配置されているエラー検出回路４に送付する。これにより、ハードウェアセキュリティモジュール回路１０は、ＣＲＣチェックをエラー検出回路４に委譲し、結果及びｄａｔａ＿ｃｒｃ２’を受け取る。次いで、ハードウェアセキュリティモジュール回路１０は、データ改竄がない事の確認として、ｒ０’＝ＰＲＦ（ｓｋｉ，ｔｓｓ｜｜ＩＤｉ｜｜ｒｈ２’’｜｜ｄａｔａ’｜｜ｄａｔａ＿ｃｒｃ２’｜｜３）が満たされるかを検証する。満たさない場合又は受け取り結果がＮＧの場合は、ハードウェアセキュリティモジュール回路１０は、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（１，０，０）または（０，１，０）に設定し、領域Ａ１に書き込んだｄａｔａを消去し、ｒｅｓｕｌｔ１：＝０１０とする。もし満たしており結果がＯＫの場合は、ハードウェアセキュリティモジュール回路１０は、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（１，０，０）または（０，０，１）に設定し、領域Ａ１が不揮発性メモリ部なら活性化処理を実施する。さらに、ｒｅｓｕｌｔ１：＝００１とする。ｄａｔａがクリティカルなプログラムであり秘匿性が必要な場合は、（０，０，１）と設定する事で実行のみ可能とする。
【０２０８】
５．アクセス制御設定が、エラー検出回路４の処理を必要とするＣＰＵ２など他のモジュールがエラー検出回路４へアクセス可能とする。そして、乱数をｒｃ２←｛０，１｝＾（ｋ−３）として選び、ｒｃ２：＝ｒｃ２｜｜ｒｅｓｕｌｔ２∈｛０，１｝＾ｋとする。
【０２０９】
６．ｒ４：＝ＰＲＦ（ｓｋｉ，ｔｓｓ２｜｜ｔｓｐＮ＋１｜｜ＩＤｉ｜｜ｒｈ４｜｜ｒｃ２｜｜０）を求める。そして、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、Ｄａｔａ６：＝（ｔｓｓ２，ＩＤｉ，ｒｈ４，ｒｃ２，ｒ４）として、（ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ６）を、機器Ｂ１１０の非セキュア部１２０に送付する（ステップＳ４８２）。
【０２１０】
７．機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ６を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定した後（ステップＳ４８３）、（ｊ＋２，ｒｐ，ｔｓｐ，Ｄａｔａ６）を機器Ａ１０２に送付する（ステップＳ４８４）。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ６を消去する（ステップＳ４８５）。
【０２１１】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０への送付に時間制約がある場合であってｔｓｐＮ＋１が信頼できる場合は、上記１のサイズチェック時に、ｔｓｓ２とｔｓｐＮ＋１とを比較することで、その時間制約の確認を実施してもよい。また、認証対象端末での認証処理への時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐＮ＋１と認証端末からの認証結果の受取り時刻（以下、ｔｓｐ’と記載）とを比較することで、その時間制約の確認を実施しても良い。これにより、処理にあまりにも長い時間を要した場合に、不適切な処理を検出することができる。
【０２１２】
（３−３）機器Ａでの認証結果の検証：
機器Ｂ１１０の非セキュア部１２０は、（ｊ＋２，ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ６）を機器Ａ１０２に送付する（Ｓ４８４）。機器Ａ１０２は、（ｊ＋２，ｒｐ，ｔｓｐＮ＋１，Ｄａｔａ６＝（ｔｓｓ２，ＩＤｉ，ｒｈ４，ｒｃ２，ｒ４））を受け取ると、以下の処理を実行する（ステップＳ４８６）。これにより、機器Ａ１０２と機器Ｂ１１０との相互認証が行われることとなる。
【０２１３】
機器Ａ１０２は、ｒｐ，ｔｓｓ２，ｔｓｐＮ＋１，ＩＤｉ，ｒｈ４，ｒｃ２，ｒ４∈｛０，１｝＾ｋであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているかを検証し、満たしていなければ、ｒｅｓｕｌｔ２：＝０００とする。もし満たしていれば、機器Ａ１０２は、ｒ４＝ＰＲＦ（ｓｋｉ，ｔｓｓ２｜｜ｔｓｐＮ＋１｜｜ＩＤｉ｜｜ｒｈ４｜｜ｒｃ２｜｜０）であるか（つまり署名が正しいか否か）を検証する。機器Ａ１０２は、もし正しければｒｅｓｕｌｔ２：＝ｒｃ２の下位３ｂｉｔとし、そうでなければｒｅｓｕｌｔ２：＝１１１とする。
【０２１４】
そして、機器Ａ１０２は、ｒｅｓｕｌｔ２を認証結果として出力し、これを記録する。ここで、ｒｅｓｕｌｔ２が「００１」を示す場合、機器Ａ１０２と機器Ｂ１１０との間での相互認証が成功し、データｄａｔａが中間者に改竄されることなく、またデータが欠損することもなく、機器Ｂ１１０のデータ格納領域にデータ格納を行うことが成功したことを意味する。また、ｒｅｓｕｌｔ２が「０１０」を示す場合、書込みでのデータ欠損による書込み失敗を意味する。また、ｒｅｓｕｌｔ２が「１００」を示す場合、認証は成功したが書込み前にデータ欠損が発生したことを意味する。また、ｒｅｓｕｌｔ２が「１００」を示す場合、ｅｎｃ＿ｄａｔａ＿ｗｉｔｈ＿ｃｒｃの署名検証が失敗したこと、つまり、｛ｄ［ｊ］；ｊ＝１，・・・，Ｎ｝の何れかの改竄の可能性があることを意味する。また、ｒｅｓｕｌｔ２が「１１０」を示す場合、受信エラー（メッセージ改竄の可能性あり）が発生したことを意味する。
【０２１５】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０へ認証データを送付後、機器Ａ１０２が機器Ｂ１１０の非セキュア部１２０からの認証データを取得するまでの間に時間制約がある場合、上記サイズチェック時に、ｔｓｓ２と機器Ａ１０２での現在時刻とを比較することで、その時間制約の確認を実施してもよい。また、機器Ｂ１１０の非セキュア部１２０からの署名データに対する署名検証の成功可否の機器Ａ１０２への送付に時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ’が追加されたデータを機器Ｂ１１０の非セキュア部１２０から機器Ａ１０２へ送付し、ｔｓｐ’とｔｓｓ２とを比較することで、その時間制約の確認を実施してもよい。
【０２１６】
実施の形態２の変形例にかかるデータ授受シーケンスは、ｒｐが改竄されると、対応するセッションが非存在となるか、存在したとしても異なるセッションでの機器Ｂ１１０での認証が実施されて認証が失敗するためシーケンスが継続しないので、フェールセーフである。また、実施の形態２の変形例にかかるデータ授受シーケンスは、ｒｈ４が改竄された場合も、機器Ａ１０２の署名データに対する署名検証が失敗するため、フェールセーフである。また、実施の形態２の変形例にかかるデータ授受シーケンスは、機器Ａ１０２での署名データに対する署名の検証手段により、攻撃者等がｒｃ２の値を改竄しても、機器Ａ１０２で検証合格とすることはできない。また、実施の形態２の変形例にかかるデータ授受シーケンスでは、ｔｓｐＮ＋１が改竄された場合も、機器Ａ１０２での認証結果の検証手段により、機器Ａ１０２で検証合格とすることはできない。つまり、ｒｐ、ｒｈ４、ｔｓｐＮ＋１の何れを改竄しても、攻撃者等は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０で構成した署名データに対する署名検証を、書込み成功や検証合格とすることができない。したがって、ｒｐ，ｒｈ４，ｒｃ２の全てまたは何れかが改竄された場合、何らかの改竄があったことを検知することが可能となる。なお、改竄による認証失敗や検証不合格を効率よく検出する目的で、ｔｓｐＮ＋１に対してハッシュ値を付加してもよい。
【０２１７】
また、実施の形態２の変形例にかかるデータ授受シーケンスは、データサイズに制限がある場合、転送対象データの転送の前後で相互認証を行い、転送対象データ全体にＣＲＣを付加して署名を付加し、その署名が付加されたデータ全体を分割して転送している。したがって、分割されたデータそれぞれの転送の際に、相互認証が不要となる。したがって、実施の形態２の変形例にかかるデータ授受シーケンスでは、転送回数ごとに暗号化して転送するよりも、効率よく転送することが可能である。
【０２１８】
（実施の形態３）
次に、実施の形態３について説明する。上述した実施の形態１及び実施の形態２では、機器Ａ１０２と機器Ｂ１１０とが、事前に対称鍵ｓｋｉを共有していることを前提としていた。ここで、機器の出荷時に機器への鍵の書込みを行う場合、機器のＩＤｉ∈ＩＤと鍵ｓｋｉの集合を｛（ＩＤｉ，ｓｋｉ）；ＩＤｉ∈ＩＤ，ｓｋｉ←｛０，１｝＾ｋ，ｋ：正整数のセキュリティパラメータ｝として、サーバ（サーバ１０４）がデータベースに登録することが考えられる。
【０２１９】
一方で、出荷後にどの２つ以上の機器がデータ授受を行うかを予め予測することは一般に容易ではないため、機器組み上げ後（例えば機器の使用時など）に共通の対称鍵を設定できることが望ましい。また、機器のＩＤを自由に読み出せる一方、上書きや消去はできないことが前提の場合に、機器Ａ１０２と機器Ｂ１１０との間のデータ授受において、機器Ａ１０２及び機器Ｂ１１０以外の例えば機器Ａ’にも全く同じ対称鍵が配置されていることがある。この場合、機器Ｂがデータを受信する場合、機器Ａ１０２からのデータなのか機器Ａ’からのデータなのかを識別することは、容易ではない。したがって、機器Ａ１０２及び機器Ｂ１１０の２つの機器のみが共有する対称鍵を配置できることが望ましい。
【０２２０】
ここで、機器Ａ１０２から機器Ｂ１１０へ送信されるデータは、機器Ａ１０２によって生成されたデータであってもよいし、データ送信サーバ（サーバ１０４）から別途セキュア通信など適切な手段で機器Ａ１０２に配置されたデータであってもよい。特に、後者の場合は、ＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）などのセキュアプロトコルにより、機器Ａ１０２に配置されたＨＳＭ内に格納されていることが望ましい。また、データ送信サーバのデータベースに各機器のＩＤｉと鍵ｓｋｉが登録されていない状況、及び、そもそもそのようなデータベースがなく各機器のＩＤｉと鍵ｓｋｉはデータ送信サーバとは異なるサーバで管理されている状況も、考慮すべきである。実施の形態３では、サーバ１０４が、機器Ａ１０２と機器Ｂ１１０との間のデータ授受のみに使用される鍵情報（乱数）を発行する。
【０２２１】
図２９〜図３４は、実施の形態３にかかる認証システム１００において実行されるデータ授受シーケンスを示すシーケンス図である。図２９〜図３４に示すシーケンス図は、送信元機器によって生成された（又は送信元機器に別の手段でセキュアに配備された）データを、送信先機器へ送付するプロトコルの動作を示す。ここで、図２９〜図３４に示すシーケンス図は、送信元機器と送信先機器とが事前に共通鍵を持たない前提における、改竄耐性及び秘匿性を持つ機能安全考慮のデータ授受プロトコルの動作を示す。なお、機器Ａ１０２及び機器Ｂ１１０に対する共通対称鍵の初期設定として、下記設定が事前になされているものとする。
【０２２２】
セキュリティパラメータをｋとし機器Ａ１０２は１＾ｋを入力とする。サーバ１０４は、認証識別子ＩＤｐ∈｛０，１｝＾ｋが割り振られている機器Ａ１０２に対して対称鍵ｓｋｐ←｛０，１｝＾ｋを選び、（ｓｋｐ，ＩＤｐ）を送付する。同様に、サーバ１０４は、認証識別子ＩＤｄ∈｛０，１｝＾ｋが割り振られている機器Ｂ１１０に対して対称鍵ｓｋｄ←｛０，１｝＾ｋを選び、（ｓｋｄ，ＩＤｄ）を送付する。ここで、ｓｋｐは、サーバ１０４と機器Ａ１０２との間の共通鍵であり、ｓｋｄは、サーバ１０４と機器Ｂ１１０との間の共通鍵である。機器Ａ１０２及び機器Ｂ１１０は、それぞれ、（ｓｋｐ，ＩＤｐ）及び（ｓｋｄ，ＩＤｄ）の対応するものを、夫々の不揮発性メモリに保存する。例えば、機器Ａ１０２及び機器Ｂ１１０を出荷する前にこれら処理を実施することで、各機器に個別の鍵を設定してもよい。また、機器Ｂ１１０の非セキュア部１２０は、機器Ｂ１１０に内蔵されたハードウェアセキュリティモジュール回路１０に格納されたＩＤｉを読み出し可能である。但し、上書き変更及び消去は適切なアクセス制御によりできないものとする。
【０２２３】
（１）機器認証情報及び機器Ａ１０２と機器Ｂ１１０との間に配備する共通鍵情報のサーバでの構築：
機器Ａ１０２は、機器Ａ１０２からＩＤｄを取得する（ステップＳ５０１）。機器Ａ１０２は、機器Ｂ１１０からＩＤｄを読み出してもよいし、機器Ｂ１１０から受信してもよい。機器Ａ１０２は、セッション管理のためにｒｐ∈｛０，１｝＾ｋを選び（ステップＳ５０２）、（１，ｒｐ，ＩＤｄ，ＩＤｐ）をサーバ１０４に送付する（ステップＳ５０３）。サーバ１０４は、（１，ｒｐ，ＩＤｄ，ＩＤｐ）を受け取ると、下記の処理を実施する（ステップＳ５０４）。これにより、機器Ａ１０２及び機器Ｂ１１０が認証され、機器Ａ１０２と機器Ｂ１１０との間のセッション鍵が生成される。
【０２２４】
１．ｒｐ，ＩＤｄ，ＩＤｐ∈｛０，１｝＾ｋであるか、そしてＩＤｄ，ＩＤｐ∈ＩＤであるかを検証する。もし異なっていれば処理を終了する。もし満たしていれば、以下を実行する。
２．現在の時刻をｔｓｓ←ＴｉｍｅＳｔａｍｐとして選ぶ。
３．乱数をｒｈ←｛０，１｝＾ｋとして選ぶ。
４．機器Ａ１０２及び機器Ｂ１１０に対するセッション鍵をｋ１←｛０，１｝＾ｋとして選ぶ。
５．機器Ａ１０２とサーバ１０４との相互認証のための情報として、ｒ１ｐ：＝ＰＲＦ（ｓｋｐ，ｔｓｓ｜｜ＩＤｐ｜｜ｒｈ｜｜１）を計算する。
６．機器Ｂ１１０とサーバ１０４との相互認証のための情報として、ｒ１ｄ：＝ＰＲＦ（ｓｋｄ，ｔｓｓ｜｜ＩＤｄ｜｜ｒｈ｜｜１）を計算する。
７．機器Ａ１０２及び機器Ｂ１１０に対してセッション鍵ｋ１を送信するために、下記を実施する。
・機器Ａ１０２向けに、ｒ１’ｐ：＝ＰＲＦ（ｓｋｐ，ｔｓｓ｜｜ＩＤｐ｜｜ｒｈ｜｜２）、及び、ｃ１ｐ：＝ＡＥ．Ｅｎｃ（ｒ１’ｐ，ｋ１）を計算する。ここで、ｒ１’ｐは、鍵ｋ１を暗号化するための鍵である。
・機器Ｂ１１０向けに、ｒ１’ｄ：＝ＰＲＦ（ｓｋｄ，ｔｓｓ｜｜ＩＤｄ｜｜ｒｈ｜｜２）、及び、ｃ１ｄ：＝ＡＥ．Ｅｎｃ（ｒ１’ｄ，ｋ１）を計算する。ここで、ｒ１’ｄは、鍵ｋ１を暗号化するための鍵である。
８．サーバ１０４は、Ｄａｔａ１：＝（ｔｓｓ，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ）として、機器Ａ１０２に、（１，ｒｐ，Ｄａｔａ１）を送付する（ステップＳ５０５）。
【０２２５】
（２）機器Ａでの、サーバ機器認証情報の検証と、機器Ｂへ送信する認証付き暗号データの構築：
機器Ａ１０２は、現在の時刻をｔｓｐ←ＴｉｍｅＳｔａｍｐとして選び、乱数２つをｒｃｐ←｛０，１｝＾（ｋ−３），ｒ３ｐ←｛０，１｝＾ｋとして選ぶ。また、機器Ａ１０２は、Ｄａｔａ１を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可且つ実行不可に）設定し、Ｄａｔａ１を受け取ると、当該メモリ領域にＤａｔａ１を書き込む。そして、機器Ａ１０２は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定し、以下を実施する（ステップＳ５１０）。
【０２２６】
１．ｒｐ，ｔｓｓ，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ∈｛０，１｝＾ｋであるか、そしてＩＤｄ，ＩＤｐ∈ＩＤであるかを検証する。もし満たしていなければ、ｒｅｓｕｌｔ１ｐ：＝０００，ｒｃｐ：＝ｒｃｐ｜｜ｒｅｓｕｌｔ１ｐとして、乱数をｒ２ｐ←｛０，１｝＾ｋとして選ぶ。ここで、ｒｅｓｕｌｔ１ｐの値「０００」は、サーバ１０４と機器Ａ１０２との間で不正なアクセスがされたことを示す。もし満たしていれば、以下を実行する。
【０２２７】
２．ｒ１ｐ＝ＰＲＦ（ｓｋｐ，ｔｓｓ｜｜ＩＤｐ｜｜ｒｈ｜｜１）を満たすか検証し、満たさない場合は、ｒｅｓｕｌｔ１ｐ：＝０１００とする。満たす場合は、下記を実施する。
・ｒｅｓｕｌｔ１ｐ：＝００１とする。
・ｒ１’ｐ：＝ＰＲＦ（ｓｋｐ，ｔｓｓ｜｜ＩＤｐ｜｜ｒｈ｜｜２），ｋ１：＝ＡＥ．Ｄｅｃ（ｒ１’ｐ，ｃ１ｐ）を計算する。ここで、ＡＥ．Ｄｅｃは認証付き暗号方式での復号である。なお、暗号と署名との組として与えられた場合は、暗号文の署名検証を実施し、検証が通れば、暗号文の復号を実施する。
・もし、認証付き暗号方式での認証にて、認証エラーが出た場合は、ｒｅｓｕｌｔ１ｐをｒｅｓｕｌｔ１ｐ：＝０１０に上書きする。
【０２２８】
３．機器Ａ１０２でのサーバ１０４の認証結果、及び、サーバ１０４による機器Ａ１０２の認証に用いる認証情報として、ｒｃｐ：＝ｒｃｐ｜｜ｒｅｓｕｌｔ１ｐ，ｒ２ｐ：＝ＰＲＦ（ｓｋｐ，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｐ｜｜ｒｈ｜｜ｒｃｐ｜｜１）を計算する。
４．乱数をｒｈ１←｛０，１｝＾ｋとして選ぶ。
なお、３．及び４．は、５．以降に行われてもよい。また、下記５．が行われるとき、４．は行われなくてもよい。
【０２２９】
５．ｒｅｓｕｌｔ１ｐ＝００１を満たすか検証し、満たす場合、下記を実施する。満たさない場合は、６．以下を実施する。
・現在の時刻をｔｓｓ１←ＴｉｍｅＳｔａｍｐとして選び、乱数をｒｈ１←｛０，１｝＾ｋとして選ぶ。
・機器Ｂ１１０への送信データｄａｔａに対して、機器Ａ１０２内のエラー検出回路（ＥＣＣ／ＣＲＣ処理部）にて、例えばｄａｔａ＿ｃｒｃ：＝ＣＲＣ（ｄａｔａ）として、ＣＲＣを計算する。ここで、本処理は、適切なアクセス制限を伴うものとして、機器Ａ１０２内のＨＳＭ内で改竄耐性と秘匿性を満たす範囲で実施されるものとする。この処理にて、改竄耐性のみの保証しか出来ない場合は、機器Ａ１０２内では、改竄耐性のみが保証可能である。また、機器Ａ１０２から機器Ｂ１１０内ＨＳＭでの格納に至るまでの経路での中間者攻撃に対しては、改竄耐性と秘匿性を持つこととなる。
・機器Ａ１０２と機器Ｂ１１０との相互認証のため、ｒ１’’ｐ：＝ＰＲＦ（ｋ１，ｔｓｓ１｜｜ＩＤｄ｜｜ｒｈ｜｜２），ｃ１：＝ＡＥ．Ｅｎｃ（ｒ１’’ｐ，ｔｓｓ１｜｜ＩＤｄ｜｜ｒｈ１｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ）を計算する。
６．機器Ａ１０２は、Ｄａｔａ２：＝（ｔｓｓ，ｔｓｓ１，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ，ｒｃｐ，ｒ２ｐ，ｃ１）として、機器Ｂ１１０の非セキュア部１２０に、（１，ｒｐ，ｔｓｐ，Ｄａｔａ２）を送付する（ステップＳ５２２）。
【０２３０】
（３）機器Ｂでのデータ復号とデータ格納、及び結果収集：
機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ２を格納するメモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に設定する（ステップＳ５２１）。また、非セキュア部１２０は、Ｄａｔａ２を受け取ると（Ｓ５２２）、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定した後（ステップＳ５２３）、（ｒｐ，ｔｓｐ，Ｄａｔａ２）を機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に送付する（ステップＳ５２４）。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ２を消去する（ステップＳ５２５）。ここで、（Ｒ，Ｗ，Ｅ）属性の変更は、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０に内蔵されたＣＰＵ１１が実行しても良いし、非セキュア部１２０のＣＰＵ２が実行してもよい。いずれの場合であっても、設定ソフトウェアはその実行に先立ってセキュアブートなどで改竄がない事が確認されているものとする。
【０２３１】
さて、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、（ｒｐ，ｔｓｐ，Ｄａｔａ２＝（ｔｓｓ，ｔｓｓ１，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ，ｒｃｐ，ｒ２ｐ，ｃ１））を受け取ると、乱数４つを、ｒ２ｄ←｛０，１｝＾ｋ，ｒ３ｄ←｛０，１｝＾ｋ，ｒｃｄ←｛０，１｝＾（ｋ−３），ｒｃｄｐ←｛０，１｝＾（ｋ−４）とする。そして、ハードウェアセキュリティモジュール回路１０は、以下を実施する（ステップＳ５３０）。
【０２３２】
１．ｒｐ，ｔｓｐ，ｔｓｓ，ｔｓｓ１，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ，ｒｃｐ，ｒ２ｐ，ｃ１∈｛０，１｝＾ｋであるか、つまり、それぞれのデータの長さが規定値どおりの長さとなっているか、そしてＩＤｄ，ＩＤｐ∈ＩＤとなっているかを検証する。もし満たしていなければ、ｒｅｓｕｌｔ１ｄ：＝０００，ｒｃｄ：＝ｒｃｄ｜｜ｒｅｓｕｌｔ１ｄ，ｒｅｓｕｌｔ１ｄｐ：＝０００，ｒｃｄｐ：＝ｒｃｄｐ｜｜ｒｅｓｕｌｔ１ｄｐとする。ここで、ｒｅｓｕｌｔ１ｄの値「０００」は、サーバ１０４と機器Ｂ１１０との間で不正なアクセスがされたことを示す。また、ｒｅｓｕｌｔ１ｄｐの値「０００」は、機器Ａ１０２から機器Ｂ１１０の間で不正なアクセスがされたことを示す。もし満たしている場合は、以下の操作を実行する。
【０２３３】
２．ｒ１ｄ＝ＰＲＦ（ｓｋｄ，ｔｓｓ｜｜ＩＤｄ｜｜ｒｈ｜｜１）を満たすか検証し、満たさない場合は、ｒｅｓｕｌｔ１ｄ：＝１００とする。満たす場合は、下記を実施する。
・ｒｅｓｕｌｔ１ｄ：＝００１とする
・ｒ１’ｄ：＝ＰＲＦ（ｓｋｄ，ｔｓｓ｜｜ＩＤｄ｜｜ｒｈ｜｜２），ｋ１：＝ＡＥ．Ｄｅｃ（ｒ１’ｄ，ｃ１ｄ）を計算する。
・もし、認証付き暗号方式での認証にて、認証エラーが出た場合は、ｒｅｓｕｌｔ１ｄをｒｅｓｕｌｔ１ｄ：＝０１０に上書きする。
【０２３４】
３．機器Ｂ１１０でのサーバ認証結果と、サーバ１０４による機器Ｂ１１０の認証に用いる認証情報として、ｒｃｄ：＝ｒｃｄ｜｜ｒｅｓｕｌｔ１ｄ，ｒ２ｄ：＝ＰＲＦ（ｓｋｄ，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｄ｜｜ｒｈ｜｜ｒｃｄ｜｜１）を計算する。
４．ｒｅｓｕｌｔ１ｄ＝００１を満たすか検証し、満たさない場合は、ｒｅｓｕｌｔ１ｄｐ：＝１１００とする。満たす場合は、ｒ１’’ｐ：＝ＰＲＦ（ｋ１，ｔｓｓ１｜｜ＩＤｄ｜｜ｒｈ｜｜２），ｔｓｓ１｜｜ＩＤｄ｜｜ｒｈ｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ：＝ＡＥ．Ｄｅｃ（ｒ１’’ｐ，ｃ１）を計算する。これにより、ｃ１がチェックされる。
【０２３５】
５．ｔｓｓ１｜｜ＩＤｄ｜｜ｒｈ｜｜ｄａｔａ｜｜ｄａｔａ＿ｃｒｃ：＝ＡＥ．Ｄｅｃ（ｒ１’’ｐ，ｃ１）、つまり認証付き暗号での認証付き復号を実施し、認証が満たされるかを検証する。もし満たさない場合、ｒｅｓｕｌｔ１ｄｐ：＝１０００とする。もし満たしていた場合は、以下の操作を実行する。ここで、ＡＥ．Ｄｅｃは認証付き暗号方式での復号である。暗号と署名の組として与えられた場合は、暗号文の署名検証を実施し、検証が通れば、暗号文の復号を実施する。またここでの署名検証が認証に該当する。
【０２３６】
６．アクセス制御設定により、ハードウェアセキュリティモジュール回路１０のみがエラー検出回路４へアクセス可能となる。復号して得られたｄａｔａのＣＲＣをＣＲＣ（ｄａｔａ）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。一致しない場合、ＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ１ｄｐ：＝０１００とする。もし満たしていた場合は、以下の操作を実行する。
・復号で得られたｄａｔａを格納する領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可及び実行不可に）設定し、ｄａｔａをＡ１に格納する。これにより、ＣＲＣチェックで合格した（つまりエラーが検出されなかった）データを書き込む際に、攻撃者等からデータを改竄されることを抑制できる。そして、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）に（つまり読出し可且つ書込み不可に）設定し、ｄａｔａをＡ１から再度読出してｄａｔａ’とする。ｄａｔａ’のＣＲＣをＣＲＣ（ｄａｔａ’）で算出し、ｄａｔａ＿ｃｒｃと一致するか検証する。不揮発性メモリにデータを書き込むときにデータが壊れる可能性があるため、耐故障性を向上させるため、このように、データの書込みの後でデータを読み出してＣＲＣチェックを行う。このような処理により、データを書き込む際のエラーを検出するためにデータを読み出すときに、攻撃者等からデータを改竄されることを抑制できる。
【０２３７】
・ＣＲＣ（ｄａｔａ’）とｄａｔａ＿ｃｒｃとが一致する場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，０，１）または（１，０，０）または（０，０，１）に（つまり書込み不可に）設定する。領域Ａ１が不揮発性メモリ部なら活性化処理を実施する。さらに、ｒｅｓｕｌｔ１ｄｐを、全ての処理が成功したことを示すｒｅｓｕｌｔ１ｄｐ：＝０００１とする。ｄａｔａがクリティカルなプログラムであり秘匿性が必要な場合は、（０，０，１）と設定する事で実行のみ可能とする。一致しない場合、領域Ａ１の（Ｒ，Ｗ，Ｅ）属性を（１，１，０）または（０，１，０）に（つまり書込み可且つ実行不可に）設定し、領域Ａ１に書き込んだｄａｔａを消去する。これにより、不適切なデータの実行又は読み取りを抑制することができる。そして、ｒｅｓｕｌｔ１ｄｐを、再度のＣＲＣチェックが失敗したことを示すｒｅｓｕｌｔ１ｄｐ：＝００１０とする。
【０２３８】
・アクセス制御設定により、エラー検出回路４の処理を必要とするＣＰＵ２など他のモジュールがエラー検出回路４へアクセス可能となる。
・機器Ｂ１１０での機器Ａ１０２認証結果と、機器Ａ１０２による機器Ｂ１１０の認証に用いる認証情報として、ｒｃｄｐ：＝ｒｃｄｐ｜｜ｒｅｓｕｌｔ１ｄｐ，ｒ３ｄ：＝ＰＲＦ（ｋ１，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｄ｜｜ｒｈ｜｜ｒｃｄｐ｜｜１）を計算する。
【０２３９】
７．機器Ｂ１１０のハードウェアセキュリティモジュール回路１０は、Ｄａｔａ３：＝（ｔｓｓ，ｔｓｓ１，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ，ｒｃｐ，ｒ２ｐ，ｒ３ｐ，ｒｃｄ，ｒ２ｄ，ｒｃｄｐ，ｒ３ｄ）として、（ｒｐ，ｔｓｐ，Ｄａｔａ３）を、機器Ｂ１１０の非セキュア部１２０に送付する（ステップＳ５４０）。
８．機器Ｂ１１０の非セキュア部１２０は、Ｄａｔａ３を受け取ると、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（１，０，０）に設定した後（ステップＳ５４１）、（２，ｒｐ，ｔｓｐ，Ｄａｔａ３）を機器Ａ１０２に送付する（ステップＳ５４２）。送付が完了すると、非セキュア部１２０は、当該メモリ領域の（Ｒ，Ｗ，Ｅ）属性を（０，１，０）に設定した後、Ｄａｔａ３を消去する（ステップＳ５４３）。
【０２４０】
なお、（Ｒ，Ｗ，Ｅ）属性の更新は、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構（アクセス制御回路２０）を用いて行われてもよい。なお、図３〜図９で示した（Ｒ，Ｗ，Ｅ）属性制御機構を用いない場合は、メモリプロテクションユニット（ＭＰＵ）又はメモリ管理ユニット（ＭＭＵ）を用いて設定が行われてもよい。また、図６の機構を用いる場合、Ｒ属性とＷ属性がたとえ０となっていてもハードウェアセキュリティモジュール回路１０の設定で読出し及び書込みを可能とできるため、これを考慮した属性変更を行う必要がある。図６においてＳ１とＳ２との遷移がなされない場合は、更新可能な範囲が制限されるため、その制限に沿った形で属性変更を行う必要がある。
【０２４１】
なお、機器Ａ１０２から機器Ｂ１１０の非セキュア部１２０への送付に時間制約がある場合であってｔｓｐ及びｔｓｓ１が信頼できるときは、上記１．のサイズチェック時に、ｔｓｓとｔｓｐ及びｔｓｓ１とを比較することで、時間制約の確認を実施してもよい。また、認証対象端末での認証処理への時間制約があり、機器Ｂ１１０の非セキュア部１２０の時計が信頼できる場合は、ｔｓｐ及びｔｓｓ１と認証端末からの認証結果の受け取り時刻（以下、ｔｓｐ’と記載）とを比較することで、時間制約の確認を実施してもよい。これにより、処理にあまりにも長い時間を要した場合に、不適切な処理を検出することができる。
【０２４２】
（４）機器Ａでの機器Ｂにおける認証結果の検証：
機器Ｂ１１０の非セキュア部１２０は、（２，ｒｐ，ｔｓｐ，Ｄａｔａ３）を機器Ａ１０２に送付する（Ｓ５４２）。機器Ａ１０２は、（２，ｒｐ，ｔｓｐ，Ｄａｔａ３＝（ｔｓｓ，ｔｓｓ１，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ，ｒｃｐ，ｒ２ｐ，ｒ３ｐ，ｒｃｄ，ｒ２ｄ，ｒｃｄｐ，ｒ３ｄ））を受け取ると、ｒｃｐ←｛０，１｝＾（ｋ−３）として、以下の処理を実行する（ステップＳ５４４）。これにより、サーバ１０４の認証及びｋ１の検証が行われることとなる。
【０２４３】
１．ｒｐ，ｔｓｓ，ｔｓｓ１，ｔｓｐ，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ，ｒｃｐ，ｒ２ｐ，ｒ３ｐ，ｒｃｄ，ｒ２ｄ，ｒｃｄｐ，ｒ３ｄ∈｛０，１｝＾ｋであるか、つまりそれぞれのデータの長さが規定値どおりの長さとなっているか、そしてＩＤｄ，ＩＤｐ∈ＩＤとなっているかを検証する。満たしていなければｒｅｓｕｌｔ１ｐｄ：＝０００，ｒｅｓｕｌｔ１ｐ：＝０００とする。ここで、ｒｅｓｕｌｔ１ｐｄの値「０００」は、機器Ｂ１１０から機器Ａ１０２の間で不正なアクセスがされたことを示す。もし満たしていれば、以下を実施する。
【０２４４】
２．ｒ１ｐ＝ＰＲＦ（ｓｋｐ，ｔｓｓ｜｜ＩＤｐ｜｜ｒｈ｜｜１）を満たすか（つまり署名が正しいか否か）検証し、満たさない場合は、ｒｅｓｕｌｔ１ｐ：＝１１０とする。満たす場合は、下記を実施する。
・ｒｅｓｕｌｔ１ｐ：＝００１とする
・ｒ１’ｐ：＝ＰＲＦ（ｓｋｐ，ｔｓｓ｜｜ＩＤｐ｜｜ｒｈ｜｜２），ｋ１：＝ＡＥ．Ｄｅｃ（ｒ１’ｐ，ｃ１ｐ）を計算する。
・もし、認証付き暗号方式での認証にて、認証エラーが出た場合は、ｒｅｓｕｌｔ１ｐをｒｅｓｕｌｔ１ｐ：＝０１０に上書きする。
【０２４５】
３．ｒｅｓｕｌｔ１ｐ＝００１を満たすか検証し、満たさない場合、５．へ処理を移行する。満たす場合は、下記を実施する。
４．ｒ３ｄ＝ＰＲＦ（ｋ１，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｄ｜｜ｒｈ｜｜ｒｃｄ｜｜１）を満たすか検証する。これにより、サーバ１０４に送信するデータの検証がなされる。満たさない場合、ｒｅｓｕｌｔ１ｐｄ：＝１００とし、満たす場合、ｒｅｓｕｌｔ１ｐｄ：＝００１とする。
５．ｒｅｓｕｌｔ１ｐｄ＝００１を満たすか検証し、満たさない場合、ｒｅｓｕｌｔ２ｐｄ：＝１１１１とし、満たす場合、ｒｅｓｕｌｔ２ｐｄ：＝０ｘ０・・・０ｆ＆ｒｃｄｐ（ｒｃｄｐの下位４ｂｉｔ）とする。
【０２４６】
そして、機器Ａ１０２は、ｒｅｓｕｌｔ２ｐｄを認証結果として出力し、これを記録する。ここで、ｒｅｓｕｌｔ２ｐｄが「０００１」である場合、サーバ１０４の真正が証明され、データｄａｔａが中間者に改竄されることも漏洩することもなく、またデータが欠損することもなく、機器Ｂ１１０のデータ格納領域にデータ格納を行うことが成功したことを意味する。ｒｅｓｕｌｔ２ｐｄが「００１０」である場合、書込みでのデータ欠損による書込み失敗を意味する。また、ｒｅｓｕｌｔ２ｐｄが「０１００」である場合、サーバ１０４の真正証明と認証・復号は成功したが書込み前にデータ欠損が発生したことを意味する。また、ｒｅｓｕｌｔ２ｐｄが「１１００」である場合、受信エラー（メッセージ改竄の可能性：サーバ１０４の真正が証明されないか、証明できたが共通鍵ｋ１の認証付き暗号方式での認証不合格）が発生したことを意味する。
【０２４７】
（５）サーバでの、機器Ａと機器Ｂそれぞれの認証結果の検証：
機器Ａ１０２は、（２，ｒｐ，ｔｓｐ，Ｄａｔａ３）をサーバ１０４に送付する（ステップＳ５５１）。サーバ１０４は、（２，ｒｐ，ｔｓｐ，Ｄａｔａ３＝（ｔｓｓ，ｔｓｓ１，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ，ｒｃｐ，ｒ２ｐ，ｒ３ｐ，ｒｃｄ，ｒ２ｄ，ｒｃｄｐ，ｒ３ｄ））を受け取ると、ｒｅｓｕｌｔ２ｄ：＝１１１，ｒｅｓｕｌｔ２ｐ：＝１１１として、以下を実施する（ステップＳ５５２）。
【０２４８】
１．ｒｐ，ｔｓｓ，ｔｓｓ１，ｔｓｐ，ＩＤｄ，ｒｈ，ｒ１ｄ，ｃ１ｄ，ＩＤｐ，ｒ１ｐ，ｃ１ｐ，ｒｃｐ，ｒ２ｐ，ｒ３ｐ，ｒｃｄ，ｒ２ｄ，ｒｃｄｐ，ｒ３ｄ∈｛０，１｝＾ｋであるか（つまりそれぞれのデータの長さが規定値どおりの長さとなっているか）、そしてＩＤｄ，ＩＤｐ∈ＩＤとなっているかを検証する。満たしていなければｒｅｓｕｌｔ２ｄ：＝１０１，ｒｅｓｕｌｔ２ｐ：＝１０１とする。もし満たしていれば、以下を実施する。ここで、ｒｅｓｕｌｔ２ｄ及びｒｅｓｕｌｔ２ｐの値「１０１」は、不正なアクセスがされたことを示す
【０２４９】
２．機器Ａ１０２でのサーバ１０４の真正結果の検証のため、ｒ２ｐ＝ＰＲＦ（ｓｋｐ，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｐ｜｜ｒｈ｜｜ｒｃｐ｜｜１）を満たすかを検証する。満たす場合、ｒｅｓｕｌｔ２ｐ：＝０ｘ０・・・７＆ｒｃｐ（ｒｃｐの下位３ｂｉｔ）とする。そして、ｒｅｓｕｌｔ２ｐを機器Ａ１０２とサーバ１０４との相互認証結果として記録する。ここで、ｒｅｓｕｌｔ２ｐが「００１」である場合、サーバ１０４の真正が証明され、鍵ｋ１が中間者に改竄されることも漏洩することもなく、機器Ａ１０２のデータ格納領域にデータ格納を行うことが成功したことを意味する。また、ｒｅｓｕｌｔ２ｐが「０１０」である場合、鍵ｋ１の認証付き暗号方式での認証に失敗（メッセージ改竄の可能性）したことを意味する。また、ｒｅｓｕｌｔ２ｐが「１００」である場合、サーバ１０４の真正証明に失敗（メッセージ改竄の可能性）したことを意味する。
【０２５０】
３．機器Ｂ１１０でのサーバ１０４の真正結果の検証のため、ｒ２ｄ＝ＰＲＦ（ｓｋｄ，ｔｓｓ｜｜ｔｓｐ｜｜ＩＤｄ｜｜ｒｈ｜｜ｒｃｄ｜｜１）を満たすかを検証する。満たす場合、ｒｅｓｕｌｔ２ｄ：＝０ｘ０・・・７＆ｒｃｄ（ｒｃｄの下位３ｂｉｔ）とする。そして、ｒｅｓｕｌｔ２ｄを機器Ｂ１１０とサーバ１０４との相互認証結果として記録する。ここで、ｒｅｓｕｌｔ２ｄが「００１」である場合、サーバ１０４の真正が証明され、鍵ｋ１が中間者に改竄されることも漏洩することもなく、機器Ｂ１１０のデータ格納領域にデータ格納を行うことが成功したことを意味する。また、ｒｅｓｕｌｔ２ｄが「０１０」である場合、鍵ｋ１の認証付き暗号方式での認証に失敗（メッセージ改竄の可能性）したことを意味する。また、ｒｅｓｕｌｔ２ｄが「１００」である場合、サーバ１０４の真正証明に失敗（メッセージ改竄の可能性）したことを意味する。
なお、サーバ１０４から機器Ａ１０２へ鍵ｋ１の認証付き暗号データを送付後、機器Ａ１０２及び機器Ｂ１１０によるサーバ１０４の真正証明や鍵ｋ１の認証に対する結果をサーバ１０４が取得するまでの間に時間制約がある場合、上記サイズチェック時に、ｔｓｓとサーバ１０４での現在時刻とを比較することで、その時間制約の確認を実施してもよい。
【０２５１】
実施の形態３にかかるデータ授受シーケンスは、ｒｐが改竄されると、対応するセッションが非存在となるか、存在しても異なるセッションでの機器Ｂ１１０での認証が実施されるが認証が失敗するため、フェールセーフである。また、実施の形態３にかかるデータ授受シーケンスは、ｒｈが改竄される場合も、機器Ａ１０２及び機器Ｂ１１０での鍵ｋ１の認証付き暗号の復号処理可否に対する検証が失敗するため、フェールセーフである。また、実施の形態３にかかるデータ授受シーケンスは、機器Ｂ１１０での認証付き暗号の復号操作の成功可否に対する検証手段により、ｒｈが改竄された場合に機器Ａ１０２が機器Ｂ１１０へ送付したデータの復号時の認証に失敗するため、フェールセーフである。また、実施の形態３にかかるデータ授受シーケンスでは、機器Ａ１０２と機器Ｂ１１０との間での相互認証手段により、攻撃者がｒｃｄｐの値を改竄しても、機器Ａ１０２において機器Ｂ１１０でのデータ書込みに成功したとすることはできない。また、実施の形態３にかかるデータ授受シーケンスでは、ｔｓｐが改竄された場合も、機器Ａ１０２及び機器Ｂ１１０での認証結果の検証手段により、機器Ｂ１１０でのデータ書込みを成功とすることも、機器Ａ１０２において機器Ｂ１１０でのデータ書込みを成功とすることもできない。他の値も同様である。つまり、ｒｐ、ｒｈ２、ｔｓｐなど全ての値の内、何れを改竄しても、機器Ｂ１１０のハードウェアセキュリティモジュール回路１０で構成された認証付き暗号の復号処理可否を、攻撃者等は、書込み成功や検証合格とすることができない。したがって、実施の形態３においては、メッセージに含まれる値の全てまたは何れかが改竄された場合、何らかの改竄があったことを検知可能である。なお、改竄による認証失敗又は検証不合格を効率よく検出する目的で、ｔｓｐに対してハッシュ値を付加してもよい。
【０２５２】
また、実施の形態３にかかるデータ授受シーケンスでは、機器Ａ１０２機器Ｂ１１０（半導体装置１）との通信のみに用いられる鍵情報（ｋ１）が、サーバ１０４によって、機器Ａ１０２及び機器Ｂ１１０に対して発行される。そして、機器Ａ１０２及び機器Ｂ１１０に鍵情報が送信されるときに、サーバ１０４と、機器Ａ１０２と、機器Ｂ１１０とで、相互に認証を行う。さらに、実施の形態１及び実施の形態２において転送対象データを転送する場合と同様に、非セキュア部１２０のメモリ領域に対して、アクセス制御がなされる。したがって、機器Ａ１０２及び機器Ｂ１１０に共通鍵を予め配置しておくことが不要となる。さらに、配置される際にアクセス制御がなされることによって、攻撃者等によって鍵情報の改竄がなされることを抑制することが可能となる。
【０２５３】
（変形例）
なお、本実施の形態は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述した複数の実施の形態のそれぞれは、互いに適用可能である。例えば、実施の形態１にかかるデータ授受シーケンスが行われる前に、実施の形態３にかかる鍵情報の送付が行われてもよい。また、上述した実施の形態にかかるシーケンス図において、各処理の順序は、適宜、変更可能である。
【０２５４】
また、上述した実施の形態において、認証システム１００は、車載ネットワークシステムであるとしたが、認証システム１００は、車載ネットワークシステムに限定されない。認証システム１００は、他の機器と通信可能な任意の装置に、適用可能である。例えば、認証システムは、外部の機器と通信可能な家電製品等に、適用可能である。
【０２５５】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【０２５６】
１  半導体装置
２  ＣＰＵ
３  プログラムメモリ
４  エラー検出回路
５  入出力インタフェース
６  ワークメモリ
８  専用エラー検出回路
１０  ハードウェアセキュリティモジュール回路
１１  ＣＰＵ
１２  入出力インタフェース
１３  暗号処理部
１４  ワークメモリ
１５  コード用不揮発性メモリ
１６  データ用不揮発性メモリ
２０  アクセス制御回路
２２  属性制御ステートマシン
４０  アクセス制御回路
４１  データ読出しユニット
４３  命令フェッチユニット
１００  認証システム
１０２  機器Ａ
１０４  サーバ
１１０  機器Ｂ
１２０  非セキュア部
【図１】
2019095969.tif 000003
【図２】
2019095969.tif 000004
【図３】
2019095969.tif 000005
【図４】
2019095969.tif 000006
【図５】
2019095969.tif 000007
【図６】
2019095969.tif 000008
【図７】
2019095969.tif 000009
【図８】
2019095969.tif 000010
【図９】
2019095969.tif 000011
【図１０】
2019095969.tif 000012
【図１１】
2019095969.tif 000013
【図１２】
2019095969.tif 000014
【図１３】
2019095969.tif 000015
【図１４】
2019095969.tif 000016
【図１５】
2019095969.tif 000017
【図１６】
2019095969.tif 000018
【図１７】
2019095969.tif 000019
【図１８】
2019095969.tif 000020
【図１９】
2019095969.tif 000021
【図２０】
2019095969.tif 000022
【図２１】
2019095969.tif 000023
【図２２】
2019095969.tif 000024
【図２３】
2019095969.tif 000025
【図２４】
2019095969.tif 000026
【図２５】
2019095969.tif 000027
【図２６】
2019095969.tif 000028
【図２７】
2019095969.tif 000029
【図２８】
2019095969.tif 000030
【図２９】
2019095969.tif 000031
【図３０】
2019095969.tif 000032
【図３１】
2019095969.tif 000033
【図３２】
2019095969.tif 000034
【図３３】
2019095969.tif 000035
【図３４】
2019095969.tif 000036