(57)【特許請求の範囲】
【請求項１】
暗号化装置と復号装置を有する暗号化システムであって、
Ｋを前記暗号化装置と前記復号装置の両方で共有する秘密鍵、Ａを追加認証データ、Ｍをメッセージ、Ｃを暗号文、Ｔをタグ、Ｋ，Ａ，Ｍをビット列、Ｎをすべてのビットが“０”のビット列を除くビット列、ｒ，ｃ，ｂ，Ｐ，Ｑを１以上の整数、ｂ＝ｒ＋ｃ、ｐを１以上Ｐ以下の整数、ｑを１以上Ｑ以下の整数、Ｓをあらかじめ定めた１以上の整数、ｓを１以上Ｓ以下の整数、ｆをｂビットの置換演算、ｇを０〜２ｃ−１の整数からなる有限体の元と０と１以外のあらかじめ定めた定数との有限体上での乗算とし、
ステートを、あらかじめ定められたｒビットがレート部分、ｃビットがキャパシティ部分であるｂビットのビット列とし、
前記暗号化装置は、
Ｎを選択し、ＮとＫを用いてｂビットの暗号化用初期値を生成し、前記暗号化用初期値をｆにより置換した結果をステートとする暗号化用初期値設定部と、
メッセージＭを、パディングを用いてｒビットごとのメッセージブロックｍ１，…，ｍＰに分割するメッセージ分割部と、
追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する暗号化用追加認証データ分割部と、
Ｐ＝Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返し、
（２）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（３）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求め、
Ｐ＞Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｑまで繰り返し、
（２）Ｐ−１≧Ｑ＋１ならば、ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返し、
（３）ステートのレート部分とメッセージブロックｍＰとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄＰとするともに、ステートのレート部分を当該計算の結果に置き換え、さらにキャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求め、
Ｐ＜Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐまで繰り返し、
（２）Ｐ＋１≦Ｑ−１ならば、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返し、
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める
暗号化部と、
Ｓ＝１の場合はステートのレート部分からタグＴを求め、Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１とし、さらに、ステートをｆにより置換した結果を新たなステートとしてレート部分をタグブロックｔｓとする処理をｓ＝２からｓ＝Ｓまで繰り返し、タグブロックｔ１，…，ｔＳを用いてタグＴを求める暗号化用タグ計算部と、
Ｃ，Ｔ，Ａ，Ｎの組を出力する出力部と、
を備え、
前記復号装置は、
Ｃ，Ｔ，Ａ，Ｎの組を取得する入力部と、
ＮとＫを用いてｂビットの復号用初期値を生成し、前記復号用初期値をｆにより置換した結果をステートとする復号用初期値設定部と、
暗号文Ｃを、ｒビットごとの暗号ブロックｄ１，…，ｄＰに分割する暗号文分割部と、
追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する復号用追加認証データ分割部と、
Ｐ＝Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返し、
（２）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（３）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とし、
Ｐ＞Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｑまで繰り返し、
（２）Ｐ−１≧Ｑ＋１ならば、ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返し、
（３）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換え、キャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とし、
Ｐ＜Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐまで繰り返し、
（２）Ｐ＋１≦Ｑ−１ならば、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返し、
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする
復号部と、
Ｓ＝１の場合はステートのレート部分からタグＴ’を求め、Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１’とし、さらに、ステートをｆにより置換した結果を新たなステートとしてレート部分をタグブロックｔｓ’とする処理をｓ＝２からｓ＝Ｓまで繰り返し、タグブロックｔ１’，…，ｔＳ’を用いてタグＴ’を求める復号用タグ計算部と、
タグＴとタグＴ’とを比較する検証部と
を備える
暗号化システム。
【請求項２】
Ｋを暗号化装置と復号装置の両方で共有する秘密鍵、Ａを追加認証データ、Ｍをメッセージ、Ｃを暗号文、Ｔをタグ、Ｋ，Ａ，Ｍをビット列、Ｎをすべてのビットが“０”のビット列を除くビット列、ｒ，ｃ，ｂ，Ｐ，Ｑを１以上の整数、ｂ＝ｒ＋ｃ、ｐを１以上Ｐ以下の整数、ｑを１以上Ｑ以下の整数、Ｓをあらかじめ定めた１以上の整数、ｓを１以上Ｓ以下の整数、ｆをｂビットの置換演算、ｇを０〜２ｃ−１の整数からなる有限体の元と０と１以外のあらかじめ定めた定数との有限体上での乗算とし、
ステートを、あらかじめ定められたｒビットがレート部分、ｃビットがキャパシティ部分であるｂビットのビット列とし、
Ｎを選択し、ＮとＫを用いてｂビットの初期値を生成し、前記初期値をｆにより置換した結果をステートとする初期値設定部と、
メッセージＭを、パディングを用いてｒビットごとのメッセージブロックｍ１，…，ｍＰに分割するメッセージ分割部と、
追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する追加認証データ分割部と、
Ｐ＝Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返し、
（２）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（３）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求め、
Ｐ＞Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｑまで繰り返し、
（２）Ｐ−１≧Ｑ＋１ならば、ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返し、
（３）ステートのレート部分とメッセージブロックｍＰとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄＰとするともに、ステートのレート部分を当該計算の結果に置き換え、さらにキャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求め、
Ｐ＜Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐまで繰り返し、
（２）Ｐ＋１≦Ｑ−１ならば、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返し、
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める
暗号化部と、
Ｓ＝１の場合はステートのレート部分からタグＴを求め、Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１とし、さらに、ステートをｆにより置換した結果を新たなステートとしてレート部分をタグブロックｔｓとする処理をｓ＝２からｓ＝Ｓまで繰り返し、タグブロックｔ１，…，ｔＳを用いてタグＴを求めるタグ計算部と、
Ｃ，Ｔ，Ａ，Ｎの組を出力する出力部と、
を備える暗号化装置。
【請求項３】
Ｋを暗号化装置と復号装置の両方で共有する秘密鍵、Ａを追加認証データ、Ｍをメッセージ、Ｃを暗号文、Ｔをタグ、Ｋ，Ａ，Ｍをビット列、Ｎをすべてのビットが“０”のビット列を除くビット列、ｒ，ｃ，ｂ，Ｐ，Ｑを１以上の整数、ｂ＝ｒ＋ｃ、ｐを１以上Ｐ以下の整数、ｑを１以上Ｑ以下の整数、Ｓをあらかじめ定めた１以上の整数、ｓを１以上Ｓ以下の整数、ｆをｂビットの置換演算、ｇを０〜２ｃ−１の整数からなる有限体の元と０と１以外のあらかじめ定めた定数との有限体上での乗算とし、
ステートを、あらかじめ定められたｒビットがレート部分、ｃビットがキャパシティ部分であるｂビットのビット列とし、
Ｃ，Ｔ，Ａ，Ｎの組を取得する入力部と、
ＮとＫを用いてｂビットの初期値を生成し、前記初期値をｆにより置換した結果をステートとする初期値設定部と、
暗号文Ｃを、ｒビットごとの暗号ブロックｄ１，…，ｄＰに分割する暗号文分割部と、
追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する追加認証データ分割部と、
Ｐ＝Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返し、
（２）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（３）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とし、
Ｐ＞Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｑまで繰り返し、
（２）Ｐ−１≧Ｑ＋１ならば、ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返し、
（３）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換え、キャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とし、
Ｐ＜Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐまで繰り返し、
（２）Ｐ＋１≦Ｑ−１ならば、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返し、
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする
復号部と、
Ｓ＝１の場合はステートのレート部分からタグＴ’を求め、Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１’とし、さらに、ステートをｆにより置換した結果を新たなステートとしてレート部分をタグブロックｔｓ’とする処理をｓ＝２からｓ＝Ｓまで繰り返し、タグブロックｔ１’，…，ｔＳ’を用いてタグＴ’を求めるタグ計算部と、
タグＴとタグＴ’とを比較する検証部と
を備える復号装置。
【請求項４】
暗号化装置と復号装置を用いた暗号化方法であって、
Ｋを前記暗号化装置と前記復号装置の両方で共有する秘密鍵、Ａを追加認証データ、Ｍをメッセージ、Ｃを暗号文、Ｔをタグ、Ｋ，Ａ，Ｍをビット列、Ｎをすべてのビットが“０”のビット列を除くビット列、ｒ，ｃ，ｂ，Ｐ，Ｑを１以上の整数、ｂ＝ｒ＋ｃ、ｐを１以上Ｐ以下の整数、ｑを１以上Ｑ以下の整数、Ｓをあらかじめ定めた１以上の整数、ｓを１以上Ｓ以下の整数、ｆをｂビットの置換演算、ｇを０〜２ｃ−１の整数からなる有限体の元と０と１以外のあらかじめ定めた定数との有限体上での乗算とし、
ステートを、あらかじめ定められたｒビットがレート部分、ｃビットがキャパシティ部分であるｂビットのビット列とし、
前記暗号化装置が、
Ｎを選択し、ＮとＫを用いてｂビットの暗号化用初期値を生成し、前記暗号化用初期値をｆにより置換した結果をステートとする暗号化用初期値設定ステップと、
メッセージＭを、パディングを用いてｒビットごとのメッセージブロックｍ１，…，ｍＰに分割するメッセージ分割ステップと、
追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する暗号化用追加認証データ分割ステップと、
Ｐ＝Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返し、
（２）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（３）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求め、
Ｐ＞Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｑまで繰り返し、
（２）Ｐ−１≧Ｑ＋１ならば、ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返し、
（３）ステートのレート部分とメッセージブロックｍＰとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄＰとするともに、ステートのレート部分を当該計算の結果に置き換え、さらにキャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求め、
Ｐ＜Ｑの場合は、
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐまで繰り返し、
（２）Ｐ＋１≦Ｑ−１ならば、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返し、
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める
暗号化ステップと、
Ｓ＝１の場合はステートのレート部分からタグＴを求め、Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１とし、さらに、ステートをｆにより置換した結果を新たなステートとしてレート部分をタグブロックｔｓとする処理をｓ＝２からｓ＝Ｓまで繰り返し、タグブロックｔ１，…，ｔＳを用いてタグＴを求める暗号化用タグ計算ステップと、
Ｃ，Ｔ，Ａ，Ｎの組を出力する出力ステップと、
を実行し、
前記復号装置が、
Ｃ，Ｔ，Ａ，Ｎの組を取得する入力ステップと、
ＮとＫを用いてｂビットの復号用初期値を生成し、前記復号用初期値をｆにより置換した結果をステートとする復号用初期値設定ステップと、
暗号文Ｃを、ｒビットごとの暗号ブロックｄ１，…，ｄＰに分割する暗号文分割ステップと、
追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する復号用追加認証データ分割ステップと、
Ｐ＝Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返し、
（２）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（３）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とし、
Ｐ＞Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｑまで繰り返し、
（２）Ｐ−１≧Ｑ＋１ならば、ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返し、
（３）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換え、キャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とし、
Ｐ＜Ｑの場合は、
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換え、さらにステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｐ＝１からｐ＝Ｐまで繰り返し、
（２）Ｐ＋１≦Ｑ−１ならば、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返し、
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換えた上で、ｆにより置換した結果を新たなステートとする処理を行い、
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする
復号ステップと、
Ｓ＝１の場合はステートのレート部分からタグＴ’を求め、Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１’とし、さらに、ステートをｆにより置換した結果を新たなステートとしてレート部分をタグブロックｔｓ’とする処理をｓ＝２からｓ＝Ｓまで繰り返し、タグブロックｔ１’，…，ｔＳ’を用いてタグＴ’を求める復号用タグ計算ステップと、
タグＴとタグＴ’とを比較する検証ステップと
を実行する
暗号化方法。
【請求項５】
請求項２記載の暗号化装置としてコンピュータを機能させるための暗号化プログラム。
【請求項６】
請求項３記載の復号装置としてコンピュータを機能させるための復号プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、追加認証データ付きの認証暗号を実行する暗号化システム、暗号化装置、復号装置、暗号化方法、暗号化プログラム、復号プログラムに関する。
【背景技術】
【０００２】
追加認証データ付認証暗号とは、メッセージＭの秘匿および、Ｍと追加認証データＡの認証（改ざん検知）を同時に行う共通鍵暗号プリミティブである。暗号化関数と復号関数の２つの関数から構成される。追加認証データ認証暗号では、受信者と送信者はあらかじめ秘密の鍵Ｋを共有しておく。送信者は、メッセージＭ、追加認証データＡに加えて、暗号化関数を呼び出すたびに変化する値（ナンスと呼ばれる）Ｎを選択する。暗号化関数は、Ｍ，Ａ，Ｎに対応する暗号文ＣとタグＴを生成し、（Ｃ，Ｔ，Ａ，Ｎ）の組を受信者に送る。受信者は（Ｃ，Ｔ，Ａ，Ｎ）を受け取るが、この時点でこれらの値が悪意ある第三者によって改ざんされていないという保証がない。受信者は受け取った（Ｃ，Ｔ，Ａ，Ｎ）と自分が保有するＫを用いて復号関数を計算する。復号関数は、メッセージＭ’とタグＴ’を計算する。計算して得られたＴ’と受信したＴが同じ値であれば、受け取った（Ｃ，Ｔ，Ａ，Ｎ）は正しい値であると判断し、復号されたメッセージとしてＭ’を出力する。Ｔ≠Ｔ’であれば、復号に失敗した（データが改ざんされた）という結果を出力する。
【０００３】
非特許文献１に記載されているSPONGEWRAPは、認証暗号の暗号化関数と復号関数の構成法である。保証したい安全性レベル(ビット数)に比べて比較的大きなサイズの置換（bijective map）を用いて暗号化関数、復号関数を構成するという特徴を持つ。
【０００４】
＜SPONGEWRAP＞
SPONGEWRAPの暗号化関数は、ステートと呼ばれるｂビットのデータを、ｂビットの置換ｆ：｛０，１｝ｂ→｛０，１｝ｂと入力データ（Ｎ，Ａ，Ｍ）と鍵Ｋを用いて繰り返しアップデートを行いながらＣとＴを計算する。またｂビットのステートは、レートと呼ばれるｒビットと、キャパシティと呼ばれるｃ（＝ｂ−ｒ）ビットに分割される。暗号化関数の計算の際、ステートの値は予め定められた初期値ＩＶと呼ばれるｂビットの値に初期化され（例えばＩＶ＝０）、ｆによりｂビットの置換が行われ、ステートが更新される。暗号化関数の具体的な計算手順は以下の手順１から手順４で説明される通りである。図１に、SPONGEWRAPの暗号化での計算構造を示す。
【０００５】
＜手順１＞
鍵Ｋをｒ−１ビット毎に分割する。最終ブロックでは１０＊パディングと呼ばれるパディング処理を施す。具体的には、最終ブロックのビット長がｒ−１ビットより短い場合には、１ビットの値“１”を与し、その後ｒ−１ビットになるまでビット“０”を付与する。最終ブロックのビット長が丁度ｒ−１ビットの場合には、次のブロックの先頭のビットとして 1 ビットの値“１”を与し、その後ｒ−１ビットになるまでビット“０”を付与する。
【０００６】
Ｋをｒ−１ビット毎に分割したそれぞれの値に、フレームビットと呼ばれる１ビットの値を連結し、ｒビットにする。具体的には、最初のブロックから最終ブロックの一つ手前のブロックまではフレームビットを“０”とし、最終ブロックのみフレームビットを“１”とする。ｂビットのステートのうちレート部分のｒビットに対し、Ｋとフレームビットを連結したｒビットの値との排他的論理和を計算し、置換ｆを計算する。ｆの出力を新たなステート値とする。この操作をＫの最終ブロックが排他的論理和されるまで続ける。なお、この処理まではあらかじめ行っておくことができるので、手順１までを初期化と呼んでもよい。
【０００７】
＜手順２＞
ナンスＮと追加認証データＡを連結し、ｒ−１ビット毎に分割する。最終ブロックに対しては１０＊パディングを施す。ＮとＡの連結をｒ−１ビット毎に分割したそれぞれの値に、１ビットのフレームビットを連結し、ｒビットにする。具体的には、最初のブロックから最終ブロックの一つ手前のブロックまではフレームビットを“０”とし、最終ブロックのみフレームビットを“１”とする。ｂビットのステートのうち、レート部分のｒビットに対し、ＮもしくはＡとフレームビットを連結した ｒビットの値との排他的論理和を計算し、置換ｆを計算する。ｆの出力を新たなステート値とする。この操作をＮ，Ａの最終ブロックが排他的論理和されるまで続ける。
【０００８】
＜手順３＞
メッセージＭをｒ−１ビット毎に分割する。最終ブロックに対しては１０＊パディングを施す。Ｍの連結をｒ−１ビット毎に分割したそれぞれの値に、１ビットのフレームビットを連結し、ｒビットにする。具体的には、最初のブロックから最終ブロックの一つ手前のブロックまではフレームビットを“１”とし、最終ブロックのみフレームビットを“０”とする。
【０００９】
ｂビットのステートのうち、レート部分のｒビットに対し、Ｍとフレームビットを連結した r ビットの値との排他的論理和を計算する。計算された ｒビットを暗号文のｒビットとして出力する。ステートに対し置換ｆを計算し、ｆの出力を新たなステート値とする。この操作をＭの最終ブロックが排他的論理和されるまで続ける。Ｍのサイズがｒの倍数でない場合、最終ブロックは端数分のみを暗号文として出力し、ステートに排他的論理和する。
【００１０】
＜手順４＞
ｂビットのステートのうち、レート部分のｒビットをタグのｒビットとして出力する。ステートに対し置換ｆを計算し、ｆの出力を新たなステート値とする。この操作をタグのビット数に達するまで続ける。タグ長がｒの倍数でない場合、最後のｒビットの出力を必要な端数に切り捨ててタグの出力とする。
【００１１】
＜復号＞
SPONGEWRAPの復号関数は、暗号化関数とほぼ同様の計算を行う。図２に、SPONGEWRAPの復号での計算構造を示す。ステートはＩＶに初期化され、暗号化関数の手順１，２同じ処理を行う。手順３は暗号化関数と異なっており、ｂビットのステートのうち、レート部分のｒビットとＣのｒビットの排他的論理和をとり、パディングやフレームビット付与の逆手順を通した値をＭ’のｒ−１ビットとする。ｂビットのステートのうち、レート部分のｒビットをＣのｒビットに置き換え、置換ｆを計算する。ｆの出力を新たなステート値とする。この操作をＣの最終ブロックが排他的論理和されるまで続ける。Ｃの最終ブロックのサイズがｒの倍数でない場合、端数分のみをＭ’の生成とステートの置き換えに利用する。手順３終了後、暗号化関数の手順４と同じ処理を行い、タグＴ’を得る。計算したＴ’と受け取ったＴを比較し、同じ値であればＭ’を復号されたメッセージとして出力する。一致しなかった場合は、復号に失敗したという結果を出力する。
【００１２】
＜donkeySponge＞
非特許文献２に示されたdonkeySpongeは、SPONGEWRAPの追加認証データ処理部分を利用してメッセージ認証コードを計算する方法である。図３にdonkeySpongeの計算構造を示す。メッセージ認証コードを生成する目的では、鍵Ｋおよび入力Ａをｂビットステートの全ビットに排他的論理和をしても安全性を損なうことが無く、効率的に入力データを処理することができる。
【００１３】
＜monkeyDuplex＞
非特許文献２に示されたmonkeyDuplexは、SPONGEWRAPのＫとＮの処理方法に工夫を加え、より効率的な計算を可能にする方法である。Ｋのｃビットまでを、ＩＶのｃビットのキャパシティ部分とする。もしくは、Ｋのｃビットまでと、別に定義されたｃビット定数との排他的論理和をＩＶのｃビットのキャパシティ部分とする。いずれの方法も、暗号化関数，復号関数で手順 １（Ｋの処理）におけるｆの計算関数を少なくすることができるため、計算効率が上昇する。なお、Ｋがｃビットに満たない場合、適切なパディングによりＩＶのｃビットがすべて定義されるようにする。
【００１４】
また、Ｎのｒビットまでを、ＩＶのｒビットのレート部分とする。もしくは、Ｎのｒビットまでと、別に定義されたｒビット定数との排他的論理和をＩＶのｒビットのレート部分とする。手順２におけるｆの計算関数を少なくすることができるため、計算効率が上昇する。なお、Ｎがｒビットに満たない場合、適切なパディングによりＩＶのｒビットがすべて定義されるようにする。monkeyDuplexによるステートの初期化およびＫ，Ｎの処理を図 ４に示す。
【先行技術文献】
【非特許文献】
【００１５】
【非特許文献１】Guido Bertoni, Joan Daemen, Michael Peeters and Gilles Van  Assche,“Duplexing the Sponge: Single-Pass Authenticated Encryption and Other Applications”, SAC 2011, (eds.) Ali Miri and Serge Vaudenay, LNCS, Vol. 7118, pages 320-337, Springer, 2012.
【非特許文献２】Guido Bertoni, Joan Daemen, Michael Peeters and Gilles Van Assche,“Permutation-based encryption, authentication and authenticated encryption”, Workshop Records of DIAC 2012.
【発明の概要】
【発明が解決しようとする課題】
【００１６】
しかしながら、SPONGEWRAPでは、追加認証データＡをｒ−１ビットごとに処理するため、置換演算ｆの回数が多くなり非効率である。そこで、本発明は、置換演算ｆの演算回数を少なくすることを目的とする。
【課題を解決するための手段】
【００１７】
本発明の暗号化システムは、暗号化装置と復号装置を有する。まず、Ｋを暗号化装置と復号装置の両方で共有する秘密鍵、Ａを追加認証データ、Ｍをメッセージ、Ｃを暗号文、Ｔをタグ、Ｋ，Ａ，Ｍをビット列、Ｎをすべてのビットが“０”のビット列を除くビット列、ｒ，ｃ，ｂ，Ｐ，Ｑを１以上の整数、ｂ＝ｒ＋ｃ、ｐを１以上Ｐ以下の整数、ｑを１以上Ｑ以下の整数、Ｓをあらかじめ定めた１以上の整数、ｓを１以上Ｓ以下の整数、ｆをｂビットの置換演算、ｇを０〜２ｃ−１の整数からなる有限体の元と０と１以外のあらかじめ定めた定数との有限体上での乗算とする。また、ステートを、あらかじめ定められたｒビットがレート部分、ｃビットがキャパシティ部分であるｂビットのビット列とする。
【００１８】
暗号化装置は、暗号化用初期値設定部、メッセージ分割部、暗号化用追加認証データ分割部、暗号化部、暗号化用タグ計算部、出力部を備える。暗号化用初期値設定部は、Ｎを選択し、ＮとＫを用いてｂビットの暗号化用初期値を生成し、暗号化用初期値をｆにより置換した結果をステートとする。メッセージ分割部は、メッセージＭを、パディングを用いてｒビットごとのメッセージブロックｍ１，…，ｍＰに分割する。暗号化用追加認証データ分割部は、追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する。
【００１９】
暗号化部は、Ｐ＝Ｑの場合は、次の（１）〜（３）を実行する。
【００２０】
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返す。
【００２１】
（２）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００２２】
（３）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める。
【００２３】
暗号化部は、Ｐ＞Ｑの場合は、次の（１）〜（４）を実行する。
【００２４】
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｑまで繰り返す。
【００２５】
（２）Ｐ−１≧Ｑ＋１ならば、ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返す。
【００２６】
（３）ステートのレート部分とメッセージブロックｍＰとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄＰとするともに、ステートのレート部分を当該計算の結果に置き換える。キャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００２７】
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める。
【００２８】
暗号化部は、Ｐ＜Ｑの場合は、次の（１）〜（４）を実行する。
【００２９】
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｐまで繰り返す。
【００３０】
（２）Ｐ＋１≦Ｑ−１ならば、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返す。
【００３１】
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００３２】
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める。
【００３３】
暗号化用タグ計算部は、Ｓ＝１の場合はステートのレート部分からタグＴを求める。Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１とする。Ｓ≧２の場合はさらに、ステートをｆにより置換した結果を新たなステートとし、そのレート部分をタグブロックｔｓとする処理をｓ＝２からｓ＝Ｓまで繰り返す。そして、タグブロックｔ１，…，ｔＳを用いてタグＴを求める。出力部は、Ｃ，Ｔ，Ａ，Ｎの組を出力する。
【００３４】
復号装置は、入力部、復号用初期値設定部、暗号文分割部、復号用追加認証データ分割部、復号部、復号用タグ計算部、検証部を備える。入力部は、Ｃ，Ｔ，Ａ，Ｎの組を取得する。復号用初期値設定部は、ＮとＫを用いてｂビットの復号用初期値を生成し、前記復号用初期値をｆにより置換した結果をステートとする。暗号文分割部は、暗号文Ｃを、ｒビットごとの暗号ブロックｄ１，…，ｄＰに分割する。復号用追加認証データ分割部は、追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する。
【００３５】
復号部は、Ｐ＝Ｑの場合は、次の（１）〜（３）を実行する。
【００３６】
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返す。
【００３７】
（２）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００３８】
（３）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする。
【００３９】
復号部は、Ｐ＞Ｑの場合は、次の（１）〜（４）を実行する。
【００４０】
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｑまで繰り返す。
【００４１】
（２）Ｐ−１≧Ｑ＋１ならば、ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返す。
【００４２】
（３）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換える。キャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００４３】
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする。
【００４４】
復号部は、Ｐ＜Ｑの場合は、次の（１）〜（４）を実行する。
【００４５】
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｐまで繰り返す。
【００４６】
（２）Ｐ＋１≦Ｑ−１ならば、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返す。
【００４７】
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００４８】
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする。
【００４９】
復号用タグ計算部は、Ｓ＝１の場合はステートのレート部分からタグＴ’を求める。Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１’とする。Ｓ≧２の場合はさらに、ステートをｆにより置換した結果を新たなステートとしてレート部分をタグブロックｔｓ’とする処理をｓ＝２からｓ＝Ｓまで繰り返す。そして、タグブロックｔ１’，…，ｔＳ’を用いてタグＴ’を求める。検証部は、タグＴとタグＴ’とを比較する。
【発明の効果】
【００５０】
SPONGEWRAPでは、追加認証データＡとメッセージＭを順番にｒ−１ビットごとに処理するため、｜Ａ｜／（ｒ−１）＋｜Ｍ｜／（ｒ−１）回数程度の置換演算ｆを行う必要があった。本発明の暗号化システムでは、キャパシティ部分に対して排他的論理和の計算を行っても、その結果を分からない状態にすれば安全な暗号化を実現できることを利用して、キャパシティ部分と追加認証データＡとの排他的論理和の計算と、レート部分とメッセージＭとの排他的論理和の計算を並列に行う。さらに、追加認証データＡに対する処理とメッセージＭに対する処理が異なるので、処理対象のデータが追加認証データＡかメッセージＭかを判別するために必要なフレームビットが不要となる。よって、追加認証データＡはｃビットごとに処理でき、メッセージＭはｒビットごとに処理できる。したがって、置換演算ｆを行う回数を、｜Ａ｜／ｃと｜Ｍ｜／ｒの大きい方程度にできる。つまり、置換演算ｆの演算回数を少なくできる。なお、｜｜はビット列のビット数を示す記号である。
【図面の簡単な説明】
【００５１】
【図１】SPONGEWRAPの暗号化での計算構造を示す図。
【図２】SPONGEWRAPの復号での計算構造を示す図。
【図３】donkeySpongeの計算構造を示す図。
【図４】monkeyDuplexによるステートの初期化およびＫ，Ｎの処理を示す図。
【図５】本発明の暗号化システムの機能構成例を示す図。
【図６】本発明の暗号化でのＰ＝Ｑの場合の計算構造の例を示す図。
【図７】本発明の暗号化でのＰ＞Ｑの場合の計算構造の例を示す図。
【図８】本発明の暗号化でのＰ＜Ｑの場合の計算構造の例を示す図。
【図９】本発明の復号でのＰ＝Ｑの場合の計算構造の例を示す図。
【図１０】本発明の復号でのＰ＞Ｑの場合の計算構造の例を示す図。
【図１１】本発明の復号でのＰ＜Ｑの場合の計算構造の例を示す図。
【図１２】本発明の暗号化装置の処理フローを示す図。
【図１３】本発明の復号装置の処理フローを示す図。
【発明を実施するための形態】
【００５２】
以下、本発明の実施の形態について、詳細に説明する。なお、同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【実施例１】
【００５３】
図５に本発明の暗号化システムの機能構成例を示す。図６は本発明の暗号化でのＰ＝Ｑの場合の計算構造の例を示す図、図７は本発明の暗号化でのＰ＞Ｑの場合の計算構造の例を示す図、図８は本発明の暗号化でのＰ＜Ｑの場合の計算構造の例を示す図である。なお、図７，８では初期値設定部１１０とタグ計算部１５０の計算構造の部分は省略しているが、図６と同じ計算構造である。図９は本発明の復号でのＰ＝Ｑの場合の計算構造の例を示す図、図１０は本発明の復号でのＰ＞Ｑの場合の計算構造の例を示す図、図１１は本発明の復号でのＰ＜Ｑの場合の計算構造の例を示す図である。なお、図１０，１１では初期値設定部２１０とタグ計算部２５０の計算構造の部分は省略しているが、図９と同じ計算構造である。また、図１２は本発明の暗号化装置の処理フロー、図１３は本発明の復号装置の処理フローを示す図である。実施例１の暗号化システムは、ネットワーク８００を介して接続された暗号化装置１００と復号装置２００で構成される。まず、Ｋを暗号化装置と復号装置の両方で共有する秘密鍵、Ａを追加認証データ、Ｍをメッセージ、Ｃを暗号文、Ｔをビット数ＬＴのタグ、Ｋ，Ａ，Ｍをビット列、Ｎをすべてのビットが“０”のビット列を除くビット列、ｒ，ｃ，ｂ，Ｐ，Ｑを１以上の整数、ｂ＝ｒ＋ｃ、ｐを１以上Ｐ以下の整数、ｑを１以上Ｑ以下の整数、Ｓをあらかじめ定めた１以上の整数、ｓを１以上Ｓ以下の整数、ｆをｂビットの置換演算、ｇを０〜２ｃ−１の整数からなる有限体の元と０と１以外のあらかじめ定めた定数との有限体上での乗算、｜｜をビット列のビット数を示す記号とする。また、ステートを、あらかじめ定められたｒビットがレート部分、ｃビットがキャパシティ部分であるｂビットのビット列とする。
【００５４】
＜暗号化装置＞
暗号化装置１００は、初期値設定部１１０、メッセージ分割部１２０、追加認証データ分割部１３０、暗号化部１４０、タグ計算部１５０、出力部１９０を備える。初期値設定部１１０は、Ｎを選択し、ＮとＫを用いてｂビットの初期値を生成し、初期値をｆにより置換した結果をステートとする（Ｓ１１０）。例えば、初期値設定部１１０は、初期値として、レート部分にＮを埋め込み、キャパシティ部分にＫを埋め込めばよい。「埋め込む」とは、例えば、Ｎのビット数がｒより小さいときはパディングによってｒビットにした上でレート部分にすることを意味している。また、Ｎのビット数がｒよりも大きい場合はＮからｒビットを切り出す、もしくはハッシュ関数などを用いてｒビットに変換してレート部分にしてもよい。ｆはSPONGEWRAPで説明した置換と同じであり、あらかじめ暗号化装置１００と復号装置２００との間で定めておく。図６〜８では、１１０を付した点線で囲まれた部分が初期値設定部に相当する。
【００５５】
メッセージ分割部１２０は、メッセージＭを、パディングを用いてｒビットごとのメッセージブロックｍ１，…，ｍＰに分割する（Ｓ１２０）。パディングには１０＊パディングを用いればよい。例えば、ビット数がｒビットの整数倍（Ｐ倍）になるようにメッセージＭにパディングを行い、ｒビットごとに分割することでメッセージブロックｍ１，…，ｍＰを生成すればよい。Ｐは｜Ｍ｜／ｒを下回らない整数となる。図６〜８では、１２０を付した点線で囲まれた部分がメッセージ分割部に相当する。
【００５６】
追加認証データ分割部１３０は、追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する（Ｓ１３０）。同様に、パディングには１０＊パディングを用いればよい。例えば、ビット数がｃビットの整数倍（Ｑ倍）になるように追加認証データＡにパディングを行い、ｃビットごとに分割することで追加認証データブロックａ１，…，ａＱを生成すればよい。Ｑは｜Ａ｜／ｃを下回らない整数となる。図６〜８では、１３０を付した点線で囲まれた部分がメッセージ分割部に相当する。
【００５７】
暗号化部１４０では、ステートのレート部分とメッセージブロックｍｐとの排他的論理和の計算を行い、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和の計算を行う。この処理１回ごとに置換演算ｆを行い、すべてのメッセージブロックと追加認証データブロックについての処理が終了するまで繰り返す。そして、最後にキャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。また、上述のレート部分とメッセージブロックｍｐとの排他的論理和の計算の結果を暗号ブロックｄｐとし、暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める（Ｓ１４０）。「排他的論理和」はビット単位の排他的論理和であり、同じ位置のビット同士の排他的論理和を行う演算である。例えば、ビット列“１０１００”とビット列“００１１０”との排他的論理和の結果は“１００１０”である。「結合処理を用いて暗号文Ｃを求める」とは、単に暗号ブロックｄ１，…，ｄＰを結合して暗号文Ｃとすること、および、結合した上でパディング部分を取り除いて暗号文Ｃとすることを含む意味である。図６〜８では、１４０を付した点線で囲まれた部分が暗号化部に相当する。
【００５８】
暗号化部１４０の処理を、Ｐ＝Ｑ、Ｐ＞Ｑ、Ｐ＜Ｑの３つに場合分けして詳細に説明する。暗号化部１４０は、Ｐ＝Ｑの場合は、次の（１）〜（３）を実行する（図６参照）。
【００５９】
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返す。
【００６０】
（２）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００６１】
（３）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める。
【００６２】
暗号化部１４０は、Ｐ＞Ｑの場合は、次の（１）〜（４）を実行する（図７参照）。
【００６３】
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｑまで繰り返す。
【００６４】
（２）Ｐ−１≧Ｑ＋１ならば（ＰとＱの差が２以上ならば）、ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返す。つまり、ＰとＱとの差が１の場合はこの処理は行わない。
【００６５】
（３）ステートのレート部分とメッセージブロックｍＰとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄＰとするともに、ステートのレート部分を当該計算の結果に置き換える。キャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００６６】
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める。
【００６７】
暗号化部１４０は、Ｐ＜Ｑの場合は、次の（１）〜（４）を実行する（図８参照）。
【００６８】
（１）ステートのレート部分とメッセージブロックｍｐとの排他的論理和を計算し、当該計算の結果をｒビットの暗号ブロックｄｐとするとともに、ステートのレート部分を当該計算の結果に置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｐまで繰り返す。
【００６９】
（２）Ｐ＋１≦Ｑ−１ならば（ＰとＱの差が２以上ならば）、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返す。
【００７０】
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００７１】
（４）暗号ブロックｄ１，…，ｄＰの結合処理を用いて暗号文Ｃを求める。
【００７２】
タグ計算部１５０は、Ｓ＝１の場合はステートのレート部分からタグＴを求める。Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１とする。Ｓ≧２の場合はさらに、ステートをｆにより置換した結果を新たなステートとし、そのレート部分をタグブロックｔｓとする処理をｓ＝２からｓ＝Ｓまで繰り返す。そして、タグブロックｔ１，…，ｔＳを用いてタグＴを求める（Ｓ１５０）。Ｓ＝１の場合は、レート部分をそのままタグＴとしてもよいし、レート部の中からビット数ＬＴだけを切り出してタグＴとしてもよい。Ｓ≧２の場合は、例えば、タグブロックｔ１，…，ｔＳを結合した結果をタグＴとしてもよいし、タグブロックｔ１，…，ｔＳを結合した結果からビット数ＬＴよりも多いビット分を切り捨てて（ビット数ＬＴ分を切り出して）タグＴとしてもよい。また、各タグブロックｔｓから所定のビットを切り出した後、それらを結合してタグＴとしてもよい。なお、Ｓは、ｒ×ＳがタグＴのビット数ＬＴ以上となるようにあらかじめ定めておけばよい。図６〜８では、１５０を付した点線で囲まれた部分がタグ計算部に相当する。出力部１９０は、Ｃ，Ｔ，Ａ，Ｎの組を出力する（Ｓ１９０）。出力されたＣ，Ｔ，Ａ，Ｎの組が復号装置２００に送信される。
【００７３】
＜復号装置＞
復号装置２００は、入力部２９０、初期値設定部２１０、暗号文分割部２２０、追加認証データ分割部２３０、復号部２４０、タグ計算部２５０、検証部２６０を備える。入力部２９０は、Ｃ，Ｔ，Ａ，Ｎの組を取得する（Ｓ２９０）。
【００７４】
初期値設定部２１０は、ＮとＫを用いてｂビットの初期値を生成し、初期値をｆにより置換した結果をステートとする（Ｓ２１０）。例えば、初期値設定部２１０は、初期値として、レート部分にＮを埋め込み、キャパシティ部分にＫを埋め込めばよい。図９〜１１では、２１０を付した点線で囲まれた部分が初期値設定部に相当する。
【００７５】
暗号文分割部２２０は、暗号文Ｃを、ｒビットごとの暗号ブロックｄ１，…，ｄＰに分割する（Ｓ２２０）。暗号ブロックｄ１，…，ｄＰへの分割は、暗号化装置１００の暗号化部１４０が行った結合処理の逆を行う。図９〜１１では、２２０を付した点線で囲まれた部分がメッセージ分割部に相当する。
【００７６】
追加認証データ分割部２３０は、追加認証データＡを、パディングを用いてｃビットごとの追加認証データブロックａ１，…，ａＱに分割する（Ｓ２３０）。パディングには１０＊パディングを用いればよい。図９〜１１では、２３０を付した点線で囲まれた部分が追加認証データ分割部に相当する。
【００７７】
復号部２４０では、ステートのレート部分と暗号ブロックｄｐとの排他的論理和の計算を行い、レート部分を暗号ブロックｄｐに置き換え、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和の計算を行う。この処理１回ごとに置換演算ｆを行い、すべての暗号ブロックと追加認証データブロックについての処理が終了するまで繰り返す。そして、最後にキャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。また、上述のレート部分と暗号ブロックｄｐとの排他的論理和の計算の結果をメッセージブロックｍｐ’とし、メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする（Ｓ２４０）。図９〜１１では、２４０を付した点線で囲まれた部分が復号部に相当する。
【００７８】
復号部２４０の処理を、Ｐ＝Ｑ、Ｐ＞Ｑ、Ｐ＜Ｑの３つに場合分けして詳細に説明する。復号部２４０は、Ｐ＝Ｑの場合は、次の（１）〜（３）を実行する（図９参照）。
【００７９】
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｐ−１まで繰り返す。
【００８０】
（２）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００８１】
（３）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする。
【００８２】
復号部２４０は、Ｐ＞Ｑの場合は、次の（１）〜（４）を実行する（図１０参照）。
【００８３】
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｑまで繰り返す。
【００８４】
（２）Ｐ−１≧Ｑ＋１ならば（ＰとＱの差が２以上ならば）、ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝Ｑ＋１からｐ＝Ｐ−１まで繰り返す。
【００８５】
（３）ステートのレート部分と暗号ブロックｄＰとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍＰ’とするともに、ステートのレート部分を暗号ブロックｄＰに置き換える。キャパシティ部分のｃビットを０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００８６】
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする。
【００８７】
復号部２４０は、Ｐ＜Ｑの場合は、次の（１）〜（４）を実行する（図１１参照）。
【００８８】
（１）ステートのレート部分と暗号ブロックｄｐとの排他的論理和を計算し、当該計算の結果をｒビットのメッセージブロックｍｐ’とするとともに、ステートのレート部分を暗号ブロックｄｐに置き換える。ステートのキャパシティ部分と追加認証データブロックａｐとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｐ＝１からｐ＝Ｐまで繰り返す。
【００８９】
（２）Ｐ＋１≦Ｑ−１ならば（ＰとＱの差が２以上ならば）、ステートのキャパシティ部分と追加認証データブロックａｑとの排他的論理和を計算してキャパシティ部分を当該計算の結果に置き換える。その後、ｆにより置換した結果を新たなステートとする。これらの処理を、ｑ＝Ｐ＋１からｑ＝Ｑ−１まで繰り返す。
【００９０】
（３）ステートのキャパシティ部分と追加認証データブロックａＱとの排他的論理和を計算した結果を０〜２ｃ−１の整数からなる有限体の元として扱ってｇによる乗算を行い、キャパシティ部分を当該乗算で得られたビット列に置き換える。その後、ｆにより置換した結果を新たなステートとする。
【００９１】
（４）メッセージブロックｍ１’，…，ｍＰ’からパディングで付加されたビットを取り除いた結合をしてメッセージＭ’とする。
【００９２】
タグ計算部２５０は、Ｓ＝１の場合はステートのレート部分からタグＴ’を求める。Ｓ≧２の場合は、ステートのレート部分をタグブロックｔ１’とする。Ｓ≧２の場合はさらに、ステートをｆにより置換した結果を新たなステートとしてレート部分をタグブロックｔｓ’とする処理をｓ＝２からｓ＝Ｓまで繰り返す。そして、タグブロックｔ１’，…，ｔＳ’を用いてタグＴ’を求める（Ｓ２５０）。図９〜１１では、２５０を付した点線で囲まれた部分がタグ計算部に相当する。検証部２６０は、タグＴとタグＴ’とを比較する（Ｓ２６０）。復号装置２００は、Ｔ＝Ｔ’のときはメッセージＭ’を復号されたメッセージとする。Ｔ≠Ｔ’のときは復号に失敗したという結果を出力する。
【００９３】
＜効果＞
SPONGEWRAPでは、追加認証データＡとメッセージＭを順番にｒ−１ビットごとに処理するため、｜Ａ｜／（ｒ−１）＋｜Ｍ｜／（ｒ−１）回数程度の置換演算ｆを行う必要があった。本発明の暗号化システムでは、キャパシティ部分に対して排他的論理和の演算を行っても、その結果を分からない状態にすれば暗号化の安全性を確保できることに着目している。そして、暗号化部１４０と復号部２４０の処理中でｇの演算を行うことなどによって、結果が分からないようにしている。よって、本発明の暗号化システムによれば、キャパシティ部分と追加認証データＡとの排他的論理和の計算と、レート部分とメッセージＭとの排他的論理和の計算を並列に行うことができる。さらに、追加認証データＡに対する処理とメッセージＭに対する処理が異なるので、処理対象のデータが追加認証データＡかメッセージＭかを判別するために必要なフレームビットが不要となる。よって、追加認証データＡはｃビットごとに処理でき、メッセージＭはｒビットごとに処理できる。したがって、置換演算ｆを行う回数を、｜Ａ｜／ｃと｜Ｍ｜／ｒの大きい方程度にできる。つまり、置換演算ｆの演算回数を少なくできる。
【００９４】
［プログラム、記録媒体］
上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【００９５】
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
【００９６】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００９７】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００９８】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００９９】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【符号の説明】
【０１００】
１００  暗号化装置                  １１０，２１０  初期値設定部
１２０  メッセージ分割部            １３０，２３０  追加認証データ分割部
１４０  暗号化部                    １５０，２５０  タグ計算部
１９０  出力部                      ２００  復号装置
２２０  暗号文分割部                ２４０  復号部
２６０  検証部                      ２９０  入力部
８００  ネットワーク
【図１】
0006273225.tif 000002
【図２】
0006273225.tif 000003
【図３】
0006273225.tif 000004
【図４】
0006273225.tif 000005
【図５】
0006273225.tif 000006
【図６】
0006273225.tif 000007
【図７】
0006273225.tif 000008
【図８】
0006273225.tif 000009
【図９】
0006273225.tif 000010
【図１０】
0006273225.tif 000011
【図１１】
0006273225.tif 000012
【図１２】
0006273225.tif 000013
【図１３】
0006273225.tif 000014