(57)【要約】【課題】  ＣＣＭモードをベースとした方式を適用した暗号通信における効率的で確実な通信を実現する構成を提供する。【解決手段】  複数のエンティティ間の通信において、カウンタモードによる暗号文とＣＢＣ−ＭＡＣによるメッセージ認証子を送受信するいわゆるＣＣＭモードをベースとした方式を適用し、カウンタ値を順次、更新してデータ送受信を行うとともに、カウンタ値を通知して、自己の保持するカウンタ値との比較によって同期確認を行なう。本構成によりエラーのない処理が実現される。例えば、通信エラー等の発生により、コマンドや返信データが消失した場合や、外部からのリプレイ攻撃、データ改竄が発生した場合においても、初期状態に戻って最初から通信をやり直すことなく、エラー発生時点からのコマンド再発行によるデータ処理再開が可能となる。【選択図】  図４
2007013366.tif 000002
【特許請求の範囲】
【請求項１】
カウンタ値を入力値として適用したカウンタモードに従った暗号処理によって生成する暗号文と、メッセージ認証子とを送受信する通信処理システムであり、
暗号文およびメッセージ認証子を送信する少なくとも１つのデータ送信エンティティは、
暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行する構成であり、
暗号文およびメッセージ認証子およびカウンタ値を受信するデータ受信エンティティは、
前記データ送信エンティティからの受信カウンタ値と、自己の保持カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行する構成であることを特徴とする通信処理システム。
【請求項２】
前記データ送信エンティティは、
前記データ受信エンティティからの正当な返信データが受信されない場合、送信済みデータの再送信処理を実行する構成であり、該データ再送信処理において、
自己のカウンタ値を更新し、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行ない、生成暗号文とメッセージ認証子、および更新カウンタ値を送信する処理を実行する構成であることを特徴とする請求項１に記載の通信処理システム。
【請求項３】
前記データ送信エンティティは、
前記データ再送信処理において、前記データ受信エンティティから受信予定の返信データの構成ブロック数に基づいて、自己の保持するカウンタ値を更新して、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行なう構成であることを特徴とする請求項２に記載の通信処理システム。
【請求項４】
前記データ送信エンティティは、
前記データ再送信処理において、自己の保持するカウンタ値を、予め設定した値のカウントアップによる更新を実行して、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行なう構成であることを特徴とする請求項２に記載の通信処理システム。
【請求項５】
前記予め設定した値は１または２であることを特徴とする請求項４に記載の通信処理システム。
【請求項６】
前記データ送信エンティティは、
暗号文またはメッセージ認証子の生成処理に際して、複数のカウンタ値を適用する構成であり、カウンタ値ｃｔｒを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒ）をメッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒ＋１をカウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする請求項１に記載の通信処理システム。
【請求項７】
前記データ送信エンティティは、
暗号文またはメッセージ認証子の生成処理に際して、２つのカウンタ値を適用する構成であり、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡ＋１を適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ＋１）を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする請求項１に記載の通信処理システム。
【請求項８】
前記データ受信エンティティは、
返信データに対応する暗号文またはメッセージ認証子の生成処理に際して、２つのカウンタ値を適用する構成であり、前記データ送信エンティティからの受信カウンタ値ｃｔｒＡに基づくカウンタ値の更新処理によって、
ｃｔｒＢ←ｃｔｒＡ＋２
更新カウンタ値ｃｔｒＢを生成し、該更新カウンタ値ｃｔｒＢを適用した暗号化データであるＥｎｃＫ（ｃｔｒＢ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＢ＋１を適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＢ＋１）を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする請求項７に記載の通信処理システム。
【請求項９】
前記データ送信エンティティは、
暗号文またはメッセージ認証子の生成処理に際して、１つのカウンタ値を適用する構成であり、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ＥｎｃＫ（ｃｔｒＡ））＋１を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする請求項１に記載の通信処理システム。
【請求項１０】
前記データ受信エンティティは、
返信データに対応する暗号文またはメッセージ認証子の生成処理に際して、１つのカウンタ値を適用する構成であり、前記データ送信エンティティからの受信カウンタ値ｃｔｒＡを適用した暗号化データであるＥｎｃＫ（ＥｎｃＫ（ＥｎｃＫ（ｃｔｒＡ）））を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡを適用した暗号化データであるＥｎｃＫ（ＥｎｃＫ（ＥｎｃＫ（ＥｎｃＫ（ｃｔｒＡ）））＋１を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする請求項９に記載の通信処理システム。
【請求項１１】
データ送信処理を実行する通信処理装置であり、
カウンタ値を入力値として適用したカウンタモードに従った暗号処理による暗号文生成処理と、メッセージ認証子の生成処理を実行するデータ処理部と、
暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行する通信部と、
を有することを特徴とする通信処理装置。
【請求項１２】
前記通信処理装置は、
データ受信エンティティからの正当な返信データが受信されない場合、送信済みデータの再送信処理を実行する構成であり、該データ再送信処理において、
自己のカウンタ値を更新し、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行ない、生成暗号文とメッセージ認証子、および更新カウンタ値を送信する処理を実行する構成であることを特徴とする請求項１１に記載の通信処理装置。
【請求項１３】
前記通信処理装置は、
前記データ再送信処理において、前記データ受信エンティティから受信予定の返信データの構成ブロック数に基づいて、自己の保持するカウンタ値を更新して、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行なう構成であることを特徴とする請求項１２に記載の通信処理装置。
【請求項１４】
前記通信処理装置は、
前記データ再送信処理において、自己の保持するカウンタ値を、予め設定した値のカウントアップによる更新を実行して、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行なう構成であることを特徴とする請求項１２に記載の通信処理装置。
【請求項１５】
前記予め設定した値は１または２であることを特徴とする請求項１４に記載の通信処理装置。
【請求項１６】
前記通信処理装置は、
暗号文またはメッセージ認証子の生成処理に際して、複数のカウンタ値を適用する構成であり、カウンタ値ｃｔｒを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒ）をメッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒ＋１をカウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする請求項１１に記載の通信処理装置。
【請求項１７】
前記通信処理装置は、
暗号文またはメッセージ認証子の生成処理に際して、２つのカウンタ値を適用する構成であり、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡ＋１を適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ＋１）を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする請求項１１に記載の通信処理装置。
【請求項１８】
前記通信処理装置は、
暗号文またはメッセージ認証子の生成処理に際して、１つのカウンタ値を適用する構成であり、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ＥｎｃＫ（ｃｔｒＡ））＋１を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする請求項１１に記載の通信処理装置。
【請求項１９】
通信データの受信処理および正当性確認を実行するデータ処理装置であり、
カウンタモードに従った暗号処理によって生成された暗号文と、メッセージ認証子と、前記メッセージ認証子生成処理またはカウンタモードに従った暗号処理において適用したカウンタ値を受信する通信部と、
自装置で更新処理を実行する自己カウンタ値を保持する記憶部と、
前記通信部において受信したカウンタ値と、前記記憶部に保持された自己カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行するデータ処理部と、
を有することを特徴とするデータ処理装置。
【請求項２０】
カウンタ値を入力値として適用したカウンタモードに従った暗号処理によって生成する暗号文と、メッセージ認証子とを送受信する通信処理方法であり、
暗号文およびメッセージ認証子を送信する少なくとも１つのデータ送信エンティティにおいて、暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行するステップと、
暗号文およびメッセージ認証子およびカウンタ値を受信するデータ受信エンティティにおいて、前記データ送信エンティティからの受信カウンタ値と、自己の保持カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行するステップと、
を有することを特徴とする通信処理方法。
【請求項２１】
データ送信処理を実行する通信処理方法であり、
カウンタ値を入力値として適用したカウンタモードに従った暗号処理による暗号文生成処理と、メッセージ認証子の生成処理を実行するデータ処理ステップと、
暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行する通信ステップと、
を有することを特徴とする通信処理方法。
【請求項２２】
通信データの受信処理および正当性確認を実行するデータ処理方法であり、
カウンタモードに従った暗号処理によって生成された暗号文と、メッセージ認証子と、前記メッセージ認証子生成処理またはカウンタモードに従った暗号処理において適用したカウンタ値を受信する通信ステップと、
前記通信ステップにおいて受信したカウンタ値と、記憶部に保持された自己カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行するデータ処理ステップと、
を有することを特徴とするデータ処理方法。
【請求項２３】
データ送信処理を通信処理装置において実行させるコンピュータ・プログラムであり、
カウンタ値を入力値として適用したカウンタモードに従った暗号処理による暗号文生成処理と、メッセージ認証子の生成処理を実行するデータ処理ステップと、
暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行する通信ステップと、
を有することを特徴とするコンピュータ・プログラム。
【請求項２４】
通信データの受信処理および正当性確認処理を通信処理装置において実行させるコンピュータ・プログラムであり、
カウンタモードに従った暗号処理によって生成された暗号文と、メッセージ認証子と、前記メッセージ認証子生成処理またはカウンタモードに従った暗号処理において適用したカウンタ値を受信する通信ステップと、
前記通信ステップにおいて受信したカウンタ値と、記憶部に保持された自己カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行するデータ処理ステップと、
を有することを特徴とするコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信処理装置、通信処理システム、および方法、並びにコンピュータ・プログラムに関する。さらに詳細には、通信処理装置間におけるデータ通信において、通信データの漏洩や改竄を防止するとともに、通信エラーの発見、復旧を効率的に行ない、安全なデータ通信を可能とした通信処理装置、通信処理システム、および方法、並びにコンピュータ・プログラムに関する。
【背景技術】
【０００２】
通信処理装置間でデータ通信を実行する場合セキュリティ確保が重要な問題である。特に、外部からのアクセスが可能な公開通信路を利用した通信を行なう場合などには、データ漏洩や改竄、その他の攻撃にさらされる可能性が高まる。公開通信路には、以下のような問題がある。
（ア）攻撃者により通信内容を読み取ることが可能である（通信データ傍受）
（イ）攻撃者により通信途中でデータを改変することも可能である（通信データ改竄）
（ウ）過去の通信データを蓄積し再送することが可能（再送攻撃）
（エ）送信したデータが、配送されない（送信データの消失）
【０００３】
例えば、このような公開通信路を利用して、相互通信を実行するエンティティＡがエンティティＢに対して、コマンドを発行し、ＢがＡからのコマンドを解釈して内部でデータ処理を行い、データ処理結果を含む返答データをＡに対して送信する通信モデルにおいて、上述のような（ア）〜（エ）の問題が発生すると、正しいデータ処理結果が得られない、あるいはデータ処理結果の漏洩が検出できないなどの問題が発生する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明は、上述の問題点に鑑みてなされたものであり、通信処理装置間においてデータ通信を実行する場合、上述した（ア）〜（エ）の通信データ傍受、通信データ改竄、再送攻撃、送信データの消失の可能性がある公開通信路を適用した場合においても、データ漏洩、改竄を防止し、様々な攻撃に対する耐性も備えた安全なデータ通信を実現する通信処理装置、通信処理システム、および方法、並びにコンピュータ・プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の第１の側面は、
カウンタ値を入力値として適用したカウンタモードに従った暗号処理によって生成する暗号文と、メッセージ認証子とを送受信する通信処理システムであり、
暗号文およびメッセージ認証子を送信する少なくとも１つのデータ送信エンティティは、
暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行する構成であり、
暗号文およびメッセージ認証子およびカウンタ値を受信するデータ受信エンティティは、
前記データ送信エンティティからの受信カウンタ値と、自己の保持カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行する構成であることを特徴とする通信処理システムにある。
【０００６】
さらに、本発明の通信処理システムの一実施態様において、前記データ送信エンティティは、前記データ受信エンティティからの正当な返信データが受信されない場合、送信済みデータの再送信処理を実行する構成であり、該データ再送信処理において、自己のカウンタ値を更新し、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行ない、生成暗号文とメッセージ認証子、および更新カウンタ値を送信する処理を実行する構成であることを特徴とする。
【０００７】
さらに、本発明の通信処理システムの一実施態様において、前記データ送信エンティティは、前記データ再送信処理において、前記データ受信エンティティから受信予定の返信データの構成ブロック数に基づいて、自己の保持するカウンタ値を更新して、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行なう構成であることを特徴とする。
【０００８】
さらに、本発明の通信処理システムの一実施態様において、前記データ送信エンティティは、前記データ再送信処理において、自己の保持するカウンタ値を、予め設定した値のカウントアップによる更新を実行して、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行なう構成であることを特徴とする。
【０００９】
さらに、本発明の通信処理システムの一実施態様において、前記予め設定した値は１または２であることを特徴とする。
【００１０】
さらに、本発明の通信処理システムの一実施態様において、前記データ送信エンティティは、暗号文またはメッセージ認証子の生成処理に際して、複数のカウンタ値を適用する構成であり、カウンタ値ｃｔｒを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒ）をメッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒ＋１をカウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする。
【００１１】
さらに、本発明の通信処理システムの一実施態様において、前記データ送信エンティティは、暗号文またはメッセージ認証子の生成処理に際して、２つのカウンタ値を適用する構成であり、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡ＋１を適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ＋１）を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする。
【００１２】
さらに、本発明の通信処理システムの一実施態様において、前記データ受信エンティティは、返信データに対応する暗号文またはメッセージ認証子の生成処理に際して、２つのカウンタ値を適用する構成であり、前記データ送信エンティティからの受信カウンタ値ｃｔｒＡに基づくカウンタ値の更新処理によって、
ｃｔｒＢ←ｃｔｒＡ＋２
更新カウンタ値ｃｔｒＢを生成し、該更新カウンタ値ｃｔｒＢを適用した暗号化データであるＥｎｃＫ（ｃｔｒＢ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＢ＋１を適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＢ＋１）を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする。
【００１３】
さらに、本発明の通信処理システムの一実施態様において、前記データ送信エンティティは、暗号文またはメッセージ認証子の生成処理に際して、１つのカウンタ値を適用する構成であり、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ＥｎｃＫ（ｃｔｒＡ））＋１を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする。
【００１４】
さらに、本発明の通信処理システムの一実施態様において、前記データ受信エンティティは、返信データに対応する暗号文またはメッセージ認証子の生成処理に際して、１つのカウンタ値を適用する構成であり、前記データ送信エンティティからの受信カウンタ値ｃｔｒＡを適用した暗号化データであるＥｎｃＫ（ＥｎｃＫ（ＥｎｃＫ（ｃｔｒＡ）））を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡを適用した暗号化データであるＥｎｃＫ（ＥｎｃＫ（ＥｎｃＫ（ＥｎｃＫ（ｃｔｒＡ）））＋１を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする。
【００１５】
さらに、本発明の第２の側面は、
データ送信処理を実行する通信処理装置であり、
カウンタ値を入力値として適用したカウンタモードに従った暗号処理による暗号文生成処理と、メッセージ認証子の生成処理を実行するデータ処理部と、
暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行する通信部と、
を有することを特徴とする通信処理装置にある。
【００１６】
さらに、本発明の通信処理装置の一実施態様において、前記通信処理装置は、データ受信エンティティからの正当な返信データが受信されない場合、送信済みデータの再送信処理を実行する構成であり、該データ再送信処理において、自己のカウンタ値を更新し、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行ない、生成暗号文とメッセージ認証子、および更新カウンタ値を送信する処理を実行する構成であることを特徴とする。
【００１７】
さらに、本発明の通信処理装置の一実施態様において、前記通信処理装置は、前記データ再送信処理において、前記データ受信エンティティから受信予定の返信データの構成ブロック数に基づいて、自己の保持するカウンタ値を更新して、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行なう構成であることを特徴とする。
【００１８】
さらに、本発明の通信処理装置の一実施態様において、前記通信処理装置は、前記データ再送信処理において、自己の保持するカウンタ値を、予め設定した値のカウントアップによる更新を実行して、該更新カウンタ値を適用して再送信データについてのカウンタモードに従った暗号文生成およびメッセージ認証子生成を行なう構成であることを特徴とする。
【００１９】
さらに、本発明の通信処理装置の一実施態様において、前記予め設定した値は１または２であることを特徴とする。
【００２０】
さらに、本発明の通信処理装置の一実施態様において、前記通信処理装置は、暗号文またはメッセージ認証子の生成処理に際して、複数のカウンタ値を適用する構成であり、カウンタ値ｃｔｒを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒ）をメッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒ＋１をカウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする。
【００２１】
さらに、本発明の通信処理装置の一実施態様において、前記通信処理装置は、暗号文またはメッセージ認証子の生成処理に際して、２つのカウンタ値を適用する構成であり、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡ＋１を適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ＋１）を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする。
【００２２】
さらに、本発明の通信処理装置の一実施態様において、前記通信処理装置は、暗号文またはメッセージ認証子の生成処理に際して、１つのカウンタ値を適用する構成であり、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ｃｔｒＡ）を、メッセージ認証子生成に適用する初期値（ＩＶ）とし、カウンタ値ｃｔｒＡを適用して生成した暗号化データであるＥｎｃＫ（ＥｎｃＫ（ｃｔｒＡ））＋１を、カウンタモードに従った暗号処理に適用するカウンタ初期値として利用する構成であることを特徴とする。
【００２３】
さらに、本発明の第３の側面は、
通信データの受信処理および正当性確認を実行するデータ処理装置であり、
カウンタモードに従った暗号処理によって生成された暗号文と、メッセージ認証子と、前記メッセージ認証子生成処理またはカウンタモードに従った暗号処理において適用したカウンタ値を受信する通信部と、
自装置で更新処理を実行する自己カウンタ値を保持する記憶部と、
前記通信部において受信したカウンタ値と、前記記憶部に保持された自己カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行するデータ処理部と、
を有することを特徴とするデータ処理装置にある。
【００２４】
さらに、本発明の第４の側面は、
カウンタ値を入力値として適用したカウンタモードに従った暗号処理によって生成する暗号文と、メッセージ認証子とを送受信する通信処理方法であり、
暗号文およびメッセージ認証子を送信する少なくとも１つのデータ送信エンティティにおいて、暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行するステップと、
暗号文およびメッセージ認証子およびカウンタ値を受信するデータ受信エンティティにおいて、前記データ送信エンティティからの受信カウンタ値と、自己の保持カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行するステップと、
を有することを特徴とする通信処理方法にある。
【００２５】
さらに、本発明の第５の側面は、
データ送信処理を実行する通信処理方法であり、
カウンタ値を入力値として適用したカウンタモードに従った暗号処理による暗号文生成処理と、メッセージ認証子の生成処理を実行するデータ処理ステップと、
暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行する通信ステップと、
を有することを特徴とする通信処理方法にある。
【００２６】
さらに、本発明の第６の側面は、
通信データの受信処理および正当性確認を実行するデータ処理方法であり、
カウンタモードに従った暗号処理によって生成された暗号文と、メッセージ認証子と、前記メッセージ認証子生成処理またはカウンタモードに従った暗号処理において適用したカウンタ値を受信する通信ステップと、
前記通信ステップにおいて受信したカウンタ値と、記憶部に保持された自己カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行するデータ処理ステップと、
を有することを特徴とするデータ処理方法にある。
【００２７】
さらに、本発明の第７の側面は、
データ送信処理を通信処理装置において実行させるコンピュータ・プログラムであり、
カウンタ値を入力値として適用したカウンタモードに従った暗号処理による暗号文生成処理と、メッセージ認証子の生成処理を実行するデータ処理ステップと、
暗号文またはメッセージ認証子の送信処理に際して、送信暗号文またはメッセージ認証子の生成に適用した少なくとも１つのカウンタ値の送信を実行する通信ステップと、
を有することを特徴とするコンピュータ・プログラムにある。
【００２８】
さらに、本発明の第８の側面は、
通信データの受信処理および正当性確認処理を通信処理装置において実行させるコンピュータ・プログラムであり、
カウンタモードに従った暗号処理によって生成された暗号文と、メッセージ認証子と、前記メッセージ認証子生成処理またはカウンタモードに従った暗号処理において適用したカウンタ値を受信する通信ステップと、
前記通信ステップにおいて受信したカウンタ値と、記憶部に保持された自己カウンタ値との比較を実行し、該比較結果に基づく受信データの正当性確認処理を実行するデータ処理ステップと、
を有することを特徴とするコンピュータ・プログラムにある。
【００２９】
なお、本発明のコンピュータ・プログラムは、例えば、様々なプログラム・コードを実行可能な汎用コンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体、例えば、ＣＤやＦＤ、ＭＯなどの記憶媒体、あるいは、ネットワークなどの通信媒体によって提供可能なコンピュータ・プログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、コンピュータ・システム上でプログラムに応じた処理が実現される。
【００３０】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づく、より詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【００３１】
本発明の構成によれば、複数のエンティティ間の通信において、カウンタモードによる暗号文とＣＢＣ−ＭＡＣによるメッセージ認証子を送受信するいわゆるＣＣＭモードをベースとした方式を適用し、カウンタ値を順次、更新してデータ送受信を行うとともに、カウンタ値を通知して、自己の保持するカウンタ値との比較によって同期確認を行なう構成とすることで、エラーのない処理が実現される。例えば、通信エラー等の発生により、コマンドや返信データが消失した場合や、外部からのリプレイ攻撃、データ改竄が発生した場合においても、初期状態に戻って最初から通信をやり直すことなく、エラー発生時点からのコマンド再発行によるデータ処理の再開が可能となり、効率的で確実なデータ通信、データ処理が実現される。
【発明を実施するための最良の形態】
【００３２】
以下、図面を参照しながら、本発明の通信処理装置、通信処理システム、および方法、並びにコンピュータ・プログラムの詳細について説明する。本発明は、暗号化＋偽造防止＋再送検出メカニズムを持ち、データの消失に対しても復旧が可能であり、なおかつシンプルな構成を有するデータ通信を実現する。なお、以下において説明する実施例においては、データ送受信を行なうエンティティＡ，Ｂ間の通信実行システムを例として説明する。
【００３３】
図１に示すように、エンティティＡ１０１がエンティティＢ１０２に対して、コマンドを発行し、エンティティＢ１０２はエンティティＡ１０１からのコマンドを解釈して内部でデータ処理を行い、データ処理結果を含む返答データをエンティティＡ１０１に対して送信する通信モデルを例として説明する。エンティティＡ１０１とエンティティＢ１０２との間では暗号化通信が実行される。本発明では、暗号化方式の基本関数として共通鍵ブロック暗号を用いるものとする。共通鍵ブロック暗号は、暗号化鍵と復号鍵を共通の鍵として設定し、共通鍵をベースとして複数の鍵を生成して、生成した複数の鍵を用いてブロック単位（６４ビット，１２８ビットなど）のデータ変換処理を繰り返し実行する暗号方式である。
【００３４】
複数のブロックにまたがるデータの暗号化にはカウンタ（ＣＴＲ：Ｃｏｕｎｔｅｒ）モードと呼ばれるカウンタ値を暗号化した結果を平文データと排他的論理和して暗号文を得る方法を適用するものとする。また通信データの偽造防止メカニズムとしてＣＢＣ−ＭＡＣ（Ｃｉｐｈｅｒｅｄ Ｂｌｏｃｋ Ｃｈａｉｎｉｎｇ−Ｍｅｓｓａｇｅ Ａｕｔｈｅｎｔｉｃａｔｉｏｎ Ｃｏｄｅ）を用いることとする。このカウンタモードによって生成した暗号文と、ＣＢＣ−ＭＡＣによって生成したメッセージ認証子を併用した方法はいわゆるＣＣＭモードとして知られており、暗号化に加え、メッセージの完全性、すなわち改竄の有無の検証も保証できるモードである。
【００３５】
図２を参照して、ＣＣＭモードをベースとした方式の概要について説明する。なお、エンティティＡ，Ｂの間で鍵共有のプロトコルが行われ、利用するブロック暗号用の鍵Ｋを共有した後において、データ送受信を実行する場合を想定する。
【００３６】
図２（ａ）は、送信データの構成データとしての平文データを、所定データ長単位でブロック分割した［（ａ１）平文ブロックデータＭ１〜Ｍｎ］と、これらの平文ブロックデータに基づいて、データ送信側が生成する暗号化データ等からなる［（ａ２）送信データ］を示している。図２（ｂ）は、データ送信側におけるデータ処理、すなわち、ＣＢＣ−ＭＡＣおよびカウンタモードを適用したＣＣＭモードをベースとした方式に基づく送信データの生成処理を示している。
【００３７】
例えば、図２（ａ１）に示すｎブロックのメッセージＭ１〜Ｍｎを、暗号化して通信相手に送る場合には、図２（ａ２）に示すように、ｎブロックのメッセージＭ１〜Ｍｎに基づいて、カウンタモードを適用した暗号文生成処理によって生成した暗号文ブロックデータＣ１〜Ｃｎと、ｎブロックのメッセージＭ１〜Ｍｎに基づいて、ＣＢＣ−ＭＡＣを適用したメッセージ認証子生成処理によって生成したメッセージ認証子Ｔを送信する。ＣＣＭモードをベースとした方式は、これら暗号文ブロックデータＣ１〜Ｃｎと、メッセージ認証子Ｔを送信する構成としていた。本発明においては、さらに、図２（ａ２）に示すカウンタ値Ｃｔｒを送信する。
【００３８】
まず、一般的なＣＣＭモードをベースとした方式による暗号文生成処理（カウンタモード）と、メッセージ認証子生成処理（ＣＢＣ−ＭＡＣ）の各処理について、図２（ｂ）を参照して説明する。
【００３９】
図２（ｂ）には、データ送信側におけるデータ処理、すなわち、ＣＢＣ−ＭＡＣおよびカウンタモードを適用したＣＣＭモードをベースとした方式に基づく送信データの生成処理を示している。（ｂ１）に示すＣＢＣ−ＭＡＣでは、通信データの偽造防止メカニズムとしてのメッセージ認証子（ＭＡＣ：Ｍｅｓｓａｇｅ Ａｕｔｈｅｎｔｉｃａｔｉｏｎ Ｃｏｄｅ）を、平文ブロックデータＭ１〜Ｍｎに基づいて生成する。生成結果がメッセージ認証子［Ｔ］である。（ｂ２）に示すカウンタ（ＣＴＲ）モードでは、平文ブロックデータＭ１〜Ｍｎに基づいて、暗号文ブロックデータＣ１〜Ｃｎを生成する。カウンタ値（Ｃｔｒ１〜Ｃｔｒｎ）を暗号化した結果［Ｘ１〜Ｘｎ］を平文ブロックデータＭ１〜Ｍｎと各々排他的論理和して暗号文ブロックデータ［Ｃ１〜Ｃｎ］を得る。カウンタ値の中の１つ（Ｃｔｒ１）は、カウンタ初期値として生成関数１５１において演算を実行して作成され、Ｃｔｒ２〜は、
Ｃｔｒｉ＝Ｃｔｒｉ−１＋１
の関係であり、１つずつ増分されたカウンタ値が適用される。
【００４０】
最初にデータ送信を実行するデータ送信側では、図２（ｂ）に示すように、ＣＢＣ−ＭＡＣ用のＩＶ値（初期値）のシードとしての種Ｂ０（１ブロック分）とｎ個の連続するカウンタ値Ｃｔｒｉ（一番小さな値をカウンタ初期値と呼ぶ）を、例えば乱数（ｎｏｎｃｅ）を所定の演算部１５１において演算を実行して作成する。
【００４１】
なお、（ｂ１）ＣＢＣ−ＭＡＣ、（ｂ２）カウンタ（ＣＴＲ）モードの各々に示すブロック［Ｅ］は、暗号化処理部を示し、エンティティＡ，Ｂの間で実行済みの鍵共有のプロトコルによって共有したブロック暗号用の共通鍵Ｋまたは共通鍵Ｋに基づいて生成される鍵を適用した暗号処理を実行する暗号処理部であり、例えばＡＥＳ暗号アルゴリズムに従った暗号処理を行なう。
【００４２】
図２に示すように、ＣＣＭモードをベースとした方式では、平文ブロックデータＭ１〜Ｍｎの暗号化には、（ｂ２）に示すカウンタ（ＣＴＲ：Ｃｏｕｎｔｅｒ）モードと呼ばれるカウンタ値を暗号化した結果と平文データとの排他的論理和によって暗号文ブロックデータ［Ｃ１〜Ｃｎ］を生成するとともに、通信データの改竄検証に適用するメッセージ認証子としてのＭＡＣ値［Ｔ］をＣＢＣ−ＭＡＣを用いて生成する。
【００４３】
ＣＣＭモードをベースとした方式は、このようにカウンタモードで通信メッセージの暗号化を行なうのみならず、ＣＢＣ−ＭＡＣによってメッセージ認証子を生成して送信する構成であり、通信メッセージの完全性、すなわち改竄の有無の検証も保証できるモードである。
【００４４】
なお、ＣＢＣ−ＭＡＣおよびカウンタモードで適用されるシード（種）Ｂ０と、カウンタ値Ｃｔｒ１〜Ｃｔｒｎとは、すべての通信を通じて重複がない設定とすることが望ましい。例えば、エンティティＡＢ間で通信を実行する場合、エンティティＡからコマンドを暗号化して送信し、エンティティＢがコマンドに基づくデータ処理結果を返信データとしてエンティティＡに送信する処理を、複数のコマンドについて繰り返し実行するシーケンスでは、ｎ番目のコマンド送信の際の暗号処理に適用したカウンタ値と、次のｎ＋１番目のコマンド送信の際の暗号処理に適用するカウンタ値は、異なる設定とされる。一般には、順次、カウンタ値をカウントアップする処理を行なう。
【００４５】
本発明ではＣＣＭモードをベースとした方式におけるＣＢＣ−ＭＡＣのＩＶ値（初期値）とカウンタ値の初期値（Ｃｔｒ１）の選択の自由さに着目し、例えば公開通信路を適用したデータ通信における前述した問題点、すなわち、
（ア）攻撃者により通信内容を読み取ることが可能である（通信データ傍受）
（イ）攻撃者により通信途中でデータを改変することも可能である（通信データ改竄）
（ウ）過去の通信データを蓄積し再送することが可能（再送攻撃）
（エ）送信したデータが、配送されない（送信データの消失）
これらの問題を含む公開通信路を適用したデータ通信においても、高い安全性が期待できる手法を提案する。
【００４６】
具体的には、
（ａ）カウンタモードを適用した暗号文生成処理によって生成した暗号文ブロックデータＣ１〜Ｃｎと、
（ｂ）ｎブロックのメッセージＭ１〜Ｍｎに基づいて、ＣＢＣ−ＭＡＣを適用したメッセージ認証子生成処理によって生成したメッセージ認証子Ｔ、
に加え、
（ｃ）様々な設定としたカウンタ値Ｃｔｒ、
を送信する構成とすることで、上記問題点を解決した手法を提案する。これまでのＣＣＭモードをベースとした方式では、（ａ）暗号文ブロックデータＣ１〜Ｃｎ、（ｂ）メッセージ認証子Ｔの送信を行なっていたが、本発明は、これらのデータに、（ｃ）様々な設定としたカウンタ値Ｃｔｒを付加したデータ送信を行なう。
【００４７】
以下、エンティティＡとエンティティＢとの間で、通信が実行されると想定し、エンティティＡが、エンティティＢに対して複数のコマンドを、上述したＣＣＭモードをベースとした方式を適用して送信し、エンティティＢがエンティティＡから受信したコマンドに対応するデータ処理を内部処理として実行し、実行したデータ処理結果をエンティティＡに対して、ＣＣＭモードをベースとした方式で返信する処理を行なうものとして、
（１）カウンタ値（Ｃｔｒ）送信を行なわない一般的なＣＣＭモードをベースとした方式を適用した通信処理シーケンス
（２）本発明に従ったカウンタ値（Ｃｔｒ）送信を行なうＣＣＭモードをベースとした方式を適用した通信処理シーケンス
のそれぞれについて順次、説明する。
【００４８】
なお、エンティティＡからエンティティＢ間では、複数のコマンド送信、コマンドに基づくデータ処理結果の返信が繰り返し実行されるものとし、
エンティティＡが発行する各コマンドのブロック数を、
１番目コマンド：ブロック数＝ｍ１、
２番目コマンド：ブロック数＝ｍ２、
３番目コマンド：ブロック数＝ｍ３、
：
ｋ番目コマンド：ブロック数＝ｍｋ、
とし、一方、これら１〜ｋ番目のコマンドに対応するデータ処理結果であるエンティティＢからの返信データのブロック数を、
１番目返信データ：ブロック数＝ｎ１、
２番目返信データ：ブロック数＝ｎ２、
３番目返信データ：ブロック数＝ｎ３、
：
ｋ番目返信データ：ブロック数＝ｎｋ、
であるとして説明を行なう。
【００４９】
［（１）一般的なＣＣＭモードをベースとした方式を適用した場合の処理シーケンス］
まず、カウンタ値（Ｃｔｒ）送信を行なわない一般的なＣＣＭモードをベースとした方式を適用した場合の通信処理シーケンスについて、図３を参照して説明する。
【００５０】
図３は、エンティティＡとエンティティＢ間で、鍵共有のプロトコルが行われ、利用するブロック暗号用の共通鍵Ｋを、エンティティＡとエンティティＢ間で共有した後、第ｉ番目のコマンドをエンティティＡからエンティティＢに対して発行する処理以降の処理シーケンスを示している。また、Ａ，Ｂは内部にブロックサイズのカウンタｃｔｒを持っているものとする。
【００５１】
（ａ）初期化処理
ステップＳ１００の初期化処理は、Ａ，Ｂ共通の処理として実行される。
Ａ，Ｂ間で共通鍵Ｋの共有が完了したら、Ａ，Ｂそれぞれの内部カウンタｃｔｒの値を０に初期化する。
【００５２】
（ｂ）ｉ番目のコマンド発行処理
ステップＳ１０１〜Ｓ１０４は、第ｉ番目のコマンドをエンティティＡからエンティティＢに対して上述したＣＣＭモードをベースとした方式を適用して送信し、エンティティＢがエンティティＡから受信したコマンドに対応するデータ処理を内部処理として実行し、実行したデータ処理結果をエンティティＡに対して、ＣＣＭモードをベースとした方式で返信する処理を行なう際の通信処理シーケンスを示している。
【００５３】
まず、ステップＳ１０１は、ｉ番目のコマンド発行処理であり、コマンド発行側であるエンティティＡの実行する処理である。ここでＡの発行するコマンドは、ｉ番目のコマンドであり、すでにｉ−１番目までのコマンド発行は完了しているものとする。ｉ番目のコマンドのブロック数＝ｍｉであり、コマンド発行処理は、以下の各処理によって構成される。
【００５４】
Ａ１．ｍｉブロックのコマンドデータを準備
Ａ２．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとしてメッセージ認証子Ｔを生成する。
Ａ３．ｃｔｒＡ＋１をカウンタモード暗号化のカウンタ初期値として暗号化して暗号文Ｃを得る。
Ａ４．暗号文Ｃ，メッセージ認証子Ｔを送信
Ａ５．ｃｔｒＡ←ｃｔｒＡ＋ｍｉ＋２
【００５５】
上記処理Ａ１〜Ａ５について説明する。
処理Ａ１［ｍｉブロックのコマンドデータを準備］
この処理は、エンティティＡからエンティティＢに対して送信する平文データとしてのブロック数＝ｍｉのコマンドデータを準備する処理である。このブロック数＝ｍｉのコマンドデータに基づくカウンタモードによる暗号文と、ＣＢＣ−ＭＡＣによるメッセージ認証子Ｔを生成する。
【００５６】
処理Ａ２［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとしてメッセージ認証子Ｔを生成する］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）生成処理である。ｉ番目のコマンドを構成するｍｉ個の平文ブロック［Ｍ１〜Ｍｍｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｔ］を算出する。なお、ＥＮＣＫ（ｃｔｒＡ）は、カウンタ値（ｃｔｒＡ）の共通鍵Ｋに基づく暗号化データを示す。暗号化アルゴリズムは例えばＡＥＳ暗号アルゴリズムである。
【００５７】
処理Ａ３［ｃｔｒＡ＋１をカウンタモード暗号化のカウンタ初期値として暗号化して暗号文Ｃを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによる暗号文生成処理である。この場合、ｉ番目のコマンドを構成するブロック数はｍｉであるので、カウンタｃｔｒＡ＋１〜ｃｔｒＡ＋１＋ｍｉを、それぞれを暗号化し、暗号化カウンタ値［Ｘ］を生成し、生成した暗号化カウンタ値と、ｉ番目のコマンドを構成するｍｉ個のブロックの各々との排他論理和（ＸＯＲ）演算を実行して、暗号化ブロックデータ［Ｃ］を得る。暗号化ブロックデータ［Ｃ］もｍｉ個のブロックから構成される暗号化ブロック［Ｃ１〜Ｃｍｉ］である。
【００５８】
処理Ａ４［暗号文Ｃ，メッセージ認証子Ｔを送信］は、上述した処理において生成した暗号文［Ｃ＝Ｃ１〜Ｃｍｉ］と、メッセージ認証子［Ｔ］を送信する処理である。
【００５９】
処理Ａ５［ｃｔｒＡ←ｃｔｒＡ＋ｍｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋ｍｉ＋２として更新する。このカウンタ更新処理は、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＡは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＡ＋１〜ｃｔｒＡ＋ｍｉ＋１は、カウンタモードの暗号処理で使用している。
従って、ｃｔｒＡ＋ｍｉ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
【００６０】
（ｃ）コマンド受信およびデータ返信
ステップＳ１０２およびステップＳ１０３に示す処理であり、コマンド受信側のエンティティＢによって実行される処理である。ステップＳ１０２がコマンドの受信と確認処理であり、ステップＳ１０３が、確認されたコマンドに基づくデータ処理結果の暗号化処理を含む送信データの生成と送信処理に相当する。
【００６１】
ステップＳ１０２のコマンドの受信と確認処理には以下の処理が含まれる。
Ｂ１．暗号文Ｃ、およびメッセージ認証子Ｔを受信
Ｂ２．ｃｔｒＢ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｃを復号してコマンドを得る
Ｂ３．ＥＮＣＫ（ｃｔｒＢ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｔ'生成
Ｂ４．Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る
Ｂ５．ｃｔｒＢ←ｃｔｒＢ＋ｍｉ＋２
【００６２】
上記処理Ｂ１〜Ｂ５について説明する。
処理Ｂ１［暗号文Ｃ、およびメッセージ認証子Ｔを受信］は、エンティティＡからの暗号文［Ｃ］とＭＡＣ値［Ｔ］を受信する処理である。
処理Ｂ２［ｃｔｒＢ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｃを復号してコマンドを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによるデータ復号処理である。図２（ｂ２）に示す入力データとして、暗号文ブロック［Ｃ＝Ｃ１〜Ｃｍｉ］を入力して、ｃｔｒＢ＋１をカウンタ初期値として設定した暗号処理によって、平文ブロック［Ｍ１〜Ｍｍｉ］を得る。
【００６３】
処理Ｂ３［ＥＮＣＫ（ｃｔｒＢ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｔ'生成］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）の生成処理である。ここでは、処理Ｂ２において、エンティティＡからの受信暗号文に基づく復号データとしての平文ブロック［Ｍ１〜Ｍｍｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＢ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｔ'］を算出する。
【００６４】
処理Ｂ４［Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る］は、エンティティＡから受信したオリジナル平文データに基づくメッセージ認証子Ｔと、受信暗号文の復号データに基づくメッセージ認証子Ｔ'が一致するか否か、すなわちＴ＝Ｔ'が成立するか否かを判定する。Ｔ＝Ｔ'が成立すれば、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｍｉ］に一致するデータであり改竄のないデータ（コマンド）であると判定し、次の処理に進む。Ｔ＝Ｔ'が成立しない場合は、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｍｉ］に一致しないデータであり改竄のなされたデータであると判定し、次の処理に進むことなく、コマンド待ちの状態に戻る。
【００６５】
処理Ｂ５［ｃｔｒＢ←ｃｔｒＢ＋ｍｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＢ＋ｍｉ＋２として更新する。このカウンタ更新処理も、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＢは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＢ＋１〜ｃｔｒＢ＋ｍｉ＋１は、カウンタモードを適用したデータ復号処理で使用している。
従って、ｃｔｒＢ＋ｍｉ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
このカウンタ更新によって、カウンタ値は、エンティティＡ，Ｂで等しい値となり、同期のとれた値に設定される。
【００６６】
ステップＳ１０３は、ステップＳ１０２において、改竄のないことが確認されたコマンドに基づくデータ処理結果の暗号化処理を含む送信データの生成と送信処理である。ステップＳ１０３の処理には、以下の処理が含まれる。
Ｂ６．ｎｉブロックの返信データを準備
Ｂ７．ＥＮＣＫ（ｃｔｒＢ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する
Ｂ８．ｃｔｒＢ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る
Ｂ９．暗号文Ｄ、メッセージ認証子Ｕを送信する
Ｂ１０．ｃｔｒＢ←ｃｔｒＢ＋ｎｉ＋２
【００６７】
上記処理Ｂ６〜Ｂ１０について説明する。
処理Ｂ６［ｎｉブロックの返信データを準備］
この処理は、エンティティＡから受信した暗号文Ｃに基づく復号結果として得られたコマンドに基づく処理結果として、ｎｉブロックの返信データを準備する処理である。
【００６８】
処理Ｂ７［ＥＮＣＫ（ｃｔｒＢ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）生成処理である。返信データを構成するｎｉ個の平文ブロック［Ｍ１〜Ｍｎｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＢ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｕ］を算出する。なお、初期値（ＩＶ）の算出に用いるカウンタ値ｃｔｒＢは、前述の処理Ｂ５．ｃｔｒＢ←ｃｔｒＢ＋ｍｉ＋２において、更新されたカウンタ値ｃｔｒＢである。
【００６９】
処理Ｂ８［ｃｔｒＢ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによる暗号文生成処理である。この場合、ｎｉブロックの返信データを構成するブロック数はｎｉであるので、カウンタｃｔｒＢ＋１〜ｃｔｒＢ＋１＋ｎｉを、それぞれを暗号化し、暗号化カウンタ値［Ｘ］を生成し、生成した暗号化カウンタ値と、返信データを構成するｎｉ個のブロックの各々との排他論理和（ＸＯＲ）演算を実行して、暗号化ブロックデータ［Ｄ］を得る。暗号化ブロックデータ［Ｄ］もｎｉ個のブロックから構成される暗号化ブロック［Ｄ１〜Ｄｎｉ］である。
【００７０】
処理Ｂ９［暗号文Ｄ、メッセージ認証子Ｕを送信する］は、上述した処理において生成した暗号文［Ｄ＝Ｄ１〜Ｄｎｉ］と、メッセージ認証子［Ｕ］を送信する処理である。
【００７１】
処理Ｂ１０［ｃｔｒＢ←ｃｔｒＢ＋ｎｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＢ＋ｎｉ＋２として更新する。このカウンタ更新処理は、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＢは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＢ＋１〜ｃｔｒＢ＋ｎｉ＋１は、カウンタモードの暗号処理で使用している。
従って、ｃｔｒＢ＋ｎｉ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
【００７２】
（ｄ）返信データ受信および確認
次に、エンティティＢからの返信データを受信したエンティティＡの処理がステップＳ１０４において実行される。ステップＳ１０４の返信データの受信と確認処理には以下の処理が含まれる。
Ａ６．暗号文Ｄ、およびメッセージ認証子Ｕを受信
Ａ７．ｃｔｒＡ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｄを復号して返信データを得る
Ａ８．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ'生成
Ａ９．Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、返信データ待ち状態に戻る
Ａ１０．ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２
【００７３】
上記処理Ａ６〜Ａ１０について説明する。
処理Ａ６［暗号文Ｄ、およびメッセージ認証子Ｕを受信］は、エンティティＢからの暗号文［Ｄ］とＭＡＣ値［Ｕ］を受信する処理である。
処理Ａ７［ｃｔｒＡ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｄを復号して返信データを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによるデータ復号処理である。図２（ｂ２）に示す入力データとして、暗号文ブロック［Ｄ＝Ｄ１〜Ｄｎｉ］を入力して、ｃｔｒＡ＋１をカウンタ初期値として設定した暗号処理によって、平文返信データブロック［Ｍ１〜Ｍｎｉ］を得る。
【００７４】
処理Ａ８［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ'生成］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）の生成処理である。ここでは、処理Ａ７において、エンティティＢからの受信暗号文に基づいて生成した復号データとしての平文ブロック［Ｍ１〜Ｍｎｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｕ'］を算出する。
【００７５】
処理Ａ９［Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、返信データ待ち状態に戻る］は、エンティティＢから受信したオリジナル返信データに基づくメッセージ認証子Ｕと、受信暗号文の復号データに基づくメッセージ認証子Ｕ'が一致するか否か、すなわちＵ＝Ｕ'が成立するか否かを判定する。Ｕ＝Ｕ'が成立すれば、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｎｉ］に一致するデータであり改竄のないデータ（返信データ）であると判定し、次の処理に進む。Ｕ＝Ｕ'が成立しない場合は、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｎｉ］に一致しないデータであり改竄のなされた返信データであると判定し、次の処理に進むことなく、返信データ待ちの状態に戻る。
【００７６】
処理Ａ１０［ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋ｎｉ＋２として更新する。このカウンタ更新処理も、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＡは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＡ＋１〜ｃｔｒＢ＋ｎｉ＋１は、カウンタモードを適用したデータ復号処理で使用している。
従って、ｃｔｒＡ＋ｎｉ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
このカウンタ更新によって、カウンタ値は、エンティティＡ，Ｂで等しい値となり、同期のとれた値に設定される。
【００７７】
その後、エンティティＡにおける次のコマンドの発行処理、エンティティＢにおけるコマンドに基づく返信データ生成、送信処理、エンティティＡにおける返信データの受信確認処理。これらの処理がステップＳ１０１〜Ｓ１０４と同様の処理として繰り返し実行される。ただし、カウンタ値は、双方の装置で、順次、更新される。
【００７８】
このようにカウンタモードによる暗号文とＣＢＣ−ＭＡＣによるメッセージ認証子を送受信するＣＣＭモードをベースとした方式では、カウンタ値を順次、更新して、データ送受信を行い、データ送受信を行なう双方の装置において、カウンタ値を同期した状態とすることで、エラーのない処理が実現される。
【００７９】
利用可能なカウンタ値が一巡して０に戻れば同じ値を適用する場合があるが、カウンタサイズが十分に大きければ、一連の通信処理の終了まで、異なるカウンタ値が適用されることになる。このＣＣＭモードをベースとした方式による通信処理では、秘匿および改竄検出は実現されている。また、再送攻撃に対してもカウンタ値の不一致により、メッセージ認証子の不一致、復号エラーなどが発生して、受理されないことになるため耐性を持つ。
【００８０】
しかし、上記の方式では、エンティティＡが、コマンドを発行したが、エンティティＢから返信をもらえない状態に陥った場合を考えると問題が生ずる。例えば、エンティティＢからの返信が、エンティティＡにおいて受領できない理由としては以下の状況が想定される。
１）エンティティＡからの送信コマンドが消失した
２）エンティティＡからの送信コマンドが改竄されてエンティティＢは処理を停止した
３）エンティティＢの返信データが消失した
【００８１】
エンティティＢから、ある一定の時間が経過しても返信が来ない場合、エンティティＡはタイムアウトであるとし再度コマンドを発行できる構成である方が望ましい。このコマンド再発行の際に、再発行コマンドに用いるカウンタ値として適切なものは何かを考察する。上記の１）〜３）の状況において、それぞれ適切なカウンタ値として、以下の設定が考えられる。
１）送信コマンドが消失した場合：前と同じカウンタ値［ｃｔｒＡ−ｍｉ−２］
２）送信コマンドが改竄されてＢが処理を停止した場合：前と同じカウンタ値［ｃｔｒＡ−ｍｉ−２］
３）Ｂの返信データが消失した場合：現在のカウンタにＢの返信データの長さ＋２を足したカウンタ値［ｃｔｒＡ＋ｎｉ＋２］
【００８２】
上記の１）と２）は同じ値となる３）の場合は値が異なる。すなわち、エンティティＡは、エンティティＢからの返信データが受信できない理由が明らかであれば、それぞれの理由に応じて、１），２），３）のいずれかのカウンタ値の再設定を行い、エンティティＢの持つカウンタ値と同期させて処理を継続することが可能である。しかし、一般的に、エンティティＡは、エンティティＢからの返信データが受信できない理由を解明することはできない。この場合、エンティティＡは、上記の１）と２）に対応するカウンタ値［ｃｔｒＡ−ｍｉ−２］、または３）に対応するカウンタ値［ｃｔｒＡ＋ｎｉ＋２］のいずれを適用すればよいか判断することができない。
【００８３】
結果として、エンティティＡは、エンティティＢからの返信データが受領できない事態に陥った場合、コマンド送信シーケンスの初期状態に復帰して、すべてのコマンド送信をやり直さなければならないことになってしまう。
【００８４】
このように、これまでのＣＣＭモードをベースとした方式でのデータ送受信方式では、通信を実行するエンティティ間のデータ通信が不調となった場合、初期状態に戻って、データ通信を再度、繰り返さなければならないことになり、データ処理、通信処理効率を低下させるという問題を発生させていた。
【００８５】
［（２）本発明に従ったカウンタ値（Ｃｔｒ）送信を行なうＣＣＭモードをベースとした方式を適用した通信処理シーケンス］
以下、上述の問題を解決した本発明に従ったコマンド送受信方式について説明する。以下に説明する本発明に従った通信処理は、通信データに関する暗号化＋偽造防止＋再送検出メカニズムを持ち、データの消失に対しても復旧が可能であり、なおかつシンプルな構成のコマンド送受信方式であり、ＣＣＭモードをベースとした方式を適用し、さらに様々な態様のカウンタ値（Ｃｔｒ）の送信を行なう構成を持つ。以下、本発明に従ったコマンド送受信方式の複数の実施例について、順次、説明する。
【００８６】
［実施例１］
まず、実施例１について、図４、図５を参照して説明する。本実施例も、先に図３を参照して説明した通信処理シーケンスと同様、エンティティＡとエンティティＢ間の通信処理例である。本処理例においても、先に図２（ｂ２）を参照して説明したカウンタモードによる暗号文生成と、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子の生成を行い、これらの各データを送受信するＣＣＭモードをベースとした方式を基本として実行する。
【００８７】
エンティティＡとエンティティＢ間で鍵共有のプロトコルが行われ、利用するブロック暗号用の共通鍵Ｋを、エンティティＡとエンティティＢ間で共有した後、第ｉ番目のコマンドをエンティティＡからエンティティＢに対して発行する処理以降の処理シーケンスを示している。また、Ａ，Ｂは内部にブロックサイズのカウンタｃｔｒを持っているものとする。
【００８８】
（ａ）初期化処理
ステップＳ２００の初期化処理は、Ａ，Ｂ共通の処理として実行される。
Ａ，Ｂ間で共通鍵Ｋの共有が完了したら、Ａ，Ｂそれぞれの内部カウンタｃｔｒの値を０に初期化する。
【００８９】
（ｂ）ｉ番目のコマンド発行処理
ステップＳ２０１〜Ｓ２０４は、第ｉ番目のコマンドをエンティティＡからエンティティＢに対して上述したＣＣＭモードをベースとした方式を適用して送信し、エンティティＢがエンティティＡから受信したコマンドに対応するデータ処理を内部処理として実行し、実行したデータ処理結果をエンティティＡに対して、ＣＣＭモードをベースとした方式で返信する処理を行なう際の通信処理シーケンスを示している。
【００９０】
まず、ステップＳ２０１は、ｉ番目のコマンド発行処理であり、コマンド発行側であるエンティティＡの実行する処理である。ここでＡの発行するコマンドは、ｉ番目のコマンドであり、すでにｉ−１番目までのコマンド発行は完了しているものとする。ｉ番目のコマンドのブロック数＝ｍｉであり、コマンド発行処理は、以下の各処理によって構成される。
【００９１】
Ａ１．ｍｉブロックのコマンドデータを準備
Ａ２．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとしてメッセージ認証子Ｔを生成する。
Ａ３．ｃｔｒＡ＋１をカウンタモード暗号化のカウンタ初期値として暗号化して暗号文Ｃを得る。
Ａ４．暗号文Ｃ，メッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを送信
Ａ５．ｃｔｒＡ←ｃｔｒＡ＋ｍｉ＋２
【００９２】
上記処理Ａ１〜Ａ５について説明する。
処理Ａ１［ｍｉブロックのコマンドデータを準備］
この処理は、エンティティＡからエンティティＢに対して送信する平文データとしてのブロック数＝ｍｉのコマンドデータを準備する処理である。このブロック数＝ｍｉのコマンドデータに基づくカウンタモードによる暗号文と、ＣＢＣ−ＭＡＣによるメッセージ認証子Ｔを生成する。
【００９３】
処理Ａ２［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとしてメッセージ認証子Ｔを生成する］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）生成処理である。ｉ番目のコマンドを構成するｍｉ個の平文ブロック［Ｍ１〜Ｍｍｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｔ］を算出する。なお、ＥＮＣＫ（ｃｔｒＡ）は、カウンタ値（ｃｔｒＡ）の共通鍵Ｋに基づく暗号化データを示す。暗号化アルゴリズムは例えばＡＥＳ暗号アルゴリズムである。
【００９４】
処理Ａ３［ｃｔｒＡ＋１をカウンタモード暗号化のカウンタ初期値として暗号化して暗号文Ｃを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによる暗号文生成処理である。この場合、ｉ番目のコマンドを構成するブロック数はｍｉであるので、カウンタｃｔｒＡ＋１〜ｃｔｒＡ＋１＋ｍｉを、それぞれを暗号化し、暗号化カウンタ値［Ｘ］を生成し、生成した暗号化カウンタ値と、ｉ番目のコマンドを構成するｍｉ個のブロックの各々との排他論理和（ＸＯＲ）演算を実行して、暗号化ブロックデータ［Ｃ］を得る。暗号化ブロックデータ［Ｃ］もｍｉ個のブロックから構成される暗号化ブロック［Ｃ１〜Ｃｍｉ］である。
【００９５】
処理Ａ４［暗号文Ｃ，メッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを送信］は、上述した処理において生成した暗号文［Ｃ＝Ｃ１〜Ｃｍｉ］と、メッセージ認証子［Ｔ］と、さらに、カウンタ値ｃｔｒＡを送信する処理である。
【００９６】
本実施例では、図３を参照して説明した処理では含まれないカウンタ値ｃｔｒＡをエンティティＡからエンティティＢに対して送信する。このカウンタ値によって、通信エラーなどに基づく通信シーケンスの中断が発生した場合に、初期状態に戻ることなく、処理シーケンスを再開することが可能となる。これらの処理については、後述する。
【００９７】
処理Ａ５［ｃｔｒＡ←ｃｔｒＡ＋ｍｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋ｍｉ＋２として更新する。このカウンタ更新処理は、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＡは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＡ＋１〜ｃｔｒＡ＋ｍｉ＋１は、カウンタモードの暗号処理で使用している。
従って、ｃｔｒＡ＋ｍｉ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
【００９８】
（ｃ）コマンド受信およびデータ返信
ステップＳ２０２およびステップＳ２０３に示す処理であり、コマンド受信側のエンティティＢによって実行される処理である。ステップＳ２０２がコマンドの受信と確認処理であり、ステップＳ２０３が、確認されたコマンドに基づくデータ処理結果の暗号化処理を含む送信データの生成と送信処理に相当する。
【００９９】
ステップＳ２０２のコマンドの受信と確認処理には以下の処理が含まれる。
Ｂ１．暗号文Ｃ、およびメッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを受信
Ｂ２．カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る
Ｂ３．ｃｔｒＡ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｃを復号してコマンドを得る
Ｂ４．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｔ'生成
Ｂ５．Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る
Ｂ６．ｃｔｒＢ←ｃｔｒＡ＋ｍｉ＋２
【０１００】
上記処理Ｂ１〜Ｂ６について説明する。
処理Ｂ１［暗号文Ｃ、およびメッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを受信］は、エンティティＡからの暗号文［Ｃ］とＭＡＣ値［Ｔ］と、さらに、カウンタ値ｃｔｒＡを受信する処理である。
【０１０１】
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］は、エンティティＡから受信したカウンタ値ｃｔｒＡと、エンティティＢが保持するカウンタ値ｃｔｒＢとを比較して、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定する処理である。初期状態では、エンティティＡとエンティティＢは、双方のカウンタ値は０に設定され、通信処理の進行に従って、双方のカウンタ値は、同期してカウントアップされており、正常な通信が進行している場合は、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立する。この式が成立しない場合は、正常なデータ通信が阻害された場合、例えば、通信エラー、外部からの再送攻撃、改竄などが発生した可能性がある。この場合には、エンティティＢは、受信コマンドに基づく処理を停止して、コマント待ち状態に戻る。
【０１０２】
エンティティＢが、コマンド待ち状態に戻った場合、エンティティＡは、エンティティＢからの返信データが受信できなくなり、予め定めた待機時間を越えた場合、コマンドの再送処理、すなわちｉ番目のコマンドを再送する処理を行なうことになる。この処理については、図５を参照して、後段で説明する。
【０１０３】
まず、エンティティＢにおいて、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立した場合の処理について、説明する。この場合は、エンティティＢは、処理Ｂ３以下を実行する。
【０１０４】
処理Ｂ３［ｃｔｒＡ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｃを復号してコマンドを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによるデータ復号処理である。図２（ｂ２）に示す入力データとして、暗号文ブロック［Ｃ＝Ｃ１〜Ｃｍｉ］を入力して、ｃｔｒＡ＋１をカウンタ初期値として設定した暗号処理によって、平文ブロック［Ｍ１〜Ｍｍｉ］を得る。
【０１０５】
処理Ｂ４［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｔ'生成］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）の生成処理である。ここでは、処理Ｂ２において、エンティティＡからの受信暗号文に基づく復号データとしての平文ブロック［Ｍ１〜Ｍｍｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｔ'］を算出する。
【０１０６】
処理Ｂ５［Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る］は、エンティティＡから受信したオリジナル平文データに基づくメッセージ認証子Ｔと、受信暗号文の復号データに基づくメッセージ認証子Ｔ'が一致するか否か、すなわちＴ＝Ｔ'が成立するか否かを判定する。Ｔ＝Ｔ'が成立すれば、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｍｉ］に一致するデータであり改竄のないデータ（コマンド）であると判定し、次の処理に進む。Ｔ＝Ｔ'が成立しない場合は、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｍｉ］に一致しないデータであり改竄のなされたデータであると判定し、次の処理に進むことなく、コマンド待ちの状態に戻る。
【０１０７】
ここでのコマンド待ち状態も、先に処理Ｂ２において説明したコマンド待ち状態と同様であり、エンティティＡは、エンティティＢからの返信データが受信できなくなり、予め定めた待機時間を越えた場合、コマンドの再送処理、すなわちｉ番目のコマンドを再送する処理を行なうことになる。この処理については、図５を参照して、後段で説明する。Ｔ＝Ｔ'が成立した場合の処理を先に説明する。Ｔ＝Ｔ'が成立した場合、処理Ｂ６以下を実行する。
【０１０８】
処理Ｂ６［ｃｔｒＢ←ｃｔｒＡ＋ｍｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋ｍｉ＋２として更新する。このカウンタ更新処理も、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＡは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＡ＋１〜ｃｔｒＡ＋ｍｉ＋１は、カウンタモードを適用したデータ復号処理で使用している。
従って、ｃｔｒＡ＋ｍｉ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
このカウンタ更新によって、カウンタ値は、エンティティＡ，Ｂで等しい値となり、同期のとれた値に設定される。
【０１０９】
ステップＳ２０３は、ステップＳ２０２において、改竄のないことが確認されたコマンドに基づくデータ処理結果の暗号化処理を含む送信データの生成と送信処理である。ステップＳ２０３の処理には、以下の処理が含まれる。
Ｂ７．ｎｉブロックの返信データを準備
Ｂ８．ＥＮＣＫ（ｃｔｒＢ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する
Ｂ９．ｃｔｒＢ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る
Ｂ１０．暗号文Ｄ、メッセージ認証子Ｕを送信する
Ｂ１１．ｃｔｒＢ←ｃｔｒＢ＋ｎｉ＋２
【０１１０】
上記処理Ｂ７〜Ｂ１１について説明する。
処理Ｂ７［ｎｉブロックの返信データを準備］
この処理は、エンティティＡから受信した暗号文Ｃに基づく復号結果として得られたコマンドに基づく処理結果として、ｎｉブロックの返信データを準備する処理である。
【０１１１】
処理Ｂ８［ＥＮＣＫ（ｃｔｒＢ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）生成処理である。返信データを構成するｎｉ個の平文ブロック［Ｍ１〜Ｍｎｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＢ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｕ］を算出する。なお、初期値（ＩＶ）の算出に用いるカウンタ値ｃｔｒＢは、前述の処理Ｂ５．ｃｔｒＢ←ｃｔｒＢ＋ｍｉ＋２において、更新されたカウンタ値ｃｔｒＢである。
【０１１２】
処理Ｂ９［ｃｔｒＢ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによる暗号文生成処理である。この場合、ｎｉブロックの返信データを構成するブロック数はｎｉであるので、カウンタｃｔｒＢ＋１〜ｃｔｒＢ＋１＋ｎｉを、それぞれを暗号化し、暗号化カウンタ値［Ｘ］を生成し、生成した暗号化カウンタ値と、返信データを構成するｎｉ個のブロックの各々との排他論理和（ＸＯＲ）演算を実行して、暗号化ブロックデータ［Ｄ］を得る。暗号化ブロックデータ［Ｄ］もｎｉ個のブロックから構成される暗号化ブロック［Ｄ１〜Ｄｎｉ］である。
【０１１３】
処理Ｂ１０［暗号文Ｄ、メッセージ認証子Ｕを送信する］は、上述した処理において生成した暗号文［Ｄ＝Ｄ１〜Ｄｎｉ］と、メッセージ認証子［Ｕ］を送信する処理である。
【０１１４】
処理Ｂ１１［ｃｔｒＢ←ｃｔｒＢ＋ｎｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＢ＋ｎｉ＋２として更新する。このカウンタ更新処理は、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＢは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＢ＋１〜ｃｔｒＢ＋ｎｉ＋１は、カウンタモードの暗号処理で使用している。
従って、ｃｔｒＢ＋ｎｉ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
【０１１５】
（ｄ）返信データ受信および確認
次に、エンティティＢからの返信データを受信したエンティティＡの処理がステップＳ２０４において実行される。ステップＳ２０４の返信データの受信と確認処理には以下の処理が含まれる。
Ａ６．暗号文Ｄ、およびメッセージ認証子Ｕを受信
Ａ７．ｃｔｒＡ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｄを復号して返信データを得る
Ａ８．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ'生成
Ａ９．Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、データを破棄する
Ａ１０．ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２
【０１１６】
上記処理Ａ６〜Ａ１０について説明する。
処理Ａ６［暗号文Ｄ、およびメッセージ認証子Ｕを受信］は、エンティティＢからの暗号文［Ｄ］とＭＡＣ値［Ｕ］を受信する処理である。
処理Ａ７［ｃｔｒＡ＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｄを復号して返信データを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによるデータ復号処理である。図２（ｂ２）に示す入力データとして、暗号文ブロック［Ｄ＝Ｄ１〜Ｄｎｉ］を入力して、ｃｔｒＡ＋１をカウンタ初期値として設定した暗号処理によって、平文返信データブロック［Ｍ１〜Ｍｎｉ］を得る。
【０１１７】
処理Ａ８［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ'生成］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）の生成処理である。ここでは、処理Ａ７において、エンティティＢからの受信暗号文に基づいて生成した復号データとしての平文ブロック［Ｍ１〜Ｍｎｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｕ'］を算出する。
【０１１８】
処理Ａ９［Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、データを破棄する］は、エンティティＢから受信したオリジナル返信データに基づくメッセージ認証子Ｕと、受信暗号文の復号データに基づくメッセージ認証子Ｕ'が一致するか否か、すなわちＵ＝Ｕ'が成立するか否かを判定する。Ｕ＝Ｕ'が成立すれば、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｎｉ］に一致するデータであり改竄のないデータ（返信データ）であると判定し、次の処理に進む。Ｕ＝Ｕ'が成立しない場合は、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｎｉ］に一致しないデータであり改竄のなされた返信データであると判定し、次の処理に進むことなく、データを破棄する。
【０１１９】
このデータ破棄処理によって、エンティティＡは、エンティティＢからの返信データが未受領状態であると解釈し、予め定めた一定期間内に正常な返信データ（Ｕ＝Ｕ'が成立する）が受信されない場合は、ｉ番目のコマンドの再送信処理を実行することになる。この処理は、図５を参照して説明する。処理Ａ９において、Ｕ＝Ｕ'が成立した場合は、処理Ａ１０以下を実行することになる。
【０１２０】
処理Ａ１０［ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋ｎｉ＋２として更新する。このカウンタ更新処理も、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＡは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＡ＋１〜ｃｔｒＢ＋ｎｉ＋１は、カウンタモードを適用したデータ復号処理で使用している。
従って、ｃｔｒＡ＋ｎｉ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
このカウンタ更新によって、カウンタ値は、エンティティＡ，Ｂで等しい値となり、同期のとれた値に設定される。
【０１２１】
その後、エンティティＡにおける次のコマンドの発行処理、エンティティＢにおけるコマンドに基づく返信データ生成、送信処理、エンティティＡにおける返信データの受信確認処理。これらの処理がステップＳ２０１〜Ｓ２０４と同様の処理として繰り返し実行される。ただし、カウンタ値は、双方の装置で、順次、更新される。
【０１２２】
（ｅ）コマンド再発行処理
次に、コマンドの再発行処理について、図５を参照して説明する。コマンドの再発行は、エンティティＡが、エンティティＢからの返信データを予め定めた待機時間内に受信できなかった場合に実行される。これは、単純な通信エラーの他、図４におけるステップＳ２０２において、エンティティＢが、コマンド待ち状態になってしまった場合、すなわち、先に説明した処理としての、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］において、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立しなかった場合、または、
処理Ｂ５［Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る］において、Ｔ＝Ｔ'が成立しなかった場合、
これらのケースにおいてもエンティティＡは、コマンド再発行処理を実行する。
【０１２３】
また、エンティティＡ側のステップＳ２０４における処理、
処理Ａ９［メッセージ認証子Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、データを破棄する］において、メッセージ認証子Ｕ＝Ｕ'が成立しなかった場合にも、予め定めた待機時間内に正常な返信データが受領できない場合は、コマンド再発行処理を実行する。
【０１２４】
図５に示す処理について説明する。エンティティＡが、エンティティＢからの正常な返信データを予め定めた待機時間内に受信できなかった場合、エンティティＡは、ステップＳ２０５において、コマンドの再発行処理を実行する。ステップＳ２０５のコマンド再発行処理には、以下の処理が含まれる。
Ａ２１．ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２
Ａ２２．通常のコマンド発行処理（ステップＳ２０１と同様（前述のＡ１〜Ａ５の処理））
【０１２５】
処理Ａ２１［ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋ｎｉ＋２として更新する。本処理例では、エンティティＡは、ｉ番目のコマンドに対応する返信データのブロック数ｎｉを知っていることを前提としている。エンティティＡは、ｉ番目のコマンドに対する正常な返信データをエンティティＢから受信できなかった場合、エンティティＡに設定されたカウンタ値ｃｔｒＡをｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２として、想定された返信データのブロック数ｎｉに基づいて更新する処理を実行する。
【０１２６】
このカウンタ更新後に処理Ａ２２［通常のコマンド発行処理（ステップＳ２０１と同様（前述のＡ１〜Ａ５の処理））］を実行する。処理Ａ２２は、ステップＳ２０１の処理と同様であり、適用するカウンタ値が更新された値［ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２］である点のみが異なる。
【０１２７】
このコマンド再送処理によって、エンティティＡは、新たなカウンタ値を適用したＣＢＣ−ＭＡＣに基づくメッセージ認証子Ｔと、カウンタモードによる暗号文Ｃと、更新されたカウンタ値［ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２］をエンティティＢに送信する。
【０１２８】
エンティティＢは、ステップＳ２０６において、図４のステップＳ２０２以下の処理を繰り返し実行する。ここで、エンティティＢは、先に説明した処理Ｂ２、すなわち、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］
この処理を実行する。
この時点で、エンティティＢのカウンタは、先に説明したステップＳ２０３におけるカウンタ更新処理、すなわち、
処理Ｂ１１［ｃｔｒＢ←ｃｔｒＢ＋ｎｉ＋２］を実行済みであるので、エンティティＢのカウンタ値は、ｃｔｒＢ＋ｎｉ＋２として設定されている。
【０１２９】
エンティティＡから再発行コマンドｉとともに送信されてくるカウンタは、カウンタ値［ｃｔｒＡ←ｃｔｒＡ＋ｎｉ＋２］であり、エンティティＢがこの時点で持つカウンタ値と等しい値となり、エンティティＢにおけるステップＳ２０２のカウンタ値判定処理、すなわち、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］
この判定処理において、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立することになり、問題なく後続の処理を実行することが可能となる。
【０１３０】
上記の実施例１の方式は、エンティティＡはコマンドとともにカウンタ値を送信し、エンティティＢ側で、自分の持っているカウンタ値とエンティティＡから受信したカウンタ値の比較を実行して、カウンタ値の同期確認を行って、処理を進める構成であり、エンティティＡが、コマンドの再発行を行なう場合は、エンティティＢのカウンタ値よりも必ず大きな値を持つようカウンタ更新を行なうことで、Ａのコマンド再送信はエンティティＢにおいて必ず受理されることになる。
【０１３１】
本構成により、通信エラー等の発生により、コマンドや返信データが消失した場合や、外部からのリプレイ攻撃、データ改竄が発生した場合において、初期状態に戻って、最初から通信をやり直すことなく、エラー発生時点からのコマンド再送信を行なえばよく、効率的で確実なデータ通信が実現される。
【０１３２】
しかし、本実施例１においては、エンティティＡがコマンド再送を行なう場合、エンティティＢから返信される予定の返信データのブロック数ｎｉに応じたカウンタ値の更新を行なう必要があり、エンティティＡが、予め返信データのブロック数ｎｉを知っていることが必要となっている。
【０１３３】
次に、エンティティＡが、返信データのブロック数ｎｉを知らない場合にも対応可能な処理例を実施例２として説明する。
【０１３４】
［実施例２］
次に、実施例２について、図６、図７を参照して説明する。本実施例も、実施例１と同様、エンティティＡとエンティティＢ間の通信処理例として説明する。本処理例においても、先に図２（ｂ２）を参照して説明したカウンタモードによる暗号文生成と、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子の生成を行い、これらの各データを送受信するＣＣＭモードをベースとした方式を基本として実行する。
【０１３５】
エンティティＡとエンティティＢ間で鍵共有のプロトコルが行われ、利用するブロック暗号用の共通鍵Ｋを、エンティティＡとエンティティＢ間で共有した後、第ｉ番目のコマンドをエンティティＡからエンティティＢに対して発行する処理以降の処理シーケンスを示している。また、Ａ，Ｂは内部にブロックサイズのカウンタｃｔｒを持っているものとする。
【０１３６】
（ａ）初期化処理
ステップＳ３００の初期化処理は、Ａ，Ｂ共通の処理として実行される。
Ａ，Ｂ間で共通鍵Ｋの共有が完了したら、Ａ，Ｂそれぞれの内部カウンタｃｔｒの値を０に初期化する。
【０１３７】
（ｂ）ｉ番目のコマンド発行処理
ステップＳ３０１〜Ｓ３０４は、第ｉ番目のコマンドをエンティティＡからエンティティＢに対して上述したＣＣＭモードをベースとした方式を適用して送信し、エンティティＢがエンティティＡから受信したコマンドに対応するデータ処理を内部処理として実行し、実行したデータ処理結果をエンティティＡに対して、ＣＣＭモードをベースとした方式で返信する処理を行なう際の通信処理シーケンスを示している。
【０１３８】
まず、ステップＳ３０１は、ｉ番目のコマンド発行処理であり、コマンド発行側であるエンティティＡの実行する処理である。ここでＡの発行するコマンドは、ｉ番目のコマンドであり、すでにｉ−１番目までのコマンド発行は完了しているものとする。ｉ番目のコマンドのブロック数＝ｍｉであり、コマンド発行処理は、以下の各処理によって構成される。
【０１３９】
Ａ１．ｍｉブロックのコマンドデータを準備
Ａ２．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとしてメッセージ認証子Ｔを生成する。
Ａ３．ＥＮＣＫ（ｃｔｒＡ＋１）をカウンタモード暗号化のカウンタ初期値として暗号化して暗号文Ｃを得る。
Ａ４．暗号文Ｃ，メッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを送信
Ａ５．ｃｔｒＡ←ｃｔｒＡ＋２
【０１４０】
上記処理Ａ１〜Ａ５について説明する。
処理Ａ１［ｍｉブロックのコマンドデータを準備］
この処理は、エンティティＡからエンティティＢに対して送信する平文データとしてのブロック数＝ｍｉのコマンドデータを準備する処理である。このブロック数＝ｍｉのコマンドデータに基づくカウンタモードによる暗号文と、ＣＢＣ−ＭＡＣによるメッセージ認証子Ｔを生成する。
【０１４１】
処理Ａ２［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとしてメッセージ認証子Ｔを生成する］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）生成処理である。ｉ番目のコマンドを構成するｍｉ個の平文ブロック［Ｍ１〜Ｍｍｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｔ］を算出する。なお、ＥＮＣＫ（ｃｔｒＡ）は、カウンタ値（ｃｔｒＡ）の共通鍵Ｋに基づく暗号化データを示す。暗号化アルゴリズムは例えばＡＥＳ暗号アルゴリズムである。
【０１４２】
処理Ａ３［ＥＮＣＫ（ｃｔｒＡ＋１）をカウンタモード暗号化のカウンタ初期値として暗号化して暗号文Ｃを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによる暗号文生成処理である。
【０１４３】
前述の実施例１では、カウンタモード暗号化のカウンタ初期値としてｃｔｒＡ＋１を適用していたが、本実施例では、共通鍵Ｋを適用してカウンタ値（ｃｔｒＡ＋１）を暗号化した暗号化カウンタ値ＥＮＣＫ（ｃｔｒＡ＋１）をカウンタモード暗号化のカウンタ初期値とする。
【０１４４】
ｉ番目のコマンドを構成するブロック数はｍｉであるので、カウンタモード暗号化において使用するカウンタ値は、ＥＮＣＫ（ｃｔｒＡ＋１）〜ＥＮＣＫ（ｃｔｒＡ＋１）＋ｍｉとなる。これらのカウンタ値を適用して、図２（ｂ２）に示すカウンタモートを適用して、ｉ番目のコマンドを構成するｍｉ個のブロックの各々を入力値とした暗号化を実行して、ｍｉ個のブロックから構成される暗号化ブロックデータ［Ｃ＝Ｃ１〜Ｃｍｉ］を生成する。
【０１４５】
処理Ａ４［暗号文Ｃ，メッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを送信］は、上述した処理において生成した暗号文［Ｃ＝Ｃ１〜Ｃｍｉ］と、メッセージ認証子［Ｔ］と、さらに、カウンタ値ｃｔｒＡを送信する処理である。
【０１４６】
本実施例においても、上述の実施例１と同様、カウンタ値ｃｔｒＡをエンティティＡからエンティティＢに対して送信する。このカウンタ値によって、通信エラーなどに基づく通信シーケンスの中断が発生した場合に、初期状態に戻ることなく、処理シーケンスを再開することが可能となる。これらの処理については、後述する。
【０１４７】
処理Ａ５［ｃｔｒＡ←ｃｔｒＡ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋２として更新する。前述の実施例１では、カウンタの更新処理として、
［ｃｔｒＡ←ｃｔｒＡ＋ｍｉ＋２］
を実行していたが、本実施例では、
［ｃｔｒＡ←ｃｔｒＡ＋２］
のカウンタ更新を実行する。
【０１４８】
カウンタ更新処理は、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理であるが、本実施例では、
ｃｔｒＡは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＡ＋１を、カウンタモードの暗号処理で使用しているのみとなる。
従って、ｃｔｒＡ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。本実施例では、使用するカウンタ値の削減を実現している。
【０１４９】
（ｃ）コマンド受信およびデータ返信
ステップＳ３０２およびステップＳ３０３に示す処理であり、コマンド受信側のエンティティＢによって実行される処理である。ステップＳ３０２がコマンドの受信と確認処理であり、ステップＳ３０３が、確認されたコマンドに基づくデータ処理結果の暗号化処理を含む送信データの生成と送信処理に相当する。
【０１５０】
ステップＳ３０２のコマンドの受信と確認処理には以下の処理が含まれる。
Ｂ１．暗号文Ｃ、およびメッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを受信
Ｂ２．カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る
Ｂ３．ＥＮＣＫ（ｃｔｒＡ＋１）をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｃを復号してコマンドを得る
Ｂ４．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｔ'生成
Ｂ５．Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る
Ｂ６．ｃｔｒＢ←ｃｔｒＡ＋２
【０１５１】
上記処理Ｂ１〜Ｂ６について説明する。
処理Ｂ１［暗号文Ｃ、およびメッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを受信］は、エンティティＡからの暗号文［Ｃ］とＭＡＣ値［Ｔ］と、さらに、カウンタ値ｃｔｒＡを受信する処理である。
【０１５２】
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］は、エンティティＡから受信したカウンタ値ｃｔｒＡと、エンティティＢが保持するカウンタ値ｃｔｒＢとを比較して、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定する処理である。初期状態では、エンティティＡとエンティティＢは、双方のカウンタ値は０に設定され、通信処理の進行に従って、双方のカウンタ値は、同期してカウントアップされており、正常な通信が進行している場合は、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立する。この式が成立しない場合は、正常なデータ通信が阻害された場合、例えば、通信エラー、外部からの再送攻撃、改竄などが発生した可能性がある。この場合には、エンティティＢは、受信コマンドに基づく処理を停止して、コマント待ち状態に戻る。
【０１５３】
エンティティＢが、コマンド待ち状態に戻った場合、エンティティＡは、エンティティＢからの返信データが受信できなくなり、予め定めた待機時間を越えた場合、コマンドの再送処理、すなわちｉ番目のコマンドを再送する処理を行なうことになる。この処理については、図７を参照して、後段で説明する。
【０１５４】
まず、エンティティＢにおいて、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立した場合の処理について、説明する。この場合は、エンティティＢは、処理Ｂ３以下を実行する。
【０１５５】
処理Ｂ３［ＥＮＫＫ（ｃｔｒＡ＋１）をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｃを復号してコマンドを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによるデータ復号処理である。図２（ｂ２）に示す入力データとして、暗号文ブロック［Ｃ＝Ｃ１〜Ｃｍｉ］を入力して、ＥＮＫＫ（ｃｔｒＡ＋１）をカウンタ初期値として設定し、ＥＮＫＫ（ｃｔｒＡ＋１）〜ＥＮＫＫ（ｃｔｒＡ＋１）＋ｍｉを適用したカウンタモード暗号処理によって、平文ブロック［Ｍ１〜Ｍｍｉ］を得る。
【０１５６】
処理Ｂ４［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｔ'生成］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）の生成処理である。ここでは、処理Ｂ２において、エンティティＡからの受信暗号文に基づく復号データとしての平文ブロック［Ｍ１〜Ｍｍｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｔ'］を算出する。
【０１５７】
処理Ｂ５［Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る］は、エンティティＡから受信したオリジナル平文データに基づくメッセージ認証子Ｔと、受信暗号文の復号データに基づくメッセージ認証子Ｔ'が一致するか否か、すなわちＴ＝Ｔ'が成立するか否かを判定する。Ｔ＝Ｔ'が成立すれば、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｍｉ］に一致するデータであり改竄のないデータ（コマンド）であると判定し、次の処理に進む。Ｔ＝Ｔ'が成立しない場合は、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｍｉ］に一致しないデータであり改竄のなされたデータであると判定し、次の処理に進むことなく、コマンド待ちの状態に戻る。
【０１５８】
ここでのコマンド待ち状態も、先に処理Ｂ２において説明したコマンド待ち状態と同様であり、エンティティＡは、エンティティＢからの返信データが受信できなくなり、予め定めた待機時間を越えた場合、コマンドの再送処理、すなわちｉ番目のコマンドを再送する処理を行なうことになる。この処理については、図７を参照して、後段で説明する。Ｔ＝Ｔ'が成立した場合の処理を先に説明する。Ｔ＝Ｔ'が成立した場合、処理Ｂ６以下を実行する。
【０１５９】
処理Ｂ６［ｃｔｒＢ←ｃｔｒＡ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋２として更新する。このカウンタ更新処理も、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理であり、エンティティＡにおけるステップＳ３０１の処理Ａ５のカウンタ更新と同様、カウンタ値を２つのみカウントアップする処理を行なう。すなわち、
ｃｔｒＡは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＡ＋１は、カウンタモードを適用したデータ復号処理で使用している。
従って、ｃｔｒＡ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なう。このカウンタ更新によって、カウンタ値は、エンティティＡ，Ｂで等しい値となり、同期のとれた値に設定される。
【０１６０】
ステップＳ３０３は、ステップＳ３０２において、改竄のないことが確認されたコマンドに基づくデータ処理結果の暗号化処理を含む送信データの生成と送信処理である。ステップＳ３０３の処理には、以下の処理が含まれる。
Ｂ７．ｎｉブロックの返信データを準備
Ｂ８．ＥＮＣＫ（ｃｔｒＢ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する
Ｂ９．ＥＮＣＫ（ｃｔｒＢ＋１）をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る
Ｂ１０．暗号文Ｄ、メッセージ認証子Ｕを送信する
Ｂ１１．ｃｔｒＢ←ｃｔｒＢ＋２
【０１６１】
上記処理Ｂ７〜Ｂ１１について説明する。
処理Ｂ７［ｎｉブロックの返信データを準備］
この処理は、エンティティＡから受信した暗号文Ｃに基づく復号結果として得られたコマンドに基づく処理結果として、ｎｉブロックの返信データを準備する処理である。
【０１６２】
処理Ｂ８［ＥＮＣＫ（ｃｔｒＢ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）生成処理である。返信データを構成するｎｉ個の平文ブロック［Ｍ１〜Ｍｎｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＢ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｕ］を算出する。なお、初期値（ＩＶ）の算出に用いるカウンタ値ｃｔｒＢは、前述の処理Ｂ５．ｃｔｒＢ←ｃｔｒＢ＋ｍｉ＋２において、更新されたカウンタ値ｃｔｒＢである。
【０１６３】
処理Ｂ９［ＥＮＣＫ（ｃｔｒＢ＋１）をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによる暗号文生成処理である。この場合、ｎｉブロックの返信データを構成するブロック数はｎｉであるので、カウンタＥＮＣＫ（ｃｔｒＢ＋１）〜ＥＮＣＫ（ｃｔｒＢ＋１）＋ｎｉをカウンタ値として適用し、返信データを構成するｎｉ個のブロックを入力としたカウンタモード暗号化を行い、暗号化ブロックデータ［Ｄ］を得る。暗号化ブロックデータ［Ｄ］もｎｉ個のブロックから構成される暗号化ブロック［Ｄ１〜Ｄｎｉ］である。
【０１６４】
処理Ｂ１０［暗号文Ｄ、メッセージ認証子Ｕを送信する］は、上述した処理において生成した暗号文［Ｄ＝Ｄ１〜Ｄｎｉ］と、メッセージ認証子［Ｕ］を送信する処理である。
【０１６５】
処理Ｂ１１［ｃｔｒＢ←ｃｔｒＢ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＢ＋２として更新する。このカウンタ更新処理は、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理であり、
ｃｔｒＢは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＢ＋１は、カウンタモードの暗号処理で使用している。
従って、ｃｔｒＢ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
【０１６６】
エンティティＢにおいても、データ送信に際して適用するカウンタ値は、２つのみとなり、更新処理ではカウンタ値を２つのみカウントアップする。
【０１６７】
（ｄ）返信データ受信および確認
次に、エンティティＢからの返信データを受信したエンティティＡの処理がステップＳ３０４において実行される。ステップＳ３０４の返信データの受信と確認処理には以下の処理が含まれる。
Ａ６．暗号文Ｄ、およびメッセージ認証子Ｕを受信
Ａ７．ＥＮＣＫ（ｃｔｒＡ＋１）をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｄを復号して返信データを得る
Ａ８．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ'生成
Ａ９．Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、返信データ待ち状態に戻る
Ａ１０．ｃｔｒＡ←ｃｔｒＡ＋２
【０１６８】
上記処理Ａ６〜Ａ１０について説明する。
処理Ａ６［暗号文Ｄ、およびメッセージ認証子Ｕを受信］は、エンティティＢからの暗号文［Ｄ］とＭＡＣ値［Ｕ］を受信する処理である。
処理Ａ７［ＥＮＣＫ（ｃｔｒＡ＋１）をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｄを復号して返信データを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによるデータ復号処理である。図２（ｂ２）に示す入力データとして、暗号文ブロック［Ｄ＝Ｄ１〜Ｄｎｉ］を入力して、ＥＮＣＫ（ｃｔｒＡ＋１）をカウンタ初期値として設定した暗号処理によって、平文返信データブロック［Ｍ１〜Ｍｎｉ］を得る。ここでも、カウンタ値（ｃｔｒＡ＋１）の暗号化データＥＮＣＫ（ｃｔｒＡ＋１）をカウンタ初期値として設定し、ＥＮＣＫ（ｃｔｒＡ＋１）〜ＥＮＣＫ（ｃｔｒＡ＋１）＋ｎｉを利用して、暗号文ブロック［Ｄ＝Ｄ１〜Ｄｎｉ］を入力し、平文返信データブロック［Ｍ１〜Ｍｎｉ］を得る。
【０１６９】
処理Ａ８［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ'生成］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）の生成処理である。ここでは、処理Ａ７において生成したエンティティＢからの受信暗号文に基づく復号データとしての平文ブロック［Ｍ１〜Ｍｎｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｕ'］を算出する。
【０１７０】
処理Ａ９［Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、返信データ待ち状態に戻る］は、エンティティＢから受信したオリジナル返信データに基づくメッセージ認証子Ｕと、受信暗号文の復号データに基づくメッセージ認証子Ｕ'が一致するか否か、すなわちＵ＝Ｕ'が成立するか否かを判定する。Ｕ＝Ｕ'が成立すれば、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｎｉ］に一致するデータであり改竄のないデータ（返信データ）であると判定し、次の処理に進む。Ｕ＝Ｕ'が成立しない場合は、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｎｉ］に一致しないデータであり改竄のなされた返信データであると判定し、次の処理に進むことなく、返信データ待ち状態に戻る。
【０１７１】
この返信データ待ち状態に戻る処理後、予め定めた一定期間内に正常な返信データ（Ｕ＝Ｕ'が成立する）が受信されない場合は、ｉ番目のコマンドの再送信処理を実行することになる。この処理は、図７を参照して説明する。処理Ａ９において、Ｕ＝Ｕ'が成立した場合は、処理Ａ１０以下を実行することになる。
【０１７２】
処理Ａ１０［ｃｔｒＡ←ｃｔｒＡ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋２として更新する。このカウンタ更新処理も、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。
ｃｔｒＡは、ＣＢＣ−ＭＡＣの初期値として使用し、
ｃｔｒＡ＋１は、カウンタモードを適用したデータ復号処理で使用している。
従って、ｃｔｒＡ＋２〜を次の処理で利用するカウンタの値とするカウンタ更新を行なっている。
このカウンタ更新によって、カウンタ値は、エンティティＡ，Ｂで等しい値となり、同期のとれた値に設定される。
【０１７３】
その後、エンティティＡにおける次のコマンドの発行処理、エンティティＢにおけるコマンドに基づく返信データ生成、送信処理、エンティティＡにおける返信データの受信確認処理。これらの処理がステップＳ３０１〜Ｓ３０４と同様の処理として繰り返し実行される。ただし、カウンタ値は、双方の装置で、順次、更新される。
【０１７４】
（ｅ）コマンド再発行処理
次に、コマンドの再発行処理について、図７を参照して説明する。コマンドの再発行は、エンティティＡが、エンティティＢからの返信データを予め定めた待機時間内に受信できなかった場合に実行される。これは、単純な通信エラーの他、図６におけるステップＳ３０２において、エンティティＢが、コマンド待ち状態になってしまった場合、すなわち、先に説明した処理としての、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］において、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立しなかった場合、または、
処理Ｂ５［Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る］において、Ｔ＝Ｔ'が成立しなかった場合、
これらのケースにおいてもエンティティＡは、コマンド再発行処理を実行する。
【０１７５】
また、エンティティＡ側のステップＳ３０４における処理、
処理Ａ９［メッセージ認証子Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、返信データ待ち状態に戻る］において、メッセージ認証子Ｕ＝Ｕ'が成立しなかった場合にも、予め定めた待機時間内に正常な返信データが受領できない場合は、コマンド再発行処理を実行する。
【０１７６】
図７に示す処理について説明する。エンティティＡが、エンティティＢからの正常な返信データを予め定めた待機時間内に受信できなかった場合、エンティティＡは、ステップＳ３０５において、コマンドの再発行処理を実行する。ステップＳ３０５のコマンド再発行処理には、以下の処理が含まれる。
Ａ２１．ｃｔｒＡ←ｃｔｒＡ＋２
Ａ２２．通常のコマンド発行処理（ステップＳ３０１と同様（前述のＡ１〜Ａ５の処理））
【０１７７】
処理Ａ２１［ｃｔｒＡ←ｃｔｒＡ＋２］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋２として更新する。本処理例では、各コマンドと、返信データの送受信に応じて、ＣＢＣ−ＭＡＣの初期値に対応する１つのカウンタ値と、カウンタモードのカウンタ初期値として１つのカウント値が適用される。これは、コマンドや返信データのブロック数に無関係である。
【０１７８】
従って、エンティティＡは、ｉ番目のコマンドに対応する返信データのブロック数ｎｉを知らなくても、エンティティＡは、ｉ番目のコマンドに対する正常な返信データをエンティティＢから受信できなかった場合、エンティティＡに設定されたカウンタ値ｃｔｒＡをｃｔｒＡ←ｃｔｒＡ＋２として、カウント値の更新を実行し、このカウンタ更新後に処理Ａ２２［通常のコマンド発行処理（ステップＳ３０１と同様（前述のＡ１〜Ａ５の処理））］を実行する。処理Ａ２２は、ステップＳ３０１の処理と同様であり、適用するカウンタ値が更新された値［ｃｔｒＡ←ｃｔｒＡ＋２］である点のみが異なる。
【０１７９】
このコマンド再送処理によって、エンティティＡは、新たなカウンタ値を適用したＣＢＣ−ＭＡＣに基づくメッセージ認証子Ｔと、カウンタモードによる暗号文Ｃと、更新されたカウンタ値［ｃｔｒＡ←ｃｔｒＡ＋２］をエンティティＢに送信する。
【０１８０】
エンティティＢは、ステップＳ３０６において、図６のステップＳ３０２以下の処理を繰り返し実行する。ここで、エンティティＢは、先に説明した処理Ｂ２、すなわち、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］
この処理を実行する。
この時点で、エンティティＢのカウンタは、先に説明したステップＳ３０３におけるカウンタ更新処理、すなわち、
処理Ｂ１１［ｃｔｒＢ←ｃｔｒＢ＋２］を実行済みであるので、エンティティＢのカウンタ値は、ｃｔｒＢ＋２として設定されている。
【０１８１】
エンティティＡから再発行コマンドｉとともに送信されてくるカウンタは、カウンタ値［ｃｔｒＡ←ｃｔｒＡ＋２］であり、エンティティＢがこの時点で持つカウンタ値と等しい値となり、エンティティＢにおけるステップＳ３０２のカウンタ値判定処理、すなわち、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］
この判定処理において、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立することになり、問題なく後続の処理を実行することが可能となる。
【０１８２】
上記の実施例２の方式は、実施例１の方式と同様、エンティティＡはコマンドとともにカウンタ値を送信し、エンティティＢ側で、自分の持っているカウンタ値とエンティティＡから受信したカウンタ値の比較を実行して、カウンタ値の同期確認を行って、処理を進める構成であり、エンティティＡが、コマンドの再発行を行なう場合は、エンティティＢのカウンタ値よりも必ず大きな値を持つようカウンタ更新を行なうことで、Ａのコマンド再送信はエンティティＢにおいて必ず受理されることになる。
【０１８３】
また、本実施例では、実施例１と異なり、コマンドや返信データの送受信の際に、双方で利用、更新されるカウント値は、コマンドや返信データのブロック数に無関係であり、［２］と決まっているため、エンティティＡが、コマンドの再発行を行なう場合は、カウント値を２つカウントアップする更新を行なうことで、エンティティＡとエンティティＢのカウンタの値の同期をとることが可能となる。従って、実施例１と異なり、エンティティＡは、エンティティＢからの返信データのブロック数ｎｉを知っている必要がない。
【０１８４】
本構成により、通信エラー等の発生により、コマンドや返信データが消失した場合や、外部からのリプレイ攻撃、データ改竄が発生した場合において、初期状態に戻って、最初から通信をやり直すことなく、エラー発生時点からのコマンド再送信を行なえばよく、効率的で確実なデータ通信が実現される。
【０１８５】
［実施例３］
次に、実施例３について、図８、図９を参照して説明する。本実施例も、実施例１，２と同様、エンティティＡとエンティティＢ間の通信処理例として説明する。本処理例においても、先に図２（ｂ２）を参照して説明したカウンタモードによる暗号文生成と、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子の生成を行い、これらの各データを送受信するＣＣＭモードをベースとした方式を基本として実行する。
【０１８６】
エンティティＡとエンティティＢ間で鍵共有のプロトコルが行われ、利用するブロック暗号用の共通鍵Ｋを、エンティティＡとエンティティＢ間で共有した後、第ｉ番目のコマンドをエンティティＡからエンティティＢに対して発行する処理以降の処理シーケンスを示している。また、Ａ，Ｂは内部にブロックサイズのカウンタｃｔｒを持っているものとする。
【０１８７】
（ａ）初期化処理
ステップＳ４００の初期化処理は、Ａ，Ｂ共通の処理として実行される。
Ａ，Ｂ間で共通鍵Ｋの共有が完了したら、Ａ，Ｂそれぞれの内部カウンタｃｔｒの値を０に初期化する。
【０１８８】
（ｂ）ｉ番目のコマンド発行処理
ステップＳ４０１〜Ｓ４０４は、第ｉ番目のコマンドをエンティティＡからエンティティＢに対して上述したＣＣＭモードをベースとした方式を適用して送信し、エンティティＢがエンティティＡから受信したコマンドに対応するデータ処理を内部処理として実行し、実行したデータ処理結果をエンティティＡに対して、ＣＣＭモードをベースとした方式で返信する処理を行なう際の通信処理シーケンスを示している。
【０１８９】
まず、ステップＳ４０１は、ｉ番目のコマンド発行処理であり、コマンド発行側であるエンティティＡの実行する処理である。ここでＡの発行するコマンドは、ｉ番目のコマンドであり、すでにｉ−１番目までのコマンド発行は完了しているものとする。ｉ番目のコマンドのブロック数＝ｍｉであり、コマンド発行処理は、以下の各処理によって構成される。
【０１９０】
Ａ１．ｍｉブロックのコマンドデータを準備
Ａ２．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとしてメッセージ認証子Ｔを生成する。
Ａ３．ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１をカウンタモード暗号化のカウンタ初期値として暗号化して暗号文Ｃを得る。
Ａ４．暗号文Ｃ，メッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを送信
【０１９１】
上記処理Ａ１〜Ａ４について説明する。
処理Ａ１［ｍｉブロックのコマンドデータを準備］
この処理は、エンティティＡからエンティティＢに対して送信する平文データとしてのブロック数＝ｍｉのコマンドデータを準備する処理である。このブロック数＝ｍｉのコマンドデータに基づくカウンタモードによる暗号文と、ＣＢＣ−ＭＡＣによるメッセージ認証子Ｔを生成する。
【０１９２】
処理Ａ２［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとしてメッセージ認証子Ｔを生成する］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）生成処理である。ｉ番目のコマンドを構成するｍｉ個の平文ブロック［Ｍ１〜Ｍｍｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｔ］を算出する。なお、ＥＮＣＫ（ｃｔｒＡ）は、カウンタ値（ｃｔｒＡ）の共通鍵Ｋに基づく暗号化データを示す。暗号化アルゴリズムは例えばＡＥＳ暗号アルゴリズムである。
【０１９３】
処理Ａ３［ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１をカウンタモード暗号化のカウンタ初期値として暗号化して暗号文Ｃを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによる暗号文生成処理である。
【０１９４】
前述の実施例１では、カウンタモード暗号化のカウンタ初期値としてｃｔｒＡ＋１を適用し、実施例２では、共通鍵Ｋを適用してカウンタ値（ｃｔｒＡ＋１）を暗号化した暗号化カウンタ値ＥＮＣＫ（ｃｔｒＡ＋１）をカウンタモード暗号化のカウンタ初期値としていた。本実施例３では、ＣＢＣ−ＭＡＣによるＭＡＣ生成処理の初期値（ＩＶ）として利用した暗号化カウンタ値ＥＮＣＫ（ｃｔｒＡ）を、さらに共通鍵Ｋを適用して再度、暗号化したデータＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））に１を加算した値、ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１をカウンタモード暗号化のカウンタ初期値として利用する。
【０１９５】
すなわち、本実施例では、コマンド送信に際して使用するカウント値を１つとした設定である。
ＣＢＣ−ＭＡＣの初期値：ＥＮＣＫ（ｃｔｒＡ）
カウントモードのカウンタ初期値：ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１
として、設定することで、コマンド送信に際して使用するカウント値を１つとしている。
【０１９６】
ｉ番目のコマンドを構成するブロック数はｍｉであるので、カウンタモード暗号化において実際に使用するカウンタ値は、ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１〜ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１＋ｍｉとなる。これらのカウンタ値を適用して、図２（ｂ２）に示すカウンタモートを適用して、ｉ番目のコマンドを構成するｍｉ個のブロックの各々を入力値とした暗号化を実行して、ｍｉ個のブロックから構成される暗号化ブロックデータ［Ｃ＝Ｃ１〜Ｃｍｉ］を生成する。
【０１９７】
処理Ａ４［暗号文Ｃ，メッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを送信］は、上述した処理において生成した暗号文［Ｃ＝Ｃ１〜Ｃｍｉ］と、メッセージ認証子［Ｔ］と、さらに、カウンタ値ｃｔｒＡを送信する処理である。
【０１９８】
本実施例においても、上述の実施例１と同様、カウンタ値ｃｔｒＡをエンティティＡからエンティティＢに対して送信する。このカウンタ値によって、通信エラーなどに基づく通信シーケンスの中断が発生した場合に、初期状態に戻ることなく、処理シーケンスを再開することが可能となる。これらの処理については、後述する。
【０１９９】
本実施例では、実施例１，２のように、この時点でのカウンタ更新は実行しない。次回のコマンド送信に以降する際に、カウンタ値を１つカウントアップする更新を行なうことになる。この処理は、ステップＳ４０４において説明する。
【０２００】
（ｃ）コマンド受信およびデータ返信
ステップＳ４０２およびステップＳ４０３に示す処理であり、コマンド受信側のエンティティＢによって実行される処理である。ステップＳ４０２がコマンドの受信と確認処理であり、ステップＳ４０３が、確認されたコマンドに基づくデータ処理結果の暗号化処理を含む送信データの生成と送信処理に相当する。
【０２０１】
ステップＳ４０２のコマンドの受信と確認処理には以下の処理が含まれる。
Ｂ１．暗号文Ｃ、およびメッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを受信
Ｂ２．カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る
Ｂ３．ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｃを復号してコマンドを得る
Ｂ４．ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｔ'生成
Ｂ５．Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る
【０２０２】
上記処理Ｂ１〜Ｂ５について説明する。
処理Ｂ１［暗号文Ｃ、およびメッセージ認証子Ｔと、さらに、カウンタ値ｃｔｒＡを受信］は、エンティティＡからの暗号文［Ｃ］とＭＡＣ値［Ｔ］と、さらに、カウンタ値ｃｔｒＡを受信する処理である。
【０２０３】
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］は、エンティティＡから受信したカウンタ値ｃｔｒＡと、エンティティＢが保持するカウンタ値ｃｔｒＢとを比較して、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定する処理である。初期状態では、エンティティＡとエンティティＢは、双方のカウンタ値は０に設定され、通信処理の進行に従って、双方のカウンタ値は、同期してカウントアップされており、正常な通信が進行している場合は、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立する。この式が成立しない場合は、正常なデータ通信が阻害された場合、例えば、通信エラー、外部からの再送攻撃、改竄などが発生した可能性がある。この場合には、エンティティＢは、受信コマンドに基づく処理を停止して、コマント待ち状態に戻る。
【０２０４】
エンティティＢが、コマンド待ち状態に戻った場合、エンティティＡは、エンティティＢからの返信データが受信できなくなり、予め定めた待機時間を越えた場合、コマンドの再送処理、すなわちｉ番目のコマンドを再送する処理を行なうことになる。この処理については、図９を参照して、後段で説明する。
【０２０５】
まず、エンティティＢにおいて、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立した場合の処理について、説明する。この場合は、エンティティＢは、処理Ｂ３以下を実行する。
【０２０６】
処理Ｂ３［ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｃを復号してコマンドを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによるデータ復号処理である。図２（ｂ２）に示す入力データとして、暗号文ブロック［Ｃ＝Ｃ１〜Ｃｍｉ］を入力して、ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１をカウンタ初期値として設定し、ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１〜ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））＋１＋ｍｉを適用したカウンタモード暗号処理によって、平文ブロック［Ｍ１〜Ｍｍｉ］を得る。
【０２０７】
処理Ｂ４［ＥＮＣＫ（ｃｔｒＡ）をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｔ'生成］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）の生成処理である。ここでは、処理Ｂ２において、エンティティＡからの受信暗号文に基づく復号データとしての平文ブロック［Ｍ１〜Ｍｍｉ］を入力とし、さらに、ＥＮＣＫ（ｃｔｒＡ）を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｔ'］を算出する。
【０２０８】
処理Ｂ５［Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る］は、エンティティＡから受信したオリジナル平文データに基づくメッセージ認証子Ｔと、受信暗号文の復号データに基づくメッセージ認証子Ｔ'が一致するか否か、すなわちＴ＝Ｔ'が成立するか否かを判定する。Ｔ＝Ｔ'が成立すれば、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｍｉ］に一致するデータであり改竄のないデータ（コマンド）であると判定し、次の処理に進む。Ｔ＝Ｔ'が成立しない場合は、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｍｉ］に一致しないデータであり改竄のなされたデータであると判定し、次の処理に進むことなく、コマンド待ちの状態に戻る。
【０２０９】
ここでのコマンド待ち状態も、先に処理Ｂ２において説明したコマンド待ち状態と同様であり、エンティティＡは、エンティティＢからの返信データが受信できなくなり、予め定めた待機時間を越えた場合、コマンドの再送処理、すなわちｉ番目のコマンドを再送する処理を行なうことになる。この処理については、図９を参照して、後段で説明する。Ｔ＝Ｔ'が成立した場合の処理を先に説明する。Ｔ＝Ｔ'が成立した場合、ステップＳ４０３を実行する。
【０２１０】
なお、エンティティＢも、実施例１，２と異なり、この時点でのカウンタの更新処理を実行することなく、ステップＳ４０３において飲み実行する。
【０２１１】
ステップＳ４０３は、ステップＳ４０２において、改竄のないことが確認されたコマンドに基づくデータ処理結果の暗号化処理を含む送信データの生成と送信処理である。ステップＳ４０３の処理には、以下の処理が含まれる。
Ｂ６．ｎｉブロックの返信データを準備
Ｂ７．ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ）））をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する
Ｂ８．ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る
Ｂ９．暗号文Ｄ、メッセージ認証子Ｕを送信する
Ｂ１０．ｃｔｒＢ←ｃｔｒＡ＋１
【０２１２】
上記処理Ｂ６〜Ｂ１０について説明する。
処理Ｂ６［ｎｉブロックの返信データを準備］
この処理は、エンティティＡから受信した暗号文Ｃに基づく復号結果として得られたコマンドに基づく処理結果として、ｎｉブロックの返信データを準備する処理である。
【０２１３】
処理Ｂ７［ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ）））をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）生成処理である。返信データを構成するｎｉ個の平文ブロック［Ｍ１〜Ｍｎｉ］を入力とし、さらに、ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ）））を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｕ］を算出する。
【０２１４】
本処理例では、エンティティＡからの受信カウンタ値（ｃｔｒＡ）を共通鍵Ｋを適用した３重暗号化データＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ）））をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ生成する。
【０２１５】
処理Ｂ８［ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによる暗号文生成処理である。
【０２１６】
本実施例では、エンティティＡからの受信カウンタ値（ｃｔｒＡ）を共通鍵Ｋを適用した４重暗号化データＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））に１加算したデータＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの返信データを暗号化して、暗号文Ｄを得る。
【０２１７】
この場合、ｎｉブロックの返信データを構成するブロック数はｎｉであるので、カウンタＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））＋１〜ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））＋１＋ｎｉをカウンタ値として適用し、返信データを構成するｎｉ個のブロックを入力としたカウンタモード暗号化を行い、暗号化ブロックデータ［Ｄ］を得る。暗号化ブロックデータ［Ｄ］もｎｉ個のブロックから構成される暗号化ブロック［Ｄ１〜Ｄｎｉ］である。
【０２１８】
処理Ｂ９［暗号文Ｄ、メッセージ認証子Ｕを送信する］は、上述した処理において生成した暗号文［Ｄ＝Ｄ１〜Ｄｎｉ］と、メッセージ認証子［Ｕ］を送信する処理である。
【０２１９】
処理Ｂ１０［ｃｔｒＢ←ｃｔｒＡ＋１］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋１として更新する。このカウンタ更新処理は、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理であり、本処理例では、
１つのカウンタ値ｃｔｒＡの暗号化態様を変更することで、ＣＢＣ−ＭＡＣの初期値、およびカウンタモードのカウンタ初期値を生成しているので、消費するカウンタ値は１つのカウンタ値ｃｔｒＡのみである。
従って、ｃｔｒＡ＋１〜を次の処理で利用するカウンタの値とするカウンタ更新処理、すなわち、
［ｃｔｒＢ←ｃｔｒＡ＋１］
を行なっている。
【０２２０】
（ｄ）返信データ受信および確認
次に、エンティティＢからの返信データを受信したエンティティＡの処理がステップＳ４０４において実行される。ステップＳ４０４の返信データの受信と確認処理には以下の処理が含まれる。
Ａ５．暗号文Ｄ、およびメッセージ認証子Ｕを受信
Ａ６．ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｄを復号して返信データを得る
Ａ７．ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ）））をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ'生成
Ａ８．Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、返信データ待ち状態に戻る
Ａ９．ｃｔｒＡ←ｃｔｒＡ＋１
【０２２１】
上記処理Ａ５〜Ａ９について説明する。
処理Ａ５［暗号文Ｄ、およびメッセージ認証子Ｕを受信］は、エンティティＢからの暗号文［Ｄ］とＭＡＣ値［Ｕ］を受信する処理である。
処理Ａ６［ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して暗号文Ｄを復号して返信データを得る］は、図２（ｂ２）を参照して説明したカウンタ（ＣＴＲ）モードによるデータ復号処理である。図２（ｂ２）に示す入力データとして、暗号文ブロック［Ｄ＝Ｄ１〜Ｄｎｉ］を入力して、ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ）＋１をカウンタ初期値として設定した暗号処理によって、平文返信データブロック［Ｍ１〜Ｍｎｉ］を得る。
【０２２２】
本実施例では、エンティティＡは、エンティティＢのステップＳ４０３における返信データの暗号化に適用したカウンタ初期値と同様、カウンタ値（ｃｔｒＡ）を共通鍵Ｋを適用した４重暗号化データＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））に１加算したデータＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ））））＋１をカウンタモードのカウンタ初期値として、カウンタモードを適用して、ｎｉブロックの暗号文ブロック［Ｄ＝Ｄ１〜Ｄｎｉ］を入力し、平文返信データブロック［Ｍ１〜Ｍｎｉ］を得る。
【０２２３】
処理Ａ７［ＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ）））をＣＢＣ−ＭＡＣの初期値ＩＶとして、ＣＢＣ−ＭＡＣに基づいてメッセージ認証子Ｕ'生成］は、図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるメッセージ認証子（ＭＡＣ）の生成処理である。ここでは、処理Ａ６において、エンティティＢからの受信暗号文に基づく復号データとしての平文ブロック［Ｍ１〜Ｍｎｉ］を入力とし、さらに、カウンタ値（ｃｔｒＡ）の３重暗号化データＥＮＣＫ（ＥＮＣＫ（ＥＮＣＫ（ｃｔｒＡ）））を初期値（ＩＶ）として図２（ｂ１）を参照して説明したＣＢＣ−ＭＡＣによるＭＡＣ生成処理を実行して、メッセージ認証子：ＭＡＣ［Ｕ'］を算出する。
【０２２４】
処理Ａ８［Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、返信データ待ち状態に戻る］は、エンティティＢから受信したオリジナル返信データに基づくメッセージ認証子Ｕと、受信暗号文の復号データに基づくメッセージ認証子Ｕ'が一致するか否か、すなわちＵ＝Ｕ'が成立するか否かを判定する。Ｕ＝Ｕ'が成立すれば、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｎｉ］に一致するデータであり改竄のないデータ（返信データ）であると判定し、次の処理に進む。Ｕ＝Ｕ'が成立しない場合は、受信データに基づく復号データは、オリジナルの平文データとしての平文ブロック［Ｍ１〜Ｍｎｉ］に一致しないデータであり改竄のなされた返信データであると判定し、次の処理に進むことなく、返信データ待ち状態に戻る。
【０２２５】
この返信データ待ち状態に戻る処理後、予め定めた一定期間内に正常な返信データ（Ｕ＝Ｕ'が成立する）が受信されない場合は、ｉ番目のコマンドの再送信処理を実行することになる。この処理は、図９を参照して説明する。処理Ａ８において、Ｕ＝Ｕ'が成立した場合は、処理Ａ９以下を実行することになる。
【０２２６】
処理Ａ９［ｃｔｒＡ←ｃｔｒＡ＋１］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋１として更新する。このカウンタ更新処理も、使用済みのカウンタ値を後続の処理で使用しない設定とするための更新処理である。本処理例では、
１つのカウンタ値ｃｔｒＡの暗号化態様を変更することで、ＣＢＣ−ＭＡＣの初期値、およびカウンタモードのカウンタ初期値を生成しているので、消費するカウンタ値は１つのカウンタ値ｃｔｒＡのみである。
従って、ｃｔｒＡ＋１〜を次の処理で利用するカウンタの値とするカウンタ更新処理、すなわち、
［ｃｔｒＡ←ｃｔｒＡ＋１］
を行なっている。
このカウンタ更新によって、カウンタ値は、エンティティＡ，Ｂで等しい値となり、同期のとれた値に設定される。
【０２２７】
その後、エンティティＡにおける次のコマンドの発行処理、エンティティＢにおけるコマンドに基づく返信データ生成、送信処理、エンティティＡにおける返信データの受信確認処理。これらの処理がステップＳ４０１〜Ｓ４０４と同様の処理として繰り返し実行される。ただし、カウンタ値は、双方の装置で、順次、更新される。
【０２２８】
（ｅ）コマンド再発行処理
次に、コマンドの再発行処理について、図９を参照して説明する。コマンドの再発行は、エンティティＡが、エンティティＢからの返信データを予め定めた待機時間内に受信できなかった場合に実行される。これは、単純な通信エラーの他、図８におけるステップＳ４０２において、エンティティＢが、コマンド待ち状態になってしまった場合、すなわち、先に説明した処理としての、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］において、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立しなかった場合、または、
処理Ｂ５［Ｔ＝Ｔ'ならば次に進む、そうでなければ処理を停止し、コマンド待ち状態に戻る］において、Ｔ＝Ｔ'が成立しなかった場合、
これらのケースにおいてもエンティティＡは、コマンド再発行処理を実行する。
【０２２９】
また、エンティティＡ側のステップＳ４０４における処理、
処理Ａ８［メッセージ認証子Ｕ＝Ｕ'ならば次に進む、そうでなければ処理を停止し、返信データ待ち状態に戻る］において、メッセージ認証子Ｕ＝Ｕ'が成立しなかった場合にも、予め定めた待機時間内に正常な返信データが受領できない場合は、コマンド再発行処理を実行する。
【０２３０】
図９に示す処理について説明する。エンティティＡが、エンティティＢからの正常な返信データを予め定めた待機時間内に受信できなかった場合、エンティティＡは、ステップＳ４０５において、コマンドの再発行処理を実行する。ステップＳ４０５のコマンド再発行処理には、以下の処理が含まれる。
Ａ２１．ｃｔｒＡ←ｃｔｒＡ＋１
Ａ２２．通常のコマンド発行処理（ステップＳ４０１と同様（前述のＡ１〜Ａ４の処理））
【０２３１】
処理Ａ２１［ｃｔｒＡ←ｃｔｒＡ＋１］は、カウンタの更新処理であり、カウンタ値をｃｔｒＡ＋１として更新する。本処理例では、各コマンドと、返信データの送受信に応じて、ＣＢＣ−ＭＡＣの初期値と、カウンタモードのカウンタ初期値として１つのカウント値のみが適用される。これは、コマンドや返信データのブロック数に無関係である。
【０２３２】
従って、エンティティＡは、ｉ番目のコマンドに対応する返信データのブロック数ｎｉを知らなくても、エンティティＡは、ｉ番目のコマンドに対する正常な返信データをエンティティＢから受信できなかった場合、エンティティＡに設定されたカウンタ値ｃｔｒＡをｃｔｒＡ←ｃｔｒＡ＋１として、カウント値の更新を実行し、このカウンタ更新後に処理Ａ２２［通常のコマンド発行処理（ステップＳ４０１と同様（前述のＡ１〜Ａ４の処理））］を実行する。処理Ａ２２は、ステップＳ４０１の処理と同様であり、適用するカウンタ値が更新された値［ｃｔｒＡ←ｃｔｒＡ＋１］である点のみが異なる。
【０２３３】
このコマンド再送処理によって、エンティティＡは、新たなカウンタ値を適用したＣＢＣ−ＭＡＣに基づくメッセージ認証子Ｔと、カウンタモードによる暗号文Ｃと、更新されたカウンタ値［ｃｔｒＡ←ｃｔｒＡ＋１］をエンティティＢに送信する。
【０２３４】
エンティティＢは、ステップＳ４０６において、図８のステップＳ４０２以下の処理を繰り返し実行する。ここで、エンティティＢは、先に説明した処理Ｂ２、すなわち、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］
この処理を実行する。
この時点で、エンティティＢのカウンタは、先に説明したステップＳ４０３におけるカウンタ更新処理、すなわち、
処理Ｂ１０［ｃｔｒＢ←ｃｔｒＡ＋１］を実行済みであるので、エンティティＢのカウンタ値は、ｃｔｒＡ＋１として設定されている。
【０２３５】
エンティティＡから再発行コマンドｉとともに送信されてくるカウンタは、カウンタ値［ｃｔｒＡ←ｃｔｒＡ＋１］であり、エンティティＢがこの時点で持つカウンタ値と等しい値となり、エンティティＢにおけるステップＳ４０２のカウンタ値判定処理、すなわち、
処理Ｂ２［カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立するか否かを判定し、成立する場合は、次の処理に進み、成立しない場合は、コマンド待ち状態に戻る］
この判定処理において、カウンタ値ｃｔｒＡ≧カウンタ値ｃｔｒＢが成立することになり、問題なく後続の処理を実行することが可能となる。
【０２３６】
上記の実施例３の方式は、実施例１，２の方式と同様、エンティティＡはコマンドとともにカウンタ値を送信し、エンティティＢ側で、自分の持っているカウンタ値とエンティティＡから受信したカウンタ値の比較を実行して、カウンタ値の同期確認を行って、処理を進める構成であり、エンティティＡが、コマンドの再発行を行なう場合は、エンティティＢのカウンタ値よりも必ず大きな値を持つようカウンタ更新を行なうことで、Ａのコマンド再送信はエンティティＢにおいて必ず受理されることになる。
【０２３７】
また、本実施例では、実施例１と異なり、コマンドや返信データの送受信の際に、双方で利用、更新されるカウント値は、コマンドや返信データのブロック数に無関係であり、［１］と決まっているため、エンティティＡが、コマンドの再発行を行なう場合は、カウント値を１つカウントアップする更新を行なうことで、エンティティＡとエンティティＢのカウンタの値の同期をとることが可能となる。従って、実施例１と異なり、エンティティＡは、エンティティＢからの返信データのブロック数ｎｉを知っている必要がない。
【０２３８】
また、本実施例３では、１回のコマンド発行、返信データ受信処理において消費するカウンタ値が［１］のみであるので、コマンド数が多数ある場合もカウンタ値の消費が少なく、設定カウンタ値の上限に到達して、再度、同じカウンタ値を利用するといった事態を防止することが可能となる。
【０２３９】
本構成により、通信エラー等の発生により、コマンドや返信データが消失した場合や、外部からのリプレイ攻撃、データ改竄が発生した場合において、初期状態に戻って、最初から通信をやり直すことなく、エラー発生時点からのコマンド再送信を行なえばよく、効率的で確実なデータ通信が実現される。
【０２４０】
このように本発明の実施例１〜３において説明した構成では、カウンタモードによる暗号文とＣＢＣ−ＭＡＣによるメッセージ認証子を送受信するＣＣＭモードをベースとした方式を適用することで、カウンタ値を順次、更新して、データ送受信を行い、データ送受信を行なう双方の装置において、カウンタ値を同期した状態とすることで、エラーのない処理が実現されるとともに、通信エラー等の発生により、コマンドや返信データが消失した場合や、外部からのリプレイ攻撃、データ改竄が発生した場合において、初期状態に戻って、最初から通信をやり直すことなく、エラー発生時点からのコマンド再送信を行なえばよく、効率的で確実なデータ通信が実現される。
【０２４１】
［通信処理装置の構成］
上述したデータ通信およびデータ処理を実行する通信処理装置の構成例について、図１０を参照して説明する。上述した処理を実行するエンティティは、データ通信可能な情報処理部、情報処理装置、ＰＣ、携帯端末、あるいはＩＣカードなどの装置によって構成可能である。あるいはＰＣ内に構成された１つの情報処理部とその他の情報処理部とがバスを介して通信する場合に、上述の処理を実行することも可能であり、この場合には、各情報処理部が、上述のエンティティＡ、エンティティＢの役割を果たすことになる。
【０２４２】
図１０には、エンティティを構成する１つの設定例として、２つの通信処理装置２１０，３１０を示した。通信処理装置２１０、３１０、は例えばＰＣによって構成される。通信処理装置２１０は、データ処理部２１１、通信部２１２、記憶部２１３を有する。通信処理装置２１０と通信を実行する情報処理装置３１０も、データ処理部３１１、通信部３１２、記憶部３１３を有する。
【０２４３】
図１０に示す通信処理装置２１０、通信処理装置３１０は同様の構成を持つ例を示しているが、例えば、上述した各実施例では、エンティティＡがコマンド発行部として機能し、エンティティＢがコマンドに基づくデータ処理部として機能するように、通信処理装置２１０、通信処理装置３１０は、通信機能を持つことは必須であるが、それ以外は、様々な構成が可能であり、それぞれ異なる構成であってよい。
【０２４４】
通信処理を実行するエンティティとして通信処理装置２１０の構成を代表して説明する。データ処理部２１１は、ＣＰＵ等によって実行されるプログラムに従って、様々なデータ処理を実行する。記憶部２１３に記憶されたプログラム、パラメータ、データや、あるいは外部から入力するプログラム、コマンド、データに基づくデータ処理を実行する。
【０２４５】
データ処理用のプログラムは、例えば記憶部２１３に格納され、ＣＰＵは、プログラムに基づく処理シーケンスに従ってデータ処理を実行する。このデータ処理には、例えば上述した各実施例において説明したコマンドの発行処理、コマンドに基づくデータ処理、送受信データの暗号処理、メッセージ認証子生成処理、カウンタ値更新処理、受信カウンタ値と自装置の記憶部に格納された自己カウンタ値の比較に基づく受信データの正当性確認処理などの処理も含まれる。これら各種のデータ処理シーケンスを規定したプログラムが、例えば記憶部２１３に格納され、このプログラムに従って処理を実行する。
【０２４６】
通信部２１２は、通信処理装置３１０との通信を実行する。なお、通信は、例えばインターネット、ＬＡＮ等のローカルネットワーク、ケーブル、バスなど様々な通信手段が適用可能である。通信処理装置３１０も、通信処理装置２１０と同様の構成を有し、同様の処理を実行する。記憶部２１３には、データ処理プログラムの他、カウンタ値が保持される。
【０２４７】
図１０に示す通信処理装置２１０、３１０は、例えば、各々いずれか一方が上述したエンティティＡとしてコマンド発行処理を実行し、他方がエンティティＢとしてデータ処理を実行する通信処理装置として構成することができる。なお、本発明は、コマンド発行およびコマンドに基づくデータ処理を実行する通信エンティティ間の通信にのみ適用可能なものではなく、その他の通信処理においても適用可能である。
【０２４８】
本発明において提案された通信処理、すなわち、カウンタモードによる暗号文とＣＢＣ−ＭＡＣによるメッセージ認証子を送受信するＣＣＭモードをベースとした方式を適用し、カウンタ値を順次、更新してデータ送受信を行うとともに、カウンタ値を通知して、自己の保持するカウンタ値との比較によって同期確認を行なう構成とすることで、エラーのない処理が実現されるとともに、通信エラー等の発生により、コマンドや返信データが消失した場合や、外部からのリプレイ攻撃、データ改竄が発生した場合においても、初期状態に戻って最初から通信をやり直すことなく、エラー発生時点からのコマンド再発行によるデータ処理の再開が可能となり、効率的で確実なデータ通信、データ処理が実現される。
【０２４９】
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【０２５０】
なお、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。
【０２５１】
例えば、プログラムは記録媒体としてのハードディスクやＲＯＭ（Read Only Memory)に予め記録しておくことができる。あるいは、プログラムはフレキシブルディスク、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)，ＭＯ(Magneto optical)ディスク，ＤＶＤ(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体に、一時的あるいは永続的に格納（記録）しておくことができる。このようなリムーバブル記録媒体は、いわゆるパッケージソフトウェアとして提供することができる。
【０２５２】
なお、プログラムは、上述したようなリムーバブル記録媒体からコンピュータにインストールする他、ダウンロードサイトから、コンピュータに無線転送したり、ＬＡＮ(Local Area Network)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【０２５３】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【０２５４】
以上、説明したように、本発明の構成によれば、複数のエンティティ間の通信において、カウンタモードによる暗号文とＣＢＣ−ＭＡＣによるメッセージ認証子を送受信するいわゆるＣＣＭモードをベースとした方式を適用し、カウンタ値を順次、更新してデータ送受信を行うとともに、カウンタ値を通知して、自己の保持するカウンタ値との比較によって同期確認を行なう構成とすることで、エラーのない処理が実現される。例えば、通信エラー等の発生により、コマンドや返信データが消失した場合や、外部からのリプレイ攻撃、データ改竄が発生した場合においても、初期状態に戻って最初から通信をやり直すことなく、エラー発生時点からのコマンド再発行によるデータ処理の再開が可能となり、効率的で確実なデータ通信、データ処理が実現される。
【図面の簡単な説明】
【０２５５】
【図１】本発明の適用可能な通信処理構成例について説明する図である。
【図２】ＣＣＭモードをベースとした方式を適用した処理の概要について説明する図である。
【図３】ＣＣＭモードをベースとした方式を適用した一般的なデータ通信シーケンスについて説明する図である。
【図４】本発明の実施例１におけるＣＣＭモードをベースとした方式を適用したデータ通信シーケンスについて説明する図である。
【図５】本発明の実施例１に従ったＣＣＭモードをベースとした方式を適用したデータ通信シーケンスにおいて実行されるコマンド再発行処理について説明する図である。
【図６】本発明の実施例２におけるＣＣＭモードをベースとした方式を適用したデータ通信シーケンスについて説明する図である。
【図７】本発明の実施例２に従ったＣＣＭモードをベースとした方式を適用したデータ通信シーケンスにおいて実行されるコマンド再発行処理について説明する図である。
【図８】本発明の実施例３におけるＣＣＭモードをベースとした方式を適用したデータ通信シーケンスについて説明する図である。
【図９】本発明の実施例３に従ったＣＣＭモードをベースとした方式を適用したデータ通信シーケンスにおいて実行されるコマンド再発行処理について説明する図である。
【図１０】データ通信を実行する通信処理装置の構成例について説明する図である。
【符号の説明】
【０２５６】
１０１  エンティティＡ
１０２  エンティティＢ
１５１  演算部
２１０  通信処理装置
２１１  データ処理部
２１２  通信部
２１３  記憶部
３１０  通信処理装置
３１１  データ処理部
３１２  通信部
３１３  記憶部
【図１】
2007013366.tif 000003
【図２】
2007013366.tif 000004
【図３】
2007013366.tif 000005
【図４】
2007013366.tif 000006
【図５】
2007013366.tif 000007
【図６】
2007013366.tif 000008
【図７】
2007013366.tif 000009
【図８】
2007013366.tif 000010
【図９】
2007013366.tif 000011
【図１０】
2007013366.tif 000012