(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024174738
(43)【公開日】2024-12-17
(54)【発明の名称】認証暗号化装置、認証復号装置、認証暗号システム、方法及びプログラム
(51)【国際特許分類】
G09C 1/00 20060101AFI20241210BHJP
【FI】
G09C1/00 610Z
【審査請求】未請求
【請求項の数】21
【出願形態】OL
(21)【出願番号】P 2023092732
(22)【出願日】2023-06-05
(71)【出願人】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】向井 明子
(72)【発明者】
【氏名】峯松 一彦
(57)【要約】
【課題】入力長よりも出力長の方が長い暗号プリミティブを用いて、効率的に認証暗号化処理を行うことが可能な認証暗号化装置を提供する。
【解決手段】平文分割部302は、平文を所定の割合で第1の平文と第2の平文とに分割する。第1暗号化部310は、第1の値に基づいて得られるマスク値と、複数の平文ブロックそれぞれとを用いて、暗号化関数により、第1の暗号文を取得する。第2暗号化部320は、第1の平文の暗号化において暗号化関数から出力された暗号化結果のうちの第1の平文の暗号化に用いられる値以外の値と、第2の平文とを用いて、第2の暗号文を取得する。認証用タグ生成部360は、第1のタグを生成する。認証用タグ生成部360は、第2のタグを生成する。認証用タグ生成部360は、認証用タグTを生成する。
【選択図】
図23
【特許請求の範囲】
【請求項1】
平文を所定の割合で第1の平文と第2の平文とに分割する平文分割手段と、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得する第1の暗号化手段と、
前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得する第2の暗号化手段と、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する認証用タグ生成手段と、
を有する認証暗号化装置。
【請求項2】
前記平文分割手段は、前記入力長と、前記出力長から前記入力長を減算した長さとの比に基づいて、前記平文を前記第1の平文と前記第2の平文とに分割する、
請求項1に記載の認証暗号化装置。
【請求項3】
前記暗号化関数を用いて前記ナンスを暗号化して、前記第1の値及び前記第2の値を取得するナンス処理手段、
をさらに有する請求項1に記載の認証暗号化装置。
【請求項4】
前記第1の暗号化手段は、前記暗号化関数から出力された暗号化結果のうちの前記入力長に対応するビット数の第1の乱数と前記平文ブロックとの排他的論理和を用いて、前記第1の暗号文を取得する、
請求項1に記載の認証暗号化装置。
【請求項5】
前記第2の暗号化手段は、前記第1の平文の暗号化処理において前記暗号化関数から出力された暗号化結果のうちの前記第1の乱数以外の第2の乱数が連結されて得られた値と前記第2の平文との排他的論理和を用いて、前記第2の暗号文を取得する、
請求項4に記載の認証暗号化装置。
【請求項6】
前記認証用タグ生成手段は、前記第2の値と前記第2の暗号文とを用いて、メッセージ認証コードによる関数により、前記第2のタグを生成する、
請求項5に記載の認証暗号化装置。
【請求項7】
複数の前記平文ブロックの一部の排他的論理和に基づいてチェックサムを計算するチェックサム計算手段、
をさらに有する請求項1に記載の認証暗号化装置。
【請求項8】
前記認証用タグ生成手段は、前記チェックサムと、前記第1の値に基づいて得られるマスク値との排他的論理和を用いて、前記暗号化関数により、前記第1のタグを生成する、
請求項7に記載の認証暗号化装置。
【請求項9】
暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割する暗号文分割手段と、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得する第1の復号手段と、
前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得する第2の復号手段と、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成する検証用タグ生成手段と、
前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う検証手段と、
を有する認証復号装置。
【請求項10】
前記暗号文分割手段は、前記入力長と、前記出力長から前記入力長を減算した長さとの比に基づいて、前記暗号文を前記第1の暗号文と前記第2の暗号文とに分割する、
請求項9に記載の認証復号装置。
【請求項11】
前記暗号化関数を用いて前記ナンスを暗号化して、前記第1の値及び前記第2の値を取得するナンス処理手段、
をさらに有する請求項9に記載の認証復号装置。
【請求項12】
前記第1の復号手段は、前記暗号化関数から出力された暗号化結果のうちの前記入力長に対応するビット数の第1の乱数と前記暗号文ブロックとの排他的論理和を用いて、前記第1の平文を取得する、
請求項9に記載の認証復号装置。
【請求項13】
前記第2の復号手段は、前記第1の暗号文の復号処理において前記暗号化関数から出力された暗号化結果のうちの前記第1の乱数以外の第2の乱数が連結されて得られた値と前記第2の暗号文との排他的論理和を用いて、前記第2の平文を取得する、
請求項12に記載の認証復号装置。
【請求項14】
前記検証用タグ生成手段は、前記第2の値と前記第2の暗号文とを用いて、メッセージ認証コードによる関数により、前記第2のタグを生成する、
請求項13に記載の認証復号装置。
【請求項15】
複数の前記平文ブロックの一部の排他的論理和に基づいてチェックサムを計算するチェックサム計算手段、
をさらに有する請求項9に記載の認証復号装置。
【請求項16】
前記検証用タグ生成手段は、前記チェックサムと、前記第1の値に基づいて得られるマスク値との排他的論理和を用いて、前記暗号化関数により、前記第1のタグを生成する、
請求項15に記載の認証復号装置。
【請求項17】
認証暗号化装置と、
前記認証暗号化装置との間で通信を行う認証復号装置と、
を有し、
前記認証暗号化装置は、
平文を所定の割合で第1の平文と第2の平文とに分割する平文分割手段と、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得する第1の暗号化手段と、
前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得する第2の暗号化手段と、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する認証用タグ生成手段と、
を有し、
前記認証復号装置は、
暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割する暗号文分割手段と、
前記暗号化関数を用いて前記ナンスを暗号化して得られる前記第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得する第1の復号手段と、
前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得する第2の復号手段と、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成する検証用タグ生成手段と、
前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う検証手段と、
を有する、
認証暗号システム。
【請求項18】
平文を所定の割合で第1の平文と第2の平文とに分割し、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得し、
前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得し、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する、
認証暗号化方法。
【請求項19】
暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割し、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得し、
前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得し、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成し、
前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う、
認証復号方法。
【請求項20】
平文を所定の割合で第1の平文と第2の平文とに分割するステップと、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得するステップと、
前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得するステップと、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成するステップと、
をコンピュータに実行させるプログラム。
【請求項21】
暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割するステップと、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得するステップと、
前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得するステップと、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成するステップと、
前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行うステップと、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、認証暗号化装置、認証復号装置、認証暗号システム、方法及びプログラムに関する。
【背景技術】
【0002】
事前に共有された秘密鍵を用いて、平文メッセージに対して暗号化と改ざん検知用の認証タグ計算とを同時に適用する認証暗号(Authenticated Encryption;AE)という技術が知られている。通信路に認証暗号AEを適用することにより、盗聴に対する内容の秘匿と、不正な改ざんに対する検知とが可能となり、結果として通信内容に対する強力な保護が実現される。認証暗号に関する技術としては、例えば、特許文献1及び非特許文献1~非特許文献6に開示された技術が知られている。
【0003】
非特許文献1は、「ChaCha20-Poly1305」という認証暗号化方式を開示する。「ChaCha20-Poly1305」は、「ChaCha20」という暗号化方式と、「Poly1305」という改ざん検知方式とを組み合わせた技術である。「ChaCha20-Poly1305」は、入力長よりも出力長の方が長い暗号プリミティブ(暗号部品)を用いて、暗号化処理を行う。「ChaCha20」は、例えば非特許文献2に開示されている。「Poly1305」は、例えば非特許文献3に開示されている。また、非特許文献4は、「ChaCha20」に関連する「SalSa20」という暗号化方式を開示する。また、非特許文献5は、「SalSa20」の改良版である「XSalSa20」という暗号化方式を開示する。また、非特許文献6は、「ChaCha20」の改良版である「XChaCha20」という暗号化方式を開示する。また、特許文献1は、OTR(Offset Two-Round)方式という認証暗号化方式を開示する。OTRは、実質的に平文の暗号化のみの計算コストで認証暗号を実現する認証暗号化方式である。
【先行技術文献】
【特許文献】
【0004】
【非特許文献】
【0005】
【非特許文献1】Y. Nir, and A. Langley、"ChaCha20 and Poly1305 for IETF Protocols"、June 2018、https://www.rfc-editor.org/rfc/rfc8439.html
【非特許文献2】Daniel J. Bernstein、"ChaCha, a variant of Salsa20"、2008.01.20、https://cr.yp.to/chacha/chacha-20080120.pdf
【非特許文献3】Daniel J. Bernstein、"The Poly1305-AES Message-Authentication Code"、2005.03.29、https://link.springer.com/chapter/10.1007/11502760_3
【非特許文献4】Daniel J. Bernstein、"The Salsa20 family of stream ciphers"、2007.12.25、http://cr.yp.to/snuffle/salsafamily-20071225.pdf
【非特許文献5】Daniel J. Bernstein、"Extending the Salsa20 nonce"、2008.11.28、https://cr.yp.to/snuffle/xsalsa-20081128.pdf
【非特許文献6】S. Arciszewski、"XChaCha: eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305"、January 10, 2020、https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha-03
【発明の概要】
【発明が解決しようとする課題】
【0006】
非特許文献1にかかる技術は、平文を暗号化したのち、暗号文を用いて改ざん検知のためのタグを生成する。したがって、平文の暗号化及びタグの生成のそれぞれについて、実質的に同等の計算コストが発生する。したがって、非特許文献1にかかる技術では、実質的に平文の暗号化のみの計算コストで認証暗号を実現する方式と比較して、効率的に認証暗号化処理を行うことができないおそれがある。
【0007】
本開示の目的は、このような課題を解決するためになされたものであり、入力長よりも出力長の方が長い暗号プリミティブを用いて、効率的に認証暗号化処理を行うことが可能な、認証暗号化装置、認証復号装置、認証暗号システム、方法及びプログラムを提供することにある。
【課題を解決するための手段】
【0008】
本開示にかかる認証暗号化装置は、平文を所定の割合で第1の平文と第2の平文とに分割する平文分割手段と、入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得する第1の暗号化手段と、前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得する第2の暗号化手段と、複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する認証用タグ生成手段と、
を有する。
【0009】
また、本開示にかかる認証復号装置は、暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割する暗号文分割手段と、入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得する第1の復号手段と、前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得する第2の復号手段と、複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成する検証用タグ生成手段と、前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う検証手段と、を有する。
【0010】
また、本開示にかかる認証暗号システムは、認証暗号化装置と、前記認証暗号化装置との間で通信を行う認証復号装置と、を有し、前記認証暗号化装置は、平文を所定の割合で第1の平文と第2の平文とに分割する平文分割手段と、入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得する第1の暗号化手段と、前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得する第2の暗号化手段と、複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する認証用タグ生成手段と、を有し、前記認証復号装置は、暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割する暗号文分割手段と、前記暗号化関数を用いて前記ナンスを暗号化して得られる前記第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得する第1の復号手段と、前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得する第2の復号手段と、複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成する検証用タグ生成手段と、前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う検証手段と、を有する。
【0011】
また、本開示にかかる認証暗号化方法は、平文を所定の割合で第1の平文と第2の平文とに分割し、入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得し、前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得し、複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する。
【0012】
また、本開示にかかる認証復号方法は、暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割し、入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得し、前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得し、複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成し、前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う。
【0013】
また、本開示にかかるプログラムは、平文を所定の割合で第1の平文と第2の平文とに分割するステップと、入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得するステップと、前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得するステップと、複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成するステップと、をコンピュータに実行させる。
【0014】
また、本開示にかかるプログラムは、暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割するステップと、入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得するステップと、前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得するステップと、複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成するステップと、前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行うステップと、をコンピュータに実行させる。
【発明の効果】
【0015】
本開示によれば、入力長よりも出力長の方が長い暗号プリミティブを用いて、効率的に認証暗号化処理を行うことが可能な、認証暗号化装置、認証復号装置、認証暗号システム、方法及びプログラムを提供することが可能な、認証暗号化装置、認証復号装置、認証暗号システム、方法及びプログラムを提供できる。
【図面の簡単な説明】
【0016】
【
図1】第1の比較例にかかる認証暗号化装置の構成を示す図である。
【
図2】第2の比較例にかかる認証暗号化装置の構成を示す図である。
【
図3】実施の形態1にかかる認証暗号システムの構成を示す図である。
【
図4】実施の形態1にかかる認証暗号化装置の構成を示す図である。
【
図5】実施の形態1にかかる認証暗号化装置によって実行される認証暗号化処理における演算の概略を示す図である。
【
図6】実施の形態1にかかる認証暗号化装置によって実行される認証暗号化処理における演算の概略を示す図である。
【
図7】実施の形態1にかかる認証暗号化装置によって実行される認証暗号化処理における演算の概略を示す図である。
【
図8】実施の形態1にかかる認証暗号化装置によって実行される認証暗号化処理における演算の概略を示す図である。
【
図9】実施の形態1にかかる認証暗号化装置によって実行される認証暗号化処理における演算の概略を示す図である。
【
図10】実施の形態1にかかる認証暗号化装置によって実行される認証暗号化処理における演算の概略を示す図である。
【
図11】実施の形態1にかかる認証復号装置の構成を示す図である。
【
図12】実施の形態1にかかる認証復号装置によって実行される認証復号処理における演算の概略を示す図である。
【
図13】実施の形態1にかかる認証復号装置によって実行される認証復号処理における演算の概略を示す図である。
【
図14】実施の形態1にかかる認証復号装置によって実行される認証復号処理における演算の概略を示す図である。
【
図15】実施の形態1にかかる認証復号装置によって実行される認証復号処理における演算の概略を示す図である。
【
図16】実施の形態1にかかる認証復号装置によって実行される認証復号処理における演算の概略を示す図である。
【
図17】実施の形態1にかかる認証暗号化装置で実行される認証暗号化方法を示すフローチャートである。
【
図18】実施の形態1にかかる認証復号装置で実行される認証復号方法を示すフローチャートである。
【
図20】実施の形態2にかかる認証暗号化装置の構成を示す図である。
【
図21】実施の形態2にかかる認証暗号化装置によって実行される認証暗号化処理における演算の概略を示す図である。
【
図22】実施の形態2にかかる認証復号装置の構成を示す図である。
【
図23】実施の形態3にかかる認証暗号化装置の構成を示す図である。
【
図24】実施の形態3にかかる認証復号装置の構成を示す図である。
【
図25】各実施形態に係る装置およびシステムを実現可能な計算処理装置のハードウェア構成例を概略的に示すブロック図である。
【発明を実施するための形態】
【0017】
(本実施の形態の概要)
本実施の形態の説明に先立って、本実施の形態の概要について説明する。なお、以下、本実施の形態を説明するが、以下の実施の形態は請求の範囲にかかる発明を限定するものではない。また、実施の形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。また、以下の説明において、使用されるインデックス(英文字)は、本明細書全体で共通のものとは限らない。例えば、インデックスiは、ある文脈と別の文脈とにおいて、異なるものを意味することがある。また、以下、図面を用いて本実施の形態を説明するが、各実施の形態の説明に用いた各図面は、その実施の形態のみに適用されるのではないことに留意されたい。つまり、各図面は、それぞれ、全ての実施の形態について適用され得る。
【0018】
まず、認証暗号(AE)の基本的な入出力について説明する。なお、以下の説明では、秘密鍵Kを共有する2者としてAliceとBobとの間の通信を考え、AliceからBobへ認証暗号による暗号化を行ったメッセージを通信するものとする。
【0019】
認証暗号の暗号化関数をEncとし、復号関数をDecとする。また、暗号化したい平文をMとし、さらにナンス(Nonce(ノンス))と呼ばれる変数N(初期ベクトル)を導入する。また、関連データ(Associated Data;AD)をAとする。ここで、関連データA(ヘッダ)は、暗号化は行われないが改ざん検知は行われる値である。関連データAは、なくてもよい。
【0020】
まず、Alice側の暗号化処理について説明する。Aliceは、ナンスNを生成後、(C,T)=Enc_K(N,A,M)で表される処理を実行する。ここで、Enc_Kは、秘密鍵である鍵Kをパラメータとした暗号化関数であり、Cは暗号文である。また、Tは、タグ(認証タグ)と呼ばれる、固定長の改ざん検知用の変数である。Aliceは、ナンスN、関連データA、暗号文C及びタグTの組(N,A,C,T)を、Bobに送信する。
【0021】
次に、Bob側の復号処理について説明する。Bobが受信した情報を(N’,A’,C’,T’)とする。この場合、Bobは、復号処理としてDec_K(N’,A’,C’,T’)を実行する。なお、Dec_Kは、鍵Kをパラメータとした復号関数である。通信の途中で第三者Eveによる改ざんがあり、(N’,A’,C’,T’)≠(N,A,C,T)である場合、Dec_K(N’,A’,C’,T’)について、改ざんがあったことを示すエラーメッセージ(エラーシンボル⊥)が出力される。つまり、この場合、改ざんが検出される。一方、通信の途中で改ざんがなく、(N’,A’,C’,T’)=(N,A,C,T)である場合、Dec_K(N’,A’,C’,T’)について、Aliceが暗号化した平文Mが正しく復号される。
【0022】
また、上記の処理においては、通常、暗号化においてナンスNが過去の値と偶然一致してしまわないようにすることが重要である。このために、暗号化側では、カウンタなどの何らかの状態変数を用いて、ナンスの一致を防ぐ。すなわち、典型的には、状態変数として直前に使ったNを記憶しておき、毎回Nをインクリメントすることで、ナンスNが過去の値と重複しないことが、実現される。
【0023】
図1は、第1の比較例にかかる認証暗号化装置70の構成を示す図である。
図1は、非特許文献1にかかるChaCha20-Poly1305の認証暗号化方式を用いて実現される認証暗号化装置70の構成を示している。また、
図1は、第1の比較例にかかる認証暗号化装置70の演算の概略を示す図である。なお、以降の説明において、「ChaCha20-Poly1305」を、単に「CP」と表記することがある。第1の比較例にかかる認証暗号化装置70は、暗号化部72と、鍵生成部74と、タグ生成部76とを有する。
【0024】
暗号化部72は、ランダム関数CC_Kを用いて、上述したChaCha20の暗号化方式により暗号化を行う。ここで、ランダム関数CC_Kは、入力長が128ビットであり、出力長が512ビットである暗号化関数(暗号プリミティブ)である。したがって、ランダム関数CC_Kは、入力長が出力長よりも長い暗号プリミティブである。また、ランダム関数CC_Kには、256ビットの鍵Kが入力される。また、ランダム関数CC_Kは、入力値に対して出力値が見かけ上ランダムである関数である。また、ランダム関数CC_Kの出力値から入力値を求めることは、極めて困難である。また、入力される鍵が異なるランダム関数CC_Kは、それぞれ独立な関数とみなし得る。
【0025】
暗号化部72は、ランダム関数CC_Kを用いたカウンタモードにより、平文Mの暗号化に必要な鍵ストリームZを生成する。そして、暗号化部72は、鍵ストリームZを用いて平文Mを暗号化して、暗号文Cを取得する。
【0026】
ここで、平文Mの長さが512×mビットであるとする。つまり、mは、平文Mを512ビットの平文ブロックに分割したときのブロック数に対応する。この場合、暗号化部72は、m個のランダム関数CC_Kに、それぞれ、32ビットのカウンタ値「1」,「2」,・・・,「m」と、96ビットのナンスNとを入力する。そして、暗号化部72は、各ランダム関数CC_Kから出力された値を連結して得られた、512×mビットの鍵ストリームZを取得する。そして、暗号化部72は、平文Mと鍵ストリームZとの排他的論理和(XOR)により、暗号文Cを取得する。
【0027】
鍵生成部74は、タグ生成部76で使用される鍵R,Sを生成する。具体的には、鍵生成部74は、ランダム関数CC_Kに、32ビットのカウンタ値「0」と、ナンスNとを入力する。そして、鍵生成部74は、ランダム関数CC_Kの出力値の上位256ビットを128ビットずつに分割することで、それぞれ128ビットの鍵R,Sを生成する。
【0028】
タグ生成部76は、上述したPoly1305の改ざん検知方式により、認証用のタグTを生成する。具体的には、タグ生成部76は、暗号文Cと、関連データAと、鍵R,Sとを、Poly1305によるMAC(Message Authentication Code;メッセージ認証コード)関数に入力する。これにより、タグ生成部76は、MAC関数から出力された128ビットのタグTを取得する。なお、関連データAがない場合、関連データAはMAC関数に入力されなくてもよい。
【0029】
さらに具体的には、関連データAがない場合、タグ生成部76は、鍵Rで定義される多項式ハッシュ関数の出力H_R(C)と、鍵Sとの、mod(2^128)における和を計算することによって、タグTを取得する。つまり、タグ生成部76は、鍵Rで定義される多項式ハッシュ関数の出力H_R(C)と鍵Sとを用いて、mod(2^128)で定義される演算を行うことによって、タグTを取得する。つまり、以下の式(1)が成り立つ。
【数1】
・・・(1)
【0030】
また、多項式ハッシュ関数の出力H_R(C)は、以下の式(2)で表される。
【数2】
・・・(2)
【0031】
図2は、第2の比較例にかかる認証暗号化装置80の構成を示す図である。
図2は、特許文献1にかかるOTR方式の認証暗号化方式を用いて実現される認証暗号化装置80の構成を示している。また、
図2は、第2の比較例にかかる認証暗号化装置80の演算の概略を示す図である。
【0032】
ここで、OTR方式は、ブロック暗号を暗号部品(暗号プリミティブ)として利用する認証暗号化方式である。また、OTR方式は、暗号化のレートが「1」である「レート1方式」の認証暗号化方式である。つまり、OTR方式は、1つの平文ブロックについてブロック暗号を1回のみ使用するような、認証暗号化方式である。また、OTR方式は、2段Feistel構造(フェイステル構造)によって暗号化を行う。したがって、暗号化処理と復号処理とで、同じ暗号部品(暗号化関数)が使用される。つまり、復号処理において、暗号化処理で使用される暗号化関数の逆関数である復号関数が、不要となる。以上のような構成により、OTR方式は、暗号化のみを行う利用モードと同等の処理量で認証暗号を実現することができる。
【0033】
第2の比較例にかかる認証暗号化装置80は、暗号化部82と、タグ生成部86とを有する。暗号化部82及びタグ生成部86は、暗号部品(暗号化関数)として、入力長及び出力長がともにnビットのブロック暗号関数E_Kを用いる。
【0034】
暗号化部82は、上述したように、2段Feistel構造によって平文の暗号化を行う。具体的には、暗号化部82は、ブロック暗号関数E_Kを用いてナンスNを暗号化して、値Lを取得する。暗号化部82は、平文の暗号化を行う際に、2段Feistel構造におけるブロック暗号関数E_Kの入力に、値Lから導出されるマスク値の排他的論理和を用いている。なお、各ブロック暗号関数E_Kに対応するマスク値は、互いに異なることが求められる。
【0035】
具体的には、暗号化部82は、平文ブロックM[1],・・・,M[m]における奇数番目の平文ブロックM[2j-1]とその次の偶数番目の平文ブロックM[2j]とのペアそれぞれに対して、2段Feistel構造によって暗号化を行う。なお、jは1以上l以下の整数である。また、mが偶数の場合はl=m/2であり、mが奇数の場合はl=(m+1)/2である。
【0036】
暗号化部82は、平文ブロックM[1]とマスク値Lとの排他的論理和をブロック暗号関数E_Kに入力して、暗号化結果E_K(L,M[1])を取得する。そして、暗号化部82は、暗号化結果E_K(L,M[1])と平文ブロックM[2]との排他的論理和を、平文ブロックM[1]に対応する暗号文ブロックC[1]として取得する。また、暗号化部82は、暗号文ブロックC[1]とマスク値3Lとの排他的論理和をブロック暗号関数E_Kに入力して、暗号化結果E_K(3L,C[1])を取得する。そして、暗号化部82は、暗号化結果E_K(3L,C[1])と平文ブロックM[1]との排他的論理和を、平文ブロックM[2]に対応する暗号文ブロックC[2]として取得する。
【0037】
また、暗号化部82は、平文ブロックM[3]とマスク値2Lとの排他的論理和をブロック暗号関数E_Kに入力して、暗号化結果E_K(2L,M[3])を取得する。そして、暗号化部82は、暗号化結果E_K(2L,M[3])と平文ブロックM[4]との排他的論理和を、平文ブロックM[3]に対応する暗号文ブロックC[3]として取得する。また、暗号化部82は、暗号文ブロックC[3]とマスク値2・3Lとの排他的論理和をブロック暗号関数E_Kに入力して、暗号化結果E_K(2・3L,C[3])を取得する。そして、暗号化部82は、暗号化結果E_K(2・3L,C[3])と平文ブロックM[3]との排他的論理和を、平文ブロックM[4]に対応する暗号文ブロックC[4]として取得する。
【0038】
以下同様にして、暗号化部82は、平文ブロックM[2j-1]とマスク値2^(j-1)・Lとの排他的論理和をブロック暗号関数E_Kに入力して、暗号化結果E_K(2^(j-1)・L,M[2j-1])を取得する。そして、暗号化部82は、暗号化結果E_K(2^(j-1)・L,M[2j-1])と平文ブロックM[2j]との排他的論理和を、平文ブロックM[2j-1]に対応する暗号文ブロックC[2j-1]として取得する。また、暗号化部82は、暗号文ブロックC[2j-1]とマスク値2^(j-1)・3Lとの排他的論理和をブロック暗号関数E_Kに入力して、暗号化結果E_K(2^(j-1)・3L,C[2j-1])を取得する。そして、暗号化部82は、暗号化結果E_K(2^(j-1)・3L,C[2j-1])と平文ブロックM[2j-1]との排他的論理和を、平文ブロックM[2j]に対応する暗号文ブロックC[2j]として取得する。
【0039】
なお、mが奇数の場合と偶数の場合とで、最終平文ブロックに対する処理が互いに異なる。mが偶数の場合、暗号化部82は、平文ブロックM[m-1]とマスク値2^(l-1)・Lとの排他的論理和をブロック暗号関数E_Kに入力して、暗号化結果Zを取得する。なお、Z=E_K(2^(l-1)・L,M[m-1])である。ここで、最終平文ブロックM[m]のビット長xは、nビットに満たない場合がある。そこで、暗号化部82は、暗号化結果Zを平文ブロックM[m]のビット長x(1≦x≦n)になるように切り詰めたmsb{|M[m]|}(Z)を取得する。なお、msb{|M[m]|}(Z)は、暗号化結果Zの上位xビットのビット列である。また、x=|M[m]|である。つまり、|M[i]|は、ビット列M[i]のビット長を示す。
【0040】
そして、暗号化部82は、msb{|M[m]|}(Z)と平文ブロックM[m]との排他的論理和を、平文ブロックM[m]に対応する暗号文ブロックC[m]として取得する。なお、暗号文ブロックC[m]のビット数は、平文ブロックM[m]のビット数と同じである。また、暗号化部82は、暗号文ブロックC[m]に対してone-zeroパディング処理等のパディング処理を行って、暗号文ブロックC[m]に対応するnビットのビット列pad(C[m])を取得する。また、暗号化部82は、ビット列pad(C[m])とマスク値2^(l-1)・3Lとの排他的論理和をブロック暗号関数E_Kに入力して、暗号化結果E_K(2^(l-1)・3L,pad(C[m]))を取得する。そして、暗号化部82は、暗号化結果E_K(2^(l-1)・3L,pad(C[m]))と平文ブロックM[m-1]との排他的論理和を、平文ブロックM[m-1]に対応する暗号文ブロックC[m-1]として取得する。
【0041】
mが奇数の場合、暗号化部82は、マスク値2^(l-1)・Lをブロック暗号関数E_Kに入力して、暗号化結果E_K(2^(l-1)・L)を取得する。そして、暗号化部82は、暗号化結果E_K(2^(l-1)・L)を平文ブロックM[m]のビット数xになるように切り詰めたmsb{|M[m]|}(E_K(2^(l-1)・L))を取得する。そして、暗号化部82は、msb{|M[m]|}(E_K(2^(l-1)・L))と平文ブロックM[m]との排他的論理和を、平文ブロックM[m]に対応する暗号文ブロックC[m]として取得する。なお、暗号文ブロックC[m]のビット数は、平文ブロックM[m]のビット数と同じである。
【0042】
タグ生成部86は、偶数番目の平文ブロックの排他的論理和により、チェックサムΣを取得する。mが偶数である場合、チェックサムΣは、以下の式3で表される。なお、円の中に「+」が描かれた記号は、排他的論理和(XOR)を示す。
【数3】
・・・(3)
【0043】
mが奇数である場合、チェックサムΣは、以下の式4で表される。
【数4】
・・・(4)
【0044】
タグ生成部86は、得られたチェックサムΣと適切なマスク値との排他的論理和をブロック暗号関数E_Kに入力して得られた暗号化結果を、認証用のタグTとして取得する。なお、|M[m]|≠nである場合、つまり最終平文ブロックM[m]のビット数がnでない場合、「適切なマスク値」は、32L*である。また、|M[m]|=nである場合、つまり最終平文ブロックM[m]のビット数がnである場合、「適切なマスク値」は、7L*である。なお、mが偶数である場合、L*=2^(l-1)・3Lである。また、mが奇数である場合、L*=2^(l-1)・Lである。
【0045】
ここで、計算コストという観点から、第1の比較例にかかる問題点について説明する。第2の比較例にかかるOTR方式は、暗号化のレートが「1」である「レート1方式」の認証暗号化方式である。これに対し、第1の比較例にかかるChaCha20-Poly1305の方式では、平文を暗号化したのち、暗号文を用いて改ざん検知のためのタグを生成する。したがって、第1の比較例にかかるChaCha-Poly1305の方式では、レート1方式と比較して、平文長に対する計算コストが増大する。つまり、第1の比較例にかかるChaCha-Poly1305の方式では、レート1方式と比較して、効率的に認証暗号化処理を行うことができないおそれがある。したがって、第1の比較例にかかるChaCha-Poly1305の方式で使用される暗号プリミティブを用いても、計算コストがレート1方式の計算コストにできるだけ近くなるようにすることが望まれる。さらに、第1の比較例にかかるChaCha-Poly1305の方式で使用される暗号プリミティブは、復号関数がないランダム関数CC_Kである。したがって、復号関数がない暗号プリミティブを用いても計算コストがレート1方式の計算コストにできるだけ近くなるようにすることが望まれる。
【0046】
これに対し、以下に説明するように、本実施の形態では、第2の比較例にかかるOTR方式で使用される暗号プリミティブが、第1の比較例にかかるChaCha20-Poly1305の方式で使用されるような暗号プリミティブに置き換えられている。言い換えると、本実施の形態では、第2の比較例にかかるOTR方式で使用されるブロック暗号関数E_Kが、第1の比較例にかかるChaCha20-Poly1305の方式で使用されるランダム関数CC_Kのような暗号プリミティブに置き換えられている。ここで、ランダム関数CC_Kでは、入力長が128ビットであるのに対し、出力長が512ビットである。したがって、単純にOTR方式で使用されるブロック暗号関数E_Kをランダム関数CC_Kに置き換えるのみだと、出力長と入力長との差分の384ビットのビット列が余ることとなる。そこで、本実施の形態にかかる装置では、この384ビットの余剰ビット列も用いて、認証暗号化処理を行う。
【0047】
すなわち、本実施の形態にかかる装置は、平文を第1の平文と第2の平文とに分割する。本実施の形態にかかる装置は、第1の平文に対して、OTR方式で使用されるブロック暗号関数E_Kをランダム関数CC_Kに置き換えたような構成を用いて、第1の暗号文及び第1のタグを生成する。つまり、本実施の形態にかかる装置は、第1の平文に対して、上述したOTR方式に対応する処理を行う。ただし、本実施の形態にかかる装置は、第1の平文の暗号化の際に、ランダム関数CC_Kのような、入力長よりも出力長の方が長い暗号プリミティブを用いる。なお、本実施の形態にかかる装置は、第1の平文の暗号化の際に、暗号プリミティブとしてランダム関数CC_Kを用いなくてもよい。つまり、本実施の形態にかかる装置は、入力長よりも出力長の方が長い暗号プリミティブであれば、ランダム関数CC_K以外の暗号プリミティブを用いてもよい。
【0048】
さらに、本実施の形態にかかる装置は、第2の平文と、上述した384ビットの余剰ビット列とを用いて、第2の暗号文及び第2のタグを生成する。すなわち、本実施の形態にかかる装置は、余剰ビット列の連結を鍵ストリームとして、第2の平文とこの鍵ストリームとの排他的論理和により、第2の暗号文を生成する。なお、本実施の形態にかかる装置は、第2の暗号文をPoly1305によるMAC関数に入力することで、第2のタグを生成する。つまり、本実施の形態にかかる装置は、第2の平文に対して、上述したChaCha20-Poly1305に対応する処理を行う。
【0049】
以上のような構成により、本実施の形態にかかる装置は、第1の比較例で使用されるような、入力長が出力長よりも長い暗号プリミティブを用いても、第1の比較例よりも計算コストが抑制された認証暗号を実現することができる。つまり、本実施の形態にかかる装置は、入力長が出力長よりも長い暗号プリミティブを用いても、効率的に認証暗号処理を行うことが可能となる。すなわち、本実施の形態にかかる装置は、第1の比較例と比較して、必要なランダム関数CC_Kの呼び出し回数をほとんど変化させず、Poly1305によるMAC関数に入力されるデータサイズを大きく削減することができる。
【0050】
なお、本実施の形態にかかる装置は、第2の平文と余剰ビット列とを用いて第2のタグを生成する際に、安全性の観点から、Poly1305によるMAC関数を用いる。すなわち、認証暗号における安全な改ざん検知のためには、暗号文を1ビットでも改ざんした場合にタグを偽造することが困難となる必要がある。ここで、例えば、「第2の平文と余剰ビット列の連結から得られた鍵ストリームとの排他的論理和により得られた第2の暗号文の改ざん検知」のために、OTR方式と同様の手法を採用したと仮定する。つまり、平文ブロックの和(XOR)によりチェックサムを計算してこのチェックサムを暗号化してタグを生成するような方法を採用すると仮定する。この場合、以下のように、改ざんを容易に行うことが可能となってしまう。すなわち、改ざん者は、偽造された暗号文と正当な暗号文との差分を適切に調整することで、容易に、チェックサムの値を正当なチェックサムと同じ値にすることができる。改ざん者は、このようにして暗号文を改ざんすることにより、タグの偽造が可能になる。これに対し、本実施の形態のように、第2の暗号文をMAC関数に入力することによってタグを生成することにより、より確実に安全性を確保することが可能となる。
【0051】
(実施の形態1)
以下、実施の形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。なお、上述したように、実施の形態1にかかる認証暗号化装置は、第2の比較例で使用された暗号プリミティブが、第1の比較例で使用される暗号プリミティブに置き換えられた構成に対応する。なお、以下の説明において、実施の形態1では、暗号プリミティブとして、第1の比較例で使用されるランダム関数CC_Kが用いられるとしたが、このような構成に限られない。暗号プリミティブとして、入力長よりも出力長の方が長い任意の暗号プリミティブが用いられ得る。
【0052】
図3は、実施の形態1にかかる認証暗号システム1の構成を示す図である。認証暗号システム1は、認証暗号化装置10と、認証復号装置20とを有する。認証暗号化装置10及び認証復号装置20は、物理的に一体であってもよいし、別個であってもよい。認証暗号化装置10及び認証復号装置20が物理的に互いに別個である場合、認証暗号化装置10及び認証復号装置20は、有線又は無線を介して通信可能に接続されている。また、後述する認証暗号化装置10の構成要素が、互いに別の装置で実現されてもよい。同様に、後述する認証復号装置20それぞれの構成要素が、互いに別の装置で実現されてもよい。また、上述したAliceとBobとの間の通信の例において、認証暗号化装置10はAliceに対応し、認証復号装置20はBobに対応する。つまり、認証暗号化装置10及び認証復号装置20との間で通信が行われる。
【0053】
<認証暗号化装置>
図4は、実施の形態1にかかる認証暗号化装置10の構成を示す図である。また、
図5~
図10は、実施の形態1にかかる認証暗号化装置10によって実行される認証暗号化処理における演算の概略を示す図である。
図4に示すように、実施の形態1にかかる認証暗号化装置10は、入力部100と、平文分割部102と、ナンス処理部104とを有する。さらに、実施の形態1にかかる認証暗号化装置10は、第1暗号化部110と、第2暗号化部120と、チェックサム計算部130と、第1タグ生成部140と、第2タグ生成部150と、タグ統合部160と、出力部170とを有する。また、第1タグ生成部140、第2タグ生成部150及びタグ統合部160により、認証用タグ生成部162が構成される。つまり、認証暗号化装置10は、認証用タグ生成部162を有する。
【0054】
認証暗号化装置10は、例えばコンピュータ等の情報処理装置によって実現可能である。つまり、認証暗号化装置10は、CPU(Central Processing Unit)などの演算装置と、メモリ又はディスクなどの記憶装置とを有している。認証暗号化装置10は、例えば、記憶装置に格納されたプログラムを演算装置が実行することで、上記の各構成要素を実現する。このことは、後述する他の実施の形態においても同様である。
【0055】
入力部100は、入力手段としての機能を有する。平文分割部102は、平文分割手段としての機能を有する。ナンス処理部104は、ナンス処理手段としての機能を有する。第1暗号化部110は、第1の暗号化手段としての機能を有する。第2暗号化部120は、第2の暗号化手段としての機能を有する。チェックサム計算部130は、チェックサム計算手段としての機能を有する。第1タグ生成部140は、第1のタグ生成手段としての機能を有する。第2タグ生成部150は、第2のタグ生成手段としての機能を有する。タグ統合部160は、タグ統合手段(第1のタグ統合手段)としての機能を有する。認証用タグ生成部162は、認証用タグ生成手段としての機能を有する。出力部170は、出力手段としての機能を有する。
【0056】
入力部100は、ナンスN、暗号化の対象となる平文M、及び関連データAの入力を受け付ける。入力部100は、例えば、キーボードなどの入力装置により実現されてもよい。入力部100は、例えば、ネットワークを介して接続された外部装置などから、ナンスN、平文M及び関連データAの入力を受け付けてもよい。なお、関連データAが存在しない場合もあり、この場合は、関連データAは入力されない。
【0057】
なお、入力部100が、ナンスNを生成してもよい。この場合、過去の値と重複がないようにナンスNを生成する。つまり、入力部100は、過去に生成された値とは異なるナンスNを生成する。具体的には、例えば、入力部100は、最初に任意の固定値を生成する。また、入力部100は、直前に生成したナンスの値を記憶している。そして、入力部100は、2回目以降にナンスNを生成する際に、記憶された直前の値に1を加えた値を出力する。このように、入力部100は、1つ前に既に出力した値に1を加えた値を出力することで、過去に生成した値とは異なるナンスNを生成してもよい。なお、入力部100は、過去に生成した値とは異なる値を生成可能ならば、上述した例とは異なる方法でナンスを生成してもよい。あるいは、ナンス生成部のような他の構成要素が、ナンスNを生成してもよい。
【0058】
入力部100は、平文Mを、平文分割部102に出力する。また、入力部100は、ナンスNを、ナンス処理部104に出力する。また、入力部100は、関連データAを、第2タグ生成部150に出力する。
【0059】
平文分割部102は、平文Mを、所定の割合で、第1の平文M_Oと第2の平文M_Cとに分割する。具体的には、平文分割部102は、|M_O|:|M_C|=128:384となるように、平文Mを、第1の平文M_Oと第2の平文M_Cとに分割する。つまり、平文分割部102は、入力長n1と、出力長n2から入力長n1を減算した長さn3との比に基づいて、平文Mを、第1の平文M_Oと第2の平文M_Cとに分割する。言い換えると、平文分割部102は、比n1:n3に基づいて、平文Mを、第1の平文M_Oと第2の平文M_Cとに分割する。なお、n1は、暗号プリミティブであるランダム関数CC_Kの入力長であり、n1=128ビットである。また、n2は、暗号プリミティブであるランダム関数CC_Kの出力長であり、n2=512ビットである。したがって、n3=512-128=384ビットである。
【0060】
さらに具体的には、平文分割部102は、平文Mを、暗号プリミティブの出力長に対応する長さに分割する。つまり、平文分割部102は、平文Mを、それぞれn2=512ビットの平文部分M[1],・・・,M[m]に分割する。なお、mは、平文部分の数である。なお、平文Mのビット長が512の倍数でない場合、|M[m]|<512となる。
【0061】
平文分割部102は、i=1,・・・,mのそれぞれについて、512ビットの平文部分M[i]を、128ビットの平文ブロックM_O[i]と384ビットの平文ブロックM_C[i]とに分割する。つまり、平文分割部102は、平文部分M[i]を、n1ビットの平文ブロックM_O[i]とn3ビットの平文ブロックM_C[i]とに分割する。これにより、平文分割部102は、M_O=M_O[1]||M_O[2]||・・・||M_O[m]である第1の平文M_Oを取得する。また、平文分割部102は、M_C=M_C[1]||M_C[2]||・・・||M_C[m]である第2の平文M_Cを取得する。なお、「||」はビット列の連結を示す。|M[m]|=512の場合、|M_O|:|M_C|=128:384となる。なお、後述するように、第1の平文M_Oは、暗号プリミティブをランダム関数CC_Kとして、OTR方式により、処理される。また、第2の平文M_Cは、ChaCha20-Poly1305の方式で処理される。平文分割部102は、第1の平文M_Oを第1暗号化部110に出力する。また、平文分割部102は、第2の平文M_Cを第2暗号化部120に出力する。
【0062】
なお、128<|M[m]|<512の場合、平文分割部102は、平文部分M[m]を、128ビットのM_O[m]と384ビット未満のM_C[m]とに分割してもよい。そして、|M[m]|≦128の場合、平文分割部102は、平文部分M[m]を、128ビット未満のM_O[m]と0ビットのM_C[m]とに分割してもよい。つまり、|M[m]|≦128の場合、平文分割部102は、平文部分M[m]をそのままM_O[m]としてもよい。
【0063】
ナンス処理部104は、ランダム関数CC_Kを用いてナンスNを処理する。具体的には、
図5に示すように、ナンス処理部104は、128ビットのナンスNをランダム関数CC_Kに入力して、出力された512ビットのビット列(乱数)を取得する。また、ナンス処理部104は、512ビットのビット列を、それぞれ128ビット(=n1)のビット列L_1,L_2,L_3,L_4に分割する。そして、ナンス処理部104は、ビット列L_1,L_2を第1暗号化部110に出力する。また、ナンス処理部104は、ビット列L_3,L_4を第2タグ生成部150に出力する。なお、ビット列L_1,L_2(第1の値)は、第1の平文M_Oの暗号化処理の際に用いられるマスク値を取得するために使用される。また、ビット列L_3,L_4(第2の値)は、第2の平文M_Cに対応する第2のタグT_Cを生成する際に用いられる鍵として使用される。つまり、ビット列L_3,L_4は、上述した鍵R,Sに対応する。
【0064】
第1暗号化部110は、ランダム関数CC_Kを用いて、OTR方式により、第1の平文M_Oを暗号化する。このとき、第1暗号化部110は、ビット列L_1,L_2に基づいて得られるマスク値を用いて、第1の平文M_Oが分割された平文ブロックM_O[1],・・・,M_O[m]を暗号化する。つまり、第1暗号化部110は、ランダム関数CC_Kを用いてナンスNを暗号化して得られる値L_1,L_2に基づいて得られるマスク値と、複数の平文ブロックM_O[i]それぞれとを用いて、ランダム関数CC_Kにより第1の暗号文C_Oを取得する。また、第1暗号化部110は、ランダム関数CC_K(暗号化関数)から出力された暗号化結果のうちの入力長に対応するビット数の第1の乱数と平文ブロックとの排他的論理和を用いて、第1の暗号文C_Oを取得する。ここで、第1の暗号文C_Oは、第1の平文M_Oが暗号化された値に対応する。また、上述したように、複数の平文ブロックM_O[i]は、第1の平文M_Oがランダム関数CC_Kの入力長に対応する長さに分割されて得られる。
【0065】
具体的には、
図6に示すように、第1暗号化部110は、平文ブロックM_O[2j-1]と平文ブロックM_O[2j]とのペアそれぞれに対して、2段Feistel構造によって暗号化を行う。ここで、平文ブロックM_O[2j-1]は、平文ブロックM_O[1],・・・,M_O[m]における奇数番目の平文ブロックである。また、平文ブロックM_O[2j]は、平文ブロックM_O[2j-1]の次の偶数番目の平文ブロックである。なお、jは1以上l以下の整数である。また、mが偶数の場合はl=m/2であり、mが奇数の場合はl=(m+1)/2である。後述するように、第1暗号化部110は、ランダム関数CC_K(暗号化関数)から出力された暗号化結果のうちの入力長n1に対応するビット数の第1の乱数と平文ブロックM_O[i]との排他的論理和を用いて、第1の暗号文C_Oを取得する。なお、第1の乱数は、後述する乱数z_iに対応する。
【0066】
第1暗号化部110は、128ビットの平文ブロックM_O[1]と128ビットのマスク値L_1との排他的論理和をランダム関数CC_Kに入力する。これにより、第1暗号化部110は、512ビット(=n2)の暗号化結果CC_K(L_1,M_O[1])を取得する。そして、第1暗号化部110は、暗号化結果CC_K(L_1,M_O[1])を、128ビット(=n1)の乱数z_1と384ビット(=n3)の乱数S_1とに分割する。例えば、第1暗号化部110は、暗号化結果CC_K(L_1,M_O[1])の上位128ビットを乱数z_1とし、下位384ビットを乱数S_1としてもよい。このことは、i=1以外の平文ブロックM_O[i]についても同様である。ここで、乱数S_1は、上述した余剰ビット列に対応する。
【0067】
そして、第1暗号化部110は、乱数z_1と平文ブロックM_O[2]との排他的論理和を、平文ブロックM_O[1]に対応する暗号文ブロックC_O[1]として取得する。また、第1暗号化部110は、暗号文ブロックC_O[1]とマスク値L_2との排他的論理和をランダム関数CC_Kに入力して、暗号化結果CC_K(L_2,C_O[1])を取得する。そして、第1暗号化部110は、暗号化結果CC_K(L_2,C_O[1])を、128ビット(=n1)の乱数z_2と384ビット(=n3)の乱数S_2とに分割する。そして、第1暗号化部110は、乱数z_2と平文ブロックM_O[1]との排他的論理和を、平文ブロックM_O[2]に対応する暗号文ブロックC_O[2]として取得する。ここで、乱数S_2は、上述した余剰ビット列に対応する。
【0068】
また、第1暗号化部110は、128ビットの平文ブロックM_O[3]と128ビットのマスク値2・L_1との排他的論理和をランダム関数CC_Kに入力する。これにより、第1暗号化部110は、512ビットの暗号化結果CC_K(2・L_1,M_O[3])を取得する。そして、第1暗号化部110は、暗号化結果CC_K(2・L_1,M_O[3])を、128ビット(=n1)の乱数z_3と384ビット(=n3)の乱数S_3とに分割する。ここで、乱数S_3は、上述した余剰ビット列に対応する。
【0069】
そして、第1暗号化部110は、乱数z_3と平文ブロックM_O[4]との排他的論理和を、平文ブロックM_O[3]に対応する暗号文ブロックC_O[3]として取得する。また、第1暗号化部110は、暗号文ブロックC_O[3]とマスク値2・L_2との排他的論理和をランダム関数CC_Kに入力して、暗号化結果CC_K(2・L_2,C_O[3])を取得する。そして、第1暗号化部110は、暗号化結果CC_K(2・L_2,C_O[3])を、128ビット(=n1)の乱数z_4と384ビット(=n3)の乱数S_4とに分割する。そして、第1暗号化部110は、乱数z_4と平文ブロックM_O[3]との排他的論理和を、平文ブロックM_O[4]に対応する暗号文ブロックC_O[4]として取得する。ここで、乱数S_4は、上述した余剰ビット列に対応する。
【0070】
以下同様にして、第1暗号化部110は、128ビットの平文ブロックM_O[2j-1]と128ビットのマスク値2^(j-1)・L_1との排他的論理和をランダム関数CC_Kに入力する。これにより、第1暗号化部110は、512ビットの暗号化結果CC_K(2^(j-1)・L_1,M_O[2j-1])を取得する。そして、第1暗号化部110は、暗号化結果CC_K(2^(j-1)・L_1,M_O[2j-1])を、128ビット(=n1)の乱数z_(2j-1)と384ビット(=n3)の乱数S_(2j-1)とに分割する。ここで、乱数S_(2j-1)は、上述した余剰ビット列に対応する。
【0071】
そして、第1暗号化部110は、乱数z_(2j-1)と平文ブロックM_O[2j]との排他的論理和を、平文ブロックM_O[2j-1]に対応する暗号文ブロックC_O[2j-1]として取得する。また、第1暗号化部110は、暗号文ブロックC_O[2j-1]とマスク値2^(j-1)・L_2との排他的論理和をランダム関数CC_Kに入力して、暗号化結果CC_K(2^(j-1)・L_2,C_O[2j-1])を取得する。そして、第1暗号化部110は、暗号化結果CC_K(2^(j-1)・L_2,C_O[2j-1])を、128ビット(=n1)の乱数z_(2j)と384ビット(=n3)の乱数S_(2j)とに分割する。そして、第1暗号化部110は、乱数z_(2j)と平文ブロックM_O[2j-1]との排他的論理和を、平文ブロックM_O[2j]に対応する暗号文ブロックC_O[2j]として取得する。ここで、乱数S_(2j)は、上述した余剰ビット列に対応する。
【0072】
なお、mが奇数の場合と偶数の場合とで、最終平文ブロックに対する処理が互いに異なる。mが偶数の場合、第1暗号化部110は、
図7で示すような処理を行う。第1暗号化部110は、128ビット(=n1)の平文ブロックM_O[m-1]と128ビット(=n1)のマスク値2^(l-1)・L_1との排他的論理和をランダム関数CC_Kに入力する。これにより、第1暗号化部110は、512ビット(=n2)の暗号化結果CC_K(2^(l-1)・L_1,M_O[m-1])を取得する。そして、第1暗号化部110は、暗号化結果CC_K(2^(l-1)・L_1,M_O[m-1])を、128ビット(=n1)の乱数z_(m-1)と384ビット(=n3)の乱数S_(m-1)とに分割する。ここで、Z=z_(m-1)とする。ここで、乱数S_(m-1)は、上述した余剰ビット列に対応する。
【0073】
そして、第1暗号化部110は、乱数Zを平文ブロックM_O[m]のビット長x(1≦x≦n1(=128))になるように切り詰めたmsb{|M_O[m]|}(Z)を取得する。そして、第1暗号化部110は、msb{|M_O[m]|}(Z)と平文ブロックM_O[m]との排他的論理和を、平文ブロックM_O[m]に対応する暗号文ブロックC_O[m]として取得する。なお、暗号文ブロックC_O[m]のビット数は、平文ブロックM_O[m]のビット数と同じである。
【0074】
また、第1暗号化部110は、暗号文ブロックC_O[m]に対してone-zeroパディング処理等のパディング処理を行って、暗号文ブロックC_O[m]に対応する128ビット(=n1)のビット列pad(C_O[m])を取得する。また、第1暗号化部110は、ビット列pad(C_O[m])とマスク値2^(l-1)・L_2との排他的論理和をランダム関数CC_Kに入力して、暗号化結果CC_K(2^(l-1)・L_2,pad(C_O[m]))を取得する。そして、第1暗号化部110は、暗号化結果CC_K(2^(l-1)・L_2,pad(C_O[m]))を、128ビット(=n1)の乱数z_mと384ビット(=n3)の乱数S_mとに分割する。そして、第1暗号化部110は、乱数z_mと平文ブロックM_O[m-1]との排他的論理和を、平文ブロックM_O[m-1]に対応する暗号文ブロックC_O[m-1]として取得する。ここで、乱数S_mは、上述した余剰ビット列に対応する。
【0075】
mが奇数の場合、第1暗号化部110は、
図8で示すような処理を行う。第1暗号化部110は、マスク値2^(l-1)・L_1をランダム関数CC_Kに入力して、暗号化結果CC_K(2^(l-1)・L_1)を取得する。そして、第1暗号化部110は、暗号化結果CC_K(2^(l-1)・L_1)を、128ビット(=n1)の乱数z_mと384ビット(=n3)の乱数S_mとに分割する。そして、第1暗号化部110は、乱数z_mを平文ブロックM_O[m]のビット長x(1≦x≦n1(=128))になるように切り詰めたmsb{|M_O[m]|}(z_m)を取得する。そして、第1暗号化部110は、msb{|M_O[m]|}(z_m)と平文ブロックM_O[m]との排他的論理和を、平文ブロックM_O[m]に対応する暗号文ブロックC_O[m]として取得する。なお、暗号文ブロックC_O[m]のビット数は、平文ブロックM_O[m]のビット数と同じである。
【0076】
第1暗号化部110は、暗号文ブロックC_O[1],・・・,C_O[m]を、第1の暗号文C_Oとして、出力部170に出力する。このとき、第1暗号化部110は、暗号文ブロックC_O[1],・・・,C_O[m]が連結されたC_O(=C_O[1]||・・・||C_O[m])を、出力部170に出力してもよい。
【0077】
また、第1暗号化部110は、余剰ビット列に対応する乱数S_1,S_2,・・・,S_mを連結して、384×mビットの乱数Sを取得する。つまり、S=S_1||S_2||・・・||S_mである。なお、厳密には、|S|=384×mとなるのは、|M|=512×mである場合であることに留意されたい。そして、第1暗号化部110は、乱数Sを第2暗号化部120に出力する。なお、第1暗号化部110は、乱数S_1,S_2,・・・,S_mを連結しないで第2暗号化部120に出力してもよい。この場合、第2暗号化部120が、乱数S_1,S_2,・・・,S_mを連結して、384×mビット(=n3×m)の乱数Sを取得してもよい。
【0078】
ここで、第1の平文M_Oの暗号化において暗号化関数であるランダム関数CC_Kから出力された暗号化結果のうち、値z_1,・・・,z_mは、第1の平文M_Oの暗号化で用いられる。これに対し、ランダム関数CC_Kから出力された暗号化結果のうち、乱数S_1,S_2,・・・,S_m(乱数S)は、第1の平文M_Oの暗号化で用いられる値以外の値である。
【0079】
チェックサム計算部130は、複数の平文ブロックM_O[i]の一部の排他的論理和に基づいてチェックサムΣを計算する。具体的には、チェックサム計算部130は、偶数番目の平文ブロックM_O[2],M_O[4],・・・の排他的論理和により、チェックサムΣを計算する。さらに具体的には、mが偶数である場合、チェックサム計算部130は、以下の式5で表されるようにして、128ビット(=n1)のチェックサムΣを計算する。
【数5】
・・・(5)
【0080】
一方、mが奇数である場合、チェックサム計算部130は、以下の式6で表されるようにして、128ビット(=n1)のチェックサムΣを計算する。
【数6】
・・・(6)
【0081】
ここで、チェックサム計算部130がC_O[m]に対してone-zeroパディング処理を行う場合、式5の「pad(C_O[m])」は、ozp(C_O[m])と表され得る。同様に、チェックサム計算部130がM_O[m]に対してone-zeroパディング処理を行う場合、式6の「pad(M_O[m])」は、ozp(M_O[m])と表され得る。これらのことは、他のpad()についても同様である。チェックサム計算部130は、得られたチェックサムΣを、第1タグ生成部140に出力する。
【0082】
認証用タグ生成部162の第1タグ生成部140は、認証用のタグを生成するための第1のタグT_Oを生成する。第1タグ生成部140は、チェックサムΣを用いて、OTR方式により、第1のタグT_Oを生成する。具体的には、
図9に示すように、第1タグ生成部140は、チェックサムΣと適切なマスク値L^*とを用いて、暗号化関数であるランダム関数CC_Kにより、第1のタグT_O(第1の部分タグ)を生成する。ここで、マスク値L^*は、後述するように、ビット列L_1,L_2に基づいて得られる。つまり、第1タグ生成部140は、複数の平文ブロックの一部の排他的論理和に基づいて得られる値(チェックサムΣ)と、ビット列L_1,L_2(第1の値)に基づいて得られるマスク値L^*とを用いて、暗号化関数により、第1のタグT_Oを生成する。
【0083】
さらに具体的には、第1タグ生成部140は、128ビット(=n1)のチェックサムΣと128ビット(=n1)のマスク値L^*との排他的論理和を用いて、ランダム関数CC_Kにより、128ビット(=n1)の第1のタグT_Oを生成する。第1タグ生成部140は、チェックサムΣとマスク値L^*との排他的論理和をランダム関数CC_Kに入力して得られた暗号化結果を、第1のタグT_Oとして取得する。第1タグ生成部140は、生成された第1のタグT_Oを、タグ統合部160に出力する。
【0084】
ここで、mが偶数であり且つ|M[m]|=n1(=128ビット)である場合、L^*=3・2^(l-1)・L_2であってもよい。また、mが偶数であり且つ|M[m]|≠n1である場合、L^*=3^2・2^(l-1)・L_2であってもよい。また、mが奇数であり且つ|M[m]|=n1である場合、L^*=3・2^(l-1)・L_1であってもよい。また、mが奇数であり且つ|M[m]|≠n1である場合、L^*=3^2・2^(l-1)・L_1であってもよい。なお、上記の例では、3倍算を用いてマスク値L^*が求められるが、マスク値L^*の求め方は、これに限定されない。例えば、7倍算を用いてマスク値L^*が求められてもよい。
【0085】
第2暗号化部120は、ChaCha20-Poly1305の方式(CP方式)により、第2の平文M_Cの暗号化を行う。具体的には、
図10に示すように、第2暗号化部120は、乱数Sを鍵ストリームとして用いて平文M_Cを暗号化する。これにより、第2暗号化部120は、第2の平文M_Cが暗号化された第2の暗号文C_Cを取得する。つまり、第2暗号化部120は、乱数S(第2の乱数)と第2の平文M_Cとを用いて、第2の平文M_Cが暗号化された第2の暗号文C_Cを取得する。なお、上述したように、乱数S(S_1、S_2、・・・)は、第1の平文M_Oの暗号化においてランダム関数CC_K(暗号化関数)から出力された暗号化結果のうちの第1の平文M_Oの暗号化に用いられる値(乱数z;第1の乱数)以外の値である。
【0086】
さらに具体的には、第2暗号化部120は、乱数S_1,S_2,・・・,S_m(第2の乱数)が連結されて得られた値(乱数S)と第2の平文M_Cとの排他的論理和を用いて、第2の暗号文C_Cを取得する。すなわち、第2暗号化部120は、乱数S(=S_1||S_2||・・・||S_m)を第2の平文M_Cのビット数になるように切り詰めたmsb{|M_C|}(S)を取得する。そして、第2暗号化部120は、msb{|M_C|}(S)と第2の平文M_Cとの排他的論理和を、第2の平文M_Cに対応する第2の暗号文C_Cとして取得する。第2暗号化部120は、第2の暗号文C_Cを、第2タグ生成部150と出力部170とに出力する。
【0087】
認証用タグ生成部162の第2タグ生成部150は、認証用のタグを生成するための第2のタグT_Cを生成する。第2タグ生成部150は、第2の暗号文C_Cを用いて、CP方式により、第2のタグT_Cを生成する。具体的には、
図10に示すように、第2タグ生成部150は、ランダム関数CC_Kを用いてナンスNを暗号化して得られるビット列L_3,L_4(第2の値)と、第2の暗号文C_Cとを用いて、第2のタグT_Cを生成する。さらに具体的には、第2タグ生成部150は、ビット列L_3,L_4(第2の値)と、第2の暗号文C_Cとを用いて、メッセージ認証コードによる関数(MAC関数)により、第2のタグT_Cを生成する。このとき、上述したように、第2タグ生成部150は、128ビット(=n1)のビット列L_3,L_4を、それぞれ、鍵R,Sに対応する鍵として用いる。
【0088】
第2タグ生成部150は、第2の暗号文C_Cと、関連データAと、鍵L_3,L_4とを、CP方式で用いられるPoly1305によるMAC関数に入力する。これにより、第2タグ生成部150は、MAC関数から出力された128ビットのビット列を、第2のタグT_Cとして取得する。なお、関連データAがない場合、関連データAは、MAC関数に入力されない。第2タグ生成部150は、第2のタグT_Cをタグ統合部160に出力する。なお、第1の比較例では、タグ生成部76は、多項式ハッシュ関数の出力H_Rと鍵Sとのmod(2^128)における和を計算することでタグTを生成しているが、このような構成に限られない。第2タグ生成部150は、鍵L_3で定義される多項式ハッシュ関数の出力H_L3と鍵L_4との任意の群における和を計算することで、タグを生成してもよい。このことは、後述する認証復号装置20及び他の実施の形態でも同様である。
【0089】
認証用タグ生成部162は、認証用タグTを生成する。タグ統合部160は、第1のタグT_Oと第2のタグT_Cとを統合して、1つの認証用のタグTを生成する。具体的には、
図9に示すように、タグ統合部160は、第1のタグT_Oと第2のタグT_Cとの排他的論理和を、認証用タグTとして取得する。つまり、認証用タグ生成部162は、第1のタグT_Oを生成し、第2のタグT_Cを生成して、認証用タグTを生成する。認証用タグ生成部162(タグ統合部160)は、認証用タグTを、出力部170に出力する。
【0090】
出力部170は、暗号文C及び認証用タグTを出力するための制御を行う。ここで、出力部170は、第1の暗号文C_Oと第2の暗号文C_Cとを用いて、以下のようにして、平文Mに対応する暗号文Cを生成してもよい。すなわち、出力部170は、第2の暗号文C_Cを384ビット(=n3)の暗号文ブロックC_C[1],・・・,C_C[m]に分割する。なお、暗号文ブロックC_C[m]のビット数は、平文ブロックM_C[m]のビット数と同じである。また、出力部170は、i=1,・・・,mのそれぞれについて、128ビット(=n1)の暗号文ブロックC_O[i]と384ビット(=n3)の暗号文ブロックC_C[i]とを連結して、512ビット(=n2)の暗号文部分C[i]を取得する。つまり、C[i]=C_O[i]||C_C[i]である。なお、C[m]のビット数は、M[m]のビット数と同じである。そして、出力部170は、暗号文部分C[1],・・・,C[m]を連結して、暗号文Cを取得する。つまり、C=C[1]||・・・||C[m]である。
【0091】
出力部170は、例えば、ディスプレイなどの出力装置に暗号文Cと認証用タグTとを表示させるための制御を行ってもよい。また、出力部170は、例えば、ネットワークを介して接続された外部装置などに対して、暗号文C及び認証用タグTを出力するように制御を行ってもよい。また、出力部170は、ナンスN及び関連データAを出力するように制御を行ってもよい。例えば、出力部170は、(N,A,C,T)を、認証復号装置20に送信する。
【0092】
<認証復号装置>
図11は、実施の形態1にかかる認証復号装置20の構成を示す図である。また、
図12~
図16は、実施の形態1にかかる認証復号装置20によって実行される認証復号処理における演算の概略を示す図である。
図11に示すように、実施の形態1にかかる認証復号装置20は、入力部200と、暗号文分割部202と、ナンス処理部204とを有する。さらに、実施の形態1にかかる認証復号装置20は、第1復号部210と、第2復号部220と、チェックサム計算部230と、第1タグ生成部240と、第2タグ生成部250と、タグ統合部260と、検証部270と、出力部280とを有する。また、第1タグ生成部240、第2タグ生成部250及びタグ統合部260により、検証用タグ生成部262が構成される。つまり、認証復号装置20は、検証用タグ生成部262を有する。
【0093】
認証復号装置20は、例えばコンピュータ等の情報処理装置によって実現可能である。つまり、認証復号装置20は、CPUなどの演算装置と、メモリ又はディスクなどの記憶装置とを有している。認証復号装置20は、例えば、記憶装置に格納されたプログラムを演算装置が実行することで、上記の各構成要素を実現する。このことは、後述する他の実施の形態においても同様である。
【0094】
入力部200は、入力手段としての機能を有する。暗号文分割部202は、暗号文分割手段としての機能を有する。ナンス処理部204は、ナンス処理手段としての機能を有する。第1復号部210は、第1の復号手段としての機能を有する。第2復号部220は、第2の復号手段としての機能を有する。チェックサム計算部230は、チェックサム計算手段としての機能を有する。第1タグ生成部240は、第1のタグ生成手段(第3のタグ生成手段)としての機能を有する。第2タグ生成部250は、第2のタグ生成手段(第4のタグ生成手段)としての機能を有する。タグ統合部260は、タグ統合手段(第2のタグ統合手段)としての機能を有する。検証用タグ生成部262は、検証用タグ生成手段としての機能を有する。検証部270は、検証手段としての機能を有する。出力部280は、出力手段としての機能を有する。
【0095】
入力部200は、認証暗号化装置10から送信された、ナンスN、関連データA、復号の対象となる暗号文C、及び認証用タグTの入力を受け付ける。入力部200は、例えば、キーボードなどの入力装置により実現されてもよい。入力部200は、例えば、ネットワークを介して接続された外部装置などから、ナンスN、関連データA、暗号文C及び認証用タグTの入力を受け付けてもよい。なお、関連データAが存在しない場合もあり、この場合は、関連データAは入力されない。
【0096】
入力部200は、暗号文Cを、暗号文分割部202に出力する。入力部200は、ナンスNを、ナンス処理部204に出力する。また、入力部200は、関連データAを、第2タグ生成部250に出力する。また、入力部200は、認証用タグTを、検証部270に出力する。
【0097】
暗号文分割部202は、平文分割部102が平文Mを分割する方法と実質的に同様の方法で、暗号文Cを分割する。暗号文分割部202は、暗号文Cを、所定の割合で、第1の暗号文C_Oと第2の暗号文C_Cとに分割する。具体的には、暗号文分割部202は、|C_O|:|C_C|=128:384となるように、暗号文Cを、第1の暗号文C_Oと第2の暗号文C_Cとに分割する。つまり、暗号文分割部202は、入力長n1と、出力長n2から入力長n1を減算した長さn3との比に基づいて、暗号文Cを、第1の暗号文C_Oと第2の暗号文C_Cとに分割する。言い換えると、暗号文分割部202は、比n1:n3に基づいて、暗号文Cを、第1の暗号文C_Oと第2の暗号文C_Cとに分割する。
【0098】
さらに具体的には、暗号文分割部202は、暗号文Cを、暗号プリミティブの出力長に対応する長さに分割する。つまり、暗号文分割部202は、暗号文Cを、それぞれn2=512ビットの暗号文部分C[1],・・・,C[m]に分割する。なお、mは、暗号文部分の数である。なお、暗号文Cのビット長が512の倍数でない場合、|C[m]|<512となる。
【0099】
暗号文分割部202は、i=1,・・・,mのそれぞれについて、暗号文部分C[i]を、128ビットの暗号文ブロックC_O[i]と384ビットの暗号文ブロックC_C[i]とに分割する。つまり、暗号文分割部202は、暗号文部分C[i]を、n1ビットの暗号文ブロックC_O[i]とn3ビットの暗号文ブロックC_C[i]とに分割する。これにより、暗号文分割部202は、C_O=C_O[1]||C_O[2]||・・・||C_O[m]である第1の暗号文C_Oを取得する。また、暗号文分割部202は、C_C=C_C[1]||C_C[2]||・・・||C_C[m]である第2の暗号文C_Cを取得する。|C[m]|=512の場合、|C_O|:|C_C|=128:384となる。なお、後述するように、第1の暗号文C_Oは、暗号プリミティブをランダム関数CC_Kとして、OTR方式により、処理される。また、第2の暗号文C_Cは、ChaCha20-Poly1305の方式で処理される。暗号文分割部202は、第1の暗号文C_Oを第1復号部210に出力する。暗号文分割部202は、第2の暗号文C_Cを第2復号部220及び第2タグ生成部250に出力する。
【0100】
なお、128<|C[m]|<512の場合、暗号文分割部202は、暗号文部分C[m]を、128ビットのC_O[m]と384ビット未満のC_C[m]とに分割してもよい。そして、|C[m]|≦128の場合、暗号文分割部202は、暗号文部分C[m]を、128ビット未満のC_O[m]と0ビットのC_C[m]とに分割してもよい。つまり、|C[m]|≦128の場合、暗号文分割部202は、暗号文部分C[m]をそのままC_O[m]としてもよい。
【0101】
ナンス処理部204は、
図5に示したような、ナンス処理部104がナンスを処理する方法と実質的に同様の方法で、ランダム関数CC_Kを用いてナンスNを処理する。具体的には、ナンス処理部204は、128ビットのナンスNをランダム関数CC_Kに入力して、出力された512ビットのビット列(乱数)を取得する。また、ナンス処理部204は、512ビットのビット列を、それぞれ128ビット(=n1)のビット列L_1,L_2,L_3,L_4に分割する。そして、ナンス処理部204は、ビット列L_1,L_2を第1復号部210に出力する。また、ナンス処理部204は、ビット列L_3,L_4を第2タグ生成部250に出力する。なお、ビット列L_1,L_2(第1の値)は、第1の暗号文C_Oの復号処理の際に用いられるマスク値を取得するために用いられる。また、ビット列L_3,L_4(第2の値)は、第2の暗号文C_Cが復号された第2の平文M_Cに対応するタグT_Cを生成する際に用いられる鍵として用いられる。つまり、ビット列L_3,L_4は、上述した鍵R,Sに対応する。
【0102】
第1復号部210は、第1暗号化部110が第1の平文M_Oを処理する方法に対応する方法で、ランダム関数CC_Kを用いて第1の暗号文C_Oを処理する。第1復号部210は、ランダム関数CC_Kを用いて、OTR方式により、第1の暗号文C_Oを復号する。このとき、第1復号部210は、ビット列L_1,L_2に基づいて得られるマスク値を用いて、第1の暗号文C_Oが分割された暗号文ブロックC_O[1],・・・,C_O[m]を復号する。つまり、第1復号部210は、ランダム関数CC_Kを用いてナンスNを暗号化して得られる値L_1,L_2に基づいて得られるマスク値と、複数の暗号文ブロックC_O[i]それぞれとを用いて、ランダム関数CC_Kにより、第1の平文M_Oを取得する。また、第1復号部210は、ランダム関数CC_K(暗号化関数)から出力された暗号化結果のうちの入力長に対応するビット数の第1の乱数と暗号文ブロックとの排他的論理和を用いて、第1の平文M_Oを取得する。ここで、第1の平文M_Oは、第1の暗号文C_Oが復号された値に対応する。また、上述したように、複数の暗号文ブロックC_O[i]は、第1の暗号文C_Oがランダム関数CC_Kの入力長に対応する長さに分割されて得られる。
【0103】
具体的には、
図12に示すように、第1復号部210は、暗号文ブロックC_O[2j-1]と暗号文ブロックC_O[2j]とのペアそれぞれに対して、2段Feistel構造によって復号を行う。ここで、暗号文ブロックC_O[2j-1]は、暗号文ブロックC_O[1],・・・,C_O[m]における奇数番目の暗号文ブロックである。また、暗号文ブロックC_O[2j]は、暗号文ブロックC_O[2j-1]の次の偶数番目の暗号文ブロックである。なお、jは1以上l以下の整数である。また、mが偶数の場合はl=m/2であり、mが奇数の場合はl=(m+1)/2である。後述するように、第1復号部210は、ランダム関数CC_K(暗号化関数)から出力された暗号化結果のうちの入力長n1に対応するビット数の第1の乱数と暗号文ブロックC_O[i]との排他的論理和を用いて、第1の平文M_Oを取得する。なお、第1の乱数は、後述する乱数z_iに対応する。
【0104】
第1復号部210は、128ビットの暗号文ブロックC_O[1]と128ビットのマスク値L_2との排他的論理和をランダム関数CC_Kに入力する。これにより、第1復号部210は、512ビット(=n2)の暗号化結果CC_K(L_2,C_O[1])を取得する。そして、第1復号部210は、暗号化結果CC_K(L_2,C_O[1])を、128ビット(=n1)の乱数z_2と384ビット(=n3)の乱数S_2とに分割する。例えば、第1復号部210は、暗号化結果CC_K(L_2,C_O[1])の上位128ビットを乱数z_2とし、下位384ビットを乱数S_2としてもよい。ここで、乱数S_2は、上述した余剰ビット列に対応する。
【0105】
そして、第1復号部210は、乱数z_2と暗号文ブロックC_O[2]との排他的論理和を、暗号文ブロックC_O[1]に対応する平文ブロックM_O[1]として取得する。また、第1復号部210は、平文ブロックM_O[1]とマスク値L_1との排他的論理和をランダム関数CC_Kに入力して、暗号化結果CC_K(L_1,M_O[1])を取得する。そして、第1復号部210は、暗号化結果CC_K(L_1,M_O[1])を、128ビット(=n1)の乱数z_1と384ビット(=n3)の乱数S_1とに分割する。そして、第1復号部210は、乱数z_1と暗号文ブロックC_O[1]との排他的論理和を、暗号文ブロックC_O[2]に対応する平文ブロックM_O[2]として取得する。ここで、乱数S_1は、上述した余剰ビット列に対応する。
【0106】
また、第1復号部210は、128ビットの暗号文ブロックC_O[3]と128ビットのマスク値2・L_2との排他的論理和をランダム関数CC_Kに入力する。これにより、第1復号部210は、512ビットの暗号化結果CC_K(2・L_2,C_O[3])を取得する。そして、第1復号部210は、暗号化結果CC_K(2・L_2,C_O[3])を、128ビット(=n1)の乱数z_4と384ビット(=n3)の乱数S_4とに分割する。ここで、乱数S_4は、上述した余剰ビット列に対応する。
【0107】
そして、第1復号部210は、乱数z_4と暗号文ブロックC_O[4]との排他的論理和を、暗号文ブロックC_O[3]に対応する平文ブロックM_O[3]として取得する。また、第1復号部210は、平文ブロックM_O[3]とマスク値2・L_1との排他的論理和をランダム関数CC_Kに入力して、暗号化結果CC_K(2・L_1,M_O[3])を取得する。そして、第1復号部210は、暗号化結果CC_K(2・L_1,M_O[3])を、128ビット(=n1)の乱数z_3と384ビット(=n3)の乱数S_3とに分割する。そして、第1復号部210は、乱数z_3と暗号文ブロックC_O[3]との排他的論理和を、暗号文ブロックC_O[4]に対応する平文ブロックM_O[4]として取得する。ここで、乱数S_3は、上述した余剰ビット列に対応する。
【0108】
以下同様にして、第1復号部210は、128ビットの暗号文ブロックC_O[2j-1]と128ビットのマスク値2^(j-1)・L_2との排他的論理和をランダム関数CC_Kに入力する。これにより、第1復号部210は、512ビットの暗号化結果CC_K(2^(j-1)・L_2,C_O[2j-1])を取得する。そして、第1復号部210は、暗号化結果CC_K(2^(j-1)・L_2,C_O[2j-1])を、128ビット(=n1)の乱数z_(2j)と384ビット(=n3)の乱数S_(2j)とに分割する。ここで、乱数S_(2j)は、上述した余剰ビット列に対応する。
【0109】
そして、第1復号部210は、乱数z_(2j)と暗号文ブロックC_O[2j]との排他的論理和を、暗号文ブロックC_O[2j-1]に対応する平文ブロックM_O[2j-1]として取得する。また、第1復号部210は、平文ブロックM_O[2j-1]とマスク値2^(j-1)・L_1との排他的論理和をランダム関数CC_Kに入力して、暗号化結果CC_K(2^(j-1)・L_1,M_O[2j-1])を取得する。そして、第1復号部210は、暗号化結果CC_K(2^(j-1)・L_1,M_O[2j-1])を、128ビット(=n1)の乱数z_(2j-1)と384ビット(=n3)の乱数S_(2j-1)とに分割する。そして、第1復号部210は、乱数z_(2j-1)と暗号文ブロックC_O[2j-1]との排他的論理和を、暗号文ブロックC_O[2j]に対応する平文ブロックM_O[2j]として取得する。ここで、乱数S_(2j-1)は、上述した余剰ビット列に対応する。
【0110】
なお、mが奇数の場合と偶数の場合とで、最終暗号文ブロックに対する処理が互いに異なる。mが偶数の場合、第1復号部210は、
図13で示すような処理を行う。第1復号部210は、暗号文ブロックC_O[m]に対してone-zeroパディング処理等のパディング処理を行って、暗号文ブロックC_O[m]に対応する128ビット(=n1)のビット列pad(C_O[m])を取得する。また、第1復号部210は、ビット列pad(C_O[m])とマスク値2^(l-1)・L_2との排他的論理和をランダム関数CC_Kに入力して、暗号化結果CC_K(2^(l-1)・L_2,pad(C_O[m]))を取得する。そして、第1復号部210は、暗号化結果CC_K(2^(l-1)・L_2,pad(C_O[m]))を、128ビット(=n1)の乱数z_mと384ビット(=n3)の乱数S_mとに分割する。そして、第1復号部210は、乱数z_mと暗号文ブロックC_O[m-1]との排他的論理和を、暗号文ブロックC_O[m-1]に対応する平文ブロックM_O[m-1]として取得する。ここで、乱数S_mは、上述した余剰ビット列に対応する。
【0111】
また、第1復号部210は、128ビット(=n1)の平文ブロックM_O[m-1]と128ビット(=n1)のマスク値2^(l-1)・L_1との排他的論理和をランダム関数CC_Kに入力する。これにより、第1復号部210は、512ビット(=n2)の暗号化結果CC_K(2^(l-1)・L_1,M_O[m-1])を取得する。そして、第1復号部210は、暗号化結果CC_K(2^(l-1)・L_1,M_O[m-1])を、128ビット(=n1)の乱数z_(m-1)と384ビット(=n3)の乱数S_(m-1)とに分割する。ここで、Z=z_(m-1)とする。また、乱数S_(m-1)は、上述した余剰ビット列に対応する。
【0112】
そして、第1復号部210は、乱数Zを暗号文ブロックC_O[m]のビット長x(1≦x≦n1(=128))になるように切り詰めたmsb{|C_O[m]|}(Z)を取得する。そして、第1復号部210は、msb{|C_O[m]|}(Z)と暗号文ブロックC_O[m]との排他的論理和を、暗号文ブロックC_O[m]に対応する平文ブロックM_O[m]として取得する。
【0113】
mが奇数の場合、第1復号部210は、
図14で示すような処理を行う。第1復号部210は、マスク値2^(l-1)・L_1をランダム関数CC_Kに入力して、暗号化結果CC_K(2^(l-1)・L_1)を取得する。そして、第1復号部210は、暗号化結果CC_K(2^(l-1)・L_1)を、128ビット(=n1)の乱数z_mと384ビット(=n3)の乱数S_mとに分割する。そして、第1復号部210は、乱数z_mを暗号文ブロックC_O[m]のビット長x(1≦x≦n1(=128))になるように切り詰めたmsb{|C_O[m]|}(z_m)を取得する。そして、第1暗号化部110は、msb{|C_O[m]|}(z_m)と暗号文ブロックC_O[m]との排他的論理和を、暗号文ブロックC_O[m]に対応する平文ブロックM_O[m]として取得する。
【0114】
第1復号部210は、平文ブロックM_O[1],・・・,M_O[m]を、第1の平文M_Oとして、チェックサム計算部230及び出力部280に出力する。このとき、第1復号部210は、平文ブロックM_O[1],・・・,M_O[m]が連結されたM_O(=M_O[1]||・・・||M_O[m])を、チェックサム計算部230及び出力部280に出力してもよい。
【0115】
また、第1復号部210は、余剰ビット列に対応する乱数S_1,S_2,・・・,S_mを連結して、384×mビットの乱数Sを取得する。つまり、S=S_1||S_2||・・・||S_mである。なお、厳密には、|S|=384×mとなるのは、|C|=512×mである場合であることに留意されたい。そして、第1復号部210は、乱数Sを第2復号部220に出力する。なお、第1復号部210は、乱数S_1,S_2,・・・,S_mを連結しないで第2復号部220に出力してもよい。この場合、第2復号部220が、乱数S_1,S_2,・・・,S_mを連結して、384×mビット(=n3×m)の乱数Sを取得してもよい。
【0116】
ここで、第1の暗号文C_Oの復号において暗号化関数であるランダム関数CC_Kから出力された暗号化結果のうち、値z_1,・・・,z_mは、第1の暗号文C_Oの復号で用いられる。これに対し、ランダム関数CC_Kから出力された暗号化結果のうち、乱数S_1,S_2,・・・,S_m(乱数S)は、第1の暗号文C_Oの復号で用いられる値以外の値である。
【0117】
チェックサム計算部230は、上述したチェックサム計算部130と実質的に同様にして、チェックサムを計算する。つまり、チェックサム計算部230は、複数の平文ブロックM_O[i]の一部の排他的論理和に基づいてチェックサムΣを計算する。具体的には、チェックサム計算部230は、偶数番目の平文ブロックM_O[2],M_O[4],・・・の排他的論理和により、チェックサムΣを計算する。さらに具体的には、mが偶数である場合、チェックサム計算部230は、上記の式5で表されるようにして、128ビット(=n1)のチェックサムΣを計算する。一方、mが奇数である場合、チェックサム計算部230は、上記の式6で表されるようにして、128ビット(=n1)のチェックサムΣを計算する。チェックサム計算部230は、得られたチェックサムΣを、第1タグ生成部240に出力する。
【0118】
検証用タグ生成部262の第1タグ生成部240は、上述した第1タグ生成部140と実質的に同様にして、検証用のタグT
*を生成するための第1のタグT
*_Oを生成する。第1タグ生成部240は、チェックサムΣを用いて、OTR方式により、第1のタグT
*_Oを生成する。具体的には、
図15に示すように、第1タグ生成部240は、チェックサムΣと適切なマスク値L^*とを用いて、暗号化関数であるランダム関数CC_Kにより、第1のタグT
*_O(第1の部分タグ)を生成する。ここで、マスク値L^*は、上述したように、ビット列L_1,L_2に基づいて得られる。つまり、第1タグ生成部240は、複数の平文ブロックの一部の排他的論理和に基づいて得られる値(チェックサムΣ)と、ビット列L_1,L_2(第1の値)に基づいて得られるマスク値L^*とを用いて、暗号化関数により、第1のタグT
*_Oを生成する。
【0119】
さらに具体的には、第1タグ生成部240は、128ビット(=n1)のチェックサムΣと128ビット(=n1)のマスク値L^*との排他的論理和を用いて、ランダム関数CC_Kにより、128ビット(=n1)の第1のタグT*_Oを生成する。第1タグ生成部240は、チェックサムΣとマスク値L^*との排他的論理和をランダム関数CC_Kに入力して得られた暗号化結果を、第1のタグT*_Oとして取得する。第1タグ生成部240は、生成された第1のタグT*_Oを、タグ統合部260に出力する。
【0120】
第2復号部220は、第2暗号化部120が第2の平文M_Cを処理する方法に対応する方法で、第2の暗号文C_Cを処理する。第2復号部220は、ChaCha20-Poly1305の方式(CP方式)により、第2の暗号文C_Cの復号を行う。具体的には、
図16に示すように、第2復号部220は、乱数Sを鍵ストリームとして用いて暗号文C_Cを復号する。これにより、第2復号部220は、第2の暗号文C_Cが復号された第2の平文M_Cを取得する。つまり、第2復号部220は、乱数S(第2の乱数)と第2の暗号文C_Cとを用いて、第2の暗号文C_Cが復号された第2の平文M_Cを取得する。なお、上述したように、乱数S(S_1、S_2、・・・)は、第1の暗号文C_Oの復号においてランダム関数CC_K(暗号化関数)から出力された暗号化結果のうちの第1の暗号文C_Oの復号に用いられる値(乱数z;第1の乱数)以外の値である。
【0121】
さらに具体的には、第2復号部220は、乱数S_1,S_2,・・・,S_m(第2の乱数)が連結されて得られた値と第2の暗号文C_Cとの排他的論理和を用いて、第2の平文M_Cを取得する。第2復号部220は、乱数S(=S_1||S_2||・・・||S_m)を第2の暗号文C_Cのビット数になるように切り詰めたmsb{|C_C|}(S)を取得する。そして、第2復号部220は、msb{|C_C|}(S)と第2の暗号文C_Cとの排他的論理和を、第2の暗号文C_Cに対応する第2の平文M_Cとして取得する。第2復号部220は、第2の平文M_Cを、出力部280に出力する。
【0122】
検証用タグ生成部262の第2タグ生成部250は、上述した第2タグ生成部150と実質的に同様にして、検証用のタグT
*を生成するための第2のタグT
*_Cを生成する。第2タグ生成部250は、第2の暗号文C_Cを用いて、CP方式により、第2のタグT
*_Cを生成する。具体的には、
図16に示すように、第2タグ生成部250は、ランダム関数CC_Kを用いてナンスNを暗号化して得られるビット列L_3,L_4(第2の値)と、第2の暗号文C_Cとを用いて、第2のタグT
*_Cを生成する。さらに具体的には、第2タグ生成部250は、ビット列L_3,L_4(第2の値)と、第2の暗号文C_Cとを用いて、メッセージ認証コードによる関数(MAC関数)により、第2のタグT
*_Cを生成する。このとき、上述したように、第2タグ生成部250は、128ビット(=n1)のビット列L_3,L_4を、鍵R,Sに対応する鍵として用いる。
【0123】
第2タグ生成部250は、第2の暗号文C_Cと、関連データAと、鍵L_3,L_4とを、CP方式で用いられるPoly1305によるMAC関数に入力する。これにより、第2タグ生成部250は、MAC関数から出力された128ビットのビット列を、第2のタグT*_Cとして取得する。なお、関連データAがない場合、関連データAは、MAC関数に入力されない。第2タグ生成部250は、第2のタグT*_Cをタグ統合部260に出力する。
【0124】
検証用タグ生成部262は、検証用タグT
*を生成する。タグ統合部260は、第1のタグT
*_Oと第2のタグT
*_Cとを統合して、1つの検証用のタグT
*を生成する。具体的には、
図15に示すように、タグ統合部260は、第1のタグT
*_Oと第2のタグT
*_Cとの排他的論理和を、検証用タグT
*として取得する。つまり、検証用タグ生成部262は、第1のタグT
*_Oを生成し、第2のタグT
*_Cを生成して、検証用タグT
*を生成する。検証用タグ生成部262(タグ統合部260)は、検証用タグT
*を、検証部270に出力する。
【0125】
検証部270は、タグ統合部260によって生成された検証用タグT*と、認証暗号化装置10によって生成された認証用タグTとを比較して、改ざんの有無を検証する。そして、検証部270は、検証結果に基づいて、情報を出力するための制御を行う。すなわち、検証部270は、検証用タグT*と入力された認証用タグTとを比較することによって、改ざんの有無を検証する。そして、検証部270は、検証結果を出力するための制御を行う。
【0126】
具体的には、検証部270は、認証用タグTと検証用タグT*とを比較する。そして、検証部270は、検証用タグT*が認証用タグTと一致する場合に、認証が成功したと判定する。そして、検証部270は、認証が成功した場合に、第1復号部210によって生成された第1の平文M_Oと第1復号部210によって生成された第2の平文M_Cとから得られる平文Mを出力するための制御を行う。一方、検証部270は、検証用タグT*が認証用タグTと一致しない場合に、認証が失敗したと判定する。検証部270は、認証が失敗した場合に、認証が失敗したことを示すエラーメッセージ⊥を出力するための制御を行う。
【0127】
出力部280は、認証が成功したときに平文Mを出力する。ここで、出力部280は、第1の平文M_Oと第2の平文M_Cとを用いて、以下のようにして、暗号文Cに対応する平文Mを生成してもよい。すなわち、出力部280は、第2の平文M_Cを384ビット(=n3)の平文ブロックM_C[1],・・・,M_C[m]に分割する。なお、平文ブロックM_C[m]のビット数は、暗号文ブロックC_C[m]のビット数と同じである。また、出力部280は、i=1,・・・,mのそれぞれについて、128ビット(=n1)の平文ブロックM_O[i]と384ビット(=n3)の平文ブロックM_C[i]とを連結して、512ビット(=n2)の平文部分M[i]を取得する。つまり、M[i]=M_O[i]||M_C[i]である。なお、M[m]のビット数は、C[m]のビット数と同じである。そして、出力部280は、平文部分M[1],・・・,M[m]を連結して、平文Mを取得する。つまり、M=M[1]||・・・||M[m]である。
【0128】
一方、出力部280は、認証が失敗したときにエラーメッセージ⊥を出力する。なお、出力部280は、例えば、ディスプレイなどの出力装置に情報を表示させるための制御を行ってもよい。また、出力部280は、例えば、ネットワークを介して接続された外部装置などに対して、情報を出力するように制御を行ってもよい。
【0129】
<認証暗号化方法及び認証復号方法>
次に、
図17及び
図18を用いて、実施の形態1にかかる認証暗号システム1にかかる動作について説明する。
図17は、実施の形態1にかかる認証暗号化装置10で実行される認証暗号化方法を示すフローチャートである。
【0130】
入力部100は、上述したように、ナンスN、平文M及び関連データAを入力する(ステップS100)。平文分割部102は、上述したように、平文Mを、所定の割合で、第1の平文M_Oと第2の平文M_Cとに分割する(ステップS102)。ナンス処理部104は、上述したように、ランダム関数CC_Kを用いてナンスNを処理して、ビット列L_1,L_2,L_3,L_4を取得する(ステップS104)。
【0131】
第1暗号化部110は、上述したように、ランダム関数CC_Kを用いて、OTR方式により、第1の平文M_Oに対応する第1の暗号文C_Oを取得する(ステップS110)。また、第2暗号化部120は、上述したように、CP方式により、第2の平文M_Cに対応する第2の暗号文C_Cを取得する(ステップS112)。
【0132】
チェックサム計算部130は、上述したように、第1の平文M_Oに対応するチェックサムΣを計算する(ステップS120)。認証用タグ生成部162の第1タグ生成部140は、上述したように、チェックサムΣを用いて、OTR方式により、第1のタグT_Oを生成する(ステップS122)。また、認証用タグ生成部162の第2タグ生成部150は、上述したように、第2の暗号文C_Cを用いて、CP方式により、第2のタグT_Cを生成する(ステップS124)。認証用タグ生成部162は、認証用タグTを生成する(ステップS126)。具体的には、タグ統合部160は、上述したように、第1のタグT_Oと第2のタグT_Cとを統合して、認証用タグTを生成する。出力部170は、ナンスN、関連データA、暗号文C及び認証用タグTを出力するための制御を行う(ステップS130)。
【0133】
図18は、実施の形態1にかかる認証復号装置20で実行される認証復号方法を示すフローチャートである。入力部200は、上述したように、ナンスN、関連データA、暗号文C、及び認証用タグTを入力する(ステップS200)。暗号文分割部202は、上述したように、暗号文Cを、所定の割合で、第1の暗号文C_Oと第2の暗号文C_Cとに分割する(ステップS202)。ナンス処理部204は、上述したように、ランダム関数CC_Kを用いてナンスNを処理して、ビット列L_1,L_2,L_3,L_4を取得する(ステップS204)。
【0134】
第1復号部210は、上述したように、ランダム関数CC_Kを用いて、OTR方式により、第1の暗号文C_Oに対応する第1の平文M_Oを取得する(ステップS210)。また、第2復号部220は、上述したように、CP方式により、第2の暗号文C_Cに対応する第2の平文M_Cを取得する(ステップS212)。
【0135】
チェックサム計算部230は、上述したように、第1の平文M_Oに対応するチェックサムΣを計算する(ステップS220)。検証用タグ生成部262の第1タグ生成部240は、上述したように、チェックサムΣを用いて、OTR方式により、第1のタグT*_Oを生成する(ステップS222)。また、検証用タグ生成部262の第2タグ生成部250は、上述したように、第2の暗号文C_Cを用いて、CP方式により、第2のタグT*_Cを生成する(ステップS224)。検証用タグ生成部262は、検証用タグT*を生成する(ステップS226)。具体的には、タグ統合部260は、上述したように、第1のタグT*_Oと第2のタグT*_Cとを統合して、検証用タグT*を生成する。
【0136】
検証部270は、検証用タグT*が認証用タグTと一致するか否かを判定する(ステップS230)。検証用タグT*が認証用タグTと一致する場合(S230のYES)、出力部280は、認証が成功したとして、平文Mを出力する(ステップS232)。検証用タグT*が認証用タグTと一致しない場合(S230のNO)、出力部280は、認証が失敗したとして、エラーメッセージ⊥を出力する(ステップS234)。
【0137】
<効果>
実施の形態1にかかる認証暗号システム1の効果を説明する。以下、認証暗号化装置10における効果を説明するが、認証復号装置20においても、同様の効果を奏し得る。このことは、他の実施の形態においても同様である。
【0138】
上述したように、実施の形態1にかかる認証暗号化装置10は、平文Mを第1の平文M_Oと第2の平文M_Cとに分割する。そして、認証暗号化装置10は、第1の平文M_Oに対して、入力長よりも出力長の方が長い暗号プリミティブであるランダム関数CC_Kを用いて、OTR方式に対応する処理により、第1の暗号文C_Oを取得する。また、認証暗号化装置10は、第1の比較例にかかるCP方式に対応する処理のように、第2の平文M_Cと鍵ストリームとの排他的論理和により、第2の平文M_Cに対応する第2の暗号文C_Cを取得する。これにより、実施の形態1にかかる認証暗号化装置10は、第1の比較例で使用されるランダム関数CC_Kを用いて、第1の比較例にかかるCP方式と比較して、計算コストを削減することが可能となる。すなわち、実施の形態1にかかる認証暗号化装置10は、入力長よりも出力長の方が長い暗号プリミティブを用いて、効率的に認証暗号化処理を行うことが可能となる。
【0139】
さらに、実施の形態1にかかる認証暗号化装置10は、第2の平文M_Cを処理する際に使用される鍵ストリームとして、乱数Sを用いる。ここで、上述したように、乱数Sは、余剰ビット列に対応する。このように、認証暗号化装置10は、余剰ビット列である乱数Sを鍵ストリームとしてCP方式に対応する処理で第2の平文M_Cの暗号化を行うことで、ランダム関数CC_Kの呼び出し回数を低減することが可能となる。すなわち、第1の比較例では、鍵ストリームを生成するために、ランダム関数CC_Kを用いたカウンタモードを実行する必要がある。すなわち、第1の比較例では、鍵ストリームを生成するために、平文Mのブロック数m(=|M|/512)に対応する回数だけ、ランダム関数CC_Kを呼び出す必要がある。これに対し、実施の形態1にかかる認証暗号化装置10では、余剰ビット列を鍵ストリームとして使用するため、鍵ストリームを生成するためにだけ、ランダム関数CC_Kを呼び出すことは不要である。
【0140】
また、実施の形態1にかかる認証暗号化装置10では、平文の暗号化の処理におけるランダム関数CC_Kの呼び出し回数は、m回である。これに対し、単に、第2の比較例にかかるOTR方式で使用される暗号プリミティブをブロック暗号関数E_Kからランダム関数CC_Kに置き換えたのみである、第3の比較例を考える。つまり、第3の比較例では、平文Mの全てが、OTR方式で暗号化されるとする。そして、第3の比較例では、上述した余剰ビット列(乱数S)は、使用されないとする。ここで、1つの2段Feistel構造で処理される平文ブロックのビット数は128×2ビットであり、1つの2段Feistel構造におけるランダム関数CC_Kの呼び出し回数は、2回である。したがって、第3の比較例では、平文Mの暗号化におけるランダム関数CC_Kの呼び出し回数は、4m回となる。ただし、m=|M|/512とする。したがって、実施の形態1にかかる認証暗号化装置10における平文の暗号化の処理におけるランダム関数CC_Kの呼び出し回数は、第3の比較例における平文の暗号化の処理におけるランダム関数CC_Kの呼び出し回数よりもはるかに少ない。このように、実施の形態1にかかる認証暗号化装置10は、第3の比較例と比較して、計算コストを削減することが可能となる。
【0141】
また、実施の形態1にかかる認証暗号化装置10は、MAC関数における処理における計算コストを削減することが可能となる。すなわち、第1の比較例にかかるCP方式では、Poly1305によるMAC関数で処理されるデータ量は、|AD|+|M|ビットである。これに対し、実施の形態1にかかる認証暗号化装置10では、MAC関数で処理されるデータ量は、|AD|+(n3/n2)|M|ビット=|AD|+(3/4)|M|ビットである。このように、実施の形態1にかかる認証暗号化装置10は、第1の比較例にかかるCP方式と比較して、MAC関数で処理されるデータ量を削減することが可能となる。したがって、実施の形態1にかかる認証暗号化装置10は、第1の比較例にかかるCP方式と比較して、計算コストを削減することが可能となる。
【0142】
なお、実施の形態1にかかる認証暗号化装置10では、ナンスの処理においてランダム関数CC_Kが1回呼び出され、平文の暗号化処理でランダム関数CC_Kがm回呼び出され、タグ生成処理でランダム関数CC_Kが1回呼び出される。したがって、実施の形態1にかかる認証暗号化装置10では、ランダム関数CC_Kの呼び出し回数は、m+2回である。一方、第1の比較例におけるCP方式では、MAC関数に入力される鍵R,Sの生成処理でランダム関数CC_Kが1回呼び出され、鍵ストリームZを生成する処理でランダム関数CC_Kがm回呼び出される。したがって、第1の比較例にかかるCP方式では、ランダム関数CC_Kの呼び出し回数は、m+1回である。このように、実施の形態1にかかる認証暗号化装置10では、第1の比較例にかかるCP方式と比較して、ランダム関数CC_Kの呼び出し回数が1回のみ増加している。一方、上述したように、MAC関数で処理されるデータ量が削減されているので、総合的な計算コストは、実施の形態1にかかる認証暗号化装置10では、第1の比較例と比較して低減されていると考えられる。
【0143】
また、実施の形態1にかかる認証暗号化装置10は、ランダム関数CC_Kの入力長n1と、出力長n2から入力長n1を減算した長さn3との比に基づいて、平文Mを第1の平文M_Oと第2の平文M_Cとに分割するように構成されている。すなわち、実施の形態1にかかる認証暗号化装置10は、|M_O|:|M_C|=128:384となるように、平文Mを第1の平文M_Oと第2の平文M_Cとに分割する。このような構成により、より効率的に、認証暗号化処理を行うことが可能となる。つまり、より確実に、第1の比較例と比較して、計算コストを削減することが可能となる。例えば、上記の比率よりも第2の平文M_Cのビット数の割合を大きくすると、実施の形態1の場合と比較して、MAC関数で処理されるデータ量が増加するが、ランダム関数CC_Kの呼び出し回数はそれほど削減されないおそれがある。また、上記の比率よりも第2の平文M_Cのビット数の割合を小さくすると、実施の形態1の場合と比較して、MAC関数で処理されるデータ量が減少するが、ランダム関数CC_Kの呼び出し回数がかなり増大するおそれがある。したがって、ランダム関数CC_Kの呼び出し回数とMAC関数で処理されるデータ量とをバランスを考慮すると、|M_O|:|M_C|=128:384となるように平文Mを分割することにより、より効率的に、認証暗号化処理を行うことが可能となる。
【0144】
また、上述したように、ナンス処理部104は、ランダム関数CC_Kを用いてナンスNを暗号化してビット列L_1,L_2,L_3,L_4を取得するように構成されている。これにより、マスク値及び鍵といった安全性上必要な値を、暗号プリミティブの呼び出し回数を増加させることなく、取得することができる。すなわち、ビット列L_1,L_2,L_3,L_4を別個に取得するようにすると、暗号プリミティブが4回呼び出される必要がある。また、第1の平文M_Oの暗号化処理の際に用いられるマスク値を取得する際に用いられる値と、第2の平文M_Cに対応する第2のタグT_Cを生成する際に用いられる鍵とを別個に取得するようにすると、暗号プリミティブが2回呼び出される必要がある。これに対し、ナンス処理部104は、ランダム関数CC_Kを1回呼び出すだけで、ビット列L_1,L_2,L_3,L_4を取得する。したがって、上記のような構成により、安全性上必要な値を取得するために暗号プリミティブの呼び出し回数を増加させることを、抑制することができる。
【0145】
<実施の形態1の変形例>
実施の形態1の変形例について説明する。上述した実施の形態1にかかる認証暗号化装置10では、暗号プリミティブとして、第1の比較例(非特許文献1)で使用されるランダム関数CC_Kを用いている。しかしながら、使用される暗号プリミティブは、ランダム関数CC_Kに限定されない。つまり、入力長よりも出力長の方が長いような任意の暗号プリミティブが使用され得る。このことは、実施の形態1にかかる認証復号装置20においても同様である。また、この変形例は、後述する他の実施の形態に対しても適用可能である。
【0146】
例えば、実施の形態1にかかる認証暗号化装置10は、非特許文献4の「SalSa20」という暗号化方式で使用される暗号プリミティブを用いて、認証暗号化処理を行ってもよい。また、実施の形態1にかかる認証暗号化装置10は、非特許文献5の「XSalSa20」という暗号化方式又は非特許文献6の「XChaCha20」という暗号化方式で使用されるような暗号プリミティブを用いて、認証暗号化処理を行ってもよい。ここで、非特許文献5の「XSalSa20」及び非特許文献6の「XChaCha20」で使用される暗号プリミティブを「xCC」とする。「xCC」は、入力長が256ビットであり出力長が512ビットである暗号プリミティブである。
【0147】
xCCを用いる場合、以下に説明するような第1の変形例及び第2の変形例が考えられる。第1の変形例は、
図5~
図9に示されたランダム関数CC_KをそのままxCCに置き換えた構成に対応する。したがって、|M_O|:|M_C|=256:256=1:1となる。したがって、平文ブロックM_[i]のビット数は256ビットとなる。また、第2の平文M_Cのビット数は、256×mビットとなる。この場合、計算コストは以下のようになる。すなわち、xCCは、2つのCC_Kで構成されているので、xCCを1回呼び出すと、ランダム関数CC_Kを2回呼び出すことになる。したがって、ランダム関数CC_Kの呼び出し回数は、(m+2)×2=2m+4回となる。一方、MAC関数で処理されるデータ量は、|AD|+(256/512)|M|ビット=|AD|+(1/2)|M|ビットとなる。
【0148】
図19は、第2の変形例を説明するための図である。第2の変形例では、xCCの上位128ビットには、1つの平文Mの処理では不変のナンスNが入力され、256ビットの鍵が生成される。そして、下位128ビットには、実施の形態1の場合と同様に、128ビットの平文ブロックM[i]とマスク値2
j・L_1との排他的論理和が入力される。これにより、平文ブロックM[i]に対応する暗号文ブロックC[i]が得られる。したがって、xCCを呼び出す際に、ナンスNが入力されるランダム関数CC_Kを毎回呼び出す必要はない。したがって、第2の変形例では、xCCを1回呼び出す際にランダム関数CC_Kを1回呼び出すのみでよい。このような構成の場合、|M_O|:|M_C|=128:384であるので、計算コストは、上述した実施の形態1の場合と同じである。
【0149】
(実施の形態2)
次に、実施の形態2について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。なお、実施の形態2にかかるシステム構成については、実施の形態1のシステム構成と実質的に同様であるので、説明を省略する。つまり、実施の形態2にかかる認証暗号システム1は、認証暗号化装置10に対応する認証暗号化装置10Aと、認証復号装置20に対応する認証復号装置20Aとを有する。
【0150】
<認証暗号化装置>
図20は、実施の形態2にかかる認証暗号化装置10Aの構成を示す図である。実施の形態2にかかる認証暗号化装置10Aは、入力部100と、平文分割部102と、ナンス処理部104とを有する。さらに、実施の形態2にかかる認証暗号化装置10Aは、第1暗号化部110と、第2暗号化部120と、チェックサム計算部130と、第1タグ生成部140Aと、第2タグ生成部150Aと、出力部170とを有する。また、第1タグ生成部140A及び第2タグ生成部150Aにより、認証用タグ生成部162Aが構成される。つまり、認証暗号化装置10Aは、認証用タグ生成部162Aを有する。第1タグ生成部140A、第2タグ生成部150A及び認証用タグ生成部162A以外の構成要素については、実施の形態1にかかるものと実質的に同様であるので、説明を省略する。
【0151】
図21は、実施の形態2にかかる認証暗号化装置10Aによって実行される認証暗号化処理における演算の概略を示す図である。認証用タグ生成部162Aの第1タグ生成部140Aは、上述した第1タグ生成部140と実質的に同様にして、第1のタグT_Oを生成する。そして、第1タグ生成部140Aは、第1のタグT_Oを、第2タグ生成部150Aに出力する。
【0152】
認証用タグ生成部162Aの第2タグ生成部150Aは、第2タグ生成部150と同様に、CP方式で用いられるPoly1305によるMAC関数を用いて、タグを生成する。具体的には、
図21に示すように、第2タグ生成部150Aは、ランダム関数CC_Kを用いてナンスNを暗号化して得られるビット列L_3と、第1のタグT_Oと、第2の暗号文C_Cとを用いて、認証用タグTを生成する。さらに具体的には、第2タグ生成部150Aは、ビット列L_3(第2の値)と、第1のタグT_Oと、第2の暗号文C_Cとを用いて、メッセージ認証コードによる関数(MAC関数)により、認証用タグTを生成する。このとき、第2タグ生成部150Aは、ビット列L_3を鍵Rに対応する鍵として用い、第1のタグT_Oを鍵Sに対応する鍵として用いる。
【0153】
第2タグ生成部150Aは、第2の暗号文C_Cと、関連データAと、鍵L_3と、第1のタグT_Oとを、CP方式で用いられるPoly1305によるMAC関数に入力する。これにより、第2タグ生成部150Aは、MAC関数から出力された128ビットのビット列を、認証用タグTとして取得する。つまり、認証用タグ生成部162Aは、MAC関数から出力された第2のタグT_Cを、認証用タグTとして生成する。なお、関連データAがない場合、関連データAは、MAC関数に入力されない。認証用タグ生成部162A(第2タグ生成部150A)は、認証用タグTを、出力部170に出力する。
【0154】
<認証復号装置>
図22は、実施の形態2にかかる認証復号装置20Aの構成を示す図である。実施の形態2にかかる認証復号装置20Aは、入力部200と、暗号文分割部202と、ナンス処理部204とを有する。さらに、実施の形態2にかかる認証復号装置20Aは、第1復号部210と、第2復号部220と、チェックサム計算部230と、第1タグ生成部240Aと、第2タグ生成部250Aと、検証部270と、出力部280とを有する。また、第1タグ生成部240A及び第2タグ生成部250Aにより、検証用タグ生成部262Aが構成される。つまり、認証復号装置20Aは、検証用タグ生成部262Aを有する。第1タグ生成部240A、第2タグ生成部250A及び検証用タグ生成部262A以外の構成要素については、実施の形態1にかかるものと実質的に同様であるので、説明を省略する。
【0155】
検証用タグ生成部262Aの第1タグ生成部240Aは、上述した第1タグ生成部240と実質的に同様にして、第1のタグT*_Oを生成する。そして、第1タグ生成部240Aは、第1のタグT*_Oを、第2タグ生成部250Aに出力する。
【0156】
検証用タグ生成部262Aの第2タグ生成部250Aは、第2タグ生成部250と同様に、CP方式で用いられるPoly1305によるMAC関数を用いて、タグを生成する。具体的には、第2タグ生成部250Aは、第2タグ生成部150Aの処理と実質的に同様にして、検証用タグT*を生成する。つまり、第2タグ生成部250Aは、ランダム関数CC_Kを用いてナンスNを暗号化して得られるビット列L_3と、第1のタグT*_Oと、第2の暗号文C_Cとを用いて、検証用タグT*を生成する。さらに具体的には、第2タグ生成部250Aは、ビット列L_3(第2の値)と、第1のタグT*_Oと、第2の暗号文C_Cとを用いて、メッセージ認証コードによる関数(MAC関数)により、認証用タグTを生成する。このとき、第2タグ生成部250Aは、ビット列L_3を鍵Rに対応する鍵として用い、第1のタグT*_Oを鍵Sに対応する鍵として用いる。
【0157】
第2タグ生成部250Aは、第2の暗号文C_Cと、関連データAと、鍵L_3と、第1のタグT*_Oとを、CP方式で用いられるPoly1305によるMAC関数に入力する。これにより、第2タグ生成部250Aは、MAC関数から出力された128ビットのビット列を、検証用タグT*として取得する。つまり、検証用タグ生成部262Aは、MAC関数から出力された第2のタグT*_Cを、検証用タグT*として生成する。なお、関連データAがない場合、関連データAは、MAC関数に入力されない。検証用タグ生成部262A(第2タグ生成部250A)は、検証用タグT*を、検証部270に出力する。
【0158】
<効果>
実施の形態2にかかる認証暗号化装置10Aは、上述したような、実施の形態1にかかる認証暗号化装置10が奏する効果と実質的に同様の効果を奏する。さらに、実施の形態2にかかる認証暗号化装置10Aは、ビット列L_4の代わりに第1のタグT_OをPoly1305によるMAC関数に入力して、認証用タグTを生成するように構成されている。したがって、実施の形態2にかかる認証暗号化装置10Aは、タグ統合部160による処理が不要となる。つまり、実施の形態2にかかる認証暗号化装置10Aは、タグ統合部160における排他的論理和の演算処理が不要となる。
【0159】
さらに、何らかの理由によりビット列L_4が得られない場合であっても、第1のタグT_Oを用いて、認証用タグTを生成することが可能となる。例えば、暗号プリミティブとして上述したxCCを用いてナンスNを処理する場合、xCCを1回呼び出しただけでは値L_4が導出されない可能性がある。実施の形態2にかかる認証暗号化装置10Aは、このような場合であっても、暗号化関数の呼び出し回数を増加させることなく、認証用タグTを生成することが可能となる。
【0160】
(実施の形態3)
次に、実施の形態3について説明する。実施の形態3は、上述した実施の形態にかかる構成の概要を示している。
【0161】
図23は、実施の形態3にかかる認証暗号化装置30の構成を示す図である。実施の形態3にかかる認証暗号化装置30は、上述した他の実施の形態における認証暗号化装置に対応する。実施の形態3にかかる認証暗号化装置30は、平文分割部302と、第1暗号化部310と、第2暗号化部320と、認証用タグ生成部360とを有する。
【0162】
平文分割部302は、平文分割手段としての機能を有する。第1暗号化部310は、第1の暗号化手段としての機能を有する。第2暗号化部320は、第2の暗号化手段としての機能を有する。認証用タグ生成部360は、認証用タグ生成手段としての機能を有する。ここで、実施の形態3にかかる認証暗号化装置30は、入力長n1よりも出力長n2の方が長い暗号プリミティブに対応する暗号化関数を用いる。暗号化関数は、例えば、第1の比較例で用いられるランダム関数CC_Kであるが、これに限定されない。これらのことは、実施の形態3にかかる認証復号装置40においても同様である。
【0163】
平文分割部302は、上述した平文分割部102が有している機能と実質的に同様の機能によって実現され得る。平文分割部302は、平文Mを、所定の割合で、第1の平文M_Oと第2の平文M_Cとに分割する。平文分割部302は、例えば、|M_O|:|M_C|=(入力長n1):(出力長n2-入力長n1)となるように、平文Mを分割してもよい。
【0164】
第1暗号化部310は、上述した第1暗号化部110が有している機能と実質的に同様の機能によって実現され得る。第1暗号化部310は、第1の値(L_1,L_2)に基づいて得られるマスク値と、複数の平文ブロックM_O[i]それぞれとを用いて、暗号化関数により、複数の暗号文ブロックを取得して、第1の暗号文C_Oを取得する。なお、第1の値(L_1,L_2)は、暗号化関数を用いてナンスNを暗号化して得られる。また、複数の平文ブロックM_O[i]は、第1の平文M_Oが暗号化関数の入力長に対応する長さに分割されて得られる。また、複数の暗号文ブロックは、複数の平文ブロックに対応する。また、第1の暗号文C_Oは、第1の平文M_Oが暗号化された値に対応する。
【0165】
第2暗号化部320は、上述した第2暗号化部120が有している機能と実質的に同様の機能によって実現され得る。第2暗号化部320は、第1の平文M_Oの暗号化において暗号化関数から出力された暗号化結果のうちの第1の平文の暗号化に用いられる値以外の値Sと、第2の平文M_Cとを用いて、第2の平文M_Cが暗号化された第2の暗号文C_Cを取得する。なお、上述したように、値S(乱数S)は、第1の平文M_Oの暗号化において暗号化関数から出力された暗号化結果のうちの第1の平文M_Oの暗号化に用いられる値(乱数z)以外の値である。
【0166】
認証用タグ生成部360は、上述した認証用タグ生成部162又は認証用タグ生成部162Aが有している機能と実質的に同様の機能によって実現され得る。認証用タグ生成部360は、複数の平文ブロックの一部の排他的論理和に基づいて得られる値(チェックサムΣ)と、第1の値に基づいて得られるマスク値とを用いて、暗号化関数により、第1のタグT_Oを生成する。また、認証用タグ生成部360は、暗号化関数を用いてナンスを暗号化して得られる第2の値(L_3)と、第2の暗号文C_Cとを用いて、第2のタグT_Cを生成する。
【0167】
また、認証用タグ生成部360は、認証用タグTを生成する。ここで、認証用タグ生成部360は、実施の形態1にかかる認証用タグ生成部162のように、第1のタグT_Oと第2のタグT_Cとを統合することによって、認証用タグTを生成してもよい。また、認証用タグ生成部360は、実施の形態2にかかる認証用タグ生成部162Aのように、第2の暗号文C_Cと第1のタグT_Oとを用いて生成された第2のタグT_Cを、認証用タグTとして生成してもよい。
【0168】
図24は、実施の形態3にかかる認証復号装置40の構成を示す図である。実施の形態3にかかる認証復号装置40は、上述した他の実施の形態における認証暗号化装置に対応する。実施の形態3にかかる認証復号装置40は、暗号文分割部402と、第1復号部410と、第2復号部420と、検証用タグ生成部460と、検証部470とを有する。
【0169】
暗号文分割部402は、暗号文分割手段としての機能を有する。第1復号部410は、第1の復号手段としての機能を有する。第2復号部420は、第2の復号手段としての機能を有する。検証用タグ生成部460は、検証用タグ生成手段としての機能を有する。検証部470は、検証手段としての機能を有する。
【0170】
暗号文分割部402は、上述した暗号文分割部202が有している機能と実質的に同様の機能によって実現され得る。暗号文分割部402は、暗号文Cを、所定の割合で、第1の暗号文C_Oと第2の暗号文C_Cとに分割する。暗号文分割部402は、例えば、|C_O|:|C_C|=(入力長n1):(出力長n2-入力長n1)となるように、暗号文Cを分割してもよい。
【0171】
第1復号部410は、上述した第1復号部210が有している機能と実質的に同様の機能によって実現され得る。第1復号部410は、第1の値(L_1,L_2)に基づいて得られるマスク値と、複数の暗号文ブロックC_O[i]それぞれとを用いて、暗号化関数により、複数の平文ブロックを取得して、第1の平文M_Oを取得する。なお、第1の値(L_1,L_2)は、暗号化関数を用いてナンスNを暗号化して得られる。また、複数の暗号文ブロックC_O[i]は、第1の暗号文C_Oが暗号化関数の入力長に対応する長さに分割されて得られる。また、複数の平文ブロックは、複数の暗号文ブロックに対応する。また、第1の平文M_Oは、第1の暗号文C_Oが復号された値に対応する。
【0172】
第2復号部420は、上述した第2復号部220が有している機能と実質的に同様の機能によって実現され得る。第2復号部420は、第1の暗号文C_Oの復号において暗号化関数から出力された暗号化結果のうちの第1の暗号文の復号に用いられる値以外の値Sと、第2の暗号文とを用いて、第2の暗号文C_Cが復号された第2の平文M_Cを取得する。なお、上述したように、値S(乱数S)は、第1の暗号文C_Oの復号において暗号化関数から出力された暗号化結果のうちの第1の暗号文C_Oの復号に用いられる値(乱数z)以外の値である。
【0173】
検証用タグ生成部460は、上述した検証用タグ生成部262又は検証用タグ生成部262Aが有している機能と実質的に同様の機能によって実現され得る。検証用タグ生成部460は、複数の平文ブロックの一部の排他的論理和に基づいて得られる値(チェックサムΣ)と、第1の値に基づいて得られるマスク値とを用いて、暗号化関数により、第1のタグT*_Oを生成する。また、検証用タグ生成部460は、暗号化関数を用いてナンスを暗号化して得られる第2の値(L_3)と、第2の暗号文C_Cとを用いて、第2のタグT*_Cを生成する。
【0174】
また、検証用タグ生成部460は、検証用タグT*を生成する。ここで、検証用タグ生成部460は、実施の形態1にかかる検証用タグ生成部262のように、第1のタグT*_Oと第2のタグT*_Cとを統合することによって、検証用タグT*を生成してもよい。あるいは、検証用タグ生成部460は、実施の形態2にかかる検証用タグ生成部262Aのように、第2の暗号文C_Cと第1のタグT*_Oとを用いて生成された第2のタグT*_Cを、検証用タグT*として生成してもよい。
【0175】
検証部470は、上述した検証部270が有している機能と実質的に同様の機能によって実現され得る。検証部470は、検証用タグT*と、入力された認証用タグTとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う。
【0176】
実施の形態3にかかる認証暗号化装置30及び認証復号装置40は、上述した構成によって、入力長よりも出力長の方が長い暗号プリミティブを用いて、効率的に認証暗号化処理を行うことが可能となる。また、認証暗号化装置30によって実行される認証暗号化方法及び認証暗号化方法を実行するプログラムによっても、入力長よりも出力長の方が長い暗号プリミティブを用いて、効率的に認証暗号化処理を行うことが可能となる。また、認証復号装置40によって実行される認証復号方法及び認証復号方法を実行するプログラムによっても、入力長よりも出力長の方が長い暗号プリミティブを用いて、効率的に認証暗号化処理を行うことが可能となる。
【0177】
(ハードウェア構成例)
上述した各実施形態に係る装置およびシステムを、1つの計算処理装置(情報処理装置、コンピュータ)を用いて実現するハードウェア資源の構成例について説明する。但し、各実施形態に係る装置(認証暗号化装置及び認証復号装置)は、物理的または機能的に少なくとも2つの計算処理装置を用いて実現されてもよい。また、各実施形態に係る装置は、専用の装置として実現されてもよいし、汎用の情報処理装置で実現されてもよい。
【0178】
図25は、各実施形態に係る装置およびシステムを実現可能な計算処理装置のハードウェア構成例を概略的に示すブロック図である。計算処理装置1000は、CPU1001、揮発性記憶装置1002、ディスク1003、不揮発性記録媒体1004、及び、通信IF1007(IF:Interface)を有する。したがって、各実施形態に係る装置は、CPU1001、揮発性記憶装置1002、ディスク1003、不揮発性記録媒体1004、及び、通信IF1007を有しているといえる。計算処理装置1000は、入力装置1005及び出力装置1006に接続可能であってもよい。計算処理装置1000は、入力装置1005及び出力装置1006を備えていてもよい。また、計算処理装置1000は、通信IF1007を介して、他の計算処理装置、及び、通信装置と情報を送受信することができる。
【0179】
不揮発性記録媒体1004は、コンピュータが読み取り可能な、たとえば、コンパクトディスク(Compact Disc)、デジタルバーサタイルディスク(Digital Versatile Disc)である。また、不揮発性記録媒体1004は、USB(Universal Serial Bus)メモリ、ソリッドステートドライブ(Solid State Drive)等であってもよい。不揮発性記録媒体1004は、電源を供給しなくても係るプログラムを保持し、持ち運びを可能にする。なお、不揮発性記録媒体1004は、上述した媒体に限定されない。また、不揮発性記録媒体1004の代わりに、通信IF1007及び通信ネットワークを介して、係るプログラムが供給されてもよい。
【0180】
揮発性記憶装置1002は、コンピュータが読み取り可能であって、一時的にデータを記憶することができる。揮発性記憶装置1002は、DRAM(dynamic random Access memory)、SRAM(static random Access memory)等のメモリ等である。
【0181】
すなわち、CPU1001は、ディスク1003に格納されているソフトウェアプログラム(コンピュータ・プログラム:以下、単に「プログラム」と称する)を、実行する際に揮発性記憶装置1002にコピーし、演算処理を実行する。CPU1001は、プログラムの実行に必要なデータを揮発性記憶装置1002から読み取る。表示が必要な場合、CPU1001は、出力装置1006に出力結果を表示する。外部からプログラムを入力する場合、CPU1001は、入力装置1005からプログラムを取得する。CPU1001は、上述した
図4,
図11,
図20,
図22,
図23~
図24に示される各構成要素の機能(処理)に対応するプログラムを解釈し実行する。CPU1001は、上述した各実施形態において説明した処理を実行する。言い換えると、上述した
図4,
図11,
図20,
図22,
図23~
図24に示される各構成要素の機能は、ディスク1003又は揮発性記憶装置1002に格納されたプログラムを、CPU1001が実行することによって実現され得る。
【0182】
すなわち、各実施形態は、上述したプログラムによっても成し得ると捉えることができる。さらに、上述したプログラムが記録されたコンピュータが読み取り可能な不揮発性の記録媒体によっても、上述した各実施形態は成し得ると捉えることができる。
【0183】
(変形例)
なお、本発明は上記実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述したフローチャートにおいて、各処理(ステップ)の順序は、適宜、変更可能である。また、複数ある処理(ステップ)のうちの1つ以上は、省略されてもよい。また、上述した複数の実施の形態は、互いに適用可能である。また、上述した実施の形態では、平文M_Oを「第1の平文」とし、平文M_Cを「第2の平文」としているが、このような構成に限られない。平文M_Oを「第2の平文」とし、平文M_Cを「第1の平文」としてもよい。このことは、第1の暗号文及び第2の暗号文についても同様である。
【0184】
また、平文Mを第1の平文M_Oと第2の平文M_Cとに分割する方法は、上述した平文分割部102による方法に限定されない。例えば、平文分割部は、まず、「|M_O|:|M_C|=入力長n1:(出力長n2-入力長n1)」となるように、平文Mを分割してもよい。そして、平文分割部は、第1の平文M_Oを、入力長n1の長さに対応するビット数に分割して、平文ブロックM_O[1],・・・,M_O[m]を取得してもよい。また、平文分割部は、第2の平文M_Cを、n3(=出力長n2-入力長n1)の長さに対応するビット数に分割して、平文ブロックM_C[1],・・・,M_C[m]を取得してもよい。この場合、出力部は、平文ブロックM_O[1],・・・,M_O[m]に対応する暗号文ブロックC_O[1],・・・,C_O[m]を連結して、第1の暗号文C_Oを取得してもよい。また、出力部は、第1の暗号文C_Oと第2の暗号文C_Cとを連結して、暗号文Cを取得してもよい。これらのことは、認証復号装置における暗号文分割部及び出力部についても同様である。
【0185】
また、上述した実施の形態では、平文分割部は、ランダム関数CC_Kの入力長n1と、出力長n2から入力長n1を減算した長さn3との比(128:384)に基づいて、平文Mを第1の平文M_Oと第2の平文M_Cとに分割するように構成されている。しかしながら、本実施の形態にかかる認証暗号化装置は、このような構成に限定されない。しかしながら、ランダム関数CC_Kの入力長n1と長さn3との比に基づいて平文Mを第1の平文M_Oと第2の平文M_Cとに分割することにより、上述したように、より効率的に、認証暗号化処理を行うことが可能となる。つまり、ランダム関数CC_Kの入力長n1と長さn3との比に基づいて平文Mを第1の平文M_Oと第2の平文M_Cとに分割することにより、計算コストを削減することが可能となる。このことは、本実施の形態にかかる認証復号装置の暗号文分割部においても同様である。
【0186】
また、第1の平文M_Oの暗号化に用いられる複数のマスク値を取得する方法は、上述した方法に限定されない。複数のマスク値を取得する方法として、複数のマスク値が互いに同じ値とならないような任意の方法が採用され得る。
【0187】
上述の例において、プログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、random-access memory(RAM)、read-only memory(ROM)、フラッシュメモリ、solid-state drive(SSD)又はその他のメモリ技術、CD-ROM、digital versatile disk(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
【0188】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0189】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
平文を所定の割合で第1の平文と第2の平文とに分割する平文分割手段と、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得する第1の暗号化手段と、
前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得する第2の暗号化手段と、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する認証用タグ生成手段と、
を有する認証暗号化装置。
(付記2)
前記平文分割手段は、前記入力長と、前記出力長から前記入力長を減算した長さとの比に基づいて、前記平文を前記第1の平文と前記第2の平文とに分割する、
付記1に記載の認証暗号化装置。
(付記3)
前記暗号化関数を用いて前記ナンスを暗号化して、前記第1の値及び前記第2の値を取得するナンス処理手段、
をさらに有する付記1に記載の認証暗号化装置。
(付記4)
前記第1の暗号化手段は、前記暗号化関数から出力された暗号化結果のうちの前記入力長に対応するビット数の第1の乱数と前記平文ブロックとの排他的論理和を用いて、前記第1の暗号文を取得する、
付記1に記載の認証暗号化装置。
(付記5)
前記第2の暗号化手段は、前記第1の平文の暗号化処理において前記暗号化関数から出力された暗号化結果のうちの前記第1の乱数以外の第2の乱数が連結されて得られた値と前記第2の平文との排他的論理和を用いて、前記第2の暗号文を取得する、
付記4に記載の認証暗号化装置。
(付記6)
前記認証用タグ生成手段は、前記第2の値と前記第2の暗号文とを用いて、メッセージ認証コードによる関数により、前記第2のタグを生成する、
付記5に記載の認証暗号化装置。
(付記7)
複数の前記平文ブロックの一部の排他的論理和に基づいてチェックサムを計算するチェックサム計算手段、
をさらに有する付記1に記載の認証暗号化装置。
(付記8)
前記認証用タグ生成手段は、前記チェックサムと、前記第1の値に基づいて得られるマスク値との排他的論理和を用いて、前記暗号化関数により、前記第1のタグを生成する、
付記7に記載の認証暗号化装置。
(付記9)
暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割する暗号文分割手段と、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得する第1の復号手段と、
前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得する第2の復号手段と、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成する検証用タグ生成手段と、
前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う検証手段と、
を有する認証復号装置。
(付記10)
前記暗号文分割手段は、前記入力長と、前記出力長から前記入力長を減算した長さとの比に基づいて、前記暗号文を前記第1の暗号文と前記第2の暗号文とに分割する、
付記9に記載の認証復号装置。
(付記11)
前記暗号化関数を用いて前記ナンスを暗号化して、前記第1の値及び前記第2の値を取得するナンス処理手段、
をさらに有する付記9に記載の認証復号装置。
(付記12)
前記第1の復号手段は、前記暗号化関数から出力された暗号化結果のうちの前記入力長に対応するビット数の第1の乱数と前記暗号文ブロックとの排他的論理和を用いて、前記第1の平文を取得する、
付記9に記載の認証復号装置。
(付記13)
前記第2の復号手段は、前記第1の暗号文の復号処理において前記暗号化関数から出力された暗号化結果のうちの前記第1の乱数以外の第2の乱数が連結されて得られた値と前記第2の暗号文との排他的論理和を用いて、前記第2の平文を取得する、
付記12に記載の認証復号装置。
(付記14)
前記検証用タグ生成手段は、前記第2の値と前記第2の暗号文とを用いて、メッセージ認証コードによる関数により、前記第2のタグを生成する、
付記13に記載の認証復号装置。
(付記15)
複数の前記平文ブロックの一部の排他的論理和に基づいてチェックサムを計算するチェックサム計算手段、
をさらに有する付記9に記載の認証復号装置。
(付記16)
前記検証用タグ生成手段は、前記チェックサムと、前記第1の値に基づいて得られるマスク値との排他的論理和を用いて、前記暗号化関数により、前記第1のタグを生成する、
付記15に記載の認証復号装置。
(付記17)
認証暗号化装置と、
前記認証暗号化装置との間で通信を行う認証復号装置と、
を有し、
前記認証暗号化装置は、
平文を所定の割合で第1の平文と第2の平文とに分割する平文分割手段と、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得する第1の暗号化手段と、
前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得する第2の暗号化手段と、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する認証用タグ生成手段と、
を有し、
前記認証復号装置は、
暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割する暗号文分割手段と、
前記暗号化関数を用いて前記ナンスを暗号化して得られる前記第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得する第1の復号手段と、
前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得する第2の復号手段と、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成する検証用タグ生成手段と、
前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う検証手段と、
を有する、
認証暗号システム。
(付記18)
平文を所定の割合で第1の平文と第2の平文とに分割し、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得し、
前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得し、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成する、
認証暗号化方法。
(付記19)
暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割し、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得し、
前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得し、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成し、
前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行う、
認証復号方法。
(付記20)
平文を所定の割合で第1の平文と第2の平文とに分割するステップと、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の平文が前記入力長に対応する長さに分割された複数の平文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記平文ブロックに対応する複数の暗号文ブロックを取得して、前記第1の平文が暗号化された第1の暗号文を取得するステップと、
前記第1の平文の暗号化において前記暗号化関数から出力された暗号化結果のうちの前記第1の平文の暗号化に用いられる値以外の値と、前記第2の平文とを用いて、前記第2の平文が暗号化された第2の暗号文を取得するステップと、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、認証用タグを生成するステップと、
をコンピュータに実行させるプログラム。
(付記21)
暗号文を所定の割合で第1の暗号文と第2の暗号文とに分割するステップと、
入力長よりも出力長の方が長い暗号プリミティブに対応する暗号化関数を用いてナンスを暗号化して得られる第1の値に基づいて得られるマスク値と、前記第1の暗号文が前記入力長に対応する長さに分割された複数の暗号文ブロックそれぞれとを用いて、前記暗号化関数により、複数の前記暗号文ブロックに対応する複数の平文ブロックを取得して、前記第1の暗号文が復号された第1の平文を取得するステップと、
前記第1の暗号文の復号において前記暗号化関数から出力された暗号化結果のうちの前記第1の暗号文の復号に用いられる値以外の値と、前記第2の暗号文とを用いて、前記第2の暗号文が復号された第2の平文を取得するステップと、
複数の前記平文ブロックの一部の排他的論理和に基づいて得られる値と、前記第1の値に基づいて得られるマスク値とを用いて、前記暗号化関数により、第1のタグを生成し、前記暗号化関数を用いて前記ナンスを暗号化して得られる第2の値と、前記第2の暗号文とを用いて、第2のタグを生成して、検証用タグを生成するステップと、
前記検証用タグと、入力された認証用タグとを比較することによって、改ざんの有無を検証し、検証結果を出力するための制御を行うステップと、
をコンピュータに実行させるプログラム。
【符号の説明】
【0190】
1 認証暗号システム
10 認証暗号化装置
20 認証復号装置
30 認証暗号化装置
40 認証復号装置
100 入力部
102 平文分割部
104 ナンス処理部
110 第1暗号化部
120 第2暗号化部
130 チェックサム計算部
140 第1タグ生成部
150 第2タグ生成部
160 タグ統合部
162 認証用タグ生成部
170 出力部
200 入力部
202 暗号文分割部
204 ナンス処理部
210 第1復号部
220 第2復号部
230 チェックサム計算部
240 第1タグ生成部
250 第2タグ生成部
260 タグ統合部
262 検証用タグ生成部
270 検証部
280 出力部
302 平文分割部
310 第1暗号化部
320 第2暗号化部
360 認証用タグ生成部
402 暗号文分割部
410 第1復号部
420 第2復号部
460 検証用タグ生成部
470 検証部