(本開示にかかる実施形態の概要)
本開示の実施の形態の説明に先立って、本開示にかかる実施の形態の概要について説明する。なお、以下、本開示の実施形態を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。また、以下の説明において、使用されるインデックス(英文字)は、本明細書全体で共通のものとは限らない。例えば、インデックスiは、ある文脈と別の文脈とにおいて、異なるものを意味することがある。
まず、認証暗号(AE)の基本的な入出力について説明する。なお、以下の説明では、秘密鍵Kを共有する2者としてAliceとBobとの間の通信を考え、AliceからBobへ認証暗号による暗号化を行ったメッセージを通信するものとする。
認証暗号の暗号化関数をEncとし、復号関数をDecとする。また、暗号化したい平文をMとし、さらにナンス(Nonce(ノンス))と呼ばれる変数N(初期ベクトル)を導入する。また、関連データ(Associated Data;AD)をAとする。ここで、関連データA(ヘッダ)は、暗号化は行われないが改ざん検知は行われる値である。
まず、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に送信する。
次に、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が正しく復号される。
また、上記の処理においては、通常、暗号化においてナンスNが過去の値と偶然一致してしまわないようにすることが重要である。このために、暗号化側では、カウンタなどの何らかの状態変数を用いて、ナンスの一致を防ぐ。すなわち、典型的には、状態変数として直前に使ったNを記憶しておき、毎回Nをインクリメントすることで、ナンスNが過去の値と重複しないことが、実現される。
また、非特許文献1では、暗号化と復号の際に、Tweak(トウィーク)と呼ばれる公開調整値(補助変数)を導入するTweakableブロック暗号(Tweakable Block Cipher;TBC)と呼ばれるブロック暗号を用いている。つまり、TBCでは、ブロック暗号の入力にTweakを含めた鍵付き置換を行っている。そして、Tweakが異なるTBCは、それぞれ独立なブロック暗号とみなすことができる。
ここで、TweakをTwとすると、TBC関数は、以下の式1のように表される。
・・・(1)
なお、以降の説明において、式1の左辺(TBC関数)を、「E_K^Tw
~(M)」、「E
K
Tw~(M)」、又は、単に「E
K
~」又は「E_K
~」などと表記することがある。
図1は、比較例にかかる認証暗号化装置80の構成を示す図である。図1は、非特許文献1にかかるPFBωにおける暗号化方式を用いて実現された認証暗号化装置80の構成を示している。また、図1は、比較例にかかる認証暗号化装置80の演算の概略を示す図である。
比較例にかかる認証暗号化装置80は、AD処理部82と、暗号化部84と、計算部86と、タグ生成部88とを有する。なお、便宜上、図1において、計算部86は、前段部86aと後段部86bとに分離して描かれているが、計算部86は、一体であってもよい。つまり、計算部86は、前段部86aと後段部86bとが連続して構成されてもよい。
AD処理部82は、関連データ(AD)を処理する。AD処理部82には、関連データAが入力される。AD処理部82は、入力された関連データAを、それぞれbビットの長さのブロック(A_1,・・・,A_a)に分割する。つまり、関連データ(AD)ブロックA_1,・・・,A_aそれぞれのデータ長はbビットである。なお、aはADブロックの数を示す。AD処理部82は、各ADブロックを、鍵K及びTweakが入力されたTBC関数を用いて処理する。
具体的には、AD処理部82は、初期値Z_0(Z0)として0^b(0b)を設定する。ここで、0^bは、bビットのオールゼロを示す。AD処理部82は、初期値0^b(=Z_0)と1ブロック目のADブロックA_1との排他的論理和(XOR)により得られた値を、TBC関数EK
~で暗号化する。これにより、TBC関数EK
~から、暗号化結果として、乱数であるZ_1が出力される。AD処理部82は、この出力された暗号化結果Z_1と2ブロック目のADブロックA_2との排他的論理和により得られた値を、TBC関数EK
~で暗号化する。これにより、TBC関数EK
~から、暗号化結果として、乱数であるZ_2が出力される。このように、AD処理部82は、出力された暗号化結果Z_iと次の(i+1)ブロック目のADブロックA_(i+1)との排他的論理和により得られた値を、TBC関数EK
~で暗号化する、という処理を繰り返す。なお、1≦i≦aである。
そして、AD処理部82は、最後のADブロックA_aと暗号化結果Z_(a-1)との排他的論理和により得られた値を、H_1として、暗号化部84に出力する。ここで、H_1は、bビットの値である。また、AD処理部82は、TBC関数による暗号化結果、つまりTBC関数の出力値である乱数Z_1,・・・,Z_(a-1)を、計算部86に出力する。なお、Zは、H_1を生成する際の途中で生成された値であるので、中間値であるとも言える。
なお、TBC関数に入力されるTweakは、安全性上の理由により、図1に示すように、関連データAのブロックインデックスi(1≦i≦a)に対して、(0^n,i,0,0)のような形式である必要がある。なお、「0^n(0n)」は、nビットのオールゼロを示す。また、nはナンスNのデータ長(ビット数)を示す。なお、複数のTBC関数に入力されるTweakは互いに異なるが、各TBC関数に入力されるTweakそれぞれは、異なる平文が暗号化処理される場合でも同じであり得る。つまり、各TBC関数に入力されるTweakそれぞれは定数であり得る。例えば、1番目のEk
~に入力されるTweak(0n,1,0,0)は、ある平文Maが暗号化処理される場合でも別の平文Mbが暗号化処理される場合でも、同じであり得る。また、これらのことは、後述する暗号化部84及びタグ生成部88におけるTBC関数に入力されるTweakについても、ナンスの値を除き、同様である。
また、関連データAのデータ長は、bビットの倍数であるとする。なお、Tweakを増やせば、任意長(つまりbビットの倍数とならないような長さ)の関連データについてAD処理が可能となる。しかしながら、このことはこの分野の研究者にとっては自明なことなので、説明を省略する。このことは、後述する本実施の形態においても同様である。また、AEの入力として、関連データ(AD)が含まれない(空である)場合がある。その場合は、AD処理部82は必要ない。その場合は、図1の暗号化部84におけるH_1を0^bとすればよい。
暗号化部84は、平文の暗号化を行う。暗号化部84には、ナンスN、平文M、及び、AD処理部82から出力されたH_1が入力される。暗号化部84は、入力された平文Mを、それぞれbビットの長さのブロック(M_1,・・・,M_m)に分割する。つまり、平文ブロックM_1,・・・,M_mそれぞれのデータ長はbビットである。なお、mは平文ブロックの数を示す。暗号化部84は、各平文ブロックを、鍵K、ナンスN及びTweakが入力されたTBC関数を用いて処理する。
具体的には、暗号化部84は、初期値としてH_1を設定する。暗号化部84は、初期値H_1をTBC関数EK
~で暗号化する。これにより、TBC関数EK
~から、暗号化結果として、乱数であるZ_aが出力される。そして、暗号化部84は、この出力された暗号化結果Z_aと1つ目の平文ブロックM_1との排他的論理和により、暗号文ブロックC_1を得る。なお、Zは、暗号文ブロックを生成する際の途中で生成される値であるので、中間値であるとも言える。
次に、暗号化部84は、平文ブロックM_1をTBC関数EK
~で暗号化する。これにより、暗号化結果として、乱数であるZ_(a+1)が出力される。暗号化部84は、暗号化結果Z_(a+1)と2つ目の平文ブロックM_2との排他的論理和により、暗号文ブロックC_2を得る。このように、暗号化部84は、iブロック目の平文ブロックM_iの暗号化結果Z_(a+i)と次の(i+1)ブロック目の平文ブロックM_(i+1)との排他的論理和により、暗号文ブロックC_(i+1)を得る、という処理を繰り返す。なお、0≦i≦mである。
そして、暗号化部84は、最後の平文ブロックM_mがTBC関数EK
~で暗号化されたら、その暗号化結果Z_(a+m)を、T_1として、タグ生成部88に出力する。なお、T_1は、bビットの値であり、タグの一部となる。また、暗号化部84は、生成された暗号文ブロックC_1,・・・,C_mを、暗号文C=C_1||・・・||C_mとして出力する。ここで、「||」は、ビット列の連結を示す。また、暗号文Cは、平文Mと同じ長さ(ビット長)である。また、暗号化部84は、暗号化結果、つまりTBC関数の出力値である乱数Z_a,・・・,Z_(a+m)を、計算部86に出力する。
なお、TBC関数に入力されるTweakは、安全性上の理由により、図1に示すような形式である必要がある。つまり、暗号化部84は、平文Mのブロックインデックスi(1≦i≦m)に対して、(N,a,i,0)をTweakとして入力するTBC関数の暗号化結果を用いてM_iを暗号化して、C_iを得る。なお、暗号化部84の最後に用いられるTBC関数(M_mを入力しT_1を得るもの)に入力されるTweakは、(N,a,m,1)である。また、上述したように、複数のTBC関数に入力されるTweakは互いに異なるが、各TBC関数に入力されるTweakそれぞれは、異なる平文が暗号化処理される場合でも、ナンスNの値を除き、同じであり得る。つまり、各TBC関数に入力されるTweakそれぞれは、ナンスNの値を除き、定数であり得る。なお、このことは、後述する実施の形態においても同様である。
また、関連データと同様に、平文Mのデータ長は、bビットの倍数であるとする。なお、Tweakを増やせば、任意長(つまりbビットの倍数とならないような長さ)の平文について平文処理が可能となる。しかしながら、このことはこの分野の研究者にとって自明なことなので、説明を省略する。また、上述したように、関連データ(AD)がAEの入力に含まれない場合は、H_1を0^bとすればよい。
計算部86は、AD処理部82及び暗号化部84で生成される乱数Z_1,・・・,Z_(a-1),Z_a,・・・,Z_(a+m)を受け付ける。つまり、AD処理部82及び暗号化部84におけるTBC関数の出力値は、全て、計算部86に入力される。そして、そして、計算部86は、これらの乱数と、所定の行列AM(Alpha Matrix)とを用いて、ω-1個の値を生成する。
ここで、以下の式2に示すように、所定の行列AMは、所定の値α_(i,j)を要素とする、(ω-1)×(a+m)のサイズの行列である。ここで、ωは、所定のセキュリティレベルを示す値であり、3以上の整数である。また、ここでいうiは、行列AMの行数のインデックスであり、ラインのインデックスに対応する。なお、2≦i≦ωである。また、jは、行列AMの列数のインデックスであり、入力される乱数Zのインデックス、つまりブロックインデックスに対応する。なお、1≦j≦a+mである。
・・・(2)
計算部86は、以下の式3に示すようにして、行列AMを用いて乱数Z_1,・・・,Z_(a-1),Z_a,・・・,Z_(a+m)を処理して、H_2,・・・,H_ωを生成する。
・・・(3)
また、式3から、各ラインi(2≦i≦ω)に対して、以下の式4が成り立つ。
・・・(4)
ここで、行列AMの要素α_(i,j)は、有限体GF(2^b)の元である。また、行列AMの要素α_(i,j)は、bビットの特定の値である。また、α_(i,j)・Z_jの「・」は、有限体GF(2^b)上の乗算を意味し、図1では、円の中に「×」が描かれた記号で示されている。また、円の中に「+」が描かれた記号は、排他的論理和(XOR)を示す。
つまり、計算部86は、ω-1個のラインi(2≦i≦ω)それぞれについて、乱数Z_jとα_(i,j)との乗算値の排他的論理和を行うことによって、H_iを算出する。なお、比較例(非特許文献1)では、高い安全性を得るため、乱数Z_jを1個からω-1個に拡大している。したがって、ωは、拡大数を意味するとも言える。ここで、H_2,・・・,H_ωは、それぞれbビットの値であり、タグ生成処理に用いられる。そして、計算部86は、得られたH_2,・・・,H_ωを、タグ生成部88に出力する。なお、式2に示した所定の行列AMは、安全性上の理由により、特定の条件を満たす必要がある。詳しくは後述する。
タグ生成部88は、タグTを生成する。タグ生成部88には、暗号化部84からT_1が入力され、計算部86からH_2,・・・,H_ωが入力される。さらに、タグ生成部88には、ナンスNが入力される。タグ生成部88は、T_1を、そのままタグの一部として出力する。また、タグ生成部88は、H_2,・・・,H_ωを、それぞれ、鍵K、ナンスN及び定数であるTweakが入力されたTBC関数を用いて暗号化する。これにより、暗号化結果として、T_2,・・・,T_ωが得られる。そして、タグ生成部88は、それらの暗号化結果をタグとして出力する。つまり、タグ生成部88は、T_1,・・・,T_ωを、タグT=T_1||・・・||T_ωとして出力する。
なお、TBC関数に入力されるTweakは、安全性上の理由により、図1に示すような形式である必要がある。つまり、タグ生成部88は、Hのインデックスi(2≦i≦ω)に対して、(N,a,m,i)をTweakとして入力するTBC関数の暗号化結果を用いてH_iを暗号化して、T_iを得る。また、上述したように、複数のTBC関数に入力されるTweakは互いに異なるが、各TBC関数に入力されるTweakそれぞれは、異なる平文が暗号化処理される場合でも、ナンスNの値を除き、同じであり得る。つまり、各TBC関数に入力されるTweakそれぞれは、ナンスNの値を除き、定数であり得る。
ここで、比較例にかかる問題点について説明する。比較例にかかる認証暗号処理(AE)では、安全性上の制限により、一度に処理できるADブロック数と平文ブロック数との合計が(2^b-1)個以下である必要がある。なお、関連データの入力がない場合、安全性上の制限により、一度に処理できる平文ブロック数は、(2^b-2)個以下である必要がある。すなわち、安全性上の制限により、ADブロック数と平文ブロック数との合計又は平文ブロック数の合計が上記の条件を満たさないと、式2に示したα_ijの行列AMの、以下に説明する条件を満たすことができなくなるからである。
すなわち、行列AMは、MDS(Maximum Distance Separable)行列でなければならない。つまり、行列AMの小行列で正方行列となるものが、全て正則である必要がある。ここで、「小行列」とは、行列から特定の行(単数でも複数でもよい)及び特定の列(単数でも複数でもよい)を取り除くことでできる行列のことである。そして、行列AMが上記条件を満たさない場合の安全性は、現在、知られていない。したがって、行列AMは、MDS行列であることが必要である。
なお、行列AMについて、列数が2^b-1を超えるとき、上記条件を満たすような行列は存在しないことが数学的に証明できる。ここで、「2^b-1」というのは、有限体GF(2^b)の乗法群の元の個数(つまり0以外のbビット値の個数)である。したがって、a+m≦2^b-1でなければならない。なお、関連データ(AD)が空の場合、AD処理と暗号化処理との違いのため、以下に説明するように、m≦2^b-2である必要がある。
すなわち、関連データが空でない場合、a個のADブロックの関連データAを処理するためには、式2の行列AMについて、列数をa-1とする行列AMを準備する必要がある。なぜならば、図1に示すように、TBC関数の前後で、ADブロックを処理できるからである。つまり、1つ目のTBC関数の処理の前で1つ目のADブロックA_1が処理され、そのTBC関数の後で2つ目のADブロックA_2が処理される。また、2つ目のTBC関数の処理の前で2つ目のADブロックA_2が処理され、そのTBC関数の後で3つ目のADブロックA_3が処理される。以後、これを繰り返して、最終的には、a-1番目のTBC関数の処理の前でa-1番目のADブロックA_(a-1)が処理され、そのTBC関数の後でa番目つまり最後のADブロックA_aが処理される。
また、m個の平文ブロックの平文Mを処理するためには、図1に示すように、式2の行列AMについて、列数をm+1とする行列AMを準備する必要がある。なぜならば、図1に示すように、m番目のTBC関数とm番目(つまり最後)の平文ブロックM_mとを用いて暗号文ブロックC_mを生成して、さらにそのm番目の平文ブロックM_mをm+1番目のTBC関数で処理する必要があるからである。これより、関連データが空でない場合は、(a-1)+(m+1)≦2^b-1、つまりa+m≦2^b-1である必要がある。つまり、式2の行列AMにおいて、a+m≦2^b-1であれば、比較例(非特許文献1)にかかるPFBωにおいても、AE処理が可能である。一方、関連データが空である場合、m+1≦2^b-1、つまりm≦2^b-2である必要がある。つまり、式2の行列AMにおいて、m≦2^b-2であれば、比較例(非特許文献1)にかかるPFBωにおいても、AE処理が可能である。
このように、比較例(非特許文献1)にかかるPFBωでは、一度に処理できるブロック数(平文ブロック数、又はADブロック数と平文ブロック数との合計)に制限がある。ここで、PFBωでは、上述したように、ωbビットという比較的高い安全性を実現できる。したがって、理想的には、1回のAE処理における入力について、処理可能な平文長は、2^(ωb)ブロック程度の長さであることが望ましい。しかしながら、PFBωでは、入力ブロック数の制限が、bビット安全性のAEの場合と同じとなってしまっており、効率が悪い。
これに対し、本実施の形態にかかる認証暗号では、以下に説明するように、高い安全性を実現しつつ、一度の認証暗号において処理できる平文ブロックの数を増やすことが可能である。つまり、本実施の形態にかかる認証暗号では、bビット入出力TBC関数を用いて、bビットより大きな安全性を実現し、かつ(2^b-1)個以上のブロック数を処理することが可能である。なお、本実施の形態では、2bビット安全性より大きな安全性レベルを対象とできる。
(実施の形態1)
以下、実施の形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。なお、実施の形態1にかかる認証暗号方法は、上述した比較例(非特許文献1)にかかるPFBωを改良した構成に対応する。
図2は、実施の形態1にかかる認証暗号システム1の構成を示す図である。認証暗号システム1は、認証暗号化装置10と、認証復号装置20とを有する。認証暗号化装置10及び認証復号装置20は、物理的に一体であってもよいし、別個であってもよい。認証暗号化装置10及び認証復号装置20が物理的に互いに別個である場合、認証暗号化装置10及び認証復号装置20は、有線又は無線を介して通信可能に接続されている。また、後述する認証暗号化装置10の構成要素が、互いに別の装置で実現されてもよい。同様に、後述する認証復号装置20それぞれの構成要素が、互いに別の装置で実現されてもよい。
なお、以下の説明では、特に断りのない限り、関連データA、平文M又は暗号文C等を分割して得られた複数のブロックのうちの1ブロックの長さを、所定長であるbビットとする。また、上述したAliceとBobとの間の通信の例において、認証暗号化装置10はAliceに対応し、認証復号装置20はBobに対応する。つまり、認証暗号化装置10及び認証復号装置20との間で通信が行われる。
<認証暗号化装置>
図3は、実施の形態1にかかる認証暗号化装置10の構成を示す図である。また、図4~図7は、実施の形態1にかかる認証暗号処理における演算の概略を示す図である。図3に示すように、認証暗号化装置10は、入力部100と、分割部102と、ナンス生成部104と、AD処理部110と、暗号化部120と、乱数計算部130と、タグ生成部140と、出力部150とを有する。
認証暗号化装置10は、例えばコンピュータ等の情報処理装置によって実現可能である。つまり、認証暗号化装置10は、CPU(Central Processing Unit)などの演算装置と、メモリ又はディスクなどの記憶装置とを有している。認証暗号化装置10は、例えば、記憶装置に格納されたプログラムを演算装置が実行することで、上記の各構成要素を実現する。このことは、後述する他の実施の形態においても同様である。
入力部100は、入力手段としての機能を有する。分割部102は、分割手段としての機能を有する。ナンス生成部104は、ナンス生成手段としての機能を有する。AD処理部110は、関連データ処理手段としての機能を有する。暗号化部120は、暗号化手段としての機能を有する。乱数計算部130は、乱数計算手段(計算手段)としての機能を有する。タグ生成部140は、タグ生成手段としての機能を有する。出力部150は、出力手段としての機能を有する。
入力部100は、暗号化の対象となる平文M、及び関連データAの入力を受け付ける。入力部100は、例えば、キーボードなどの入力装置により実現されてもよい。入力部100は、例えば、ネットワークを介して接続された外部装置などから、平文M及び関連データAの入力を受け付けてもよい。なお、関連データAが存在しない場合もあり、この場合は、関連データAは入力されない。入力部100は、平文M及び関連データAを、分割部102に出力する。
分割部102は、平文M及び関連データAそれぞれを、所定長のブロックに分割する。具体的には、分割部102は、平文Mを、それぞれbビットの平文ブロックM_1,・・・,M_mに分割する。なお、mは、平文ブロックの数である。分割部102は、平文ブロックM_1,・・・,M_mを、暗号化部120に出力する。また、分割部102は、関連データAを、それぞれbビットの長さのADブロックA_1,・・・,A_aに分割する。なお、aは、ADブロックの数である。分割部102は、ADブロックA_1,・・・,A_aを、AD処理部110に出力する。
また、分割部102は、分割されたADブロックA_1,・・・,A_a及び平文ブロックM_1,・・・,M_mを、それぞれブロック数(2^b-2)個の区域(グループ)に区分けする。つまり、1つの区域には、(2^b-2)個のブロックが含まれることとなる。ここで、各区域を、区域#1,・・・,区域#βとする。ここで、βは、区域数である。区域#kは、k番目の区域を示す。なお、1≦k≦βである。このとき、分割部102は、データ列D=A_1||・・・||A_a||M_1||・・・||M_mを、データ列の先頭のブロックから、区域#1,区域#2,・・・,区域#βの順に区分けされるように、各区域に区分けしてもよい。
具体的には、分割部102は、区域#1に全てのADブロックA_1,・・・,A_aが含まれるように、区分けを行う。そして、a<2^b-2の場合、分割部102は、m’個の平文ブロックが区域#1に含まれるように、区分けを行う。ここで、m’は区域#1(1区域目)に含まれる平文ブロックの数である。そして、m’は、a+m’=2^b-2を満たす。そして、実施の形態1では、m>m’であることに留意されたい。
そして、分割部102は、残りの(m-m’)個の平文ブロックを、区域#2~区域#βに区分けする。以後、特に言及しない限り、a<2^b-2であるとして説明する。なお、βは、ADブロックの数a及び平文ブロックの数m、及び、2^b-2の値(つまりbの値)に応じて決まる値である。すなわち、(a+m)mod(2^b-2)=0である場合、βは、除算(a+m)/(2^b-2)の商に対応する。一方、(a+m)mod(2^b-2)≠0である場合、βは、除算(a+m)/(2^b-2)の商に1を加算した値に対応する。
なお、a=2^b-2の場合、区域#1に区分けされる(2^b-2)個のブロックは、全て、ADブロックとなる。そして、分割部102は、区域#2に、データ列D=M_1||・・・||M_mの先頭のブロックから(2^b-2)個の平文ブロックを区分けする。
また、a>2^b-2の場合、区域#1に区分けされる(2^b-2)個のブロックは、全て、ADブロックとなる。そして、残りのADブロックが、区域#2に区分けされる。そして、全てのADブロックA_1,・・・,A_aが区域#1及び区域#2に区分けされた場合、区域#2に区分けされたADブロックと平文ブロックとの合計が(2^b-2)個となるように、区域#2に平文ブロックが区分けされる。ここで、区域#2に区分けされる平文ブロックの数をm’’とすると、a+m’’=2×(2^b-2)である。なお、区域#1及び区域#2にADブロックが区分けされてもなお全てのADブロックの区分けが完了しない場合、さらに、同様にして、区域#3に、ADブロックが区分けされる。
なお、関連データが空の場合、分割部102は、データ列D=M_1||・・・||M_mを、データ列の先頭から区域#1,区域#2,・・・,区域#βの順に区分けされるように、各区域に区分けする。このとき、区域#1に区分けされた平文ブロックの数をm’とすると、m’=2^b-2となる。
なお、区域#kに区分けされた平文ブロックのビット列を「区域平文ブロックM[k]」とすると、平文Mは、M=M[1]||M[2]||・・・||M[β]とも表記され得る。このとき、少なくともM[1]及びM[β]以外の区域平文ブロックM[k]に含まれる平文ブロックの数は、(2^b-2)個となる。また、関連データが空の場合、区域平文ブロックM[1]に含まれる平文ブロックの数も、(2^b-2)個となる。
ここで、ブロック数(2^b-2)個の区域にブロック(ADブロック及び平文ブロック)を区分けすることによって、後述するように、比較例にかかるPFBωの手法を用いて、1つの区域ごとに暗号化及び乱数計算を行うことができる。これにより、PFBωにおいて問題となるブロック数の制限によらないで、PFBωにおける安全性を実現することが可能となる。
なお、上記では、関連データが空でない場合はa+m≦2^b-1である必要があり、関連データが空である場合はm≦2^b-2である必要があると述べた。しかしながら、処理の複雑さを抑制するため、実施の形態1では、1つの区域ごとのブロック数を(2^b-2)個とする。したがって、実施の形態1では、後述するように、(2^b-2)個のブロック(区域)ごとに暗号化及び乱数計算を行う。これにより、実施の形態1では、a+m>2^b-1であっても、平文Mに対して一度に認証暗号を行うことができる。詳しくは後述する。
ナンス生成部104は、過去の値と重複がないようにナンスNを生成する。つまり、ナンス生成部104は、過去に生成された値とは異なるナンスNを生成する。具体的には、例えば、ナンス生成部104は、最初に任意の固定値を出力する。また、ナンス生成部104は、直前に生成したナンスの値を記憶している。そして、ナンス生成部104は、2回目以降にナンスNを生成する際に、記憶された直前の値に1を加えた値を出力する。このように、ナンス生成部104は、1つ前に既に出力した値に1を加えた値を出力することで、過去に生成した値とは異なるナンスNを生成してもよい。なお、ナンス生成部104は、過去に生成した値とは異なる値を生成可能ならば、上述した例とは異なる方法でナンスを生成してもよい。ナンス生成部104は、生成されたナンスNを、暗号化部120及びタグ生成部140に出力する。また、ナンス生成部104は、生成されたナンスNを、出力部150に出力してもよい。
AD処理部110は、図1に示したAD処理部82と同様に、関連データAを処理する。つまり、AD処理部110は、ADブロックA_1,・・・,A_aを、鍵K及びTweakが入力されたTBC関数を用いて処理する。このとき、AD処理部110は、上述した区域ごとに、ADブロックを処理する。なお、a<2^b-2であれば、AD処理部110の処理は、AD処理部82の処理と実質的に同様となる。AD処理部110は、H_1を暗号化部120に出力する。また、AD処理部110は、TBC関数の出力値である乱数Z_1,・・・,Z_(a-1)を乱数計算部130に出力する。
なお、AD処理部110において用いられるTBC関数それぞれに入力されるTweakは、AD処理部82において用いられるTBC関数それぞれに入力されるTweakと異なり得る。詳しくは後述する。
暗号化部120は、図1に示した暗号化部84と同様に、平文Mを処理する。つまり、暗号化部120は、平文ブロックM_1,・・・,M_mを、鍵K及びTweakが入力されたTBC関数を用いて処理する。そして、暗号化部120は、平文ブロックと、この平文ブロックの前の平文ブロックをTBC関数を用いて暗号化して得られた暗号化結果との排他的論理和によって、暗号文ブロックを生成する。このとき、暗号化部120は、上述した区域ごとに、平文ブロック(平文)を暗号化する。つまり、暗号化部120は、区域#1に含まれる平文ブロックについて、暗号化部84と同様に暗号化を行う。そして、暗号化部120は、区域#2に含まれる平文ブロックについて、暗号化部84と同様に暗号化を行う。以降、暗号化部120は、区域#kに含まれる平文ブロックについて、暗号化部84と同様に暗号化を行う。つまり、暗号化部120は、区域#kに含まれる区域平文ブロックM[k]について、暗号化を行う。
暗号化部120は、生成された暗号文ブロックC_1,・・・,C_mを、暗号文C=C_1||・・・||C_mとして、出力部150に出力する。また、暗号化部120は、区域#kに含まれる区域平文ブロックM[k]について暗号化を行って、区域暗号文ブロックC[k]を得る。ここで、区域暗号文ブロックC[k]は、区域平文ブロックM[k]と同じブロック数の暗号文ブロックから構成される。暗号化部120は、各区域で得られた乱数Z(TBC関数の出力値)を、乱数計算部130に出力する。また、暗号化部120は、各区域において、最後の平文ブロックがTBC関数で処理されて得られた暗号化結果Zを、乱数S_1として、タグ生成部140に出力する。暗号化部120の処理の詳細については、後述する。
なお、暗号化部120において用いられるTBC関数それぞれに入力されるTweakは、暗号化部84において用いられるTBC関数それぞれに入力されるTweakと異なり得る。詳しくは後述する。なお、区域ごとに行われるAD処理及び暗号化処理等で用いられるTBC関数に入力されるTweakを互いに区別するため、実施の形態1にかかるTweakの桁数は、比較例にかかるTweakの桁数よりも多くなっている。つまり、比較例では、1つの区域のみの処理が実行されるのに対し、実施の形態1では、複数の区域について処理が実行されるので、その分、Tweakを区別するために桁数を多くする必要がある。
乱数計算部130は、図1に示した計算部86と同様に、AD処理部110及び暗号化部120で生成される乱数Zと、所定の行列AMとを用いて、タグを生成するための値(乱数)を計算する。なお、実施の形態1にかかる行列AMを、以下の式5に示す。ここで、行列AMは、所定の値α_(i,j)を要素とする、(ω-1)×(2^b-1)のサイズの行列である。
・・・(5)
乱数計算部130は、区域ごとに、乱数Sを計算する。具体的には、乱数計算部130は、区域ごとに、AD処理部110及び暗号化部120で生成される乱数Zと、所定の行列AMとを用いて、ω-1個の乱数Sの組(S_2,・・・,S_ω)を生成する。ここで、乱数Sの組は、タグTを生成するために使用される。乱数計算部130は、各区域において、ω-1個のラインi(2≦i≦ω)それぞれについて、乱数Z_jとα_(i,j)との乗算値の排他的論理和を行うことによって、S_iを算出する。
つまり、乱数計算部130は、各区域#kにおいて、以下の式6に示すように、行列AMを用いて乱数Z_1^(k),・・・,Z_(2^b-1)^(k)を処理して、乱数の組S_2^(k),・・・,S_ω^(k)を生成する。つまり、乱数計算部130は、各区域#kについて、式5に示した同じ行列AMを用いて、乱数の組を生成する。ここで、kは、区域数のインデックスである。
・・・(6)
なお、式6から、i(2≦i≦ω)に対して、以下の式7が成り立つ。
・・・(7)
ここで、乱数計算部130は、区域ごとに、Zとαとの乗算値の排他的論理和の各ラインの初期値をリセットする。つまり、乱数計算部130は、各区域について、ラインiの初期値を、0^bとする。言い換えると、乱数計算部130は、区域ごとに、乱数の組が生成される複数のラインそれぞれの初期値を、リセットする。乱数計算部130の処理の詳細については後述する。乱数計算部130は、各区域#kについて生成された乱数の組S_1^(k),・・・,S_ω^(k)を、タグ生成部140に出力する。なお、上述したように、各区域#kにおける乱数S_1^(k)については、暗号化部120によって生成され、タグ生成部140に出力される。
図4は、1区域目つまり区域#1についての、AD処理部110及び乱数計算部130の演算の概略を示す図である。また、図5は、1区域目つまり区域#1についての、暗号化部120及び乱数計算部130の演算の概略を示す図である。また、図6は、2区域目つまり区域#2についての、暗号化部120及び乱数計算部130の演算の概略を示す図である。なお、便宜上、図4及び図5において、乱数計算部130は、前段部130aと後段部130bとに分離して描かれているが、乱数計算部130は、一体であってもよい。つまり、乱数計算部130は、前段部130aと後段部130bとが連続して構成されてもよい。実際に、図6では、乱数計算部130は、一体に描かれている。
図4に示すように、AD処理部110は、区域#1について、ADブロックA_1,・・・,A_aに対して、図1に示したAD処理部82と実質的に同様の処理を行う。そして、AD処理部110は、暗号化結果、つまりTBC関数の出力値である乱数Z_1^(1),・・・,Z_(a-1)^(1)を、乱数計算部130に出力する。なお、上述したように、Z_j^(k)のkは、区域数のインデックスである。つまり、乱数Z_1^(1)の「(1)」は、区域#1(1区域目)において生成された乱数であることを示す。また、AD処理部110は、最後のADブロックA_aと暗号化結果Z_(a-1)^(1)との排他的論理和により得られた値を、H_1として、暗号化部120に出力する。なお、図4~図6の例では、a<2^b-2であるので、AD処理部110は、区域#1についてのみ、処理を行う。
また、図5に示すように、暗号化部120は、区域#1について、平文ブロックM_1,・・・,M_mのうちのM_1,・・・,M_m’に対して、図1に示した暗号化部84と実質的に同様の処理を行う。そして、暗号化部120は、M_1,・・・,M_m’にそれぞれ対応する暗号文ブロックC_1,・・・,C_m’を得る。また、暗号化部120は、暗号化結果、つまりTBC関数の出力値である乱数Z_a^(1),・・・,Z_(a+m’)^(1)を、乱数計算部130に出力する。なお、暗号化部120は、区域#1における最後の平文ブロックM_m’を区域#1における最後のTBC関数で暗号化することにより、区域#1における最後の乱数Z_(a+m’)^(1)を得る。また、暗号化部120は、最後の平文ブロックM_m’がTBC関数で暗号化されたら、その暗号化結果Z_(a+m’)^(1)を、S_1^(1)として、乱数計算部130に出力する。
ここで、上述したように、AD処理部110及び暗号化部120において用いられるTBC関数それぞれに入力されるTweakは、AD処理部82及び暗号化部84において用いられるTBC関数それぞれに入力されるTweakと異なる。AD処理部110において使用されるTBC関数に入力されるTweakは、関連データAのブロックインデックスi(1≦i≦a)に対して、(0^n,i,0,0,0)となる。また、暗号化部120において使用されるTBC関数に入力されるTweakは、平文Mのブロックインデックスi(1≦i≦m’)に対して、(N,a,i,0,0)となる。なお、区域#1について、暗号化部120の最後に用いられるTBC関数(M_m’を入力しS_1^(1)を得るもの)に入力されるTweakは、(N,a,m’,1,0)である。このようにTweakを設定することによって、あるTweakが他のTweakと一致することがなくなる。
また、図4及び図5に示すように、乱数計算部130は、区域#1について、AD処理部110及び暗号化部120で生成される乱数Z_1^(1),・・・,Z_(a-1)^(1),Z_a^(1),・・・,Z_(a+m’)^(1)を処理する。つまり、乱数計算部130は、上記の式6により、式5に示した行列AMを用いて、乱数Z_1^(1),・・・,Z_(a-1)^(1),Z_a^(1),・・・,Z_(a+m’)^(1)を処理する。これにより、乱数計算部130は、区域#1についての乱数の組S_2^(1),・・・,S_ω^(1)を生成する。言い換えると、乱数計算部130は、乱数Z_1^(1),・・・,Z_(a+m’)^(1)それぞれと行列AMの対応する要素との乗算値の排他的論理和を計算することによって、乱数の組S_2^(1),・・・,S_ω^(1)を生成する。乱数計算部130は、区域#1について生成された乱数の組S_1^(1),・・・,S_ω^(1)を、タグ生成部140に出力する。
ここで、上述したように、a+m’=2^b-2である。つまり、区域#1の最後の乱数Z_(a+m’)^(1)は、Z_(2^b-2)^(1)に対応する。したがって、区域#1については、上記の式6において、Z_(2^b-1)^(1)=0である。つまり、区域#1については、上記の式5に示す行列AMの最後の列(α_(2,2^b-1),・・・α_(ω,2^b-1))は、用いられない。つまり、区域#1においては、上記の式7の最後の排他的論理和では、0(=α_(i,2^b-1)・Z_(2^b-1)^(1))が排他的論理和される。このことは、後述する認証復号装置20における復号処理においても同様である。
また、図6に示すように、暗号化部120は、区域#2について、平文ブロックM_1,・・・,M_mのうち、M_m’から続く(2^b-2)個のM_(m’+1),・・・,M_(m’+2^b-2)に対して、区域#1と同様の処理を行う。なお、暗号化部120は、区域#2については、最初のTBC関数に入力される初期値を0^bにリセットしている。そして、暗号化部120は、M_(m’+1),・・・,M_(m’+2^b-2)にそれぞれ対応する暗号文ブロックC_(m’+1),・・・,C_(m’+2^b-2)を得る。また、暗号化部120は、暗号化結果、つまりTBC関数の出力値である乱数Z_1^(2),・・・,Z_(2^b-1)^(2)を、乱数計算部130に出力する。なお、暗号化部120は、区域#2における最後の平文ブロックM_(m’+2^b-2)を区域#2における最後のTBC関数で暗号化することにより、区域#2における最後の乱数Z_(2^b-1)^(2)を得る。また、暗号化部120は、最後の平文ブロックM_(m’+2^b-2)がTBC関数で暗号化されたら、その暗号化結果Z_(2^b-1)^(2)を、S_1^(2)として、乱数計算部130に出力する。
また、図6に示すように、乱数計算部130は、区域#2について、暗号化部120で生成される乱数Z_1^(2),・・・,Z_(2^b-1)^(2)を処理する。つまり、乱数計算部130は、上記の式6により、式5に示した行列AMを用いて、乱数Z_1^(2),・・・,Z_(2^b-1)^(2)を処理する。これにより、乱数計算部130は、区域#2についての乱数の組S_2^(2),・・・,S_ω^(2)を生成する。言い換えると、乱数計算部130は、乱数Z_1^(2),・・・,Z_(2^b-1)^(2)それぞれと行列AMの対応する要素との乗算値の排他的論理和を計算することによって、乱数の組S_2^(2),・・・,S_ω^(2)を生成する。なお、乱数計算部130は、区域#2については、各ラインiの初期値を0^bにリセットしている。乱数計算部130は、区域#2について生成された乱数の組S_1^(2),・・・,S_ω^(2)を、タグ生成部140に出力する。
ここで、上述したように、暗号化部120において用いられるTBC関数それぞれに入力されるTweakは、暗号化部84において用いられるTBC関数それぞれに入力されるTweakと異なる。区域#2において、暗号化部120において使用されるTBC関数に入力されるTweakは、平文Mのブロックインデックスi(m’+1≦i≦m’+2^b-2)に対して、(N,a,i,0,0)となる。なお、区域#2について、暗号化部120の最後に用いられるTBC関数(M_(m’+2^b-2)を入力しS_1^(2)を得るもの)に入力されるTweakは、(N,a,m’+2^b-2,1,0)である。これにより、区域#2におけるTBC関数それぞれに入力されるTweakは、区域#1におけるTBC関数それぞれに入力されるTweakとは異なることとなる。これらのことは、後述する認証復号装置20における復号処理においても同様である。
なお、図4~図6には、区域#1及び区域#2についての演算の概略が示されているが、区域#3以降についても、図6に示した区域#2と実質的に同様の演算がなされる。したがって、区域#3以降の具体的な処理の説明については省略する。なお、乱数計算部130は、ある区域について処理を行うごとに、各ラインの初期値をリセットし、式5に示した同じ行列AM(つまり同じ要素α)を繰り返し呼び出して、乱数の組を生成する。
なお、暗号化部120において用いられるTBC関数それぞれに入力されるTweakは、図6を用いて上述した規則に従って設定される。つまり、各区域#kにおいて、1番目から(2^b-2)番目のTBC関数に入力されるTweakは、平文Mのブロックインデックスiに対して、(N,a,i,0,0)となる。なお、暗号化部120の最後(2^b-1番目)に用いられるTBC関数に入力されるTweakは、(N,a,i,1,0)である。なお、ここでは、iは平文ブロック数mのインデックスであるので、ある区域#kにおけるTBC関数それぞれに入力されるTweakは、別の区域におけるTBC関数それぞれに入力されるTweakとは異なることとなる。なお、最終の区域#βにおいて、平文ブロック数が2^b-2に満たない場合、その満たない分の乱数Z_(j)^(β)の値が0となる。これらのことは、後述する認証復号装置20における復号処理においても同様である。
タグ生成部140は、乱数計算部130によって生成された乱数Sの組と、ナンスNとを用いて、Tweakableブロック暗号を用いたメッセージ認証コード(Message Authentication Code;MAC)により、認証用のタグTを生成する。タグ生成部140は、乱数Sから安全にタグTを生成するために、ナンスベースMACを用いて、乱数の組を統合して、タグTを生成する。ここで、ナンスベースMACとは、MACの入力にナンスが含まれたものである。
タグ生成部140には、ナンス生成部104からナンスNが入力される。また、タグ生成部140には、乱数計算部130から乱数の組が入力される。乱数計算部130が各区域について上述した処理を行うことによって、タグ生成部140は、以下の式8の行列で示されるような乱数の組を得る。ここで、式8は、乱数Sを要素とするω×βの大きさの乱数行列を示す。
・・・(8)
ここで、式8に示す行列において、各列は、各区域について出力された乱数Sを示す。つまり、k番目の列は、区域#kについてタグ生成部140に対して出力された、ω個の乱数S_1^(k),・・・,S_ω^(k)を示す。なお、1つの乱数Sのデータ長はbビットであるので、区域#kについて出力された乱数の組のデータ長は、ωbビットとなる。
また、式8に示す行列において、各行は、乱数計算部130における各ラインで出力された乱数を示す。つまり、i番目の行は、区域#1~区域#βについて、乱数計算部130におけるラインiで出力された、β個の乱数S_i^(1),・・・,S_i^(β)を示す。なお、1番目の行は、区域#1~区域#βについて、暗号化部120から出力された乱数S_1^(1),・・・,S_1^(β)を示す。
そして、タグ生成部140は、式8に示す乱数行列の各行に含まれる乱数S_i^(1),・・・,S_i^(β)を、ナンスベースMACを用いて処理して、タグT[i]を生成する。これにより、以下の式9に示すように、タグ生成部140は、式8に示す乱数行列を用いて、タグT[1],・・・,T[ω]を生成する。
・・・(9)
ここで、タグ生成部140は、ω個のMACを用いてタグT[1],・・・,T[ω]を生成する。つまり、1≦i≦ωとして、タグ生成部140は、i番目のMAC_iを用いて、タグT[i]を生成する。
図7は、実施の形態1にかかるタグ生成部140の演算の概略を示す図である。図7は、タグ生成部140で用いられるタグ導出関数を示す。つまり、図7は、タグ生成部140で用いられるナンスベースMACを示す。ここで、図7は、タグ生成部140が、式8及び式9におけるi番目の行に対応する乱数S_i^(1),・・・,S_i^(β)をMAC_iで処理して、タグT[i]を生成する例を示している。
タグ生成部140は、定数fixを、鍵K、ナンスN及びTweakが入力されたTBC関数EK
~で暗号化する。ここで、このTBC関数EK
~に入力されるTweakは、安全性上の理由により、図7に示すような形式である必要がある。つまり、タグ生成部140は、式8及び式9の各行(各ライン)のインデックスi(1≦i≦ω)に対して、(N,a,m,i,1)をTweakとして入力するTBC関数の暗号化結果を用いて、定数fixを暗号化する。この、定数fixを暗号化して得られた暗号化結果は、ナンスを含むTweakが入力されたTBC関数を用いて生成されるので、ナンス由来の乱数と言える。
また、タグ生成部140は、乱数S_i^(1),・・・,S_i^(β)を、TBC関数EK
~’で暗号化する。ここで、TBC関数EK
~’は、図4~図6(及び図7)に記載されたどのTBC関数EK
~に入力されるTweakとも異なるTweakが入力されるTBC関数である。なお、TBC関数EK
~’に入力されるTweakの形式は、TBC関数EK
~に入力されるTweakの形式と異なってもよいし、同じであってもよい。例えば、S_i^(k)を暗号化するTBC関数EK
~’に入力されるTweakは、((k)_n,a,m,i,2)としてもよい。ここで、「(k)_n」は、数値kをnビット値として表現したものである。なお、このTweakの最後の値が「2」となっているが、図4~図6に記載されたTBC関数EK
~に入力されるTweakの最後の値は、「2」とならない。したがって、Tweakの重複を避けることができる。
そして、タグ生成部140は、TBC関数EK
~を用いて定数fixを暗号化した暗号化結果と、TBC関数EK
~’を用いて乱数S_i^(1),・・・,S_i^(β)を暗号化した暗号化結果との排他的論理和(総和)を、タグT[i]として生成する。タグ生成部140は、i=1~ωについて上記の処理を行い、タグT[1],・・・,T[ω]を生成する。そして、タグ生成部140は、T[1],・・・,T[ω]を、タグT=T[1]||・・・||T[ω]として出力する。
なお、上述したように、ナンスNは、過去の値と重複がないように生成される。したがって、1つのナンスで2回以上平文Mを処理することは、なされない。したがって、ナンスを含んでいないMACと比較して、所望のレベルの安全性を、効率的に実現することができる。すなわち、所望の安全性を実現するためには、例えば、タグの生成に用いられるMACは、taggingクエリの回数に依存しないbビット安全性を持つMACである必要がある。つまり、何回MACを呼び出しても、安全性に影響がないようなMACが望まれる。言い換えると、攻撃者が何回taggingクエリを実行したとしても、MACの安全性が低下しないことが望まれる。
そして、図7に示したナンスベースMACでは、定数fixの暗号化で、ナンス由来の乱数が出力される。ここで、上述したように、ナンスNは、平文Mの認証暗号処理ごとに、異なる値となる。したがって、定数fixの暗号化では、平文Mの認証暗号処理ごとに、異なる乱数が出力され得る。そして、図7に示したナンスベースMACでは、乱数S_i^(1),・・・,S_i^(β)を暗号化した暗号化結果の総和(排他的論理和)を、このナンス由来の乱数で排他的論理和している。したがって、乱数S_i^(1),・・・,S_i^(β)及びそれらの暗号化結果の総和(排他的論理和)が、マスクされることになる。したがって、攻撃者にとってはtaggingクエリの度に新しい乱数が導出されることとなるため、taggingクエリの回数は安全性に影響しないこととなる。
出力部150は、暗号文CとタグTとを出力するための制御を行う。このとき、出力部150は、暗号文CとタグTとを連結して出力するようにしてもよい。出力部150は、例えば、ディスプレイなどの出力装置に暗号文CとタグTとを表示させるための制御を行ってもよい。また、出力部150は、例えば、ネットワークを介して接続された外部装置などに対して、暗号文C及びタグTを出力するように制御を行ってもよい。また、出力部150は、ナンスN及び関連データAを出力するように制御を行ってもよい。例えば、出力部150は、(N,A,C,T)を、認証復号装置20に送信する。
図8は、実施の形態1にかかる認証暗号化装置10の作用を説明するための図である。なお、説明の明確化のため、図8では、関連データを空としている。上述したように、認証暗号化装置10は、平文Mの平文ブロックを、区域#1,区域#2,・・・区域#βにそれぞれ対応する区域平文ブロックM[1],M[2],・・・,M[β]に区分けする。なお、上述したように、区域平文ブロックM[k]それぞれには、(2^b-2)個の平文ブロックが含まれる。
そして、暗号化部120及び乱数計算部130は、区域#1について、入力されたナンスN及び区域平文ブロックM[1]を用いて、区域暗号文ブロックC[1]、及び、乱数の組S_1^(1),・・・,S_ω^(1)を生成する。また、暗号化部120及び乱数計算部130は、区域#2について、入力されたナンスN及び区域平文ブロックM[2]を用いて、区域暗号文ブロックC[2]、及び、乱数の組S_1^(2),・・・,S_ω^(2)を生成する。以下同様にして、暗号化部120及び乱数計算部130は、区域#kそれぞれについて、入力されたナンスN及び区域平文ブロックM[k]を用いて、区域暗号文ブロックC[k]、及び、乱数の組S_1^(k),・・・,S_ω^(k)を生成する。
このとき、暗号化部120は、各区域それぞれについて、比較例にかかる暗号化部84の演算と実質的に同様の演算をサブルーチンとして用いて、処理を行うことができる。なお、このとき、区域ごとに初期値をリセットし、Tweakを適切に設定する必要があることに留意されたい。また、乱数計算部130は、各区域それぞれについて、式5に示す行列AMを呼び出して、比較例にかかる計算部86の演算と実質的に同様の演算をサブルーチンとして用いて、処理を行うことができる。なお、このとき、区域ごとに初期値をリセットする必要があることに留意されたい。これらのことは、後述する認証復号装置20における復号処理においても同様である。
そして、タグ生成部140は、生成された乱数Sの組(式8で示す行列)と、ナンスNとを入力として、上述したように、ω個の適切なナンスベースMACを用いて、タグT[1],・・・,T[ω]を生成する。ここで、上述したように、生成された乱数Sの、TBC関数による暗号化結果の組が、ナンス由来の乱数によってマスクされるので、生成された乱数Sの組の安全性は確保されている。
<認証復号装置>
図9は、実施の形態1にかかる認証復号装置20の構成を示す図である。また、図10~図11は、実施の形態1にかかる認証復号処理における演算の概略を示す図である。図9に示すように、認証復号装置20は、入力部200と、分割部202と、AD処理部210と、復号部220と、乱数計算部230と、タグ生成部240と、タグ検査部250とを有する。
認証復号装置20は、例えばコンピュータ等の情報処理装置によって実現可能である。つまり、認証復号装置20は、CPUなどの演算装置と、メモリ又はディスクなどの記憶装置とを有している。認証復号装置20は、例えば、記憶装置に格納されたプログラムを演算装置が実行することで、上記の各構成要素を実現する。このことは、後述する他の実施の形態においても同様である。
入力部200は、入力手段としての機能を有する。分割部202は、分割手段としての機能を有する。AD処理部210は、関連データ処理手段としての機能を有する。復号部220は、復号手段としての機能を有する。乱数計算部230は、乱数計算手段(計算手段)としての機能を有する。タグ生成部240は、タグ生成手段としての機能を有する。タグ検査部250は、タグ検査手段としての機能を有する。
入力部200は、認証暗号化装置10から出力された、ナンスN、関連データA、復号の対象となる暗号文C、及びタグTの入力を受け付ける。入力部200は、例えば、キーボードなどの入力装置により実現されてもよい。入力部200は、例えば、ネットワークを介して接続された外部装置などから、ナンスN、関連データA、暗号文C及びタグTの入力を受け付けてもよい。なお、関連データAが存在しない場合もあり、この場合は、関連データAは入力されない。入力部200は、ナンスNを、復号部220及びタグ生成部240に出力する。また、入力部200は、暗号文C及び関連データAを、分割部202に出力する。また、入力部200は、タグTを、タグ検査部250に出力する。
分割部202は、暗号文C及び関連データAそれぞれを、所定長のブロックに分割する。具体的には、分割部202は、暗号文Cを、それぞれbビットの暗号文ブロックC_1,・・・,C_mに分割する。なお、mは、暗号文ブロック(つまり平文ブロック)の数である。分割部202は、暗号文ブロックC_1,・・・,C_mを、復号部220に出力する。また、分割部202は、関連データAを、それぞれbビットの長さのADブロックA_1,・・・,A_aに分割する。分割部202は、ADブロックA_1,・・・,A_aを、AD処理部210に出力する。
また、上述した分割部102と同様に、分割部202は、分割されたADブロックA_1,・・・,A_a及び暗号文ブロックC_1,・・・,C_mを、それぞれブロック数(2^b-2)個の区域(グループ)に区分けする。つまり、1つの区域には、(2^b-2)個のブロックが含まれることとなる。このとき、分割部202は、データ列D=A_1||・・・||A_a||C_1||・・・||C_mを、データ列の先頭のブロックから、区域#1,区域#2,・・・,区域#βの順に区分けされるように、各区域に区分けする。なお、区分けの方法は、上述した分割部102の場合と同様であってもよい。
なお、区域#kに区分けされた暗号文ブロックのビット列を「区域暗号文ブロックC[k]」とすると、暗号文Cは、C=C[1]||C[2]||・・・||C[β]とも表記され得る。このとき、少なくともC[1]及びC[β]以外の区域暗号文ブロックC[k]に含まれる暗号文ブロックの数は、(2^b-2)個となる。また、関連データが空の場合、区域暗号文ブロックC[1]に含まれる暗号文ブロックの数も、(2^b-2)個となる。
AD処理部210は、上述したAD処理部110と実質的に同様の処理を行う。つまり、AD処理部210は、ADブロックA_1,・・・,A_aを、鍵K及びTweakが入力されたTBC関数を用いて処理する。このとき、AD処理部210は、上述した区域ごとに、ADブロックを処理する。AD処理部210は、H_1を復号部220に出力する。また、AD処理部210は、TBC関数の出力値である乱数Z_1,・・・,Z_(a-1)を乱数計算部230に出力する。なお、AD処理部210において用いられるTBC関数それぞれに入力されるTweakは、上述したAD処理部110において用いられるTBC関数それぞれに入力されるTweakと、実質的に同様に設定されてもよい。
復号部220は、上述した暗号化部120における暗号化処理に対応した復号処理を行う。復号部220は、暗号文ブロックC_1,・・・,C_mを、鍵K及びTweakが入力されたTBC関数を用いて処理する。このとき、復号部220は、上述した区域ごとに、暗号文ブロック(暗号文)を復号する。つまり、復号部220は、区域#1に含まれる暗号文ブロックについて、上述した暗号化部120における暗号化処理に対応した復号処理を行う。そして、復号部220は、区域#2に含まれる暗号文ブロックについて、上述した暗号化部120における暗号化処理に対応した復号処理を行う。以降、復号部220は、区域#kに含まれる暗号文ブロックについて、上述した暗号化部120における暗号化処理に対応した復号処理を行う。つまり、復号部220は、区域#kに含まれる区域暗号文ブロックC[k]について、復号を行う。
復号部220は、生成された平文ブロックM_1,・・・,M_mを、平文M=M_1||・・・||M_mとして、タグ検査部250に出力する。また、復号部220は、区域#kに含まれる区域暗号文ブロックC[k]について復号を行って、区域平文ブロックM[k]を得る。なお、復号部220は、得られた平文を、平文M=M[1]||M[2]||・・・||M[β]として、タグ検査部250に出力してもよい。また、復号部220は、各区域で得られた乱数Z(TBC関数の出力値)を、乱数計算部230に出力する。また、復号部220は、各区域において、最後の暗号文ブロックがTBC関数で処理されて得られた暗号化結果Zを、乱数S_1として、タグ生成部240に出力する。復号部220の処理の詳細については、後述する。なお、復号部220において用いられるTBC関数それぞれに入力されるTweakは、上述した暗号化部120において用いられるTBC関数それぞれに入力されるTweakと、実質的に同様に設定されてもよい。
乱数計算部230は、上述した乱数計算部130と同様に、AD処理部210及び復号部220で生成される乱数Zと、式5に示した所定の行列AMとを用いて、タグを生成するための乱数Sを計算する。このとき、乱数計算部230は、区域ごとに、乱数Sを計算する。具体的には、乱数計算部230は、区域ごとに、AD処理部210及び復号部220で生成される乱数Zと、所定の行列AMとを用いて、ω-1個の乱数Sの組(S_2,・・・,S_ω)を生成する。ここで、乱数Sの組は、検査用のタグT*を生成するために使用される。乱数計算部230は、上述した乱数計算部130と同様に、各区域において、ω-1個のラインi(2≦i≦ω)それぞれについて、乱数Z_jとα_(i,j)との乗算値の排他的論理和を行うことによって、S_iを算出する。つまり、乱数計算部230は、各区域#kにおいて、上記の式6に示すように、行列AMを用いて乱数Z_1^(k),・・・,Z_(2^b-1)^(k)を処理して、乱数の組S_2^(k),・・・,S_ω^(k)を生成する。
ここで、乱数計算部230は、区域ごとに、Zとαとの乗算値の排他的論理和の各ラインの初期値をリセットする。つまり、乱数計算部230は、各区域について、ラインiの初期値を、0^bとする。言い換えると、乱数計算部230は、区域ごとに、乱数の組が生成される複数のラインそれぞれの初期値を、リセットする。乱数計算部230の処理の詳細については後述する。乱数計算部230は、各区域#kについて生成された乱数の組S_1^(k),・・・,S_ω^(k)を、タグ生成部240に出力する。なお、上述したように、各区域#kにおける乱数S_1^(k)については、復号部220によって生成され、タグ生成部240に出力される。
図10は、1区域目つまり区域#1についての、復号部220及び乱数計算部230の演算の概略を示す図である。なお、区域#1についてのAD処理部210の演算の概略については、図4に記載されたものと実質的に同様であるので、図示を省略している。また、図11は、2区域目つまり区域#2についての、復号部220及び乱数計算部230の演算の概略を示す図である。
図10に示すように、区域#1について、暗号文ブロックC_1,・・・,C_mのうちのC_1,・・・,C_m’に対して、復号処理を行う。具体的には、復号部220は、初期値としてH_1を設定する。復号部220は、初期値H_1をTBC関数EK
~で暗号化する。これにより、TBC関数EK
~から、暗号化結果として、乱数であるZ_a^(1)が出力される。そして、復号部220は、この出力された暗号化結果Z_aと1つ目の暗号文ブロックC_1との排他的論理和により、平文ブロックM_1を得る。
次に、復号部220は、平文ブロックM_1をTBC関数EK
~で暗号化する。これにより、暗号化結果として、乱数であるZ_(a+1)^(1)が出力される。復号部220は、暗号化結果Z_(a+1)^(1)と2つ目の暗号文ブロックC_2との排他的論理和により、平文ブロックM_2を得る。以降、復号部220は、暗号文ブロックC_iを用いて復号された平文ブロックM_iの暗号化結果Z_(a+i)と暗号文ブロックC_(i+1)との排他的論理和により、平文ブロックM_(i+1)を得る、という処理を繰り返す。
そして、復号部220は、C_1,・・・,C_m’にそれぞれ対応する平文ブロックM_1,・・・,M_m’を得る。また、復号部220は、暗号化結果、つまりTBC関数の出力値である乱数Z_a^(1),・・・,Z_(a+m’)^(1)を、乱数計算部230に出力する。なお、復号部220は、区域#1における最後の平文ブロックM_m’を区域#1における最後のTBC関数で暗号化することにより、区域#1における最後の乱数Z_(a+m’)^(1)を得る。また、復号部220は、最後の平文ブロックM_m’がTBC関数で暗号化されたら、その暗号化結果Z_(a+m’)^(1)を、S_1^(1)として、乱数計算部230に出力する。
また、図10に示すように、乱数計算部230は、区域#1について、復号部220で生成されるZ_a^(1),・・・,Z_(a+m’)^(1)を処理する。なお、図10には、AD処理部210については図示されていないが、図4と同様にして、乱数計算部230は、区域#1について、AD処理部210で生成される乱数Z_1^(1),・・・,Z_(a-1)^(1)を処理する。つまり、乱数計算部230は、上記の式6により、式5に示した行列AMを用いて、乱数Z_1^(1),・・・,Z_(a-1)^(1),Z_a^(1),・・・,Z_(a+m’)^(1)を処理する。これにより、乱数計算部230は、区域#1についての乱数の組S_2^(1),・・・,S_ω^(1)を生成する。言い換えると、乱数計算部230は、乱数Z_1^(1),・・・,Z_(a+m’)^(1)それぞれと行列AMの対応する要素との乗算値の排他的論理和を計算することによって、乱数の組S_2^(1),・・・,S_ω^(1)を生成する。乱数計算部230は、区域#1について生成された乱数の組S_1^(1),・・・,S_ω^(1)を、タグ生成部240に出力する。
また、図11に示すように、復号部220は、区域#2について、暗号文ブロックC_1,・・・,C_mのうち、C_m’から続く(2^b-2)個のC_(m’+1),・・・,C_(m’+2^b-2)に対して、区域#1と同様の処理を行う。なお、復号部220は、区域#2については、最初のTBC関数に入力される初期値を0^bにリセットしている。そして、復号部220は、C_(m’+1),・・・,C_(m’+2^b-2)にそれぞれ対応する平文ブロックM_(m’+1),・・・,M_(m’+2^b-2)を得る。また、復号部220は、暗号化結果、つまりTBC関数の出力値である乱数Z_1^(2),・・・,Z_(2^b-1)^(2)を、乱数計算部230に出力する。なお、復号部220は、区域#2における最後の平文ブロックM_(m’+2^b-2)を区域#2における最後のTBC関数で暗号化することにより、区域#2における最後の乱数Z_(2^b-1)^(2)を得る。また、復号部220は、最後の平文ブロックM_(m’+2^b-2)がTBC関数で暗号化されたら、その暗号化結果Z_(2^b-1)^(2)を、S_1^(2)として、乱数計算部230に出力する。
また、図11に示すように、乱数計算部230は、乱数計算部130と実質的に同様にして、区域#2について、復号部220で生成される乱数Z_1^(2),・・・,Z_(2^b-1)^(2)を処理する。つまり、乱数計算部230は、上記の式6により、式5に示した行列AMを用いて、乱数Z_1^(2),・・・,Z_(2^b-1)^(2)を処理する。これにより、乱数計算部230は、区域#2についての乱数の組S_2^(2),・・・,S_ω^(2)を生成する。言い換えると、乱数計算部230は、乱数Z_1^(2),・・・,Z_(2^b-1)^(2)それぞれと行列AMの対応する要素との乗算値の排他的論理和を計算することによって、乱数の組S_2^(2),・・・,S_ω^(2)を生成する。なお、乱数計算部230は、区域#2については、各ラインiの初期値を0^bにリセットしている。乱数計算部230は、区域#2について生成された乱数の組S_1^(2),・・・,S_ω^(2)を、タグ生成部240に出力する。
なお、図10~図11には、区域#1及び区域#2についての演算の概略が示されているが、区域#3以降についても、図11に示した区域#2と実質的に同様の演算がなされる。したがって、区域#3以降の具体的な処理の説明については省略する。なお、乱数計算部230は、乱数計算部130と同様に、ある区域について処理を行うごとに、式5に示した同じ行列AM(つまり同じ要素α)を繰り返し呼び出して、乱数の組を生成する。
タグ生成部240は、乱数計算部230によって生成された乱数Sの組と、ナンスNとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、検査用のタグT*を生成する。なお、タグT*の生成方法については、タグ生成部140におけるタグTの生成方法と実質的に同様である。つまり、タグ生成部240は、TBC関数EK
~を用いて定数fixを暗号化した暗号化結果と、TBC関数EK
~’を用いて乱数S_i^(1),・・・,S_i^(β)を暗号化した暗号化結果との排他的論理和(総和)を、タグT*[i]として生成する。タグ生成部240は、i=1~ωについて上記の処理を行い、タグT*[1],・・・,T*[ω]を生成する。そして、タグ生成部240は、T*[1],・・・,T*[ω]を、タグT*=T*[1]||・・・||T*[ω]として、タグ検査部250に出力する。
タグ検査部250は、認証暗号化装置10によって生成された認証用のタグTと、タグ生成部240によって生成された検査用のタグT*とを比較して、改ざんの有無を検査する。そして、タグ検査部250は、検査結果に基づいて、情報を出力するための制御を行う。なお、タグ検査部250は、例えば、ディスプレイなどの出力装置に情報を表示させるための制御を行ってもよい。また、タグ検査部250は、例えば、ネットワークを介して接続された外部装置などに対して、情報を出力するように制御を行ってもよい。
具体的には、タグ検査部250は、認証用のタグTと検査用のタグT*とが一致する場合に、認証が成功したとして、復号部220によって生成された平文Mを出力するための制御を行う。一方、タグ検査部250は、認証用のタグTと検査用のタグT*とが一致しない場合に、認証が失敗したとして、タグTとタグT*とが一致しないことを示すエラーメッセージ⊥を出力するための制御を行う。
図12は、実施の形態1にかかる認証復号装置20の作用を説明するための図である。なお、説明の明確化のため、図12では、関連データを空としている。上述したように、認証復号装置20は、暗号文Cの暗号文ブロックを、区域#1,区域#2,・・・区域#βにそれぞれ対応する区域暗号文ブロックC[1],C[2],・・・,C[β]に区分けする。なお、上述したように、区域暗号文ブロックC[k]それぞれには、(2^b-2)個の暗号文ブロックが含まれる。
そして、復号部220及び乱数計算部230は、区域#1について、入力されたナンスN及び区域暗号文ブロックC[1]を用いて、区域平文ブロックM[1]、及び、乱数の組S_1^(1),・・・,S_ω^(1)を生成する。また、復号部220及び乱数計算部230は、区域#2について、入力されたナンスN及び区域暗号文ブロックC[2]を用いて、区域平文ブロックM[2]、及び、乱数の組S_1^(2),・・・,S_ω^(2)を生成する。以下同様にして、復号部220及び乱数計算部230は、区域#kそれぞれについて、入力されたナンスN及び区域暗号文ブロックC[k]を用いて、区域平文ブロックM[k]、及び、乱数の組S_1^(k),・・・,S_ω^(k)を生成する。
そして、タグ生成部240は、生成された乱数Sの組(式8で示す行列)と、ナンスNとを入力として、上述したように、ω個の適切なナンスベースMACを用いて、検査用のタグT*[1],・・・,T*[ω]を生成する。そして、タグ検査部250は、タグTとタグT*とが一致する場合に、平文M=M[1]||・・・||M[β]を出力する。一方、タグ検査部250は、タグTとタグT*とが一致しない場合に、エラーメッセージ⊥を出力する。
<認証暗号化方法及び認証復号方法>
次に、図13及び図14を用いて、実施の形態1にかかる認証暗号システム1にかかる動作について説明する。図13は、実施の形態1にかかる認証暗号化装置10で実行される認証暗号化方法を示すフローチャートである。
入力部100は、上述したように、平文M及び関連データAを入力する(ステップS102)。分割部102は、上述したように、平文M及び関連データAそれぞれを、所定長のブロック(平文ブロック及びADブロック)に分割する(ステップS104)。また、分割部102は、上述したように、分割されたADブロック及び平文ブロックを、区域ごとに区分けする(ステップS106)。ナンス生成部104は、上述したように、ナンスNを生成する(ステップS108)。
次に、AD処理部110、暗号化部120及び乱数計算部130は、区域ごとの処理を行う(ステップS110)。具体的には、AD処理部110は、上述したように、ADブロックを処理する(ステップS112)。暗号化部120は、上述したように、平文ブロックを暗号化し、暗号文ブロックを取得する(ステップS114)。乱数計算部130は、上述したように、乱数Sの組を取得する(ステップS116)。
次に、タグ生成部140は、上述したように、区域ごとに生成された乱数Sの組を用いてタグTを生成する(ステップS122)。そして、出力部150は、ナンスN、関連データA、暗号文C、及びタグTを出力する(ステップS124)。
図14は、実施の形態1にかかる認証復号装置20で実行される認証復号方法を示すフローチャートである。入力部200は、ナンスN、関連データA、暗号文C及びタグTを入力する(ステップS202)。分割部202は、上述したように、暗号文C及び関連データAそれぞれを、所定長のブロック(暗号文ブロック及びADブロック)に分割する(ステップS204)。また、分割部202は、上述したように、分割されたADブロック及び暗号文ブロックを、区域ごとに区分けする(ステップS206)。
次に、AD処理部210、復号部220及び乱数計算部230は、区域ごとの処理を行う(ステップS210)。具体的には、AD処理部210は、上述したように、ADブロックを処理する(ステップS212)。復号部220は、上述したように、暗号文ブロックを復号し、平文ブロックを取得する(ステップS214)。乱数計算部230は、上述したように、乱数Sの組を取得する(ステップS216)。
次に、タグ生成部240は、上述したように、区域ごとに生成された乱数Sの組を用いてタグT*を生成する(ステップS222)。タグ検査部250は、上述したように、認証用のタグTと検査用のタグT*とが一致するか否かを判定する(ステップS230)。認証用のタグTと検査用のタグT*とが一致する場合(S230のYES)、タグ検査部250は、平文Mを出力する(ステップS232)。一方、認証用のタグTと検査用のタグT*とが一致しない場合(S230のNO)、タグ検査部250は、エラーメッセージ⊥を出力する(ステップS234)。
<効果>
上述したように、実施の形態1にかかる認証暗号化装置10は、入力ブロック(ADブロック及び平文ブロック)を、比較例にかかるPFBωの手法で処理可能なサイズである(2^b-2)個のブロックを含む区域に区分けする。そして、実施の形態1にかかる認証暗号化装置10は、各区域で生成される乱数Sの組から、タグTを適切に導出するように構成されている。これにより、実施の形態1にかかる認証暗号システム1は、比較例にかかるPFBωの手法では安全性上不可能であった、(2^b-1)個以上の入力ブロックを処理することが可能となる。
そして、上述したように、比較例では、ωbビットの安全性を実現できるにも関わらず、入力ブロック数の制限が、bビット安全性のAEの場合と同じとなっている。したがって、比較例において入力ブロック数の制限を超えるサイズ(b×(2^b-2)ビットを超えるサイズ)の平文を送信しようとすると、前もって処理可能なブロック数ごとに平文を分割する必要がある。そして、分割された平文ごとに暗号化を行って、得られた暗号文の送信を行う必要がある。つまり、比較例では、1つの平文に対して、複数の(N,A,C,T)を送信する必要がある。これに対し、実施の形態1にかかる認証暗号システム1では、処理可能なブロック数の制限がなくなるので、平文のサイズによらないで、一度で、暗号文を送信することが可能となる。つまり、実施の形態1では、単一の(N,A,C,T)のみの送信を行うだけでよい。したがって、通信の負荷を抑制することが可能となる。
(実施の形態2)
次に、実施の形態2について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。なお、実施の形態2にかかるシステム構成については、実施の形態1のシステム構成と実質的に同様であるので、説明を省略する。つまり、実施の形態2にかかる認証暗号システム1は、認証暗号化装置10に対応する認証暗号化装置10Aと、認証復号装置20に対応する認証復号装置20Aとを有する。
実施の形態2は、上述した比較例にかかるPFBωの方式を、比較例で言及されたΘCBの方式に拡張した場合の改良であるΘCBωに対応する。つまり、実施の形態2では、PFBωにおけるブロックのTBC関数を用いた処理(暗号化又は復号、及びAD処理)を、並列に実行することができる。さらに、実施の形態2では、実施の形態1と同様に、平文ブロック(及びADブロック)を所定の長さの区域に区分けして、区域ごとに、処理が行われる。
<認証暗号化装置>
図15は、実施の形態2にかかる認証暗号化装置10Aの構成を示す図である。また、図16~図18は、実施の形態2にかかる認証暗号処理における演算の概略を示す図である。図15に示すように、認証暗号化装置10Aは、入力部100と、分割部102Aと、ナンス生成部104と、AD処理部110Aと、暗号化部120Aと、乱数計算部130Aと、タグ生成部140Aと、出力部150とを有する。
認証暗号化装置10Aは、図2及び図3に示した認証暗号化装置10に対応する。分割部102Aは、実施の形態1にかかる分割部102に対応する。AD処理部110Aは、実施の形態1にかかるAD処理部110に対応する。暗号化部120Aは、実施の形態1にかかる暗号化部120に対応する。乱数計算部130Aは、実施の形態1にかかる乱数計算部130に対応する。タグ生成部140Aは、実施の形態1にかかるタグ生成部140に対応する。なお、以下、認証暗号化装置10Aの構成について、主に、認証暗号化装置10の構成と異なる部分について説明する。
分割部102Aは、実施の形態1にかかる分割部102と同様に、平文M及び関連データAそれぞれを、所定長のブロックに分割する。具体的には、分割部102Aは、平文Mを、それぞれbビットの平文ブロックM_1,・・・,M_mに分割する。分割部102Aは、平文ブロックM_1,・・・,M_mを、暗号化部120Aに出力する。また、分割部102Aは、関連データAを、それぞれbビットの長さのADブロックA_1,・・・,A_aに分割する。分割部102Aは、ADブロックA_1,・・・,A_aを、AD処理部110Aに出力する。
また、分割部102Aは、分割されたADブロックA_1,・・・,A_a及び平文ブロックM_1,・・・,M_mを、それぞれブロック数(2^b-1)個の区域(グループ)に区分けする。つまり、実施の形態2では、1つの区域には、(2^b-1)個のブロックが含まれることとなる。このとき、分割部102Aは、データ列D=A_1||・・・||A_a||M_1||・・・||M_mを、データ列の先頭のブロックから、区域#1,区域#2,・・・,区域#βの順に区分けされるように、各区域に区分けする。なお、実施の形態1の場合と異なり、1つの区域に含まれるブロック数が(2^b-1)個であるのは、実施の形態2では、ブロックの並列処理が可能であるからである。詳しくは後述する。
分割部102Aは、区域#1に全てのADブロックA_1,・・・,A_aが含まれるように、区分けを行う。そして、a<2^b-1の場合、分割部102Aは、m’個の平文ブロックが区域#1に含まれるように、区分けを行う。ここで、m’は区域#1(1区域目)に含まれる平文ブロックの数である。そして、m’は、a+m’=2^b-1を満たす。そして、分割部102Aは、残りの(m-m’)個の平文ブロックを、区域#2~区域#βに区分けする。以後、特に言及しない限り、a<2^b-1であるとして説明する。なお、a=2^b-1又はa>2^b-1である場合の処理については、実施の形態1においてa=2^b-2又はa>2^b-2であるの場合の処理と実質的に同様である。
なお、関連データが空の場合、分割部102Aは、データ列D=M_1||・・・||M_mを、データ列の先頭から、区域#1,区域#2,・・・,区域#βの順に区分けされるように、各区域に区分けする。このとき、区域#1に区分けされた平文ブロックの数をm’とすると、m’=2^b-1となる。
なお、区域#kに区分けされた平文ブロックのビット列を「区域平文ブロックM[k]」とすると、平文Mは、M=M[1]||M[2]||・・・||M[β]とも表記され得る。このとき、少なくともM[1]及びM[β]以外の区域平文ブロックM[k]に含まれる平文ブロックの数は、(2^b-1)個となる。また、関連データが空の場合、区域平文ブロックM[1]に含まれる平文ブロックの数も、(2^b-1)個となる。
AD処理部110Aは、実施の形態1にかかるAD処理部110と同様に、関連データAを処理する。ここで、AD処理部110Aは、ADブロックA_1,・・・,A_aを、鍵K及びTweakが入力されたTBC関数を用いて、並列に処理する。このとき、AD処理部110Aは、上述した区域ごとに、ADブロックを処理する。AD処理部110Aは、鍵K及びTweakが入力されたTBC関数に各ADブロックを入力することで、乱数Zを得る。AD処理部110Aは、各TBC関数の出力値(乱数)である中間値Z_1,・・・,Z_aを乱数計算部130Aに出力する。AD処理部110Aの処理の詳細については後述する。
暗号化部120Aは、実施の形態1にかかる暗号化部120と同様に、平文Mを処理する。ここで、暗号化部120Aは、平文ブロックM_1,・・・,M_mを、鍵K及びTweakが入力されたTBC関数を用いて、並列に処理する。このとき、暗号化部120Aは、上述した区域ごとに、TBC関数を用いて、平文ブロック(平文)を並列に暗号化する。つまり、暗号化部120Aは、区域#1に含まれる平文ブロックについて、TBC関数を用いて、並列に暗号化を行う。そして、暗号化部120Aは、区域#2に含まれる平文ブロックについて、TBC関数を用いて、並列に暗号化を行う。以降、暗号化部120Aは、区域#kに含まれる平文ブロックを、TBC関数を用いて、並列に暗号化する。つまり、暗号化部120Aは、区域#kに含まれる区域平文ブロックM[k]について、平文ブロックごとに並列に暗号化を行う。暗号化部120Aは、鍵K及びTweakが入力されたTBC関数に各平文ブロックを入力することで、TBC関数の出力値として、暗号文ブロックを得る。つまり、暗号化部120Aは、区域ごとに、複数の平文ブロックをTBC関数を用いて並列に暗号化することによって、暗号文ブロックを生成する。
暗号化部120Aは、生成された暗号文ブロックC_1,・・・,C_mを、暗号文C=C_1||・・・||C_mとして、出力部150に出力する。また、暗号化部120Aは、区域#kに含まれる区域平文ブロックM[k]について暗号化を行って、区域暗号文ブロックC[k]を得る。ここで、区域暗号文ブロックC[k]は、区域平文ブロックM[k]と同じブロック数の暗号文ブロックから構成される。また、暗号化部120Aは、各区域においてTBC関数に入力される平文ブロック(TBC関数の入力値)を、中間値Zとして、乱数計算部130Aに出力する。暗号化部120Aの処理の詳細については、後述する。
なお、暗号化部120Aにおいて用いられるTBC関数それぞれに入力されるTweakは、暗号化部84において用いられるTBC関数それぞれに入力されるTweakと異なり得る。詳しくは後述する。なお、区域ごとに行われるAD処理及び暗号化処理等で用いられるTBC関数に入力されるTweakを互いに区別するため、実施の形態2にかかるTweakの桁数は、実施の形態1と同様に、比較例にかかるTweakの桁数よりも多くなっている。つまり、比較例では、1つの区域のみの処理が実行されるのに対し、実施の形態2では、複数の区域について処理が実行されるので、その分、Tweakを区別するために桁数を多くする必要がある。
乱数計算部130Aは、実施の形態1にかかる乱数計算部130と同様に、タグを生成するための乱数を計算する。乱数計算部130Aは、AD処理部110Aで生成される乱数(中間値)Z及び暗号化部120Aから出力された平文ブロックと、所定の行列AMとを用いて、タグを生成するための値を計算する。なお、実施の形態2にかかる行列AMを、以下の式10に示す。ここで、行列AMは、所定の値α_(i,j)を要素とする、ω×(2^b-1)のサイズの行列である。
・・・(10)
乱数計算部130Aは、区域ごとに、乱数Sを計算する。乱数計算部130Aは、乱数計算部130と実質的に同様の処理を行って、区域ごとに乱数Sの組を生成する。具体的には、乱数計算部130Aは、区域ごとに、AD処理部110Aで生成される乱数(中間値)Zと、暗号化部120Aから出力される平文ブロック(中間値Z)と、所定の行列AMとを用いて、ω個の乱数Sの組(S_1,・・・,S_ω)を生成する。ここで、乱数Sの組は、タグTを生成するために使用される。乱数計算部130Aは、各区域において、ω個のラインi(1≦i≦ω)それぞれについて、中間値Z_jとα_(i,j)との乗算値の排他的論理和を計算することによって、S_iを算出する。詳しくは後述する。
乱数計算部130Aは、各区域#kにおいて、以下の式11に示すように、行列AMを用いて中間値Z_1^(k),・・・,Z_(2^b-1)^(k)を処理して、乱数の組S_1^(k),・・・,S_ω^(k)を生成する。つまり、乱数計算部130Aは、各区域#kについて、式10に示した同じ行列AMを用いて、乱数の組を生成する。
・・・(11)
なお、式11から、i(1≦i≦ω)に対して、以下の式12が成り立つ。
・・・(12)
ここで、乱数計算部130と同様に、乱数計算部130Aは、区域ごとに、Zとαとの乗算値の排他的論理和の各ラインの初期値をリセットする。つまり、乱数計算部130Aは、各区域について、ラインiの初期値を、0^bとする。言い換えると、乱数計算部130Aは、区域ごとに、乱数の組が生成される複数のラインそれぞれの初期値を、リセットする。乱数計算部130Aの処理の詳細については後述する。乱数計算部130Aは、各区域#kについて生成された乱数の組S_1^(k),・・・,S_ω^(k)を、タグ生成部140Aに出力する。
図16は、1区域目つまり区域#1についての、AD処理部110A及び乱数計算部130Aの演算の概略を示す図である。また、図17は、1区域目つまり区域#1についての、暗号化部120A及び乱数計算部130Aの演算の概略を示す図である。また、図18は、2区域目つまり区域#2についての、暗号化部120A及び乱数計算部130Aの演算の概略を示す図である。
図16に示すように、AD処理部110Aは、区域#1について、ADブロックA_1,・・・,A_aを、鍵K及びTweakが入力されたTBC関数を用いて、並列に処理する。具体的には、AD処理部110Aは、ADブロックA_1をTBC関数で暗号化する。これにより、TBC関数から、暗号化結果として、中間値(乱数)であるZ_1^(1)が出力される。同様に、AD処理部110Aは、ADブロックA_2を、TBC関数で暗号化する。これにより、TBC関数から、暗号化結果として、中間値(乱数)であるZ_2^(1)が出力される。同様に、AD処理部110Aは、ADブロックA_aを、TBC関数で暗号化する。これにより、TBC関数から、暗号化結果として、中間値(乱数)であるZ_a^(1)が出力される。AD処理部110Aは、暗号化結果、つまりTBC関数の出力値である中間値Z_1^(1),・・・,Z_a^(1)を、乱数計算部130Aに出力する。
ここで、実施の形態1では、TBC関数からの出力値である乱数Zの数は、ADブロックの数よりも1つ少ない。これに対し、実施の形態2では、ADブロックの並列処理が可能であることから、TBC関数からの出力値である中間値Zの数は、ADブロックの数と同じとなる。なお、図16~図18の例では、a<2^b-1であるので、AD処理部110Aは、区域#1についてのみ、処理を行う。
また、図17に示すように、暗号化部120Aは、区域#1について、平文ブロックM_1,・・・,M_mのうちのM_1,・・・,M_m’に対して、鍵K及びTweakが入力されたTBC関数を用いて、並列に暗号化処理を行う。具体的には、暗号化部120Aは、平文ブロックM_1を、TBC関数で暗号化する。これにより、TBC関数から、暗号化結果として、暗号文ブロックC_1が出力される。同様に、暗号化部120Aは、平文ブロックM_2を、TBC関数で暗号化する。これにより、TBC関数から、暗号化結果として、暗号文ブロックC_2が出力される。同様に、暗号化部120Aは、平文ブロックM_m’を、TBC関数で暗号化する。これにより、TBC関数から、暗号化結果として、暗号文ブロックC_m’が出力される。このようにして、暗号化部120Aは、M_1,・・・,M_m’にそれぞれ対応する暗号文ブロックC_1,・・・,C_m’を得る。また、暗号化部120Aは、TBC関数の入力である平文ブロックM_1,・・・,M_m’を、それぞれ、中間値Z_(a+1)^(1),・・・,Z_(a+m’)^(1)として、乱数計算部130Aに出力する。
なお、AD処理部110A及び暗号化部120Aにおいて用いられるTBC関数それぞれに入力されるTweakは、AD処理部110及び暗号化部120におけるものと実質的に同様の規則によって設定され得る。すなわち、AD処理部110Aにおいて使用されるTBC関数に入力されるTweakは、関連データAのブロックインデックスi(1≦i≦a)に対して、(0^n,i,0,0,0)となる。また、暗号化部120Aにおいて使用されるTBC関数に入力されるTweakは、平文Mのブロックインデックスi(1≦i≦m’)に対して、(N,a,i,0,0)となる。なお、区域#1について、暗号化部120Aの最後に用いられるTBC関数に入力されるTweakは、(N,a,m’,1,0)である。つまり、区域の最後に用いられるTBC関数に入力されるTweakについては、(N,a,i,x,0)のxを、「1」とする。このようにTweakを設定することによって、あるTweakが他のTweakと一致することがなくなる。
また、図16及び図17に示すように、乱数計算部130Aは、区域#1について、AD処理部110A及び暗号化部120Aから出力される中間値Z_1^(1),・・・,Z_a^(1),Z_(a+1)^(1),・・・,Z_(a+m’)^(1)を処理する。つまり、乱数計算部130Aは、上記の式11により、式10に示した行列AMを用いて、中間値Z_1^(1),・・・,Z_a^(1),Z_(a+1)^(1),・・・,Z_(a+m’)^(1)を処理する。これにより、乱数計算部130Aは、区域#1についての乱数の組S_1^(1),・・・,S_ω^(1)を生成する。乱数計算部130Aは、区域#1について生成された乱数の組S_1^(1),・・・,S_ω^(1)を、タグ生成部140Aに出力する。
また、図18に示すように、暗号化部120Aは、区域#2について、平文ブロックM_1,・・・,M_mのうち、M_m’から続く(2^b-1)個のM_(m’+1),・・・,M_(m’+2^b-1)に対して、区域#1と同様の処理を行う。すなわち、暗号化部120Aは、区域#2について、平文ブロックM_(m’+1),・・・,M_(m’+2^b-1)に対して、鍵K及びTweakが入力されたTBC関数を用いて、並列に暗号化処理を行う。これにより、暗号化部120Aは、平文ブロックM_(m’+1),・・・,M_(m’+2^b-1)にそれぞれ対応する暗号文ブロックC_(m’+1),・・・,C_(m’+2^b-1)を得る。また、暗号化部120Aは、TBC関数の入力である平文ブロックM_(m’+1),・・・,M_(m’+2^b-1)を、それぞれ、中間値Z_1^(2),・・・,Z_(2^b-1)^(2)として、乱数計算部130Aに出力する。
また、図18に示すように、乱数計算部130Aは、区域#2について、暗号化部120Aから出力される、平文ブロックに対応する中間値Z_1^(2),・・・,Z_(2^b-1)^(2)を処理する。つまり、乱数計算部130Aは、上記の式11により、式10に示した行列AMを用いて、中間値Z_1^(2),・・・,Z_(2^b-1)^(2)を処理する。これにより、乱数計算部130Aは、区域#2についての乱数の組S_1^(2),・・・,S_ω^(2)を生成する。なお、乱数計算部130と同様に、乱数計算部130Aは、区域#2については、各ラインiの初期値を0^bにリセットしている。乱数計算部130Aは、区域#2について生成された乱数の組S_1^(2),・・・,S_ω^(2)を、タグ生成部140Aに出力する。
なお、区域#2について、暗号化部120Aにおいて用いられるTBC関数それぞれに入力されるTweakは、暗号化部120におけるものと実質的に同様の規則によって設定され得る。すなわち、暗号化部120Aにおいて使用されるTBC関数に入力されるTweakは、平文Mのブロックインデックスi(m’+1≦i≦m’+2^b-1)に対して、(N,a,i,0,0)となる。なお、区域#2について、暗号化部120Aの最後に用いられるTBC関数に入力されるTweakは、(N,a,m’+2^b-1,1,0)である。つまり、区域の最後に用いられるTBC関数に入力されるTweakについては、(N,a,i,x,0)のxを、「1」とする。このようにTweakを設定することによって、あるTweakが他のTweakと一致することがなくなる。
ここで、上述した比較例にかかる問題点で述べたように、行列AMの列数は、2^b-1を超えてはならない。したがって、実施の形態1と同様に、実施の形態2においても、式10で示したように、行列AMの列数は、(2^b-1)個である。ここで、実施の形態2にかかる認証暗号では、各ブロックに並列に暗号化する。したがって、実施の形態2では、図16で示すように、a個のADブロックを処理するためには、列数をaとする行列AMを準備すればよい。また、実施の形態2では、図17及び図18で示すように、m”個の平文ブロックを処理するためには、列数をm”とする行列AMを準備すればよい。すなわち、実施の形態2では、処理すべきブロックの数と、対応する行列AMの列数とが、一致している。したがって、上述した比較例にかかる問題点で述べた行列AMの条件を満たすためには、a+m”≦2^b-1であればよい。したがって、実施の形態2では、1つの区域に含まれるブロック(ADブロック又は平文ブロック)の数を、(2^b-1)個としている。また、区域#1について、a+m’=2^b-1である。したがって、実施の形態2において1つの区域で処理できるブロックの数は、実施の形態1において1つの区域で処理できるブロックの数よりも、1つ多くてもよい。なお、a+m’=2^b-1であるので、図17のα_(1,a+m’+1)は、式10のα_(1,2^b-1)に対応する。
なお、図16~図18には、区域#1及び区域#2についての演算の概略が示されているが、区域#3以降についても、図18に示した区域#2と実質的に同様の演算がなされる。したがって、区域#3以降の具体的な処理の説明については省略する。なお、乱数計算部130Aは、ある区域について処理を行うごとに、各ラインの初期値をリセットし、式10に示した同じ行列AM(つまり同じ要素α)を繰り返し呼び出して、乱数の組を生成する。
なお、暗号化部120Aにおいて用いられるTBC関数それぞれに入力されるTweakは、図18を用いて上述した規則に従って設定される。つまり、各区域#kにおいて、1番目から(2^b-2)番目のTBC関数に入力されるTweakは、平文Mのブロックインデックスiに対して、(N,a,i,0,0)となる。また、各区域#kにおいて、(2^b-1)番目のTBC関数に入力されるTweakは、平文Mのブロックインデックスiに対して、(N,a,i,1,0)となる。なお、ここでは、iは平文ブロック数mのインデックスであるので、ある区域#kにおけるTBC関数それぞれに入力されるTweakは、別の区域におけるTBC関数それぞれに入力されるTweakとは異なることとなる。なお、最終の区域#βにおいて、平文ブロック数が2^b-1に満たない場合、その満たない分の中間値Z_(j)^(β)の値が0となる。これらのことは、後述する認証復号装置20Aにおける復号処理においても同様である。
タグ生成部140Aは、実施の形態1にかかるタグ生成部140と同様に、タグを生成する。タグ生成部140Aは、乱数計算部130Aによって生成された乱数Sの組と、ナンスNとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、認証用のタグTを生成する。ここで、タグ生成部140Aの処理は、実施の形態1にかかるタグ生成部140の処理と、実質的に同様である。つまり、乱数計算部130Aが各区域について上述した処理を行うことによって、タグ生成部140Aは、上記の式8の行列で示されるような乱数の組を得る。タグ生成部140Aは、TBC関数EK
~を用いて定数fixを暗号化した暗号化結果と、TBC関数EK
~’を用いて乱数S_i^(1),・・・,S_i^(β)を暗号化した暗号化結果との排他的論理和(総和)を、タグT[i]として生成する。タグ生成部140Aは、i=1~ωについて上記の処理を行い、タグT[1],・・・,T[ω]を生成する。そして、タグ生成部140Aは、T[1],・・・,T[ω]を、タグT=T[1]||・・・||T[ω]として、出力部150に出力する。
図19は、実施の形態2にかかる認証暗号化装置10Aの作用を説明するための図である。なお、説明の明確化のため、図19では、関連データを空としている。上述したように、認証暗号化装置10Aは、平文Mの平文ブロックを、区域#1,区域#2,・・・区域#βにそれぞれ対応する区域平文ブロックM[1],M[2],・・・,M[β]に区分けする。なお、上述したように、区域平文ブロックM[k]それぞれには、(2^b-1)個の平文ブロックが含まれる。
そして、暗号化部120A及び乱数計算部130Aは、区域#1について、入力されたナンスN及び区域平文ブロックM[1]を用いて、区域暗号文ブロックC[1]、及び、乱数の組S_1^(1),・・・,S_ω^(1)を生成する。以下同様にして、暗号化部120A及び乱数計算部130Aは、区域#kそれぞれについて、入力されたナンスN及び区域平文ブロックM[k]を用いて、区域暗号文ブロックC[k]、及び、乱数の組S_1^(k),・・・,S_ω^(k)を生成する。そして、タグ生成部140Aは、生成された乱数Sの組(式8で示す行列)と、ナンスNとを入力として、上述したように、ω個の適切なナンスベースMACを用いて、タグT[1],・・・,T[ω]を生成する。
このとき、暗号化部120Aは、各区域それぞれについて、図17及び図18に示した演算をサブルーチンとして用いて、処理を行うことができる。また、乱数計算部130Aは、各区域それぞれについて、式10に示す行列AMを呼び出して、図16~図18に示した演算をサブルーチンとして用いて、処理を行うことができる。なお、このとき、区域ごとに初期値をリセットする必要があることに留意されたい。これらのことは、後述する認証復号装置20Aにおける復号処理においても同様である。
<認証復号装置>
図20は、実施の形態2にかかる認証復号装置20Aの構成を示す図である。図20に示すように、認証復号装置20Aは、入力部200と、分割部202Aと、AD処理部210Aと、復号部220Aと、乱数計算部230Aと、タグ生成部240Aと、タグ検査部250とを有する。
認証復号装置20Aは、図2及び図9に示した認証復号装置20に対応する。分割部202Aは、実施の形態1にかかる分割部202に対応する。AD処理部210Aは、実施の形態1にかかるAD処理部210に対応する。復号部220Aは、実施の形態1にかかる復号部220に対応する。乱数計算部230Aは、実施の形態1にかかる乱数計算部230に対応する。タグ生成部240Aは、実施の形態1にかかるタグ生成部240に対応する。なお、以下、認証復号装置20Aの構成について、主に、認証復号装置20の構成と異なる部分について説明する。
分割部202Aは、分割部102Aと同様に、暗号文C及び関連データAそれぞれを、所定長のブロックに分割する。具体的には、分割部202Aは、暗号文Cを、それぞれbビットの暗号文ブロックC_1,・・・,C_mに分割する。また、分割部202Aは、関連データAを、それぞれbビットの長さのADブロックA_1,・・・,A_aに分割する。分割部202Aは、ADブロックA_1,・・・,A_aを、AD処理部210Aに出力する。
また、上述した分割部102Aと同様に、分割部202Aは、分割されたADブロックA_1,・・・,A_a及び暗号文ブロックC_1,・・・,C_mを、それぞれブロック数(2^b-1)個の区域(グループ)に区分けする。つまり、1つの区域には、(2^b-1)個のブロックが含まれることとなる。このとき、分割部202Aは、データ列D=A_1||・・・||A_a||C_1||・・・||C_mを、データ列の先頭のブロックから、区域#1,区域#2,・・・,区域#βの順に区分けされるように、各区域に区分けする。なお、区分けの方法は、上述した分割部102Aの場合と同様であってもよい。
なお、区域#kに区分けされた暗号文ブロックのビット列を「区域暗号文ブロックC[k]」とすると、暗号文Cは、C=C[1]||C[2]||・・・||C[β]とも表記され得る。このとき、少なくともC[1]及びC[β]以外の区域暗号文ブロックC[k]に含まれる暗号文ブロックの数は、(2^b-1)個となる。また、関連データが空の場合、区域暗号文ブロックC[1]に含まれる暗号文ブロックの数も、(2^b-1)個となる。
AD処理部210Aは、上述したAD処理部110Aと実質的に同様の処理を行う。つまり、AD処理部210Aは、ADブロックA_1,・・・,A_aを、鍵K及びTweakが入力されたTBC関数を用いて処理する。このとき、AD処理部210Aは、上述した区域ごとに、ADブロックを処理する。AD処理部210Aは、TBC関数の出力値(乱数)である中間値Z_1,・・・,Z_aを乱数計算部230Aに出力する。なお、AD処理部210Aにおいて用いられるTBC関数それぞれに入力されるTweakは、上述したAD処理部110Aにおいて用いられるTBC関数それぞれに入力されるTweakと、実質的に同様に設定されてもよい。
復号部220Aは、上述した暗号化部120Aにおける暗号化処理に対応した復号処理を行う。復号部220Aは、暗号文ブロックC_1,・・・,C_mを、鍵K及びTweakが入力されたTBC関数を用いて、並列に処理する。このとき、復号部220Aは、上述した区域ごとに、暗号文ブロック(暗号文)を、並列に復号する。つまり、復号部220Aは、区域#1に含まれる暗号文ブロックについて、上述した暗号化部120Aにおける暗号化処理に対応した復号処理を行う。そして、復号部220Aは、区域#2に含まれる暗号文ブロックについて、上述した暗号化部120Aにおける暗号化処理に対応した復号処理を行う。以降、復号部220Aは、区域#kに含まれる暗号文ブロックについて、上述した暗号化部120Aにおける暗号化処理に対応した復号処理を行う。つまり、復号部220Aは、区域#kに含まれる区域暗号文ブロックC[k]について、復号を行う。復号部220Aは、鍵K及びTweakが入力されたTBC関数(復号関数)に各暗号文ブロックを入力することで、TBC関数の出力値として、平文ブロックを得る。この復号関数は、上述した暗号化部120Aで用いられるTBC関数EK
~が行う暗号化処理に対応する復号処理を行うように構成されている。
復号部220Aは、生成された平文ブロックM_1,・・・,M_mを、平文M=M_1||・・・||M_mとして、タグ検査部250に出力する。また、復号部220Aは、区域#kに含まれる区域暗号文ブロックC[k]について復号を行って、区域平文ブロックM[k]を得る。なお、復号部220Aは、得られた平文を、平文M=M[1]||M[2]||・・・||M[β]として、タグ検査部250に出力してもよい。また、復号部220Aは、各区域においてTBC関数(復号関数)から出力される平文ブロック(TBC関数の出力値)を、中間値Zとして、乱数計算部230Aに出力する。
なお、復号部220Aにおける演算は、図17及び図18における暗号化部120Aにおいて、暗号化関数であるTBC関数を復号関数に置き換え、復号関数(TBC関数)に暗号文ブロックを入力し、平文ブロックが出力されるように置き換えたものに対応する。なお、復号部220Aにおいて用いられるTBC関数それぞれに入力されるTweakは、上述した暗号化部120Aにおいて用いられるTBC関数それぞれに入力されるTweakと、実質的に同様に設定されてもよい。
乱数計算部230Aは、上述した乱数計算部130Aと同様に、AD処理部210A及び復号部220Aで生成される乱数Zと、式10に示した所定の行列AMとを用いて、タグを生成するための乱数を計算する。このとき、乱数計算部230Aは、区域ごとに、乱数を計算する。具体的には、乱数計算部230Aは、区域ごとに、AD処理部210A及び復号部220Aで生成される中間値Zと、所定の行列AMとを用いて、ω個の乱数Sの組(S_1,・・・,S_ω)を生成する。ここで、乱数Sの組は、検査用のタグT*を生成するために使用される。乱数計算部230Aは、上述した乱数計算部130Aと同様に、各区域において、ω個のラインi(1≦i≦ω)それぞれについて、中間値Z_jとα_(i,j)との乗算値の排他的論理和を行うことによって、S_iを算出する。つまり、乱数計算部230Aは、各区域#kにおいて、上記の式11に示すように、行列AMを用いて乱数Z_1^(k),・・・,Z_(2^b-1)^(k)を処理して、乱数の組S_1^(k),・・・,S_ω^(k)を生成する。
ここで、乱数計算部230Aは、区域ごとに、Zとαとの乗算値の排他的論理和の各ラインの初期値をリセットする。つまり、乱数計算部230Aは、各区域について、ラインiの初期値を、0^bとする。言い換えると、乱数計算部230Aは、区域ごとに、乱数の組が生成される複数のラインそれぞれの初期値を、リセットする。乱数計算部230Aは、各区域#kについて生成された乱数の組S_1^(k),・・・,S_ω^(k)を、タグ生成部240Aに出力する。
タグ生成部240Aは、実施の形態1にかかるタグ生成部240と同様に、タグを生成する。タグ生成部240Aは、乱数計算部230Aによって生成された乱数Sの組と、ナンスNとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、検査用のタグT*を生成する。なお、タグT*の生成方法については、実施の形態1にかかるタグ生成部240におけるタグTの生成方法と実質的に同様である。つまり、タグ生成部240Aは、TBC関数EK
~を用いて定数fixを暗号化した暗号化結果と、TBC関数EK
~’を用いて乱数S_i^(1),・・・,S_i^(β)を暗号化した暗号化結果との排他的論理和(総和)を、タグT*[i]として生成する。タグ生成部240Aは、i=1~ωについて上記の処理を行い、タグT*[1],・・・,T*[ω]を生成する。そして、タグ生成部240Aは、T*[1],・・・,T*[ω]を、タグT*=T*[1]||・・・||T*[ω]として、タグ検査部250に出力する。
<効果>
実施の形態2にかかる認証暗号システム1は、上述した実施の形態1にかかる認証暗号システム1と実質的に同様の効果を奏し得る。つまり、上述したように、実施の形態2にかかる認証暗号化装置10Aは、入力ブロック(ADブロック及び平文ブロック)を、比較例にかかる手法で処理可能なサイズである(2^b-1)個のブロックを含む区域に区分けする。そして、実施の形態2にかかる認証暗号化装置10Aは、各区域で生成される乱数Sの組から、タグTを適切に導出するように構成されている。これにより、実施の形態2にかかる認証暗号システム1は、比較例にかかる手法では安全性上不可能であった、(2^b-1)個以上の入力ブロックを処理することが可能となる。また、実施の形態2にかかる認証暗号システム1においても、処理可能なブロック数の制限がなくなるので、平文のサイズによらないで、一度で、暗号文を送信することが可能となる。つまり、実施の形態2においても、単一の(N,A,C,T)のみの送信を行うだけでよい。したがって、通信の負荷を抑制することが可能となる。
(実施の形態3)
次に、実施の形態3について説明する。実施の形態3は、上述した実施の形態にかかる構成の概要を示している。
図21は、実施の形態3にかかる認証暗号化装置30の構成を示す図である。実施の形態3にかかる認証暗号化装置30は、実施の形態1にかかる認証暗号化装置10及び実施の形態2にかかる認証暗号化装置10Aに対応する。実施の形態3にかかる認証暗号化装置30は、暗号化部320と、乱数計算部330と、タグ生成部340とを有する。暗号化部320は、暗号化手段としての機能を有する。乱数計算部330は、乱数計算手段(第1の乱数計算手段)としての機能を有する。タグ生成部340は、タグ生成手段(第1のタグ生成手段)としての機能を有する。
暗号化部320は、図3に示した暗号化部120又は図15に示した暗号化部120Aが有している機能と実質的に同様の機能によって実現できる。暗号化部320は、ナンスをTweakとして用いたTweakableブロック暗号(TBC関数)を用いて、所定の長さ(例えばbビット)の平文ブロックに分割された平文を、所定の長さの区域ごとに暗号化する。
ここで、上述した実施の形態では、「所定の長さの区域」は、平文ブロックのビット長をbビットとした場合に、実施の形態1では(2^b-2)個のブロックを含み得る区域に対応し、実施の形態2では(2^b-1)個のブロックを含み得る区域に対応する。しかしながら、「所定の長さの区域」は、これらの数のブロックを含み得る区域に限られない。なお、上述したように、最後の区域では、(2^b-2)個(又は(2^b-1)個)のブロックを有する必要はない。また、関連データが入力される場合、少なくとも最初の区域では、(2^b-2)個(又は(2^b-1)個)の平文ブロックが含まれていないことがある。これらのことは、後述する実施の形態3にかかる認証復号装置40においても同様である。
乱数計算部330は、図3に示した乱数計算部130又は図15に示した乱数計算部130Aが有している機能と実質的に同様の機能によって実現できる。乱数計算部330は、暗号化において、各区域におけるTweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出される第1のデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成する。
ここで、「Tweakableブロック暗号に関する関数」は、上述した実施の形態では、TBC関数に対応する。また、「第1のデータ」は、実施の形態1では、TBC関数から出力された乱数Zに対応する。一方、実施の形態2では、「第1のデータ」は、TBC関数に入力される平文ブロック(中間値Z)に対応する。なお、第1のデータは、TBC関数に入力されるデータ、又は、TBC関数から出力されるデータに限られない。第1のデータは、TBC関数の入力データ及び出力データの両方を用いて導出されてもよい。また、「Tweakableブロック暗号に関する関数」は、上述した実施の形態におけるTBC関数に限られない。これらのことは、後述する実施の形態3にかかる認証復号装置40においても同様である。
また、「所定の行列」は、上述した行列AMに対応するが、これに限られない。なお、上述した実施の形態1では、「所定の行列」は、式5に示した行列AMに対応する。また、上述した実施の形態2では、「所定の行列」は、式10に示した行列AMに対応する。また、「所定の値」とは、上述した行列AMにおける要素であるαに対応するが、これに限られない。また、乱数計算部330によって生成される乱数は、上述した乱数Sに対応するが、これに限られない。これらのことは、後述する実施の形態3にかかる認証復号装置40においても同様である。
タグ生成部340は、図3に示したタグ生成部140又は図15に示したタグ生成部140Aが有している機能と実質的に同様の機能によって実現できる。タグ生成部340は、乱数の組とナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、認証用のタグを生成する。
ここで、生成されるタグは、上述したタグTに対応する。また、「Tweakableブロック暗号を用いたメッセージ認証コード」は、上述した実施の形態では、ナンスベースMACに対応するが、これに限られない。これらのことは、後述する実施の形態3にかかる認証復号装置40においても同様である。
また、上述した実施の形態のように、乱数計算部330は、各区域について同じ所定の行列を用いて、乱数の組を生成してもよい。また、上述した実施の形態のように、乱数計算部330は、乱数の組を生成する際に、区域ごとに、乱数の組が生成されるラインの初期値をリセットしてもよい。また、上述した実施の形態のように、乱数計算部330は、β個の区域それぞれについて、所定のセキュリティレベルを示す値ωに対応する数の乱数からなる乱数の組を生成してもよい。このとき、タグ生成部340は、乱数を要素とするω×βの大きさの乱数行列に基づいて、ω個のタグの組を生成してもよい。なお、「所定のセキュリティレベルを示す値ωに対応する数」は、実施の形態1ではω-1に対応し、実施の形態2ではωに対応する。また、このとき、上述した実施の形態のように、タグ生成部340は、ω個のメッセージ認証コードを処理してもよい。また、上述した実施の形態のように、タグ生成部340は、ナンスをTweakとして含むTBC関数を用いて定数を暗号化して得られた値と、区域ごとに生成された乱数を暗号化して得られた値との排他的論理和によって、タグを生成してもよい。これらのことは、後述する実施の形態3にかかる認証復号装置40においても同様である。
図22は、実施の形態3にかかる認証復号装置40の構成を示す図である。実施の形態3にかかる認証復号装置40は、実施の形態1にかかる認証復号装置20及び実施の形態2にかかる認証復号装置20Aに対応する。実施の形態3にかかる認証復号装置40は、復号部420と、乱数計算部430と、タグ生成部440と、タグ検査部450とを有する。復号部420は、復号手段としての機能を有する。乱数計算部430は、乱数計算手段(第2の乱数計算手段)としての機能を有する。タグ生成部440は、タグ生成手段(第2のタグ生成手段)としての機能を有する。タグ検査部450は、タグ検査手段としての機能を有する。
復号部420は、図9に示した復号部220又は図20に示した復号部220Aが有している機能と実質的に同様の機能によって実現できる。復号部420は、ナンスをTweakとして用いたTweakableブロック暗号(TBC関数)を用いて、所定の長さ(例えばbビット)の暗号文ブロックに分割された暗号文を、所定の長さの区域ごとに復号する。
乱数計算部430は、図9に示した乱数計算部230又は図20に示した乱数計算部230Aが有している機能と実質的に同様の機能によって実現できる。乱数計算部430は、復号において、各区域におけるTweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出される第1のデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成する。
タグ生成部440は、図9に示したタグ生成部240又は図20に示したタグ生成部240Aが有している機能と実質的に同様の機能によって実現できる。タグ生成部440は、乱数の組とナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、検査用のタグを生成する。
タグ検査部450は、図9又は図20に示したタグ検査部250が有している機能と実質的に同様の機能によって実現できる。タグ検査部450は、検査用のタグと、入力された認証用のタグとを比較することによって、改ざんの有無を検査し、検査結果を出力するための制御を行う。
実施の形態3にかかる認証暗号化装置30及び認証復号装置40は、上述した構成によって、高い安全性を実現しつつ、一度の認証暗号において処理できる平文ブロックの数を増やすことが可能となる。なお、認証暗号化装置30及び認証復号装置40を有する認証暗号システムによっても、高い安全性を実現しつつ、一度の認証暗号において処理できる平文ブロックの数を増やすことが可能となる。また、認証暗号化装置30によって実行される認証暗号化方法及び認証暗号化方法を実行するプログラムによっても、高い安全性を実現しつつ、一度の認証暗号において処理できる平文ブロックの数を増やすことが可能となる。暗号化及び復号における遅延を抑制することが可能である。また、認証復号装置40によって実行される認証復号方法及び認証復号方法を実行するプログラムによっても、高い安全性を実現しつつ、一度の認証暗号において処理できる平文ブロックの数を増やすことが可能となる。
(ハードウェア構成例)
上述した各実施形態に係る装置およびシステムを、1つの計算処理装置(情報処理装置、コンピュータ)を用いて実現するハードウェア資源の構成例について説明する。但し、各実施形態に係る装置(認証暗号化装置及び認証復号装置)は、物理的または機能的に少なくとも2つの計算処理装置を用いて実現されてもよい。また、各実施形態に係る装置は、専用の装置として実現されてもよいし、汎用の情報処理装置で実現されてもよい。
図23は、各実施形態に係る装置およびシステムを実現可能な計算処理装置のハードウェア構成例を概略的に示すブロック図である。計算処理装置1000は、CPU1001、揮発性記憶装置1002、ディスク1003、不揮発性記録媒体1004、及び、通信IF1007(IF:Interface)を有する。したがって、各実施形態に係る装置は、CPU1001、揮発性記憶装置1002、ディスク1003、不揮発性記録媒体1004、及び、通信IF1007を有しているといえる。計算処理装置1000は、入力装置1005及び出力装置1006に接続可能であってもよい。計算処理装置1000は、入力装置1005及び出力装置1006を備えていてもよい。また、計算処理装置1000は、通信IF1007を介して、他の計算処理装置、及び、通信装置と情報を送受信することができる。
不揮発性記録媒体1004は、コンピュータが読み取り可能な、たとえば、コンパクトディスク(Compact Disc)、デジタルバーサタイルディスク(Digital Versatile Disc)である。また、不揮発性記録媒体1004は、USB(Universal Serial Bus)メモリ、ソリッドステートドライブ(Solid State Drive)等であってもよい。不揮発性記録媒体1004は、電源を供給しなくても係るプログラムを保持し、持ち運びを可能にする。なお、不揮発性記録媒体1004は、上述した媒体に限定されない。また、不揮発性記録媒体1004の代わりに、通信IF1007及び通信ネットワークを介して、係るプログラムが供給されてもよい。
揮発性記憶装置1002は、コンピュータが読み取り可能であって、一時的にデータを記憶することができる。揮発性記憶装置1002は、DRAM(dynamic random Access memory)、SRAM(static random Access memory)等のメモリ等である。
すなわち、CPU1001は、ディスク1003に格納されているソフトウェアプログラム(コンピュータ・プログラム:以下、単に「プログラム」と称する)を、実行する際に揮発性記憶装置1002にコピーし、演算処理を実行する。CPU1001は、プログラムの実行に必要なデータを揮発性記憶装置1002から読み取る。表示が必要な場合、CPU1001は、出力装置1006に出力結果を表示する。外部からプログラムを入力する場合、CPU1001は、入力装置1005からプログラムを取得する。CPU1001は、上述した図3,図9,図15,図20~図22に示される各構成要素の機能(処理)に対応するプログラムを解釈し実行する。CPU1001は、上述した各実施形態において説明した処理を実行する。言い換えると、上述した図3,図9,図15,図20~図22に示される各構成要素の機能は、ディスク1003又は揮発性記憶装置1002に格納されたプログラムを、CPU1001が実行することによって実現され得る。
すなわち、各実施形態は、上述したプログラムによっても成し得ると捉えることができる。さらに、上述したプログラムが記録されたコンピュータが読み取り可能な不揮発性の記録媒体によっても、上述した各実施形態は成し得ると捉えることができる。
(変形例)
なお、本発明は上記実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述したフローチャートにおいて、各処理(ステップ)の順序は、適宜、変更可能である。また、複数ある処理(ステップ)のうちの1つ以上は、省略されてもよい。
例えば、図13に示したフローチャートにおいて、S108の処理は、S104又はS106の処理の前に実行されてもよい。さらに、S108の処理は、S104,S106の処理と、並行して実行され得る。このことは、図14のフローチャートにおいても同様である。
また、上述した実施の形態1において、関連データA及び平文Mの分割は、分割部102によって行われるとしたが、このような構成に限られない。関連データAの分割については、AD処理部110が行ってもよい。同様に、平文Mの分割については、暗号化部120が行ってもよい。また、ADブロックの各区域への区分けについても、AD処理部110が行ってもよい。同様に、平文ブロックの各区域への区分けについても、暗号化部120が行ってもよい。これらの場合、分割部102は、なくてもよい。これらのことは、図9、図15及び図20に示した分割部についても同様である。
また、上述した実施の形態では、先に、ブロック(ADブロック、平文ブロック又は暗号文ブロック)を各区域に区分けするとしたが、このような構成に限られない。先頭のブロックから、各区域に含まれるブロック数(実施の形態1では(2^b-1)個、実施の形態2では(2^b-1)個)のブロックを区分けして暗号化(又は復号)及び乱数の生成の処理を行ってもよい。その場合、1番目の区域についての処理が終わったら、2番目の区域についてブロックの区分けを行い、暗号化(又は復号)及び乱数の生成の処理を行ってもよい。以降の区域についても同様である。
さらに、上述した実施の形態では、タグ生成部は、全ての区域についての乱数Sが生成された後でタグを生成するとしたが、このような構成に限られない。タグ生成部は、各区域において乱数Sが生成されるたびに、タグ生成処理を進めてもよい。すなわち、タグ生成部は、上述した式8に示した乱数行列の全ての要素(乱数S)を得る前に、区域ごとに乱数Sが生成され乱数行列の1列目から順に乱数が生成されるごとに、タグ生成の処理を進めてもよい。この場合、タグ生成処理は、平文の暗号化処理(又は暗号文の復号処理)と、並行に実行されてもよい。
具体的には、図7において、タグ生成部は、先に、ナンス由来の乱数を生成し、仮のタグとしておく。そして、1番目の区域について乱数S_i^(1)が生成されたら、タグ生成部は、その乱数S_i^(1)をTBC関数で暗号化して、上記の仮のタグとの排他的論理和を算出し、仮のタグを更新する。タグ生成部は、この処理を、各区域について乱数Sが生成されるごとに繰り返すことで、タグTを生成する。このような処理が行われることによって、乱数行列の全ての要素をメモリに保持することが不要となる。したがって、記憶容量を節約することが可能となる。
上述の例において、プログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、random-access memory(RAM)、read-only memory(ROM)、フラッシュメモリ、solid-state drive(SSD)又はその他のメモリ技術、CD-ROM、digital versatile disk(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
ナンスをTweakとして用いたTweakableブロック暗号を用いて、所定の長さの平文ブロックに分割された平文を、所定の長さの区域ごとに暗号化する暗号化手段と、
前記暗号化において、各区域における前記Tweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出される第1のデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成する乱数計算手段と、
前記乱数の組と前記ナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、認証用のタグを生成するタグ生成手段と、
を有する認証暗号化装置。
(付記2)
前記乱数計算手段は、各区域について同じ前記所定の行列を用いて、前記乱数の組を生成する
付記1に記載の認証暗号化装置。
(付記3)
前記乱数計算手段は、乱数の組を生成する際に、区域ごとに、前記乱数の組が生成されるラインの初期値をリセットする、
付記1又は2に記載の認証暗号化装置。
(付記4)
前記乱数計算手段は、β個の前記区域それぞれについて、所定のセキュリティレベルを示す値ωに対応する数の乱数からなる前記乱数の組を生成し、
前記タグ生成手段は、前記乱数を要素とするω×βの大きさの乱数行列に基づいて、ω個のタグの組を生成する、
付記1から3のいずれか1項に記載の認証暗号化装置。
(付記5)
前記タグ生成手段は、ω個のメッセージ認証コードを処理する、
付記4に記載の認証暗号化装置。
(付記6)
前記タグ生成手段は、前記ナンスをTweakとして含むTweakableブロック暗号を用いて定数を暗号化して得られた値と、前記区域ごとに生成された前記乱数を暗号化して得られた値との排他的論理和によって、前記タグを生成する、
付記1から5のいずれか1項に記載の認証暗号化装置。
(付記7)
前記タグ生成手段は、各区域について乱数が生成されるたびに、タグ生成処理を進める、
付記1から6のいずれか1項に記載の認証暗号化装置。
(付記8)
前記暗号化手段は、前記区域ごとに、前記平文ブロックと、当該平文ブロックの前の平文ブロックを前記Tweakableブロック暗号に関する関数を用いて暗号化して得られた暗号化結果との排他的論理和によって、暗号文ブロックを生成し、
前記乱数計算手段は、前記第1のデータに対応する前記暗号化結果と、前記所定の行列の要素との乗算値の排他的論理和を行うことによって、前記乱数を生成する、
付記1から7のいずれか1項に記載の認証暗号化装置。
(付記9)
前記暗号化手段は、前記区域ごとに、複数の前記平文ブロックを前記Tweakableブロック暗号に関する関数を用いて並列に暗号化することによって、暗号文ブロックを生成し、
前記乱数計算手段は、前記第1のデータに対応する前記平文ブロックと、前記所定の行列の要素との乗算値の排他的論理和を行うことによって、前記乱数を生成する、
付記1から7のいずれか1項に記載の認証暗号化装置。
(付記10)
ナンスをTweakとして用いたTweakableブロック暗号を用いて、所定の長さの暗号文ブロックに分割された暗号文を、所定の長さの区域ごとに復号する復号手段と、
前記復号において、各区域における前記Tweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出される第1のデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成する乱数計算手段と、
前記乱数の組と前記ナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、検査用のタグを生成するタグ生成手段と、
前記検査用のタグと、入力された認証用のタグとを比較することによって、改ざんの有無を検査し、検査結果を出力するための制御を行うタグ検査手段と、
を有する認証復号装置。
(付記11)
前記乱数計算手段は、各区域について同じ前記所定の行列を用いて、前記乱数の組を生成する
付記10に記載の認証復号装置。
(付記12)
前記乱数計算手段は、乱数の組を生成する際に、区域ごとに、前記乱数の組が生成されるラインの初期値をリセットする、
付記10又は11に記載の認証復号装置。
(付記13)
前記乱数計算手段は、β個の前記区域それぞれについて、所定のセキュリティレベルを示す値ωに対応する数の乱数からなる前記乱数の組を生成し、
前記タグ生成手段は、前記乱数を要素とするω×βの大きさの乱数行列に基づいて、ω個のタグの組を生成する、
付記10から12のいずれか1項に記載の認証復号装置。
(付記14)
前記タグ生成手段は、ω個のメッセージ認証コードを処理する、
付記13に記載の認証復号装置。
(付記15)
前記タグ生成手段は、前記ナンスをTweakとして含むTweakableブロック暗号を用いて定数を暗号化して得られた値と、前記区域ごとに生成された前記乱数を暗号化して得られた値との排他的論理和によって、前記タグを生成する、
付記10から14のいずれか1項に記載の認証復号装置。
(付記16)
前記タグ生成手段は、各区域について乱数が生成されるたびに、タグ生成処理を進める、
付記10から15のいずれか1項に記載の認証復号装置。
(付記17)
前記復号手段は、前記区域ごとに、前記暗号文ブロックと、当該暗号文ブロックの前の暗号文ブロックを用いて得られた平文ブロックを前記Tweakableブロック暗号に関する関数を用いて暗号化して得られた暗号化結果との排他的論理和によって、平文ブロックを生成し、
前記乱数計算手段は、前記第1のデータに対応する前記暗号化結果と、前記所定の行列の要素との乗算値の排他的論理和を行うことによって、前記乱数を生成する、
付記10から16のいずれか1項に記載の認証復号装置。
(付記18)
前記復号手段は、前記区域ごとに、複数の前記暗号文ブロックを前記Tweakableブロック暗号に関する関数を用いて並列に復号することによって、平文ブロックを生成し、
前記乱数計算手段は、前記第1のデータに対応する前記平文ブロックと、前記所定の行列の要素との乗算値の排他的論理和を行うことによって、前記乱数を生成する、
付記10から16のいずれか1項に記載の認証復号装置。
(付記19)
認証暗号化装置と、
前記認証暗号化装置との間で通信を行う認証復号装置と、
を有し、
前記認証暗号化装置は、
ナンスをTweakとして用いたTweakableブロック暗号を用いて、所定の長さの平文ブロックに分割された平文を、所定の長さの区域ごとに暗号化する暗号化手段と、
前記暗号化において、各区域における前記Tweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出されるデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成する第1の乱数計算手段と、
前記乱数の組と前記ナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、認証用のタグを生成する第1のタグ生成手段と、
を有し、
前記認証復号装置は、
前記ナンスをTweakとして用いたTweakableブロック暗号を用いて、所定の長さの暗号文ブロックに分割された暗号文を、所定の長さの区域ごとに復号する復号手段と、
前記復号において、各区域における前記Tweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出されるデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成する第2の乱数計算手段と、
前記乱数の組と前記ナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、検査用のタグを生成する第2のタグ生成手段と、
前記検査用のタグと、入力された前記認証用のタグとを比較することによって、改ざんの有無を検査し、検査結果を出力するための制御を行うタグ検査手段と、
を有する、
認証暗号システム。
(付記20)
ナンスをTweakとして用いたTweakableブロック暗号を用いて、所定の長さの平文ブロックに分割された平文を、所定の長さの区域ごとに暗号化し、
前記暗号化において、各区域における前記Tweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出される第1のデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成し、
前記乱数の組と前記ナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、認証用のタグを生成する、
認証暗号化方法。
(付記21)
ナンスをTweakとして用いたTweakableブロック暗号を用いて、所定の長さの暗号文ブロックに分割された暗号文を、所定の長さの区域ごとに復号し、
前記復号において、各区域における前記Tweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出される第1のデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成し、
前記乱数の組と前記ナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、検査用のタグを生成し、
前記検査用のタグと、入力された認証用のタグとを比較することによって、改ざんの有無を検査し、検査結果を出力するための制御を行う、
認証復号方法。
(付記22)
ナンスをTweakとして用いたTweakableブロック暗号を用いて、所定の長さの平文ブロックに分割された平文を、所定の長さの区域ごとに暗号化するステップと、
前記暗号化において、各区域における前記Tweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出される第1のデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成するステップと、
前記乱数の組と前記ナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、認証用のタグを生成するステップと、
をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体。
(付記23)
ナンスをTweakとして用いたTweakableブロック暗号を用いて、所定の長さの暗号文ブロックに分割された暗号文を、所定の長さの区域ごとに復号するステップと、
前記復号において、各区域における前記Tweakableブロック暗号に関する関数の入力及び出力の少なくとも一方から導出される第1のデータと、所定の値を要素とする所定の行列とを用いて、区域ごとに乱数の組を生成するステップと、
前記乱数の組と前記ナンスとを用いて、Tweakableブロック暗号を用いたメッセージ認証コードにより、検査用のタグを生成するステップと、
前記検査用のタグと、入力された認証用のタグとを比較することによって、改ざんの有無を検査し、検査結果を出力するための制御を行うステップと、
をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体。