(57)【要約】【課題】送信側の機器と受信側の機器とで共有される鍵の更新をセキュアに実現する。【解決手段】第２の機器は、暗号処理部２１により新たな共有鍵を暗号化し、暗号化された新たな共有鍵に対する署名を署名処理部２２により発行し、前記署名と前記暗号化された新たな共有鍵とを第１の機器に送信する。第１の機器は、署名処理部３２が前記署名の検証に失敗した場合、前記暗号化された新たな共有鍵の受信後に行われる処理であって、記憶部３３への前記新たな共有鍵の格納のために必要とされる処理うち少なくとも１つを禁止するよう制御する。【選択図】図１１
2019195116.tif 000002
【特許請求の範囲】
【請求項１】
第１の暗号処理部と第１の署名処理部と該第１の暗号処理部により復号された共有鍵を格納するための第１の記憶部とを有する第１の機器と
第２の暗号処理部と第２の署名処理部とを有する第２の機器と
を備え、
前記第２の機器は、
前記第２の暗号処理部により新たな共有鍵を暗号化し、暗号化された新たな共有鍵に対する署名を前記第２の署名処理部により発行し、前記署名と前記暗号化された新たな共有鍵とを前記第１の機器に送信し、
前記第１の機器は、
前記第１の署名処理部が前記署名の検証に失敗した場合、前記暗号化された新たな共有鍵の受信後に行われる処理であって、前記第１の記憶部への前記新たな共有鍵の格納のために必要とされる処理うち少なくとも１つを禁止するよう制御する
データ転送システム。
【請求項２】
前記第１の機器は、前記第１の署名処理部が前記署名の検証に失敗した場合、前記暗号化された新たな共有鍵の前記第１の暗号処理部による復号を禁止するよう制御する
請求項１に記載のデータ転送システム。
【請求項３】
前記第１の記憶部は不揮発性メモリと該不揮発性メモリに格納される前記共有鍵を一時的に格納するバッファメモリを含み、
前記第１の機器は、前記第１の署名処理部が前記署名の検証に失敗した場合、前記第１の暗号処理部により復号された前記新たな共有鍵の前記バッファメモリへの格納を禁止するよう制御する
請求項１に記載のデータ転送システム。
【請求項４】
前記第１の記憶部は不揮発性メモリと該不揮発性メモリに格納される前記共有鍵を一時的に格納するバッファメモリを含み、
前記第１の機器は、前記第１の署名処理部が前記署名の検証に失敗した場合、前記第１の暗号処理部により復号され前記バッファメモリへ格納された前記新たな共有鍵の前記不揮発性メモリへの格納を禁止するよう制御する
請求項１に記載のデータ転送システム。
【請求項５】
前記第１の記憶部は共有鍵を一時的に格納する第１のバッファメモリを含み、
前記第２の機器は共有鍵を一時的に格納する第２のバッファメモリを含む第２の記憶部を有し、
前記第１のバッファメモリ及び第２バッファメモリは、それぞれ、第１の面と第２の面を備え、一方の面に、今回の転送に対して利用される共有鍵が格納され、他方の面に、次回の転送に対して利用される新たな共有鍵が格納される
請求項１に記載のデータ転送システム。
【請求項６】
前記第２の機器は、Ｎ回（Ｎは２以上の整数）連続して前記第１の機器への転送を行う場合、ｊ−１番目の転送（ｊは２以上Ｎ以下の整数）において、ｊ番目の転送に対して利用されるｊ番目の署名用共有鍵及び暗号用共有鍵を含む転送データを、ｊ−１番目の署名用共有鍵及び暗号用共有鍵を用いて処理して転送し、
前記第１の機器は、１番目の前記転送データの転送からカウントした転送の連続成功回数と、前記第１の機器と前記第２の機器との間で予め共有されている事前共有鍵を用いて前記第２の暗号処理部によって暗号化した、前記第１の機器が前記第２の機器から取得している最新の署名用共有鍵及び暗号用共有鍵とを含む転送データを、前記第２の機器へ転送し、
前記第２の機器は、前記事前共有鍵を用いて、前記第１の機器から転送された前記転送データを復号し、復号して得られた前記署名用共有鍵及び前記暗号用共有鍵を再転送の最初の転送に用いて、前記連続成功回数の次の回以降の転送を再度実行する
請求項１に記載のデータ転送システム。
【請求項７】
前記第１の機器及び前記第２の機器は、前記連続成功回数と前記署名用共有鍵及び前記暗号用共有鍵とを含む前記転送データの転送が行われる場合、当該署名用共有鍵又は当該暗号用共有鍵を新たな前記事前共有鍵として採用する
請求項６に記載のデータ転送システム。
【請求項８】
前記第１の機器は、所定の鍵と所定の乱数と任意のカウンタ値とにより一意に定まる暗号学的疑似乱数を生成する第１の疑似乱数生成部をさらに有し、
前記第２の機器は、前記所定の鍵と前記所定の乱数と任意のカウンタ値とにより一意に定まる暗号学的疑似乱数を生成する第２の疑似乱数生成部をさらに有し、
前記第１の疑似乱数生成部及び前記第２の疑似乱数生成部が用いる前記カウンタ値は、転送の度に所定値だけ変更される値であり、
前記第２の機器は、Ｎ回（Ｎは２以上の整数）連続して前記第１の機器への転送を行う場合、ｊ−１番目の転送（ｊは２以上Ｎ以下の整数）において、ｊ番目の転送に対して利用されるｊ番目の署名用共有鍵及び暗号用共有鍵を含む転送データを、ｊ−１番目の署名用共有鍵及び暗号用共有鍵を用いて処理して転送し、
ｊ番目の署名用共有鍵及び暗号用共有鍵は、前記第１の疑似乱数生成部により生成された暗号学的疑似乱数であり、
前記第１の機器は、前記第２の機器からのｊ−１番目の転送において送信された前記署名用共有鍵及び前記暗号用共有鍵の取得に失敗した場合、ｊ番目の転送に対して利用される前記署名用共有鍵及び前記暗号用共有鍵を前記第１の疑似乱数生成部により生成する
請求項１に記載のデータ転送システム。
【請求項９】
前記第２の機器は、各転送の際、前記第１の機器と前記第２の機器との間で予め共有されている事前共有鍵を用いて前記第２の署名処理部により生成された前記第２の機器が管理している前記カウンタ値に対する署名も前記第１の機器へ送信し、
前記第１の機器は、ｊ番目の転送に対して利用される前記署名用共有鍵及び前記暗号用共有鍵を前記第１の疑似乱数生成部により生成する際、前記第２の機器から送信された署名が、前記第２の機器が管理している前記カウンタ値及び前記事前共有鍵を用いた前記第１の署名処理部による検証に合格した場合、ｊ番目の転送に対して利用される前記署名用共有鍵及び前記暗号用共有鍵を前記第１の疑似乱数生成部により生成する
請求項８に記載のデータ転送システム。
【請求項１０】
前記第１の機器は、前記第２の機器からのｊ−１番目の転送において送信された前記署名用共有鍵及び前記暗号用共有鍵の取得に失敗した場合、新たな前記事前共有鍵を生成して、前記第２の機器へ転送し、
前記第１の機器及び前記第２の機器は、現在の前記事前共有鍵を、前記新たな事前共有鍵により更新する
請求項９に記載のデータ転送システム。
【請求項１１】
前記第１の機器は、前記第２の機器からのｊ−１番目の転送において送信された前記署名用共有鍵及び前記暗号用共有鍵の取得に失敗した場合、前記第１の機器が前記第２の機器から取得している最新の署名用共有鍵又は暗号用共有鍵を新たな前記事前共有鍵として採用するとともに、ｊ−１番目の転送において送信された前記署名用共有鍵及び前記暗号用共有鍵の取得に失敗した旨を前記第２の機器に通知し、
前記通知を受信した前記第２の機器は、前記第１の機器により採用される前記新たな事前共有鍵を、序数ｊから特定される前記カウンタ値を用いて前記第２の疑似乱数生成部により生成する
請求項９に記載のデータ転送システム。
【請求項１２】
前記第１の機器は、該第１の機器が有する最新の署名用共有鍵及び暗号用共有鍵が、Ｎ回の転送のうち何番目の転送で前記第２の機器から送信される署名用共有鍵及び暗号用共有鍵に相当するかを示す序数を含む転送データを前記第２の機器へ転送し、
前記第２の機器は、前記序数から特定される前記カウンタ値を用いて前記第２の疑似乱数生成部により生成された前記署名用共有鍵及び前記暗号用共有鍵を再転送の最初の転送に用いて、前記序数の次の回以降の転送を再度実行する
請求項８に記載のデータ転送システム。
【請求項１３】
前記第１の疑似乱数生成部及び前記第２の機器の疑似乱数生成部は、前記序数を含む前記転送データの転送が行われる場合、前記序数から特定される前記カウンタ値を用いて前記第１の疑似乱数生成部及び前記第２の疑似乱数生成部により生成された前記署名用共有鍵又は前記暗号用共有鍵を、新たな前記所定の鍵として採用する
請求項１２に記載のデータ転送システム。
【請求項１４】
前記第１の機器は、前記第２の機器から転送されたデータに対する誤り検出符号又は誤り訂正符号を用いて誤りを検出する第１の符号処理部をさらに有し、
前記第２の機器は、転送対象のデータに対する誤り検出符号又は誤り訂正符号を生成する第２の符号処理部をさらに有する
請求項１に記載のデータ転送システム。
【請求項１５】
第１の機器と第２の機器との間の転送方法であって、
第２の機器が、新たな共有鍵を暗号化し、暗号化された新たな共有鍵に対する署名を発行し、前記署名と前記暗号化された新たな共有鍵とを前記第１の機器に送信し、
前記第１の機器は、前記署名の検証に失敗した場合、前記暗号化された新たな共有鍵の受信後に行われる処理であって、復号された共有鍵を格納するための記憶部への前記新たな共有鍵の格納のために必要とされる処理うち少なくとも１つを禁止するよう制御する
転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ転送システム及び転送方法に関し、例えば共有鍵の転送を行うデータ転送システム及び転送方法に関する。
【背景技術】
【０００２】
機器間でセキュアにデータを転送する技術が求められている。例えば、特許文献１は、認証または鍵交換のプロトコルの安全性を検証する検証装置により、暗号方式及びシーケンスのプリミティブの組合せが、指定された種類の安全性を満たすか否かの判定を行うことを開示している。
【０００３】
また、特許文献２は、マイクロコントローラ、保護されたメモリ（マイクロコントローラからは暗復号ユニット経由でアクセスされるメモリ)、データの暗復号ユニットを含むセキュリティデバイスについて開示している。このデバイスでは、保護されたメモリにメイン鍵とデータの暗復号鍵が配置される。そして、暗復号鍵の更新は、メイン鍵で暗号化された鍵をマイクロコントローラが受信し、暗号ユニットへ転送し、暗号ユニットにてメイン鍵を用いて復号し、これにより得られた鍵が鍵スロットに保存されることにより実現される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−００４１７６号公報
【特許文献２】米国特許出願公開第２０１１／０１４５６０１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
このように、セキュアな通信を実現するための種々の技術が提案されている。しかしながら、セキュアな通信に対するニーズは近年ますます高まっており、セキュアな通信を実現するための新規な技術の更なる提案が求められている。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、第２の機器は、第２の暗号処理部により新たな共有鍵を暗号化し、暗号化された新たな共有鍵に対する署名を第２の署名処理部により発行し、署名と暗号化された新たな共有鍵とを第１の機器に送信し、第１の機器は、第１の署名処理部が署名の検証に失敗した場合、暗号化された新たな共有鍵の受信後に行われる処理であって、記憶部への新たな共有鍵の格納のために必要とされる処理うち少なくとも１つを禁止するよう制御する。
【発明の効果】
【０００８】
前記一実施の形態によれば、送信側の機器と受信側の機器とで共有される鍵の更新をセキュアに実現できる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態にかかるデータ転送システムの構成の一例を示すブロック図である。
【図２】実施の形態１にかかるＨＳＭの構成の一例を示すブロック図である。
【図３】実施の形態１にかかる転送プロトコルの流れを示す図である。
【図４】実施の形態２にかかるＨＳＭの構成の一例を示すブロック図である。
【図５Ａ】実施の形態２にかかる転送プロトコルの流れを示す図である。
【図５Ｂ】実施の形態２にかかる転送プロトコルの流れを示す図である。
【図６Ａ】実施の形態２の変形例にかかる転送プロトコルの流れを示す図である。
【図６Ｂ】実施の形態２の変形例にかかる転送プロトコルの流れを示す図である。
【図７】疑似乱数生成器の構成例を示す図である。
【図８】実施の形態３にかかるＨＳＭの構成の一例を示すブロック図である。
【図９Ａ】実施の形態３にかかる転送プロトコルの流れを示す図である。
【図９Ｂ】実施の形態３にかかる転送プロトコルの流れを示す図である。
【図９Ｃ】実施の形態３にかかる転送プロトコルの流れを示す図である。
【図９Ｄ】実施の形態３にかかる転送プロトコルの流れを示す図である。
【図９Ｅ】実施の形態３にかかる転送プロトコルの流れを示す図である。
【図１０Ａ】実施の形態４にかかる転送プロトコルの流れを示す図である。
【図１０Ｂ】実施の形態４にかかる転送プロトコルの流れを示す図である。
【図１１】簡略化された実施の形態の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１０】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、以下の記載で説明される各処理、及び図面に示される各要素は、例えばハードウェア回路により実現されるが、その一部又は全てがプログラムの実行により実現されてもよい。プログラムの実行により実現される場合、例えば、機器が備えるメモリに格納された１以上の命令を含むプログラムが、該機器の備えるプロセッサにより実行されることにより実現される。なお、以下の記載で説明される各処理、及び図面に示される各要素がハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
【００１１】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１２】
＜実施の形態の概要＞
実施の形態の詳細を説明する前に、実施の形態の概要について説明する。
近年、車載ネットワーク上に流れるパケットを容易に収集するためのガジェットが安価で提供されている。このため、何らかの要因で共通鍵が漏れた場合、改竄パケット再送による攻撃が懸念され、また、収集パケットの解析によるより高度な攻撃などが懸念される。これに対応するためには、共通鍵のみで実現可能な前方秘匿性のあるデータ授受プロトコルを用いる事が望ましい。また、車載ネットワークでは、ノイズなどによるパケットデータ誤りや、機器故障によるパケットロスが起こり得るため、これらへの対応も求められる。特に、前方秘匿性のあるデータ授受実現では、セッション鍵の効率的な生成と更新が必要となる。
【００１３】
実施の形態１では、受信側の機器において、新たな共有鍵として受信した鍵に改ざんの恐れがある場合には、当該鍵が登録されることを防ぐよう機器が構成されている。
【００１４】
また、実施の形態２では、送信側の機器と少なくとも1つ以上の受信側の機器で事前共有鍵を用いた初期セッション鍵設定を実施後、送信側の機器にて疑似乱数を用いたセッション鍵系列を生成し、これをCPU（Central Processing Unit）などの非セキュア部から読出し不可な最低1つ以上の交代バッファに格納し、i番目の鍵でi+1番目の鍵を認証付き暗号方式にて暗号化し、受信側の機器に送付する。受信側の機器は、i番目に受信した鍵を用いてi+1番目に受信した鍵を復号しCPUなどの非セキュア部からアクセス不能な領域に格納しつつ、データの署名検証や復号などを安全に実施する。これにより、前方秘匿性を持つマルチキャスト可能なデータ送受信プロトコルを実現する。ここで、0番目の鍵が初期セッション鍵となる。また、認証付き暗号方式を、暗号化と暗号化結果に対する署名発行にて代替する場合は、暗号化・復号化用鍵を格納する交代バッファと署名発行・検証用の鍵を格納する交代バッファの最低2つの交代バッファを具備する。
【００１５】
パケットロスへの対応としては、1つ以上のパケットを転送した後、受信側の機器から送信側の機器へAckを返す構成を前提とする。送信側の機器ではAckが返ってくる事が想定されるパケットに格納した鍵値は、別途、CPUなどの非セキュア部からアクセス不可な領域に格納しておき、Ackが返ってきた段階で、事前共有鍵を、前記格納した鍵値に更新し、受信側の機器では、事前共有鍵をAckを返す時の最新の鍵値に更新する。
【００１６】
パケットロスが発生したパケットからの再送を行う場合は、そのトランザクションでの更新が実施出来た最新セッション鍵を受信側の機器で識別し、当該セッション鍵の、事前共有鍵による認証付き暗号結果を送信側の機器に送る事で、パケットロスで一貫性が取れなくなった送信側の機器・受信側の機器の両サイドでのセッション鍵の再同期を実施する。そして、送信側の機器がパケットロスが発生したパケットから再送する。これを全転送が完了するまで新たなパケットロスが発生する度に繰り返す。ここで、再送を契機として事前共有鍵の更新を実施する。これら再送で不具合が発生した場合は、初期セッション鍵設定から再度全送受信を実行する。
【００１７】
実施の形態３及び実施の形態４では、パケットロスが発生した場合に、パケットロスが発生したパケットからの再送を行われない場合も扱う。このような構成として、具体的には、生成される疑似乱数を、入力乱数、カウンタ値、及び疑似乱数生成用の鍵に基づいて生成される暗号学的疑似乱数(CSRNG)に変更した構成を示す。即ち、CSRNGは、カウンタ値を入力する事で、カウンタ値に応じた鍵値を生成可能となる。パケットロスが発生した場合への対応のため、各パケットには、一つ前のカウンタ値に対して事前共有鍵による署名を付加し、受信側の機器で署名検証を実施し、署名が成功した場合に一つ前のカウンタを用いてCSRNGで鍵値を生成する。これにより、現在のパケットデータの署名検証や復号に必要となる鍵を取得可能となる。ここで、暗号学的疑似乱数を生成するための初期設定は、事前共有鍵を用いて秘匿性と改竄耐性を持つセキュリティプロトコルにて実施される。ロスに対する再送要求が不要だと判断した場合、受信側の機器は規定分のカウンタ値が更新されるとAckを返す。受信側の機器からの再送要求があった場合は、送信側の機器は、カウンタ値を、再送すべきパケットの送信時に用いられたカウンタ値に戻した上で、再送を行う。再送要求の際、事前共有鍵を用いた認証を実施しても良い。特に、再送を契機として事前共有鍵の更新を実施する。また、これら再送で不具合が発生した場合は、初期セッション鍵設定から再度全送受信を実行する。
【００１８】
尚、機器間でのメッセージ送受信は、例えば有線による伝送により行われるため、メッセージ誤り及びロスは起こり得るが、メッセージの順番入れ替えは起こらないものとする。
【００１９】
＜実施の形態１＞
図１は、実施の形態にかかるデータ転送システム１の構成の一例を示すブロック図である。データ転送システム１は、例えば、自動車等の車両に適用される車載ネットワークシステムであり、機器Ａ２と機器Ｂ３とを有する。
【００２０】
機器Ａ２は、例えば、車両の外部からの信号を受信するゲートウェイであり。機器Ｂ３は、例えば、車両の各部品（ブレーキ、モータ、エンジン、ステアリング等）を制御するＭＣＵ（Ｍｉｃｒｏ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ；マイクロコントローラ）である。機器Ａ２と機器Ｂ３は、本実施の形態では、有線を介して通信可能に接続されているが、無線を介して通信可能に接続されていてもよい。
【００２１】
機器Ａ２及び機器Ｂ３は、ＨＳＭ（Ｈａｒｄｗａｒｅ  Ｓｅｃｕｒｉｔｙ  Ｍｏｄｕｌｅ；ハードウェアセキュリティモジュール）１０と、非セキュア部１１とを有する。ＨＳＭ１０は、機器間の通信をセキュアに実現するために、鍵の管理を含む種々の処理を実行するハードウェアである。また、非セキュア部１１は、機器Ａ２及び機器Ｂ３のうち、ＨＳＭ１０以外の構成要素であり、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）といったプロセッサ、送受信回路などを含む。
【００２２】
図２は、実施の形態１にかかるＨＳＭ１０の構成の一例を示すブロック図である。以下、図２を用いて、暗号復号処理や署名発行検証処理、及び鍵格納を行うハードウェア構成を説明する。図２に示すように、ＨＳＭ１０は、疑似乱数生成処理部１０１と、暗号復号処理部１０２と、署名発行検証処理部１０３と、セッション鍵バッファ１０４と、登録鍵バッファ１０５と、発行署名バッファ１１３と、誤り符号処理部１１４と、不揮発性メモリ１０８と、制御部１０６、１０７、１１５と、セレクタ１０９、１１０、１１１、１１２とを有する。ここで、疑似乱数生成処理部１０１は、真正乱数生成機能を具備しても良い。
【００２３】
疑似乱数生成処理部１０１は、疑似乱数を生成する。疑似乱数生成処理部１０１が生成する疑似乱数は、セッション鍵、ブロック暗号で用いるIV(初期ベクトル)、署名発行処理などで用いられる。また、疑似乱数生成処理部１０１は、データ0として入力されるデータの入力を受け、生成した疑似乱数との連接を行い、連接結果を誤り符号処理部１１４へ渡す。誤り符号処理部１１４において、例えばＣＲＣ（Cyclic Redundancy Check）値といった誤り符号が付加される。なお、データ入力がない場合は、疑似乱数生成処理部１０１は、生成した疑似乱数を誤り符号処理部１１４へ渡す。これにより、生成した疑似乱数に対し、誤り符号処理部１１４において、誤り符号が付加される。誤り符号処理部１１４は、ＣＲＣ又はＥＣＣ（Error Correction Code）などの誤り符号の生成処理、及び誤り符号に基づく誤りの検出処理を行う。誤り符号処理部１１４による処理結果は、セッション鍵バッファ１０４に格納可能である。
【００２４】
暗号復号処理部１０２は、登録鍵バッファ１０５若しくはセッション鍵バッファ１０４に登録された鍵、または発行署名バッファ１１３を用いて、入力データまたは前記鍵を対象とした暗号復号処理を実施する。暗号復号の対象となるのは、データ1として入力されるデータであり、セッション鍵バッファ１０４に格納された鍵値は暗号化処理の対象となる。何れを入力データとするかは、セレクタ１１１で制御される。ここで、バッファに格納されたどの鍵を用いるかは、セレクタ１１０を用いて選択されるものとする。また、バッファ格納値を入力とした復号処理による復号結果の外部等への出力は不可とする。
【００２５】
署名発行検証処理部１０３は、登録鍵バッファ１０５またはセッション鍵バッファ１０４に登録された鍵を用いて、入力データまたは前記鍵を対象とした署名発行検証処理を実施する。また、署名発行検証処理部１０３は、発行した署名を発行署名バッファ１１３に格納する。何れを入力データとするかは、セレクタ１１２で制御される。ここで、署名発行検証で用いる鍵として、登録鍵バッファ１０５の鍵かセッション鍵バッファ１０４の鍵の何れを用いるかは、セレクタ１１０を用いて選択されるものとする。
【００２６】
セッション鍵バッファ１０４は、疑似乱数生成処理部１０１の出力値、または暗号復号処理部１０２の復号結果の出力値の何れかを格納するバッファメモリである。この選択は、セレクタ１０９で実施される。セッション鍵バッファ１０４からのデータ読み出しは、暗号復号処理部１０２又は署名発行検証処理部１０３による読み出しか、不揮発性メモリ１０８へのデータ格納転送のみでの実施が可能である。鍵を利用目的別に明確に区別する事を目的に、セッション鍵バッファ１０４からの読み出しは、署名発行検証処理部１０３の鍵としての利用と、不揮発性メモリ１０８へのデータ格納転送のみに制限しても良い。
【００２７】
また、ＨＳＭ１０は、制御部１０６、制御部１０７、制御部１１５のうち少なくともいずれか一つを有する。
【００２８】
制御部１０６は、セッション鍵バッファ１０４への格納を制御する。制御部１０６を具備した構成の場合、暗号復号処理部１０２の復号結果値のセッション鍵バッファ１０４への格納は、それに先立ち署名発行検証処理部１０３で行われる署名検証に合格した場合のみ許可されるよう制御部１０６により制御される。すなわち、署名検証に失敗した場合、セッション鍵バッファ１０４への書き込みは、制御部１０６により禁止される。
【００２９】
制御部１０７は、暗号復号処理部１０２による復号処理の実施を制御する。制御部１０７を具備した構成の場合、署名発行検証処理部１０３での署名検証に合格した場合のみ、暗号復号処理部１０２への復号対象データの入力がなされるよう制御部１０７により制御される。すなわち、署名検証に失敗した場合、暗号復号処理部１０２による復号処理が禁止される。
【００３０】
制御部１１５は、不揮発性メモリ１０８への格納を制御する。制御部１１５を具備した構成の場合、署名発行検証処理部１０３での署名検証に合格した場合のみ、セッション鍵バッファ１０４の格納値の不揮発性メモリ１０８への格納（鍵登録）が成されるよう制御部１１５により制御される。すなわち、署名検証に失敗した場合、セッション鍵バッファ１０４の格納値の不揮発性メモリ１０８への書き込みが禁止される。
【００３１】
特に、例えば、登録鍵バッファ１０５やセッション鍵バッファ１０４に格納された鍵は全て署名発行検証のみに用いるものとし、生成した署名を発行署名バッファ１１３に格納し、これを暗号復号鍵として運用することにより、暗号復号で用いる鍵と署名発行検証で用いる鍵を互いに素とし、どちらか一方にしか用いる事が出来ないものとしてもよい。この制御と制御部１０６、１０７又は１１５による鍵格納制御とにより、暗号データの復号では、それに先立ち行われる前記暗号データに対する署名検証が合格した場合に復号結果の不揮発性メモリ１０８への鍵登録が実施される。このため、データの安全性と整合性が保証される。
【００３２】
発行署名バッファ１１３は、署名発行検証処理部１０３が発行した署名を格納するバッファメモリである。本バッファからのデータ読み出しは、暗号復号処理部１０２と署名発行検証処理部１０３からのみ可能である。鍵を利用目的別に明確に区別する事を目的に、発行署名バッファ１１３からの読み出しは、暗号復号処理部１０２の暗号復号鍵としての利用のみに制限しても良い。
【００３３】
不揮発性メモリ１０８は、鍵登録が行われる不揮発性メモリであり、セッション鍵バッファ１０４、登録鍵バッファ１０５、発行署名バッファ１１３とのデータ送受信のみが可能である。例えば、登録鍵バッファ１０５への鍵登録は、セッション鍵バッファ１０４から不揮発性メモリ１０８へ鍵データ書込みを実施し、それを登録鍵バッファ１０５へ読み出す事で実施する。
【００３４】
登録鍵バッファ１０５は、不揮発性メモリ１０８からのみ設定可能なバッファメモリである。登録鍵バッファ１０５は鍵を複数登録可能なようアドレスを具備していても良い。アドレスがある場合、アドレス指定を伴う、本バッファからのデータ読み出しは、暗号復号処理部１０２と署名発行検証処理部１０３からの読み出しか、不揮発性メモリ１０８へのデータ格納転送のみで実施が可能である。鍵を利用目的別に明確に区別する事を目的に、登録鍵バッファ１０５からの読み出しは、署名発行検証処理部１０３の鍵としての利用と、不揮発性メモリ１０８へのデータ格納転送のみに制限しても良い。
【００３５】
上記構成において、制御部１０６、１０７、１１５への制御信号、セレクタ１１０、１１１、１１２への制御信号、セッション鍵バッファ１０４と登録鍵バッファ１０５からの不揮発性メモリ１０８への鍵登録や退避制御に対する制御信号、及び不揮発性メモリ１０８からの登録鍵バッファ１０５への鍵読出し制御に対する制御信号を含む制御信号群が与えられる。この制御信号群は、コマンドを受け付けるレジスタを備えた専用制御ハードウェアの出力として構成されていても良いし、プログラムでの実行制御が可能なプロセッシングユニットからの出力として構成されていても良い。前者の構成の場合、プログラム実行可能なコントローラが付随するものとする。また、いずれの構成の場合も、図２に示す出力結果(発行署名、署名検証結果、暗号結果、復号結果、疑似乱数出力)を格納するメモリが付随するものとし、プログラムでの実行制御が可能なプロセッシングユニットやプログラム実行可能なコントローラは、当該メモリへの読み書きが可能であるとする。このため、ＨＳＭ１０を介して当該メモリに格納された転送データを非セキュア部１１が利用可能となる。但し、復号結果については、バッファに格納した鍵の値が、前記出力結果を格納するメモリに出力されないよう制御が成されているものとする。
【００３６】
なお、以下において、図を参照して説明される機器Ａ２及び機器Ｂ３の各シーケンスにおいては、例えばＨＳＭ１０に内蔵された上述の専用制御ハードウェア又はプロセッシングユニットの制御のもと処理が実施される。
【００３７】
次に、図３のシーケンス図を用いて、改竄耐性と秘匿性を持つ機能安全考慮の機器間鍵・メッセージ送受信プロトコルの動作を以下に示す。メッセージを伴わない場合、機器Ａ２が生成した共通対称鍵を機器Ｂ３に設定する、共通対称鍵設定プロトコルとなる。ここで、機能安全考慮とは、通信路でのデータ誤りやハードウェア故障でのデータ誤りへの対応を指す。尚、機器Ａ２と機器Ｂ３に対する共通対称鍵の初期設定として、下記設定が事前になされているものとする。
【００３８】
セキュリティパラメータをkとし機器Ａ２は1^k を入力とする。機器Ａ２は、認証識別子IDi ∈ {0,1}^k が割り振られている機器Ｂ３に対して対称鍵 ski ← {0,1}^k（つまりｓｋｉのビット長はｋ）を選び、(ski,IDi)を送付する。ここで、skiは、事前共有鍵として利用される鍵である。機器Ｂ３は(ski,IDi)を不揮発性メモリ１０８に保存する。また、機器Ｂ３は、認証識別子IDiの集合IDを機器Ａ２に送付する。ここで、機器Ｂ３の総数をMとし、i ∈ [1,M]する。例えば、機器Ｂ３を出荷する前にこれら処理を実施する事で、各機器Ｂ３に個別の鍵を設定するとともに、機器Ａ２に同鍵を格納しても良い。また、機器Ｂ３の非セキュア部１１は、機器Ｂ３のＨＳＭ１０に格納されたIDiを読み出し可能とする。但し、上書き変更や消去は適切なアクセス制御により出来ないものとする。
【００３９】
(1) 機器認証情報の機器Ａ２での構築:
機器Ａ２ は下記を実施する（Ｓ１００）。
1. 現在の時刻をtss ← TimeStamp として選ぶ。
2. 疑似乱数生成処理部１０１にて、乱数を生成し、IV ← {0,1}^k、rkey ← {0,1}^k とする。ここで、IVはブロック暗号で用いる初期ベクトルである。また、rkeyは、機器Ｂ３と共有すべき新たな事前共有鍵である。
3. 疑似乱数生成処理部１０１で処理を継続し、rkeyと送信データmsgを連接する。また、誤り符号処理部１１４でCRCまたはECCを算出し、例えばCRCを算出したとして、d_crc:=CRC(rkey||msg) とし、セッション鍵バッファ１０４に格納する。演算子’||’はビット連接を表す。
4. r1 := PRF(ski,IDi||tss||IV||1)を署名発行検証処理部１０３で算出し結果出力する一方、r1’ := PRF(ski,IDi||tss||IV||2)を署名発行検証処理部１０３で算出し、発行署名バッファ１１３に格納する。ここで、PRFは、疑似ランダム関数である。また、r1は、署名として用いられることとなり、r1’は、暗号復号処理用の鍵として用いられることとなる。
次いで、セッション鍵バッファ１０４からrkey||msg||d_crcを、発行署名バッファ１１３からr1’を読出し、c1 := Enc(r1’,IV, rkey||msg||d_crc)を暗号復号処理部１０２にて算出し結果出力する一方、 c1’ := PRF(ski,c1)を署名発行検証処理部１０３で実施する。ここで、Encは、共通鍵ブロック暗号であり、例えばAES-CBCである。また、c1は、新たな鍵を含むデータの暗号データであり、c1’は、その署名である。
5. 上記で得られた算出結果をまとめて、Data1:= (tss,IDi,IV,r1,c1,c1’)とし、機器Ｂ３に(1, Data1)を送付する。
このように、機器Ａ２は、暗号復号処理部１０２により新たな共有鍵を暗号化し、暗号化された新たな共有鍵に対する署名を署名発行検証処理部１０３により発行し、この署名と暗号化された新たな共有鍵とを機器Ｂ３に送信する。
【００４０】
(2) 機器Ｂ３でのデータ復号とデータ格納:
機器Ｂ３は、以下を実施する（Ｓ１０１）。
1. 乱数 rc ← {0,1}^(k-3) を疑似乱数生成処理部１０１で生成し、乱数出力を実施する。
2. tss,IDi,IV,r1,c1,c1’ ∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが自身のものと一致するかを確かめる。これにより、簡単なスクリーニングがなされる。満たしていない場合は、result1 ：＝ 000とし、下記ステップ7へ処理を移行する。もし満たしている場合は、以下の操作を実行する。
3. r1 = PRF(ski, IDi tss||IV||1)が満たされるか否かを、署名発行検証処理部１０３で検証する。もし満たさない場合、 result1 := 110 とする。もし満たしていた場合は、以下の処理を実施する。
4. c1’ = PRF(ski,c1)が満たされるか否かを、署名発行検証処理部１０３で検証する。もし、満たさない場合は、result1 := 100 とする。なお、ＨＳＭ１０が制御部１０７を有する構成である場合、これを満たす場合に限り復号処理が可能となる。c1’ = PRF(ski,c1)が満たされており、かつ、復号処理が可能である場合、再び署名発行検証処理部１０３で、r1’ := PRF(ski, IDi|| tss||IV||2) を算出し、発行署名バッファ１１３に算出値を格納する。そして、これを暗号復号処理部１０２の鍵として用いて、rkey||msg||d_crc := Dec(r1’,IV, c1)を実施し、下記ステップ5.以降を実行する。ここで、Decは、共通鍵ブロック暗号での復号あり、例えばAES-CBCでの復号である。つまり、ＨＳＭ１０が制御部１０７を有する構成である場合、制御部１０７の制御により暗号復号処理部１０２に読込可能となったc1に対して、復号処理が行われる。また、ＨＳＭ１０が制御部１０６を有する構成である場合、c1’ = PRF(ski,c1)が満たされる場合(即ち、result1≠100の場合)にのみ、復号結果が誤り符号処理部１１４へ渡され、下記ステップ5.以降が実行されるが、満たしていなかった場合(即ち、result1==100の場合)、処理を下記ステップ7へ移行する。
5. 復号して得られたrkey||msgのCRCを誤り符号処理部１１４でCRC(rkey||msg)として算出し、d_crcと一致するか検証する。一致しない場合、 result1 := 010 とする。一致していた場合は、以下の操作を実行する。
6. rkeyをセッション鍵バッファ１０４に書込み、セッション鍵バッファ１０４からrkeyを不揮発性メモリ１０８への転送をバックグラウンド処理で実施する。このとき、制御部１０６若しくは制御部１０７をＨＳＭ１０が備える場合、上記ステップ4より署名検証に成功しているため、一連の処理が可能となる。よって、ＨＳＭ１０が制御部１１５を有さない場合、rkeyの不揮発性メモリ１０８への書込みが可能となる。また、ＨＳＭ１０が制御部１１５を有する場合、上記ステップ4での署名検証に成功している場合のみ、制御部１１５により不揮発性メモリ１０８へ書込みが許可され、rkeyの不揮発性メモリ１０８への書込みが可能となる。このように、署名検証に失敗した場合、暗号化された新たな共有鍵の受信後に行われる処理であって、不揮発性メモリ１０８への新たな共有鍵の格納のために必要とされる処理うち少なくとも１つを禁止するよう制御部１０６、１０７、１１５によって制御される。なお、不揮発性メモリ１０８への書込みでは、各機器固有の秘密鍵sk0を用いて、Enc.ECB(sk0,rkey)の算出結果の書込みとしても良い。また、result1 := 001とする。
7. rc:=rc||result1、 r2 := PRF(ski,IDi||tss||IV||rc||3)を署名発行検証処理部１０３で算出する。ここで、r2は、機器Ｂ３から機器Ａ２に送信するデータについての署名である。
8. 上記で得られた算出結果をまとめて、Data2:= (IDi,tss,IV,r2,rc)とし、機器Ａ２に(2, Data2)を送付する。
【００４１】
(3) 機器Ａ２での認証結果の検証:
機器Ａ２は、以下を実施する（Ｓ１０２）。
機器Ａ２ は(2,Data2 = (IDi,tss,IV,r2,rc)) を受け取ると、 IDi,tss,IV,r2,rc∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているか、またIDiが機器Ｂ３のIDとして登録されたIDかを検証し、満たしていなければresult2 := 000 とする。もし満たしていれば、 r2 = PRF(ski,IDi||tss||IV||rc||3)であるかを機器Ａ２搭載の署名発行検証処理部１０３で検証する。もし正しければresult2 := rcの下位3bitとし、そうでなければresult2 := 111 とする。そしてresult2を認証結果として出力し、これを記録する。ここで、result2が001なら鍵rkeyとデータmsgが中間者に改竄される事も漏洩する事もなく、またデータが欠損する事もなく、さらに、rkeyを機器Ｂ３の鍵格納領域に格納成功したとして処理が記録される。また、result2が010なら書込みでのデータ欠損による書込み失敗、result2が100ならデータ復号前の署名検証処理で失敗、result2が110なら受信エラー(メッセージ改竄の可能性)、として記録される。
【００４２】
本プロトコルではIV、c1、c1’、r1の何れかが改竄されると、機器Ａ２により発行される署名の機器Ｂ３での検証が失敗するためフェールセーフである。また、機器Ｂ３で署名r2が発行されることにより、攻撃者がrcの値改竄で機器Ａ２で検証合格とする事はできない。IV、c1、c1’、r1、rcの全てまたは何れかが改竄された場合、何らかの改竄があった事を検知可能である。
【００４３】
以上、実施の形態１にかかるデータ転送システム１について説明した。上述したデータ転送システム１は、次のように表現することもできる。すなわち、データ転送システム１は、暗号復号処理部１０２と署名発行検証処理部１０３とを有する機器Ａ２と、暗号復号処理部１０２と署名発行検証処理部１０３と暗号復号処理部１０２により復号された共有鍵を格納するための記憶部（セッション鍵バッファ１０４及び不揮発性メモリ１０８）とを有する機器Ｂ３とを備える。ここで、機器Ａ２は、暗号復号処理部１０２により新たな共有鍵を暗号化し、暗号化された新たな共有鍵に対する署名を署名発行検証処理部１０３により発行し、署名と暗号化された新たな共有鍵とを機器Ｂ３に送信する。また、機器Ｂ３は、署名発行検証処理部１０３が署名の検証に失敗した場合、暗号化された新たな共有鍵の受信後に行われる処理であって、機器Ｂ３の記憶部への新たな共有鍵の格納のために必要とされる処理うち少なくとも１つを禁止するよう制御する。具体的には、例えば、機器Ｂ３は、制御部１０７により、暗号化された新たな共有鍵の暗号復号処理部１０２による復号を禁止するよう制御する。また、例えば、機器Ｂ３は、制御部１０６により、暗号復号処理部１０２により復号された新たな共有鍵のバッファメモリ（不揮発性メモリ１０８に格納される共有鍵を一時的に格納するバッファメモリであるセッション鍵バッファ１０４）への格納を禁止するよう制御する。また、例えば、機器Ｂ３は、制御部１１５により、暗号復号処理部１０２により復号されバッファメモリ（セッション鍵バッファ１０４）へ格納された新たな共有鍵の不揮発性メモリ１０８への格納を禁止するよう制御する。
このように、復号処理において、復号対象の暗号化データに対する署名検証が合格しない限り、復号処理が実施不可となるか、復号処理は実施可能だが復号結果のバッファへの書込みが実施不可となるか、復号処理も結果のバッファへの書込みも実施可能だがバッファへ書き込んだ平文の不揮発性メモリ１０８への書込みが実施不可となる。すなわち、署名検証に合格した場合のみこれらが実施可能となるハードウェア制御を具備するため、暗号文からの復号結果の平文のメモリ格納を介した利用において、選択平文攻撃や選択暗号文攻撃への耐性を持つ。
【００４４】
また、上述の通り、機器Ａ２は、転送対象のデータに対する誤り検出符号又は誤り訂正符号を生成する誤り符号処理部２１９を有し、機器Ｂ３は、機器Ａ２から転送されたデータに対する誤り検出符号又は誤り訂正符号を用いて誤りを検出する誤り符号処理部２１９を有する。このため、データ誤りが発生しても適切に対応することができる。
【００４５】
＜実施の形態２＞
次に実施の形態２について説明する。実施の形態２では、交代バッファを備える点で、実施の形態１と異なる。図４は、実施の形態２にかかるＨＳＭ１０の構成の一例を示すブロック図である。以下、図４を用いて、交代バッファに格納したセッション鍵を用いて更新鍵を生成する、暗号復号処理や署名発行検証処理、及び鍵格納を行うハードウェア構成を説明する。図４に示すように、実施の形態２のＨＳＭ１０は、疑似乱数生成処理部２０１と、暗号復号処理部２０２と、署名発行検証処理部２０３と、セッション鍵バッファ２０４、２０５と、登録鍵バッファ２０６と、発行署名バッファ２０７と、誤り符号処理部２１９と、不揮発性メモリ２０８と、制御部２０９、２１０、２１１、２１８と、セレクタ２１２、２１３、２１４、２１５、２１６、２１７とを有する。
【００４６】
疑似乱数生成処理部２０１は、疑似乱数を生成する。疑似乱数生成処理部２０１が生成する疑似乱数は、セッション鍵、ブロック暗号で用いるIV(初期ベクトル)、署名発行処理などで用いられる。また、疑似乱数生成処理部２０１は、データ0として入力されるデータの入力を受け、生成した疑似乱数との連接を行い、連接結果を誤り符号処理部２１９へ渡す。誤り符号処理部２１９において、例えばCRC値といった誤り符号が付加される。なお、データ入力がない場合は、疑似乱数生成処理部２０１は、生成した疑似乱数を誤り符号処理部２１９へ渡す。これにより、生成した疑似乱数に対し、誤り符号処理部２１９において、誤り符号が付加される。誤り符号処理部２１９は、ＣＲＣ又はＥＣＣなどの誤り符号の生成処理、及び誤り符号に基づく誤りの検出処理を行う。誤り符号処理部１１４による処理結果は、セッション鍵バッファ２０４またはセッション鍵バッファ２０５に格納可能である。どちらに格納するかは、制御部２０９の制御により選択される。
【００４７】
暗号復号処理部２０２は、登録鍵バッファ２０６、セッション鍵バッファ２０４、若しくはセッション鍵バッファ２０５に登録された鍵、または発行署名バッファ２０７を用いて、入力データまたは前記鍵を対象とした暗号復号処理を実施する。暗号復号の対象となるのは、データ１として入力されるデータであり、セッション鍵バッファ２０４またはセッション鍵バッファ２０５に格納された鍵値は暗号化処理の対象となる。何れを入力データとするかは、セレクタ２１７で制御される。ここで、バッファに格納されたどの鍵を用いるかは、セレクタ２１５を用いて選択されるものとする。また、バッファ格納値を入力とした復号処理による復号結果の外部等への出力は不可とする。
【００４８】
署名発行検証処理部２０３は、登録鍵バッファ２０６、セッション鍵バッファ２０４、若しくはセッション鍵バッファ２０５に登録された鍵、または発行署名バッファ２０７を用いて、入力データまたは前記鍵を対象とした署名発行検証処理を実施する。また、署名発行検証処理部２０３は、発行した署名を発行署名バッファ２０７に格納する。何れを入力データとするかは、セレクタ２１６で制御される。ここで、署名発行検証で用いる鍵として、何れの鍵を用いるかは、セレクタ２１４を用いて選択されるものとする。
【００４９】
セッション鍵バッファ２０４及びセッション鍵バッファ２０５は、いずれもセッション鍵の交代バッファである。すなわち、セッション鍵バッファ２０４及びセッション鍵バッファ２０５は、それぞれ複数の面を備えている。具体的には、セッション鍵バッファ２０４は、第１の面（以下、符号２０４−１で表すこととする）と第２の面（以下、符号２０４−２で表すこととする）とを備えている。同様に、セッション鍵バッファ２０５は、第１の面（以下、符号２０５−１で表すこととする）と第２の面（以下、符号２０５−２で表すこととする）とを備えている。セッション鍵バッファ２０４及びセッション鍵バッファ２０５は、疑似乱数生成処理部２０１の出力値、または暗号復号処理部２０２の復号結果の出力値の何れかを格納するバッファメモリである。この選択は、セレクタ２１２及びセレクタ２１３で実施される。セッション鍵バッファ２０４やセッション鍵バッファ２０５からのデータ読み出しは、暗号復号処理部２０２又は署名発行検証処理部２０３による読み出しか、不揮発性メモリ２０８へのデータ格納転送のみでの実施が可能である。鍵を利用目的別に明確に区別する事を目的に、読み出しは、署名発行検証処理部２０３の鍵としての利用と、不揮発性メモリ２０８へのデータ格納転送のみに制限しても良い。
【００５０】
また、ＨＳＭ１０は、下記の制御を行う制御部２０９、制御部２１０、制御部２１８のうち少なくともいずれか一つを有する。
【００５１】
制御部２０９は、セッション鍵バッファ２０４、２０５への格納を制御する。制御部２０９を具備した構成の場合、暗号復号処理部２０２の復号結果値のセッション鍵バッファ２０４、２０５への格納は、それに先立ち署名発行検証処理部２０３で行われる署名検証に合格した場合のみ許可されるよう制御部２０９により制御される。すなわち、署名検証に失敗した場合、セッション鍵バッファ２０４、２０５への書き込みは、制御部２０９により禁止される。
【００５２】
制御部２１０は、暗号復号処理部２０２による復号処理の実施を制御する。制御部２１０を具備した構成の場合、署名発行検証処理部２０３での署名検証に合格した場合のみ、暗号復号処理部２０２への復号対象データの入力が成されるよう制御部２１０により制御される。すなわち、署名検証に失敗した場合、暗号復号処理部１０２による復号処理が禁止される。
【００５３】
制御部２１８は、不揮発性メモリ２０８への格納を制御する。制御部２１８を具備した構成の場合、署名発行検証処理部２０３での署名検証に合格した場合のみ、セッション鍵バッファ２０４、２０５の格納値の不揮発性メモリへの格納（鍵登録）が成されるよう制御部２１８により制御される。すなわち、署名検証に失敗した場合、セッション鍵バッファ２０４、２０５の格納値の不揮発性メモリ２０８への書き込みが禁止される。
【００５４】
特に、例えば、登録鍵バッファ２０６やセッション鍵バッファ２０４、２０５に格納された鍵は全て署名発行検証のみに用いるものとし、生成した署名を発行署名バッファ２０７に格納し、これを暗号復号鍵として運用することにより、暗号復号で用いる鍵と署名発行検証で用いる鍵を互いに素とし、どちらか一方にしか用いる事が出来ないものとしてもよい。また、交代バッファをさらにもう一つ設け、署名発行検証処理部２０３の出力を格納し、これを暗号復号鍵として運用することにより、登録鍵バッファ２０６やセッション鍵バッファ２０４、２０５の格納鍵は全て署名発行検証のみに用いるようにしても良い。この制御と制御部２０９、２１０又は２１８による鍵格納制御とにより、暗号データの復号では、それに先立ち行われる前記暗号データに対する署名検証が合格した場合に復号結果の不揮発性メモリ２０８への鍵登録が実施される。このため、データの安全性と整合性が保証される。
【００５５】
制御部２１１は、セレクタ２１４、２１５の動作を制御する。
発行署名バッファ２０７は、署名発行検証処理部２０３が発行した署名を格納するバッファメモリである。本バッファからのデータ読み出しは、暗号復号処理部２０２と署名発行検証処理部２０３からのみ可能である。鍵を利用目的別に明確に区別する事を目的に、発行署名バッファ２０７からの読み出しは、暗号復号処理部２０２の暗号復号鍵としてのみに制限しても良い。
【００５６】
不揮発性メモリ２０８は、鍵登録可能な不揮発性メモリであり、セッション鍵バッファ２０４、２０５、登録鍵バッファ２０６、発行署名バッファ２０７とのデータ送受信のみが可能である。例えば、登録鍵バッファ２０６への鍵登録は、セッション鍵バッファ２０４、２０５から不揮発性メモリ２０８へ鍵データ書込みを実施し、それを登録鍵バッファ２０６へ読み出す事で実施する。
【００５７】
登録鍵バッファ２０６は、不揮発性メモリ２０８からのみ設定可能なバッファメモリである。登録鍵バッファ２０６は鍵を複数登録可能なようアドレスを具備していても良い。アドレスがある場合は、アドレス指定を伴う、本バッファからのデータ読み出しは、暗号復号処理部２０２と署名発行検証処理部２０３からの読み出しか、不揮発性メモリ２０８へのデータ格納転送のみでの実施が可能である。 鍵を利用目的別に明確に区別する事を目的に、登録鍵バッファ２０６からの読み出しは、署名発行検証処理部２０３の鍵としてのみ利用と、不揮発性メモリ２０８へのデータ格納転送のみに制限しても良い。
【００５８】
上記構成において、制御部２０９、２１０、２１１、２１８への制御信号、セレクタ２１２、２１３、２１４、２１５、２１６、２１７への制御信号、セッション鍵バッファ２０４、２０５と登録鍵バッファ２０６からの不揮発性メモリ２０８への鍵登録や退避制御に対する制御信号、及び不揮発性メモリ２０８からの登録鍵バッファ２０６への鍵読出し制御に対する制御信号を含む制御信号群が与えられる。この制御信号群は、コマンドを受け付けるレジスタを備えた専用制御ハードウェアの出力として構成されていても良いし、プログラムでの実行制御が可能なプロセッシングユニットからの出力として構成されていても良い。前者の構成の場合、プログラム実行可能なコントローラが付随するものとする。また、いずれの構成の場合も、出力結果を格納するメモリが付随するものとし、プログラムでの実行制御が可能なプロセッシングユニットやプログラム実行可能なコントローラは、当該メモリへの読み書きが可能であるとする。このため、ＨＳＭ１０を介して当該メモリに格納された転送データを非セキュア部１１が利用可能となる。また、バッファ内での、鍵値の不揮発性メモリ２０８へのバックアップコピーを伴う鍵値の更新は適宜実施可能とする。特に、鍵値の更新は、不揮発性メモリ２０８への登録後の鍵値を対象に実施する事が望ましい。これは、電源遮断により鍵値が消失することを防ぐためである。
【００５９】
次に、実施の形態２にかかる動作について説明する。機器Ａ２から機器Ｂ３に対し、Ｎ回（Ｎは２以上の整数）連続して転送を行う場合、図３に示したシーケンスが繰り返されることとなる。図３に示したシーケンスの繰返し動作では、各転送の際、鍵生成と鍵暗号化、その署名生成を順次実施する事となる。図４に示したセッション鍵交代バッファ構成を用いる事で、この繰り返し動作での鍵生成・暗号化・署名発行を、暗号復号処理部２０２、署名発行検証処理部２０３、不揮発性メモリ２０８以外からのアクセスが物理的に存在しない堅牢な構成で、高速に実施出来る。これを図５Ａ及び図５Ｂのシーケンス図で示す。即ち、図５Ａ及び図５Ｂを用いて、改竄耐性と秘匿性を持つ機能安全考慮の機器間鍵・メッセージ送受信プロトコルの動作を以下に示す。メッセージを伴わない場合、機器Ａ２が生成した共通対象鍵を機器Ｂ３に設定する、共通対称鍵設定プロトコルとなる。
【００６０】
本実施形態では、暗号復号処理と署名発行検証処理を分離して実施する構成でのシーケンスを示すため、セッション鍵交代バッファは暗号復号処理鍵と署名発行検証鍵の合計2組が具備されているものとする。すなわち、セッション鍵バッファ２０４が、暗号復号用鍵格納のためのバッファであり、第１の面（２０４−１として下記説明で参照する）と第２の面（２０４−２として下記説明で参照する）とを有する。また、セッション鍵バッファ２０５が、署名発行検証用鍵格納のためのバッファであり、第１の面（２０５−１として下記説明で参照する）と第２の面（２０５−２として下記説明で参照する）とを有する。
【００６１】
暗号復号処理と署名発行検証処理を分離せず、代わりに認証付き暗号方式を用いる場合は、セッション鍵交代バッファは１つ具備すれば良い。また、暗号復号処理を認証付き暗号方式での暗号復号処理とし、署名発行検証処理が前記認証付き暗号方式での暗号復号処理で実施されるとすれば、認証付き暗号方式を用いた場合の構成が得られる。即ち、認証付き暗号方式でのメッセージ受送信を本開示内容は含む。
【００６２】
尚、機器Ａ２と機器Ｂ３に対する共通対称鍵の初期設定として、実施の形態１の説明で述べた初期設定と同様の設定が事前になされているものとする。
【００６３】
なお、以下に示されるシーケンスは、機器Ａ２から機器Ｂ３に対し、Ｎ回（Ｎは２以上の整数）連続して転送を行う場合のシーケンスである。また、各転送は、共有鍵の更新を伴って行われる。また、以下に示されるシーケンスでは、適宜説明が省略されているが、実施の形態１における制御部１０６、１０７、１１５と同様、制御部２０９、２１０、２１８による制御が行われる。
【００６４】
＜(1)転送回数の通知を伴う相互認証＞（図５Ａ参照）
(1-1) 機器認証情報の機器Ａ２での構築:
機器Ａ２は下記を実施する（Ｓ２００）。
1. 現在の時刻をtss ← TimeStamp として選ぶ。
2. 疑似乱数生成処理部２０１にて、乱数を生成し、IV ← {0,1}^k、isk ← {0,1}^k、 sk(0) ← {0,1}^k とする。ここで、IVはブロック暗号で用いる初期ベクトルである。また、iskは、署名発行用の鍵である。sk(0)は、機器Ｂ３と共有すべき新たな事前共有鍵である。
3. r1 := PRF(ski,IDi||tss||IV||N||1)を署名発行検証処理部２０３で算出し結果出力する一方、r1’ := PRF(ski,IDi||tss||IV||N||2)を署名発行検証処理部２０３で算出する。r1は、署名として用いられることとなり、r1’は、暗号復号処理用の鍵として用いられることとなる。
4. r1‘をセッション鍵バッファKeyBuf1(204-1)へ、iskをセッション鍵バッファKeyBuf2(205-1)へ格納する。
5. 疑似乱数生成処理部２０１で処理を継続し、iskとsk(0)を連接する。また、誤り符号処理部２１９でCRCまたはECCを算出し、例えばCRCを算出したとして、d_crc:=CRC(isk||sk(0)) とし、セッション鍵バッファ204-2に格納する。sk(0)を別途セッション鍵バッファ205-2に格納する。
6. セッション鍵バッファKeyBuf1(204-1)から鍵を読出し、c1 := Enc(r1’,IV, isk||sk(0))||d_crc)を暗号復号処理部２０２にて算出し結果出力する一方、 c1’ := PRF(ski,c1)を署名発行検証処理部２０３で実施する。c1は、新たな鍵を含むデータの暗号データであり、c1’は、その署名である。
7. 不揮発性メモリ２０８に登録済みの事前共有鍵skiの更新に備え、バッファ内で、sk_old：＝ski、ski：＝sk(0)を実施する。ここで、sk_old登録とski更新を不揮発性メモリ２０８で実施しても良い。
8. 上記で得られた算出結果をまとめて、Data1:= (IDi,tss,IV,r1,c1,c1’,N)とし、機器Ｂ３に(1, Data1)を送付する。
【００６５】
(1-2) 機器Ｂ３でのデータ復号とデータ格納:
機器Ｂ３は、以下を実施する（Ｓ２０１）。
1. 乱数 rc ← {0,1}^(k-3) を疑似乱数生成処理部２０１で生成し、乱数出力を実施する。
2. tss,IDi,IV,r1,c1,c1’ ∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが自身のものと一致するかを確かめる。満たしていない場合は、result1 ：＝ 000とし、下記ステップ7へ処理を移行する。もし満たしている場合は、以下の操作を実行する。
3. r1 = PRF(ski, IDi tss||IV||N||1)が満たされるか否かを、署名発行検証処理部２０３で検証する。もし満たさない場合、 result1 := 110 とする。もし満たしていた場合は、Nを送信回数として識別し、以下の処理を実施する。
4. c1’ = PRF(ski,c1)が満たされるか否かを、署名発行検証処理部２０３で検証する。もし、満たさない場合は、result1 := 100 とする。もし満たしていた場合は、復号処理が可能となるため、署名発行検証処理部２０３で、r1’ := PRF(ski, IDi|| tss||IV||N||2) を算出し、発行署名バッファ２０７に算出値を格納後、バッファ内で、セッション鍵バッファKeyBuf1(204-1)へ格納する。これを暗号復号処理部２０２の鍵として用いて、isk||sk(0)||d_crc := Dec(r1’,IV, c1)を実施し、下記ステップ5.以降を実行する。ここで、Decは、共通鍵ブロック暗号での復号あり、例えばAES-CBCでの復号である。
5. 復号して得られたisk||sk(0)のCRCを誤り符号処理部２１９でCRC(isk||sk(0))として算出し、d_crcと一致するか検証する。一致しない場合、 result1 := 010 とする。もし満たしていた場合は、以下の操作を実行する。
6. iskをセッション鍵格納バッファKeyBuf2(205-1)に書込み、sk(0)を別途セッション鍵バッファ205-2に格納する。不揮発性メモリ２０８に登録済みの事前共有鍵skiの更新に備え、バッファ内で、sk_old：＝ski、ski：＝sk(0)を実施する。バックグラウンド処理で、iskとsk_oldの鍵登録とski更新を不揮発性メモリ２０８で実施する。このとき、上記ステップ4で署名検証に成功しているため、不揮発性メモリ２０８への書込みが可能である。この書込みでは、各機器固有の秘密鍵sk0を用いて、Enc.ECB(sk0,isk)といった暗号化結果の書込みとしても良い。また、result1 := 001とする。
7. rc:=rc||result1、 r2 := PRF(ski,IDi||tss||IV||rc||3)を署名発行検証処理部２０３で算出する。ここで、r2は、機器Ｂ３から機器Ａ２に送信するデータについての署名である。
8. 上記で得られた算出結果をまとめて、Data2:= (IDi,tss,IV,r2,rc)とし、機器Ａ２に(2, Data2)を送付する。
【００６６】
(1-3) 機器Ａ２での認証結果の検証:
機器Ａ２は、以下を実施する（Ｓ２０２）。
機器Ａ２は(2,Data2 = (IDi,tss,IV,r2,rc)) を受け取ると、 IDi,tss,IV,r2,rc∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているか、またIDiが機器Ｂ３のIDとして登録されたIDかを検証し、満たしていなければresult2 := 000 とする。もし満たしていれば、 r2 = PRF(ski,IDi||tss||IV||rc||3)であるかを機器Ａ２搭載の署名発行検証処理部２０３で検証する。もし正しければresult2 := rcの下位3bit とし、そうでなければresult2 := 111 とする。そしてresult2 を認証結果として出力し、これを記録する。ここで、result2が001なら、バッファ内で実施した事前共有鍵の鍵更新を不揮発性メモリ２０８へバックグラウンド処理で反映させる。既に反映済みなら、この処理は不要である。また、繰返し処理のインデックス変数jを1に設定する。一方で、result2が001でない場合は、鍵更新をキャンセルし、バッファ内で、ski：＝sk_oldを実施する。既に不揮発性メモリ２０８へ更新反映済みなら、更新を不揮発性メモリ２０８においてキャンセルする。また、このとき機器Ａ２は処理を中断するとともに、機器Ｂ３に処理中断を通知する。この中断通知は、更新前のskiを用いた相互認証で実施するものとする。特に、本中断通知での相互認証では、機器Ｂ３でskiとsk_oldを用いた署名検証を実施し、事前共有鍵の識別を実施する。sk_oldが事前共有鍵として識別された場合、キャンセル処理として、 ski：＝sk_oldを実施し、機器Ｂ３の不揮発性メモリ２０８に反映するものとする。機器Ｂ３では、識別した事前共有鍵を用いて署名を発行し機器Ａ２へ通知する。機器Ａ２で更新前のskiを用いた署名検証を実施し、これに合格すると、機器Ａ２と機器Ｂ３での事前共有鍵の識別が完了する。事前共有鍵の識別に成功すると、本プロトコルを再度最初から実行可能となる。中断処理の完了をもって、本プロトコルの実行が中断される。
さて、機器Ａ２でresult2が001なら、鍵iskとsk(0)が中間者に改竄される事も漏洩する事もなく、また欠損する事もなく、さらに、iskとsk(0)を機器Ｂ３の鍵格納領域に格納成功したとして処理が記録される。また、result2が010なら書込みでの値欠損による書込み失敗、result2が100ならデータ復号前の署名検証処理で失敗、result2が110なら受信エラー(メッセージ改竄の可能性)、として記録される。
【００６７】
本プロトコルではIV、c1、c1’、r1の何れかが改竄されると、機器Ａ２により発行される署名の機器Ｂ３での検証が失敗するためフェールセーフである。また、機器Ｂ３で署名r2が発行されることにより、攻撃者がrcの値改竄で機器Ａ２で検証合格とする事はできない。 IV、c1、c1’、r1、rcの全てまたは何れかが改竄された場合、何らかの改竄があった事を検知可能である。
【００６８】
上記(1)のシーケンスが終了後、Ｎ回の転送が下記のようにして行われる。
＜(2)相互認証を伴う更新鍵とメッセージの複数回の転送＞（図５Ｂ参照）
(2-1) 機器認証情報の機器Ａ２での構築:
機器Ａ２は下記を実施する（Ｓ３００）。
1. 現在の時刻をtss(j) ← TimeStamp として選ぶ。
2.疑似乱数生成処理部２０１にて、乱数を生成し、IV ← {0,1}^k、K(j,1) ← {0,1}^k、 K(j,2) ← {0,1}^k、 sk(j) ← {0,1}^k とする。K(j,1)をセッション鍵バッファ204-2へ、K(j,2)をバッファ205-2へ格納する。ここで、K(j,1)は、次回の転送の際に暗号復号処理で用いられる新たな鍵である。また、K(j,2)は、次回の転送の際に署名発行検証処理で用いられる新たな鍵である。また、sk(j)は、新たな事前共有鍵である。
3. 疑似乱数生成処理部２０１で処理を継続し、 K(j,1)、K(j,2)、sk(j)と、もしあれば送信メッセージmsg(j)を連接する。また、誤り符号処理部２１９でCRCまたはECCを算出し、例えばCRCを算出したとして、d_crc:=CRC(K(j,1)||K(j,2)||sk(j)||msg(j))とし、バッファに格納する。sk(j)を別途バッファに格納する。
4. セッション鍵バッファKeyBuf1(204-1)から鍵値を読出し、C(j) := Enc(KeyBuf1, K(j,1)||K(j,2)||sk(j)||msg(j)||d_crc)を暗号復号処理部２０２で算出し結果出力する一方、セッション鍵バッファKeyBuf2(205-1)から鍵値を読出し、 D(j) := PRF(KeyBuf2,IDi||tss(j)||IV||C(j)||j+3)を署名発行検証処理部２０３で算出し結果出力する。
5. 2つのセッション鍵交代バッファをフリップする。即ち、バッファ204-2をKeyBuf1(204-1)に入れ替え、バッファ204-1をバッファ204-2に入れ替える。同様に、バッファ205-2をKeyBuf2(205-1)に入れ替え、バッファ205-1を205-2に入れ替える。
6. 不揮発性メモリ２０８に登録済みの事前共有鍵skiの更新に備え、バッファ内で、sk_old：＝ski、ski：＝sk(j)を実施する。ここで、sk_old登録とski更新を不揮発性メモリ２０８で実施しても良い。
7. 上記で得られた算出結果をまとめて、Data(j+1):= (IDi,tss(j),IV,C(j),D(j))とし、機器Ｂ３に(j+1, Data(j+1))を送付する。
【００６９】
(2-2) 機器Ｂ３でのデータ復号とデータ格納:
機器Ｂ３は、以下を実施する（Ｓ３０１）。
1. 乱数 rc ← {0,1}^(k-3) を疑似乱数生成処理部２０１で生成し、乱数出力を実施する。
2. tss(j),IDi,IV,C(j),D(j)∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが自身のものと一致するかを確かめる。満たしていない場合は、result1 ：＝ 000とし、下記ステップ7へ処理を移行する。もし満たしている場合は、以下の操作を実行する。
3. セッション鍵バッファKeyBuf2(205-1)から鍵値を読出し、 D(j) = PRF(KeyBuf2,IDi||tss(j)||IV||N||j+3)が満たされるか否かを、署名発行検証処理部２０３で検証する。もし満たさない場合、 result1 := 110 とする。もし満たしていた場合は、以下の処理を実施する。
4. セッション鍵バッファKeyBuf1(204-1)から鍵値を読出し、K(j,1)||K(j,2)||sk(j)||msg(j)||d_crc := Dec(KeyBuf1,IV, C(j))を暗号復号処理部２０２で実施し、下記ステップ5.以降を実行する。
5. 復号して得られたK(j,1)||K(j,2)||sk(j)||msg(j)のCRCを誤り符号処理部２１９でCRC(K(j,1)||K(j,2)||sk(j)||msg(j))として算出し、d_crcと一致するか検証する。一致しない場合、 result1 := 010 とする。もし満たしていた場合は、以下の操作を実行する。
6. 復号結果として得られたK(j,1)をセッション鍵バッファ204-2へ、K(j,2)をバッファ205-2へ格納する。2つのセッション鍵交代バッファをフリップする。即ち、バッファ204-2をKeyBuf1(204-1)に入れ替え、バッファ204-1をバッファ204-2に入れ替える。同様に、 バッファ205-2をKeyBuf2(205-1)に入れ替え、バッファ205-1をバッファ205-2に入れ替える。不揮発性メモリ２０８に登録済みの事前共有鍵skiの更新に備え、バッファ内で、sk_old：＝ski、ski：＝sk(j)を実施する。ここで、sk_old登録とski更新を不揮発性メモリ２０８で実施する。また、result1 := 001とする。
7. rc:=rc||result1、 r2 := PRF(ski,IDi||tss(j)||rc||j)を署名発行検証処理部２０３で算出する。
8. 上記で得られた算出結果をまとめて、Data(j+1):= (IDi,tss(j),r2,rc)とし、機器Ａ２に(j+1, Data(j+1))を送付する。また、j=Nが満たされると機器Ｂ３は処理を終了する。満たされない場合は、機器Ａ２からのデータ受信待ちとなり、繰返し処理を継続する。但し、機器Ａ２からの処理中断通知を受信した場合は、下記の(2-3)で述べる中断処理を実施するものとする。
【００７０】
(2-3) 機器Ａ２での認証結果の検証:
機器Ａ２は、以下を実施する（Ｓ３０２）。
機器Ａ２は(j+1,Data(j+1) = (IDi,tss(j),r2,rc)) を受け取ると、 IDi,tss(j), r2,rc∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているか、またIDiが機器Ｂ３のIDとして登録されたIDかを検証し、満たしていなければresult2 := 000 とする。もし満たしていれば、セッション鍵バッファKeyBuf2(205-1)から鍵値を読出し、r2 = PRF(ski,IDi||tss(j)||rc||j)であるかを機器Ａ２搭載の署名発行検証処理部２０３で検証する。もし正しければresult2 := rcの下位3bit とし、そうでなければresult2 := 111 とする。そしてresult2を認証結果として出力し、これを記録する。ここで、result2が001なら、バッファ内で実施した事前共有鍵の鍵更新を不揮発性メモリ２０８へバックグラウンド処理で反映させる。既に反映済みなら、この処理は不要である。また、繰返し処理のインデックス変数jをインクリメントする。ｊ＞Nが成立するか確認し、成立した場合は、N回転送完了となり機器Ａ２は処理を終了する。成立しない場合、繰返し処理を継続する。一方で、result2が001でない場合は、鍵更新をキャンセルし、バッファ内で、ski：＝sk_oldを実施する。既に不揮発性メモリ２０８へ更新反映済みなら、更新を不揮発性メモリ２０８においてキャンセルする。また、このとき機器Ａ２は処理を中断するとともに、機器Ｂ３に処理中断を通知する。この中断通知は、更新前のskiを用いた相互認証で実施するものとする。特に、本中断通知での相互認証では、機器Ｂ３でskiとsk_oldを用いた署名検証を実施し、事前共有鍵の識別を実施する。sk_oldが事前共有鍵として識別された場合、キャンセル処理として、ski：＝sk_oldを実施し、機器Ｂ３の不揮発性メモリ２０８に反映するものとする。機器Ｂ３では、識別した事前共有鍵を用いて署名を発行し機器Ａ２へ通知する。機器Ａ２で更新前のskiを用いた署名検証を実施し、これに合格すると、機器Ａ２と機器Ｂ３での事前共有鍵の識別が完了する。事前共有鍵の識別に成功すると、本プロトコルを再度最初から実行可能となる。中断処理の完了をもって、本プロトコルの実行が中断される。
さて、機器Ａ２でresult2が001なら、鍵K(j,1)、K(j,2)とsk(j)が中間者に改竄される事も漏洩する事もなく、また欠損する事もなく、さらに、K(j,1)、K(j,2)とsk(j)を機器Ｂ３の鍵格納領域に格納成功したとして処理が記録される。また、result2が010なら書込みでの値欠損による書込み失敗、result2が100ならデータ復号前の署名検証処理で失敗、 result2が110なら受信エラー(メッセージ改竄の可能性)、として記録される。
【００７１】
本プロトコルではIV,C(j),D(j)の何れかが改竄されると、機器Ａ２により発行される署名の機器Ｂ３での検証が失敗するためフェールセーフである。また、機器Ｂ３で署名r2が発行されることにより、攻撃者がrcの値改竄で機器Ａ２で検証合格とする事はできない。IV,C(j),D(j)の全てまたは何れかが改竄された場合、何らかの改竄があった事を検知可能である。
【００７２】
以上説明した実施の形態２にかかるデータ転送システム１では、機器Ａ２及び機器Ｂ３は、共有鍵を一時的に格納するバッファメモリ（セッション鍵バッファ２０４、２０５）を有する。このバッファメモリは、それぞれ第１の面（２０４−１、２０５−１）と第２の面（２０４−２、２０５−２）を備える。また、一方の面に、今回の転送に対して利用される共有鍵が格納され、他方の面に、次回の転送に対して利用される新たな共有鍵が格納される。このような構成によれば、Ｎ回の転送が行われる場合に処理を高速に実施することができる。なぜならば、転送のたびに交代バッファの切替えることで、不揮発性メモリ２０８への鍵の格納及び読み出しを省略することができるためである。なお、電源遮断に対応するべく、不揮発性メモリ２０８への鍵の格納が行われてもよいことは言うまでもない。
【００７３】
＜実施の形態２の変形例＞
図５Ａ、図５Ｂに示したシーケンスでは、図５ＢのＳ３０２で示されるように、転送の度にハンドシェイクが行われる。つまり、図５Ａ、図５Ｂに示したシーケンスでは、機器Ａ２と機器Ｂ３が常にハンドシェイクして複数回の鍵更新を実施しており、効率的であるとは言い難い。機器Ｂ３が機器Ａ２からの更新鍵を正しく受信できた回数の次の更新から再実行することでより効率的となる。図５Ａ、図５Ｂに示したシーケンスに対してそのような効率化を行ったシーケンスを図６Ａ、図６Ｂに示す。なお、本変形例でも、転送回数の通知を伴う相互認証は、図５Ａで示したシーケンスが実施される。このため、実施の形態２の変形例にかかるシーケンスは、図５Ａ、図６Ａ、及び図６Ｂからなる。
【００７４】
本変形例にかかるシーケンスは、ハンドシェイクせずに機器Ａ２から機器Ｂ３への鍵更新を実施するとともにその繰返し動作を可能としたシーケンスであり、さらに、本変形例にかかるシーケンスでは、指定転送回数分の鍵更新実施後（すなわちＮ回の鍵更新実施後）、実際に機器Ｂ３が正しく受信できた更新までを識別し、何らかの問題で受信できなかったところから再実行する。
以下、上述した実施の形態２と同様な説明については適宜省略しつつ、説明を行う。
【００７５】
＜(1)転送回数の通知を伴う相互認証＞
図５Ａで示した動作と同じ動作が行われるため、図示及びその説明は省略する。
【００７６】
上記(1)のシーケンスが終了後、Ｎ回の転送が下記のようにして行われる。
＜(2)更新鍵とメッセージの複数回の転送＞（図６Ａ参照）
(2-1) 機器認証情報の機器Ａ２での構築:
機器Ａ２ は下記を実施する（Ｓ４００）。
1. 現在の時刻をtss(j) ← TimeStamp として選ぶ。
2. 疑似乱数生成処理部２０１にて、乱数を生成し、IV ← {0,1}^k、K(j,1) ← {0,1}^k、 K(j,2) ← {0,1}^k とする。 K(j,1)をセッション鍵バッファ204-2へ、K(j,2)をバッファ205-2へ格納する。ここで、K(j,1)は、次回の転送の際に暗号復号処理で用いられる新たな鍵である。また、K(j,2)は、次回の転送の際に署名発行検証処理で用いられる新たな鍵である。
3.疑似乱数生成処理部２０１で処理を継続し、K(j,1)、K(j,2)と、もしあれば送信メッセージmsg(j)を連接する。また、誤り符号処理部２１９でCRCまたはECCを算出し、例えばCRCを算出したとして、d_crc:=CRC(K(j,1)||K(j,2)||msg(j))とし、バッファに格納する。
4. セッション鍵バッファKeyBuf1(204-1)から鍵値を読出し、C(j) := Enc(KeyBuf1, K(j,1)||K(j,2)||msg(j)||d_crc)を暗号復号処理部２０２で算出し結果出力する一方、セッション鍵バッファKeyBuf2(205-1)から鍵値を読出し、 D(j) := PRF(KeyBuf2,IDi||tss(j)||IV||C(j)||j+3)を署名発行検証処理部２０３で算出し結果出力する。
5. 2つのセッション鍵交代バッファをフリップする。即ち、バッファ204-2をKeyBuf1(204-1)に入れ替え、バッファ204-1をバッファ204-2に入れ替える。同様に、バッファ205-2をKeyBuf2(205-1)に入れ替え、バッファ205-1をバッファ205-2に入れ替える。
6. 上記で得られた算出結果をまとめて、Data(j+1):= (IDi,tss(j),IV,C(j),D(j))とし、機器Ｂ３に(j+1, Data(j+1))を送付し、j:=j+1を実行する。また、j＞Nが満たされると機器Ａ２は繰返し処理を終了する。満たされない場合は、繰返し処理を継続する。すなわち、図５ＢのＳ３０２のようなハンドシェイクを行わずに、繰り返し処理が実行される。
このように、機器Ａ２は、Ｎ回（Ｎは２以上の整数）連続して機器Ｂ３への転送を行う場合、ｊ−１番目の転送（ｊは２以上Ｎ以下の整数）において、ｊ番目の転送に対して利用されるｊ番目の署名用共有鍵及び暗号用共有鍵を含む転送データを、ｊ−１番目の署名用共有鍵及び暗号用共有鍵を用いて処理を実施し転送する。なお、ここで、署名用共有鍵は、署名の発行又は検証処理に利用される鍵（署名発行検証処理部２０３が用いる鍵）であり、暗号用共有鍵は、暗号化処理又は復号処理に利用される鍵（暗号復号処理部２０２が用いる鍵）である。
【００７７】
(2-2) 機器Ｂ３でのデータ復号とデータ格納:
機器Ｂ３は、以下を実施する（Ｓ４０１）。
1. 変数として、空集合 rc を構成する。
2. tss(j),IDi,IV,C(j),D(j)∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが自身のものと一致するかを確かめる。満たしていない場合、 result(j) ：＝ 000とし、処理を下記ステップ7へ移行する。もし満たしている場合は、以下の操作を実行する。
3. セッション鍵バッファKeyBuf2(205-1)から鍵値を読出し、 D(j) = PRF(KeyBuf2,IDi||tss(j)||IV||C(j)||j+3)が満たされるか否かを、署名発行検証処理部２０３で検証する。もし満たさない場合、 result(j) := 110 とする。もし満たしていた場合は、以下の処理を実施する。
4. セッション鍵バッファKeyBuf1(204-1)から鍵値を読出し、K(j,1)||K(j,2)||msg(j)||d_crc := Dec(KeyBuf1,IV, C(j))を暗号復号処理部２０２で実施し、下記ステップ5.以降を実行する。
5. 復号して得られたK(j,1)||K(j,2)||msg(j)のCRCを誤り符号処理部２１９でCRC(K(j,1)||K(j,2)||msg(j))として算出し、d_crcと一致するか検証する。一致しない場合、 result(j) := 010 とする。もし満たしていた場合は、以下の操作を実行する。
6. 復号結果として得られたK(j,1)をセッション鍵バッファ204-2へ、K(j,2)をバッファ205-2へ格納する。2つのセッション鍵交代バッファをフリップする。即ち、バッファ204-2をKeyBuf1(204-1)に入れ替え、バッファ204-1を204-2に入れ替える。同様に、バッファ205-2をKeyBuf2(205-1)に、バッファ205-1をバッファ205-2に入れ替える。また、result(j) := 001とする。
7. rc:=rc|| result(j)とし、集合rcへresult(j)を追加する。また、j=Nが満たされると機器Ｂ３は繰返し処理を終了する。満たされない場合は、機器Ａ２からのデータ受信待ちとなり、繰返し処理を継続する。
【００７８】
機器Ｂ３において、タイムアウトが発生すると、又は、Ｎ回の受信が完了すると、下記(3)に示されるシーケンスの動作が実施される。
＜(3)相互認証を伴う事前共有鍵の更新及び同期、並びに再実行インデックスの同定＞（図６Ｂ参照）
(3-1) 機器Ｂ３での再実行インデックスの同定と事前共有鍵の更新:
機器Ｂ３は、以下を実施する（Ｓ５００）。
1. 現在の時刻をtss(N) ← TimeStamp として選び、疑似乱数生成処理部２０１にて、乱数を生成し、IV ← {0,1}^k とする。
2. result(k)&0x001∧…∧ result(1)&0x001 が真(値としては、1)となる最大のkをretry_indexに代入する。すなわち、retry_indexは、１番目の転送データの転送からカウントした転送の連続成功回数を示す。換言すると、retry_indexは、１番目の転送データの転送からカウントした、鍵の同期に連続して成功した回数である。
3. 不揮発性メモリ２０８に格納済みの事前共有鍵skiを用いて、r2 := PRF(ski,IDi||tss(N)||rc||retry_index||1)を署名発行検証処理部２０３で算出し出力する一方、r2’ := PRF(ski,IDi||tss(N)||rc||retry_index ||2)を署名発行検証処理部２０３で算出し、発行署名バッファ２０７へ格納する。
4. セッション鍵バッファKeyBuf1(204-1)の値とセッション鍵バッファKeyBuf2(205-1)の値を連接し、skeyに代入する(skey ：＝ KeyBuf1||KeyBuf2)。そして、誤り符号処理部２１９でCRCまたはECCを算出し、例えばCRCを算出したとして、skey_crc:=CRC(skey) とする。
5. 発行署名バッファ２０７から鍵r2’を読出し、SyncKey := Enc(r2’,IV,skey||skey_crc)を暗号復号処理部２０２にて算出し結果出力する一方、 SyncKey’ := PRF(ski,SyncKey)を署名発行検証処理部２０３で実施する。
6. 不揮発性メモリ２０８に登録済みの事前共有鍵skiの更新として、バッファ内で、sk_old：＝ski、ski：＝ KeyBuf2を実施する。ここで、sk_oldの登録とskiの更新を不揮発性メモリ２０８で実施する。
7. 上記で得られた算出結果をまとめて、Data3:= (IDi,tss(N),IV,rc,r2,retry_index, SyncKey, SyncKey’)とし、機器Ｂ３に(j+1, Data3)を送付し処理を終了する。但し、機器Ａ２からの処理中断通知を受信した場合は、下記の(3-2)で述べる中断処理を実施するものとする。
このように、機器Ｂ３は、１番目の転送データの転送からカウントした転送の連続成功回数と、機器Ａ２と機器Ｂ３との間で予め共有されている事前共有鍵を用いて暗号復号処理部２０２によって暗号化した、機器Ｂ３が機器Ａ２から取得している最新の署名用共有鍵及び暗号用共有鍵とを含む転送データを、機器Ａ２へ転送する。
また、機器Ｂ３は、連続成功回数と署名用共有鍵及び暗号用共有鍵とを含む転送データの転送が行われる場合、署名用共有鍵（KeyBuf2の値）を新たな事前共有鍵として採用する。なお、機器Ｂ３は、暗号用共有鍵（KeyBuf1の値）を新たな事前共有鍵として採用してもよい。
【００７９】
(3-2) 機器Ａ２での再実行インデックスの検証と事前共有鍵更新の検証:
機器Ａ２は(j+1,Data3 = (IDi,tss(N),IV,rc,r2,retry_index, SyncKey, SyncKey’)) を受け取ると、以下を実施する（Ｓ５０１）。
1. IDi,tss(N),IV,rc,r2,retry_index, SyncKey, SyncKey’∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが機器Ｂ３のIDとして登録されたIDかを確かめる。満たしていない場合、 retry_index ：＝ -1とし、処理を下記ステップ3へ移行する。もし満たしている場合は、以下の操作を実行する。
2. 不揮発性メモリ２０８に格納済みの事前共有鍵skiを用いて、r2 == PRF(ski,IDi||tss(N)||rc||retry_index||1)が満たされるかを署名発行検証処理部２０３で実施する。満たしていない場合、 retry_index ：＝ -1とする。
3. retry_index ≠ -1か否かを確認する。満たさない場合、中断処理を実施する。満たす場合、以下の操作を実行する。
4. retry_index == Nか否かを確認する。満たす場合は、不揮発性メモリ２０８に登録済みの事前共有鍵skiの更新として、バッファ内で、sk_old：＝ski、ski：＝ KeyBuf2を実施する。ここで、sk_old登録とski更新を不揮発性メモリ２０８で実施する。そして処理を終了する。満たさない場合は、以下の操作を実行する。
5. SyncKey’ == PRF(ski,SyncKey)が満たされるか否かを、署名発行検証処理部２０３で検証する。もし、満たさない場合は、中断処理を実施する。もし満たしていた場合は、復号処理が可能となるため、再び署名発行検証処理部２０３で、r2’ := PRF(ski,IDi||tss(N)||rc||retry_index ||2)を算出し、発行署名バッファ２０７に算出値を格納し、これを暗号復号処理部２０２の鍵として用いて、skey||skey_crc := Dec(r2’,IV,SyncKey)を実施し、下記ステップ6.以降を実行する。
6. 復号して得られたskeyのCRCを誤り符号処理部２１９でCRC(skey)として算出し、 skey_crcと一致するか検証する。一致しない場合、中断処理を実施する。もし満たしていた場合は、以下の操作を実行する。
7. skeyから、連接された鍵2つを取得し、上位側ビット列をKeyBuf1(204-1)へ、下位側ビット列をKeyBuf2(205-1)へ格納する。また、不揮発性メモリ２０８に登録済みの事前共有鍵skiの更新として、バッファ内で、sk_old：＝ski、ski：＝ KeyBuf2を実施する。ここで、sk_old登録とski更新を不揮発性メモリ２０８で実施する。そして、上記(2)で述べた繰返し処理をj∈[retry_index+1,N]の範囲で再実行する。
このように、機器Ａ２は、事前共有鍵を用いて、機器Ｂ３から転送された転送データを復号し、復号して得られた署名用共有鍵及び暗号用共有鍵を再転送の最初の転送に用いて、連続成功回数の次の回以降の転送を再度実行する。このため、安全に転送の再実行を行うことができる。
また、機器Ａ２は、連続成功回数と署名用共有鍵及び暗号用共有鍵とを含む転送データの機器Ｂ３からの転送が行われる場合、署名用共有鍵を新たな事前共有鍵として採用する。なお、機器Ｂ３が、暗号用共有鍵を新たな事前共有鍵として採用する場合、機器Ａ２は、暗号用共有鍵を新たな事前共有鍵として採用する。このように事前共有鍵の更新が行われるため、安全性を高めることができる。
【００８０】
機器Ａ２での中断処理では、機器Ｂ３に処理中断を通知する。この中断通知は、更新前のskiを用いた相互認証で実施するものとする。特に、本中断通知での相互認証では、機器Ｂ３でskiとsk_oldを用いた署名検証を実施し、事前共有鍵の識別を実施する。sk_oldが事前共有鍵として識別された場合、キャンセル処理として、 ski：＝sk_oldを実施し、機器Ｂ３の不揮発性メモリ２０８に反映するものとする。機器Ｂ３では、識別した事前共有鍵を用いて署名を発行し機器Ａ２へ通知する。機器Ａ２で更新前のskiを用いた署名検証を実施し、これに合格すると、機器Ａ２と機器Ｂ３での事前共有鍵の識別が完了する。事前共有鍵の識別に成功すると、本プロトコルを再度最初から実行可能となる。中断処理の完了をもって、本プロトコルの実行が中断される。
さて、機器Ａ２で処理が正常完了したのであれば、鍵K(j,1)、K(j,2)とmsg(j)が中間者に改竄される事も漏洩する事もなく、また欠損する事もなく、特にK(j,1)、K(j,2)とmsg(j)を機器Ｂ３の鍵格納領域に格納成功となる。retry_index＜Nであるため繰返し処理が再実行となった場合も、retry_indexで示される回までは同様のことが言える。それ以外の場合、rcに格納された、result（j）の値で失敗要因分析が可能である。値が010なら書込みでの値欠損による書込み失敗、100ならデータ復号前の署名検証処理で失敗、110なら受信エラー(メッセージ改竄の可能性)、として処理が記録されている。
特に、retry_index＜Nであるため繰返し処理が再実行となった場合、事前共有鍵が更新されるため、繰返し前の事前共有鍵が漏えいしたとしても、その鍵は再実行の際には最早利用できず安全である。
【００８１】
本プロトコルではIV,C(j),D(j)の何れかが改竄されると、機器Ａ２により発行される署名の機器Ｂ３での検証が失敗するためフェールセーフである。また、機器Ｂ３で署名r2が発行されることにより、攻撃者がrcの値改竄で機器Ａ２で検証合格とする事はできない。IV,C(j),D(j)の全てまたは何れかが改竄された場合、何らかの改竄があった事を検知可能である。
【００８２】
以上、実施の形態２とその変形例について説明した。更新鍵の繰返し転送動作では、鍵生成と鍵暗号化、その署名生成を順次実施する事となる。上述した構成では、セッション鍵交代バッファが用いられている。このため、この繰り返し動作での鍵生成・暗号化・署名発行を、暗号復号処理部２０２、署名発行検証処理部２０３、不揮発性メモリ２０８以外からのアクセスが物理的に存在しないより堅牢な構成で、高速に実施出来る。
【００８３】
＜実施の形態３＞
次に実施の形態３について説明する。実施の形態３では、暗号学的疑似乱数が用いられる点で、実施の形態２と異なっている。
【００８４】
図７に、入力乱数、オフセット値（カウンタ値）、鍵を用いた疑似乱数生成器の構成例を示す。疑似乱数生成における設定のために、疑似乱数生成専用鍵バッファ３５０、乱数バッファ３５１、カウンタ値バッファ３５２の３つがある。それぞれへの入力は、外部入力を取り込むか否かを制御する制御信号群の指示に基づいて、セレクタ３５３、３５４、３５５により制御される。疑似乱数生成専用鍵バッファ３５０は疑似乱数の生成に用いられる鍵の設定値を格納するバッファメモリであり、乱数バッファ３５１は疑似乱数の生成に用いられる乱数の設定値を格納するバッファメモリであり、カウンタ値バッファ３５２疑似乱数の生成に用いられるカウンタ値の設定値を格納するバッファメモリである。
【００８５】
疑似乱数生成専用鍵バッファ３５０、乱数バッファ３５１への値設定は、一つ以上のセッション更新鍵配送の最初において、機器間相互認証を伴うプロトコルにて設定される。また、送受信機器間での再送を契機とした疑似乱数生成専用鍵の更新を実施しても良い。
【００８６】
カウンタ値バッファ３５２への初期値設定は、一つ以上のセッション更新鍵配送の最初においてのみ、機器間相互認証を伴うプロトコルにて設定される。設定後、疑似乱数生成処理部３５９において疑似乱数が生成される度、カウンタ値がインクリメントされる。カウンタ値はＨＳＭ１０内で読出し可能である。
【００８７】
疑似乱数生成処理部３５９は、連接部３５６と、暗号処理部３５７と、排他的論理和演算部３５８とを有する。連接部３５６は、乱数バッファ３５１の設定値とカウンタ値バッファ３５２の設定値を連接する。暗号処理部３５７は、疑似乱数生成専用鍵バッファ３５０の設定値を暗号鍵として用い、連接部３５６の出力に対し、ブロック暗号処理を行う。排他的論理和演算部３５８は、暗号処理部３５７による暗号結果とカウンタ値バッファ３５２の設定値との排他的論理和を算出する。排他的論理和演算部３５８の算出結果が、(暗号学的)疑似乱数として疑似乱数生成処理部３５９から出力される。すなわち、暗号鍵値をKeyCSRNG、乱数値をRandCSRNG、カウンタ値をCntCSRNGとすると、疑似乱数生成処理部３５９は、
c1_ ：＝ Enc(KeyCSRNG, RandCSRNG || CntCSRNG)
c1  ：＝ c1_ EOR CntCSRNG
を実行し、結果c1を出力する。そして、カウンタ値バッファ３５２は
CntCSRNG ：＝ CntCSRNG + 1
を実行する。
ここで、疑似乱数生成処理部３５９は、カウンタ値を外部から指定して(暗号学的)疑似乱数を出力する事も可能である。用いられる値がカウンタ値バッファ３５２からの値か外部入力値かは、セレクタ３６０にて選択される。
【００８８】
図８は、実施の形態３にかかるＨＳＭ１０の構成の一例を示すブロック図である。以下、図８を用いて、交代バッファに格納した暗号学的疑似乱数を更新鍵として利用可能な、暗号復号処理や署名発行検証処理、及び鍵格納を行うハードウェア構成を説明する。
【００８９】
図８に示すように、実施の形態３のＨＳＭ１０は、疑似乱数生成処理部３５９と、暗号復号処理部３０２と、署名発行検証処理部３０３と、セッション鍵バッファ３０４、３０５と、登録鍵バッファ３０６と、発行署名バッファ３０７と、疑似乱数生成専用鍵バッファ３５０と、乱数バッファ３５１と、カウンタ値バッファ３５２と、誤り符号処理部３１９と、不揮発性メモリ３０８と、制御部３０９、３１０、３１１、３１８と、セレクタ３１２、３１３、３１４、３１５、３１６、３１７、３５３、３５４、３５５とを有する。
【００９０】
このように、機器Ａ２及び機器Ｂ３は、それぞれ、所定の鍵と所定の乱数と任意のカウンタ値とにより一意に定まる暗号学的疑似乱数を生成する機能を備えた疑似乱数生成処理部３５９を有する。なお、機器Ａ２の疑似乱数生成処理部３５９が用いるカウンタ値及び機器Ｂ３の疑似乱数生成処理部３５９が用いるカウンタ値は、いずれも、連続するＮ回の転送の度に所定値（具体的には、＋２）だけ変更される値である。ここで、疑似乱数生成処理部３５９は、上述した機能を備えるとともに、図４で示した疑似乱数生成処理部２０１が内包されているものとする。なお、上述の通り、疑似乱数生成処理部３５９は、カウンタ値を外部から指定して(暗号学的)疑似乱数を出力する事も可能であり、外部から指定されたカウンタ値である図７に示したデータ0_3は、図８のデータ0に対応している。
【００９１】
また、以下で示す各要素は、図４で示した各要素と構成及び動作が同様である。暗号復号処理部３０２は、図４で示した暗号復号処理部２０２に相当する。署名発行検証処理部３０３は、図４で示した署名発行検証処理部２０３に相当する。セッション鍵バッファ３０４、３０５は、図４で示したセッション鍵バッファ２０４、２０５に相当する。登録鍵バッファ３０６は、図４で示した登録鍵バッファ２０６に相当する。発行署名バッファ３０７は、図４で示した発行署名バッファ２０７に相当する。誤り符号処理部３１９は、図４で示した誤り符号処理部２１９に相当する。不揮発性メモリ３０８は、図４で示した不揮発性メモリ２０８に相当する。セレクタ３１２、３１３、３１４、３１５、３１６、３１７は、図４で示したセレクタ２１２、２１３、２１４、２１５、２１６、２１７に相当する。制御部３０９、３１０、３１８は、図４で示した制御部２０９、２１０、２１８に相当する。なお、制御部３１１は、図４で示した制御部２１１に対応しており、さらに、セレクタ３５３、３５４、３５５を制御する点で、制御部２１１と異なる。
【００９２】
本実施の形態の説明では、実施の形態２又はその変形例と同様な説明については適宜省略しつつ説明を行う。
【００９３】
図６に示したシーケンスでは、ハンドシェイクせずに機器Ａ２から機器Ｂ３への鍵更新を繰返し実施可能であったが、繰返し途中で一度でも更新鍵値の復号で問題が発生すると、それ以降の鍵更新に失敗するという課題があった。データ転送の利用シーンを考えると、データ自体の転送が不要である場合もあるし、データの送信ロスよりは最新のデータが可能な限り受信側へ届きかつ受信側が正しく復号できる事が望まれる場合もある。このため、本実施の形態では、指定転送回数分の鍵更新実施中に何らかの問題が発生し鍵更新に失敗した場合であっても、カウンタ値についての認証に合格すれば、受信し損なった鍵値を受信側の機器で作成可能としたシーケンスを図９Ａ−図９Ｅに示す。
【００９４】
図９Ａ−図９Ｅのシーケンスでは、正しく更新鍵を取得できたのが何回目の転送までであるかを識別し、何らかの問題で鍵更新できなかったところから再実行する点も、図６のシーケンスと異なる。なお、鍵を受信し損なった場合に機器Ｂ３で鍵生成が行われた場合も正しく更新鍵を取得できたものとして、正しく更新鍵を取得できたのが何回目の転送までであるかが識別される。以下、図９Ａ−図９Ｅに示されるシーケンスについて具体的に説明する。
【００９５】
＜(1)転送回数の通知を伴う相互認証＞（図９Ａ参照）
(1-1) 機器認証情報の機器Ａ２での構築:
機器Ａ２ は下記を実施する（Ｓ６００）。
1. 現在の時刻をtss ← TimeStamp として選ぶ。
2. 疑似乱数生成処理部３５９にて、乱数を生成し、IV ← {0,1}^k、isk ← {0,1}^k、isk0 ← {0,1}^k、Nonce ← {0,1}^k、icnt ← {0,1}^k、sk(0) ← {0,1}^k とする。ここで、IVはブロック暗号で用いる初期ベクトルである。また、iskは、署名発行用の鍵である。sk(0)は、機器Ｂ３と共有すべき新たな事前共有鍵である。さらに、isk0は疑似乱数生成処理部３５９が用いる鍵値であり、Nonceは疑似乱数生成処理部３５９が用いる乱数の値であり、icntは疑似乱数生成処理部３５９が用いるカウンタ値の初期値である。生成した乱数をバッファに転送後、バッファ内でisk0を疑似乱数専用鍵KeyBufCSRNG(350)へ、Nonceを乱数バッファRandBufCSRNG(351)へ、icntをカウンタ値バッファCntBufCSRNG(352)へ格納する。即ち、KeyBufCSRNG ← isk0、RandBufCSRNG ← Nonce、CntBufCSRNG ← icnt、を実施する。
3. 疑似乱数生成処理部３５９で処理を継続し、isk、isk0、Nonce、icnt、sk(0)を連接する。また、誤り符号処理部３１９でCRCまたはECCを算出し、例えばCRCを算出したとして、d_crc:=CRC(isk||isk0||Nonce||icnt||sk(0))とし、セッション鍵バッファ304-2に格納する。sk(0)を別途セッション鍵バッファ305-2に格納する。
4. r1 := PRF(ski,IDi||tss||IV||N||1)を署名発行検証処理部３０３で算出し結果出力する一方、r1’ := PRF(ski,IDi||tss||IV||N||2)を署名発行検証処理部３０３で算出する。
5. r1‘をセッション鍵バッファKeyBuf1(304-1)へ、iskをセッション鍵バッファKeyBuf2(305-1)へ格納する。
6. セッション鍵バッファKeyBuf1(304-1)から鍵を読出し、c1 := Enc(r1’,IV, isk||isk0||Nonce||icnt||sk(0)||d_crc)を暗号復号処理部３０２にて算出し結果出力する一方、 c1’ := PRF(ski,c1)を署名発行検証処理部３０３で実施する。
7. 不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新に備え、バッファ内で、sk_old：＝ski、ski：＝sk(0)を実施する。ここで、sk_old登録とski更新を不揮発性メモリ３０８で実施しても良い。
8. 上記で得られた算出結果をまとめて、Data1:= (IDi,tss,IV,r1,c1,c1’,N)とし、機器Ｂ３に(1, Data1)を送付する。
【００９６】
(1-2) 機器Ｂ３でのデータ復号とデータ格納:
機器Ｂ３は、以下を実施する（Ｓ６０１）。
1. 乱数 rc ← {0,1}^(k-3) を疑似乱数生成処理部３５９で生成し、乱数出力を実施する。
2. tss,IDi,IV,r1,c1,c1’,N ∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが自身のものと一致するかを確かめる。満たしていない場合は、result1 ：＝ 000とし、下記ステップ7へ処理を移行する。もし満たしている場合は、以下の操作を実行する。
3. r1 = PRF(ski, IDi tss||IV||N||1)が満たされるか否かを、署名発行検証処理部３０３で検証する。もし満たさない場合、 result1 := 110 とする。もし満たしていた場合は、Nを送信回数として識別し、以下の処理を実施する。
4. c1’ = PRF(ski,c1)が満たされるか否かを、署名発行検証処理部３０３で検証する。もし、満たさない場合は、result1 := 100 とする。もし満たしていた場合は、復号処理が可能となるため、再び署名発行検証処理部３０３で、r1’ := PRF(ski, IDi|| tss||IV||N||2) を算出し、発行署名バッファ３０７に算出値を格納後、バッファ内で、セッション鍵バッファKeyBuf1(304-1)へ格納する。これを暗号復号処理部３０２の鍵として用いて、 isk||isk0||Nonce||icnt||sk(0)||d_crc := Dec(r1’,IV, c1)を実施し各値を誤り符号処理部３１９とバッファへ転送し、下記ステップ5.以降を実行する。
5. 復号して得られたisk||isk0||Nonce||icnt||sk(0)のCRCを誤り符号処理部３１９でCRC(isk||isk0||Nonce||icnt||sk(0))として算出し、d_crcと一致するか検証する。一致しない場合、 result1 := 010 とする。もし満たしていた場合は、以下の操作を実行する。
6. バッファ内でisk0を疑似乱数専用鍵KeyBufCSRNG(350)へ、Nonceを乱数バッファRandBufCSRNG(351)へ、icntをカウンタ値バッファCntBufCSRNG(352)へ格納する。即ち、KeyBufCSRNG ← isk0、RandBufCSRNG ← Nonce、CntBufCSRNG ← icnt、を実施する。 iskをセッション鍵格納バッファKeyBuf2(305-1)に書込み、sk(0)を別途セッション鍵バッファ305-2に格納する。不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新に備え、バッファ内で、sk_old：＝ski、ski：＝sk(0)を実施する。バックグラウンド処理で、iskとsk_oldの鍵登録とski更新を不揮発性メモリ３０８で実施する。このとき、上記ステップ4で署名検証に成功しているため、不揮発性メモリ３０８への書込みが可能である。この書込みでは、各機器固有の秘密鍵sk0を用いて、Enc.ECB(sk0,isk)といった暗号化結果の書込みとしても良い。また、result1 := 001とする。
7. rc:=rc||result1、 r2 := PRF(ski,IDi||tss||IV||rc||3)を署名発行検証処理部３０３で算出する。
8. 上記で得られた算出結果をまとめて、Data2:= (IDi,tss,IV,r2,rc)とし、機器Ａ２に(1, Data2)を送付する。
【００９７】
(1-3) 機器Ａ２での認証結果の検証:
機器Ａ２は、以下を実施する（Ｓ６０２）。
機器Ａ２は(2,Data2 = (IDi,tss,IV,r2,rc)) を受け取ると、 IDi,tss,IV,r2,rc∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているか、またIDiが機器Ｂ３のIDとして登録されたIDかを検証し、満たしていなければresult2 := 000 とする。もし満たしていれば、 r2 = PRF(ski,IDi||tss||IV||rc||3)であるかを機器Ａ２搭載の署名発行検証処理部３０３で検証する。もし正しければresult2 := rcの下位3bitとし、そうでなければresult2 := 111 とする。そしてresult2を認証結果として出力し、これを記録する。ここで、result2が001なら、バッファ内で実施した事前共有鍵の鍵更新を不揮発性メモリ３０８へバックグラウンド処理で反映させる。既に反映済みなら、この処理は不要である。また、繰返し処理のインデックス変数jを1に設定する。一方で、result2が001でない場合は、鍵更新をキャンセルし、バッファ内で、ski：＝sk_oldを実施する。既に不揮発性メモリ３０８へ更新反映済みなら、更新を不揮発性メモリ３０８においてキャンセルする。また、このとき機器Ａ２は処理を中断するとともに、機器Ｂ３に処理中断を通知する。この中断通知は、更新前のskiを用いた相互認証で実施するものとする。特に、本中断通知での相互認証では、機器Ｂ３でskiとsk_oldを用いた署名検証を実施し、事前共有鍵の識別を実施する。sk_oldが事前共有鍵として識別された場合、キャンセル処理として、 ski：＝sk_oldを実施し、機器Ｂ３の不揮発性メモリ３０８に反映するものとする。機器Ｂ３では、識別した事前共有鍵を用いて署名を発行し機器Ａ２へ通知する。機器Ａ２で更新前のskiを用いた署名検証を実施し、これに合格すると、機器Ａ２と機器Ｂ３での事前共有鍵の識別が完了する。事前共有鍵の識別に成功すると、本プロトコルを再度最初から実行可能となる。中断処理の完了をもって、本プロトコルの実行が中断される。
さて、機器Ａ２でresult2が001なら、鍵isk、isk0、sk(0)、及び暗号学的疑似乱数生成への入力情報Nonce、icntが中間者に改竄される事も漏洩する事もなく、また欠損する事もなく、さらに、これら全てを機器Ｂ３の鍵格納領域に格納成功したとして処理が記録される。また、result2が010なら書込みでの値欠損による書込み失敗、result2が100ならデータ復号前の署名検証処理で失敗、result2が110なら受信エラー(メッセージ改竄の可能性)、として記録される。
【００９８】
本プロトコルではIV、c1、c1’、r1の何れかが改竄されると、機器Ａ２により発行される署名の機器Ｂ３での検証が失敗するためフェールセーフである。また、機器Ｂ３で署名r2が発行されることにより、攻撃者がrcの値改竄で機器Ａ２で検証合格とする事はできない。IV、c1、c1’、r1、rcの全てまたは何れかが改竄された場合、何らかの改竄があった事を検知可能である。
【００９９】
上記(1)のシーケンスが終了後、Ｎ回の転送が下記のようにして行われる。
＜(2)更新鍵とメッセージの複数回の転送＞（図９Ｂ、図９Ｃ、図９Ｄ参照）
(2-1) 機器認証情報の機器Ａ２での構築:（図９Ｂ参照）
機器Ａ２は機器Ｂ３からの応答を待つことなく下記を実施する（Ｓ７００）。応答があった場合は、後述する(2-3)の処理を実施し、それが正常終了し、かつ繰返し処理継続中なら、引き続き下記を実施する。尚、機器Ａ２は、機器Ｂ３からのメッセージのインデックスが偶数なら繰返し処理継続中であると識別し、j>Nかつ機器Ｂ３からのメッセージのインデックスが奇数なら繰返し処理が既に終了している事を識別する。
1. 現在の時刻をtss(j) ← TimeStamp として選ぶ。
2. 疑似乱数生成処理部３５９にて、乱数を生成し、IV ← {0,1}^k とする。
3. カウンタ値バッファCntBufCSRNG(352)の値を読出し、読み出した値から2を引いてpre_cntに代入する。即ち、pre_cnt ← CntBufCSRNG-2 を実施し、署名発行検証処理部３０３で、 pre_cnt’ := PRF(ski, IDi||tss(j)||pre_cnt||2×(j+1))を算出する。
4. 疑似乱数生成処理部３５９の暗号学的疑似乱数生成機能を用いて、下記を実施する。
tmp1:=Enc(KeyBufCSRNG, RandBufCSRNG||CntBufCSRNG)
K(j,1):= tmp1 EOR CntBufCSRNG
CntBufCSRNG ← CntBufCSRNG + 1
tmp2:=Enc(KeyBufCSRNG, RandBufCSRNG||CntBufCSRNG)
K(j,2):= tmp2 EOR CntBufCSRNG
CntBufCSRNG ← CntBufCSRNG + 1
そして、K(j,1)をセッション鍵バッファ304-2へ、K(j,2)をバッファ305-2へ格納する。このように、署名用共有鍵及び暗号用共有鍵として、疑似乱数生成処理部３５９により生成された暗号学的疑似乱数が用いられる。
5. 疑似乱数生成処理部３５９で処理を継続し、 K(j,1)、K(j,2)と、もしあれば送信メッセージmsg(j)を連接する。また、誤り符号処理部３１９でCRCまたはECCを算出し、例えばCRCを算出したとして、d_crc:=CRC(K(j,1)||K(j,2)||msg(j))とし、バッファに格納する。
6. セッション鍵バッファKeyBuf1(304-1)から鍵値を読出し、C(j) := Enc(KeyBuf1, K(j,1)||K(j,2)||msg(j)||d_crc)を暗号復号処理部３０２で算出し結果出力する一方、セッション鍵バッファKeyBuf2(305-1)から鍵値を読出し、 D(j) := PRF(KeyBuf2,IDi||tss(j)||IV||C(j)||j+3)を署名発行検証処理部３０３で算出し結果出力する。
7. 2つのセッション鍵交代バッファをフリップする。即ち、バッファ304-2をKeyBuf1(304-1)に入れ替え、バッファ304-1をバッファ304-2に入れ替える。同様に、バッファ305-2をKeyBuf2(305-1)に入れ替え、バッファ305-1をバッファ305-2に入れ替える。
8. 上記で得られた算出結果をまとめて、Data(j+2):= (IDi,tss(j),IV,pre_cnt’、C(j),D(j))とし、機器Ｂ３に(2×j, Data(j+2))を送付し、j:=j+1を実行する。
このように、機器Ａ２は、各転送の際、機器Ａ２と機器Ｂ３との間で予め共有されている事前共有鍵を用いて署名発行検証処理部３０３により生成された、機器Ａ２が管理しているカウンタ値に対する署名（pre_cnt’）も機器Ｂ３へ送信する。
【０１００】
(2-2) 機器Ｂ３でのデータ復号とデータ格納: （図９Ｃ参照）
機器Ｂ３は、機器Ａ２からメッセージを受け取りそのインデックスが偶数なら、現在の処理完了後に下記を実施する（Ｓ７０１）。なお、機器Ｂ３では、機器Ａ２からメッセージを受け取る度に、カウンタ値バッファCntBufCSRNG(352)の値が+2だけ増加する。
1. 変数として、空集合 rc と flg を構成する。
2. tss(j),IDi,IV,pre_cnt’,C(j),D(j)∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが自身のものと一致するかを確かめる。満たしていない場合、 result(j) ：＝ 000とし、処理を下記ステップ12へ移行する。もし満たしている場合は、以下の操作を実行する。
3. ok_flg(j):=1とし、カウンタ値バッファCntBufCSRNG(352)から値を読出し、pre_cnt ← CntBufCSRNG - 2を実施する。
4. j>1でかつresult(j-1)≠001、即ち前回の処理で鍵更新に失敗したか否か、を確認し、失敗していた場合は下記を実施する。即ち、機器Ｂ３は、前回の転送時に取得されるはずであった鍵を生成する。成功していた場合は、処理を下記ステップ7へ移行する。
5. pre_cnt’ == PRF(ski, IDi||tss(j)||pre_cnt||2×(j+1))かを確認し、満たす場合、下記を実施し、満たさない場合は、 ok_flg(j):=0とし、処理をステップ12へ移行する。本ステップ5では、カウンタ値の署名を検証することにより、機器Ａ２が管理しているカウンタ値と、機器Ｂ３が管理しているカウンタ値との同期が取れているかが確認される。このように、機器Ｂ３は、機器Ａ２から送信された署名が、機器Ｂ３が管理しているカウンタ値及び事前共有鍵を用いた署名発行検証処理部３０３による検証に合格した場合に限り、ｊ番目の転送に対して利用される署名用共有鍵及び暗号用共有鍵を疑似乱数生成処理部３５９により生成する。このため、機器Ａ２が管理しているカウンタ値と、機器Ｂ３が管理しているカウンタ値との同期がとれている場合に限り鍵の復元を可能とすることができる。
6. 疑似乱数生成処理部３５９の暗号学的疑似乱数生成機能を用いて、下記を実施し、暗号化・復号化用鍵(K(j,1))と署名発行・検証用鍵(K(j,2))を生成する。つまり、機器Ｂ３は、ｊ−１番目の転送において機器Ａ２から送信された署名用共有鍵及び暗号用共有鍵の取得に失敗した場合（署名用共有鍵及び暗号用共有鍵の同期に失敗した場合）、ｊ番目の転送に対して利用される署名用共有鍵及び暗号用共有鍵を疑似乱数生成処理部３５９により生成する。このため、前回の転送データの取得が適切に行われていない場合であっても、今回の転送データの取得処理を行うことができる。
tmp1:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
K(j,1):= tmp1 EOR pre_cnt
pre_cnt ← pre_cnt + 1
tmp2:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
K(j,2):= tmp2 EOR pre_cnt 
そして、K(j,1)をセッション鍵バッファKeyBuf1(304-1)へ、K(j,2)をセッション鍵バッファKeyBuf2(305-1)へ格納する。
7. ok_flg(j)==1か否かを確認し、満たす場合は下記を実施する。すなわち、今回転送されてきたデータの署名検証に必要な鍵と復号に必要な鍵とを機器Ｂ３が有する場合、下記を実行する。満たさない場合は、 result(j) ：＝ 110とし処理を下記ステップ12へ移行する。
8. セッション鍵バッファKeyBuf2(305-1)から鍵値を読出し、 D(j) = PRF(KeyBuf2,IDi||tss(j)||IV||C(j)||j+3)が満たされるか否かを、署名発行検証処理部３０３で検証する。もし満たさない場合、 result(j) := 100 とする。もし満たしていた場合は、以下の処理を実施する。
9. セッション鍵バッファKeyBuf1(304-1)から鍵値を読出し、K(j,1)||K(j,2)||msg(j)||d_crc := Dec(KeyBuf1,IV, C(j))を暗号復号処理部３０２で実施し、下記ステップ10.以降を実行する。
10. 復号して得られたK(j,1)||K(j,2)||msg(j)のCRCを誤り符号処理部３１９でCRC(K(j,1)||K(j,2)||msg(j))として算出し、d_crcと一致するか検証する。一致しない場合、 result(j) := 010 とする。もし満たしていた場合は、以下の操作を実行する。
11. 復号結果として得られたK(j,1)をセッション鍵バッファ304-2へ、K(j,2)をバッファ305-2へ格納する。2つのセッション鍵交代バッファをフリップする。即ち、バッファ304-2をKeyBuf1(304-1)に入れ替え、バッファ304-1をバッファ304-2に入れ替える。また、バッファ305-2をKeyBuf2(305-1)に入れ替え、バッファ305-1をバッファ305-2に入れ替える。 result(j) := 001とする。
12. rc:=rc||result(j)とし、集合rcへresult(j)を追加する。flg:=flg||ok_flg(j)とし、集合flgへok_flg(j)を追加する。
13. result(j)≠001か否かを確認し、満たす場合は下記ステップ14.以降を実施する。すなわち、正しい転送データの取得に失敗した場合は、ステップ14以降に示す通り、機器Ｂ３は、新たな事前共有鍵(sk(j))を作成し、機器Ａ２に送信する。満たさない場合は、繰返し処理を継続し、j=Nが成立すると機器Ｂ３は繰返し処理を終了する。
14.疑似乱数生成処理部３５９にて、乱数を生成し、sk(j) ← {0,1}^k、 IV2 ← {0,1}^k とする。誤り符号処理部３１９でCRCまたはECCを算出し、例えばCRCを算出したとして、sk_crc:=CRC(sk(j))とし、バッファに格納する。
15. 署名発行検証処理部３０３で、 sr(j) := PRF(ski,IDi||tss(j)||IV2||N||2×(j+1)+1)を算出し、発行署名バッファ３０７に格納する。
16. 発行署名バッファ３０７からsr(j)を読出し、それを鍵として、暗号復号処理部３０２で、 c(j) := Enc(sr(j),IV2,sk(j)||sk_crc)を算出する。
17. セッション鍵バッファKeyBuf2(305-2)から鍵値を読出し、署名発行検証処理部３０３で、 c’(j) := PRF(ski,c(j))を算出する。
18. 不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新のため、バッファ内でsk_old：＝ski、ski：＝sk(j)を実施するとともに、不揮発性メモリ３０８でsk_old登録とski更新を実施する。
19. 上記で得られた算出結果をまとめて、Data(j+3):= (IDi,tss(j),IV2,c(j),c’(j))とし、機器Ａ２に(2×j, Data(j+3))を送付する。
このように、機器Ｂ３は、ｊ−１番目の転送において正しい転送データの取得に失敗した場合（機器Ａ２からのｊ−１番目の転送において送信された署名用共有鍵及び暗号用共有鍵の取得（同期）に失敗した場合）、新たな事前共有鍵を生成して、機器Ａ２へ転送する。
【０１０１】
(2-3) 機器Ａ２での事前共有鍵更新: （図９Ｄ参照）
機器Ａ２は、機器Ｂ３からの応答を受け取りそのインデックスが偶数なら、現在の処理完了後に下記を実施する（Ｓ７０２）。
1. tss(j),IDi,IV2,c(j),c’(j)∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが機器Ｂ３のIDと一致するかを確かめる。満たしていない場合、 result2 ：＝ 00とし、処理を下記ステップ6へ移行する。もし満たしている場合は、以下の操作を実行する。
2. 署名発行検証処理部３０３で、 c’(j) == PRF(ski,c(j))かを確認する。満たす場合は、以下の操作を実施する。満たさない場合は、result2 := 11とし、処理を下記ステップ6へ移行する。
3. 署名発行検証処理部３０３で、 sr(j) := PRF(ski,IDi||tss(j)||IV2||N||2×(j+1)+1)を算出し、暗号復号処理部３０２で復号 sk(j)||sk_crc := Dec(sr(j),IV2,c(j))を実施する。
4. 誤り符号処理部３１９で、 sk_crc==CRC(sk(j))かを確認し、満たす場合は、以下の操作を実施する。満たさない場合は、result2 := 10とし、処理を下記ステップ6へ移行する。
5. 署名検証が既に成功しているため、不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新のため、バッファ内でsk_old：＝ski、ski：＝sk(j)を実施するとともに、不揮発性メモリ３０８でsk_old登録とski更新を実施する。また、 result2 := 01とする。
6.疑似乱数生成処理部３５９にて、乱数を生成し、rand ← {0,1}^(k-2) とする。また、result2 := rand||result2とする。
7. 署名発行検証処理部３０３で、resp(j) := PRF(sk_old,IDi||tss(j)||IV2||rand||N||2×(j+2))を算出する。
8. 上記で得られた算出結果をまとめて、Data(j+4):= (IDi,tss(j),IV2,rand,resp(j))とし、機器Ａ２に(2×j+1, Data(j+4))を送付する。
このように、機器Ａ２及び機器Ｂ３は、現在の事前共有鍵を、機器Ｂ３が生成した新たな事前共有鍵により更新する。このため、以後の転送の安全性を高めることができる。
【０１０２】
(2-4)事前共有鍵の更新について機器Ａ２と同期が取れたことの機器Ｂ３における確認: （図９Ｄ参照）
機器Ｂ３は、機器Ａ２からの応答を受け取りそのインデックスが奇数なら、現在の処理完了後に下記を実施する（Ｓ７０３）。
1. result(j)≠001か否かを確認する。満たす場合は以下の操作を実施する。満たさない場合は、繰返し処理を継続し、特に、j==Nであれば繰返し処理を終了する。
2. tss(j),IDi,IV2,rand,resp(j)∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが自身のものと一致するかを確かめる。満たしていない場合、不揮発性メモリ３０８やバッファでの事前共有鍵の更新のキャンセル処理を実施する。すなわち、ski:=sk_oldを実施する。また、中断処理を実施する。満たす場合、以下の操作を実施する。
3. 署名発行検証処理部３０３で、 resp(j) == PRF(sk_old,IDi||tss(j)||IV2||rand||N||2×(j+2))かを確認する。満たす場合は、以下の操作を実施する。
4. Rand&0x0…03≠01か否かを確認する。すなわち、機器Ａ２において事前共有鍵の更新に失敗したか否かを判定する。満たさない場合、すなわち、機器Ａ２において事前共有鍵の更新が成功した場合、j<Nなら繰返し処理を継続し、j==Nなら繰返し処理を終了する。満たす場合、すなわち、機器Ａ２において事前共有鍵の更新が失敗した場合、不揮発性メモリ３０８やバッファでの事前共有鍵のキャンセル処理を実施する。すなわち、ski:=sk_oldを実施する。また、繰返し処理を中断し、後述する(3)「相互認証を伴う事前共有鍵の更新及び同期、並びに再実行インデックスの同定」へと処理を移行する。
機器Ｂ３での中断処理では、機器Ａ２に処理中断を通知する。この中断通知は、更新前のskiを用いた相互認証で実施するものとする。特に、本中断通知での相互認証では、機器Ａ２でskiとsk_oldを用いた署名検証を実施し、事前共有鍵の識別を実施する。sk_oldが事前共有鍵として識別された場合、キャンセル処理として、 ski：＝sk_oldを実施し、機器Ａ２の不揮発性メモリ３０８に反映するものとする。機器Ａ２では、識別した事前共有鍵を用いて署名を発行し機器Ｂ３へ通知する。機器Ｂ３で更新前のskiを用いた署名検証を実施し、これに合格すると、機器Ａ２と機器Ｂ３での事前共有鍵の識別が完了する。事前共有鍵の識別に成功すると、本プロトコルを再度最初から実行可能となる。中断処理の完了をもって、本プロトコルの実行が中断される。
【０１０３】
さて、機器Ｂ３で処理が正常完了したのであれば、result(j)==001なるjに対して、鍵K(j,1)、K(j,2)とmsg(j)が中間者に改竄される事も漏洩する事もなく、また欠損する事もなく、特にK(j,1)、K(j,2)とmsg(j) を機器Ｂ３の鍵格納領域に格納成功となる。それ以外の場合、集合rcに格納された、result（j）の値で失敗要因分析が可能である。値が010なら書込みでの値欠損による書込み失敗、100ならデータ復号前の署名検証処理で失敗、 110なら受信エラー(メッセージ改竄の可能性)、として処理が記録されている。
また、result(j)≠001なるjに対して、暗号学的疑似乱数生成機能を用いた鍵復元を機器Ｂ３で実施するが、その度に事前共有鍵skiを更新している。より詳細には、カウンタ値についての署名が更新後の事前共有鍵を用いて機器Ａ２により発行され、この署名検証に成功した後に機器Ｂ３で鍵の復元が行われる。このため、更新前の事前共有鍵の漏洩があったとしても、k＞jかつresult(j)≠001なるkに対し、漏洩した事前共有鍵を用いた鍵の復元は機器Ｂ３で行う事はできない。このため、安全である。
【０１０４】
機器Ｂ３において、上述の繰り返し処理の中断若しくはタイムアウトが発生すると、又は、Ｎ回の受信が完了すると、下記(3)に示されるシーケンスの動作が実施される。
＜(3)相互認証を伴う事前共有鍵の更新及び同期、並びに再実行インデックスの同定＞（図９Ｅ参照）
(3-1) 機器Ｂ３での再実行インデックスの同定と事前共有鍵の更新:
機器Ｂ３は、以下を実施する（Ｓ８００）。
1. 現在の時刻をtss(j) ← TimeStamp として選び、疑似乱数生成処理部３５９にて、乱数を生成し、IV ← {0,1}^k とする。
2. result(k)&0x001 が 真(値としては、1) となる最大のkをresultkに代入し、ok_flg(i)&0x001 が 真(値としては、1) となる最大のiをok_flgiに代入する。したがって、resultkは、最後に転送データを正しく取得できたのが何番目の転送であるかを示す。また、ok_flgiは、最後に鍵の復元処理を行ったのが何番目の転送を受信したときであるかを示す。次に、retry_index := max(resultk, ok_flagi -1)を算出する。したがって、retry_indexは、機器Ｂ３が現在有している最新の署名用共有鍵及び暗号用共有鍵が、Ｎ回の転送のうち何番目の転送で機器Ａ２から送信されたものに相当するかを示す序数（インデックス）といえる。ここで、機器Ｂ３が現在有している最新の署名用共有鍵及び暗号用共有鍵は、転送データの復号により得られたものであるかもしれないし、機器Ｂ３が復元したものであるかもしれない。
3. カウンタ値バッファCntBufCSRNG(352)から値を読出し、pre_cnt ← CntBufCSRNG - 2×(N - retry_index)を算出する。すなわち、retry_indexで表される転送回数の際のカウンタ値がpre_cntとして算出される。
4. 疑似乱数生成処理部３５９の暗号学的疑似乱数生成機能を用いて、下記を実施する。
tmp1:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
K(j,1):= tmp1 EOR pre_cnt
pre_cnt ← pre_cnt + 1
tmp2:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
K(j,2):= tmp2 EOR pre_cnt
そして、K(j,1)をセッション鍵バッファKeyBuf1(304-1)へ、K(j,2)をKeyBuf2(305-1)へ格納する。
5. 署名発行検証処理部３０３で、 r2:= PRF(ski, IDi||tss(j)||rc||retry_index||2×(j+1))を算出する。
6. 不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新として、バッファ内でsk_old：＝ski、ski←KeyBuf2を実施するとともに、不揮発性メモリ３０８でsk_old登録とski更新を実施する。また、疑似乱数生成専用鍵についても更新する。すなわち、バッファ内でisk0_old←KeyBufCSRNG、KeyBufCSRNG←KeyBuf1を実施するとともに、不揮発性メモリ３０８でisk0_old登録更新とKeyBufCSRNG値の登録更新を実施する。
7. 上記で得られた算出結果をまとめて、Data(j+5):= (IDi,tss(j),rc,r2,retry_index)とし、機器Ａ２に(2×j+1, Data(j+5))を送付し処理を終了する。但し、機器Ａ２からの処理中断通知を受信した場合は、下記の(3-2)で述べる中断処理を実施するものとする。
このように、機器Ｂ３は、機器Ｂ３が有する最新の署名用共有鍵及び暗号用共有鍵が、Ｎ回の転送のうち何番目の転送で機器Ａ２から送信される署名用共有鍵及び暗号用共有鍵に相当するかを示す序数（retry_index）を含む転送データを機器Ａ２へ転送する。
また、疑似乱数生成処理部３５９は、retry_indexを含む転送データの転送が行われる場合、retry_indexから特定されるカウンタ値を用いて疑似乱数生成処理部３５９により生成された暗号用共有鍵を、暗号学的疑似乱数を生成するための新たな鍵として採用する。なお、retry_indexから特定されるカウンタ値を用いて疑似乱数生成処理部３５９により生成された署名用共有鍵が新たな鍵として採用されてもよい。
【０１０５】
(3-2) 機器Ａ２での再実行インデックスの検証と事前共有鍵更新の検証:
機器Ａ２ は(2×j+1, Data(j+5) = (IDi,tss(j),rc,r2,retry_index)) を受け取ると、以下を実施する（Ｓ８０１）。
1. IDi,tss(j),rc,r2,retry_index∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが機器Ｂ３のIDとして登録されたIDかを確かめる。満たしていない場合、 retry_index ：＝ -1とし、処理を下記ステップ3へ移行する。もし満たしている場合は、以下の操作を実行する。
2. 不揮発性メモリ３０８に格納済みの事前共有鍵skiを用いて、r2 == PRF(ski,IDi||tss(j)||rc||retry_index||2×(j+1))が満たされるかを署名発行検証処理部３０３で実施する。満たしていない場合、retry_index ：＝ -1とする。
3. retry_index ≠ -1か否かを確認する。満たさない場合、中断処理を実施する。満たす場合、以下の操作を実行する。
4. retry_index == Nか否かを確認する。満たす場合は、不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新として、バッファ内で、sk_old：＝ski、ski：＝ KeyBuf2を実施する。ここで、sk_old登録とski更新を不揮発性メモリ３０８で実施する。また、疑似乱数生成専用鍵についても更新する。すなわち、バッファ内でのisk0_old←KeyBufCSRNG、KeyBufCSRNG←KeyBuf1を実施するとともに、不揮発性メモリ３０８でisk0_old登録更新とKeyBufCSRNG値の登録更新を実施する。そして処理を終了する。満たさない場合は、以下の操作を実行する。
5. カウンタ値バッファCntBufCSRNG(352)から値を読出し、pre_cnt ← CntBufCSRNG - 2×(N - retry_index)を算出する。
6. 疑似乱数生成処理部３５９の暗号学的疑似乱数生成機能を用いて、下記を実施する。
tmp1:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
K(j,1):= tmp1 EOR pre_cnt
pre_cnt ← pre_cnt + 1
tmp2:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
K(j,2):= tmp2 EOR pre_cnt
そして、K(j,1)をセッション鍵バッファKeyBuf1(304-1)へ、K(j,2)をKeyBuf2(305-1)へ格納する。
7. 不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新として、バッファ内でsk_old：＝ski、ski←KeyBuf2を実施するとともに、不揮発性メモリ３０８でsk_old登録とski更新を実施する。また、疑似乱数生成専用鍵についても更新する。すなわち、バッファ内でisk0_old←KeyBufCSRNG、KeyBufCSRNG←KeyBuf1を実施するとともに、不揮発性メモリ３０８でisk0_old登録更新とKeyBufCSRNG値の登録更新を実施する。
このように、疑似乱数生成処理部３５９は、機器Ｂ３からretry_indexを含む転送データの転送が行われる場合、retry_indexから特定されるカウンタ値を用いて疑似乱数生成処理部３５９により生成された暗号用共有鍵を、暗号学的疑似乱数を生成するための新たな鍵として採用する。このため、安全性を高めることができる。なお、暗号学的疑似乱数を生成するための新たな鍵として、retry_indexから特定されるカウンタ値を用いて疑似乱数生成処理部３５９により生成された署名用共有鍵が機器Ｂ３で採用される場合には、機器Ａ２においても、新たな鍵として署名用共有鍵が採用される。
8. そして、上記(2)で述べた繰返し処理をj∈[retry_index+1,N]の範囲で再実行する。
このように、機器Ａ２は、機器Ｂ３から送信された序数から特定されるカウンタ値を用いて疑似乱数生成処理部３５９により生成された署名用共有鍵及び暗号用共有鍵を再転送の最初の転送に用いて、当該序数の次の回以降の転送を再度実行する。これにより、機器Ｂ３は、当該序数の次の回以降の転送データを再度受信することができる。
【０１０６】
機器Ａ２での中断処理では、機器Ｂ３に処理中断を通知する。この中断通知は、更新前のskiを用いた相互認証で実施するものとする。特に、本中断通知での相互認証では、機器Ｂ３でskiとsk_oldを用いた署名検証を実施し、事前共有鍵の識別を実施する。sk_oldが事前共有鍵として識別された場合、キャンセル処理として、 ski：＝sk_oldを実施し、機器Ｂ３の不揮発性メモリ３０８に反映するものとする。機器Ｂ３では、識別した事前共有鍵を用いて署名を発行し機器Ａ２へ通知する。機器Ａ２で更新前のskiを用いた署名検証を実施し、これに合格すると、機器Ａ２と機器Ｂ３での事前共有鍵の識別が完了する。事前共有鍵の識別に成功すると、本プロトコルを再度最初から実行可能となる。中断処理の完了をもって、本プロトコルの実行が中断される。
【０１０７】
さて、機器Ａ２で処理が正常完了したのであれば、 result(j)==001なるjに対して、鍵K(j,1)、K(j,2)とmsg(j)が中間者に改竄される事も漏洩する事もなく、また欠損する事もなく、特にK(j,1)、K(j,2)とmsg(j)を機器Ｂ３の鍵格納領域に格納成功となる。retry_index＜Nであるため繰返し処理が再実行となった場合も、retry_indexで示される回までは同様のことが言える。それ以外の場合、rcに格納された、result（j）の値で失敗要因分析が可能である。値が010なら書込みでの値欠損による書込み失敗、100ならデータ復号前の署名検証処理で失敗、110なら受信エラー(メッセージ改竄の可能性)、として処理が記録されている。
特に、retry_index＜Nであるため繰返し処理が再実行となった場合、事前共有鍵が更新されるため、繰返し前の事前共有鍵が漏えいしたとしても、その鍵は再実行の際には最早利用できず安全である。
【０１０８】
本プロトコルでは転送メッセージ内の値の何れかが改竄されると、機器Ａ２、機器Ｂ３により発行される署名の機器Ｂ３、機器Ａ２での検証が失敗するためフェールセーフである。また、機器Ａ２での署名r2が発行されることにより、攻撃者がrcやretry_indexの値改竄で機器Ａ２で検証合格とする事はできない。転送メッセージ内の値の全てまたは何れかが改竄された場合、何らかの改竄があった事を検知可能である。
【０１０９】
＜実施の形態４＞
図９Ａ−図９Ｅに示したシーケンスでは、Ｓ７０１（図９Ｃ参照）において、機器Ｂ３は、新たな事前共有鍵として乱数sk(j)を生成している。すなわち、図９Ａ−図９Ｅに示したシーケンスでは、繰返し処理における暗号学的疑似乱数の再現性という特性を用いずに、事前共有鍵の更新を実施している。本実施の形態では、この特性を用いる事で、シーケンスをより効率化する。図９Ａ−図９Ｅに示したシーケンスに対してそのような効率化を行ったシーケンスを図１０Ａ、図１０Ｂに示す。なお、図１０Ａは、図９Ｃに示したシーケンスを修正したシーケンスを示し、図１０Ｂは、図９Ｄに示したシーケンスを修正したシーケンスを示す。このため、実施の形態４にかかるシーケンスは、図９Ａ、図９Ｂ、図１０Ａ、図１０Ｂ、図９Ｅからなる。
以下、上述した実施の形態３と同様な説明については適宜省略しつつ、説明を行う。
【０１１０】
＜(1)転送回数の通知を伴う相互認証＞
図９Ａで示した動作と同じ動作が行われるため、図示及びその説明は省略する。
【０１１１】
上記(1)のシーケンスが終了後、Ｎ回の転送が下記のようにして行われる。
＜(2)更新鍵とメッセージの複数回の転送＞（図９Ｂ、図１０Ａ、図１０Ｂ参照）
(2-1) 機器認証情報の機器Ａ２での構築:
図９Ｂで示した動作と同じ動作が行われるため、図示及びその説明は省略する。
【０１１２】
(2-2) 機器Ｂ３でのデータ復号とデータ格納:（図１０Ａ参照）
機器Ｂ３は、機器Ａ２からメッセージを受け取りそのインデックスが偶数なら、現在の処理完了後に下記を実施する（Ｓ９００）。
1. 変数として、空集合 rc と flg を構成する。
2. tss(j),IDi,IV,pre_cnt’,C(j),D(j)∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDiが自身のものと一致するかを確かめる。満たしていない場合、 result(j) ：＝ 000とし、処理を下記ステップ12へ移行する。もし満たしている場合は、以下の操作を実行する。
3. ok_flg(j):=1とし、カウンタ値バッファCntBufCSRNG(352)から値を読出し、pre_cnt ← CntBufCSRNG - 2を実施する。
4. j＞1でかつresult(j-1)≠001、即ち前回の処理で鍵更新に失敗したか否か、を確認し、失敗していた場合は下記を実施する。即ち、機器Ｂ３は、前回の転送時に取得されるはずであった鍵を生成する。成功していた場合は、処理を下記ステップ7へ移行する。
5. pre_cnt’ == PRF(ski, IDi||tss(j)||pre_cnt||2×(j+1))かを確認し、満たす場合、下記を実施し、満たさない場合は、 ok_flg(j):=0とし、処理を下記ステップ12へ移行する。本ステップ5では、カウンタ値の署名を検証することにより、機器Ａ２が管理しているカウンタ値と、機器Ｂ３が管理しているカウンタ値との同期が取れているかが確認される。
6. 疑似乱数生成処理部３５９の暗号学的疑似乱数生成機能を用いて、下記を実施し、暗号化・復号化用鍵(K(j,1))と署名発行・検証用鍵(K(j,2))を生成する。
tmp1:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
K(j,1):= tmp1 EOR pre_cnt
pre_cnt ← pre_cnt + 1
tmp2:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
K(j,2):= tmp2 EOR pre_cnt
そして、K(j,1)をセッション鍵バッファKeyBuf1(304-1)へ、K(j,2)をセッション鍵バッファKeyBuf2(305-1)へ格納する。
7. ok_flg(j)==1か否かを確認し、満たす場合は下記を実施する。すなわち、今回転送されてきたデータの署名検証に必要な鍵と復号に必要な鍵とを機器Ｂ３が有する場合、下記を実行する。満たさない場合は、 result(j) ：＝ 110とし処理を下記ステップ12へ移行する。
8. セッション鍵バッファKeyBuf2(305-1)から鍵値を読出し、 D(j) = PRF(KeyBuf2,IDi||tss(j)||IV||C(j)||j+3)が満たされるか否かを、署名発行検証処理部３０３で検証する。もし満たさない場合、 result(j) := 100 とする。もし満たしていた場合は、以下の処理を実施する。
9. セッション鍵バッファKeyBuf1(304-1)から鍵値を読出し、K(j,1)||K(j,2)||msg(j)||d_crc := Dec(KeyBuf1,IV, C(j))を暗号復号処理部３０２で実施し、下記ステップ10.以降を実行する。
10. 復号して得られたK(j,1)||K(j,2)||msg(j)のCRCを誤り符号処理部３１９でCRC(K(j,1)||K(j,2)||msg(j))として算出し、d_crcと一致するか検証する。一致しない場合、 result(j) := 010 とする。もし満たしていた場合は、以下の操作を実行する。
11. 復号結果として得られたK(j,1)をセッション鍵バッファ304-2へ、K(j,2)をバッファ305-2へ格納する。2つのセッション鍵交代バッファをフリップする。即ち、バッファ304-2をKeyBuf1(304-1)に入れ替え、バッファ304-1をバッファ304-2に入れ替える。また、バッファ305-2をKeyBuf2(305-1)に入れ替え、バッファ305-1をバッファ305-2に、入れ替える。 result(j) := 001とする。
12. rc:=rc||result(j)とし、集合rcへresult(j)を追加する。flg:=flg||ok_flg(j)とし、集合flgへok_flg(j)を追加する。
13. result(j)≠001か否かを確認し、満たす場合は下記ステップ14.以降を実施する。すなわち、正しい転送データの取得に失敗した場合は、ステップ14以降に示す通り、機器Ｂ３は、KeyBuf2の値を新たな事前共有鍵とする。満たさない場合は、繰返し処理を継続し、j=Nが成立すると機器Ｂ３は繰返し処理を終了する。
14.疑似乱数生成処理部３５９にて、乱数を生成し、IV2 ← {0,1}^k とする。署名発行検証処理部３０３で、 sr(j) := PRF(ski,IDi||tss(j)||IV2||N||2×(j+1)+1)を算出し、発行署名バッファ３０７に格納する。
15. 不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新のため、バッファ内でsk_old：＝ski、ski：＝KeyBuf2を実施するとともに、不揮発性メモリ３０８でsk_old登録とski更新で実施する。
16. 上記で得られた算出結果をまとめて、Data(j+3):= (IDi,tss(j),IV2,sr(j))とし、機器Ａ２に(2×j, Data(j+3))を送付する。
【０１１３】
(2-3) 機器Ａ２での事前共有鍵更新: （図１０Ｂ参照）
機器Ａ２は、機器Ｂ３からの応答を受け取りそのインデックスが偶数なら、現在の処理完了後に下記を実施する（Ｓ９０１）。
1. tss(j),IDi,IV2,sr(j),N∈ {0,1}^k であるか、即ちそれぞれのデータの長さが規定値どおりの長さとなっているかを検証し、また、IDi が機器Ｂ３のIDと一致するかを確かめる。満たしていない場合、 result2 ：＝ 00とし、処理を下記ステップ6へ移行する。もし満たしている場合は、以下の操作を実行する。
2. 署名発行検証処理部３０３で、 sr(j) == PRF(ski,IDi||tss(j)||IV2||N||2×(j+1)+1)かを確認する。満たす場合は、以下の操作を実施する。満たさない場合は、result2 := 10とし、処理を下記ステップ6へ移行する。
3. カウンタ値バッファCntBufCSRNG(352)から値を読出し、pre_cnt ← CntBufCSRNG - 2×(N - j) - 1 を算出する。
4. 疑似乱数生成処理部３５９の暗号学的疑似乱数生成機能を用いて、下記を実施する。
tmp1:=Enc(KeyBufCSRNG, RandBufCSRNG||pre_cnt)
ski:= tmp1 EOR pre_cnt
そして、K(j,2)をセッション鍵バッファKeyBuf2(305-1)へ格納する。
5. 署名検証が既に成功しているため、不揮発性メモリ３０８に登録済みの事前共有鍵skiの更新のため、バッファ内でsk_old：＝ski、ski←KeyBuf2を実施するとともに、不揮発性メモリ３０８でsk_old登録とski更新を実施する。また、 result2 := 01とする。
6.疑似乱数生成処理部３５９にて、乱数を生成し、rand ← {0,1}^(k-2) とする。また、result2 := rand||result2とする。
7. 署名発行検証処理部３０３で、resp(j) := PRF(sk_old,IDi||tss(j)||IV2||rand||N||2×(j+2))を算出する。
8. 上記で得られた算出結果をまとめて、Data(j+4):= (IDi,tss(j),IV2,rand,resp(j))とし、機器Ａ２に(2×j+1, Data(j+4))を送付する。
以上説明したように、機器Ｂ３は、ｊ−１番目の転送において正しい転送データの取得に失敗した場合（機器Ａ２からのｊ−１番目の転送において送信された前記署名用共有鍵及び前記暗号用共有鍵の取得（同期）に失敗した場合）、機器Ｂ３が機器Ａ２から取得している最新の署名用共有鍵を新たな事前共有鍵として採用するとともに、ｊ−１番目の転送において送信された署名用共有鍵及び暗号用共有鍵の取得に失敗した旨を機器Ａ２に通知する（Ｓ９００）。そして、通知を受信した機器Ａ２は、機器Ｂ３により採用される新たな事前共有鍵を、序数ｊから特定されるカウンタ値を用いて疑似乱数生成処理部３５９により生成する。このため、実施の形態３で示したような、機器Ｂ３における新たな事前共有鍵の乱数を用いた生成処理を省略することができ、より効率的なシーケンスとなっている。なお、新たな事前共有鍵として、署名用共有鍵ではなく、暗号用共有鍵が採用されてもよい。
【０１１４】
(2-4)事前共有鍵の更新について機器Ａ２と同期が取れたことの機器Ｂ３における確認:（図１０ＢのＳ９０２参照）
図９Ｄで示した機器Ｂ３の動作と同じ動作が行われるため、図示及びその説明は省略する。
【０１１５】
＜(3)相互認証を伴う事前共有鍵の更新及び同期、並びに再実行インデックスの同定＞
図９Ｅで示した動作と同じ動作が行われるため、図示及びその説明は省略する。
【０１１６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、実施の形態３の自然な拡張として、次のようなセキュリティ・プロトコルを構成可能である。すなわち、データの分割転送を可能であるとともにデータ誤り検知や修正が可能で改竄耐性・前方秘匿性を持つデータ授受シーケンスを含む、前方秘匿性があるにも関わらずメッセージロス発生時に再送実行が可能なセキュリティ・プロトコルを構成可能である。更に上記セキュリティ・プロトコルでのメッセージロス発生時の再送実行では、鍵更新が失敗したところからの再送方式が実現できるだけでなく、次のような方式の実現も可能である。すなわち、指定転送回数分の鍵更新実施中に何らかの問題が発生し鍵更新に失敗した場合であっても、別途認証に合格すれば、受信し損なった鍵値を受信側の機器で作成可能としたセキュリティ・プロトコルも構成可能である。このようにすることで、可能な限り最新のデータ転送を改竄耐性と前方秘匿性を伴う形で実現しつつ、前記別途認証に失敗したところからの再送を行う方式を実現できる。
【０１１７】
また、次のように簡略化された実施の形態を考えることも可能である。図１１は、簡略化された実施の形態の構成の一例を示すブロック図である。図１１に示すように、データ転送システム１は、機器Ａ２と機器Ｂ３とを有する。ここで、機器Ａ２は、暗号処理部２１と、署名処理部２２とを有し、機器Ｂ３は、暗号処理部３１と、署名処理部３２と、暗号処理部３１により復号された共有鍵を格納するための記憶部３３を有する。なお、記憶部３３は、バッファメモリ（揮発性メモリ）であってもよいし、不揮発性メモリであってもよい。機器Ａ２は、暗号処理部２１により新たな共有鍵を暗号化し、暗号化された新たな共有鍵に対する署名を署名処理部２２により発行し、署名と暗号化された新たな共有鍵とを機器Ａ２に送信する。そして、機器Ｂ３は、署名処理部３２が署名の検証に失敗した場合、暗号化された新たな共有鍵の受信後に行われる処理であって、記憶部３３への新たな共有鍵の格納のために必要とされる処理うち少なくとも１つを禁止するよう制御する。このような構成によれば、署名検証に合格しない場合には、機器Ｂ３における新たな共有鍵の登録を防ぐことができるため、本構成を有しない場合に比べ、鍵の更新の安全性を高めることができる。
【符号の説明】
【０１１８】
１    データ転送システム
２    機器Ａ
３    機器Ｂ
１０    ＨＳＭ
１１    非セキュア部
２１、３１    暗号処理部
２２、３２    署名処理部
３３    記憶部
１０１、２０１、３５９    疑似乱数生成処理部
１０２、２０２、３０２    暗号復号処理部
１０３、２０３、３０３    署名発行検証処理部
１０４、２０４、２０５、３０４、３０５    セッション鍵バッファ
１０５、２０６、３０６    登録鍵バッファ
１０６、１０７、１１５、２０９、２１０、２１１、２１８、３０９、３１０、３１１、３１８    制御部
１０８、２０８、３０８    不揮発性メモリ
１０９、１１０、１１１、１１２、２１２、２１３、２１４、２１５、２１６、２１７、３１２、３１３、３１４、３１５、３１６、３１７、３５３、３６０    セレクタ
１１３、２０７、３０７    発行署名バッファ
１１４、２１９、３１９    誤り符号処理部
３５０    疑似乱数生成専用鍵バッファ
３５１    乱数バッファ
３５２    カウンタ値バッファ
３５６    連接部
３５７    暗号処理部
３５８    排他的論理和演算部
【図１】
2019195116.tif 000003
【図２】
2019195116.tif 000004
【図３】
2019195116.tif 000005
【図４】
2019195116.tif 000006
【図５Ａ】
2019195116.tif 000007
【図５Ｂ】
2019195116.tif 000008
【図６Ａ】
2019195116.tif 000009
【図６Ｂ】
2019195116.tif 000010
【図７】
2019195116.tif 000011
【図８】
2019195116.tif 000012
【図９Ａ】
2019195116.tif 000013
【図９Ｂ】
2019195116.tif 000014
【図９Ｃ】
2019195116.tif 000015
【図９Ｄ】
2019195116.tif 000016
【図９Ｅ】
2019195116.tif 000017
【図１０Ａ】
2019195116.tif 000018
【図１０Ｂ】
2019195116.tif 000019
【図１１】
2019195116.tif 000020