(57)【要約】【課題】再送攻撃を防ぎ、安全な暗号通信を実現する。【解決手段】受信乱数記憶部２２１が記憶した受信乱数に基づいて送信検証生成部２３２が送信検証情報を生成し、検証乱数生成部２３１が送信乱数を生成し、結合部２３４が送信データと結合し、暗号化部２３７が暗号化し、送信部１２０が通信相手に対して送信する。受信部１１０が通信相手から受信したデータを、復号部２１２が復号し、分割部２１３が分割し、受信検証情報と受信乱数と受信データとを取得する。検証部２１５が受信検証情報を検証し、検証成功なら通信を続行し、検証失敗なら通信を終了する。【選択図】図４
2008124987.tif 000002
【特許請求の範囲】
【請求項１】
情報を処理する処理装置と、他の暗号通信装置と通信する通信装置と、データ入力部と、検証乱数生成部と、結合部と、暗号化部と、送信部と、受信部と、復号部と、分割部と、検証部と、データ出力部とを有し、
上記データ入力部は、上記処理装置を用いて、他の暗号通信装置に対して送信すべきデータを入力して送信データとし、
上記検証乱数生成部は、上記処理装置を用いて、乱数を生成して送信乱数とし、
上記結合部は、上記処理装置を用いて、上記検証乱数生成部が生成した送信乱数と上記データ入力部が入力した送信データとを含むデータを生成して送信平文とし、
上記暗号化部は、上記処理装置を用いて、上記結合部が生成した送信平文を暗号化して送信暗号文とし、
上記送信部は、上記通信装置を用いて、上記暗号化部が暗号化した送信暗号文を上記他の暗号通信装置に対して送信し、
上記受信部は、上記通信装置を用いて、上記送信部が送信した送信暗号文に対する応答として上記他の暗号通信装置が送信したデータを受信して受信暗号文とし、
上記復号部は、上記処理装置を用いて、上記受信部が受信した受信暗号文を復号して受信平文とし、
上記分割部は、上記処理装置を用いて、上記復号部が復号した受信平文に含まれる送信検証情報を取得して受信検証情報とし、上記復号部が復号した受信平文に含まれる送信データを取得して受信データとし、
上記検証部は、上記処理装置を用いて、上記分割部が取得した受信検証情報と上記検証乱数生成部が生成した送信乱数とに基づいて、検証成功か検証失敗かを判断し、
上記データ出力部は、上記検証部が検証成功と判断した場合に、上記処理装置を用いて、上記分割部が取得した受信データを出力する
ことを特徴とする暗号通信装置。
【請求項２】
上記暗号通信装置は、
他の暗号通信装置との間で暗号通信をする場合に、上記他の暗号通信装置を認証せずに通信を開始し、
通信を開始した後、上記検証部が検証失敗と判断した場合に、通信を終了する
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項３】
上記暗号通信装置は、
他の暗号通信装置との間で暗号通信をする場合に、上記他の暗号通信装置を認証せずに通信を開始し、
通信を開始した後、上記他の暗号通信装置に対して送信するすべてのデータに送信検証情報と送信乱数とを含めて送信し、
通信を開始した後、上記他の暗号通信装置から受信したすべてのデータについて、上記検証部が検証成功か検証失敗かを判断する
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項４】
上記検証部は、上記処理装置を用いて、上記分割部が取得した受信検証情報と上記検証乱数生成部が生成した送信乱数とを比較して、一致する場合に検証成功と判断し、一致しない場合に検証失敗と判断する
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項５】
上記暗号通信装置は、更に、受信検証生成部を有し、
上記受信検証生成部は、上記処理装置を用いて、上記検証乱数生成部が生成した送信乱数に基づくデータを生成して検証情報とし、
上記検証部は、上記処理装置を用いて、上記分割部が取得した受信検証情報と上記受信検証生成部が生成した検証情報とを比較して、一致する場合に検証成功と判断し、一致しない場合に検証失敗と判断する
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項６】
上記分割部は、更に、上記処理装置を用いて、上記復号部が復号した受信平文に含まれる送信乱数を取得して受信乱数とし、
上記データ入力部は、上記処理装置を用いて、上記受信部が受信した受信暗号文に対する応答として上記他の暗号通信装置に対して送信すべきデータを入力して応答データとし、
上記結合部は、上記分割部が取得した受信乱数を送信検証情報とし、上記データ入力部が入力した応答データを送信データとして、上記処理装置を用いて、上記送信検証情報と上記検証乱数生成部が生成した送信乱数と上記送信データとを含むデータを生成して送信平文とする
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項７】
上記暗号通信装置は、更に、送信検証生成部を有し、
上記分割部は、上記処理装置を用いて、上記復号部が復号した受信平文に含まれる送信乱数を取得して受信乱数とし、
上記データ入力部は、上記処理装置を用いて、上記受信部が受信した受信暗号文に対する応答として上記他の暗号通信装置に対して送信すべきデータを入力して応答データとし、
上記送信検証生成部は、上記処理装置を用いて、上記分割部が取得した受信乱数に基づくデータを生成して送信検証情報とし、
上記結合部は、上記データ入力部が入力した応答データを送信データとして、上記処理装置を用いて、上記送信検証生成部が生成した送信検証情報と上記検証乱数生成部が生成した送信乱数と上記送信データとを含むデータを生成して送信平文とする
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項８】
上記暗号通信装置は、更に、開始乱数生成部を有し、
上記受信部は、上記通信装置を用いて、他の暗号通信装置から通信の開始を要求するデータを受信して通信開始要求とし、
上記データ出力部は、上記処理装置を用いて、上記受信部が受信した通信開始要求を出力し、
上記データ入力部は、上記処理装置を用いて、上記受信部が受信した通信開始要求に対する応答として上記他の暗号通信装置に対して送信すべきデータを入力して開始応答データとし、
上記開始乱数生成部は、上記処理装置を用いて、乱数を生成して開始乱数とし、
上記結合部は、上記開始乱数生成部が生成した開始乱数を送信検証情報とし、上記データ入力部が入力した開始応答データを送信データとして、上記処理装置を用いて、上記送信検証情報と上記検証乱数生成部が生成した送信乱数と上記送信データとを含むデータを生成して送信平文とする
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項９】
上記データ入力部は、上記処理装置を用いて、他の暗号通信装置に対して通信の開始を要求するデータを入力して通信開始要求とし、
上記送信部は、上記通信装置を用いて、上記データ入力部が入力した通信開始要求を上記他の暗号通信装置に対して送信し、
上記受信部は、上記通信装置を用いて、上記送信部が送信した通信開始要求に対する応答として上記他の暗号通信装置が送信したデータを受信して開始暗号文とし、
上記復号部は、上記処理装置を用いて、上記受信部が受信した開始暗号文を復号して開始平文とし、
上記分割部は、上記処理装置を用いて、上記復号部が復号した開始平文に含まれる送信乱数を取得して受信乱数とし、上記復号部が復号した開始平文に含まれる送信データを取得して受信開始データとし、
上記データ出力部は、上記処理装置を用いて、上記分割部が取得した受信開始データを出力する
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項１０】
上記暗号通信装置は、更に、復号鍵生成部を有し、
上記受信部は、上記通信装置を用いて、上記受信暗号文とともに上記他の暗号通信装置が送信した暗号鍵乱数を受信して復号鍵乱数とし、
上記復号鍵生成部は、上記処理装置を用いて、上記受信部が受信した復号鍵乱数に基づいて、復号一時鍵を生成し、
上記復号部は、上記処理装置を用いて、上記受信部が受信した受信暗号文を上記復号鍵生成部が生成した復号一時鍵で復号して受信平文とする
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項１１】
上記暗号通信装置は、更に、鍵乱数生成部と、暗号鍵生成部とを有し、
上記鍵乱数生成部は、上記処理装置を用いて、乱数を生成して暗号鍵乱数とし、
上記暗号鍵生成部は、上記処理装置を用いて、上記鍵乱数生成部が生成した暗号鍵乱数に基づいて、暗号一時鍵を生成し、
上記暗号化部は、上記処理装置を用いて、上記結合部が生成した送信平文を上記暗号鍵生成部が生成した暗号一時鍵で暗号化して送信暗号文とし、
上記送信部は、上記通信装置を用いて、上記鍵乱数生成部が生成した暗号鍵乱数を上記暗号化部が暗号化した送信暗号文とともに上記他の暗号通信装置に対して送信する
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項１２】
上記暗号通信装置は、更に、復号鍵生成部を有し、
上記復号鍵生成部は、上記処理装置を用いて、上記検証乱数生成部が生成した送信乱数に基づいて、復号一時鍵を生成し、
上記復号部は、上記処理装置を用いて、上記受信部が受信した受信暗号文を上記復号鍵生成部が生成した復号一時鍵で復号して受信平文とする
ことを特徴とする請求項１に記載の暗号通信装置。
【請求項１３】
上記暗号通信装置は、更に、暗号鍵生成部を有し、
上記暗号鍵生成部は、上記処理装置を用いて、上記分割部が取得した受信乱数に基づいて、暗号一時鍵を生成し、
上記暗号化部は、上記処理装置を用いて、上記結合部が生成した送信平文を上記暗号鍵生成部が生成した暗号一時鍵で暗号化して送信暗号文とする
ことを特徴とする請求項６または請求項７に記載の暗号通信装置。
【請求項１４】
上記暗号通信装置は、更に、暗号鍵生成部を有し、
上記受信部は、上記通信装置を用いて、上記通信開始要求とともに上記他の暗号通信装置が送信した暗号鍵乱数を受信し、
上記暗号鍵生成部は、上記処理装置を用いて、上記受信部が受信した暗号鍵乱数に基づいて、暗号一時鍵を生成し、
上記暗号化部は、上記処理装置を用いて、上記結合部が生成した送信平文を上記暗号鍵生成部が生成した暗号一時鍵で暗号化して送信暗号文とする
ことを特徴とする請求項８に記載の暗号通信装置。
【請求項１５】
上記暗号通信装置は、更に、鍵乱数生成部と、復号鍵生成部とを有し、
上記鍵乱数生成部は、上記処理装置を用いて、乱数を生成して暗号鍵乱数とし、
上記送信部は、上記通信装置を用いて、上記鍵乱数生成部が生成した暗号鍵乱数を上記通信開始要求とともに上記他の暗号通信装置に対して送信し、
上記復号鍵生成部は、上記処理装置を用いて、上記鍵乱数生成部が生成した暗号鍵乱数に基づいて、復号一時鍵を生成し、
上記復号部は、上記処理装置を用いて。上記受信部が受信した受信暗号文を上記復号鍵生成部が生成した復号一時鍵で復号して受信平文とする
ことを特徴とする請求項９に記載の暗号通信装置。
【請求項１６】
上記結合部は、上記処理装置を用いて、上記送信検証情報と上記送信乱数と上記送信データとを結合して送信平文を生成することを特徴とする請求項６乃至請求項８のいずれかに記載の暗号通信装置。
【請求項１７】
上記結合部は、上記処理装置を用いて、上記送信検証情報を一番前に結合することを特徴とする請求項１６に記載の暗号通信装置。
【請求項１８】
上記結合部は、上記処理装置を用いて、上記送信乱数を一番前に結合することを特徴とする請求項１６に記載の暗号通信装置。
【請求項１９】
請求項１に記載の暗号通信装置を複数有し、上記複数の暗号通信装置が互いに暗号通信することを特徴とする暗号通信システム。
【請求項２０】
情報を処理する処理装置と、他の暗号通信装置と通信する通信装置とを有する暗号通信装置が、上記他の暗号通信装置と暗号通信をする暗号通信方法において、
上記処理装置が、他の暗号通信装置に対して送信すべきデータを取得して送信データとし、
上記処理装置が、乱数を生成して送信乱数とし、
上記処理装置が、生成した送信乱数と取得した送信データとを含むデータを生成して送信平文とし、
上記処理装置が、生成した送信平文を暗号化して送信暗号文とし、
上記通信装置が、暗号化した送信暗号文を送信し、
上記通信装置が、送信した送信暗号文に対する応答として上記他の暗号通信装置が送信したデータを受信して受信暗号文とし、
上記処理装置が、受信した受信暗号文を復号して受信平文とし、
上記処理装置が、復号した受信平文に含まれる送信検証情報を取得して受信検証情報とし、復号した受信平文に含まれる送信データを取得して受信データとし、
上記処理装置が、取得した受信検証情報と生成した送信乱数とに基づいて、検証成功か検証失敗かを判断し、
検証成功と判断した場合に、上記処理装置が、取得した受信データを出力する
ことを特徴とする暗号通信方法。
【請求項２１】
第一の暗号通信装置と第二の暗号通信装置とが暗号通信をする暗号通信方法において、
上記第一の暗号通信装置が、上記第二の暗号通信装置に対して通信の開始を要求する通信開始要求を送信し、
上記第二の暗号通信装置が、上記第一の暗号通信装置が送信した通信開始要求を受信し、
上記第二の暗号通信装置が、乱数を生成して第一の送信乱数とし、
上記第二の暗号通信装置が、受信した通信開始要求に対する応答として上記第一の暗号通信装置に対して送信すべきデータを取得して開始応答データとし、
上記第二の暗号通信装置が、取得した開始応答データを第一の送信データとして、生成した第一の送信乱数と上記第一の送信データとを含むデータを生成して第一の送信平文とし、
上記第二の暗号通信装置が、生成した第一の送信平文を暗号化して第一の送信暗号文とし、
上記第二の暗号通信装置が、暗号化した第一の送信暗号文を上記第一の暗号通信装置に対して送信し、
上記第一の暗号通信装置が、上記第二の暗号通信装置が送信した第一の送信暗号文を受信して第一の受信暗号文とし、
上記第一の暗号通信装置が、受信した第一の受信暗号文を復号して第一の受信平文とし、
上記第一の暗号通信装置が、復号した第一の受信平文に含まれる第一の送信乱数を取得して第一の受信乱数とし、
上記第一の暗号通信装置が、復号した第一の受信平文に含まれる第一の送信データを取得して受信開始データとし、
上記第一の暗号通信装置が、取得した第一の受信乱数に基づくデータを生成して第二の送信検証情報とし、
上記第一の暗号通信装置が、乱数を生成して第二の送信乱数とし、
上記第一の暗号通信装置が、取得した受信開始データに対する応答として上記第二の暗号通信装置に対して送信すべきデータを取得して第二の送信データとし、
上記第一の暗号通信装置が、生成した第二の送信検証情報と生成した第二の送信乱数と取得した第二の送信データとを含むデータを生成して第二の送信平文とし、
上記第一の暗号通信装置が、生成した第二の送信平文を暗号化して第二の送信暗号文とし、
上記第一の暗号通信装置が、暗号化した第二の送信暗号文を上記第二の暗号通信装置に対して送信し、
上記第二の暗号通信装置が、上記第一の暗号通信装置が送信した第二の送信暗号文を受信して第二の受信暗号文とし、
上記第二の暗号通信装置が、受信した第二の受信暗号文を復号して第二の受信平文とし、
上記第二の暗号通信装置が、復号した第二の受信平文に含まれる第二の送信検証情報を取得して第二の受信検証情報とし、
上記第二の暗号通信装置が、生成した第一の送信乱数と取得した第二の受信検証情報とに基づいて、第一の検証成功か第一の検証失敗かを判断し、
第一の検証失敗と判断した場合、上記第二の暗号通信装置が、上記第一の暗号通信装置との間の暗号通信を終了し、
第一の検証成功と判断した場合、
上記第二の暗号通信装置が、復号した第二の受信平文に含まれる第二の送信乱数を取得して第二の受信乱数とし、
上記第二の暗号通信装置が、復号した第二の受信平文に含まれる第二の送信データを取得して第二の受信データとし、
上記第二の暗号通信装置が、取得した第二の受信乱数に基づくデータを生成して第三の送信検証情報とし、
上記第二の暗号通信装置が、乱数を生成して第三の送信乱数とし、
上記第二の暗号通信装置が、取得した第二の受信データに対する応答として上記第一の暗号通信装置に対して送信すべきデータを取得して第三の送信データとし、
上記第二の暗号通信装置が、生成した第三の送信検証情報と生成した第三の送信乱数と生成した第三の送信データとを含むデータを生成して第三の送信平文とし、
上記第二の暗号通信装置が、生成した第三の送信平文を暗号化して第三の送信暗号文とし、
上記第二の暗号通信装置が、暗号化した第三の送信暗号文を上記第一の暗号通信装置に対して送信し、
上記第一の暗号通信装置が、上記第二の暗号通信装置が送信した第三の送信暗号文を受信して第三の受信暗号文とし、
上記第一の暗号通信装置が、受信した第三の受信暗号文を復号して第三の受信平文とし、
上記第一の暗号通信装置が、復号した第三の受信平文に含まれる第三の送信検証情報を取得して第三の受信検証情報とし、
上記第一の暗号通信装置が、生成した第二の送信乱数と取得した第三の受信検証情報とに基づいて、第二の検証成功か第二の検証失敗かを判断し、
第二の検証失敗と判断した場合、上記第一の暗号通信装置が、上記第二の暗号通信装置との間の暗号通信を終了する
ことを特徴とする暗号通信方法。
【請求項２２】
上記暗号通信方法は、更に、第二の検証成功と判断した場合、
上記第一の暗号通信装置が、復号した第三の受信平文に含まれる第三の送信乱数を取得して第三の受信乱数とし、
上記第一の暗号通信装置が、復号した第三の受信平文に含まれる第三の送信データを取得して第三の受信データとし、
上記第一の暗号通信装置が、取得した第三の受信乱数に基づくデータを生成して第二の送信検証情報とし、
上記第一の暗号通信装置が、乱数を生成して第二の送信乱数とし、
上記第一の暗号通信装置が、取得した第三の受信データに対する応答として上記第二の暗号通信装置に対して送信すべきデータを取得して第二の送信データとし、
上記第一の暗号通信装置が、生成した第二の送信検証情報と生成した第二の送信乱数と取得した第二の送信データとを含むデータを生成して第二の送信平文とし、
上記第一の暗号通信装置が、生成した第二の送信平文を暗号化して第二の送信暗号文とし、
上記第一の暗号通信装置が、暗号化した第二の送信暗号文を上記第二の暗号通信装置に対して送信する
ことを特徴とする請求項２１に記載の暗号通信方法。
【請求項２３】
情報を処理する処理装置と、他の暗号通信装置と通信する通信装置とを有するコンピュータを、請求項１に記載の暗号通信装置として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、暗号通信をする暗号通信装置、複数の暗号通信装置が互いに暗号通信をする暗号通信システム、暗号通信装置が暗号通信する暗号通信方法、コンピュータを暗号通信装置として機能させるプログラムに関する。
【背景技術】
【０００２】
不特定多数が接続するネットワークで通信する情報を盗聴などから守るために、暗号通信が用いられている。暗号には大きく分けて、公開鍵暗号と共通鍵暗号とがあり、前者は暗号鍵の配布、後者はデータの秘匿などに用いられる。また暗号は、データの秘匿だけでなく相手を認証するのにも用いられる。
組み込み機器間の認証においては、公開鍵暗号の処理負荷が重いことから共通鍵暗号を用いることが多い。
認証および認証後の暗号通信における脅威のひとつに再送攻撃がある。再送攻撃とは、正規に認証する装置同士の通信を傍受し、傍受したデータを使って、正規の装置になりすまして装置にアクセスする攻撃である。再送攻撃の防止には、暗号通信に用いる鍵や、送信データの一部に乱数を用いる方法がある。
【特許文献１】特開平６−３１５０２６号公報
【特許文献２】特開平７−３２５７８５号公報
【特許文献３】特開２００３−１７３１３９号公報
【特許文献４】特開平１１−３４０９６９号公報
【特許文献５】特開２００５−１７６２３１号公報
【非特許文献１】「ＮＥＴＷＯＲＫ  ＳＥＣＵＲＩＴＹ  −ＰＲＩＶＡＴＥ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｉｎ  ａ  ＰＵＢＬＩＣ  Ｗｏｒｌｄ−」２５７〜２７０ページ、Ｃｈａｒｌｉｅ  Ｋａｕｆｍａｎ他、２００２年、Ｐｒｅｎｔｉｃｅ  Ｈａｌｌ  ＰＴＲ、Ｎｅｗ  Ｊｅｒｓｅｙ。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
この発明は、例えば、再送攻撃などのなりすまし攻撃を防止し、安全な暗号通信を実現するとともに、その実現のために必要な通信量を低減し、通信コストを抑えることを目的とする。
【課題を解決するための手段】
【０００４】
この発明にかかる暗号通信装置は、
情報を処理する処理装置と、他の暗号通信装置と通信する通信装置と、データ入力部と、検証乱数生成部と、結合部と、暗号化部と、送信部と、受信部と、復号部と、分割部と、検証部と、データ出力部とを有し、
上記データ入力部は、上記処理装置を用いて、他の暗号通信装置に対して送信すべきデータを入力して送信データとし、
上記検証乱数生成部は、上記処理装置を用いて、乱数を生成して送信乱数とし、
上記結合部は、上記処理装置を用いて、上記検証乱数生成部が生成した送信乱数と上記データ入力部が入力した送信データとを含むデータを生成して送信平文とし、
上記暗号化部は、上記処理装置を用いて、上記結合部が生成した送信平文を暗号化して送信暗号文とし、
上記送信部は、上記通信装置を用いて、上記暗号化部が暗号化した送信暗号文を上記他の暗号通信装置に対して送信し、
上記受信部は、上記通信装置を用いて、上記送信部が送信した送信暗号文に対する応答として上記他の暗号通信装置が送信したデータを受信して受信暗号文とし、
上記復号部は、上記処理装置を用いて、上記受信部が受信した受信暗号文を復号して受信平文とし、
上記分割部は、上記処理装置を用いて、上記復号部が復号した受信平文に含まれる送信検証情報を取得して受信検証情報とし、上記復号部が復号した受信平文に含まれる送信データを取得して受信データとし、
上記検証部は、上記処理装置を用いて、上記分割部が取得した受信検証情報と上記検証乱数生成部が生成した送信乱数とに基づいて、検証成功か検証失敗かを判断し、
上記データ出力部は、上記検証部が検証成功と判断した場合に、上記処理装置を用いて、上記分割部が取得した受信データを出力することを特徴とする。
【発明の効果】
【０００５】
この発明にかかる暗号通信装置によれば、送信データとともに送信乱数を送信し、受信データとともに受信検証情報を受信して、検証部が検証を行うので、通信開始時だけでなく、常に通信相手が正規の通信相手であるか否かを検証することができ、攻撃者による攻撃を防ぐことができるという効果を奏する。
【発明を実施するための最良の形態】
【０００６】
実施の形態１．
実施の形態１について、図１〜図１２を用いて説明する。
【０００７】
図１は、この実施の形態における暗号通信システム８００の全体構成の一例を示すシステム構成図である。
暗号通信システム８００は、複数の暗号通信装置１００（通信端末）を有する。
暗号通信装置１００は、ネットワーク８０１を介して互いに通信する。
暗号通信装置１００間の関係は、対等な関係であってもよいし、サーバとクライアントの関係であってもよい。例えば、ある暗号通信装置１００が、他の暗号通信装置１００を制御するデータを送信し、そのデータを受信した他の暗号通信装置１００が、受信したデータに基づいて所定の制御を受ける。あるいは、ある暗号通信装置１００が、他の暗号通信装置１００からの要求にしたがい、暗号通信装置１００が持つ秘密情報を、他の暗号通信装置１００に対して送信する。
【０００８】
ネットワーク８０１は、インターネットなどのオープンなネットワークである。したがって、暗号通信装置１００間の通信は、悪意の攻撃者９９９が傍受可能である。
そのため、暗号通信装置１００間の通信は、原則として暗号化され、攻撃者９９９に解読できないようにした暗号通信により行う。
【０００９】
攻撃者９９９は、暗号通信装置１００間の暗号通信を解読するため、様々な攻撃を仕掛けてくる可能性がある。
例えば、攻撃者９９９がどちら一方の暗号通信装置１００になりすまして他方の暗号通信装置１００と通信することにより、暗号解読の手がかりを得ようとする場合がある。
攻撃者９９９は、暗号通信装置１００間の通信を記録しておき、正規に暗号通信装置１００同士が通信したときのデータを暗号通信装置１００に対して送信することにより、暗号通信装置１００になりすます。これを再送攻撃という。
この実施の形態における暗号通信システム８００は、再送攻撃を見破り、安全な暗号通信を実現するものである。
【００１０】
図２は、この実施の形態における暗号通信装置１００の外観の一例を示す図である。
暗号通信装置１００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置９０１、キーボード９０２（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット９１０は、コンピュータであり、ファクシミリ機９３２、電話器９３１とケーブルで接続され、また、ローカルエリアネットワーク９４２（ＬＡＮ）、ゲートウェイ９４１を介してインターネット９４０（ネットワーク８０１）に接続されている。
【００１１】
図３は、この実施の形態における暗号通信装置１００のハードウェア資源の一例を示す図である。
暗号通信装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信装置９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信装置９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信装置９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００１２】
通信装置９１５は、ファクシミリ機９３２、電話器９３１、ＬＡＮ９４２等に接続されている。通信装置９１５は、ＬＡＮ９４２に限らず、インターネット９４０、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０或いはＩＳＤＮ等のＷＡＮに接続されている場合、ゲートウェイ９４１は不用となる。
通信装置９１５は、例えば、モデムやネットワークカードなどのデバイス（ネットワーク接続部）であり、ネットワーク８０１にデータを送信し、ネットワーク８０１からデータを受信する。
【００１３】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００１４】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００１５】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００１６】
図４は、この実施の形態における暗号通信装置１００の機能ブロックの構成の一例を示すブロック構成図である。
暗号通信装置１００は、受信部１１０、送信部１２０、データ処理部１３０、暗号処理部２００を有する。
【００１７】
受信部１１０は、通信装置９１５を用いて、他の暗号通信装置１００などが送信したデータを受信する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、受信したデータを出力する。
【００１８】
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、他の暗号通信装置１００などに対して送信するデータを入力する。
送信部１２０は、通信装置９１５を用いて、入力したデータを他の暗号通信装置１００などに対して送信する。
【００１９】
データ処理部１３０は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信したデータを処理する。
また、データ処理部１３０は、ＣＰＵ９１１などの処理装置を用いて、他の暗号通信装置１００に対して送信すべきデータを生成する。
【００２０】
暗号処理部２００は、ＣＰＵ９１１などの処理装置を用いて、暗号通信処理をする。
暗号通信処理とは、例えば、受信部１１０が受信したデータが暗号化されたデータである場合、これを復号する処理である。また、受信部１１０が受信したデータが、正規の通信相手である他の暗号通信装置１００からのものであるかを検証し、再送攻撃などを見破る処理も含む。更に、データ処理部１３０が生成したデータを暗号化する処理や、送信するデータが、再送攻撃によるものではなく、他の暗号通信装置１００にとっての正規の通信相手である暗号通信装置１００自身が送信したものであることを保証できるよう、データを加工する処理も含む。
暗号処理部２００がこのような暗号通信処理を行うので、データ処理部１３０は、他の暗号通信装置１００に対して送信すべき（生の）データを暗号処理部２００に渡すだけで、安全な暗号通信による送信ができる。また、データ処理部１３０は、暗号通信を意識せず、他の暗号通信装置１００から送信されてきたデータを、暗号処理部２００から受け取ることができる。
【００２１】
暗号処理部２００は、復号鍵記憶部２１１、復号部２１２、分割部２１３、受信検証生成部２１４、検証部２１５、データ出力部２１６、受信乱数記憶部２２１、送信乱数記憶部２２２、検証乱数生成部２３１、送信検証生成部２３２、データ入力部２３３、開始乱数生成部２３５、暗号鍵記憶部２３６、暗号化部２３７を有する。
【００２２】
復号鍵記憶部２１１は、記憶装置を用いて、復号鍵を記憶する。記憶装置は、フラッシュメモリや磁気ディスク装置９２０などの不揮発デバイスである。記憶装置は、復号鍵が外部に漏れないようにするため、耐タンパ性のある記憶装置であることが好ましい。
復号鍵記憶部２１１が記憶する復号鍵は、正規の通信相手である他の暗号通信装置１００との間で事前に合意したものであり、正規の通信相手である他の暗号通信装置１００が送信するデータを暗号化する暗号鍵と対になるものである。例えば、共通鍵暗号方式の場合、復号鍵記憶部２１１が記憶する復号鍵は、正規の通信相手である他の暗号通信装置１００が送信するデータを暗号化する暗号鍵と同一である。しかし、他の暗号方式の場合には、両者が同一であるとは限らない。復号鍵記憶部２１１が記憶する復号鍵は、正規の通信相手である他の暗号通信装置１００が暗号化したデータを正しく復号できるものであればよい。
【００２３】
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が出力した受信暗号文を入力する。受信部１１０が出力するデータは、通信相手が暗号化して送信してきたデータである場合と、通信相手が暗号化せずに送信してきたデータである場合とがある。「受信暗号文」とは、受信部１１０が出力したデータのうち、暗号化されたデータのことである。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、復号鍵記憶部２１１が記憶した復号鍵を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、入力した受信暗号文を、入力した復号鍵で復号する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信平文を出力する。「受信平文」とは、復号部２１２が受信暗号文を復号した結果得られたデータのことである。復号鍵記憶部２１１が記憶した復号鍵が、通信相手がデータを暗号化した暗号鍵と正しく対応するものであれば、受信平文は、通信相手が暗号化した元のデータと一致する。
【００２４】
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、復号部２１２が出力した受信平文を入力する。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、入力した受信平文に含まれる情報を取得する。
受信平文には、送信検証情報、送信乱数、送信データなどの情報が含まれている。
「送信検証情報」とは、そのデータを送信した送信元が、正規の通信相手である他の暗号通信装置１００であることを、暗号通信装置１００が検証するために使用するデータである。
「送信乱数」とは、暗号通信装置１００が他の暗号通信装置１００に対して送信するデータが、他の暗号通信装置１００にとっての正規の通信相手である暗号通信装置１００自身が送信したものであることを、他の暗号通信装置１００が検証できるように、送信するデータにつける送信検証情報を生成する材料となるデータである。
「送信データ」とは、他の暗号通信装置１００のデータ処理部１３０が、暗号通信装置１００のデータ処理部１３０に対して送信しようとしているデータである。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、受信平文に含まれる送信検証情報と送信乱数と送信データとを取得する。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、受信検証情報と受信乱数と受信データとを出力する。
「受信検証情報」とは、分割部２１３が取得した送信検証情報のことであり、単に呼び方が変わっただけで同一のデータである。
「受信乱数」とは、同様に、分割部２１３が取得した送信乱数のことである。
「受信データ」も同様に、分割部２１３が取得した送信データのことである。
【００２５】
図５は、この実施の形態における受信平文５１０のデータ構造の一例を示す図である。
この例において、受信平文５１０は、送信検証情報５１１、送信乱数５１２、送信データ５１３を結合したデータである。データの「結合」とは、ｍビットのデータＡとｎビットのデータＢとからｍ＋ｎビットのデータＣを生成することである。データＣは、データＡのすべてのビットとデータＢのすべてのビットとを含む。データＡとデータＢとの結合は、通常「Ａ｜Ｂ」と表記し、データＡを構成するビット列の後ろにデータＢを構成するビット列をつなげたビット列によって構成される。
この例において、受信平文５１０は、送信検証情報５１１を先頭とし、その後に送信乱数５１２を結合し、更にその後に送信データ５１３を結合したものである。
【００２６】
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、復号部２１２が出力した受信平文５１０を入力する。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、入力した受信平文５１０を分割し、受信検証情報５２１、受信乱数５２２、受信データ５２３を取得する。
【００２７】
例えば、送信検証情報５１１のビット長がｎ１、送信乱数５１２のビット長がｎ２、送信データのビット長がｎ３であれば、受信平文５１０は（ｎ１＋ｎ２＋ｎ３）ビットのデータである。ここで、ｎ１およびｎ２は、あらかじめ定めた定数である。ｎ３は、あらかじめ定めた定数でもよいし、データの内容によって変化してもよい。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、入力した受信平文５１０の先頭ｎ１ビットを取得して、受信検証情報５２１とする。分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、残り（ｎ２＋ｎ３）ビットのデータから先頭ｎ２ビットを取得して、受信乱数５２２とする。分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、残りｎ３ビットのデータを取得して、受信データ５２３とする。
【００２８】
図６は、この実施の形態における受信平文５１０のデータ構造の別の例を示す図である。
ここに示すように、受信平文５１０は、送信検証情報５１１を先頭とし、その後に送信データ５１３を結合し、更にその後に送信乱数５１２を結合したものであってもよい。
また、受信平文５１０は、送信乱数５１２を先頭とし、その後に送信検証情報５１１を結合し、更にその後に送信データ５１３を結合したものであってもよい。
あるいは、受信平文５１０は、送信乱数５１２を先頭とし、その後に送信データ５１３を結合し、更にその後ろに送信検証情報５１１を結合したものであってもよい。
【００２９】
送信データ５１３を先頭としてもよいが、送信検証情報５１１あるいは送信乱数５１２を先頭とするほうが好ましい。送信検証情報５１１や送信乱数５１２は、送信のたびに異なるのに対して、送信データ５１３は同じデータが何回も送信される場合があるからである。
ＣＢＣ（Ｃｉｐｈｅｒ  Ｂｌｏｃｋ  Ｃｈａｉｎｉｎｇ）モードやＣＦＢ（Ｃｉｐｈｅｒ  Ｆｅｅｄｂａｃｋ）モードのブロック暗号方式では、二番目以降のブロックの暗号文が、その前のブロックの暗号文に依存するので、同じデータを暗号化しても異なる暗号文が生成される。これに対して、一番先頭のブロックは、同じデータを同じ暗号鍵で暗号化すると、同じ暗号文が生成されるので、攻撃者９９９がその部分を再送攻撃に利用できる可能性がある。
送信データ５１３を先頭以外の位置に結合すれば、一番先頭のブロックは常に異なるデータとなるので、一番先頭のブロックの暗号文も常に異なる。したがって、攻撃者９９９がその部分を再送攻撃に利用することはできない。
同様の理由により、ブロック暗号方式を用いる場合には、二番目以降のブロックの暗号文がその前のブロックの暗号文に依存しないＥＣＢ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｄｅ  Ｂｏｏｋ）モードではなく、上述したＣＢＣモードやＣＦＢモードを用いるほうが好ましい。
【００３０】
図４に戻り、暗号通信装置１００の機能ブロックの説明を続ける。
【００３１】
受信検証生成部２１４は、ＣＰＵ９１１などの処理装置を用いて、後述する送信乱数記憶部２２２が記憶した送信乱数を入力する。
受信検証生成部２１４は、ＣＰＵ９１１などの処理装置を用いて、入力した送信乱数に基づくデータを生成する。
受信検証生成部２１４は、ＣＰＵ９１１などの処理装置を用いて、検証情報を出力する。「検証情報」とは、送信乱数に基づいて受信検証生成部２１４が生成したデータのことである。
「送信乱数に基づくデータ」とは、例えば、送信乱数そのものであってもよいし、送信乱数のハッシュ値であってもよい。あるいは、送信乱数に所定の演算を施したデータであってもよい。「送信乱数に基づくデータ」は、送信乱数に依存し、送信乱数により一意に決定するデータであって、送信乱数を知らなければ同じデータを生成することができないものであればよい。
なお、検証情報として送信乱数そのものを用いる場合は、受信検証生成部２１４がなくてもよい。
【００３２】
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が出力した受信検証情報を入力する。
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、受信検証生成部２１４が出力した検証情報を入力する。検証情報として送信乱数そのものを用いる場合には、検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、送信乱数記憶部２２２が記憶した送信乱数を検証情報として入力する。
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、入力した受信検証情報と、入力した検証情報とに基づいて、検証成功か検証失敗かを判断する。
具体的には、検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、入力した受信検証情報と、入力した検証情報とを比較する。
比較の結果、受信検証情報と検証情報とが一致する場合、検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、検証成功と判断する。
受信検証情報と検証情報とが一致しない場合には、検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、検証失敗と判断する。
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、検証結果を出力する。「検証結果」とは、検証部２１５が検証成功と判断したか、検証失敗と判断したかを示すデータである。
【００３３】
データ出力部２１６は、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が出力した受信データを入力する。
データ出力部２１６は、ＣＰＵ９１１などの処理装置を用いて、検証部２１５が出力した検証結果を入力する。
入力した検証結果に基づいて、検証部２１５が検証成功と判断したとわかった場合、データ出力部２１６は、ＣＰＵ９１１などの処理装置を用いて、入力した受信データを、データ処理部１３０に対して出力する。
検証部２１５が検証失敗したと判断した場合、データ出力部２１６は、入力した受信データではなく、通信が異常終了したことを示すデータを、データ処理部１３０に対して出力する。
これにより、データ処理部１３０は、他の暗号通信装置１００が送信したデータを受け取ることができないので、その時点で他の暗号通信装置１００との間の暗号通信が終了する。
【００３４】
受信乱数記憶部２２１は、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が出力した受信乱数を入力する。
受信乱数記憶部２２１は、ＲＡＭ９１４などの記憶装置を用いて、入力した受信乱数を記憶する。
なお、通信が終了した場合には、受信乱数を記憶する必要がない。したがって、受信乱数記憶部２２１は、ＣＰＵ９１１などの処理装置を用いて、検証部２１５が出力した検証結果を入力し、検証部２１５が検証成功と判断したとわかった場合には、受信乱数記憶部２２１は、ＣＰＵ９１１などの処理装置を用いて、入力した受信乱数を記憶し、検証失敗と判断したとわかった場合には、受信乱数記憶部２２１は、ＣＰＵ９１１などの処理装置を用いて、記憶した受信乱数を消去することとしてもよい。
【００３５】
検証乱数生成部２３１は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成する。
検証乱数生成部２３１は、ＣＰＵ９１１などの処理装置を用いて、送信乱数を出力する。「送信乱数」は、検証乱数生成部２３１が生成した乱数である。
【００３６】
送信乱数記憶部２２２は、ＣＰＵ９１１などの処理装置を用いて、検証乱数生成部２３１が生成した送信乱数を入力する。
送信乱数記憶部２２２は、ＲＡＭ９１４などの記憶装置を用いて、入力した送信乱数を記憶する。
なお、通信が終了した場合には、送信乱数を記憶している必要がない。したがって、送信乱数記憶部２２２は、ＣＰＵ９１１などの処理装置を用いて、検証部２１５が出力した検証結果を入力し、検証部２１５が検証失敗と判断したとわかった場合には、送信乱数記憶部２２２は、ＣＰＵ９１１などの処理装置を用いて、記憶した送信乱数を消去することとしてもよい。
【００３７】
送信検証生成部２３２は、ＣＰＵ９１１などの処理装置を用いて、受信乱数記憶部２２１が記憶した受信乱数を入力する。
送信検証生成部２３２は、ＣＰＵ９１１などの処理装置を用いて、入力した受信乱数に基づくデータを生成する。
送信検証生成部２３２は、ＣＰＵ９１１などの処理装置を用いて、送信検証情報を出力する。「送信検証情報」は、受信乱数に基づいて送信検証生成部２３２が生成したデータである。
「受信乱数に基づくデータ」とは、例えば、受信乱数そのものであってもよいし、受信乱数のハッシュ値であってもよい。受信乱数に基づくデータ（送信検証情報）は、通常、受信検証生成部２１４が生成する送信乱数に基づくデータ（検証情報）と同じ方式（演算・計算式）で生成するので、受信乱数と送信乱数とが同じ場合には、同じデータが生成される。
ここで、暗号通信装置１００の送信検証生成部２３２は、通信相手である他の暗号通信装置１００の受信検証生成部２１４が検証情報を生成するのと同じ方式で送信検証情報を生成する必要がある。また、暗号通信装置１００の受信検証生成部２１４は、通信相手である他の暗号通信装置１００の送信検証生成部２３２が送信検証情報を生成するのと同じ方式で検証情報を生成する必要がある。この条件を満たす限りにおいては、１つの暗号通信装置１００のなかで、受信検証生成部２１４が検証情報を生成する方式と、送信検証生成部２３２が送信検証情報を生成する方式とが異なっていてもよい。
なお、送信検証情報として受信乱数そのものを用いる場合は、送信検証生成部２３２がなくてもよい。
【００３８】
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、通信相手である他の暗号通信装置１００に対して送信すべきデータを、データ処理部１３０から入力する。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、送信データを出力する。「送信データ」は、データ入力部２３３がデータ処理部１３０から入力した、通信相手である他の暗号通信装置１００に対して送信すべきデータである。
なお、送信データが、通信相手である他の暗号通信装置１００から受信しデータ出力部２１６が出力した受信データに対する応答である場合、送信データを「応答データ」と呼ぶ。応答データは、送信データの一種である。
【００３９】
ここで、「応答」とは広い意味に用いる。すなわち、暗号通信装置１００がサーバ装置として機能している場合に、通信相手である他の暗号通信装置１００からの要求を示す受信データを受信して、それに対する応答として送信する送信データが「応答データ」であるのはもちろんであるが、それに限らない。
通信相手である他の暗号通信装置１００がサーバ装置として機能している場合に、他の暗号通信装置１００から、暗号通信装置１００からの要求に対する応答である受信データを受信し終わり、サーバ装置である他の暗号通信装置１００が、暗号通信装置１００からの次の要求を待っている状態のときに、暗号通信装置１００から他の暗号通信装置１００に対して送信する次の要求を示す送信データも「応答データ」に含む。
すなわち、通信のシーケンスにおいて、通信相手から受信データを受信した後、その通信相手に対して送信する送信データは、応答データである。
【００４０】
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、送信検証生成部２３２が出力した送信検証情報を入力する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、検証乱数生成部２３１が出力した送信乱数を入力する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、データ入力部２３３が出力した送信データを入力する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、入力した送信検証情報と、入力した送信乱数と、入力した送信データとを含むデータを生成する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、送信平文を出力する。「送信平文」とは、結合部２３４が生成した、送信検証情報と送信乱数と送信データとを含むデータのことである。
【００４１】
図７は、この実施の形態における結合部２３４が生成する送信平文５４０のデータ構造の一例を示す図である。
この例において、結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、送信検証情報５４１と送信乱数５４２と送信データ５４３とを入力し、ＣＰＵ９１１などの処理装置を用いて、送信検証情報５４１を先頭として、その後に送信乱数５４２を結合し、更にその後に送信データ５４３を結合して、送信平文５４０を生成する。
【００４２】
なお、結合の順序は、これに限るものではなく、図６を用いて説明した受信平文５１０と同様に、異なる順序であってもよい。
暗号通信装置１００の結合部２３４が生成する送信平文５４０における結合の順序は、通信相手である他の暗号通信装置１００の分割部２１３が分割する受信平文５１０における結合の順序と同じ必要がある。また、暗号通信装置１００の分割部２１３が分割する受信平文５１０における結合の順序は、通信相手である他の暗号通信装置１００の結合部２３４が生成する送信平文５４０における結合の順序と同じ必要がある。この条件を満たす限りにおいては、１つの暗号通信装置１００のなかで、分割部２１３が分割する受信平文５１０における結合の順序と、結合部２３４が結合する送信平文５４０における結合の順序とが異なっていてもよいし、送受信のたびに結合の順序を変えてもよい。
ただし、受信平文５１０の先頭が送信乱数５１２である場合、その送信乱数５１２に基づく送信検証情報５１１を含む送信平文５４０の先頭は、送信検証情報５１１以外のデータであることが好ましい。通信を傍受した攻撃者９９９が、送信乱数５１２と送信検証情報５１１との対応関係に関わる情報を得ることを防ぐためである。
【００４３】
また、結合以外の方法で送信平文５４０を生成する場合は、暗号通信装置１００の結合部２３４が生成した送信平文５４０から、通信相手である他の暗号通信装置１００の分割部２１３が、送信検証情報５４１、送信乱数５４２、送信データ５４３を取得できるよう、対応する方法で送信平文５４０を生成する。
【００４４】
図４に戻り、暗号通信装置１００の機能ブロックの説明を続ける。
【００４５】
開始乱数生成部２３５は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成する。
開始乱数生成部２３５は、ＣＰＵ９１１などの処理装置を用いて、開始乱数を出力する。「開始乱数」とは、開始乱数生成部２３５が生成した乱数のことである。
【００４６】
受信乱数記憶部２２１が受信乱数を記憶している場合には、送信検証生成部２３２が送信検証情報を生成するが、受信乱数記憶部２２１が受信乱数を記憶していない場合には、送信検証生成部２３２は送信検証情報を生成しない。
その場合、結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、開始乱数生成部２３５が生成した開始乱数を入力し、入力した開始乱数を送信検証情報として含む送信データを生成する。
受信乱数記憶部２２１が受信乱数を記憶していない場合とは、例えば、通信相手から受信したデータのなかに送信乱数が含まれていない場合などである。これには、送信データが、後述する通信開始要求である場合などがある。
【００４７】
暗号鍵記憶部２３６は、記憶装置を用いて、暗号鍵を記憶する。記憶装置は、フラッシュメモリや磁気ディスク装置９２０などの不揮発性デバイスである。記憶装置は、暗号鍵が外部に漏れないようにするため、耐タンパ性のある記憶装置であることが好ましい。
暗号鍵記憶部２３６が記憶する復号鍵は、正規の通信相手である他の暗号通信装置１００との間で事前に合意したものであり、正規の通信相手である他の暗号通信装置１００が受信したデータを復号する復号鍵と対になるものである。例えば、共通鍵暗号方式の場合、暗号鍵記憶部２３６が記憶する暗号鍵は、正規の通信相手である他の暗号通信装置１００が受信したデータを復号する復号鍵と同一である。しかし、他の暗号方式の場合には、両者が同一であるとは限らない。暗号鍵記憶部２３６が記憶する暗号鍵は、正規の通信相手である他の暗号通信装置１００が、受信したデータを正しく復号できるものであればよい。
【００４８】
なお、復号鍵記憶部２１１が記憶する復号鍵と、暗号鍵記憶部２３６が記憶する暗号鍵とが同一である場合には、復号鍵記憶部２１１が暗号鍵記憶部２３６を兼ねる構成として、独立した暗号鍵記憶部２３６を設けなくてもよい。
【００４９】
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合部２３４が出力した送信平文を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、入力した送信平文を、入力した暗号鍵で暗号化する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、送信暗号文を出力する。「送信暗号文」とは、暗号化部２３７が送信平文を暗号化して得たデータのことである。
【００５０】
暗号化部２３７が出力した送信暗号文は、送信部１２０が入力し、他の暗号通信装置１００に対して送信する。
【００５１】
次に、暗号通信装置１００同士が暗号通信をする通信の流れについて、説明する。
【００５２】
図８は、この実施の形態における暗号通信装置１００ａと暗号通信装置１００ｂとが暗号通信をする通信の流れの一例を示すシーケンス図である。
この実施の形態の暗号通信は、一方の暗号通信装置１００が通信の開始を要求することから始まる。この例では、通信の開始を要求する側を暗号通信装置１００ａとし、通信の開始を要求された側を暗号通信装置１００ｂとして説明する。
【００５３】
最初に、暗号通信装置１００ａが通信開始要求６０１を送信し、暗号通信装置１００ｂが受信する。
通信開始要求６０１は、暗号通信装置１００ａが暗号通信装置１００ｂに対して通信の開始を要求することを示すデータである。
通信開始要求６０１は、例えば、暗号通信装置１００ａ自身を示す識別符号や、開始しようとしている通信の種別を示すデータなどを含んでもよいし、あらかじめ定めた定型データであってもよい。
また、通信開始要求６０１は、暗号化してもよいし、暗号化しなくてもよい。
【００５４】
次に、暗号通信装置１００ｂが通信開始応答６０２を送信し、暗号通信装置１００ａが受信する。
通信開始応答６０２は、データ処理部１３０が生成した送信データを含む送信平文を、暗号化部２３７が暗号化した送信暗号文である。
通信開始応答６０２に含まれる送信データは、通信開始要求６０１による暗号通信装置１００ａの要求に対する応答である。データ処理部１３０は、例えば、通信を開始できることを示す「了解」、通信を開始できないことを示す「拒否」などの情報を送信データとして生成する。以下、通信開始応答６０２に含まれる送信データを「開始応答データ」と呼ぶ。
開始応答データには、上述した「了解」「拒否」以外の任意の情報を含めてもよい。
【００５５】
通信開始応答６０２には、開始応答データのほか、送信検証情報と送信乱数とが含まれる。送信乱数は、検証乱数生成部２３１が生成する。また、通信開始要求６０１には受信乱数が含まれていないので、送信検証情報は、開始乱数生成部２３５が生成した開始乱数である。
【００５６】
通信開始応答６０２により通信の開始が了解されると、暗号通信装置１００ａと暗号通信装置１００ｂとの間の暗号通信が開始する。
【００５７】
暗号通信装置１００ａが通信暗号文６０３を送信し、暗号通信装置１００ｂが受信する。
通信暗号文６０３は、データ処理部１３０が生成した応答データを含む送信平文を、暗号化部２３７が暗号化した送信暗号文である。
通信暗号文６０３に含まれる応答データは、暗号通信装置１００ａのデータ処理部１３０が実際に暗号通信装置１００ｂのデータ処理部１３０に対して送りたい情報を含むデータである。
通信暗号文６０３には、応答データのほか、送信検証情報と送信乱数とが含まれる。送信乱数は、検証乱数生成部２３１が生成する。また、送信検証情報は、受信乱数記憶部２２１が記憶した受信乱数に基づいて送信検証生成部２３２が生成する。
【００５８】
暗号通信装置１００ｂは、通信暗号文６０３を検証し、検証成功と判断した場合には通信を続けるが、検証失敗と判断した場合には通信を終了する。これにより、暗号通信装置１００ａになりすました攻撃者９９９に、暗号解読の役に立つ情報を与えない。
【００５９】
次に、暗号通信装置１００ｂが通信暗号文６０４を送信し、暗号通信装置１００ａが受信する。
通信暗号文６０４は、データ処理部１３０が生成した応答データ、検証乱数生成部２３１が生成した送信乱数、送信検証生成部２３２が生成した送信検証情報を含む送信平文を、暗号化部２３７が暗号化した送信暗号文である。
通信暗号文６０４に含まれる応答データは、暗号通信装置１００ｂのデータ処理部１３０が実際に暗号通信装置１００ａのデータ処理部１３０に対して送りたい情報を含むデータである。
【００６０】
暗号通信装置１００ａは、通信暗号文６０４を検証し、検証成功と判断した場合には通信を続けるが、検証失敗と判断した場合には通信を終了する。これにより、暗号通信装置１００ｂになりすました攻撃者９９９に、暗号解読の役に立つ情報を与えない。
【００６１】
以下、同様に、暗号通信装置１００ａが通信暗号文６０５を送信し、暗号通信装置１００ｂが受信する。検証に成功すれば通信を続行する。暗号通信装置１００ｂが通信暗号文６０６を送信し、暗号通信装置１００ａが受信する。検証に成功すれば通信を続行する。これを通信が終了するまで繰り返す。
【００６２】
なお、正常に通信を終了する場合のシーケンスについては、ここでは説明を省略する。
【００６３】
次に、動作の詳細について説明する。
【００６４】
図９は、この実施の形態における暗号通信装置１００が通信開始を要求する開始要求処理の流れの一例を示すフローチャート図である。
【００６５】
開始要求生成工程Ｓ０１において、データ処理部１３０は、ＣＰＵ９１１などの処理装置を用いて、通信開始要求を生成する。
データ処理部１３０は、生成した通信開始要求を出力する。
【００６６】
送信乱数消去工程Ｓ０２において、送信乱数記憶部２２２は、ＣＰＵ９１１などの処理装置を用いて、記憶した送信乱数を消去する。
この例では、送信乱数記憶部２２２が送信乱数を記憶していないことにより、暗号通信中でないことを示す。暗号通信中であるか否かを判別できるのであれば、他の構成による処理をしてもよい。例えば、送信乱数とは別に、暗号通信中であるか否かを示すデータを記憶する通信状態記憶部を設け、送信乱数消去工程Ｓ０２の代わりに、通信状態記憶部が、暗号通信中でないことを記憶してもよい。また、別の方法で暗号通信中であるか否かを判断することとし、暗号通信中であるか否かを示すデータを記憶しなくてもよい。
【００６７】
開始要求送信工程Ｓ０３において、送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、開始要求生成工程Ｓ０１でデータ処理部１３０が出力した通信開始要求を入力する。
なお、通信開始要求を暗号化して送信する場合には、データ処理部１３０が出力した通信開始要求を暗号化部２３７が暗号化し、暗号化した通信開始要求を送信部１２０が入力する。
送信部１２０は、通信装置９１５を用いて、入力した通信開始要求を、他の暗号通信装置１００（暗号通信装置１００ｂ）に対して送信する。
【００６８】
図１０は、この実施の形態における暗号通信装置１００が通信開始要求を受信した場合に実行する開始応答処理の流れの一例を示すフローチャート図である。
【００６９】
開始要求受信工程Ｓ１１において、受信部１１０は、通信装置９１５を用いて、他の暗号通信装置１００（暗号通信装置１００ａ）が送信した通信開始要求を受信する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、受信した通信開始要求を出力する。
【００７０】
開始応答工程Ｓ１２において、データ処理部１３０は、ＣＰＵ９１１などの処理装置を用いて、Ｓ１１で受信部１１０が出力した通信開始要求を入力する。
なお、通信開始要求が暗号化されている場合には、受信部１１０が出力した通信開始要求を復号部２１２が復号し、復号した通信開始要求をデータ処理部１３０が入力する。
データ処理部１３０は、ＣＰＵ９１１などの処理装置を用いて、通信を開始できるか否かを判断し、開始応答データを生成する。
データ処理部１３０は、ＣＰＵ９１１などの処理装置を用いて、生成した開始応答データを出力する。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、データ処理部１３０が出力した開始応答データを入力する。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、入力した開始応答データを、送信データとして出力する。
【００７１】
開始乱数生成工程Ｓ１３において、開始乱数生成部２３５は、ＣＰＵ９１１などの処理装置を用いて、開始乱数を生成する。
開始乱数生成部２３５は、ＣＰＵ９１１などの処理装置を用いて、生成した開始乱数を出力する。
【００７２】
送信乱数生成工程Ｓ１４において、検証乱数生成部２３１は、ＣＰＵ９１１などの処理装置を用いて、送信乱数を生成する。
検証乱数生成部２３１は、ＣＰＵ９１１などの処理装置を用いて、生成した送信乱数を出力する。
送信乱数記憶部２２２は、ＣＰＵ９１１などの処理装置を用いて、検証乱数生成部２３１が出力した送信乱数を入力する。
送信乱数記憶部２２２は、ＲＡＭ９１４などの記憶装置を用いて、入力した送信乱数を記憶する。
【００７３】
結合工程Ｓ１５において、結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、開始応答工程Ｓ１２でデータ入力部２３３が出力した送信データを入力する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、開始乱数生成工程Ｓ１３で開始乱数生成部２３５が出力した開始乱数を入力し、送信検証情報とする。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、送信乱数生成工程Ｓ１４で検証乱数生成部２３１が出力した送信乱数を入力する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、入力した送信データと、入力した送信検証情報と、入力した送信乱数とを含む送信平文を生成する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、生成した送信平文を出力する。
【００７４】
暗号化工程Ｓ１６において、暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合工程Ｓ１５で結合部２３４が出力した送信平文を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、入力した送信平文を、入力した暗号鍵で暗号化して、送信暗号文とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号化した送信暗号文を出力する。
【００７５】
開始応答送信工程Ｓ１７において、送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、暗号化工程Ｓ１６で暗号化部２３７が出力した送信暗号文を入力する。
送信部１２０は、通信装置９１５を用いて、入力した送信暗号文（通信開始応答６０２）を、他の暗号通信装置１００（暗号通信装置１００ａ）に対して送信する。
【００７６】
図１１は、この実施の形態における暗号通信装置１００が通信開始応答または通信暗号文を受信した場合に実行する暗号文受信処理の流れの一例を示すフローチャート図である。
【００７７】
受信工程Ｓ２１において、受信部１１０は、通信装置９１５を用いて、通信開始応答または通信暗号文を受信し、受信暗号文とする。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、受信した受信暗号文を出力する。
【００７８】
復号工程Ｓ２２において、復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信工程Ｓ２１で受信部１１０が出力した受信暗号文を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、復号鍵記憶部２１１が記憶した復号鍵を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、入力した受信暗号文を、入力した復号鍵で復号して、受信平文とする。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、復号した受信平文を出力する。
【００７９】
分割工程Ｓ２３において、分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、復号工程Ｓ２２で復号部２１２が出力した受信平文を入力する。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、入力した受信平文から、受信検証情報と、受信乱数と、受信データとを取得する。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、取得した受信検証情報と、受信乱数と、受信データとを出力する。
【００８０】
通信状態判断工程Ｓ２４において、受信検証生成部２１４は、ＣＰＵ９１１などの処理装置を用いて、送信乱数記憶部２２２が記憶した送信乱数を入力する。
受信検証生成部２１４は、ＣＰＵ９１１などの処理装置を用いて、入力した送信乱数に基づいて、検証情報を生成する。
受信検証生成部２１４は、ＣＰＵ９１１などの処理装置を用いて、生成した検証情報を出力する。
なお、Ｓ０２で送信乱数記憶部２２２が送信乱数を消去した場合など、送信乱数記憶部２２２が送信乱数を記憶していない場合には、受信検証生成部２１４は、検証情報を生成しない。
【００８１】
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、受信検証生成部２１４が生成した検証情報を入力する。
検証部２１５は、検証情報を入力した場合、暗号通信中であると判断する。
送信乱数記憶部２２２が送信乱数を記憶していない場合、受信検証生成部２１４が検証情報を生成しないので、検証部２１５は、検証情報を入力できない。
検証部２１５は、検証情報を入力できない場合、暗号通信中でないと判断する。
暗号通信中であると判断した場合には、Ｓ２５へ進む。
暗号通信中でないと判断した場合には、Ｓ２６へ進む。
【００８２】
受信部１１０が受信した受信暗号文が通信開始応答である場合、通信開始応答はその前に暗号通信装置１００が送信した通信開始要求に対する応答であるから、暗号通信装置１００は、図９で説明した開始要求処理を実行している。したがって、送信乱数消去工程Ｓ０２で送信乱数記憶部２２２が記憶した送信乱数を消去しているので、検証部２１５は暗号通信中でないと判断する。
受信部１１０が受信した受信暗号文が通信暗号文である場合、通信暗号文はその前に暗号通信装置１００が送信した通信開始応答または通信暗号文に対する応答であるから、暗号通信装置１００は、図１０で説明した開始応答処理または後述する暗号文送信処理を実行している。したがって、送信乱数生成工程Ｓ１４または後述するＳ３３で送信乱数記憶部２２２が送信乱数を記憶しているので、検証部２１５は暗号通信中であると判断する。
【００８３】
この例では、検証部２１５は、送信乱数記憶部２２２が送信乱数を記憶しているか否かに基づいて、暗号通信中であるか否かを判断するが、別の情報に基づいて判断してもよい。例えば、通信開始応答と通信暗号文とを異なるフォーマットとし、受信したデータの違いにより、暗号通信中であるか否かを判断してもよい。
【００８４】
検証工程Ｓ２５において、検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、分割工程Ｓ２３で分割部２１３が出力した受信検証情報を入力する。
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、通信状態判断工程Ｓ２４で入力した検証情報と、入力した受信検証情報とを比較する。
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、検証情報と受信検証情報とが一致する場合に、検証成功と判断する。一致しない場合には、検証失敗と判断する。
検証成功と判断した場合、Ｓ２６へ進む。
検証失敗と判断した場合、通信を終了する。
【００８５】
受信検証情報は、暗号化・復号が正しく行われた場合、他の暗号通信装置１００の送信検証生成部２３２が生成した送信検証情報と同一のデータである。他の暗号通信装置１００の送信検証生成部２３２は、受信した受信乱数に基づいて送信検証情報を生成する。暗号通信装置１００が受信した受信乱数は、暗号化・復号が正しく行われた場合、暗号通信装置１００が送信し、送信乱数記憶部２２２が記憶した送信乱数と同一のデータである。検証情報は、送信乱数記憶部２２２が記憶した送信乱数に基づいて生成するので、検証情報と受信検証情報とが一致する場合、２回の暗号化・復号がどちらも正しく行われたことを示し、通信相手が正規の通信相手である他の暗号通信装置１００であることがわかる。
【００８６】
これに対し、通信相手が、暗号通信装置１００になりすました攻撃者９９９である場合、攻撃者９９９は暗号鍵・復号鍵を知らないので、正しく暗号化・復号することができない。したがって、検証情報と受信検証情報とが一致せず、なりすましを見破ることができる。
また、通信のたびに異なる乱数を生成して送信乱数とするので、攻撃者９９９が再送攻撃をした場合であっても、検証情報と受信検証情報とは一致しない。したがって、再送攻撃を見破ることができる。
【００８７】
データ出力工程Ｓ２６において、データ出力部２１６は、ＣＰＵ９１１などの処理装置を用いて、分割工程Ｓ２３で分割部２１３が出力した受信データを入力する。
データ出力部２１６は、ＣＰＵ９１１などの処理装置を用いて、入力した受信データを出力する。
【００８８】
受信乱数記憶工程Ｓ２７において、受信乱数記憶部２２１は、ＣＰＵ９１１などの処理装置を用いて、分割工程Ｓ２３で分割部２１３が出力した受信乱数を入力する。
受信乱数記憶部２２１は、ＲＡＭ９１４などの記憶装置を用いて、入力した受信乱数を記憶する。
【００８９】
以上の処理により、受信部１１０が受信したデータが通信開始応答である場合には、検証をせず、常にデータ出力部２１６が受信データを出力する。
また、受信部１１０が受信したデータが通信暗号文である場合には、検証部２１５が検証をし、検証成功と判断した場合にはデータ出力部２１６が受信データを出力し、検証失敗と判断した場合には通信を終了する。
【００９０】
通信を終了する場合の処理については詳しく述べないが、例えば、暗号通信装置１００が応答を送信せず、タイムアウトすることによって通信を終了してもよい。
あるいは、正常時の通信終了処理と同様の手順によって、通信を終了してもよい。
あるいは、わざと正しくない検証情報を含む通信暗号文を送信して、通信相手に検証を失敗させ、通信を終了してもよい。
【００９１】
データ出力工程Ｓ２６でデータ出力部２１６が受信データを出力した場合、データ処理部１３０が受信データを入力し、所定のデータ処理をする。
データ処理部１３０がデータ処理により、他の暗号通信装置１００に対して送信すべき応答データを生成した場合には、暗号文送信処理を実行する。
【００９２】
図１２は、この実施の形態における暗号通信装置１００が送信暗号文を送信する場合に実行する暗号文送信処理の流れの一例を示すフローチャート図である。
【００９３】
データ処理工程Ｓ３１において、データ処理部１３０は、ＣＰＵ９１１などの処理装置を用いて、応答データを生成する。
データ処理部１３０は、ＣＰＵ９１１などの処理装置を用いて、生成した応答データを出力する。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、データ処理部１３０が出力した応答データを入力する。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、入力した応答データを、送信データとして出力する。
【００９４】
検証情報生成工程Ｓ３２において、送信検証生成部２３２は、ＣＰＵ９１１などの処理装置を用いて、データ出力工程Ｓ２６で受信乱数記憶部２２１が記憶した受信乱数を入力する。
送信検証生成部２３２は、ＣＰＵ９１１などの処理装置を用いて、入力した受信乱数に基づいて送信検証情報を生成する。
送信検証生成部２３２は、ＣＰＵ９１１などの処理装置を用いて、生成した送信検証情報を出力する。
【００９５】
送信乱数生成工程Ｓ３３において、検証乱数生成部２３１は、ＣＰＵ９１１などの処理装置を用いて、送信乱数を生成する。
検証乱数生成部２３１は、ＣＰＵ９１１などの処理装置を用いて、生成した送信乱数を出力する。
【００９６】
結合工程Ｓ３４において、結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、データ処理工程Ｓ３１でデータ入力部２３３が出力した送信データを入力する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、検証情報生成工程Ｓ３２で送信検証生成部２３２が出力した送信検証情報を入力する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、送信乱数生成工程Ｓ３３で検証乱数生成部２３１が出力した送信乱数を入力する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、入力した送信データと、入力した送信検証情報と、入力した送信乱数とを含む送信平文を生成する。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、生成した送信平文を出力する。
【００９７】
暗号化工程Ｓ３５において、暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合工程Ｓ３４で結合部２３４が出力した送信平文を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、入力した送信平文を、入力した暗号鍵で暗号化して、送信暗号文とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号化した送信暗号文を出力する。
【００９８】
送信工程Ｓ３６において、送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、暗号化工程Ｓ３５で暗号化部２３７が出力した送信暗号文を入力する。
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、入力した送信暗号文を他の暗号通信装置１００に対して送信する。
【００９９】
検証情報生成工程Ｓ３２で送信検証生成部２３２が生成した送信検証情報は、Ｓ３５で暗号化部２３７が暗号化し、送信工程Ｓ３６で送信部１２０が他の暗号通信装置１００に対して送信する。他の暗号通信装置１００では、これを検証工程Ｓ２５で検証部２１５が検証し、他の暗号通信装置１００にとっての正規の通信相手である暗号通信装置１００から送られてきたものであることを確認する。
【０１００】
図８に戻り、暗号通信装置１００ａ及び暗号通信装置１００ｂが、通信相手を検証して正規の通信相手であることを確認するタイミングについて説明する。
【０１０１】
暗号通信装置１００ｂは、通信開始応答６０２に送信乱数を含めて送信し、その応答である通信暗号文６０３に含まれる受信検証情報に基づいて通信相手を検証するので、通信暗号文６０３を受信した時点で、通信相手が正規の通信相手である暗号通信装置１００ａであることを確認する。
また、暗号通信装置１００ａは、通信暗号文６０３に送信乱数を含めて送信し、その応答である通信暗号文６０４に含まれる受信検証情報に基づいて通信相手を検証するので通信暗号文６０４を受信した時点で、通信相手が正規の通信相手である暗号通信装置１００ｂであることを確認する。
このように、通信開始前に通信相手を認証するのではなく、通信を開始した後に通信相手を検証するので、通信を開始するまでに交換する通信の量を削減することができる。これにより、暗号通信装置１００の処理能力が低い場合や、ネットワーク８０１の通信容量が少ない場合であっても、迅速な応答を得ることができる。
【０１０２】
また、通信開始時の検証に成功したとしても、途中から攻撃者９９９が割り込んできて、通信相手になりすます可能性もある。
この実施の形態の暗号通信システム８００は、一度検証に成功してもそれで終わりとせず、以後の通信暗号文を受信するたびに検証をするので、途中から攻撃者９９９が割り込んできた場合であっても、なりすましを見破ることができる。
【０１０３】
なお、通信開始応答に含まれる開始乱数は特に利用するものではないので、送信検証情報として通信開始応答に含めなくてもよい。しかし、開始乱数を送信検証情報として通信開始応答に含めるほうが好ましい。なぜなら、通信開始応答と通信暗号文のフォーマットを共通のものとすることができるので、受信時の条件分岐を減らすことができ、暗号通信に必要なＣＰＵ９１１などの処理装置の処理量が削減できるからである。また、開始乱数を通信開始応答のもととなる送信平文の先頭に配置すれば、開始応答データが定型データである場合であっても、ＣＢＣモードやＣＦＢモードのブロック暗号方式で暗号化した通信開始応答を毎回異なるデータとすることができるので、再送攻撃に対する耐性が高くなる。
また、開始乱数生成部２３５は、乱数を生成して開始乱数とするのではなく、ＣＰＵ９１１などの処理装置を用いて、現在時刻に基づく情報（タイムスタンプ）を生成して開始乱数としてもよい。そうすれば、受信側の暗号通信装置１００が開始乱数から時刻を復元し、古ければ再送攻撃であると判断することができる。
【０１０４】
なお、開始乱数を送信検証情報として送信するのではなく、通信開始要求から受信乱数を取得し、取得した受信乱数に基づく送信検証情報を生成し、送信する構成も考えられるが、好ましくない。
通信開始要求は、通信シーケンスの一番最初であるから、攻撃者９９９が他の暗号通信装置１００になりすまして送信してくる可能性がもっとも高いものである。したがって、通信開始要求に対する応答に送信検証情報を含めると、攻撃者９９９に暗号解読の手がかりを与えてしまう可能性があるからである。
【０１０５】
この実施の形態における暗号通信装置１００は、
情報を処理するＣＰＵ９１１などの処理装置と、他の暗号通信装置１００と通信する通信装置９１５と、データ入力部２３３と、検証乱数生成部２３１と、結合部２３４と、暗号化部２３７と、送信部１２０と、受信部１１０と、復号部２１２と、分割部２１３と、検証部２１５と、データ出力部２１６とを有することを特徴とする。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、他の暗号通信装置１００に対して送信すべきデータを入力して送信データとすることを特徴とする。
検証乱数生成部２３１は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成して送信乱数とすることを特徴とする。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、検証乱数生成部２３１が生成した送信乱数とデータ入力部２３３が入力した送信データとを含むデータを生成して送信平文とすることを特徴とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合部２３４が生成した送信平文を暗号化して送信暗号文とすることを特徴とする。
送信部１２０は、通信装置９１５を用いて、暗号化部２３７が暗号化した送信暗号文を他の暗号通信装置１００に対して送信することを特徴とする。
受信部１１０は、通信装置９１５を用いて、送信部１２０が送信した送信暗号文に対する応答として他の暗号通信装置１００が送信したデータを受信して受信暗号文とすることを特徴とする。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した受信暗号文を復号して受信平文とすることを特徴とする。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、復号部２１２が復号した受信平文に含まれる送信検証情報を取得して受信検証情報とし、復号部２１２が復号した受信平文に含まれる送信データを取得して受信データとすることを特徴とする。
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が取得した受信検証情報と検証乱数生成部２３１が生成した送信乱数とに基づいて、検証成功か検証失敗かを判断することを特徴とする。
データ出力部２１６は、検証部２１５が検証成功と判断した場合に、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が取得した受信データを出力することを特徴とする。
【０１０６】
この実施の形態における暗号通信装置１００によれば、送信データとともに送信乱数を送信し、受信データとともに受信検証情報を受信して、検証部２１５が検証を行うので、通信開始時だけでなく、常に通信相手が正規の通信相手であるか否かを検証することができ、攻撃者９９９による攻撃を防ぐことができるという効果を奏する。
【０１０７】
この実施の形態における暗号通信装置１００は、
他の暗号通信装置１００との間で暗号通信をする場合に、他の暗号通信装置１００を認証せずに通信を開始し、
通信を開始した後、検証部２１５が検証失敗と判断した場合に、通信を終了することを特徴とする。
【０１０８】
この実施の形態における暗号通信装置１００によれば、通信相手を認証しないで、通信を開始するので、ＣＰＵ９１１などの処理装置の処理能力が低い場合や、ネットワーク８０１の通信容量が小さい場合であっても、迅速な応答が可能となる。また、通信開始後に検証を行い、検証に失敗した場合には通信を終了するので、攻撃者９９９による攻撃を防ぐことができるという効果を奏する。
【０１０９】
この実施の形態における暗号通信装置１００は、
他の暗号通信装置１００との間で暗号通信をする場合に、他の暗号通信装置１００を認証せずに通信を開始し、
通信を開始した後、他の暗号通信装置１００に対して送信するすべてのデータに送信検証情報と送信乱数とを含めて送信し、
通信を開始した後、他の暗号通信装置１００から受信したすべてのデータについて、検証部２１５が検証成功か検証失敗かを判断することを特徴とする。
【０１１０】
この実施の形態における暗号通信装置１００によれば、通信開始後に送信するすべてのデータに送信検証情報を含めるので、通信相手である他の暗号通信装置１００が、正規の通信相手である暗号通信装置１００から送信されたデータであるか否かを検証することができ、また、通信開始後に受信するすべてのデータについて検証をするので、正規の通信相手である他の暗号通信装置１００が送信したデータであるか否かを検証できる。これにより、通信の途中から攻撃者９９９が割り込んできた場合であっても、攻撃者９９９の攻撃を防ぐことができるという効果を奏する。
【０１１１】
この実施の形態における暗号通信装置１００は、以下の点を特徴とする。
検証部２１５は、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が取得した受信検証情報と検証乱数生成部２３１が生成した送信乱数とを比較して、一致する場合に検証成功と判断し、一致しない場合に検証失敗と判断することを特徴とする。
【０１１２】
この実施の形態における暗号通信装置１００によれば、検証部２１５が受信検証情報と送信乱数とを比較して一致するか否かに基づいて、検証成功か検証失敗かを判断するので、通信相手に対して送信した送信乱数を、通信相手が正しく復号し、通信相手が正しく暗号化して送信してきたか否かを判別でき、通信相手が、正規の通信相手である他の暗号通信装置１００であるか否かを検証することができるという効果を奏する。
【０１１３】
この実施の形態における暗号通信装置１００は、更に、受信検証生成部２１４を有することを特徴とする。
受信検証生成部２１４は、ＣＰＵ９１１などの処理装置を用いて、検証乱数生成部が生成した送信乱数に基づくデータを生成して検証情報とすることを特徴とする。
上記検証部は、上記処理装置を用いて、上記分割部が取得した受信検証情報と上記受信検証生成部が生成した検証情報とを比較して、一致する場合に検証成功と判断し、一致しない場合に検証失敗と判断することを特徴とする。
【０１１４】
この実施の形態における暗号通信装置１００によれば、検証部２１５が、受信検証情報と、送信乱数に基づいて生成した検証情報とを比較して一致するか否かに基づいて、検証成功か検証失敗かを判断するので、通信相手に対して送信する送信乱数の暗号化と、通信相手から受信する受信検証情報の暗号化とは、暗号鍵が同一であっても異なるデータとなる。したがって、攻撃者９９９が正しい検証情報を生成できなければその暗号化を取得できず、攻撃者９９９による攻撃を防ぐことができるという効果を奏する。
【０１１５】
この実施の形態における暗号通信装置１００は、以下の点を特徴とする。
分割部２１３は、更に、ＣＰＵ９１１などの処理装置を用いて、復号部２１２が復号した受信平文に含まれる送信乱数を取得して受信乱数とすることを特徴とする。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した受信暗号文に対する応答として他の暗号通信装置１００に対して送信すべきデータを入力して応答データとすることを特徴とする。
結合部２３４は、分割部２１３が取得した受信乱数を送信検証情報とし、データ入力部２３３が入力した応答データを送信データとして、ＣＰＵ９１１などの処理装置を用いて、送信検証情報と検証乱数生成部２３１が生成した送信乱数と上記送信データとを含むデータを生成して送信平文とすることを特徴とする。
【０１１６】
この実施の形態における暗号通信装置１００によれば、他の暗号通信装置１００から受信したデータを復号して受信乱数を取得し、取得した受信乱数を送信検証情報として含むデータを暗号化して他の暗号通信装置１００に対して送信するので、暗号通信装置１００が受信したデータを正しく復号し、正しく暗号化して送信したか否かを、他の暗号通信装置１００が検証できるという効果を奏する。
【０１１７】
この実施の形態における暗号通信装置１００は、更に、送信検証生成部２３２を有することを特徴とする。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、復号部２１２が復号した受信平文に含まれる送信乱数を取得して受信乱数とすることを特徴とする。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した受信暗号文に対する応答として他の暗号通信装置１００に対して送信すべきデータを入力して応答データとすることを特徴とする。
送信検証生成部２３２は、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が取得した受信乱数に基づくデータを生成して送信検証情報とすることを特徴とする。
結合部２３４は、データ入力部２３３が入力した応答データを送信データとして、ＣＰＵ９１１などの処理装置を用いて、送信検証生成部２３２が生成した送信検証情報と検証乱数生成部２３１が生成した送信乱数と上記送信データとを含むデータを生成して送信平文とすることを特徴とする。
【０１１８】
この実施の形態における暗号通信装置１００によれば、他の暗号通信装置１００から受信したデータを復号して受信乱数を取得し、取得した受信乱数に基づいて生成した送信検証情報を含む送信平文を暗号化して他の暗号通信装置１００に対して送信するので、暗号通信装置１００が受信したデータを正しく復号し、正しく暗号化して送信したか否かを、送信と受信の暗号鍵が同一の場合であっても、他の暗号通信装置１００が正しく検証できるという効果を奏する。
【０１１９】
この実施の形態における暗号通信装置１００は、更に、開始乱数生成部２３５を有することを特徴とする。
受信部１１０は、通信装置９１５を用いて、他の暗号通信装置１００から通信の開始を要求するデータを受信して通信開始要求とすることを特徴とする。
データ出力部２１６は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した通信開始要求を出力することを特徴とする。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した通信開始要求に対する応答として他の暗号通信装置１００に対して送信すべきデータを入力して開始応答データとすることを特徴とする。
開始乱数生成部２３５は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成して開始乱数とすることを特徴とする。
結合部２３４は、開始乱数生成部２３５が生成した開始乱数を送信検証情報とし、上記データ入力部が入力した開始応答データを送信データとして、ＣＰＵ９１１などの処理装置を用いて、上記送信検証情報と検証乱数生成部２３１が生成した送信乱数と上記送信データとを含むデータを生成して送信平文とすることを特徴とする。
【０１２０】
この実施の形態における暗号通信装置１００によれば、通信開始要求を受信した場合には、受信乱数に基づく送信検証情報を生成するのではなく、開始乱数を生成して送信検証情報とするので、他の暗号通信装置１００になりすました攻撃者９９９に、暗号解読の手がかりを与えないという効果を奏する。
【０１２１】
この実施の形態における暗号通信装置１００は、以下の点を特徴とする。
データ入力部２３３は、ＣＰＵ９１１などの処理装置を用いて、他の暗号通信装置１００に対して通信の開始を要求するデータを入力して通信開始要求とすることを特徴とする。
送信部１２０は、通信装置９１５を用いて、データ入力部２３３が入力した通信開始要求を他の暗号通信装置１００に対して送信することを特徴とする。
受信部１１０は、通信装置９１５を用いて、送信部１２０が送信した通信開始要求に対する応答として他の暗号通信装置１００が送信したデータを受信して開始暗号文とすることを特徴とする。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した開始暗号文を復号して開始平文とすることを特徴とする。
分割部２１３は、ＣＰＵ９１１などの処理装置を用いて、復号部２１２が復号した開始平文に含まれる送信乱数を取得して受信乱数とし、復号部２１２が復号した開始平文に含まれる送信データを取得して受信開始データとすることを特徴とする。
データ出力部２１６は、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が取得した受信開始データを出力することを特徴とする。
【０１２２】
この実施の形態における暗号通信装置１００によれば、通信開始要求には送信乱数を含めずに送信し、通信開始要求に対する応答には受信検証情報が含まれていないので検証せずにデータ出力部２１６が受信開始データを出力するので、攻撃者９９９が暗号通信装置１００になりすまして他の暗号通信装置１００に対して通信開始要求を送信したとしても、攻撃者９９９に暗号解読の手がかりを与えないという効果を奏する。
【０１２３】
なお、通信開始要求に対する応答には送信乱数が含まれており、暗号通信装置１００は、送信検証情報を生成して、他の暗号通信装置１００に対して送信する。この時点で、暗号通信装置１００は通信相手が正規の通信相手である他の暗号通信装置１００であるか否かを検証していないので、攻撃者９９９が他の暗号通信装置１００になりすましている可能性がある。
しかし、攻撃者９９９が通信開始要求を送信する側の暗号通信装置１００になりすます場合には、何度も通信開始要求の送信を繰り返すことにより多数の応答を収集できるのに対して、攻撃者９９９が通信開始要求を受信する側の暗号通信装置１００になりすます場合には、暗号通信装置１００が通信開始要求を送信した場合にのみ、攻撃者９９９が情報を収集できるので、攻撃者９９９が収集できる暗号解読の手がかりは極めて少なく、その手がかりに基づいて攻撃者９９９が暗号を解読することはほぼ不可能である。
【０１２４】
この実施の形態における暗号通信装置１００は、以下の点を特徴とする。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、送信検証情報と送信乱数と送信データとを結合して送信平文を生成することを特徴とする。
【０１２５】
この実施の形態における暗号通信装置１００によれば、結合部２３４が送信検証情報と送信乱数と送信データとを結合して送信平文を生成するので、送信平文の生成に必要な処理量が極めて少なく、ＣＰＵ９１１などの処理装置の処理能力が低くても迅速な通信が可能であるという効果を奏する。
【０１２６】
この実施の形態における暗号通信装置１００は、以下の点を特徴とする。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、送信検証情報を一番前に結合することを特徴とする。
【０１２７】
この実施の形態における暗号通信装置１００によれば、結合部２３４が送信平文の一番前に送信検証情報を結合するので、ブロック暗号方式で暗号化した場合であっても先頭のブロックの暗号化が常に異なるデータとなり、攻撃者９９９による再送攻撃を防ぐことができるという効果を奏する。
【０１２８】
この実施の形態における暗号通信装置１００は、以下の点を特徴とする。
結合部２３４は、ＣＰＵ９１１などの処理装置を用いて、送信乱数を一番前に結合することを特徴とする。
【０１２９】
この実施の形態における暗号通信装置１００によれば、結合部２３４が送信平文の一番前に送信乱数を結合するので、ブロック暗号方式で暗号化した場合であっても先頭のブロックの暗号化が常に異なるデータとなり、攻撃者９９９による再送攻撃を防ぐことができるという効果を奏する。
【０１３０】
この実施の形態における暗号通信システム８００は、
暗号通信装置１００を複数有し、複数の暗号通信装置１００が互いに暗号通信することを特徴とする。
【０１３１】
この実施の形態における暗号通信システム８００によれば、暗号通信装置１００が互いに相手を検証しながら暗号通信をするので、攻撃者９９９が暗号通信装置１００になりすまして再送攻撃などの攻撃をしてきた場合であっても、攻撃者９９９に暗号解読の手がかりを与えないという効果を奏する。
【０１３２】
この実施の形態における暗号通信方法は、
情報を処理するＣＰＵ９１１などの処理装置と、他の暗号通信装置１００と通信する通信装置９１５とを有する暗号通信装置１００が、他の暗号通信装置１００と暗号通信をする暗号通信方法において、
ＣＰＵ９１１などの処理装置が、他の暗号通信装置１００に対して送信すべきデータを取得して送信データとし（データ処理工程Ｓ３１）、
ＣＰＵ９１１などの処理装置が、乱数を生成して送信乱数とし（送信乱数生成工程Ｓ３３）、
ＣＰＵ９１１などの処理装置が、生成した送信乱数と取得した送信データとを含むデータを生成して送信平文とし（結合工程Ｓ３４）、
ＣＰＵ９１１などの処理装置が、生成した送信平文を暗号化して送信暗号文とし（暗号化工程Ｓ３５）、
通信装置９１５が、暗号化した送信暗号文を送信し（送信工程Ｓ３６）、
通信装置９１５が、送信した送信暗号文に対する応答として上記他の暗号通信装置が送信したデータを受信して受信暗号文とし（受信工程Ｓ２１）、
ＣＰＵ９１１などの処理装置が、受信した受信暗号文を復号して受信平文とし（復号工程Ｓ２２）、
ＣＰＵ９１１などの処理装置が、復号した受信平文に含まれる送信検証情報を取得して受信検証情報とし、復号した受信平文に含まれる送信データを取得して受信データとし（分割工程Ｓ２３）、
ＣＰＵ９１１などの処理装置が、取得した受信検証情報と生成した送信乱数とに基づいて、検証成功か検証失敗かを判断し（検証工程Ｓ２５）、
検証成功と判断した場合に、ＣＰＵ９１１などの処理装置が、取得した受信データを出力する（データ出力工程Ｓ２６）ことを特徴とする。
【０１３３】
この実施の形態における暗号通信方法によれば、送信データとともに送信乱数を送信し、受信データとともに受信検証情報を受信して、検証を行うので、通信開始時だけでなく、常に通信相手が正規の通信相手であるか否かを検証することができ、攻撃者９９９による攻撃を防ぐことができるという効果を奏する。
【０１３４】
この実施の形態における暗号通信方法は、
第一の暗号通信装置１００ａと第二の暗号通信装置１００ｂとが暗号通信をする暗号通信方法において、
第一の暗号通信装置１００ａが、第二の暗号通信装置１００ｂに対して通信の開始を要求する通信開始要求を送信し（開始要求送信工程Ｓ０３）、
第二の暗号通信装置１００ｂが、第一の暗号通信装置１００ａが送信した通信開始要求を受信し（開始要求受信工程Ｓ１１）、
第二の暗号通信装置１００ｂが、乱数を生成して第一の送信乱数とし（送信乱数生成工程Ｓ１４）、
第二の暗号通信装置１００ｂが、受信した通信開始要求に対する応答として第一の暗号通信装置に対して送信すべきデータを取得して開始応答データとし（開始応答工程Ｓ１２）、
第二の暗号通信装置１００ｂが、取得した開始応答データを第一の送信データとして、生成した第一の送信乱数と上記第一の送信データとを含むデータを生成して第一の送信平文とし（結合工程Ｓ１５）、
第二の暗号通信装置１００ｂが、生成した第一の送信平文を暗号化して第一の送信暗号文とし（暗号化工程Ｓ１６）、
第二の暗号通信装置１００ｂが、暗号化した第一の送信暗号文を上記第一の暗号通信装置に対して送信し（開始応答送信工程Ｓ１７）、
第一の暗号通信装置１００ａが、第二の暗号通信装置１００ｂが送信した第一の送信暗号文を受信して第一の受信暗号文とし（受信工程Ｓ２１）、
第一の暗号通信装置１００ａが、受信した第一の受信暗号文を復号して第一の受信平文とし（復号工程Ｓ２２）、
第一の暗号通信装置１００ａが、復号した第一の受信平文に含まれる第一の送信乱数を取得して第一の受信乱数とし（分割工程Ｓ２３）、
第一の暗号通信装置１００ａが、復号した第一の受信平文に含まれる第一の送信データを取得して受信開始データとし（分割工程Ｓ２３）、
第一の暗号通信装置１００ａが、取得した第一の受信乱数に基づくデータを生成して第二の送信検証情報とし（検証情報生成工程Ｓ３２）、
第一の暗号通信装置１００ａが、乱数を生成して第二の送信乱数とし（送信乱数生成工程Ｓ３３）、
第一の暗号通信装置１００ａが、取得した受信開始データに対する応答として第二の暗号通信装置１００ｂに対して送信すべきデータを取得して第二の送信データとし（データ処理工程Ｓ３１）、
第一の暗号通信装置１００ａが、生成した第二の送信検証情報と生成した第二の送信乱数と取得した第二の送信データとを含むデータを生成して第二の送信平文とし（結合工程Ｓ３４）、
第一の暗号通信装置１００ａが、生成した第二の送信平文を暗号化して第二の送信暗号文とし（暗号化工程Ｓ３５）、
第一の暗号通信装置１００ａが、暗号化した第二の送信暗号文を第二の暗号通信装置１００ｂに対して送信し（送信工程Ｓ３６）、
第二の暗号通信装置１００ｂが、第一の暗号通信装置１００ａが送信した第二の送信暗号文を受信して第二の受信暗号文とし（受信工程Ｓ２１）、
第二の暗号通信装置１００ｂが、受信した第二の受信暗号文を復号して第二の受信平文とし（復号工程Ｓ２２）、
第二の暗号通信装置１００ｂが、復号した第二の受信平文に含まれる第二の送信検証情報を取得して第二の受信検証情報とし（分割工程Ｓ２３）、
第二の暗号通信装置１００ｂが、生成した第一の送信乱数と取得した第二の受信検証情報とに基づいて、第一の検証成功か第一の検証失敗かを判断し（検証工程Ｓ２５）、
第一の検証失敗と判断した場合、第二の暗号通信装置１００ｂが、第一の暗号通信装置１００ａとの間の暗号通信を終了し、
第一の検証成功と判断した場合、
第二の暗号通信装置１００ｂが、復号した第二の受信平文に含まれる第二の送信乱数を取得して第二の受信乱数とし（分割工程Ｓ２３）、
第二の暗号通信装置１００ｂが、復号した第二の受信平文に含まれる第二の送信データを取得して第二の受信データとし（分割工程Ｓ２３）、
第二の暗号通信装置１００ｂが、取得した第二の受信乱数に基づくデータを生成して第三の送信検証情報とし（検証情報生成工程Ｓ３２）、
第二の暗号通信装置１００ｂが、乱数を生成して第三の送信乱数とし（送信乱数生成工程Ｓ３３）、
第二の暗号通信装置１００ｂが、取得した第二の受信データに対する応答として上記第一の暗号通信装置に対して送信すべきデータを取得して第三の送信データとし（データ処理工程Ｓ３１）、
第二の暗号通信装置１００ｂが、生成した第三の送信検証情報と生成した第三の送信乱数と生成した第三の送信データとを含むデータを生成して第三の送信平文とし（結合工程Ｓ３４）、
第二の暗号通信装置１００ｂが、生成した第三の送信平文を暗号化して第三の送信暗号文とし（暗号化工程Ｓ３５）、
第二の暗号通信装置１００ｂが、暗号化した第三の送信暗号文を第一の暗号通信装置１００ａに対して送信し（送信工程Ｓ３６）、
第一の暗号通信装置１００ａが、第二の暗号通信装置１００ｂが送信した第三の送信暗号文を受信して第三の受信暗号文とし（受信工程Ｓ２１）、
第一の暗号通信装置１００ａが、受信した第三の受信暗号文を復号して第三の受信平文とし（復号工程Ｓ２２）、
第一の暗号通信装置１００ａが、復号した第三の受信平文に含まれる第三の送信検証情報を取得して第三の受信検証情報とし（分割工程Ｓ２３）、
第一の暗号通信装置１００ａが、生成した第二の送信乱数と取得した第三の受信検証情報とに基づいて、第二の検証成功か第二の検証失敗かを判断し（検証工程Ｓ２５）、
第二の検証失敗と判断した場合、第一の暗号通信装置１００ａが、第二の暗号通信装置１００ｂとの間の暗号通信を終了することを特徴とする。
【０１３５】
この実施の形態における暗号通信方法によれば、第一の暗号通信装置１００ａと第二の暗号通信装置１００ｂとが、通信開始要求及びそれに対する応答により、通信相手を認証せずに暗号通信を開始し、通信を開始した後、送信乱数及び受信検証情報により、通信相手を検証し、検証に失敗した場合に暗号通信を終了するので、第一の暗号通信装置１００ａと第二の暗号通信装置１００ｂの間でやりとりされるデータの量を抑えることができる。このため、第一の暗号通信装置１００ａ・第二の暗号通信装置１００ｂの処理能力が低い場合や、ネットワーク８０１の通信容量が少ない場合であっても、迅速な通信ができるという効果を奏する。
また、通信開始後に通信相手を検証するので、攻撃者９９９によるなりすましや再送攻撃を見破ることができ、攻撃者９９９に暗号解読の手がかりを与えない。したがって、通信開始前に認証する方式に劣らない安全性を確保することができるという効果を奏する。
【０１３６】
この実施の形態における暗号通信方法は、更に、第二の検証成功と判断した場合、
第一の暗号通信装置１００ａが、復号した第三の受信平文に含まれる第三の送信乱数を取得して第三の受信乱数とし（分割工程Ｓ２３）、
第一の暗号通信装置１００ａが、復号した第三の受信平文に含まれる第三の送信データを取得して第三の受信データとし（分割工程Ｓ２３）、
第一の暗号通信装置が、取得した第三の受信乱数に基づくデータを生成して第二の送信検証情報とし（検証情報生成工程Ｓ３２）、
第一の暗号通信装置１００ａが、乱数を生成して第二の送信乱数とし（送信乱数生成工程Ｓ３３）、
第一の暗号通信装置１００ａが、取得した第三の受信データに対する応答として第二の暗号通信装置１００ｂに対して送信すべきデータを取得して第二の送信データとし（データ処理工程Ｓ３１）、
第一の暗号通信装置１００ａが、生成した第二の送信検証情報と生成した第二の送信乱数と取得した第二の送信データとを含むデータを生成して第二の送信平文とし（結合工程Ｓ３４）、
第一の暗号通信装置１００ａが、生成した第二の送信平文を暗号化して第二の送信暗号文とし（暗号化工程Ｓ３５）、
第一の暗号通信装置１００ａが、暗号化した第二の送信暗号文を上記第二の暗号通信装置に対して送信する（送信工程Ｓ３６）ことを特徴とする。
【０１３７】
この実施の形態における暗号通信方法によれば、通信開始後の検証に成功した場合であってもそれで終わりとせず、その後の通信においても検証情報がついたデータを送信し、検証を繰り返すので、攻撃者９９９が途中から割り込んできた場合であっても、なりすましや再送攻撃を見破ることができ、攻撃者９９９に暗号解読の手がかりを与えない。したがって、通信開始前に認証する方式よりも優れた安全性を確保することができるという効果を奏する。
【０１３８】
この実施の形態における暗号通信装置１００は、コンピュータをこの実施の形態における暗号通信装置１００として機能させるプログラムを、コンピュータが実行することにより実現することができる。
この実施の形態におけるプログラムは、情報を処理するＣＰＵ９１１などの処理装置と、他の暗号通信装置１００と通信する通信装置９１５とを有するコンピュータを、暗号通信装置１００として機能させることを特徴とする。
【０１３９】
この実施の形態におけるプログラムによれば、送信データとともに送信乱数を送信し、受信データとともに受信検証情報を受信して、検証を行うので、通信開始時だけでなく、常に通信相手が正規の通信相手であるか否かを検証することができ、攻撃者９９９による攻撃を防ぐことができる暗号通信装置１００を、コンピュータを用いて実現することができるという効果を奏する。
【０１４０】
以上説明した暗号通信装置１００は、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の暗号通信装置であり、暗号通信装置間で対応する秘密情報（暗号鍵・秘密鍵）を持ち、認証と暗号通信をする暗号通信装置であって、以下の全ての機能を有する暗号通信装置である。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、第１の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、着呼側の持つ秘密情報（暗号鍵）で暗号化して第１の暗号文（通信開始応答）を生成し、前記第１の暗号文を発呼側に送信する。
（３）発呼側は前記第１の暗号文を発呼側が持つ秘密情報（復号鍵）で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成し、新たに第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して発呼側の秘密情報（暗号鍵）で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成し、前記第２の暗号文（受信暗号文）を着呼側が持つ秘密情報（復号鍵）で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は前記第２の乱数（受信乱数）から検証情報（送信検証情報）を生成し、新たに第３の乱数（送信乱数）と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して着呼側の秘密情報で暗号化して第３の暗号文（送信暗号文）を生成し、前記第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成し、前記第３の暗号文（受信暗号文）を発呼側が持つ秘密情報で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は前記第３の乱数から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して発呼側の秘密情報で暗号化して第４の暗号文（送信暗号文）を生成し、前記第４の暗号文を着呼側に送信する。
【０１４１】
以上説明した暗号通信装置１００は、相互に認証しあった後も、同様の認証と暗号通信を続ける暗号通信装置である。
【０１４２】
以上説明した暗号通信装置１００は、以下のいずれかの方法でデータを連結（結合）し、暗号化する暗号通信装置である。
（１）「検証情報」、「乱数」、「送信データまたは応答」の順
（２）「乱数」、「検証情報」、「送信データまたは応答」の順
（３）「検証情報」、「送信データまたは応答」、「乱数」の順
（４）「乱数」、「送信データまたは応答」、「検証情報」の順
【０１４３】
以上説明した暗号通信装置１００が行う暗号通信方法は、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の装置（暗号通信装置１００）において、暗号通信装置間で対応する秘密情報（暗号鍵・復号鍵）を持ち、認証と暗号通信をする暗号通信方法であって、以下の全ての機能を有する暗号通信方法である。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、第一の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、着呼側の持つ秘密情報（暗号鍵）で暗号化して第１の暗号文（通信開始応答）を生成し、前記第１の暗号文を発呼側に送信する。
（３）発呼側は前記第１の暗号文を発呼側が持つ秘密情報（復号鍵）で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成し、新たに第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して発呼側の秘密情報（暗号鍵）で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成し、前記第２の暗号文（受信暗号文）を着呼側が持つ秘密情報（復号鍵）で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は前記第２の乱数から検証情報（送信検証情報）を生成し、新たに第３の乱数（送信乱数）と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して着呼側の秘密情報で暗号化して第３の暗号文（送信暗号文）を生成し、前記第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成し、前記第３の暗号文（受信暗号文）を発呼側が持つ秘密情報で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は前記第３の乱数から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して発呼側の秘密情報で暗号化して第４の暗号文（送信通信文）を生成し、前記第４の暗号文を着呼側に送信する。
【０１４４】
以上説明した暗号通信方法は、相互に認証しあった後も、同様の認証と暗号通信を続ける暗号通信方法である。
【０１４５】
以上説明した暗号通信方法は、以下のいずれかの方法でデータを連結（結合）し、暗号化する暗号通信方法である。
（１）「検証情報」、「乱数」、「送信データまたは応答」の順
（２）「乱数」、「検証情報」、「送信データまたは応答」の順
（３）「検証情報」、「送信データまたは応答」、「乱数」の順
（４）「乱数」、「送信データまたは応答」、「検証情報」の順
【０１４６】
以上説明した暗号通信装置１００としてコンピュータを機能させる暗号通信プログラムは、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の装置（暗号通信装置１００）において、暗号通信装置間で対応する秘密情報（暗号鍵・復号鍵）を持ち、認証と暗号通信をする暗号通信プログラムであって、以下の全ての機能を有する通信プログラムである。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、第一の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、着呼側の持つ秘密情報（暗号鍵）で暗号化して第１の暗号文（通信開始応答）を生成し、前記第１の暗号文を発呼側に送信する。
（３）発呼側は前記第１の暗号文を発呼側が持つ秘密情報（復号鍵）で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成し、新たに第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して発呼側の秘密情報（暗号鍵）で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成し、前記第２の暗号文（受信暗号文）を着呼側が持つ秘密情報（復号鍵）で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は前記第２の乱数から検証情報（送信検証情報）を生成し、新たに第３の乱数（送信乱数）と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して着呼側の秘密情報で暗号化して第３の暗号文（送信暗号文）を生成し、前記第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成し、前記第３の暗号文（受信暗号文）を発呼側が持つ秘密情報で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は前記第３の乱数から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して発呼側の秘密情報で暗号化して第４の暗号文（送信暗号文）を生成し、前記第４の暗号文を着呼側に送信する。
【０１４７】
以上説明した暗号通信プログラムは、相互に認証しあった後も、同様の認証と暗号通信を続ける暗号通信プログラムである。
【０１４８】
以上説明した暗号通信プログラムは、以下のいずれかの方法でデータを連結（結合）し、暗号化する暗号通信プログラムである。
（１）「検証情報」、「乱数」、「送信データまたは応答」の順
（２）「乱数」、「検証情報」、「送信データまたは応答」の順
（３）「検証情報」、「送信データまたは応答」、「乱数」の順
（４）「乱数」、「送信データまたは応答」、「検証情報」の順
【０１４９】
以上説明した暗号通信プログラムは、フレキシブルディスクなどの記憶媒体に格納され、コンピュータが読み出して実行するものであってもよい。
【０１５０】
以上説明した暗号通信装置１００によれば、攻撃者９９９が、図８の暗号通信装置１００ａになりすまし、暗号通信装置１００ｂ（通信端末）に対して、再送攻撃により不正にアクセスしようとする場合、通信開始応答６０２において暗号通信装置１００ｂは毎回異なる送信乱数を暗号化して送るため、攻撃者９９９は送信検証情報を作るために暗号通信装置１００ｂが送信するデータを復号しなければならない。適当な数値を返しても、暗号通信装置１００ｂが通信暗号文６０３を検証し、不正を検知できる。
【０１５１】
攻撃者９９９が暗号通信装置１００ｂにアクセスし、暗号文と対応する平文もしくは暗号文の復号結果が正しいと判断できる情報を入手しようとしても、暗号通信装置１００ｂが不正を検知して通信を終了するので、攻撃者９９９は通信暗号文６０４を入手できない。したがって、攻撃者９９９は、通信開始応答６０２で受け取る暗号文しか入手できず、対応する平文もしくは暗号文の復号結果が正しいと判断できる情報を入手できない。
【０１５２】
攻撃者９９９が暗号通信装置１００ｂになりすまし、暗号通信装置１００ａに対して再送攻撃をかける場合、攻撃者９９９は、暗号通信装置１００ｂが通信開始応答６０２で送信した正規のデータを事前に収集しておき、通信開始応答６０２として暗号通信装置１００ａに送ってくる。しかし、暗号通信装置１００ａが通信暗号文６０３で送る送信乱数は毎回異なるため、暗号通信装置１００ａが通信暗号文６０４を検証することにより、再送攻撃を検出できる。
【０１５３】
攻撃者９９９が暗号通信装置１００ｂになりすまして暗号通信装置１００ａにアクセスし、暗号文と対応する平文もしくは暗号文の復号結果が正しいと判断できる情報を入手しようとして、攻撃者９９９が、通信開始応答６０２において、ランダムなデータを暗号通信装置１００ａに送ってくる場合もある。
暗号通信装置１００ａが通信開始応答６０２を復号して得た開始応答データが正しくない場合、データ処理部１３０は、処理を続けることができない。この場合に通信を終了することとすれば、暗号通信装置１００ａは、通信暗号文６０３を送信しないので、、攻撃者が暗号文と対応する平文もしくは暗号文の復号結果が正しいと判断できる情報を入手できない。
【０１５４】
以上説明した暗号通信装置１００によれば、受信平文５１０の先頭に受信乱数がくる場合には、その受信乱数に基づく送信検証情報を含む送信平文５４０の先頭を送信検証情報以外のデータとするので、送信検証情報として受信乱数をそのまま利用する場合であっても、検証に用いる乱数の暗号文が一致することがなく、暗号文のコピー＆ペーストによるなりすましを防止できる。
【０１５５】
以上説明した暗号通信装置１００によれば、着呼側装置（暗号通信装置１００ｂ）が先に発呼側装置（暗号通信装置１００ａ）を認証するので、攻撃者９９９が着呼側装置に何度もアクセスし、乱数とその暗号化結果を大量に取得することで、暗号解析により暗号鍵を推定することができない。
【０１５６】
実施の形態２．
実施の形態２について、図１３〜図１８を用いて説明する。
この実施の形態における暗号通信システム８００の全体構成、暗号通信装置１００の外観、ハードウェア資源の構成は、実施の形態１で説明したものと同様なので、ここでは説明を省略する。
【０１５７】
図１３は、この実施の形態における暗号通信装置１００の機能ブロックの構成の一例を示すブロック構成図である。
なお、実施の形態１で説明した機能ブロックと共通するブロックについては、同一の符号を付し、ここでは説明を省略する。
【０１５８】
暗号通信装置１００は、受信部１１０、送信部１２０、データ処理部１３０、暗号処理部２００を有する。
暗号処理部２００は、復号鍵記憶部２１１、復号部２１２、分割部２１３、受信検証生成部２１４、検証部２１５、データ出力部２１６、復号鍵生成部２１７、受信乱数記憶部２２１、送信乱数記憶部２２２、検証乱数生成部２３１、送信検証生成部２３２、データ入力部２３３、結合部２３４、開始乱数生成部２３５、暗号鍵記憶部２３６、暗号化部２３７、鍵乱数生成部２３８、暗号鍵生成部２３９を有する。
【０１５９】
受信部１１０は、通信装置９１５を用いて、他の暗号通信装置１００が送信したデータを受信する。
【０１６０】
図１４は、この実施の形態におけ受信部１１０が受信するデータ５５０の構成の一例を示す図である。
受信部１１０が受信するデータ５５０が通信開始応答や通信暗号文などの送信暗号文５５２を含む場合、データ５５０は、送信暗号文５５２のほか、暗号鍵乱数５５１を含む。
データ５５０は、例えば、暗号鍵乱数５５１のあとに送信暗号文５５２を結合したデータである。
「暗号鍵乱数」は、データ５５０を送信してきた他の暗号通信装置１００が、送信暗号文５５２を生成するのに使用した暗号一時鍵を生成するための乱数である。
【０１６１】
なお、通信開始要求の場合には、暗号鍵乱数５５１と結合せず、通信開始要求５５３がそのままデータ５５０となる。しかし、通信開始要求を暗号化する場合には、暗号鍵乱数５５１と結合したデータであってもよい。
【０１６２】
図１３に戻り、暗号通信装置１００の機能ブロックの説明を続ける。
【０１６３】
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、受信したデータに含まれる暗号鍵乱数と送信暗号文とを取得する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、復号鍵乱数と受信暗号文とを出力する。「復号鍵乱数」とは、受信したデータから受信部１１０が取得した暗号鍵乱数のことである。「受信暗号文」とは、受信したデータから受信部１１０が取得した送信暗号文のことである。
【０１６４】
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が出力した復号鍵乱数を入力する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、復号鍵記憶部２１１が記憶した復号鍵を入力する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、入力した復号鍵と、入力した復号鍵乱数とに基づいて、復号一時鍵を生成する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、生成した復号一時鍵を出力する。
【０１６５】
復号鍵生成部２１７が生成する復号一時鍵は、受信部１１０が復号鍵乱数とともに受信した受信暗号文を復号するために用いる復号鍵である。したがって、復号一時鍵は、正規の通信相手である他の暗号通信装置１００が、送信暗号文を生成するために使用した暗号一時鍵と対になるものである。
例えば、共通鍵暗号方式の場合、復号鍵生成部２１７が生成する復号一時鍵は、他の暗号通信装置１００がデータを暗号化した暗号一時鍵と同一である。あらかじめ、他の暗号通信装置１００の暗号鍵記憶部２３６が記憶した暗号鍵と同一の復号鍵を、暗号通信装置１００の復号鍵記憶部２１１が記憶しておき、他の暗号通信装置１００が暗号鍵と暗号鍵乱数とから暗号一時鍵を生成したのと同じ方式（演算・計算式）で、復号鍵生成部２１７が復号鍵と復号鍵乱数とから復号一時鍵を生成すれば、復号一時鍵は暗号一時鍵と同一となる。
【０１６６】
復号一時鍵の生成方式としては、例えば、復号鍵と復号鍵乱数とを結合し、ハッシュ関数や鍵生成関数、暗号化関数などに入力して、復号一時鍵を生成する方式がある。これらの関数は、全射関数または全単射関数である。また、攻撃者９９９に復号一時鍵を知られた場合に備え、攻撃者９９９が復号一時鍵と復号鍵乱数とから復号鍵を推定することが困難な関数である必要がある。そうすれば、攻撃者９９９は、暗号通信装置１００間の通信のうち、その復号一時鍵で復号できる部分しか盗聴できず、被害を最小限に留めることができるからである。例えば、絶対に知られたくない秘密情報を送信する場合、秘密情報を２回に分けて送信し、２回の送信内容を両方あわせなければ秘密情報を得ることができないようにしておけば、攻撃者９９９が復号一時鍵を知り、１回の通信を盗聴したとしても、秘密を守ることができる。
【０１６７】
共通鍵暗号方式ではなく、他の暗号方式を利用する場合には、暗号一時鍵と復号一時鍵が異なる場合もある。その場合、復号鍵生成部２１７が生成する復号一時鍵は、正規の通信相手である他の暗号通信装置１００が暗号鍵乱数に基づいて生成した暗号一時鍵と対になる復号一時鍵であって、他の暗号通信装置１００が暗号一時鍵で暗号化したデータを正しく復号できるものである必要がある。したがって、他の暗号通信装置１００が暗号鍵と暗号鍵乱数から暗号一時鍵を生成する方式と、暗号通信装置１００が復号鍵と復号鍵乱数から復号一時鍵を生成する方式とは、対になる一時鍵を生成するよう構成された方式であって、対をなすものであり、同一の方式とは限らない。
【０１６８】
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が出力した受信暗号文を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、復号鍵生成部２１７が出力した復号一時鍵を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、入力した受信暗号文を、入力した復号一時鍵で復号し、受信平文とする。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、復号した受信平文を出力する。
【０１６９】
鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成する。
鍵乱数生成部２３８が生成した乱数を、暗号鍵乱数とする。
鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号鍵乱数を出力する。
【０１７０】
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成部２３８が出力した暗号鍵乱数を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、入力した暗号鍵と、入力した暗号鍵乱数とに基づいて、暗号一時鍵を生成する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号一時鍵を出力する。
【０１７１】
暗号鍵生成部２３９が生成する暗号一時鍵は、暗号化部２３７が送信平文を暗号化するのに用い、送信部１２０が送信暗号文とともに、通信相手である他の暗号通信装置１００に対して送信する。他の暗号通信装置１００は、これを受信し、復号一時鍵を生成して、受信暗号文を復号する。
したがって、暗号鍵生成部２３９が暗号一時鍵を生成する方式は、通信相手である他の暗号通信装置１００が復号一時鍵を生成する方式と対になる方式である必要がある。また、復号鍵生成部２１７が復号一時鍵を生成する方式は、通信相手である他の暗号通信装置１００が暗号一時鍵を生成する方式と対になる方式である必要がある。この条件を満たす限りにおいては、１つの暗号通信装置１００のなかで、復号鍵生成部２１７が復号一時鍵を生成する方式と、暗号鍵生成部２３９が暗号一時鍵を生成する方式とは、同一の方式である必要はなく、対になる方式である必要もない。
【０１７２】
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合部２３４が出力した送信平文を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵生成部２３９が出力した暗号一時鍵を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、入力した送信平文を、入力した暗号一時鍵で暗号化して、送信暗号文とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号化した送信暗号文を出力する。
【０１７３】
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵生成部２３９が出力した暗号一時鍵を入力する。
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、暗号化部２３７が出力した送信暗号文を入力する。
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、入力した暗号一時鍵と、入力した送信暗号文とを含むデータを生成する。
送信部１２０は、通信装置９１５を用いて、生成したデータを他の暗号通信装置１００に対して送信する。
【０１７４】
送信部１２０が生成するデータは、例えば、図１４に示すように、暗号鍵乱数５５１と送信暗号文５５２とを結合したデータである。
送信部１２０が生成するデータは、これを受信した他の暗号通信装置１００が、復号一時鍵（暗号一時鍵）と、受信暗号文（送信暗号文）とを取得できる構造であればよく、両者を結合したものでなくてもよい。
【０１７５】
次に、動作について説明する。
【０１７６】
図１５は、この実施の形態における暗号通信装置１００が通信開始要求を受信した場合に実行する開始応答処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明した開始応答処理の工程と共通する工程については、同一の符号を付し、ここでは説明を省略する。
【０１７７】
鍵乱数生成工程Ｓ４１において、鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成する。
鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、生成した乱数を、暗号鍵乱数として出力する。
【０１７８】
暗号一時鍵生成工程Ｓ４２において、暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成工程Ｓ４１で鍵乱数生成部２３８が出力した暗号鍵乱数を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、入力した暗号鍵と、入力した暗号鍵乱数とに基づいて、暗号一時鍵を生成する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号一時鍵を出力する。
【０１７９】
暗号化工程Ｓ１６において、暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合工程Ｓ１５で結合部２３４が出力した送信平文を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号一時鍵生成工程Ｓ４２で暗号鍵生成部２３９が出力した暗号一時鍵を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、入力した送信平文を、入力した暗号一時鍵で暗号化して、送信暗号文とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号化した送信暗号文を出力する。
【０１８０】
開始応答送信工程Ｓ１７において、送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成工程Ｓ４１で鍵乱数生成部２３８が出力した暗号鍵乱数を入力する。
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、暗号化工程Ｓ１６で暗号化部２３７が出力した送信暗号文を入力する。
送信部１２０は、通信装置９１５を用いて、入力した暗号鍵乱数と、入力した送信暗号文（通信開始応答）とを含むデータを、通信相手である他の暗号通信装置１００に対して送信する。
【０１８１】
図１６は、この実施の形態における暗号通信装置１００が通信開始応答または通信暗号文を受信した場合に実行する暗号文受信処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明した暗号文受信処理の工程と共通する工程については、同一の符号を付し、ここでは説明を省略する。
【０１８２】
受信工程Ｓ２１において、受信部１１０は、通信装置９１５を用いて、通信相手である他の暗号通信装置１００が送信したデータを受信する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、受信したデータから、復号鍵乱数と、受信暗号文（通信開始応答または通信暗号文）とを取得する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、取得した復号鍵乱数と受信暗号部とを出力する。
【０１８３】
復号一時鍵生成工程Ｓ４５において、復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、受信工程Ｓ２１で受信部１１０が出力した復号鍵乱数を入力する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、復号鍵記憶部２１１が記憶した復号鍵を入力する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、入力した復号鍵と、入力した復号鍵乱数とに基づいて、復号一時鍵を生成する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、生成した復号一時鍵を出力する。
【０１８４】
復号工程Ｓ２２において、復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信工程Ｓ２１で受信部１１０が出力した受信暗号文を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、復号一時鍵生成工程Ｓ４５で復号鍵生成部２１７が出力した復号一時鍵を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、入力した受信暗号文を、入力した復号一時鍵で復号する。
【０１８５】
図１７は、この実施の形態における暗号通信装置１００が送信暗号文を送信する場合に実行する暗号文送信処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明した暗号文送信処理の工程と共通する工程については、同一の符号を付し、ここでは説明を省略する。
【０１８６】
鍵乱数生成工程Ｓ４８において、鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成し、暗号鍵乱数とする。
鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号鍵乱数を出力する。
【０１８７】
暗号一時鍵生成工程Ｓ４９において、暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成工程Ｓ４８で鍵乱数生成部２３８が出力した暗号鍵乱数を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、入力した暗号鍵と、入力した暗号鍵乱数とに基づいて、暗号一時鍵を生成する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号一時鍵を出力する。
【０１８８】
暗号化工程Ｓ３５において、暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合工程Ｓ３４で結合部２３４が出力した送信平文を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号一時鍵生成工程Ｓ４９で暗号鍵生成部２３９が出力した暗号一時鍵を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、入力した送信平文を、入力した暗号一時鍵で暗号化して、送信暗号文とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号化した送信暗号文を出力する。
【０１８９】
送信工程Ｓ３６において、送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成工程Ｓ４８で鍵乱数生成部２３８が出力した暗号鍵乱数を入力する。
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、暗号化工程Ｓ３５で暗号化部２３７が出力した送信暗号文を入力する。
送信部１２０は、通信装置９１５を用いて、入力した暗号鍵乱数と、入力した送信暗号文とを含むデータを、通信相手である他の暗号通信装置１００に対して送信する。
【０１９０】
図１８は、この実施の形態における暗号通信装置１００ａと暗号通信装置１００ｂとが暗号通信をする通信の流れの一例を示すシーケンス図である。
この例では、通信の開始を要求する側を暗号通信装置１００ａとし、通信の開始を要求された側を暗号通信装置１００ｂとして説明する。
【０１９１】
最初に、暗号通信装置１００ａが通信開始要求６０１を送信し、暗号通信装置１００ｂが受信する。
【０１９２】
次に、暗号通信装置１００ｂが暗号鍵乱数と通信開始応答とを含むデータ６１２を送信し、暗号通信装置１００ａが受信する。
通信開始応答は、暗号一時鍵で暗号化する。暗号一時鍵は、暗号鍵乱数に基づいて暗号通信装置１００ｂが生成する。暗号鍵乱数は、暗号通信装置１００ｂが生成し、通信開始応答と一緒に送信する。また、通信開始応答は、送信乱数を含む。送信乱数は、暗号通信装置１００ｂが生成する。
暗号通信装置１００ａは、復号一時鍵で通信開始応答を復号する。復号一時鍵は、受信した暗号鍵乱数（＝復号鍵乱数）に基づいて暗号通信装置１００ａが生成する。
【０１９３】
通信開始応答により通信の開始が了解されると、暗号通信装置１００ａと暗号通信装置１００ｂとの間の暗号通信が開始する。
【０１９４】
暗号通信装置１００ａが暗号鍵乱数と通信暗号文とを含むデータ６１３を送信し、暗号通信装置１００ｂが受信する。
通信暗号文は、暗号一時鍵で暗号化する。暗号一時鍵は、暗号鍵乱数に基づいて暗号通信装置１００ａが生成する。暗号鍵乱数は、暗号通信装置１００ａが生成し、通信暗号文と一緒に送信する。また、通信暗号文は、送信乱数と送信検証情報とを含む。送信乱数は、暗号通信装置１００ａが生成する。送信検証情報は、受信した通信開始応答に含まれる送信乱数（＝受信乱数）に基づいて暗号通信装置１００ａが生成する。
暗号通信装置１００ｂは、復号一時鍵で通信暗号文を復号する。復号一時鍵は、受信した暗号鍵乱数（＝復号鍵乱数）に基づいて、暗号通信装置１００ｂが生成する。
【０１９５】
暗号通信装置１００ｂは、受信した通信暗号文に含まれる送信検証情報（＝受信検証情報）を検証し、検証成功と判断した場合には通信を続けるが、検証失敗と判断した場合には通信を終了する。
【０１９６】
検証成功の場合、暗号通信装置１００ｂが暗号鍵乱数と通信暗号文とを含むデータ６１４を送信し、暗号通信装置１００ａが受信する。
通信暗号文は、暗号一時鍵で暗号化する。暗号一時鍵は、暗号鍵乱数に基づいて暗号通信装置１００ｂが生成する。暗号鍵乱数は、暗号通信装置１００ｂが生成し、通信暗号文と一緒に送信する。また、通信暗号文は、送信乱数と送信検証情報とを含む。送信乱数は、暗号通信装置１００ｂが生成する。送信検証情報は、受信した通信開始応答に含まれる送信乱数（＝受信乱数）に基づいて暗号通信装置１００ｂが生成する。
暗号通信装置１００ａは、復号一時鍵で通信暗号文を復号する。復号一時鍵は、受信した暗号鍵乱数（＝復号鍵乱数）に基づいて、暗号通信装置１００ａが生成する。
【０１９７】
暗号通信装置１００ａは、受信した通信暗号文に含まれる送信検証情報（＝受信検証情報）を検証し、検証成功と判断した場合には通信を続けるが、検証失敗と判断した場合には通信を終了する。
【０１９８】
以下、同様に、暗号通信装置１００ａが暗号鍵乱数と通信暗号文とを含むデータ６１５を送信し、暗号通信装置１００ｂが受信する。検証に成功すれば通信を続行する。暗号通信装置１００ｂが暗号鍵乱数と通信暗号文とを含むデータ６１６を送信し、暗号通信装置１００ａが受信する。検証に成功すれば通信を続行する。これを通信が終了するまで繰り返す。
【０１９９】
同じ暗号鍵で暗号化した暗号文を何度も送信すると、攻撃者９９９がそれを収集し、暗号解読の手がかりとする場合がある。
この実施の形態における暗号通信システム８００は、通信ごとに変える暗号一時鍵を使って暗号化しているので、攻撃者９９９が暗号文を収集しても、暗号を解読する手がかりを得ることができない。
【０２００】
また、暗号文には暗号一時鍵・復号一時鍵が含まれず、暗号鍵乱数を送信し、暗号通信装置１００ａと暗号通信装置１００ｂとが共有する秘密情報である暗号鍵・復号鍵と、暗号鍵乱数とを組み合わせることにより、暗号一時鍵・復号一時鍵を生成し、暗号化・復号をする。
したがって、攻撃者９９９がどれか一つの通信暗号文についての暗号一時鍵・復号一時鍵を知って通信暗号文を復号したとしても、他の通信暗号文についての暗号一時鍵・復号一時鍵についての情報を得ることはできない。暗号鍵乱数と暗号一時鍵・復号一時鍵から暗号鍵・復号鍵を推定することが困難な関数により、暗号一時鍵・復号一時鍵を生成するので、攻撃者９９９は、その通信暗号文とともに送信された暗号鍵乱数と、暗号一時鍵・復号一時鍵との対応関係を知ったとしても、暗号通信装置１００ａと暗号通信装置１００ｂとが共有する秘密情報である暗号鍵・復号鍵を知ることはできない。これにより、攻撃者９９９は、他の通信暗号文とともに送信された暗号鍵乱数から、暗号一時鍵・復号一時鍵を生成することができず、被害を最小限に留めることができる。
【０２０１】
この実施の形態における暗号通信装置１００は、更に、復号鍵生成部２１７を有することを特徴とする。
受信部１１０は、通信装置９１５を用いて、受信暗号文とともに他の暗号通信装置１００が送信した暗号鍵乱数を受信して復号鍵乱数とすることを特徴とする。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した復号鍵乱数に基づいて、復号一時鍵を生成することを特徴とする。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した受信暗号文を復号鍵生成部２１７が生成した復号一時鍵で復号して受信平文とすることを特徴とする。
【０２０２】
この実施の形態における暗号通信装置１００によれば、受信暗号文とともに受信した復号鍵乱数に基づいて復号一時鍵を生成し、生成した復号一時鍵で受信暗号文を復号するので、通信ごとに復号一時鍵が異なり、攻撃者９９９に暗号解読の手がかりを与えないという効果を奏する。また、攻撃者９９９が万一、ある通信暗号文を復号できる復号一時鍵を知ったとしても、他の通信暗号文を復号できず、被害を最小限に留めることができるという効果を奏する。
【０２０３】
この実施の形態における暗号通信装置１００は、更に、鍵乱数生成部２３８と、暗号鍵生成部２３９とを有することを特徴とする。
鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成して暗号鍵乱数とすることを特徴とする。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成部２３８が生成した暗号鍵乱数に基づいて、暗号一時鍵を生成することを特徴とする。
暗号化部暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合部２３４が生成した送信平文を暗号鍵生成部２３９が生成した暗号一時鍵で暗号化して送信暗号文とすることを特徴とする。
送信部１２０は、通信装置９１５を用いて、鍵乱数生成部２３８が生成した暗号鍵乱数を暗号化部２３７が暗号化した送信暗号文とともに上記他の暗号通信装置に対して送信することを特徴とする。
【０２０４】
この実施の形態における暗号通信装置１００によれば、生成した暗号鍵乱数に基づいて暗号一時鍵を生成し、生成した暗号一時鍵で送信平文を暗号化し、暗号鍵乱数を送信暗号文とともに送信するので、通信ごとに暗号一時鍵が異なり、攻撃者９９９に暗号解読の手がかりを与えないという効果を奏する。また、攻撃者９９９が万一、ある通信暗号文を復号できる復号一時鍵を知ったとしても、他の通信暗号文を復号できず、被害を最小限に留めることができるという効果を奏する。
【０２０５】
以上説明した暗号通信装置１００は、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の暗号通信装置であり、暗号通信装置間で対応する秘密情報（暗号鍵・復号鍵）を持ち、認証と暗号通信をする暗号通信装置であって、以下の全ての機能を有する暗号通信装置である。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、第１の鍵生成乱数（暗号鍵乱数）を生成し、前記第１の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）から第１の一時鍵（暗号一時鍵）を生成する。第一の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、前記第１の一時鍵で暗号化して第１の暗号文（通信開始応答）を生成し、第１の鍵生成乱数と第１の暗号文を発呼側に送信する。
（３）発呼側は着呼側から送られた前記第１の鍵生成乱数（復号鍵乱数）と発呼側の持つ秘密情報（復号鍵）から第１の一時鍵（復号一時鍵）を生成し、前記第１の暗号文（受信暗号文）を前記第１の一時鍵で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成する。第２の鍵生成乱数（暗号鍵乱数）を生成し、前記第２の鍵生成乱数と発呼側の持つ秘密情報（暗号鍵）から第２の一時鍵（暗号一時鍵）を生成する。第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して前記第２の一時鍵で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の鍵生成乱数と第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成する。発呼側から送られた前記第２の鍵生成乱数（受信鍵乱数）と着呼側の持つ秘密情報（復号鍵）から第２の一時鍵（復号一時鍵）を生成し、前記第２の暗号文（受信暗号文）を前記第２の一時鍵で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は第３の鍵生成乱数（暗号鍵乱数）を生成し、前記第３の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）とから第３の一時鍵（暗号一時鍵）を生成する。前記第２の暗号文の復号結果から取り出した前記第２の乱数（受信乱数）から検証情報（送信検証情報）を生成し、新たに第３の乱数と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して前記第３の一時鍵で暗号化して第３の暗号文（送信暗号文）を生成し、前記第３の鍵生成乱数と第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成する。着呼側から送られた前記第３の鍵生成乱数（復号鍵乱数）と発呼側の持つ秘密情報（復号鍵）から第３の一時鍵（復号一時鍵）を生成し、前記第３の暗号文（受信暗号文）を前記で第３の一時鍵で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は第４の鍵生成乱数（暗号鍵乱数）を生成し、前記第４の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）とから第４の一時鍵（暗号一時鍵）を生成する。前記第３の乱数（受信乱数）から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して前記第４の一時鍵で暗号化して第４の暗号文（送信暗号文）を生成し、前記第４の鍵生成乱数と第４の暗号文を着呼側に送信する。
【０２０６】
以上説明した暗号通信装置１００は、相互に認証しあった後も、同様の認証と暗号通信を続ける暗号通信装置である。
【０２０７】
以上説明した暗号通信装置１００が行う暗号通信方法は、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の暗号通信装置１００において、暗号通信装置間で対応する秘密情報（暗号鍵・復号鍵）を持ち、認証と暗号通信をする暗号通信方法であって、以下の全ての機能を有する暗号通信方法である。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、第１の鍵生成乱数（暗号鍵乱数）を生成し、前記第１の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）から第１の一時鍵（暗号秘密鍵）を生成する。第１の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、前記第１の一時鍵で暗号化して第１の暗号文（送信暗号文）を生成し、第１の鍵生成乱数と第１の暗号文を発呼側に送信する。
（３）発呼側は着呼側から送られた前記第１の鍵生成乱数（復号鍵乱数）と発呼側の持つ秘密情報（復号鍵）から第１の一時鍵（復号一時鍵）を生成し、前記第１の暗号文（受信暗号文）を前記第１の一時鍵で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成する。第２の鍵生成乱数（暗号鍵乱数）を生成し、前記第２の鍵生成乱数と発呼側の持つ秘密情報（暗号鍵）から第２の一時鍵（暗号一時鍵）を生成する。第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して前記第２の一時鍵で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の鍵生成乱数と第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成する。発呼側から送られた前記第２の鍵生成乱数（復号鍵乱数）と着呼側の持つ秘密情報（復号鍵）から第２の一時鍵（復号一時鍵）を生成し、前記第２の暗号文（受信暗号文）を前記第２の一時鍵で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は第３の鍵生成乱数（暗号鍵乱数）を生成し、前記第３の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）とから第３の一時鍵（暗号一時鍵）を生成する。前記第２の暗号文の復号結果から取り出した前記第２の乱数（受信乱数）から検証情報（送信検証情報）を生成し、新たに第３の乱数（送信乱数）と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して前記第３の一時鍵で暗号化して第３の暗号文（送信暗号文）を生成し、前記第３の鍵生成乱数と第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成する。着呼側から送られた前記第３の鍵生成乱数（復号鍵乱数）と発呼側の持つ秘密情報（復号鍵）から第３の一時鍵（復号一時鍵）を生成し、前記第３の暗号文（受信暗号文）を前記で第３の一時鍵で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は第４の鍵生成乱数（暗号鍵乱数）を生成し、前記第４の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）とから第４の一時鍵（暗号一時鍵）を生成する。前記第３の乱数（受信乱数）から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して前記第４の一時鍵で暗号化して第４の暗号文（送信暗号文）を生成し、前記第４の鍵生成乱数と第４の暗号文を着呼側に送信する。
【０２０８】
以上説明した暗号通信方法は、相互に認証しあった後も、同様の認証と暗号通信を続ける暗号通信方法である。
【０２０９】
以上説明した暗号通信装置１００としてコンピュータを機能させる暗号通信プログラムは、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の暗号通信装置１００において、暗号通信装置間で対応する秘密情報（暗号鍵・復号鍵）を持ち、認証と暗号通信をする通信プログラムであって、以下の全ての機能を有する通信プログラムである。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、第１の鍵生成乱数（暗号鍵乱数）を生成し、前記第１の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）から第１の一時鍵（暗号一時鍵）を生成する。第一の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、前記第１の一時鍵で暗号化して第１の暗号文（送信暗号文）を生成し、第１の鍵生成乱数と第１の暗号文を発呼側に送信する。
（３）発呼側は着呼側から送られた前記前記第１の鍵生成乱数（復号鍵乱数）と発呼側の持つ秘密情報（復号鍵）から第１の一時鍵（復号一時鍵）を生成し、前記第１の暗号文（受信暗号文）を前記第１の一時鍵で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成する。第２の鍵生成乱数（暗号鍵乱数）を生成し、前記第２の鍵生成乱数と発呼側の持つ秘密情報（暗号鍵）から第２の一時鍵（暗号一時鍵）を生成する。第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して前記第２の一時鍵で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の鍵生成乱数と第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成する。発呼側から送られた前記第２の鍵生成乱数（復号鍵乱数）と着呼側の持つ秘密情報（復号鍵）から第２の一時鍵（復号一時鍵）を生成し、前記第２の暗号文（受信暗号文）を前記第２の一時鍵で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は第３の鍵生成乱数（暗号鍵乱数）を生成し、前記第３の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）とから第３の一時鍵（暗号一時鍵）を生成する。前記第２の暗号文の復号結果から取り出した前記第２の乱数（受信乱数）から検証情報（送信検証情報）を生成し、新たに第３の乱数（送信乱数）と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して前記第３の一時鍵で暗号化して第３の暗号文（送信暗号文）を生成し、前記第３の鍵生成乱数と第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成する。着呼側から送られた前記第３の鍵生成乱数（復号鍵乱数）と発呼側の持つ秘密情報（復号鍵）から第３の一時鍵（復号一時鍵）を生成し、前記第３の暗号文（受信暗号文）を前記で第３の一時鍵で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は第４の鍵生成乱数（暗号鍵乱数）を生成し、前記第４の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）とから第４の一時鍵（暗号一時鍵）を生成する。前記第３の乱数（受信乱数）から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して前記第４の一時鍵で暗号化して第４の暗号文（送信暗号文）を生成し、前記第４の鍵生成乱数と第４の暗号文を着呼側に送信する。
【０２１０】
以上説明した暗号通信プログラムは、相互に認証しあった後も、同様の認証と暗号通信を続ける暗号通信プログラムである。
【０２１１】
以上説明した暗号通信プログラムは、フレキシブルディスクなどの記憶媒体に格納され、コンピュータが読み出して実行するものであってもよい。
【０２１２】
以上説明した暗号通信装置１００は、データの暗号化に使われる暗号鍵・復号鍵を固定値ではなく、通信データごとに変更するので、安全性が高くなる。
【０２１３】
暗号鍵・復号鍵と、暗号鍵乱数・復号鍵乱数とに基づいて、暗号一時鍵・復号一時鍵を生成する方式は、暗号鍵乱数・復号鍵乱数と暗号一時鍵・復号一時鍵とに基づいて、暗号鍵・復号鍵を推定することが困難な方式を用いる。
暗号鍵Ｋと、暗号鍵乱数ＫＲとに基づいて暗号一時鍵ＴＫを生成する関数をｆとし、ＴＫ＝ｆ（Ｋ，ＫＲ）と表記する。ある暗号鍵乱数ＫＲについて、暗号一時鍵ＴＫ１＝ｆ（Ｋ１，ＫＲ）と、暗号一時鍵ＴＫ２＝ｆ（Ｋ２，ＫＲ）とが同一（すなわち、ＴＫ１＝ＴＫ２）となる暗号鍵Ｋ１と暗号鍵Ｋ２とが存在する関数ｆを用いて暗号一時鍵を生成することが、更に好ましい。
そうすれば、攻撃者９９９が、暗号一時鍵ＴＫ１を知った場合、暗号鍵を推定することが困難なだけでなく、万一、暗号鍵を推定できたとしても、暗号鍵がＫ１なのかＫ２なのかを決定することができず、更に安全性が高くなるからである。
【０２１４】
実施の形態３．
実施の形態３について、図１９〜図２５を用いて説明する。
この実施の形態における暗号通信システム８００の全体構成、暗号通信装置１００の外観、ハードウェア資源の構成は、実施の形態１で説明したものと同様なので、ここでは説明を省略する。
【０２１５】
図１９は、この実施の形態における暗号通信装置１００の機能ブロックの構成の一例を示すブロック構成図である。
なお、実施の形態２で説明した機能ブロックと共通するブロックについては、同一の符号を付し、ここでは説明を省略する。
【０２１６】
受信部１１０は、通信装置９１５を用いて、通信相手である他の暗号通信装置１００が送信したデータを受信する。
【０２１７】
図２０は、この実施の形態における受信部１１０が受信するするデータ５６０の構成の一例を示す図である。
受信部１１０が受信するデータ５６０が通信開始要求５６３を含む場合、データ５６０は、通信開始要求５６３のほか、暗号鍵乱数５６１を含む。
データ５６０は、例えば、暗号鍵乱数５６１のあとに通信開始要求５６３を結合したデータである。
なお、通信開始要求ではなく、通信開始応答や通信暗号文などの送信暗号文の場合には、暗号鍵乱数と結合せず、送信暗号文５６２がそのままデータ５６０となる。
【０２１８】
図１９に戻り、暗号通信装置１００の機能ブロックの説明を続ける。
【０２１９】
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、受信したデータに含まれる暗号鍵乱数と通信開始要求とを取得する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、取得した暗号鍵乱数と通信開始要求とを出力する。
受信部１１０は、受信したデータが送信暗号文である場合には、ＣＰＵ９１１などの処理装置を用いて、受信した送信暗号文を受信暗号文として出力する。
【０２２０】
受信乱数記憶部２２１は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が出力した暗号鍵乱数を入力する。
受信乱数記憶部２２１は、ＲＡＭ９１４などの記憶装置を用いて、入力した暗号鍵乱数を受信乱数として記憶する。
すなわち、受信乱数記憶部２２１は、受信部１１０が通信開始要求を受信した場合には、通信開始要求とともに受信した暗号鍵乱数を受信乱数として記憶し、それ以外の場合には、実施の形態１〜実施の形態２と同様、分割部２１３が出力した受信乱数を記憶する。
【０２２１】
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、復号鍵記憶部２１１が記憶した復号鍵を入力する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、送信乱数記憶部２２２が記憶した送信乱数を入力する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、入力した復号鍵と、入力した送信乱数とに基づいて、復号一時鍵を生成する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、生成した復号一時鍵を出力する。
すなわち、復号鍵生成部２１７は、復号鍵乱数ではなく、送信乱数記憶部２２２が記憶した送信乱数を使用して、復号一時鍵を生成する。
なお、復号鍵生成部２１７は、送信乱数記憶部２２２が記憶した送信乱数ではなく、受信検証生成部２１４が出力した検証情報を使用して、復号一時鍵を生成してもよい。あるいは、送信乱数記憶部２２２が記憶した送信乱数と、受信検証生成部２１４が出力した検証情報とを両方使用して、復号一時鍵を生成してもよい。
【０２２２】
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、受信乱数記憶部２２１が記憶した受信乱数を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、入力した暗号鍵と、入力した受信乱数とに基づいて、暗号一時鍵を生成する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号一時鍵を出力する。
すなわち、暗号鍵生成部２３９は、暗号鍵乱数ではなく、受信乱数記憶部２２１が記憶した受信乱数を使用して、暗号一時鍵を生成する。
なお、暗号鍵生成部２３９は、受信乱数記憶部２２１が記憶した受信乱数ではなく、送信検証生成部２３２が出力した送信検証情報を使用して、暗号一時鍵を生成してもよい。あるいは、受信乱数記憶部２２１が記憶した受信乱数と送信検証生成部２３２が出力した送信検証情報とを両方使用して、暗号一時鍵を生成してもよい。
【０２２３】
鍵乱数生成部２３８は、データ入力部２３３が通信開始要求を入力した場合に、ＣＰＵ９１１などの処理装置を用いて、暗号鍵乱数を生成する。
鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号鍵乱数を出力する。
すなわち、鍵乱数生成部２３８は、通信開始要求を送信する場合にのみ、暗号鍵乱数を生成し、それ以外の場合は暗号鍵乱数を生成しない。
【０２２４】
送信乱数記憶部２２２は、データ入力部２３３が通信開始要求を入力した場合、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成部２３８が生成した暗号鍵乱数を入力する。
送信乱数記憶部２２２は、ＲＡＭ９１４などの記憶装置を用いて、入力した暗号鍵乱数を、送信乱数として記憶する。
すなわち、送信乱数記憶部２２２は、通信開始要求を送信する場合には、鍵乱数生成部２３８が生成した暗号鍵乱数を送信乱数として記憶し、それ以外の場合には、実施の形態１〜実施の形態２と同様、検証乱数生成部２３１が生成した送信乱数を記憶する。
【０２２５】
送信部１２０は、データ入力部２３３が通信開始要求を入力した場合、ＣＰＵ９１１などの処理装置を用いて、通信開始要求を入力する。
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成部２３８が出力した暗号鍵乱数を入力する。
送信部１２０は、通信装置９１５を用いて、入力した通信開始要求と、入力した暗号鍵乱数とを含むデータを、通信相手である他の暗号通信装置１００に対して送信する。
それ以外の場合、送信部１２０は、暗号化部２３７が出力した送信暗号文を入力し、送信する。
【０２２６】
次に、動作について説明する。
【０２２７】
図２１は、この実施の形態における暗号通信装置１００が通信開始を要求する開始要求処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明した開始要求処理の工程と共通する工程については、同一の符号を付し、ここでは説明を省略する。
【０２２８】
鍵乱数生成工程Ｓ５１において、鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成し、暗号鍵乱数とする。
鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号鍵乱数を出力する。
送信乱数記憶部２２２は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成部２３８が出力した暗号鍵乱数を入力する。
送信乱数記憶部２２２は、ＲＡＭ９１４などの記憶装置を用いて、入力した暗号鍵乱数を、送信乱数として記憶する。
【０２２９】
開始要求送信工程Ｓ０３において、送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、開始要求生成工程Ｓ０１でデータ入力部２３３が出力した（または暗号化部２３７が暗号化した）通信開始要求を入力する。
送信部１２０は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成工程Ｓ５１で鍵乱数生成部２３８が出力した暗号鍵乱数を入力する。
送信部１２０は、通信装置９１５を用いて、入力した暗号鍵乱数と、入力した通信開始要求とを含むデータを、通信相手である他の暗号通信装置１００に対して送信する。
【０２３０】
図２２は、この実施の形態における暗号通信装置１００が通信開始要求を受信した場合に実行する開始応答処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明した開始応答処理の工程と共通する工程については、同一の符号を付し、ここでは説明を省略する。
【０２３１】
開始要求受信工程Ｓ１１において、受信部１１０は、通信装置９１５を用いて、通信相手である他の暗号通信装置１００が送信した暗号鍵乱数と通信開始要求とを含むデータを受信する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、受信したデータに含まれる暗号鍵乱数と通信開始要求とを取得する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、取得した暗号鍵乱数を復号鍵乱数として出力する。
受信部１１０は、ＣＰＵ９１１などの処理装置を用いて、取得した通信開始要求を出力する。
受信乱数記憶部２２１は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が出力した復号鍵乱数を入力する。
受信乱数記憶部２２１は、ＲＡＭ９１４などの記憶装置を用いて、入力した復号鍵乱数を、受信乱数として記憶する。
【０２３２】
暗号一時鍵生成工程Ｓ５４において、暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、受信乱数記憶部２２１が記憶した受信乱数を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、入力した暗号鍵と、入力した受信乱数とに基づいて、暗号一時鍵を生成する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号一時鍵を出力する。
【０２３３】
暗号化工程Ｓ１６において、暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合工程Ｓ１５で結合部２３４が出力した送信平文を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号一時鍵生成工程Ｓ４２で暗号鍵生成部２３９が出力した暗号一時鍵を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、入力した送信平文を、入力した暗号一時鍵で暗号化して、送信暗号文とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号化した送信暗号文を出力する。
【０２３４】
図２３は、この実施の形態における暗号通信装置１００が通信開始応答または通信暗号文を受信した場合に実行する暗号文受信処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明した暗号文受信処理の工程と共通する工程については、同一の符号を付し、ここでは説明を省略する。
【０２３５】
復号一時鍵生成工程Ｓ５７において、復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、復号鍵記憶部２１１が記憶した復号鍵を入力する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、送信乱数記憶部２２２が記憶した送信乱数を入力する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、入力した復号鍵と、入力した送信乱数とに基づいて、復号一時鍵を生成する。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、生成した復号一時鍵を出力する。
【０２３６】
復号工程Ｓ２２において、復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信工程Ｓ２１で受信部１１０が出力した受信暗号文を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、復号一時鍵生成工程Ｓ５７で復号鍵生成部２１７が出力した復号一時鍵を入力する。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、入力した受信暗号文を、入力した復号一時鍵で復号する。
【０２３７】
受信部１１０が受信した受信暗号文が通信開始応答である場合、送信乱数記憶部２２２が記憶した送信乱数は、鍵乱数生成部２３８が生成した暗号鍵乱数である。したがって、復号鍵生成部２１７は、暗号鍵記憶部２３６が記憶した暗号鍵と鍵乱数生成部２３８が生成した暗号鍵乱数とに基づいて復号一時鍵を生成する。
一方、通信相手である他の暗号通信装置１００は、暗号鍵記憶部２３６が記憶した暗号鍵と受信乱数記憶部２２１が記憶した受信乱数とに基づいて、暗号一時鍵を生成し、生成した暗号一時鍵で暗号化した送信暗号文を送信する。送信暗号文が通信開始応答である場合、受信乱数記憶部２２１が記憶した受信乱数は、通信開始要求とともに受信した復号鍵乱数であり、元を質せば、暗号通信装置１００の鍵乱数生成部２３８が生成した暗号鍵乱数である。
したがって、暗号通信装置１００は、通信相手である他の暗号通信装置１００が暗号化した通信開始応答を正しく復号できる。
【０２３８】
図２４は、この実施の形態における暗号通信装置１００が送信暗号文を送信する場合に実行する暗号文送信処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明した暗号文送信処理の工程と共通する工程については、同一の符号を付し、ここでは説明を省略する。
【０２３９】
暗号一時鍵生成工程Ｓ６１において、暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、暗号鍵記憶部２３６が記憶した暗号鍵を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、受信乱数記憶部２２１が記憶した受信乱数を入力する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、入力した暗号鍵と、入力した受信乱数とに基づいて、暗号一時鍵を生成する。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、生成した暗号一時鍵を出力する。
【０２４０】
暗号化工程Ｓ３５において、暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合工程Ｓ３４で結合部２３４が出力した送信平文を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号一時鍵生成工程Ｓ６１で暗号鍵生成部２３９が出力した暗号一時鍵を入力する。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、入力した送信平文を、入力した暗号一時鍵で暗号化して、送信暗号文とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、暗号化した送信暗号文を出力する。
【０２４１】
暗号通信装置１００が送信する送信暗号文が通信開始応答でない場合、受信乱数記憶部２２１が記憶した受信乱数は、受信部１１０が受信した受信暗号文に含まれる受信乱数であり、元を質せば、通信相手である他の暗号通信装置１００の検証乱数生成部２３１が生成した送信乱数である。したがって、暗号鍵生成部２３９は、暗号鍵記憶部２３６が記憶した暗号鍵と他の暗号通信装置１００の検証乱数生成部２３１が生成した送信乱数とに基づいて暗号一時鍵を生成する。
一方、他の暗号通信装置１００の復号鍵生成部２１７は、復号鍵記憶部２１１が記憶した復号鍵と送信乱数記憶部２２２が記憶した送信乱数とに基づいて復号一時鍵を生成する。送信乱数記憶部２２２が記憶した送信乱数は、検証乱数生成部２３１が生成した送信乱数である。
したがって、暗号通信装置１００が暗号化した通信暗号文は、通信相手である他の暗号通信装置１００が正しく復号できる。
【０２４２】
図２５は、この実施の形態における暗号通信装置１００ａと暗号通信装置１００ｂとが暗号通信をする通信の流れの一例を示すシーケンス図である。
この例では、通信の開始を要求する側を暗号通信装置１００ａとし、通信の開始を要求された側を暗号通信装置１００ｂとして説明する。
【０２４３】
最初に、暗号通信装置１００ａが暗号鍵乱数と通信開始要求とを含むデータ６１１を送信し、暗号通信装置１００ｂが受信する。
【０２４４】
次に、暗号通信装置１００ｂが通信開始応答６０２を送信し、暗号通信装置１００ａが受信する。
通信開始応答６０２は、暗号一時鍵で暗号化する。暗号一時鍵は、受信した暗号鍵乱数に基づいて暗号通信装置１００ｂが生成する。また、通信開始応答は、送信乱数を含む。
暗号通信装置１００ａは、復号一時鍵で通信開始応答６０２を復号する。復号一時鍵は、送信した暗号鍵乱数に基づいて暗号通信装置１００ａが生成する。
【０２４５】
通信開始応答により通信の開始が了解されると、暗号通信装置１００ａと暗号通信装置１００ｂとの間の暗号通信が開始する。
【０２４６】
暗号通信装置１００ａが通信暗号文６０３を送信し、暗号通信装置１００ｂが受信する。
通信暗号文６０３は、暗号一時鍵で暗号化する。暗号一時鍵は、受信乱数に基づいて暗号通信装置１００ａが生成する。受信乱数は、暗号通信装置１００ａが受信した通信開始応答に含まれる送信乱数である。また、通信暗号文６０３は、送信乱数と送信検証情報とを含む。送信乱数は、暗号通信装置１００ａが生成する。送信検証情報は、受信乱数に基づいて暗号通信装置１００ａが生成する。
暗号通信装置１００ｂは、復号一時鍵で通信暗号文６０３を復号する。復号一時鍵は、暗号通信装置１００ｂが送信した通信開始応答に含めた送信乱数に基づいて、暗号通信装置１００ｂが生成する。
【０２４７】
暗号通信装置１００ｂは、受信した通信暗号文６０３に含まれる送信検証情報（＝受信検証情報）を検証し、検証成功と判断した場合には通信を続けるが、検証失敗と判断した場合には通信を終了する。
【０２４８】
検証成功の場合、暗号通信装置１００ｂが通信暗号文６０４を送信し、暗号通信装置１００ａが受信する。
通信暗号文６０４は、暗号一時鍵で暗号化する。暗号一時鍵は、受信乱数に基づいて暗号通信装置１００ｂが生成する。受信乱数は、暗号通信装置１００ｂが受信した通信暗号文６０３に含まれる送信乱数である。また、通信暗号文６０４は、送信乱数と送信検証情報とを含む。送信乱数は、暗号通信装置１００ｂが生成する。送信検証情報は、受信乱数に基づいて暗号通信装置１００ｂが生成する。
暗号通信装置１００ａは、復号一時鍵で通信暗号文６０４を復号する。復号一時鍵は、暗号通信装置１００ａが送信した通信暗号文６０３に含めた送信乱数に基づいて、暗号通信装置１００ａが生成する。
【０２４９】
暗号通信装置１００ａは、受信した通信暗号文６０４に含まれる送信検証情報（＝受信検証情報）を検証し、検証成功と判断した場合には通信を続けるが、検証失敗と判断した場合には通信を終了する。
【０２５０】
以下、同様に、暗号通信装置１００ａが通信暗号文６０５を送信し、暗号通信装置１００ｂが受信する。検証に成功すれば通信を続行する。暗号通信装置１００ｂが通信暗号文６０６を送信し、暗号通信装置１００ａが受信する。検証に成功すれば通信を続行する。これを通信が終了するまで繰り返す。
【０２５１】
このように、検証のために送信する送信乱数を、暗号一時鍵・復号一時鍵を生成するためにも使用することにより、暗号鍵乱数を送信する必要がない。そのため、送信されるデータのデータ量が少なくて済むので、通信コストを低減することができる。
【０２５２】
また、攻撃者９９９が、万一、通信暗号文を復号できる復号一時鍵を知り、通信暗号文を復号したとしても、攻撃者９９９が知ることができる送信乱数は、次の通信暗号文を暗号化・復号する暗号一時鍵・復号一時鍵を生成するためのものであり、その通信暗号文を暗号化・復号する暗号一時鍵・復号一時鍵を生成するためのものではない。したがって、攻撃者９９９は、送信乱数と復号一時鍵との対応関係すら知ることができないので、暗号鍵・復号鍵を推定できない。
【０２５３】
なお、通信コストの点を無視すれば、送信乱数とは別に暗号鍵乱数を生成して、送信平文に含め、暗号一時鍵で暗号化して送信することとしてもよい。
【０２５４】
また、通信開始要求は送信乱数を含まないので、通信開始要求を送信するときは、暗号鍵乱数を一緒に送信する。これにより、通信開始応答６０２も、毎回異なる暗号一時鍵で暗号化することができる。
【０２５５】
この実施の形態における暗号通信装置１００は、更に、復号鍵生成部２１７を有することを特徴とする。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、検証乱数生成部２３１が生成した送信乱数に基づいて、復号一時鍵を生成することを特徴とする。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した受信暗号文を復号鍵生成部２１７が生成した復号一時鍵で復号して受信平文とすることを特徴とする。
【０２５６】
この実施の形態における暗号通信装置１００によれば、通信相手を検証するために他の暗号通信装置１００に対して送信した送信乱数を、復号一時鍵の生成に使用するので、鍵生成用の乱数を別途送受信することなく、通信ごとに復号一時鍵を変えることができるという効果を奏する。
【０２５７】
この実施の形態における暗号通信装置１００は、更に、暗号鍵生成部２３９を有することを特徴とする。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、分割部２１３が取得した受信乱数に基づいて、暗号一時鍵を生成することを特徴とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合部２３４が生成した送信平文を暗号鍵生成部２３９が生成した暗号一時鍵で暗号化して送信暗号文とすることを特徴とする。
【０２５８】
この実施の形態における暗号通信装置１００によれば、他の暗号通信装置１００が通信相手を検証するために送信し、暗号通信装置１００が受信した受信乱数を使用して暗号一時鍵を生成するので、鍵生成用の乱数を別途送受信することなく、通信ごとに暗号一時鍵を変えることができるという効果を奏する。
【０２５９】
この実施の形態における暗号通信装置１００は、更に、暗号鍵生成部２３９を有することを特徴とする。
受信部１１０は、通信装置９１５を用いて、通信開始要求とともに他の暗号通信装置１００が送信した暗号鍵乱数を受信することを特徴とする。
暗号鍵生成部２３９は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した暗号鍵乱数に基づいて、暗号一時鍵を生成することを特徴とする。
暗号化部２３７は、ＣＰＵ９１１などの処理装置を用いて、結合部２３４が生成した送信平文を暗号鍵生成部２３９が生成した暗号一時鍵で暗号化して送信暗号文とすることを特徴とする。
【０２６０】
この実施の形態における暗号通信装置１００によれば、通信開始要求とともに暗号鍵乱数を受信し、受信した暗号鍵乱数に基づいて暗号一時鍵を生成するので、通信開始応答も、毎回異なる暗号一時鍵で暗号化することができ、攻撃者９９９に暗号解読の手がかりを与えないという効果を奏する。
【０２６１】
この実施の形態における暗号通信装置１００は、更に、鍵乱数生成部２３８と、復号鍵生成部２１７とを有することを特徴とする。
鍵乱数生成部２３８は、ＣＰＵ９１１などの処理装置を用いて、乱数を生成して暗号鍵乱数とすることを特徴とする。
送信部１２０は、通信装置９１５を用いて、鍵乱数生成部２３８が生成した暗号鍵乱数を通信開始要求とともに他の暗号通信装置１００に対して送信することを特徴とする。
復号鍵生成部２１７は、ＣＰＵ９１１などの処理装置を用いて、鍵乱数生成部２３８が生成した暗号鍵乱数に基づいて、復号一時鍵を生成することを特徴とする。
復号部２１２は、ＣＰＵ９１１などの処理装置を用いて、受信部１１０が受信した受信暗号文を復号鍵生成部２１７が生成した復号一時鍵で復号して受信平文とすることを特徴とする。
【０２６２】
この実施の形態における暗号通信装置１００によれば、生成した暗号鍵乱数を通信開始要求とともに送信し、送信した暗号鍵乱数に基づいて復号一時鍵を生成するので、他の暗号通信装置１００が受信した暗号鍵乱数に基づいて生成した暗号一時鍵で暗号化した暗号文を正しく復号でき、復号一時鍵が毎回異なるので、攻撃者９９９に暗号解読の手がかりを与えないという効果を奏する。
【０２６３】
以上説明した暗号通信装置１００は、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の暗号通信装置であり、暗号通信装置間で対応する秘密情報（暗号鍵・復号鍵）を持ち、認証と暗号通信をする暗号通信装置であって、以下の全ての機能を有する暗号通信装置である。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）と第１の鍵生成乱数（暗号鍵乱数）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、前記第１の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）から第１の一時鍵（暗号一時鍵）を生成する。第１の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、前記第１の一時鍵で暗号化して第１の暗号文（送信暗号文）を生成し、第１の暗号文を発呼側に送信する。
（３）発呼側は前記第１の鍵生成乱数と発呼側の持つ秘密情報（復号鍵）から第１の一時鍵（復号一時鍵）を生成し、前記第１の暗号文（受信暗号文）を前記第１の一時鍵で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成する。前記第１の乱数と前記第１の乱数に対応する検証情報との一方または両方と発呼側の持つ秘密情報（暗号鍵）から第２の一時鍵（暗号一時鍵）を生成する。第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して前記第２の一時鍵で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成する。前記第１の乱数と前記第１の乱数に対応する検証情報との一方または両方と着呼側の持つ秘密情報から第２の一時鍵（復号一時鍵）を生成し、前記第２の暗号文（受信暗号文）を前記第２の一時鍵で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は前記第２の暗号文の復号結果から取り出した前記第２の乱数（受信乱数）と前記第２の乱数に対応する検証情報との一方または両方と着呼側の持つ秘密情報とから第３の一時鍵（暗号一時鍵）を生成する。前記第２の暗号文の復号結果から取り出した前記第２の乱数から検証情報（送信検証情報）を生成し、新たに第３の乱数（送信乱数）と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して前記第３の一時鍵で暗号化して第３の暗号文（送信暗号文）を生成し、第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成する。前記第２の乱数と前記第２の乱数に対応する検証情報との一方または両方と発呼側の持つ秘密情報から第３の一時鍵（復号一時鍵）を生成し、前記第３の暗号文（受信暗号文）を前記第３の一時鍵で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は前記第３の暗号文の復号結果から取り出した前記第３の乱数と前記第３の乱数に対応する検証情報との一方または両方と着呼側の持つ秘密情報とから第４の一時鍵（暗号一時鍵）を生成する。前記第３の暗号文の復号結果から取り出した前記第３の乱数から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して前記第４の一時鍵で暗号化して第４の暗号文（送信暗号文）を生成し、前記第４の暗号文を着呼側に送信する。
【０２６４】
以上説明した暗号通信装置１００は、相互に認証しあった後も、同様の認証と暗号通信を続けることを特徴とする暗号通信装置である。
【０２６５】
以上説明した暗号通信装置１００が行う暗号通信方法は、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の暗号通信装置１００において、暗号通信装置間で対応する秘密情報（暗号鍵・復号鍵）を持ち、認証と暗号通信をする暗号通信方法であって、以下の全ての機能を有する暗号通信方法である。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）と第１の鍵生成乱数（暗号鍵乱数）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、前記第１の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）から第１の一時鍵（暗号一時鍵）を生成する。第１の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、前記第１の一時鍵で暗号化して第１の暗号文（送信暗号文）を生成し、第１の暗号文を発呼側に送信する。
（３）発呼側は前記第１の鍵生成乱数と発呼側の持つ秘密情報（復号鍵）から第１の一時鍵（復号一時鍵）を生成し、前記第１の暗号文（受信暗号文）を前記第１の一時鍵で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成する。前記第１の乱数と前記第１の乱数に対応する検証情報との一方または両方と発呼側の持つ秘密情報（暗号鍵）から第２の一時鍵（暗号一時鍵）を生成する。第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して前記第２の一時鍵で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成する。前記第１の乱数と前記第１の乱数に対応する検証情報との一方または両方と着呼側の持つ秘密情報（復号鍵）から第２の一時鍵（復号一時鍵）を生成し、前記第２の暗号文（受信暗号文）を前記第２の一時鍵で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は前記第２の暗号文の復号結果から取り出した前記第２の乱数（受信乱数）と前記第２の乱数に対応する検証情報（送信検証情報）との一方または両方と着呼側の持つ秘密情報とから第３の一時鍵（暗号一時鍵）を生成する。前記第２の暗号文の復号結果から取り出した前記第２の乱数から検証情報（送信検証情報）を生成し、新たに第３の乱数（送信乱数）と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して前記第３の一時鍵で暗号化して第３の暗号文（送信暗号文）を生成し、第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成する。前記第２の乱数と前記第２の乱数に対応する検証情報との一方または両方と発呼側の持つ秘密情報から第３の一時鍵（復号一時鍵）を生成し、前記第３の暗号文（受信暗号文）を前記第３の一時鍵で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は前記第３の暗号文の復号結果から取り出した前記第３の乱数（受信乱数）と前記第３の乱数に対応する検証情報（送信検証情報）との一方または両方と着呼側の持つ秘密情報とから第４の一時鍵（暗号一時鍵）を生成する。前記第３の暗号文の復号結果から取り出した前記第３の乱数から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して前記第４の一時鍵で暗号化して第４の暗号文（送信暗号文）を生成し、前記第４の暗号文を着呼側に送信する。
【０２６６】
以上説明した暗号通信方法は、相互に認証しあった後も、同様の認証と暗号通信を続けることを特徴とする暗号通信方法である。
【０２６７】
以上説明した暗号通信装置１００としてコンピュータを機能させる暗号通信プログラムは、
接続手段（通信装置９１５・ネットワーク８０１）により接続されている２つ以上の暗号通信装置１００において、暗号通信装置間で対応する秘密情報（暗号鍵・復号鍵）を持ち、認証と暗号通信をする暗号通信プログラムであって、以下の全ての機能を有する暗号通信プログラムである。
（１）発呼側（暗号通信装置１００ａ）が通信開始を知らせる第１の送信データ（通信開始要求）と第１の鍵生成乱数（暗号鍵乱数）を平文または暗号文で送信する。
（２）着呼側（暗号通信装置１００ｂ）が発呼側の通信開始信号（通信開始要求）を受け、前記第１の鍵生成乱数と着呼側の持つ秘密情報（暗号鍵）から第１の一時鍵（暗号一時鍵）を生成する。第１の乱数（送信乱数）を生成し、前記第１の乱数と第１の応答（開始応答データ）とを連結（結合）し、前記第１の一時鍵で暗号化して第１の暗号文（送信暗号文）を生成し、第１の暗号文を発呼側に送信する。
（３）発呼側は前記第１の鍵生成乱数と発呼側の持つ秘密情報（復号鍵）から第１の一時鍵（復号一時鍵）を生成し、前記第１の暗号文を前記第１の一時鍵で復号し、前記第１の乱数（受信乱数）を取得し、乱数に対応する検証情報（送信検証情報）を生成する。前記第１の乱数と前記第１の乱数に対応する検証情報との一方または両方と発呼側の持つ秘密情報（暗号鍵）から第２の一時鍵（暗号一時鍵）を生成する。第２の乱数（送信乱数）と第２の送信データ（応答データ）を生成し、前記検証情報と第２の乱数と第２の送信データを連結して前記第２の一時鍵で暗号化して第２の暗号文（送信暗号文）を生成し、前記第２の暗号文を着呼側に送信する。
（４）着呼側は前記第１の乱数から検証情報を生成する。前記第１の乱数と前記第１の乱数に対応する検証情報との一方または両方と着呼側の持つ秘密情報（復号鍵）から第２の一時鍵（復号一時鍵）を生成し、前記第２の暗号文を前記第２の一時鍵で復号し、第２の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第１の乱数から生成した検証情報とを比較し、一致すれば発呼側装置を認証する。
（５）着呼側は前記第２の暗号文の復号結果から取り出した前記第２の乱数と前記第２の乱数に対応する検証情報（送信検証情報）との一方または両方と着呼側の持つ秘密情報（暗号鍵）とから第３の一時鍵（暗号一時鍵）を生成する。前記第２の暗号文の復号結果から取り出した前記第２の乱数から検証情報（送信検証情報）を生成し、新たに第３の乱数（送信乱数）と第２の送信データに対する第２の応答（応答データ）を生成し、前記検証情報と第３の乱数と第２の応答を連結して前記第３の一時鍵で暗号化して第３の暗号文（送信暗号文）を生成し、第３の暗号文を発呼側に送信する。
（６）発呼側は前記第２の乱数から検証情報を生成する。前記第２の乱数と前記第２の乱数に対応する検証情報との一方または両方と発呼側の持つ秘密情報（復号鍵）から第３の一時鍵（復号一時鍵）を生成し、前記第３の暗号文を前記第３の一時鍵で復号し、第３の暗号文の復号結果（受信平文）から取り出した検証情報（受信検証情報）と、前記第２の乱数から生成した検証情報とを比較し、一致すれば着呼側装置を認証する。
（７）発呼側は前記第３の暗号文の復号結果から取り出した前記第３の乱数（受信乱数）と前記第３の乱数に対応する検証情報（送信検証情報）との一方または両方と着呼側の持つ秘密情報（暗号鍵）とから第４の一時鍵（暗号一時鍵）を生成する。前記第３の暗号文の復号結果から取り出した前記第３の乱数から検証情報（送信検証情報）を生成し、新たに第４の乱数（送信乱数）と第３の送信データ（応答データ）を生成し、前記検証情報と第４の乱数と第３の送信データを連結して前記第４の一時鍵で暗号化して第４の暗号文（送信暗号文）を生成し、前記第４の暗号文を着呼側に送信する。
【０２６８】
以上説明した暗号通信プログラムは、相互に認証しあった後も、同様の認証と暗号通信を続けることを特徴とする暗号通信プログラムである、
【０２６９】
以上説明した暗号通信プログラムは、フレキシブルディスクなどの記憶媒体に格納され、コンピュータが読み出して実行するものであってもよい。
【０２７０】
以上説明した暗号通信装置１００によれば、一時鍵を生成するために鍵生成用の乱数をつける必要がないので、通信するデータサイズが増加せず、通信コストを削減し、応答速度を速くすることができる。
【図面の簡単な説明】
【０２７１】
【図１】実施の形態１における暗号通信システム８００の全体構成の一例を示すシステム構成図。
【図２】実施の形態１における暗号通信装置１００の外観の一例を示す図。
【図３】実施の形態１における暗号通信装置１００のハードウェア資源の一例を示す図。
【図４】実施の形態１における暗号通信装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図５】実施の形態１における受信平文５１０のデータ構造の一例を示す図。
【図６】実施の形態１における受信平文５１０のデータ構造の別の例を示す図。
【図７】実施の形態１における結合部２３４が生成する送信平文５４０のデータ構造の一例を示す図。
【図８】実施の形態１における暗号通信装置１００ａと暗号通信装置１００ｂとが暗号通信をする通信の流れの一例を示すシーケンス図。
【図９】実施の形態１における暗号通信装置１００が通信開始を要求する開始要求処理の流れの一例を示すフローチャート図。
【図１０】実施の形態１における暗号通信装置１００が通信開始要求を受信した場合に実行する開始応答処理の流れの一例を示すフローチャート図。
【図１１】実施の形態１における暗号通信装置１００が通信開始応答または通信暗号文を受信した場合に実行する暗号文受信処理の流れの一例を示すフローチャート図。
【図１２】実施の形態１における暗号通信装置１００が送信暗号文を送信する場合に実行する暗号文送信処理の流れの一例を示すフローチャート図。
【図１３】実施の形態２における暗号通信装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図１４】実施の形態２におけ受信部１１０が受信するデータ５５０の構成の一例を示す図。
【図１５】実施の形態２における暗号通信装置１００が通信開始要求を受信した場合に実行する開始応答処理の流れの一例を示すフローチャート図。
【図１６】実施の形態２における暗号通信装置１００が通信開始応答または通信暗号文を受信した場合に実行する暗号文受信処理の流れの一例を示すフローチャート図。
【図１７】実施の形態２における暗号通信装置１００が送信暗号文を送信する場合に実行する暗号文送信処理の流れの一例を示すフローチャート図。
【図１８】実施の形態２における暗号通信装置１００ａと暗号通信装置１００ｂとが暗号通信をする通信の流れの一例を示すシーケンス図。
【図１９】実施の形態３における暗号通信装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図２０】実施の形態３における受信部１１０が受信するするデータ５６０の構成の一例を示す図。
【図２１】実施の形態３における暗号通信装置１００が通信開始を要求する開始要求処理の流れの一例を示すフローチャート図。
【図２２】実施の形態３における暗号通信装置１００が通信開始要求を受信した場合に実行する開始応答処理の流れの一例を示すフローチャート図。
【図２３】実施の形態３における暗号通信装置１００が通信開始応答または通信暗号文を受信した場合に実行する暗号文受信処理の流れの一例を示すフローチャート図。
【図２４】実施の形態３における暗号通信装置１００が送信暗号文を送信する場合に実行する暗号文送信処理の流れの一例を示すフローチャート図。
【図２５】実施の形態３における暗号通信装置１００ａと暗号通信装置１００ｂとが暗号通信をする通信の流れの一例を示すシーケンス図。
【符号の説明】
【０２７２】
１００  暗号通信装置、１１０  受信部、１２０  送信部、１３０  データ処理部、２００  暗号処理部、２１１  復号鍵記憶部、２１２  復号部、２１３  分割部、２１４  受信検証生成部、２１５  検証部、２１６  データ出力部、２１７  復号鍵生成部、２２１  受信乱数記憶部、２２２  送信乱数記憶部、２３１  検証乱数生成部、２３２  送信検証生成部、２３３  データ入力部、２３４  結合部、２３５  開始乱数生成部、２３６  暗号鍵記憶部、２３７  暗号化部、２３８  鍵乱数生成部、２３９  暗号鍵生成部、５１０  受信平文、５１１，５４１  送信検証情報、５１２，５４２  送信乱数、５１３，５４３  送信データ、５２１  受信検証情報、５２２  受信乱数、５２３  受信データ、５４０  送信平文、５５０，５６０  データ、５５１，５６１  暗号鍵乱数、５５２，５６２  送信暗号文、５５３，５６３，６０１  通信開始要求、６０２  通信開始応答、６０３〜６０６  通信暗号文、８００  暗号通信システム、８０１  ネットワーク、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９０７  スキャナ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信装置、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ファクシミリ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ、９９９  攻撃者。
【図１】
2008124987.tif 000003
【図２】
2008124987.tif 000004
【図３】
2008124987.tif 000005
【図４】
2008124987.tif 000006
【図５】
2008124987.tif 000007
【図６】
2008124987.tif 000008
【図７】
2008124987.tif 000009
【図８】
2008124987.tif 000010
【図９】
2008124987.tif 000011
【図１０】
2008124987.tif 000012
【図１１】
2008124987.tif 000013
【図１２】
2008124987.tif 000014
【図１３】
2008124987.tif 000015
【図１４】
2008124987.tif 000016
【図１５】
2008124987.tif 000017
【図１６】
2008124987.tif 000018
【図１７】
2008124987.tif 000019
【図１８】
2008124987.tif 000020
【図１９】
2008124987.tif 000021
【図２０】
2008124987.tif 000022
【図２１】
2008124987.tif 000023
【図２２】
2008124987.tif 000024
【図２３】
2008124987.tif 000025
【図２４】
2008124987.tif 000026
【図２５】
2008124987.tif 000027