检查认证标签Τ’进行检查,并且当它们匹配时,输出解码的明文Μ’ = (Μ’[1],Μ’[2],...,Μ’[2πι])。当它们不匹配时,输出指示解码错误的错误消息。
[0092]因为两轮Feistel结构配置对任何轮函数的替换,使得当确定用于加密函数的密钥和辅助变量时,明文组块和加密文本组块以一对一的方式互相对应,辅助序列被配置为基于初始矢量和明文或加密文本的长度而唯一定义,且相同辅助序列被用于加密和解码二者,加密的文本可以在本解码系统中正确解码。
[0093]此外,在两轮Feistel结构中的各个轮的处理中不需要轮函数自身的逆处理(从函数的输出得到输入的处理),且轮函数的逆处理不完全被需要。在本系统中,加密函数被用于轮函数,且因此加密函数的逆处理不被要求用于将明文转换为加密文本。此外,在认证标签生成处理中,在加密和解码二者期间执行相同处理,并且因此,在该处理中也不要求加密函数的逆处理。
[0094]本系统的安全性导致加密函数的安全性。这是因为本系统被配置为基于偶数块的SUM而生成认证标签,加密函数在两轮Feistel结构中向偶数块施加两次。当更改的加密文本被解码时,更改的攻击者(当然不知道密钥)不能预测的随机数很可能出现在任何偶数块中作为解码的结果,因此其X0R,或者明文校验和也不能被预测。由此,通过输入明文校验和到加密函数中而获取的解码检查认证标签T’也是不可预测的。
[0095]根据本系统,只通过加密函数来获取认证加密,并且因此可以利用诸如HMAC之类的键控散列函数。此外,除了块加密或散列加密之外,还可以基于各种加密技术。
[0096]根据本系统,处理以两块为单位而独立,且也可以获取用于认证标签的明文校验和的明文块可以在顺序计算处理中获取,并因此可以进行在线计算。
[0097]下面将根据第一示例实施例来描述将认证加密系统应用于要被划分为偶数块的明文的认证加密系统。根据第二和随后的示例实施例,将以更加扩展的方式来描述应用能够处理最后的块的尺寸小于块尺寸或造成奇数块的认证加密系统的认证加密系统。
[0098]第一示例实施例
[0099]将参考图3、图4和图5来描述根据本发明的第一示例实施例的认证加密系统的示例结构。图3是根据本示例实施例示出在认证加密系统中提供的示例装置的框图。如在图3中所图示,根据本示例实施例的系统包括信息处理装置50。信息处理装置50包括计算单元
51、存储单元52和输入/输出单元53。信息处理装置50是根据例如程序等操作的个人计算机。在此情况下,计算单元51、存储单元52和输入/输出单元53分别由CPU、存储器和各种输入/输出设备(诸如键盘、鼠标和网络接口单元)来实现。图3示出了一个装置包括全部计算单元51、存储单元52和输入/输出单元53,但计算单元51、存储单元52和输入/输出单元53也可以分布到多个设备中。
[0100]图4是根据本示例实施例示出认证加密系统的示例功能结构的框图。如图4中所示,认证加密系统可以包括:包括加密装置10的加密设备100、包括解码装置20的解码设备200。加密设备100和解码设备200由例如如图3中所图示的信息处理装置50来实现。
[0101]首先将描述在加密设备100中提供的加密装置10。加密装置10具有输入装置101、辅助变量生成装置102、两轮Feistel加密装置103、标签计算装置104和输出装置105。
[0102]下面,除非另外陈述,将假设一个块的长度为η比特。
[0103]输入装置101输入要被加密的明文Μ和初始矢量N。输入装置101由字符输入设备诸如键盘来实现。下面将假设输入具有偶数个块的明文Μ=(Μ[1],...,M[2m])。为了简化,假设初始矢量N具有η比特,但是如果其更短,执行适当的填充,或者附加地应用具有η比特输出和可变长度输入的伪随机函数(例如,可以通过CMAC或HMAC来实现)以减少到η比特。这里,填充是为了将固定序列耦合到二进制序列的尾部,由此获取特定长度。例如,利用零填充或10*填充(首位是1,之后是00…0)。后者在防止具有不同长度的序列在填充后具有相同值时有效。在此情况下,可以利用零填充。
[0104]基于关于初始矢量Ν和明文Μ的长度的信息,辅助变量生成装置102生成通常被称为Tweak或调整值的辅助变量,该辅助变量被向解码处理中的伪随机函数给出。根据本示例实施例,如下所述的变量的序列(辅助序列)被生成作为辅助变量。一个辅助序列被具有三个元素的矢量表达为(N,i,j)的形式,i和j为正整数。当明文具有2m块时,辅助序列是(N,l,1),(Ν,1,2),(Ν,2,1),(Ν,2,2),...,(N,m_l,1),(N,m_l,2),(N,m,1),(N,m,2),(N,m,3)。最后一个以外的变量被用于加密,只有最后一个被用于生成认证标签。
[0105]两轮Feistel加密装置103被引导用于执行图1虚线中的每个块处理,并且通过将明文Μ以两块为单位进行划分并且使用具有辅助输入和两个输入变量的伪随机函数F_K(*,*)来执行加密。具有两个输入变量的伪随机函数F_K(*,*)是键控的η比特输出函数,在其中对于任意X和y输出F_K(x,y),不知道密钥Κ的人不能将该输出与随机数区分开。
[0106]下面将描述这样的情况,其中,任何辅助序列被输入到F_K(*,*)中的第一输入变量,并且作为要被加密的η比特变量被输入到第二输入变量中。而且,在本示例实施例中,假设MC[i] = (M[21-l],M[2i])用于明文Μ=(Μ[1],...,M[2m]),且其中的MC[i]被称为第i个明文组块。此外,假设0:[1] = ((:[21-1],(:[21]),且其中的0:[1]被称为第1个加密文本组块。
[0107]如公式(1),两轮Feistel加密装置103对于每个i = 1,...,m处理明文组块MC[i ],例如,由此获取加密文本组块CC[ i ]。
[0108]如上所述,F_K(*,*)可以由各种加密函数来实现。例如,可以利用块加密的加密函数。当利用η比特块加密的加密函数E(*)时,可以通过使用被称为可调块加密的扩展后的块加密来有效地计算Y = F_K( (N,i,j),X)。
[0109]具体地,可以像在XEX转换公式中那样使用非专利文献2中所述的XEX模式,通过添加Tweak(N,i,j)和从秘密密钥K计算的序列mask_K(N,i,j)到块加密的输入来实现计算。在该模式中的转换公式被表达如下。转换公式下面可以被称为XE转换公式。
[0110]TE_K( (N, i , j) ,Χ) =Ε_Κ(Χ xor mask_K(N, i , j))..?公式(5)
[0111]应用公式(5)中的XE转换公式,由此进行对应于Y= F((N,i,j),X)的计算。例如,用于计算mask_K(N, i,j)的具体方法利用下面的方法。
[0112]mask_K(N, i , j) = 2'i 3~(j_l)L,其中 L = E_K(N)..?公式(6)
[0113]这里,2~i或3~j表示幂运算,假设2或3作为有限域GF(2~n)上的常数,且2~i3'j L表示乘以(2~i 3~j)的乘法,假设L为在有限域GF(2~n)上的元素。图5是示意性图示示例的解释图,其中在示例中具有用于本示例实施例的两个输入变量的伪随机函数通过使用块加密的XEX模式而实现。图5示出了具有在上面的方法中实现的两个输入变量的示例性伪随机函数。图6(a)是当具有两个输入变量的伪随机函数通过使用块加密的XEX模式而实现时,根据本示例实施例的整个监处理的示例性处理流程的示意性图示说明解释图。
[0114]这里,如在公式(6)中的条款中所指出的,L是L= E_K(N)。因此,每当N被定义,E_K可以被运行一次。当L不改变而i或j顺序地改变时,通过使用过去的计算结果可以有效计算B = 2'i 3~ jL,因此首先得到L = E(N),然后可以将计算量视为大约为Y = E(B xor X)。此外,在有限域GF(2~n)上的常数可以在各种系统中使用在非专利文献2中描述的XEX模式来设置。
[0115]根据本发明,XE转换公式与在0CB系统中使用的XEX转换公式不同之处在于:因为0CB系统要求TEJ(的解码函数TD_K,同时可以只由TEJ(来执行处理,maskj(输出没有被添加到外部。
[0?Ι?] 除了XEX模式以外,也可以利用在Cryptography 2006第96-113页(非专利文献4)中所选区域的文献Kazuhiko Minematsu,“Improved Security Analysis of XEX and LRffModes”中描述的可调块加密,或者在文献Niel s f erguson , et al.,“The Skein HashFunct1n Family.”,[在线]2008,互联网〈URL: http: //www.skein-hash.1nfo/sites/default/files/skeinl.l.pdf” >”(非专利文献5)中描述的可调块加密的加密函数Threefish。
[0117]诸如HMAC之类的键控散列函数,可以被用于F_K(*,*)作为其它实现示例。在此情况下,可以通过对(N,i,j)执行适当的无损编码且随后与X耦合为HMAC的输入来计算Y = F_K((N,i,j),X)。
[0118]例如,用于辅助序列的变量N,i,j可以采用二进制以适当的固定长度(诸如128比特)来表达和耦合。图7是示意性示出示例的解释图,在示例中,通过使用键控散列函数来实现具有在本示例实施例中使用的两个输入变量的伪随机函数。图7示出具有在上述方法中实现的两个输入变量的示例伪随机函数。图7中的符号“I I”表示比特耦合。输入X和辅助输入(N,i,j)是输出 HMAC_K(N i j X)。
[0119]例如,F_K(*,*)可以通过使用HMACJ(而不是图5中所图示的EJ(来实现。
[0120]上面的处理是针对i = l,...,m来执行的,且生成的C=(C[1],...,C[2m])是加密文本。
[0121]标签计算装置104被引导用于执行图1中的点划线中的块处理,并且通过使用由辅助变量生成装置102输出的辅助序列和输入明文计算用于消息认证的认证标签,。
[0122]根据本示例实施例的标签计算装置104首先得到用于通过使用如下明文中的偶数±^M[2],M[4],...,M[2m]来生成认证标签的明文校验和SUM。计算SUM中的X0R可以是任何群组中的加法,诸如算术加法。
[0123]SUM=M[2]xor M[4]xor...xor M[2m]...公式(7)
[0124]也就是说,得到明文中所有偶数块M[2],M[4],...,M[2m]的和是SUM。然后,通过使用具有两个输入变量的伪随机函数F_K(*,*)和辅助序列(N,m,3),针对所得到的明文校验和执行在公式(2)中表达的处理,用于生成认证标签,由此得到认证标签T。
[0125]输出装置105输出由两轮Feistel加密装置103输出的加密文本C=(C[1],...,C[ 2m]),以及由标签计算装置104输出的认证标签T。例如,输出装置105可以向请求加密的上级应用输出,或者可以经由通信设备等输出到通信路径。此外,其可以向计算机显示器或打印机输出。
[0126]下面将描述解码设备200中提供的解码装置20。解码装置20具有输入装置201、辅助变量生成装置202、两轮Feistel解码装置203、解码检查标签计算装置204、确定装置205和输出装置206。
[0127]输入装置201输入要被解码的加密文本C、初始矢量N和与加密文本相关联的认证标签T。与加密装置10类似,下面将假设输入具有多个块的加密文本C=(C[1],...,c[2m])。为了简化,假设初始矢量N具有η比特,但是如果其更短,执行适当的填充,或者额外地应用具有η比特输出的伪随机函数以减少到η比特。
[0128]基于关于初始矢量Ν和加密文本C的长度的信息,辅助变量生成装置202生成向解码处理中的伪随机函数给出的辅助变量。根据本示例实施例,其输出与加密装置10中的辅助变量生成装置102相同的辅助变量。
[0129]两轮Feistel解码装置203对应于图2中虚线中的每个块,并且通过将其以两个块为单位进行划分并且通过使用由辅助变量生成装置202输出的辅助序列和具有两个输入变量的伪随机函数F_K(*,*)来解码加密的文本C。这里,具有由两轮Feistel解码装置203使用的两个输入变量的伪随机函数F_K(*,*)与加密装置10中的两轮Feistel加密装置103所使用的F_K(*,*)相同。
例如,如公式(3),两轮Feistel解码装置203对每个i = l,...,m处理加密文本组块CC[i],由此获取解码的明文组块MC,[i] = (M,[21-l],M,[2i])。
[0131]对于每个讨丸行上面的处理,使得生成的1’= (1’[1],..,M’[2m])被解码为明文。
[0132]解码检查标签计算装置204对应于图2中点划线中的块,并且计算解码检查认证标签T’以用于通过使用由辅助变量生成装置202输出的辅助序列和由两轮Feistel解码装置203解码的明文M’来检查解码结果。这里,具有由解码检查标签计算装置204使用的两个输入变量的伪随机函数F_K(*,*)与加密装置10中的标签计算装置104所使用的F_K(**,*)相同。
[0133]解码检查标签计算装置204首先使用如下地解码的明文中的偶数块M’[2],M’
[4],...,M’[2m]得到用于使用解码的明文Μ’解码检查的明文校验和SUM’。
[0134]SUM’=M,[2]xor M,[4]xor...xor M,[2m]..?公式(8)
[0135]也就是说,得到解码的明文中的所有偶数块Μ’[2],M’[4],...,M’[2m]的总和SUM’。然后,公式(4)中指示的处理针对所得到的明文校验和SUM’而被执行,以通过使用具有两个输入变量的伪随机函数F_K(*,*)以及用于生成认证标签的辅助序列(N,m,3)来进行解码检查,由此得到认证标签T’。计算SUM中的X0R可以是在任何群组中的加法,诸如算数加法。
[0136]图6(b)是当使用块加密的XEX模式来实现具有两个输入变量的伪随机函数时根据本示例实施例示意性示出整个解码处理的示例处理流程的解释图。而且,在图6(b)中所图示的示例中,可以看出,只需改变从外部向具有两个输入变量的伪随机函数给出的参数,解码的明文M’和解码检查认证标签T’可以通过与图6(a)中所图示的加密处理相同的处理而获取。
[0137]确定装置205比较输入认证标签T与由解码检查标签计算装置204生成的解码检查认证标签T’,并且当他们匹配时,确定解码成功,假设由两轮Feistel解码装置203输出的解码的明文Μ’= (M’[1],...,M’[2m])是正确的。另一方面,当T’和T彼此不同时,确定解码失败,假设由输入装置201输入的(N,C,T)被更改。
[0138]当确定装置205将确定结果确定为解码成功时,输出装置206输出解码的明文M’=(M’[l],...,M’[2m])。另一方面,当确定解码失败时,不输出解码的明文M’= (Μ’
[1],...,M’[2m])而是输出指示解码错误的错误消息。该结果被输出给上级应用、通信路径、显示设备、打印机等。
[0139]根据本示例实施例,输入装置101和输入装置201由各种输入设备以及它们的控制单元来实现,诸如键盘、鼠标或在设备中提供的网络接口单元。此外,输出装置105和输出装置206由各种输出设备以及它们的控制单元来实现,诸如显示设备、具有打印机的设备接口单元或者在设备中提供的网络接口。例如,辅助变量生成装置102、辅助变量生成装置202、两轮Feistel加密装置103、两轮Feistel解码装置203、标签计算装置104、解码检查标签计算装置204以及确定装置205由CPU根据设备中提供的程序操作来实现。
[0140]尽管未示出,加密装置10和解码装置20包括控制装置,用于控制加密处理或解码处理,诸如合适地调用每个装置。
[0141]下面将描述根据本示例实施例的操作。图8和图9是示出根据本示例实施例的认证加密系统的示例操作的流程图。图8是示出示例加密操作的流程图,图9是示出示例解码操作的流程图。
[0142]首先将参考图8来描述根据本示例实施例的加密操作。在图8图示的示例中,输入装置101首先输入具有偶数个要被的加密的块的明文M=(M[1],...,M[2m]),以及初始矢量N(步骤S101)。
[0143]随后,辅助变量生成装置102基于关于初始矢量N和明文N的长度的信息来生成辅助序列(步骤S102)。在本示例中,假设输出2m个划分后的块(N,1,1,),(N,1,2),(N,2,1),(N,2,2),...,(N,m-l,l),(N,m-l,2),(N,m,l),(N,m,2),(N,m,3)。所有辅助序列不需要一次生成,并且如果之前确定了要利用哪个辅助序列,每次调用加密函数时可以根据加密函数生成并且输出辅助序列。
[0144]随后,两轮Feistel加密装置103以两块为单位对明文Μ进行划分,并且通过使用由辅助变量生成装置102生成的辅助序列和预先确定的伪随机函数F_K(*,*)进行加密,由此得到加密文本C=(C[1],...,C[2m])(步骤S103到S106)。例如,在首先将i初始化为i = l(步骤3103)之后,两轮?618七61加密装置103可以针对由1指示的明文组块抓[1] = (1[21-l],M[2i])分别执行以两块为单位的Feistel加密处理或执行公式(1)的处理(步骤S104),直到满足++i>m。
[0145]随后,标签计算装置104通过使用明文Μ中的偶数个块来计算明文校验和SUM(步骤S107),并且通过使用生成的SUM和用于生成认证标签的辅助序列(N,m,3)来计算认证标签T(步骤 S108)。
[0146]最后,输出装置105输出生成的加密文本C和标签T(步骤S109)。
[0147]下面将参考图9来描述根据本示例实施例的解码操作。在图9中所图示的示例中,输入装置201首先输入具有偶数个要被解码的块的加密文本C=(C[1],...,(:[2πι])、初始矢量Ν以及认证标签Τ(步骤S201)。
[0148]随后,辅助变量生成装置202基于关于初始矢量Ν和加密文本C的长度的信息来生成辅助序列(步骤S202)。在本示例中,假设输出2m个划分后的块(N,1,1),(N,1,2),(N,2,1),(N,2,2),...,(N,m-l,l),(N,m-l,2),(N,m,l),(N,m,2),(N,m,3)。所有辅助序列不需要一次生成,如果之前确定要利用哪个辅助序列,每次调用加密函数时可以根据加密函数生成并且输出辅助序列。
[0149]随后,两轮Feistel解码装置203以两块为单位划分加密文本C,并且通过使用由辅助变量生成装置202生成的辅助序列和预先确定的伪随机函数F_K(*,*)来对其解码,由此得到解码的明文1’ = (1’[1],...,M’[2m])(步骤S203到S206)。例如,在首先将i初始化为i = l(步骤S203)之后,两轮Feistel解码装置203可以针对由i指示的加密文本组块CC[i]= (C[21-l],C[2i])重复执行以两块为单位的Feistel解码处理或执行公式(3)的处理(步骤S204),直到满足++i>m。
[0150]随后,解码检查标签计算装置204通过使用解码的明文Μ’来计算用于解码检查的明文校验和SUM’(步骤S207),并且通过使用生成的SUM’和用于生成认证标签的辅助序列(N,m,3)来计算解码检查认证标签T ’ (步骤S208)。
[0151]随后,确定装置205比较输入的认证标签T与解码检查认证标签T’(步骤S209),当它们匹配时,确定解码成功,而当它们不匹配时,确定解码失败。
[0152]最后,输出装置206基于确定装置205的确定结果来输出解码的明文M’或错误消息。当解码成功时输出装置206输出解码的明文M’(步骤S210),而当解码失败时输出错误消息(步骤S211),作为确定装置205的确定结果。
[0153]上面已经描述了这样的情况,其中,加密设备和解码设备由不同设备来实现,但如图10中所示,一个设备可以包括加密装置10和解码装置20 二者。在此情况下,提供包括加密装置10和解码装置20的认证加密装置30,并且在认证加密装置30中,解码装置20可以利用加密装置10中的辅助变量生成装置102、两轮Feistel加密装置103和标签计算装置104,以取代辅助变量生成装置202、两轮Feistel解码装置203和解码检查标签计算装置204。而且,当一个设备包括加密装置10和解码装置20二者时,每个装置可以分别被安装在多个设备上。
[0154]当加密装置10和解码装置20共享辅助变量生成装置102时,例如,调用发起者可以被配置为指定初始矢量或长度。类似地,当共享两轮Feistel加密装置103时,调用发起者可以被配置为例如指定输入到具有两个输入变量的上伪随机函数F_K(*,*)和输入到具有两个输入变量的下伪随机函数F_K(*,*)。类似地,当共享标签计算装置104时,调用发起者可以被配置为例如指定明文校验和。
[0155]如上所述,根据本示例实施例,可以实现高速和简易认证加密。这是因为根据本发明的认证加密系统通过S+1次调用具有