(57)【要約】【課題】初期化ベクタの漏洩の防止を図ることにより暗号強度を向上させる。【解決手段】暗号化装置は、ＣＢＣモードによる暗号化を行うにあたり、復号装置が復号に用いるべき初期化ベクタを取得するのに利用する初期化ベクタ取得情報についてもブロック暗号化し、平文データから分割した平文ブロックに対応する暗号文ブロックと初期化ベクタ取得情報の暗号文ブロックを含めて暗号文データを生成する。復号装置は、暗号文データの復号にあたり、初期化ベクタ取得情報の暗号文ブロックを復号して得た初期化ベクタ取得情報に基づいて初期化ベクタを取得し、取得した初期化ベクタを利用して復号を行う。【選択図】図１
2014224925.tif 000002
【特許請求の範囲】
【請求項１】
初期化ベクタを生成する初期化ベクタ生成部と、
平文データから分割された平文ブロックのうちの先頭の平文ブロックについて前記初期化ベクタを利用して暗号化し、先頭以外の平文ブロックについて、１つ前の暗号化によって得た暗号文ブロックを利用して暗号化し、復号装置が復号に用いるべき初期化ベクタを取得するのに利用する初期化ベクタ取得情報について、１つ前のブロックを暗号化して得た暗号文ブロックを利用して暗号化する暗号化部と
前記平文データに対応する暗号文ブロックと、前記初期化ベクタ取得情報に対応する暗号文ブロックとを含む暗号文データを出力する暗号文データ出力部と
を備える暗号化装置。
【請求項２】
前記暗号化部は、
前記初期化ベクタ生成部が出力した初期化ベクタとしての初期化ベクタ取得情報を暗号化する
請求項１に記載の暗号化装置。
【請求項３】
前記暗号化部は、
初期化ベクタの生成の仕方を示す情報としての前記初期化ベクタ取得情報を暗号化する
請求項１に記載の暗号化装置。
【請求項４】
前記暗号化部は、
複数の平文データを暗号化するにあたり、共通の初期化ベクタを利用して各平文データにおける先頭の平文ブロックを暗号化し、
第１の平文データの暗号化にあたり、平文ブロックと前記初期化ベクタとしての初期化ベクタ取得情報とを暗号化し、第１の平文データより後ろの第２の平文データの暗号化にあたり、平文ブロックのみを暗号化し、
前記暗号文データ出力部は、
第１の平文データの暗号化の場合、初期化ベクタ取得情報の暗号文ブロックを含む暗号文データを出力し、第２の平文データの暗号化の場合、初期化ベクタ取得情報の暗号文ブロックを含まない暗号文データを出力する
請求項１から３のいずれか一項に記載の暗号化装置。
【請求項５】
前記暗号化部は、
複数の平文データを暗号化するにあたり、共通の初期化ベクタを利用して各平文データにおける先頭の平文ブロックを暗号化し、
第１の平文データの暗号化にあたり、平文ブロックと前記初期化ベクタとしての初期化ベクタ取得情報とを暗号化し、
第１の平文データより後ろの第２の平文データの暗号化にあたり、前記共通の初期化ベクタを復号に利用すべきことを示す情報としての前記初期化ベクタ取得情報を暗号化し、
第２の平文データより後ろの第３の平文データの暗号化にあたり、前記平文データから分割された平文ブロックのみを暗号化し、
暗号文データ出力部は、
暗号文データ出力部は、
第１の平文データと第２の平文データの暗号化の場合、初期化ベクタ取得情報の暗号文ブロックを含む暗号文データを出力し、第３の平文データの暗号化の場合、初期化ベクタ取得情報の暗号文ブロックを含まない暗号文データを出力する
請求項１から３のいずれか一項に記載の暗号化装置。
【請求項６】
前記初期化ベクタ生成部は、
複数の平文データを暗号化するにあたり、平文データごとに対応して異なる初期化ベクタを生成し、
前記暗号化部は、
前記複数の平文データのそれぞれを暗号化するにあたり、暗号化対象の平文データに対応する初期化ベクタを利用して先頭の平文ブロックを暗号化するとともに、暗号化対象の平文データに対応する初期化ベクタが特定される内容の初期化ベクタ取得情報を暗号化する
請求項１から３のいずれか一項に記載の暗号化装置。
【請求項７】
前記暗号化部は、
前記平文データから分割された平文ブロックのうち、最後の平文ブロック以外の所定の平文ブロックを暗号化して得られた暗号文ブロックを利用して初期化ベクタ取得情報を暗号化し、当該初期化ベクタ取得情報を暗号化して得られた暗号文ブロックを利用して、前記所定の平文ブロックの次の平文ブロックを暗号化する
請求項１から６のいずれか一項に記載の暗号化装置。
【請求項８】
前記暗号化部は、
前記平文データから分割された平文ブロックを暗号化して得られた暗号文ブロックにおける最後の暗号文ブロックを利用して前記前記初期化ベクタ取得情報を暗号化する
請求項１から６のいずれか一項に記載の暗号化装置。
【請求項９】
暗号文データに含まれる暗号文ブロックのそれぞれについて、１つ前の暗号文ブロックを利用して復号対象の暗号文ブロックを復号し、先頭の暗号文ブロックについては、当該先頭の暗号文ブロックよりも先に復号して得た初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して復号する復号部
を備える復号装置。
【請求項１０】
前記復号部は、
初期化ベクタ取得情報の暗号文ブロックを復号して得た初期化ベクタ取得情報を初期化ベクタとして取得する
請求項９に記載の復号装置。
【請求項１１】
前記復号部は、
初期化ベクタ取得情報の暗号文ブロックを復号して得た初期化ベクタ取得情報が示す初期化ベクタの生成の仕方に従って初期化ベクタを生成する
請求項９に記載の復号装置。
【請求項１２】
前記復号部は、
複数の暗号文データにおける第１の暗号文データを復号するにあたり、第１の暗号文データの復号によって得られた初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して先頭の暗号文ブロックを復号し、
第１の暗号文データより後ろの第２の暗号文ブロックを復号するにあたり、第１の暗号文データの先頭の暗号文ブロックの復号に利用した初期化ベクタを利用する
請求項９から１１のいずれか一項に記載の復号装置。
【請求項１３】
前記復号部は、
複数の暗号文データにおける第１の暗号文データを復号するにあたり、第１の暗号文データの復号によって得られた初期化ベクタ取得情報として取得した初期化ベクタを利用して先頭の暗号文ブロックを復号し、
第１の暗号文データより後ろの第２の暗号文データが含む初期化ベクタ取得情報の暗号文ブロックの復号によって得られた初期化ベクタ取得情報が、第１の暗号文データの復号に利用した初期化ベクタを利用して第２の暗号文データ以降の暗号文データを復号すべきことを示している場合、第２の暗号文データ以降の復号にあたり、第１の暗号文データの復号に利用した初期化ベクタにより先頭の暗号文ブロックを復号する
請求項９から１１のいずれか一項に記載の復号装置。
【請求項１４】
前記復号部は、
暗号文データに含まれる暗号文ブロックにおける最後と先頭以外の暗号文ブロックを復号して初期化ベクタ取得情報を取得する
請求項９から１３のいずれか一項に記載の復号装置。
【請求項１５】
前記復号部は、
暗号文データに含まれる暗号文ブロックのうち最後の暗号文ブロックを復号して初期化ベクタ取得情報を取得する
請求項９から１３のいずれか一項に記載の復号装置。
【請求項１６】
初期化ベクタを生成する初期化ベクタ生成ステップと、
平文データから分割された平文ブロックのうちの先頭の平文ブロックについて前記初期化ベクタを利用して暗号化し、先頭以外の平文ブロックについて、１つ前の暗号化によって得た暗号文ブロックを利用して暗号化し、復号装置が復号に用いるべき初期化ベクタを取得するのに利用する初期化ベクタ取得情報について、１つ前のブロックを暗号化して得た暗号文ブロックを利用して暗号化する暗号化ステップと
前記平文データに対応する暗号文ブロックと、前記初期化ベクタ取得情報に対応する暗号文ブロックとを含む暗号文データを出力する暗号文データ出力ステップと
を備える暗号化方法。
【請求項１７】
暗号文データに含まれる暗号文ブロックのそれぞれについて、１つ前の暗号文ブロックを利用して復号対象の暗号文ブロックを復号し、先頭の暗号文ブロックについては、当該先頭の暗号文ブロックよりも先に復号して得た初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して復号する復号ステップ
を備える復号方法。
【請求項１８】
コンピュータに、
初期化ベクタを生成する初期化ベクタ生成ステップと、
平文データから分割された平文ブロックのうちの先頭の平文ブロックについて前記初期化ベクタを利用して暗号化し、先頭以外の平文ブロックについて、１つ前の暗号化によって得た暗号文ブロックを利用して暗号化し、復号装置が復号に用いるべき初期化ベクタを取得するのに利用する初期化ベクタ取得情報について、１つ前のブロックを暗号化して得た暗号文ブロックを利用して暗号化する暗号化ステップと
前記平文データに対応する暗号文ブロックと、前記初期化ベクタ取得情報に対応する暗号文ブロックとを含む暗号文データを出力する暗号文データ出力ステップと
を実行させるためのプログラム。
【請求項１９】
コンピュータに、
暗号文データに含まれる暗号文ブロックのそれぞれについて、１つ前の暗号文ブロックを利用して復号対象の暗号文ブロックを復号し、先頭の暗号文ブロックについては、当該先頭の暗号文ブロックよりも先に復号して得た初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して復号する復号ステップ
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化装置、復号装置、暗号化方法、復号方法及びプログラムに関する。
【背景技術】
【０００２】
ＤＥＳ（Data Encryption Standard）やＡＥＳ（Advanced Encryption Standard）などのブロック暗号方式が知られている。ブロック暗号方式は、共通鍵暗号方式の１つであり、例えば固定長のブロック単位で暗号化、復号を行う暗号方式である。
また、ブロック暗号方式としては、ＥＣＢ（Electronic CodeBook）モード（暗号ブックモード）とＣＢＣ（Cipher Block Chaining）モード（暗号文ブロック連鎖モード）が知られている。ＥＣＢモードは、単純にブロック単位で暗号化、復号を行う。ＣＢＣモードは、前の平文ブロックを暗号化して得られた暗号文ブロックと現平文ブロックとで排他的論理和演算（ＸＯＲ）を行い、排他的論理和演算の結果に対して暗号化を行う。ただし、ＣＢＣモードでは、先頭の平文ブロックの前の暗号文ブロックは存在しない。このため、先頭の平文ブロックについては、暗号文ブロックに代えて予め定めた初期化ベクタと排他的論理和演算を行って暗号化する。
【０００３】
例えばＣＢＣモードによる暗号化にあたり、プリブロックを先頭に付加した平文を暗号化し、暗号化によって得られた暗号文からプリブロックに対応する暗号文ブロックを除去した結果を平文に対する暗号文とする技術が知られている（特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１６８２７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＣＢＣモードにおける初期化ベクタは、通常、暗号化を行う側と復号を行う側とで予め共有したうえで固定的に使用される。このため、ＣＢＣモードにおいては、初期化ベクタが漏洩して暗号解読の足掛かりとなる可能性がある。つまり、ＣＢＣモードにおいては、初期化ベクタの漏洩の防止を図ることが暗号化強度を高めるうえで有効な方策の１つとなる。
しかし、特許文献１に記載の技術は、あくまでも、最初の暗号文ブロックが暗号解読の足掛かりとなることの防止を目的とした構成であるために、初期化ベクタの漏洩の防止を図ることはできない。
【０００６】
本発明は、このような事情に鑑みてなされたもので、暗号文ブロック連鎖モードによる暗号化において、初期化ベクタの漏洩の防止を図ることにより暗号強度を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決するために、本発明の一態様としての暗号化装置は、初期化ベクタを生成する初期化ベクタ生成部と、平文データから分割された平文ブロックのうちの先頭の平文ブロックについて前記初期化ベクタを利用して暗号化し、先頭以外の平文ブロックについて、１つ前の暗号化によって得た暗号文ブロックを利用して暗号化し、復号装置が復号に用いるべき初期化ベクタを取得するのに利用する初期化ベクタ取得情報について、１つ前のブロックを暗号化して得た暗号文ブロックを利用して暗号化する暗号化部と、前記平文データに対応する暗号文ブロックと、前記初期化ベクタ取得情報に対応する暗号文ブロックとを含む暗号文データを出力する暗号文データ出力部とを備える。
【０００８】
また、上記の暗号化装置において、前記暗号化部は、前記初期化ベクタ生成部が出力した初期化ベクタとしての初期化ベクタ取得情報を暗号化してもよい。
【０００９】
また、上記の暗号化装置において、前記暗号化部は、初期化ベクタの生成の仕方を示す情報としての前記初期化ベクタ取得情報を暗号化してもよい。
【００１０】
また、上記の暗号化装置において、前記暗号化部は、複数の平文データを暗号化するにあたり、共通の初期化ベクタを利用して各平文データにおける先頭の平文ブロックを暗号化し、第１の平文データの暗号化にあたり、平文ブロックと前記初期化ベクタとしての初期化ベクタ取得情報とを暗号化し、第１の平文データより後ろの第２の平文データの暗号化にあたり、平文ブロックのみを暗号化し、暗号文データ出力部は、第１の平文データの暗号化の場合、初期化ベクタ取得情報の暗号文ブロックを含む暗号文データを出力し、第２の平文データの暗号化の場合、初期化ベクタ取得情報の暗号文ブロックを含まない暗号文データを出力してもよい。
【００１１】
また、上記の暗号化装置において、前記暗号化部は、複数の平文データを暗号化するにあたり、共通の初期化ベクタを利用して各平文データにおける先頭の平文ブロックを暗号化し、第１の平文データの暗号化にあたり、平文ブロックと前記初期化ベクタとしての初期化ベクタ取得情報とを暗号化し、第１の平文データより後ろの第２の平文データの暗号化にあたり、前記共通の初期化ベクタを復号に利用すべきことを示す情報としての前記初期化ベクタ取得情報を暗号化し、第２の平文データより後ろの第３の平文データの暗号化にあたり、前記平文データから分割された平文ブロックのみを暗号化し、暗号文データ出力部は、第１の平文データと第２の平文データの暗号化の場合、初期化ベクタ取得情報の暗号文ブロックを含む暗号文データを出力し、第３の平文データの暗号化の場合、初期化ベクタ取得情報の暗号文ブロックを含まない暗号文データを出力してもよい。
【００１２】
また、上記の暗号化装置において、前記初期化ベクタ生成部は、複数の平文データを暗号化するにあたり、平文データごとに対応して異なる初期化ベクタを生成し、前記暗号化部は、前記複数の平文データのそれぞれを暗号化するにあたり、暗号化対象の平文データに対応する初期化ベクタを利用して先頭の平文ブロックを暗号化するとともに、暗号化対象の平文データに対応する初期化ベクタが特定される内容の初期化ベクタ取得情報を暗号化してもよい。
【００１３】
また、上記の暗号化装置において、前記暗号化部は、前記平文データから分割された平文ブロックのうち、最後の平文ブロック以外の所定の平文ブロックを暗号化して得られた暗号文ブロックを利用して初期化ベクタ取得情報を暗号化し、当該初期化ベクタ取得情報を暗号化して得られた暗号文ブロックを利用して、前記所定の平文ブロックの次の平文ブロックを暗号化してもよい。
【００１４】
また、上記の暗号化装置において、前記暗号化部は、前記平文データから分割された平文ブロックを暗号化して得られた暗号文ブロックにおける最後の暗号文ブロックを利用して前記前記初期化ベクタ取得情報を暗号化してもよい。
【００１５】
また、本発明の一態様としての復号装置は、暗号文データに含まれる暗号文ブロックのそれぞれについて、１つ前の暗号文ブロックを利用して復号対象の暗号文ブロックを復号し、先頭の暗号文ブロックについては、当該先頭の暗号文ブロックよりも先に復号して得た初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して復号する復号部を備える。
【００１６】
また、上記の復号装置において、前記復号部は、初期化ベクタ取得情報の暗号文ブロックを復号して得た初期化ベクタ取得情報を初期化ベクタとして取得してもよい。
【００１７】
また、上記の復号装置において、前記復号部は、初期化ベクタ取得情報の暗号文ブロックを復号して得た初期化ベクタ取得情報が示す初期化ベクタの生成の仕方に従って初期化ベクタを生成してもよい。
【００１８】
また、上記の復号装置において、前記復号部は、複数の暗号文データにおける第１の暗号文データを復号するにあたり、第１の暗号文データの復号によって得られた初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して先頭の暗号文ブロックを復号し、第１の暗号文データより後ろの第２の暗号文ブロックを復号するにあたり、第１の暗号文データの先頭の暗号文ブロックの復号に利用した初期化ベクタを利用してもよい。
【００１９】
また、上記の復号装置において、前記復号部は、複数の暗号文データにおける第１の暗号文データを復号するにあたり、第１の暗号文データの復号によって得られた初期化ベクタ取得情報として取得した初期化ベクタを利用して先頭の暗号文ブロックを復号し、第１の暗号文データより後ろの第２の暗号文データが含む初期化ベクタ取得情報の暗号文ブロックの復号によって得られた初期化ベクタ取得情報が、第１の暗号文データの復号に利用した初期化ベクタを利用して第２の暗号文データ以降の暗号文データを復号すべきことを示している場合、第２の暗号文データ以降の復号にあたり、第１の暗号文データの復号に利用した初期化ベクタにより先頭の暗号文ブロックを復号してもよい。
【００２０】
また、上記の復号装置において、前記復号部は、暗号文データに含まれる暗号文ブロックにおける最後と先頭以外の暗号文ブロックを復号して初期化ベクタ取得情報を取得してもよい。
【００２１】
また、上記の復号装置において、前記復号部は、暗号文データに含まれる暗号文ブロックのうち最後の暗号文ブロックを復号して初期化ベクタ取得情報を取得してもよい。
【００２２】
また、本発明の一態様としての暗号化方法は、初期化ベクタを生成する初期化ベクタ生成ステップと、平文データから分割された平文ブロックのうちの先頭の平文ブロックについて前記初期化ベクタを利用して暗号化し、先頭以外の平文ブロックについて、１つ前の暗号化によって得た暗号文ブロックを利用して暗号化し、復号装置が復号に用いるべき初期化ベクタを取得するのに利用する初期化ベクタ取得情報について、１つ前のブロックを暗号化して得た暗号文ブロックを利用して暗号化する暗号化ステップと、前記平文データに対応する暗号文ブロックと、前記初期化ベクタ取得情報に対応する暗号文ブロックとを含む暗号文データを出力する暗号文データ出力ステップとを備える。
【００２３】
また、本発明の一態様としての復号方法は、暗号文データに含まれる暗号文ブロックのそれぞれについて、１つ前の暗号文ブロックを利用して復号対象の暗号文ブロックを復号し、先頭の暗号文ブロックについては、当該先頭の暗号文ブロックよりも先に復号して得た初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して復号する復号ステップを備える。
【００２４】
また、本発明の一態様としてのプログラムは、コンピュータに、初期化ベクタを生成する初期化ベクタ生成ステップと、平文データから分割された平文ブロックのうちの先頭の平文ブロックについて前記初期化ベクタを利用して暗号化し、先頭以外の平文ブロックについて、１つ前の暗号化によって得た暗号文ブロックを利用して暗号化し、復号装置が復号に用いるべき初期化ベクタを取得するのに利用する初期化ベクタ取得情報について、１つ前のブロックを暗号化して得た暗号文ブロックを利用して暗号化する暗号化ステップと、前記平文データに対応する暗号文ブロックと、前記初期化ベクタ取得情報に対応する暗号文ブロックとを含む暗号文データを出力する暗号文データ出力ステップとを実行させるためのものである。
【００２５】
また、本発明の一態様としてのプログラムは、コンピュータに、暗号文データに含まれる暗号文ブロックのそれぞれについて、１つ前の暗号文ブロックを利用して復号対象の暗号文ブロックを復号し、先頭の暗号文ブロックについては、当該先頭の暗号文ブロックよりも先に復号して得た初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して復号する復号ステップを実行させるためのものである。
【発明の効果】
【００２６】
以上説明したように、本発明によれば、暗号文ブロック連鎖モードによる暗号化において初期化ベクタの漏洩の防止が図られ、暗号強度を向上させることが可能になるという効果が得られる。
【図面の簡単な説明】
【００２７】
【図１】本実施形態の暗号化装置と復号装置の構成例を示す図である。
【図２】本実施形態の暗号化装置と復号装置を具現化した例としてのＩＣカードとリーダライタを示す図である。
【図３】ＣＢＣモードに対応する暗号化装置が実行する一般的な暗号化の手順例を示す図である。
【図４】ＣＢＣモードに対応する復号装置が実行する一般的な復号の手順例を示す図である。
【図５】第１の実施形態の暗号化装置が実行する暗号化の手順例を示す図である。
【図６】第１の実施形態の復号装置が実行する暗号化の手順例を示す図である。
【図７】第２の実施形態の暗号化装置が実行する暗号化の手順例を示す図である。
【図８】第２の実施形態の復号装置が実行する暗号化の手順例を示す図である。
【図９】第３の実施形態における暗号化装置と復号装置が実行する処理手順例を示すフローチャートである。
【図１０】第４の実施形態における暗号化装置と復号装置が実行する処理手順例を示すフローチャートである。
【図１１】第５の実施形態における暗号化装置と復号装置が実行する処理手順例を示すフローチャートである。
【図１２】第６の実施形態における暗号化装置が実行する暗号化の手順例を示す図である。
【図１３】第６の実施形態における復号装置が実行する復号の手順例を示す図である。
【発明を実施するための形態】
【００２８】
＜第１の実施形態＞
［暗号化装置と復号装置の構成例］
図１は、本実施形態の暗号化装置１００と復号装置２００の構成例を示している。
まず、暗号化装置１００について説明する。
暗号化装置１００は、平文データ出力部１０１、初期化ベクタ生成部１０２、暗号化部１０３、暗号文データ出力部１０４及び送信部１０５を備える。
平文データ出力部１０１は、暗号化対象の平文データを暗号化部１０３に出力する。具体的に、平文データ出力部１０１は、例えば平文データ記憶部（図示せず）を備え、記憶部が予め記憶している平文データを読み出し、暗号化部に出力するように構成することができる。あるいは、平文データ出力部１０１は、例えばデータインターフェースなどを経由して外部から入力された平文データを暗号化部１０３に出力するようにしてもよい。
【００２９】
初期化ベクタ生成部１０２は、初期化ベクタを生成する。初期化ベクタ（Initial Vector:IV）は、本実施形態が対応するＣＢＣモードによるブロック暗号において、先頭の平文ブロックの暗号化の際に利用されるデータである。
本実施形態において、初期化ベクタの生成の仕方については特に限定されない。例えば、初期化ベクタ生成部１０２は、暗号化対象の平文データを利用して初期化ベクタを生成してよい。あるいは、初期化ベクタ生成部１０２は、乱数を発生させ、発生された乱数に基づいて初期化ベクタを生成してもよい。
【００３０】
暗号化部１０３は、平文データから分割された平文ブロックのうちの先頭の平文ブロックについて初期化ベクタを利用してブロック暗号化し、先頭以外の平文ブロックについて、１つ前のブロック暗号化によって得た暗号文ブロックを利用して暗号化する。
つまり、暗号化部１０３は、ブロック暗号方式におけるＣＢＣ（Cipher Block Chaining）モードに対応したブロック単位の暗号化を行い、暗号文ブロックを得る。
そのうえで、暗号化部１０３は、初期化ベクタ取得情報についても、１つ前のブロックをブロック暗号化して得た暗号文ブロックを利用してブロック暗号化する。
初期化ベクタ取得情報は、復号装置２００が復号に用いるべき初期化ベクタを取得するのに利用する情報である。
【００３１】
初期化ベクタ取得情報は、復号装置２００が復号に用いるべき初期化ベクタを取得するのに利用する情報である。
具体的に、第１の実施形態における初期化ベクタ取得情報は、初期化ベクタ生成部１０２が生成した初期化ベクタそのものである。つまり、この場合の復号装置２００は、初期化ベクタ取得情報の暗号文ブロックのブロック復号により初期化ベクタ取得情報を取得することを以て初期化ベクタを取得することができる。
【００３２】
暗号文データ出力部１０４は、平文データに対応する暗号文ブロックと、前記初期化ベクタ取得情報に対応する暗号文ブロックとを含む暗号文データを出力する。
送信部１０５は、暗号文データ出力部１０４が出力した暗号文データを復号装置２００に送信する。なお、送信部１０５に復号装置２００を送信するための伝送路は、ネットワークあるいは所定のデータインターフェースなどであればよく、また、無線であってもよいし有線であってもよい。
【００３３】
次に、復号装置２００について説明する。
復号装置２００は、受信部２０１、復号部２０２及び平文データ生成部２０３を備える。
受信部２０１は、暗号化装置１００から送信された暗号文データを受信する。
【００３４】
復号部２０２は、平文データに対応する暗号文データに含まれる暗号文ブロックのそれぞれについて、１つ前の暗号文ブロックを利用して現復号対象の暗号文ブロックの復号を行う。これにより、復号対象の暗号文ブロックに対応する平文ブロックが得られる。
また、復号部２０２は、先頭の暗号文ブロックについては、当該先頭の暗号文ブロックよりも先に復号して得た初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して復号を行う。
つまり、復号部２０２は、受信部２０１にて受信された暗号文データに含まれる暗号文ブロックについて、暗号化装置１００のブロック暗号化アルゴリズムに対応する復号を行って平文ブロックを得る。この際に、復号部２０２は、暗号文データに含まれている初期化ベクタ取得情報の暗号文ブロックを復号して初期化ベクタ取得情報を得る。そして、復号部２０２は、復号によって得られた初期化ベクタ取得情報に基づいて取得した初期化ベクタを利用して先頭の暗号文ブロックを復号する。
平文データ生成部２０３は、復号部２０２が復号して得た平文ブロックを利用して平文データを生成する。
【００３５】
［暗号化装置と復号装置の具現化例］
図２は、本実施形態の暗号化装置１００と復号装置２００とを具現化した一例として、ＩＣカード３００及びリーダライタ４００を示している。
ＩＣカード３００は、集積回路が実装されたカードである。リーダライタ４００は、ＩＣカード３００と所定の通信方式による通信を行うことで、ＩＣカード３００からのデータの読み出し、あるいはＩＣカード３００に対するデータの書き込みを行う。
【００３６】
図２のＩＣカード３００とリーダライタ４００の組合せにおいては、ＩＣカード３００がリーダライタ４００にデータを送信するときと、リーダライタ４００がＩＣカード３００にデータを送信するときとがある。
ＩＣカード３００がリーダライタ４００にデータを送信するにあたり送受信データが暗号化されるときには、ＩＣカード３００が暗号化装置１００として機能し、リーダライタ４００が復号装置２００として機能する。
また、リーダライタ４００がＩＣカード３００にデータを送信するにあたり送受信データが暗号化されるときには、リーダライタ４００が暗号化装置１００として機能し、ＩＣカード３００が復号装置２００として機能する。
【００３７】
［ＣＢＣモードとしての一般的な暗号化と復号処理］
本実施形態の暗号化装置１００と復号装置２００が対応するＣＢＣモードは、ブロック暗号方式における利用モードの１つである。ブロック暗号方式は、共通鍵暗号方式の１つであり、固定長のブロック単位で暗号化、復号を行う。そのうえで、ＣＢＣモードでは、１つ前の平文ブロックを暗号化して得られた暗号文ブロックと現平文ブロックとで排他的論理和（exclusive or）演算を行い、排他的論理和演算の結果に対して暗号化を行う。
【００３８】
図３は、ＣＢＣモードに対応する暗号化装置が実行する一般的な暗号化の手順例を示している。
ＣＢＣモードでの暗号化では、暗号化対象の平文データを複数の固定長のブロックに分割する。図３の例では、平文データＤｐｌｎを４つの平文ブロックＭ１，Ｍ２，Ｍ３，Ｍ４に分割した例を示している。
【００３９】
上記のように、ＣＢＣモードでは、平文ブロックを暗号化するにあたり、１つ前の平文ブロックを暗号化した暗号文ブロックを利用する。しかし、先頭の平文ブロックＭ１については、１つ前の平文ブロックを暗号化した暗号文ブロックは存在しない。
そこで、ＣＢＣモードにおいて先頭の平文ブロックＭ１を暗号化するにあたっては初期化ベクタＤｉｖを利用する。初期化ベクタＤｉｖは、予め定められた固定値であり、復号装置は暗号化装置と同じ初期化ベクタＤｉｖを共有している。そして、暗号化装置は、図３に示すように、先頭の平文ブロックＭ１と初期化ベクタＤｉｖとの排他的論理和演算を行う(ステップＳ１１)。
次に、暗号化装置は、ステップＳ１１による排他的論理和演算の結果を、予め定められた共通鍵を利用してブロック単位の暗号化（ブロック暗号化）を行う(ステップＳ２１)。これにより、平文ブロックＭ１に対応する暗号文ブロックＣ１が得られる。
【００４０】
次に、暗号化装置は、平文ブロックＭ１の次の平文ブロックＭ２と暗号文ブロックＣ１との排他的論理和演算を行う(ステップＳ１２)。そのうえで、暗号化装置は、排他的論理和の演算結果についてブロック暗号化を実行する(ステップＳ２２)。これにより、平文ブロックＭ２に対応する暗号文ブロックＣ２が得られる。
次に、暗号化装置は、平文ブロックＭ３と暗号文ブロックＣ２との排他的論理和演算を行い(ステップＳ１３)、ブロック暗号化(ステップＳ２３)を実行することにより、平文ブロックＭ３に対応する暗号文ブロックＣ３を得る。
次に、暗号化装置は、平文ブロックＭ４と暗号文ブロックＣ３との排他的論理和演算を行い(ステップＳ１４)、ブロック暗号化(ステップＳ２４)を実行することにより、平文ブロックＭ４に対応する暗号文ブロックＣ４を得る。
このようにして、ＣＢＣモードでは、平文ブロックＭ１〜Ｍ４ごとに対応する暗号文ブロックＣ１〜Ｃ４が得られる。そして、暗号文ブロックＣ１〜Ｃ４により、平文データＤｐｌｎに対応する暗号文データＤｅｎｃが得られる。
【００４１】
図４は、ＣＢＣモードに対応する復号装置が図３の暗号文データＤｅｎｃを復号する一般的な手順例を示している。
この場合の暗号文データＤｅｎｃは、４つの暗号文ブロックＣ１〜Ｃ４を含む。復号装置は、暗号化装置が暗号化の際に利用したのと同じ初期化ベクタＤｉｖを共有している。そこで、復号装置は、先頭の暗号文ブロックＣ１については、まず、共通鍵を利用したブロック単位での復号（ブロック復号）を行い(ステップＳ３１)、ステップＳ３１による復号結果と初期化ベクタＤｉｖとの排他的論理和演算を行う(ステップＳ４１)。これにより、暗号文ブロックＣ１に対応する平文ブロックＭ１が取得される。
また、復号装置は、２番目の暗号文ブロックＣ２についてブロック復号を行い（ステップＳ３２)、復号結果と１つ前の暗号文ブロックＣ１との排他的論理和演算を行うことで（ステップＳ４２）、暗号文ブロックＣ２に対応する平文ブロックＭ２を取得する。
また、復号装置は、３番目の暗号文ブロックＣ３についてブロック復号を行い（ステップＳ３３)、復号結果と暗号文ブロックＣ２との排他的論理和演算を行うことで（ステップＳ４３）、暗号文ブロックＣ３に対応する平文ブロックＭ３を取得する。
また、復号装置は、４番目の暗号文ブロックＣ４についてブロック復号を行い（ステップＳ３４)、復号結果と暗号文ブロックＣ３との排他的論理和演算を行うことで（ステップＳ４４）、暗号文ブロックＣ４に対応する平文ブロックＭ４を取得する。
このように取得された平文ブロックＭ１〜Ｍ４を順に配列することにより、復元された平文データＤｐｌｎが取得される。
【００４２】
図３及び図４に示したＣＢＣモードによる暗号化と復号にあっては、同じ固定値の初期化ベクタＤｉｖを暗号化装置と復号装置とのそれぞれが予め記憶している。そして、暗号化装置と復号装置は、それぞれが記憶している初期化ベクタＤｉｖを暗号化、復号化に利用する。このために、暗号化装置または復号装置のいずれかが記憶している初期化ベクタＤｉｖが漏洩した場合には暗号解読の足掛かりとなってしまうおそれがある。
そこで、本実施形態では、以下に説明するようにしてＣＢＣモードにおける暗号化と復号とを行うことで、初期化ベクタＤｉｖの漏洩に関するセキュリティを向上させる。
【００４３】
［第１の実施形態における暗号化、復号の手順例］
図５は、本実施形態の暗号化装置１００が実行する暗号化の手順例を示している。なお、図５において、図３と同様の部分については図３と同じ符号を付している。
暗号化にあたり、暗号化装置１００の平文データ出力部１０１は、平文データＤｐｌｎを暗号化部１０３に出力する。また、初期化ベクタ生成部１０２は、初期化ベクタＤｉｖを所定のアルゴリズによって生成し、生成した初期化ベクタＤｉｖを暗号化部１０３に出力する。
【００４４】
暗号化部１０３は、平文データ出力部１０１から入力した平文データＤｐｌｎを、４つの平文ブロックＭ１，Ｍ２，Ｍ３，Ｍ４に分割する。次に、暗号化部１０３は、先頭の平文ブロックＭ１と初期化ベクタ生成部１０２が生成した初期化ベクタＤｉｖとの排他的論理和演算を実行する(ステップＳ１１)。暗号化部１０３は、ステップＳ１１の演算結果を共通鍵によりブロック暗号化する(ステップＳ２１)。これにより、平文ブロックＭ１に対応する暗号文ブロックＣ１が得られる。
次に、暗号化部１０３は、２番目の平文ブロックＭ２と、前の平文ブロックＭ１の暗号化により得られた暗号文ブロックＣ１との排他的論理和演算を行い（ステップＳ１２）、ステップＳ１２の演算結果をブロック暗号化し(ステップＳ２２)、暗号文ブロックＣ２を得る。
次に、暗号化部１０３は、３番目の平文ブロックＭ３と、前の平文ブロックＭ２に対応する暗号文ブロックＣ２との排他的論理和演算（ステップＳ１３）と、ステップＳ１３の演算結果のブロック暗号化（ステップＳ２３）により暗号文ブロックＣ３を得る。
次に、暗号化部１０３は、４番目の平文ブロックＭ４と、前の平文ブロックＭ３に対応する暗号文ブロックＣ３との排他的論理和演算（ステップＳ１４）と、ステップＳ１４の演算結果のブロック暗号化（ステップＳ２４）により暗号文ブロックＣ４を得る。
【００４５】
次に、暗号化部１０３は、平文ブロックＭ１の暗号化に利用した初期化ベクタＤｉｖと、前回の暗号化により平文ブロックＭ４を暗号化して得られた暗号文ブロックＣ４との排他的論理和演算を実行する（ステップＳ１５）。暗号化部１０３は、ステップＳ１５の演算結果をブロック暗号化することにより（ステップＳ２５）、初期化ベクタＤｉｖに対応する暗号文ブロックＣ５を得る。
第１の実施形態において、ステップＳ１５にて排他的論理和演算に利用する初期化ベクタＤｉｖが初期化ベクタ取得情報である。つまり、ステップＳ１５は、初期化ベクタ取得情報と１つ前の暗号化により得られた暗号文ブロックとの排他的論理和演算を実行する処理である。
【００４６】
このように本実施形態においては、ＣＢＣモードによる暗号化にあたり、平文データＤｐｌｎから分割された平文ブロックＭ１〜Ｍ４ごとに対応する暗号文ブロックＣ１〜Ｃ４に加えて、初期化ベクタＤｉｖに対応する暗号文ブロックＣ５を得る。暗号文データ出力部１０４は、暗号文ブロックＣ１〜Ｃ４に対してさらに暗号文ブロックＣ５を含めて暗号文データＤｅｎｃを生成し、送信部１０５に出力する。
送信部１０５は、暗号文データ出力部１０４が出力した暗号文データＤｅｎｃを復号装置に対して送信する。
このように、本実施形態の暗号化装置１００は、平文データＤｐｌｎから分割した平文ブロックとともに初期化ベクタ取得情報についてもブロック暗号化する。そして、暗号化装置１００は、平文ブロックを暗号化した暗号文ブロックと、初期化ベクタＤｉｖを暗号化した暗号文ブロックとを利用して暗号文データＤｅｎｃを生成する。
【００４７】
次に、図６を参照して、本実施形態の復号装置２００が実行する復号の手順例を示している。なお、図６において、図４と同様の部分については図４と同一符号を付している。
復号装置２００の復号部２０２は、受信部２０１にて受信された暗号文データＤｅｎｃを入力する。
【００４８】
復号部２０２は、入力した暗号文データＤｅｎｃにおける先頭の暗号文ブロックＣ１を復号するにあたり、先に、初期化ベクタ取得情報としての初期化ベクタＤｉｖに対応する暗号文ブロックＣ５を復号して初期化ベクタＤｉｖを得る。
つまり、復号部２０２は、暗号文ブロックＣ５について共通鍵を利用して復号する（ステップＳ３５）。次に、復号部２０２は、ステップＳ３５による復号結果と暗号文ブロックＣ５の１つ前の暗号文ブロックＣ４との排他的論理和演算を実行する(ステップＳ４５)。復号部２０２は、ステップＳ４５による演算結果として初期化ベクタＤｉｖを得ることができる。
【００４９】
そして、上記のように初期化ベクタＤｉｖを取得した後、復号部２０２は、先頭の暗号文ブロックＣ１を復号する。
つまり、復号部２０２は、暗号文ブロックＣ１について共通鍵を利用してブロック復号を行う（ステップＳ３１）。次に、復号部２０２は、ステップＳ３１による復号結果と、ステップＳ３５、Ｓ４５により取得した初期化ベクタＤｉｖとの排他的論理和演算を実行し(ステップＳ４１)、平文ブロックＭ１を得る。
【００５０】
また、復号部２０２は、２番目〜４番目の暗号文ブロックＣ２〜Ｃ４については、それぞれ、１つ前の暗号文ブロックＣ１〜Ｃ３をそれぞれ利用した復号処理によって、平文ブロックＭ２〜Ｍ４を得る。
つまり、復号部２０２は、暗号文ブロックＣ２については、ブロック復号を行ったうえで（ステップＳ３２）、その復号結果と暗号文ブロックＣ１との排他的論理和演算を実行し(ステップＳ４２)、平文ブロックＭ２を得る。
また、復号部２０２は、暗号文ブロックＣ３についてブロック復号を行ったうえで（ステップＳ３３）、その復号結果と暗号文ブロックＣ２との排他的論理和演算を実行し(ステップＳ４３)、平文ブロックＭ３を得る。
また、復号部２０２は、暗号文ブロックＣ４についてブロック復号を行ったうえで（ステップＳ３４）、その復号結果と暗号文ブロックＣ３との排他的論理和演算を実行し(ステップＳ４４)、平文ブロックＭ４を得る。
上記の復号処理によって本実施形態の復号部２０２は、暗号化された初期化ベクタＤｉｖと平文ブロックＭ１〜Ｍ４を得ることができる。平文データ生成部２０３は、復号処理によって得た平文ブロックＭ１〜Ｍ４を連結して、平文データＤｐｌｎを生成することができる。
【００５１】
本実施形態において、先頭の暗号文ブロックＣ１を復号するには、初期化ベクタＤｉｖの暗号文ブロックＣ５を復号しておく必要がある。つまり、本実施形態における復号では、初期化ベクタＤｉｖの暗号文ブロックと先頭の暗号文ブロックＣ１との復号順の関係としては、初期化ベクタＤｉｖの暗号文ブロックＣ５の復号が先で、先頭の暗号文ブロックＣ１の復号が後になる。
ただし、他の暗号文ブロックの復号順については特に制限されるものではない。一例として、暗号文ブロックＣ２、Ｃ５、Ｃ４、Ｃ３、Ｃ２の順でブロック復号を行っても、暗号文ブロックＣ５のほうが暗号文ブロックＣ１よりも先に復号されているので、結果的に、暗号文ブロックＣ１〜Ｃ５を全て適切に復号できる。
【００５２】
図５及び図６の説明から理解されるように、第１の実施形態においては、暗号化装置１００が暗号化を行うにあたり初期化ベクタＤｉｖを生成し、生成した初期化ベクタＤｉｖを利用して先頭の平文ブロックを暗号化するようにしている。そのうえで、暗号化装置１００は、平文データＤｐｌｎとともに初期化ベクタＤｉｖ（初期化ベクタ取得情報）をブロック暗号化し、暗号文データＤｅｎｃに初期化ベクタＤｉｖの暗号文ブロックを含めるようにしている。
復号装置２００は、受信した暗号文データＤｅｎｃに含まれる初期化ベクタＤｉｖ（初期化ベクタ取得情報）の暗号文ブロックを復号して初期化ベクタＤｉｖを取得することができる。これにより、復号装置２００は、取得した初期化ベクタＤｉｖを利用して先頭の暗号文ブロックを復号することができる。
【００５３】
このような構成であれば、暗号化装置１００と復号装置２００との間で同じ初期化ベクタＤｉｖを予め記憶させておく必要がない。また、初期化ベクタは、暗号化装置１００と復号装置２００との伝送路上では暗号化されているので、暗号文ブロックの解読ができない限りは初期化ベクタを得ることができない。これにより、本実施形態では、初期化ベクタの漏洩防止が図られ、暗号強度をさらに向上させることができる。
【００５４】
＜第２の実施形態＞
［第２の実施形態における暗号化、復号の手順例］
続いて、第２の実施形態について説明する。
図７は、第２の実施形態における暗号化装置１００が実行する暗号化の手順例を示している。なお、図７において、図５と同一部分には同一符号を付して説明を省略する。
図７に示すように、第２の実施形態における暗号化装置１００の暗号化部１０３は、初期化ベクタ生成部１０２が生成した初期化ベクタＤｉｖを入力して初期化ベクタ生成情報Ｄｇｅｎを生成する情報変換を実行する(ステップＳ５１)。
初期化ベクタ生成情報Ｄｇｅｎは、初期化ベクタ取得情報として初期化ベクタＤｉｖの生成の仕方を示す情報である。一例として、初期化ベクタＤｉｖが平文ブロックＭ２、Ｍ３を利用した所定の演算式の演算により生成されたものであった場合、暗号化部１０３は、ステップＳ５１として、上記の演算式を示す情報を初期化ベクタ生成情報Ｄｇｅｎとして生成する。
暗号化部１０３は、初期化ベクタ生成情報Ｄｇｅｎについて、ステップＳ１５、Ｓ２５の処理により暗号文ブロックＣ５に暗号化する。暗号文データ出力部１０４は、第１の実施形態の場合と同様に、平文ブロックＭ１〜Ｍ４に対応する暗号文ブロックＣ１〜Ｃ４と、初期化ベクタ生成情報Ｄｇｅｎに対応する暗号文ブロックＣ５とにより生成した暗号文データＤｅｎｃを出力する。
【００５５】
図８は、第２の実施形態における復号装置２００が実行する復号の手順例を示している。なお、図８において、図６と同一部分には同一符号を付して説明を省略する。
第２の実施形態においては、先頭の暗号文ブロックＣ１の復号に先立って、初期化ベクタ生成情報Ｄｇｅｎに対応する暗号文ブロックＣ５を、ステップＳ３５、Ｓ４５により復号して初期化ベクタ生成情報Ｄｇｅｎを得る。
復号部２０２は、初期化ベクタ生成情報Ｄｇｅｎが示す内容に従って初期化ベクタを生成する(ステップＳ５２)。前述の例のように、初期化ベクタ生成情報Ｄｇｅｎが、平文ブロックＭ２、Ｍ３を利用した所定の演算式の演算により初期化ベクタＤｉｖを生成すべきことを示している場合、復号部２０２は、以下のように初期化ベクタを生成する。つまり、復号部２０２は、ステップＳ３２、Ｓ４２により復号した平文ブロックＭ２と、ステップＳ３３、Ｓ４３により復号した平文ブロックＭ３とを取得する。そのうえで、復号部２０２は、取得した平文ブロックＭ２、Ｍ３を初期化ベクタ生成情報Ｄｇｅｎが示す演算式に代入して演算を実行する。この演算結果として、初期化ベクタＤｉｖが生成される。
復号部２０２は、先頭の暗号文ブロックＣ１を復号する際には、ステップＳ５２により生成した初期化ベクタＤｉｖをステップＳ４１の排他的論理和演算に利用する。
【００５６】
＜第３の実施形態＞
続いて、第３の実施形態について説明する。
暗号化装置１００と復号装置２００との間では、例えば１回のセッションにおいて、暗号文データＤｅｎｃの送受信を複数回行うことができる。なお、ここでのセッションとは、暗号化装置１００と復号装置２００との接続が開始されてから終了までにおける通信を指す。
第３の実施形態では、１セッションにおいて暗号文データＤｅｎｃの送受信を複数回行う場合において、１回の暗号文データＤｅｎｃの送受信ごとに初期化ベクタＤｉｖを変更して通信を行う。
【００５７】
図９のフローチャートは、第３の実施形態における暗号化装置１００と復号装置２００が１セッションにおいて実行する処理手順例を示している。
現セッションにおける１番目の暗号文データＤｅｎｃの送受信にあたり、暗号化装置１００における初期化ベクタ生成部１０２は、初期化ベクタ（図では「ＩＶ」と表記）を生成する(ステップＳ１１１−１)。
次に、暗号化部１０３は、ステップＳ１１１−１により生成された初期化ベクタを利用して例えば図５または図７にて説明したように、平文ブロックと初期化ベクタ取得情報の暗号化を行う（ステップＳ１１２−１）。
暗号文データ出力部１０４は、平文ブロックの暗号文ブロックと初期化ベクタ取得情報の暗号文ブロックとを含む暗号文データＤｅｎｃを生成し、生成した暗号文データＤｅｎｃを送信部１０５から復号装置２００に対して送信させる（ステップＳ１１３−１）。
【００５８】
ステップＳ１１３−１により送信された暗号文データＤｅｎｃは、復号装置２００の受信部２０１にて受信される（ステップＳ２１１−１）。復号部２０２は、ステップＳ２１１−１により受信された暗号文データＤｅｎｃに含まれる暗号文ブロックの復号を実行する（ステップＳ２１２−１）。ステップＳ２１２−１による暗号文ブロックの復号は、図６または図８にて説明したように、初期化ベクタ取得情報（初期化ベクタＤｉｖ、初期化ベクタ生成情報）の暗号文ブロックのブロック復号の処理を含んでいる。
平文データ生成部２０３は、ステップＳ２１２−１により得られた平文ブロックを連結して平文データＤｐｌｎを生成する（ステップＳ２１３−１）。
【００５９】
ステップＳ１１１−１〜Ｓ１１３−１により１番目の暗号文データＤｅｎｃを送信した後において、さらに２番目の暗号文データＤｅｎｃを送信すべきこととなった場合、初期化ベクタ生成部１０２は、ステップＳ１１１−１のときとは異なる初期化ベクタＤｉｖを生成する（ステップＳ１１１−２）。つまり、初期化ベクタ生成部１０２は、暗号文データＤｅｎｃの送信ごとに初期化ベクタＤｉｖを変更する。このように初期化ベクタＤｉｖを変更するにあたり、初期化ベクタ生成部１０２は乱数を発生させればよい。あるいは、初期化ベクタ生成部１０２は、予め定められた所定の変更規則や演算式などに従って初期化ベクタＤｉｖを変更してもよい。
【００６０】
次に、暗号化部１０３は、ステップＳ１１１−２により生成された初期化ベクタＤｉｖを利用して２番目の平文データＤｐｌｎの暗号化と初期化ベクタ取得情報の暗号化を行う（ステップＳ１１２−２）。
暗号文データ出力部１０４は、ステップＳ１１２−２によって得られた平文ブロックの暗号文ブロックと初期化ベクタ取得情報の暗号文ブロックとを含む暗号文データＤｅｎｃを生成し、復号装置２００に対して送信する（ステップＳ１１３−２）。
【００６１】
また、上記のように２番目の暗号文データＤｅｎｃを送信した後において、さらに３番目の暗号文データＤｅｎｃを送信すべきこととなった場合、初期化ベクタ生成部１０２は、さらに、ステップＳ１１１−１、Ｓ１１１−２のときとは異なる初期化ベクタＤｉｖを生成する（ステップＳ１１１−３）。
暗号化部１０３は、ステップＳ１１１−３により生成された初期化ベクタＤｉｖを利用して３番目の平文データＤｐｌｎの平文ブロックと初期化ベクタ取得情報の暗号化を行う（ステップＳ１１２−３）。
暗号文データ出力部１０４は、ステップＳ１１２−３によって得られた平文ブロックの暗号文ブロックと初期化ベクタ取得情報の暗号文ブロックとを含む暗号文データＤｅｎｃを生成し、復号装置２００に対して送信する（ステップＳ１１３−３）。
以降、同様にして、暗号化装置１００は、新たに平文データＤｐｌｎを暗号化するにあたり前回までとは異なる初期化ベクタＤｉｖを生成する。そして、暗号化装置１００は、生成した初期化ベクタＤｉｖを利用して、今回の平文データＤｐｌｎの暗号化と初期化ベクタ取得情報の暗号化を行う。
【００６２】
復号装置２００は、ステップＳ１１３−２により送信された暗号文データＤｅｎｃを受信し（ステップＳ２１１−２）、初期化ベクタ取得情報の暗号文ブロックのブロック復号を伴う暗号文データＤｅｎｃの復号を実行する（ステップＳ２１２−２）。平文データ生成部２０３は、ステップＳ２１２−２により得られた平文ブロックを連結して平文データＤｐｌｎを生成する（ステップＳ２１３−２）。
また、復号装置２００は、ステップＳ１１３−３により送信された暗号文データＤｅｎｃを受信し（ステップＳ２１１−３）、初期化ベクタ取得情報の暗号文ブロックのブロック復号を伴う暗号文データＤｅｎｃの復号を実行する（ステップＳ２１２−３）。
平文データ生成部２０３は、ステップＳ２１２−３により得られた平文ブロックを連結して平文データＤｐｌｎを生成する（ステップＳ２１３−３）。
以降、同様にして、復号装置２００は、新たに暗号文データＤｅｎｃを受信するごとに、初期化ベクタ取得情報の暗号文ブロックのブロック復号を伴う暗号文データＤｅｎｃの復号を実行して平文データＤｐｌｎを得る。
【００６３】
このように、１回の暗号文データＤｅｎｃの送受信ごとに対応して初期化ベクタＤｉｖを変更することにより、初期化ベクタＤｉｖの漏洩に対するセキュリティをさらに強化することができる。
なお、１セッションにおいては、暗号化しないデータを送受信する通信も含まれてよいのであるが、図９においては、例えば説明を簡単にするための便宜上、暗号文データＤｅｎｃを送受信する通信のみを示している。
【００６４】
なお、第３の実施形態における１回の暗号分データＤｅｎｃの送受信にあたり、暗号化装置１００が暗号文データＤｅｎｃに含める初期化ベクタ取得情報は、初期化ベクタＤｉｖそのものであってもよいし、初期化ベクタ生成情報であってもよい。
また、第３の実施形態においては、セッションにおける初期化ベクタＤｉｖとしての初期化ベクタ取得情報を含む暗号分データＤｅｎｃの送受信と、初期化ベクタ生成情報としての初期化ベクタ取得情報を含む暗号分データＤｅｎｃの送受信とが混在してもよい。この場合において、初期化ベクタＤｉｖとしての初期化ベクタ取得情報を含む暗号分データＤｅｎｃの送受信と、初期化ベクタ生成情報としての初期化ベクタ取得情報を含む暗号分データＤｅｎｃの送受信は、所定回数ずつ交互に行われてもよいし、ランダムな順序で行われてもよい。
【００６５】
＜第４の実施形態＞
続いて、第４の実施形態について説明する。第４の実施形態においては、暗号化装置１００と復号装置２００との間で、１セッションにおいて複数回の暗号文データＤｅｎｃの送受信を行う場合において、各回に対応する暗号化と復号について共通の初期化ベクタＤｉｖを使用する。
【００６６】
図１０のフローチャートは、第４の実施形態に対応して暗号化装置１００と復号装置２００が１セッションにおいて実行する処理手順例を示している。
現セッションにおける１番目の暗号文データＤｅｎｃの送受信にあたり、暗号化装置１００における初期化ベクタ生成部１０２は、初期化ベクタＤｉｖを生成する(ステップＳ３１１−１)。
次に、暗号化部１０３は、ステップＳ３１１−１により生成された初期化ベクタＤｉｖを利用して例えば図５または図７にて説明したように暗号化を行う（ステップＳ３１２−１）。つまり、暗号化部１０３は、平文データを分割した平文ブロックについて暗号化した暗号文ブロックを得るとともに、初期化ベクタ取得情報を暗号化した暗号文ブロックを得る。
暗号文データ出力部１０４は、平文ブロックの暗号文ブロックと初期化ベクタ取得情報の暗号文ブロックとを含む暗号文データＤｅｎｃを生成し、送信部１０５から復号装置２００に対して生成した暗号文データＤｅｎｃを送信させる（ステップＳ３１３−１）。
【００６７】
また、暗号化部１０３は、ステップＳ３１１−１により生成した初期化ベクタＤｉｖを保持する（ステップＳ３１４−１）。これにより、現セッションにおける１番目（第１）の平文データＤｐｌｎを暗号化するのに利用した初期化ベクタＤｉｖを、以降の平文データＤｐｌｎの暗号化に利用することができる。
【００６８】
ステップＳ３１３−１により送信された暗号文データＤｅｎｃは、復号装置２００の受信部２０１が受信する（ステップＳ４１１−１）。復号部２０２は、ステップＳ４１１−１により受信された暗号文データＤｅｎｃに含まれる暗号文ブロックを復号する（ステップＳ４１２−１）。
ステップＳ４１２−１による暗号文ブロックの復号は、図６または図８にて説明したように、初期化ベクタ取得情報（初期化ベクタＤｉｖ、初期化ベクタ生成情報）の暗号文ブロックのブロック復号を伴う。暗号化部１０３は、復号により得られた初期化ベクタ取得情報に基づいて取得した初期化ベクタＤｉｖを先頭の暗号文ブロックの復号時の排他的論理和演算に利用する。
平文データ生成部２０３は、ステップＳ４１２−１により得られた平文ブロックを連結して平文データＤｐｌｎを生成する（ステップＳ４１３−１）。
【００６９】
次に、復号部２０２は、ステップＳ４１２−１の復号によって得られた初期化ベクタＤｉｖを保持する（ステップＳ４１４−１）。これにより、現セッションにおける以降の暗号文データＤｅｎｃの復号に、１番目（第１）の暗号文データＤｅｎｃの復号に利用した初期化ベクタＤｉｖを利用することが可能になる。
【００７０】
また、ステップＳ３１１−１〜Ｓ３１３−４により暗号文データＤｅｎｃの送信と初期化ベクタＤｉｖの保持を実行した後において、さらに２番目（第２）の暗号文データＤｅｎｃを送信すべきこととなった場合、暗号化装置１００は、以下の処理を実行する。
つまり、暗号化部１０３は、ステップＳ３１４−１により保持している初期化ベクタを利用して２番目（第２）の平文データＤｐｌｎの暗号化を行う（ステップＳ３１２−２）。
【００７１】
そして、暗号文データ出力部１０４は、平文ブロックに対応する暗号文ブロックを含み、初期化ベクタ取得情報に対応する暗号文ブロックを含まない暗号文データＤｅｎｃを生成し、復号装置２００に対して送信する（ステップＳ３１３−２）。
【００７２】
このように、２番目の平文データＤｐｌｎの暗号化にあたり１番目の平文データＤｐｌｎの暗号化に利用したのと同じ初期化ベクタＤｉｖを利用することで、初期化ベクタ生成部１０２が改めて初期化ベクタＤｉｖを生成する必要はない。これにより、初期化ベクタＤｉｖを生成するステップを省略することができる。
また、復号装置２００側においても、ステップＳ４１４−１により１番目の暗号文データＤｅｎｃを復号するのに利用した初期化ベクタＤｉｖを保持しているため、２番目の暗号文データＤｅｎｃには初期化ベクタ取得情報を含めなくともよい。このため、ステップＳ３１２−２の暗号化にあたっては、暗号化部１０３は、初期化ベクタ取得情報の暗号化を伴うことなく、平文ブロックのみのブロック暗号を実行すればよい。
【００７３】
また、ステップＳ３１２−２，Ｓ３１３−２により暗号文データＤｅｎｃを送信した後において、さらに３番目の暗号文データＤｅｎｃを送信すべきこととなった場合にも、暗号化装置１００は、ステップＳ３１２−２、Ｓ３１３−２と同様の処理を実行する。
つまり、暗号化部１０３は、ステップＳ３１４−１により保持している初期化ベクタＤｉｖを利用して、２番目の平文データＤｐｌｎの暗号化を行う（ステップＳ３１２−３）。この際、暗号化部１０３は、初期化ベクタ取得情報の暗号化を省略して、平文ブロックのみのブロック暗号化を実行すればよい。
また、暗号文データ出力部１０４は、平文ブロックに対応する暗号文ブロックを含み、初期化ベクタ取得情報に対応する暗号文ブロックは含まない暗号文データＤｅｎｃを生成し、復号装置２００に対して送信する（ステップＳ３１３−３）。
そして、暗号化部１０３と暗号文データ出力部１０４は、４番目以降の平文データＤｐｌｎを暗号化する際にも、ステップＳ３１２−３及びＳ３１３−３と同様の処理により、平文ブロックに対応する暗号文ブロックのみを含む暗号文データＤｅｎｃを送信する。
【００７４】
復号装置２００における受信部２０１は、ステップＳ３１３−２により送信された２番目の暗号文データＤｅｎｃを受信する（ステップＳ４１１−２）。
復号装置２００の復号部２０２は、ステップＳ４１１−２にて受信された２番目の暗号文データＤｅｎｃについて、ステップＳ４１４−１により保持している初期化ベクタＤｉｖを利用して復号する（ステップＳ４１２−２）。ステップＳ４１４−１にて保持した初期化ベクタＤｉｖは、１番目の暗号文データＤｅｎｃの復号に際して利用した初期化ベクタＤｉｖである。
また、２番目の暗号文データＤｅｎｃには、初期化ベクタ取得情報の暗号文ブロックは含まれていない。従って、復号部２０２は、ステップＳ４１２−２においては、図４に示したように、初期化ベクタ取得情報の復号を伴わない復号を実行すればよい。
平文データ生成部２０３は、ステップＳ４１２−２により復号された平文ブロックを連結して平文データＤｐｌｎを生成する（ステップＳ４１３−２）。
【００７５】
また、復号装置２００の受信部２０１と復号部２０２は、３番目の暗号文データＤｅｎｃを受信するのに応じて（ステップＳ４１１−３）、ステップＳ４１２−２と同様に、３番目の暗号文データＤｅｎｃの復号を実行する（ステップＳ４１２−３）。つまり、復号部２０２は、ステップＳ４１４−１にて保持された初期化ベクタＤｉｖを利用し、初期化ベクタ取得情報の復号を伴わない暗号文データＤｅｎｃの復号を実行する。平文データ生成部２０３は、ステップＳ４１２−３により得られた平文ブロックにより平文データＤｐｌｎを生成する（ステップＳ４１３−３）。
【００７６】
そして、復号装置２００の復号部２０２は、４番目以降の暗号文データＤｅｎｃが受信されるのに応じて、Ｓ４１２−２、Ｓ４１２−３と同様に、ステップＳ４１４−１にて保持された初期化ベクタＤｉｖを利用し、初期化ベクタ取得情報の復号を伴わない暗号文データＤｅｎｃの復号を実行する。平文データ生成部２０３は、復号部２０２によって得られた平文ブロックにより平文データＤｐｌｎを生成する
【００７７】
このように１セッションにおける暗号化と復号を行うことで、暗号化装置１００は、２番目以降の平文データＤｐｌｎの暗号化にあたって、初期化ベクタＤｉｖを生成する必要がなくなり、初期化ベクタ取得情報の暗号化の処理を省略できる。これに伴い、復号装置２００においても、２番目以降の暗号文データＤｅｎｃの復号にあたって、初期化ベクタ取得情報を取得するための復号を省略できる。これにより、１セッションにおける暗号化と復号における処理時間の短縮と処理負荷の軽減を図ることができる。
【００７８】
＜第５の実施形態＞
続いて、第５の実施形態について説明する。第５の実施形態では、１シーケンスの通信において、暗号化装置１００が、１番目の暗号文データＤｅｎｃの復号に利用した初期化ベクタＤｉｖを、２番目以降の暗号文データＤｅｎｃの復号にも利用するように復号装置２００に指示を行う。この指示にあたっては、暗号化装置１００が初期化ベクタの利用の仕方を示す初期化ベクタ取得情報を生成し、生成した初期化ベクタ取得情報の暗号文ブロックを暗号文データＤｅｎｃに含めて復号装置２００に送信する。
【００７９】
図１１のフローチャートは、第５の実施形態に対応して暗号化装置１００と復号装置２００が１セッションにおいて実行する処理手順例を示している。
現セッションにおける１番目（第１）の暗号文データＤｅｎｃの送受信にあたり、暗号化装置１００は、初期化ベクタＤｉｖの生成（ステップＳ５１１−１）、１番目（第１）の平文データの暗号化（ステップＳ５１２−１）、暗号文データＤｅｎｃの復号装置２００への送信（ステップＳ５１３−１）を実行する。また、暗号化部１０３は、ステップＳ５１１−１により生成した初期化ベクタＤｉｖを保持する（ステップＳ５１４−１）
このように、ステップＳ５１１−１〜Ｓ５１４−１の処理は、それぞれ、図１０のステップＳ３１１−１〜Ｓ３１４−１の処理と同様でよい。
【００８０】
ステップＳ５１３−１による暗号文データＤｅｎｃの送信に応じて、復号装置２００は、暗号文データＤｅｎｃの受信（ステップＳ６１１−１）、暗号文データＤｅｎｃの復号（ステップＳ６１２−１）、平文データＤｐｌｎの生成（ステップＳ６１３−１）、初期化ベクタＤｉｖの保持（ステップＳ６１４−１）を実行する。
具体的に、ステップＳ６１１−１〜Ｓ６１４−１の処理は、それぞれ、図１０のステップＳ４１１−１〜Ｓ４１４−１の処理と同様である。
【００８１】
また、暗号化装置１００は、上記のように１番目の暗号文データＤｅｎｃの送信と初期化ベクタＤｉｖの保持を実行した後において、さらに２番目（第２）の暗号文データＤｅｎｃを送信すべきこととなった場合、以下の処理を実行する。
まず、暗号化部１０３は、初期化ベクタ取得情報として、復号における初期化ベクタＤｉｖの利用の仕方を示す情報を生成する（ステップＳ５１１−２）。この場合における初期化ベクタ取得情報は、１番目の暗号文データＤｅｎｃを復号する際に利用した初期化ベクタＤｉｖを、２番目以降の暗号文データＤｅｎｃを復号する際にも利用すべきことを示す。
【００８２】
次に、暗号化部１０３は、２番目（第２）の平文データＤｐｌｎを暗号化する（ステップＳ５１２−２）。この際、暗号化部１０３は、ステップＳ５１４−１により保持されている初期化ベクタＤｉｖを利用して暗号化を行う。このように、２番目の平文データの暗号化では、１番目の平文データを暗号化する際に利用した初期化ベクタＤｉｖを使用する。このため、２番目の平文データＤｐｌｎの暗号化にあたり、初期化ベクタ生成部１０２が初期化ベクタＤｉｖを生成する処理が省略される。
また、ステップＳ５１２−２による２番目の平文データＤｐｌｎの暗号化にあたり、暗号化部１０３は、ステップＳ５１１−２により生成した初期化ベクタ取得情報をブロック暗号化する。
【００８３】
暗号文データ出力部１０４は、ステップＳ５１２−２の暗号化により得られた、平文ブロックごとに対応する暗号文ブロックと、初期化ベクタ取得情報に対応する暗号文ブロックとを含む暗号文データＤｅｎｃを生成する。暗号文データ出力部１０４は、生成した暗号文データＤｅｎｃを復号装置２００に送信する（ステップＳ５１３−２）。
【００８４】
また、上記のように２番目の暗号文データＤｅｎｃを送信した後において、３番目（第３）の暗号文データＤｅｎｃを送信すべきこととなった場合、暗号化部１０３は、３番目（第３）の平文データＤｐｌｎを暗号化する（ステップＳ５１２−３）。ステップＳ５１２−３の暗号化にあたり、暗号化部１０３は、ステップＳ５１４−１により保持されている初期化ベクタＤｉｖを利用する。また、ステップＳ５１２−３の暗号化にあたり、暗号化部１０３は、例えば図３に示したように、初期化ベクタ取得情報のブロック暗号化を伴わずに、平文ブロックのブロック暗号化のみを行う。
暗号文データ出力部１０４は、ステップＳ５１２−３の暗号化により得られた、平文ブロックごとに対応する暗号文ブロックを含む暗号文データＤｅｎｃを生成し、復号装置２００に送信する（ステップＳ５１３−３）。
暗号化部１０３と暗号文データ出力部１０４は、４番目以降の平文データＤｐｌｎを暗号化する際には、ステップＳ５１２−３、Ｓ５１３−３と同様の処理により、平文ブロックに対応する暗号文ブロックのみを含む暗号文データＤｅｎｃを送信する。
【００８５】
復号装置２００は、ステップＳ５１３−２により２番目の暗号文データＤｅｎｃが送信されたのに応じて以下の処理を実行する。
つまり、復号装置２００における受信部２０１は、２番目の暗号文データＤｅｎｃを受信する（ステップＳ６１１−２）。復号部２０２は、ステップＳ６１１−２にて受信された２番目の暗号文データＤｅｎｃについて、ステップＳ６１４−１にて保持した初期化ベクタＤｉｖを利用して復号する（ステップＳ６１２−２）。
【００８６】
ステップＳ６１２−２による復号は以下のように行われる。例えば、復号部２０２は、先頭の暗号文ブロックの復号に先立って、初期化ベクタ取得情報の暗号文ブロックの復号を行い、初期化ベクタ取得情報を得る。
復号部２０２は、復号により得た初期化ベクタ取得情報が示す初期化ベクタＤｉｖの利用の仕方を認識する。この場合、復号部２０２は、２番目以降の暗号文データＤｅｎｃの復号を行うにあたり、１番目の暗号文データＤｅｎｃの復号の際に利用した初期化ベクタを利用すべきことを認識する。
そこで、復号部２０２は、２番目の暗号文データＤｅｎｃにおける先頭の暗号文ブロックの復号にあたり、ステップＳ６１４−１にて保持されている初期化ベクタＤｉｖを利用する。
平文データ生成部２０３は、ステップＳ６１２−２により得られた平文データにより平文データＤｐｌｎを生成する（ステップＳ６１３−２）。
【００８７】
復号装置２００は、ステップＳ５１３−３により３番目の暗号文データＤｅｎｃが送信されたのに応じて以下の処理を実行する。
つまり、復号装置２００における受信部２０１は、２番目の暗号文データＤｅｎｃを受信する（ステップＳ６１１−３）。復号部２０２は、ステップＳ６１１−３にて受信された３番目の暗号文データＤｅｎｃについて、ステップＳ６１４−１にて保持した初期化ベクタＤｉｖを利用して復号する（ステップＳ６１２−３）。つまり、復号部２０２は、１番目の暗号文データＤｅｎｃの復号の際に利用した初期化ベクタにより復号を行う。
また、３番目の暗号文データには初期化ベクタ取得情報の暗号文ブロックは含まれていないため、ステップＳ６１２−３の復号にあたり、復号部２０２は、図４に例示したように、平文ブロックのみのブロック復号を行う。平文データ生成部２０３は、ステップＳ６１２−３により得られた平文データにより平文データＤｐｌｎを生成する（ステップＳ６１３−３）。
【００８８】
この後、４番目以降の暗号文データＤｅｎｃが暗号化装置１００から送信されるのに応じて、復号部２０２は、ステップＳ６１１−３〜Ｓ６１３−３と同様の処理により復号と平文データＤｐｌｎの生成を行えばよい。
【００８９】
このような第５の実施形態の手順によれば、３番目以降の平文データＤｐｌｎの暗号化から、初期化ベクタ取得情報をブロック暗号化する処理を省略することができる。また、３番目以降の暗号文データの復号から、初期化ベクタ取得情報をブロック復号する処理を省略することができる。これにより、第５の実施形態においても暗号化と復号における処理時間の短縮と処理負荷の軽減を図ることができる。
【００９０】
なお、第４及び第５の実施形態では、次のセッションにおいて前のセッションのときとは異なる初期化ベクタＤｉｖを利用すればよい。つまり、セッションごとに異なる初期化ベクタＤｉｖが利用されるようにすればよい。
また、例えば１つのセッションにおいては複数のトランザクションが実行され、１つのトランザクションにおいて複数の暗号文データＤｅｎｃの送受信を実行することができる。ここでのトランザクションは、関連する１以上のデータの送受信をいう。
そこで、第４及び第５の実施形態においては、トランザクションごとに異なる初期化ベクタＤｉｖを利用するようにしたうえで、１トランザクションにおいては、共通の初期化ベクタＤｉｖを利用するようにしてもよい。また、例えば１つのセッションまたはトランザクションにおいて、２回以上の所定回数による暗号文データＤｅｎｃの送受信ごとに初期化ベクタＤｉｖを変更していくようにしてもよい。
【００９１】
なお、第４の実施形態と第５の実施形態において、１回目の平文データとともに暗号化する初期化ベクタ取得情報は、初期化ベクタＤｉｖそのものであってもよいし、初期化ベクタ生成情報であってもよい。
【００９２】
また、第４の実施形態において、暗号化装置１００は、図１０のステップＳ３１１−１〜Ｓ３１４−１と、これに続くステップＳ３１２−２、Ｓ３１３−２の処理を実行した後においては、同図のステップＳ３１２−３、Ｓ３１３−３のように、ステップＳ３１２−２、Ｓ３１３−２と同じ処理を、必ずしも、セッションあるいはトランザクションの終了まで実行しなくともよい。
つまり、暗号化装置１００は、１つのセッションあるいはトランザクションにおいて、ステップＳ３１１−１〜Ｓ３１４−１の処理（ステップＳ３１２−１において第１の平文データの暗号化を含む）と、これに続く所定回数のステップＳ３１２−２、Ｓ３１３−２と同様の処理（ステップＳ３１２−２において第２の平文データの暗号化を含む）による単位シーケンスを実行した後においては、順次、次の単位シーケンスが繰り返して実行されるようにしてもよい。
この際、ステップＳ３１２−２、Ｓ３１３−２と同様の処理の繰り返し回数は、単位シーケンス間で同じであってもよいし、適宜、異なっていてもよい。
【００９３】
また、第５の実施形態においても、図１１のステップＳ５１１−１〜Ｓ５１４−１と、これに続くステップＳ５１１−２〜Ｓ５１３−２、ステップＳ５１２−３、Ｓ５１３−３の処理を実行した後においては、必ずしも、ステップＳ５１２−３、Ｓ５１３−３と同じ処理をセッションあるいはトランザクションの終了まで実行しなくともよい。
つまり、暗号化装置１００は、１つのセッションあるいはトランザクションにおいて、ステップＳ５１１−１〜Ｓ５１４−１の処理（ステップＳ５１２−１において第１の平文データの暗号化を含む）と、これに続くステップＳ５１１−２〜Ｓ５１３−２の処理（ステップＳ５１２−２において第２の平文データの暗号化を含む）と、これに続く所定回数のステップＳ５１２−３、Ｓ５１３−３の処理（ステップＳ５１２−３において第３の平文データの暗号化を含む）による単位シーケンスを実行した後においては、順次、次の単位シーケンスが繰り返して実行されるようにしてもよい。
この際、Ｓ５１２−３、Ｓ５１３−３と同様の処理の繰り返し回数は、単位シーケンス間で同じであってもよいし、適宜、異なっていてもよい。
【００９４】
さらに、例えば１つのセッションあるいはトランザクションにおいて、第３、第４、第５の実施形態として図９、図１０、図１１に示した処理のうちの２以上を複合的に実行するようにしてもよい。
一例として、例えば１つのセッションあるいはトランザクションにおいて、図９に示す所定回数分の暗号文データＤｅｎｃの送受信による単位シーケンスを実行し、続けて図１０に対応する単位シーケンスを実行し、続けて図１１に対応する単位シーケンスを実行し、以降、これらの単位シーケンスを定められた順序にしたがって順次実行していく、というものである。
【００９５】
［第６の実施形態］
続いて、第６の実施形態について説明する。
第１の実施形態として図５に示した暗号化の手順では、平文ブロックＭ１〜Ｍ５を順次ブロック暗号化した後、最後に、平文ブロックＭ５の暗号文ブロックＣ５を利用して初期化ベクタ取得情報である初期化ベクタＤｉｖをブロック暗号化している。
これに対して、第６の実施形態においては、２番目以降から最後の１つ前までのブロック暗号化順のうちのいずれかにおいて、初期化ベクタ取得情報のブロック暗号化が行われる。
【００９６】
図１２は、第６の実施形態における平文データＤｐｌｎの暗号化手順の一例を示している。なお、図１２において図５と同様の部分については同一符号を付している。
図１２においても、平文データＤｐｌｎは４つの平文ブロックＭ１〜Ｍ４に分割されている。そのうえで、第６の実施形態における暗号化装置１００の暗号化部１０３は、まず、先頭の平文ブロックＭ１と初期化ベクタＤｉｖとの排他的論理和演算を行い（ステップＳ１１）、ステップＳ１１の演算結果をブロック暗号化して（ステップＳ２１）、暗号文ブロックＣ１を得る。
【００９７】
次に、暗号化部１０３は、ステップＳ１１で先頭の平文ブロックＭ１との排他的論理和演算に利用した初期化ベクタＤｉｖ（初期化ベクタ取得情報）と、前のブロック暗号化により暗号化された暗号文ブロックＣ１との排他的論理和演算を実行する（ステップＳ１５）。次に、暗号化部１０３は、ステップＳ１５による演算結果をブロック暗号化することにより（ステップＳ２５）、初期化ベクタ取得情報に対応する暗号文ブロックＣ５を得る。
つまり、図１２の例では、１番目から５番目までによるブロックの暗号化の順序において２番目に初期化ベクタ取得情報のブロックの暗号化を行う。
【００９８】
続いて、暗号化部１０３は、３番目として、平文ブロックＭ２について、初期化ベクタ取得情報に対応する暗号文ブロックＣ５との排他的論理和演算を行い（ステップＳ１２）、演算結果をブロック暗号化する（ステップＳ２２）。これにより、平文ブロックＭ２に対応する暗号文ブロックＣ２が得られる。
次に、暗号化部１０３は、４番目の暗号化として、平文ブロックＭ３について、暗号文ブロックＣ２との排他的論理和演算を行い（ステップＳ１３）、演算結果をブロック暗号化する（ステップＳ２３）。これにより、平文ブロックＭ３に対応する暗号文ブロックＣ３が得られる。
最後に、暗号化部１０３は、５番目の暗号化として、平文ブロックＭ４について、暗号文ブロックＣ３との排他的論理和演算を行い（ステップＳ１４）、演算結果をブロック暗号化する（ステップＳ２４）。これにより、平文ブロックＭ４に対応する暗号文ブロックＣ４が得られる。
暗号文データ出力部１０４は、暗号文ブロックＣ１，Ｃ５，Ｃ２，Ｃ３，Ｃ４の順で配列した暗号文データＤｅｎｃを生成し、復号装置２００に送信する。
【００９９】
次に、図１３を参照して、復号装置２００が図１２の手順により得られた暗号文データＤｅｎｃを復号するための手順例を示している。なお、図１３において図６と同様の部分については同一符号を付している。
図１３の場合、暗号文データＤｅｎｃは、暗号文ブロックＣ１，Ｃ５，Ｃ２，Ｃ３，Ｃ４の配列となっているが、これらの暗号文ブロックに対する復号の順序に関しては図６と同様でよい。つまり、復号部２０２は、先頭の暗号文ブロックＣ１を復号するにあたり、先に、初期化ベクタ取得情報としての初期化ベクタＤｉｖに対応する暗号文ブロックＣ５を復号して初期化ベクタＤｉｖを得るようにすればよい。
図１３の例では、初期化ベクタＤｉｖを得るにあたり、復号部２０２は、暗号文データＤｅｎｃにおける暗号文ブロックのうちから、２番目に配列されている暗号文ブロックＣ５を取得する。そして、復号部２０２は、取得した暗号文ブロックＣ５について、１つ前に暗号化された暗号文ブロックＣ１を利用して復号を行い（ステップＳ３５、Ｓ４５）、初期化ベクタ取得情報としての初期化ベクタＤｉｖを得るようにすればよい。
上記のように初期化ベクタＤｉｖを取得した後、復号部２０２は、初期化ベクタＤｉｖを利用して、ステップＳ３１、Ｓ４１により先頭の暗号文ブロックＣ１を復号して平文ブロックＭ１を取得することができる。
【０１００】
また、暗号文ブロックＣ２，Ｃ３，Ｃ４については、それぞれ、暗号化の段階で１つ前に暗号化された暗号文ブロックＣ５，Ｃ２，Ｃ３をそれぞれ利用した復号処理によって、平文ブロックＭ２，Ｍ３，Ｍ４を得ることができる。
暗号文データ出力部１０４は、上記のように得られた平文ブロックＭ１，Ｍ２，Ｍ３，Ｍ４を配列して平文データＤｐｌｎを生成する。
【０１０１】
なお、例えば、図１２の場合において、初期化ベクタ取得情報のブロックの暗号化の順番は３番目または４番目であってもよい。このように、第６の実施形態においては、２番目から最後の１つ前までの暗号化順のうち、任意の暗号化順で初期化ベクタ取得情報のブロックの暗号化を行える。また、第６の実施形態における初期化ベクタ取得情報は初期化ベクタＤｉｖに限定されるものではなく、例えば第２の実施形態における初期化ベクタ生成情報や第５の実施形態における初期化ベクタＤｉｖの利用の仕方を示す情報などであってもよい。
【０１０２】
例えばハードウェアの仕様などによっては、復号装置２００において受信した暗号文データＤｅｎｃを保持するバッファについて小さいサイズのものが実装される可能性がある。このような場合において、図５の暗号文データＤｅｎｃのように初期化ベクタ取得情報の暗号文ブロックＣ５が最後に配列されている場合、暗号文データＤｅｎｃを先頭から取り込んでいくうちに空き容量がなくなり、最後の暗号文ブロックＣ５をバッファが取り込むことができなくなる可能性がある。このような状態に対応しては、例えば、初期化ベクタＤｉｖを利用する必要の無い暗号文ブロックＣ２，Ｃ３，Ｃ４などを先に復号し、バッファの容量を確保してから暗号文ブロックＣ５をバッファに取り込み、暗号文ブロックＣ１を復号すればよい。ただし、このような処理では、例えば暗号文ブロックＣ２，Ｃ３，Ｃ４などよりも先に暗号文ブロックＣ１を復号したい際の対応が難しい場合がある。
そこで、図１２のようにブロックの暗号化順の途中で初期化ベクタ取得情報のブロックを暗号化すれば、暗号文データＤｅｎｃにおいて初期化ベクタ取得情報の暗号文ブロックを最後よりも前に配列できる。これにより、バッファのサイズが小さくとも、初期化ベクタ取得情報の暗号文ブロックをバッファに先に取り込ませることが可能となって、例えば暗号文ブロックＣ２，Ｃ３，Ｃ４などよりも先に暗号文ブロックＣ１を復号できる。
【０１０３】
なお、第１の実施形態の場合、暗号文データＤｅｎｃにおける暗号文ブロックＣ１，Ｃ２，Ｃ３，Ｃ４の配列順に従って復号すれば、そのまま平文ブロックＭ１，Ｍ２，Ｍ３，Ｍ４の順に従って復号後の平文ブロックが得られる。この場合、平文データ生成部２０３が平文データＤｐｌｎを生成するにあたっては、復号された順に従って平文ブロックＭ１，Ｍ２，Ｍ３，Ｍ４をそのまま連結すればよい。つまり、第１の実施形態の場合には、復号後の平文データＤｐｌｎの生成処理が複雑にならず単純になる。
そこで、バッファサイズが大きく、１つの暗号文データＤｅｎｃが一度で取り込めることが保証されているような場合には、暗号化装置１００は、第１の実施形態による暗号化を行うとよい。
【０１０４】
なお、上述の暗号化装置１００と復号装置２００の各機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより上述の暗号化装置１００と復号装置２００の処理を行ってもよい。ここで、「記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行する」とは、コンピュータシステムにプログラムをインストールすることを含む。ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、インターネットやＷＡＮ、ＬＡＮ、専用回線等の通信回線を含むネットワークを介して接続された複数のコンピュータ装置を含んでもよい。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。このように、プログラムを記憶した記録媒体は、ＣＤ−ＲＯＭ等の非一過性の記録媒体であってもよい。また、記録媒体には、当該プログラムを配信するために配信サーバからアクセス可能な内部または外部に設けられた記録媒体も含まれる。配信サーバの記録媒体に記憶されるプログラムのコードは、端末装置で実行可能な形式のプログラムのコードと異なるものでもよい。すなわち、配信サーバからダウンロードされて端末装置で実行可能な形でインストールができるものであれば、配信サーバで記憶される形式は問わない。なお、プログラムを複数に分割し、それぞれ異なるタイミングでダウンロードした後に端末装置で合体される構成や、分割されたプログラムのそれぞれを配信する配信サーバが異なっていてもよい。さらに「コンピュータ読み取り可能な記録媒体」とは、ネットワークを介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、上述した機能の一部を実現するためのものであってもよい。さらに、上述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【符号の説明】
【０１０５】
１００  暗号化装置
１０１  平文データ出力部
１０２  初期化ベクタ生成部
１０３  暗号化部
１０４  暗号文データ出力部
１０５  送信部
２００  復号装置
２０１  受信部
２０２  復号部
２０３  平文データ生成部
３００  ＩＣカード
４００  リーダライタ
【図１】
2014224925.tif 000003
【図２】
2014224925.tif 000004
【図３】
2014224925.tif 000005
【図４】
2014224925.tif 000006
【図５】
2014224925.tif 000007
【図６】
2014224925.tif 000008
【図７】
2014224925.tif 000009
【図８】
2014224925.tif 000010
【図９】
2014224925.tif 000011
【図１０】
2014224925.tif 000012
【図１１】
2014224925.tif 000013
【図１２】
2014224925.tif 000014
【図１３】
2014224925.tif 000015