具有错误校正的AES实现方式

申请号 CN201380053066.0 申请日 2013-03-27 公开(公告)号 CN104769881A 公开(公告)日 2015-07-08
申请人 爱迪德技术有限公司; 发明人 Y.埃弗特卡里; M.韦纳; Y.周;
摘要 一种密码处理数据 块 的方法,该方法包括:接收数据块的经编码版本,其中数据块的经编码版本包括至少部分使用错误控制码编码的数据块;并且使用预定函数来处理数据块的经编码版本以生成输出,其中所述预定函数被布置成使得利用预定函数对至少部分使用错误控制码编码的一定数量的数据进行处理的结果等于至少部分利用错误控制码对根据高级加密标准AES来执行所述一定数量的数据的加密或者解密的结果进行编码的结果。
权利要求

1.一种密码处理数据的方法,所述方法包括:
接收数据块的经编码版本,其中数据块的经编码版本包括至少部分使用错误控制码编码的数据块;并且
使用预定函数来处理数据块的经编码版本以生成输出,其中所述预定函数被布置成使得利用预定函数对至少部分使用错误控制码编码的一定数量的数据进行处理的结果等于至少部分利用错误控制码对根据高级加密标准AES来执行所述一定数量的数据的加密或者解密的结果进行编码的结果。
2.如权利要求1的方法,其中所述预定函数包括一个或者多个子函数,其中每个子函数被布置成使得利用该子函数对至少部分使用错误控制码编码的一定数量的数据进行处理的结果等于至少部分利用错误控制码对根据AES的对应处理步骤来处理所述一定数量的数据的结果进行编码的结果,其中所述对应处理步骤是以下之一:
AddRoundKey函数;
MixColumns函数;
ShiftRows函数;
SubBytes函数;
InvAddRoundKey函数;
InvMixColumns函数;
InvShiftRows函数;
InvSubBytes函数。
3.如权利要求1或者2的方法,包括:
使用错误控制码来检测在以下各项中的一个或者多个中是否存在错误:数据块的所接收的经编码版本、预定函数的中间结果或输出;并且
如果检测到错误,执行对应的行动。
4.如权利要求3的方法,其中对应的行动包括以下各项之一:(a)将所述输出设定为大体上与数据块的所接收的经编码版本不相关;(b)将所述输出设定为随机值;(c)停止执行预定函数;和(d)执行错误控制码的错误校正操作来校正所述错误。
5.如前述权利要求中的任一项的方法,包括:
在所述输出上执行错误控制码的解码操作。
6.如前述权利要求中的任一项的方法,其中数据块的经编码版本和预定函数的中间结果均由对应的第一矩阵来表示,其中每个第一矩阵对应于状态矩阵,如果在数据块上执行根据AES的加密或者解密,则所述状态矩阵将会出现,其中每个第一矩阵对应于状态矩阵,因为该第一矩阵的元素是将由利用错误控制码对从对应状态矩阵的对应元素形成的消息进行编码所得出的码字的系数。
7.如权利要求6的方法,其中对于每个第一矩阵的每一行或者列,该行或者列的元素是将由利用错误控制码对从对应状态矩阵的对应行或者列的元素形成的消息进行编码所得出的码字的系数。
8.一种向被布置成执行根据前述权利要求中的任一项的方法的实体提供数据块的方法,包括:
生成数据块的经编码版本,其中数据块的经编码版本包括至少部分使用错误控制码编码的数据块;
向数据块的经编码版本应用修改,以形成数据块的修改的经编码版本,其中所述修改使得错误控制码能够校正所述修改来从数据块的修改的经编码版本而产生数据块的经编码版本;并且
向所述实体提供数据块的修改的经编码版本。
9.一种使得数据处理器能够密码处理数据块的方法,所述方法包括:
生成一个或者多个模块,所述模块当被运行时执行根据权利要求1到7中的任一项的方法;并且
将所述数据处理器配置成运行所述一个或者多个模块。
10.一种包括处理器的装置,其中所述处理器被布置成执行根据前述权利要求中的任一项的方法。
11.一种计算机程序,所述计算机程序当被处理器运行时使处理器执行根据权利要求
1到9的任一项的方法。
12.一种存储根据权利要求11的计算机程序的计算机可读介质。

说明书全文

具有错误校正的AES实现方式

技术领域

[0001] 本发明涉及对数据进行密码处理。

背景技术

[0002] 错误控制码(ECC)是非常众所周知的。特别地,发送器可能希望向接收器发送消息m。为了发送器能够通过有噪声的通信信道将消息m可靠地传送给接收器,发送器可以使
用ECC来向消息m添加一定量(an amount of)的冗余(在已知为“编码”的过程中)以生成
ECC的码字c。替代于仅仅向接收器发送消息m,发送器可以随后向接收器发送码字c。接
收器可以接收表示发送器发出的码字c的数据c'—如果通信信道尚未将任何错误或者噪
声引入到码字c中的话,数据c'可等于码字c;可替换地,数据c'可等于码字c外加由有
噪声的通信信道引入的一个或者多个错误。接收器可以处理所接收的数据c'。如果ECC是
错误校正码,并且如果由有噪声的通信信道引入到码字c中以产生数据c'的错误数量不超
过ECC的错误校正能,那么由发送器执行的编码所引入的冗余允许接收器校正错误,并
且从数据c'中获取(retrieve)原始消息m(在已知为“解码”的过程中)。如果ECC是错
误检测码,并且如果由有噪声的通信信道引入到码字c中以产生数据c'的错误数量不超过
ECC的错误检测能力,那么由发送器执行的编码所引入的冗余允许接收器检测到(但是不一
定校正)错误(在同样已知为“解码”的过程中)。
[0003] 一些ECC是所谓的“块(block)”ECC。块ECC将长度为k个符号的原始消息m变换成长度为n个符号的码字c(其中n>k),其中符号取自某个符号字母表。假设将用块ECC
进行编码的原始量的数据D包括ak+b个符号(其中a和b是整数,a≥0且0≤b以通过使用块ECC来对原始量的数据D如下进行编码。如果a>0,则消息m1,…,ma(其每
个长度为k个符号)从原始量的数据D形成(例如,消息mi包括数据D的第((i-1)k+1)个
符号到第ik个符号)——随后可以使用ECC来对这些消息分别进行编码以形成相应码字
c1,…,ca。如果b≠0,则形成消息m*,其中消息m*包括原始量的数据D的剩余b个未编码
符号(在上文示例中,最后的b个符号);消息m*的剩余(k-b)个符号可以是冗余填充符号
(例如,“0”符号)或者可以是原始量的数据D中的一些。随后使用ECC来对该消息m*进行
编码,以形成码字c*。随后,原始量的数据D的ECC编码的形式包括c1,…,ca(如果a>0)
连同c*(如果b≠0)。
[0004] 在下文中,形成消息m或者码字c的符号被视作是或者被认为是有限域GF(q)的f
元素,其中q=p,对于某个质数p和正整数f—即,GF(q)是符号字母表。t个符号s0,s1,…
,st-2,st-1的串(或者序列)随后被认为对应于以下多项式或者可以由以下多项式表示: 。因此,包括k个符号 的消息
m对应于以下多项式或者由以下多项式表示: ,
并且包括n个符号 的码字c对应于以下多项式或者由以下多项式表示

[0005] 特定类别的块ECC是所谓的“多项式”ECC。多项式ECC具有关联的多项式,被称为其“生成”多项式g(X),其具有n-k次和GF(q)中的系数。存在通过使用多项式ECC来
执行编码的许多方式。被称为“系统编码”的一种方式涉及将消息m(X)编码为码字c(X),
其中 ,其中r(X)是被定义为 除以g(X)的余项的“奇偶校
验”多项式。被称为“非系统编码”的另一种方式涉及将消息m(X)编码为码字c(X),其中
c(X)=g(X)m(X)。存在根据消息m(X)来形成码字c(X)的其它方式,但是在且仅在w(X)
=v(X)g(X)(对于次数最大为k的某个v(X))的情况下,多项式w(X)是ECC的码字(不同的
编码方法简单地对应于可能的消息和可用的码字之间的不同映射)。
[0006] 存在多项式ECC的各种众所周知的示例。所有“循环(cyclic)”ECC码是多项式n
ECC—在且仅在g(X)是x-1的因子的情况下,多项式ECC将是循环码。所谓BCH码是多项
式ECC的特定形式,其中生成多项式被选取以使得在ECC码字之间的汉明(Hamming)距离
较高(以使得其错误校正能力相应地强)。BCH码的子集是里德所罗(Reed-Solomon)码。
对于里德所罗门码,令s和t是正整数,作为针对该码的设计参数,随后:符号字母表是有限
s
域GF(2); ;码的错误校正能力是t;t按k=n-2t与消息长度k有关;并且生成多项
式g(X)是在GF(2)上基于次数s的本原多项式p(X)的—令α作为p(X)的根,则g(X)可
以被定义为 。里德所罗门码是循环码。
[0007] 多项式ECC是线性块码。特别地,令δ1和δ2是GF(q)的元素,并且令m1和m2是两个消息多项式,其具有对应的码字c1和c2。随后,从对消息 进行编码而得出
的码字是 。
[0008] 因为ECC码和其属性是众所周知的,所以其较详细的讨论将不在本文中给出。假设本领域技术人员对ECC码、ECC码的类型、执行ECC编码的方式和执行ECC解码的对应方
式很了解。例如,已经很详细地研究和记录了里德所罗门码,并且对应的编码和解码方法是
非常众所周知的。
[0009] 高级加密标准(AES)是众所周知的加密算法,其在联邦信息处理标准出版物197中(可在http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf中找到)被
描述,通过引用将其全部公开并入于此。AES是对称块密码,其中输入块的大小是128比特
并且对应的输出块的大小也是128比特。存在三种不同的AES变型,其被已知为AES-128、
AES-192和AES-256:对于AES-n而言,密码密钥的大小是n比特。
[0010] AES算法保持“状态”,其为4x4矩阵S,矩阵S的每个元素是一个字节。令状态S的行r和列c处的元素由S[r,c](0≤r<4且0≤c<4)表示。将被处理的输入数据块包括
16字节,in[j](0≤j<16)。通过设定 (0≤r<4且0≤c<4)来对状态S进
行初始化。处理输入数据块的结果是输出数据块,其也包括16字节out[j](0≤j<16)。在
处理结束时,通过根据 (0≤r<4且0≤c<4)来设定输出数据块而从状态
S形成输出数据块。AES算法的每个处理步骤或者操作在当前状态S上操作,其中状态S在
每个步骤被修改以便使其从表示输入数据块移动到输出数据块。在下文中,对于在执行AES
算法时执行的每个步骤或者函数/操作,执行该步骤或者应用该函数/操作的状态S的元
素S[r,c]上的结果应该由S'[r,c](0≤r<4且0≤c<4)来表示。
[0011] AES算法涉及“回合(round)”的数量Nr。对于AES-128,Nr=10;对于AES-192,Nr=12;对于AES-256,Nr=14。回合将被简要地描述。
[0012] 密钥扩展例程被用来从初始密码密钥K生成密钥次序表(key schedule)。密钥次序表包括Nr+1个所谓的“回合密钥”RKj(0≤j展例程的细节对于本公开不重要,并且因此它们将不会在本文中进行较详细地描述。对于
这方面的更多细节,参见联邦信息处理标准出版物197的章节5.2。
[0013] 在AES中,字节被视为是域GF(28)的元素,其中GF(28)中的乘法是以不可约多项8 4 3
式x+x+x+x+1为模。
[0014] 附图的图1提供使用AES算法的加密100的概述。
[0015] 通过使用输入数据块110(数据in[j](0≤j<16))来对状态S进行初始化,如上文描述的。
[0016] 接下来,由“AddRoundKey(加回合密钥)”函数120使用回合密钥RK0来处理状态S。
[0017] 接下来,一个接一个地执行回合1,2,…,Nr-1。对于回合R(1≤R(a)通过使用“SubBytes(替换字节)”函数130来处理状态S,其后
(b)通过使用“ShiftRow(移位行)”函数140来处理状态S,其后
(c)通过使用“MixColumns(混合列)”函数150来处理状态S,其后
(d)通过使用AddRoundKey函数120、使用回合密钥RKR来处理状态S。
[0018] 最终,第Nr回合被执行,其涉及:(a)通过使用SubBytes函数130来处理状态S,其后
(b)通过使用ShiftRow函数140来处理状态S,其后
(c)通过使用AddRoundKey函数120、使用回合密钥RKNr来处理状态S。
[0019] 因此,第Nr回合与之前的Nr-1回合相同,除了其不包括MixColumns函数150。
[0020] 如上文描述然后可以从状态S形成输出数据块160——数据out[j](0≤j<16)。
[0021] AddRoundKey函数120涉及将所使用的当前回合密钥RKR(0≤R么状态S的元素S[r,c]与字节k[r+4c](0≤r<4且0≤c<4)进行异或,以使得状态S的
元素S[r,c]变成 。
[0022] SubBytes函数130如下分别在状态S的16字节的每个字节上操作。元素S[r,c](0≤r<4且0≤c<4)被视作是GF(28)的元素,并且在GF(28)中的其乘法逆元被确定。如
果我们将该逆元表示为具有比特b7,b6,…,b1,b0(从最高有效位运行到最低有效位)的字
节b,并且如果将SubBytes函数应用于元素S[r,c]的结果(即,字节S'[r,c])是具有比特
c7,c6,…,c1,c0(从最高有效位运行到最低有效位)的字节,那么S'[r,c]可以被计算为:
SubBytes函数130通常简单地通过查找表来实施。特别地,对于0≤r<4且0≤c<4,
如果对于整数0≤u,v<16有S[r,c]=16u+v,那么向S[r,c]应用SubBytes函数130将值
S[r,c]改变为值S'[r,c],在以下表1的行u和列v给出。表1中的值是十六进制的。
表1。
[0023] 表示SubBytes函数130的其它方法是可能的。
[0024] ShiftRows函数140对状态S的最后三行的字节循环移位。特别地,对于状态S的行r(1≤r<4),行r的元素向左循环移位r个位置,即,向S[r,c]应用ShiftRows函数
140将值S[r,c]设定为由 (对于0≤r<4且0≤c<4)给出的值
S'[r,c]。
[0025] 使用MixColumns函数150,状态S的每一列通过将该列乘以特定矩阵来进行处理。特别地,对于0≤c<4,MixColumns函数150根据以下来在第c列上进行操作:
其中:乘以1意味着没有改变;乘以2意味着向左移位;乘以3意味着向左移位并随后
与初始未移位的值进行异或。此处,“移位”意味着将相应值的二进制表示向左移位,如本领
域中所已知的(以使得,例如,二进制值10110011变成了101100110)。在移位之后,如果经
移位的值大于0xFF,则经移位的值应该与0x11B进行异或。
[0026] 表示MixColumns函数150的其它方式是可能的。例如,状态S的第c列的元素8 4
可以被认为是GF(2)上的四项多项式的系数,其中该多项式随后以x+1为模与多项式
3 2
3x+x+x+2相乘—所得到的多项式的系数随后形成状态S的第c列的更新的元素。
[0027] 附图的图2提供了使用AES算法的解密200的概述。
[0028] AddRoundKey函数120、SubBytes函数130、ShiftRows函数140和MixColumns函数150中的每一个是可逆的,如下文中阐述的。
[0029] AddRoundKey函数120的逆(被称为InvAddRoundKey 220)是与AddRoundKey函数120完全相同的。
[0030] SubBytes函数130的逆(被称为InvSubBytes 230)可以通过使用上文在SubBytes函数130的描述中阐述的变换的逆来实施,或者通过使用由下文表2给出的查找表来实施。
表2中的值是十六进制的。特别地,对于0≤r<4且0≤c<4,如果对于整数0≤u,v<16有
S[r,c]=16u+v,那么向S[r,c]应用InvSubBytes函数230将S[r,c]改变为以下在表2中
行u和列v处给出的值S'[r,c]。
表2。
[0031] ShiftRows函数140的逆(被称为InvShiftRows 240)将状态S的最后三行的字节循环地移位。特别地,对于状态S的行r(1≤r<4),行r的元素向右循环地移位r个位
置,即,向S[r,c]应用InvShiftRows函数240将值S[r,c]设定为由
(对于0≤r<4且0≤c<4)给出的值S'[r,c]。要注意,对于0≤r<4,这等同于将第r行
的元素向左循环地移位(4-r)mod4个位置。
[0032] 对于MixColumns函数150的逆(被称为InvMixColumns 250),状态S的每一列通过将列与特定矩阵相乘来进行处理。特别地,对于(0≤c<4),MixColumns函数150根据以
下来在第c列上操作:
其中:与e相乘意味着向左移位,与初始未移位值进行异或,再次向左移位,与初始未
移位值进行异或,并再次向左移位;与b相乘意味着向左移位,再次向左移位,与初始未移
位值进行异或,再次向左移位,并与初始未移位值进行异或;与d相乘意味着向左移位,与
初始未移位值进行异或,再次向左移位,再次向左移位,并与初始未移位值进行异或;并且
与9相乘意味着向左移位,再次向左移位,再次向左移位,并与初始未移位值进行异或。在
移位之后,如果经移位的值大于0xFF,则经移位的值应该与0x11B进行异或。
[0033] 再次,多项式表示可以用来实施InvMixColoumn 250函数。特别地,状态S的第c8 4
列的元素可以被认为是在GF(2)上的四项多项式的系数,其中随后该多项式以x+1为模与
3 2
多项式(b)x+(d)x+(9)x+(e)相乘,其中该多项式的系数是十六进制的——所得到的多项
式系数随后形成状态S的第c列的更新的元素。
[0034] 因此,可以通过使用关于加密的相同密钥次序表以它们相匹配的函数的图1中阐述的次序的反向而应用InvAddRoundKey函数220、InvSubBytes函数230、InvShiftRows函
数240、和InvMixColumns函数250来执行数据块的解密。然而,如在联邦信息处理标准出
版物197的章节5.3.5中阐述的,并且如在图2中示出的,可能的是,通过使用图1中阐述
的函数的相同次序来执行数据块210的解密200以形成输出数据块260(但是在图2中由
图1的函数的逆来对其进行替换),但是其中密钥次序表为了解密的目的而被修改以产生对
应的解密密钥次序表(用于解密200的回合密钥在图2中被表示为RK'R)。
[0035] 本领域技术人员将领会,用于AES算法的任何另外的细节可以在联邦信息处理标准出版物197中找到,并且上文描述被提供以协助读者(假设读者对AES算法很了解)。
[0036] “数据流变换”是用于帮助保护软件(例如,程序或者应用)不受到由攻击者(其可能例如希望从软件中获得秘密或者敏感信息,诸如密码密钥)执行的攻击的重要技术。利
用数据流变换,数据保护和/或软件操作通过用新代码重写入(或者替换)软件的全部或者
一部分来实施——通过在要被保护的数据和/或操作上执行一个或多个数据和/或操作变
换来生成新(替换)代码。这样的变换是众所周知的,并且有时指代软件混淆技术。目前,
新代码(在应用特定数据和/或操作变换之后生成的代码)被固定在原始软件的新版本内。
向软件的相同数据和/或操作应用不同数据变换应该会导致将被保护的软件的不同实例
或者版本。这样的多样性(即相同软件的不同实例)被称为“基于代码的多样性”。因此,为
了获得软件的不同的、多样化的实例,变换过程必须通过向相同的软件应用不同的数据和/
或操作变换来进行重复。从软件分发、部署和包括安全性可再生性的维护的度,这样的基
于代码的多样性引入了不可避免的开销和不方便。

发明内容

[0037] 将合期望的是,能够以比之前的实现方式更加安全的方式来实施AES算法(加密或者解密)。特别地,将合期望的是,能够以以下方式来实施AES算法:容忍对给算法的输入
值或者算法的中间结果的改变(恶意的或者偶然的)或者容忍对算法的处理流程的修改。这
样的实现方式将有助于与攻击者可能试图对实现方式执行的攻击进行斗争(combat),并且
因而有助于防止(或者至少使其更困难)攻击者获得或者推断出关于密码密钥的信息或者
以未授权的方式访问受保护的数据。在算法的实现方式是所谓的白盒实现方式(诸如软件
实现方式)的情景下,这是特别有用的,在所谓的白盒实现方式中,假设攻击者具有对算法
和其实现方式的知识,并且假设攻击者可以访问或者能够操纵实现方式在其运行时的过程
流和存储器内容。
[0038] 根据本发明的第一方面,提供一种密码处理数据块的方法,该方法包括:接收数据块的经编码版本,其中数据块的经编码版本包括至少部分地使用错误控制码进行编码的数
据块;并且通过使用预定函数来处理数据块的经编码版本以生成输出,其中预定函数被布
置成使得利用预定函数对至少部分使用错误控制码编码的一定数量的(a quantity of)数
据进行处理的结果等于至少部分利用错误控制码对根据高级加密标准AES来执行对所述
一定数量的数据的加密或者解密的结果进行编码的结果。
[0039] 在一些实施例中,预定函数包括一个或者多个子函数,其中每个子函数被布置成使得利用该子函数对至少部分使用错误控制码编码的一定数量的数据进行处理的结
果等于至少部分利用错误控制码对根据AES的对应的处理步骤处理所述一定数量的数
据的结果进行编码的结果,其中,对应的处理步骤是以下各项之一:AddRoundKey函数;
MixColumns函数;ShiftRows函数;SubBytes函数;InvAddRoundKey函数;InvMixColumns
函数;InvShiftRows函数;InvSubBytes函数。
[0040] 在一些实施例中,所述方法包括:使用错误控制码来检测在以下的一个或者多个中是否存在错误:所接收的数据块的经编码版本、预定函数的中间结果或输出;并且如果
错误被检测到,则执行对应的行动。对应的行动可以包括以下各项之一:(a)将输出设定为
大体上与所接收的数据块的经编码版本不相关;(b)将输出设定为随机值;(c)停止执行预
定函数;和(d)执行错误控制码的错误校正操作来校正错误。
[0041] 在一些实施例中,所述方法包括:在输出上执行错误控制码的解码操作。
[0042] 在一些实施例中,数据块的经编码版本和预定函数的中间结果均由对应的第一矩阵来表示,其中每个第一矩阵对应于状态矩阵,如果在数据块上执行根据AES的加密或者
解密,该状态矩阵将会出现,其中每个第一矩阵对应于状态矩阵,因为该第一矩阵的元素是
将从利用错误控制码对从对应状态矩阵的对应元素形成的消息进行编码所得出的码字的
系数。可选地,对于每个第一矩阵的每行或者每列,该行或者列的元素是将从利用错误控制
码对从对应状态矩阵的对应行或列的元素形成的消息进行编码所得出的码字的系数。
[0043] 根据本发明的方面,提供了一种使得数据处理器能够密码处理数据块的方法,该方法包括:生成一个或者多个模块,所述模块当被运行时执行上文描述的方法中的任一个;
并且将数据处理器配置成运行一个或者多个模块。
[0044] 根据本发明的方面,提供了一种向被布置成执行根据前述权利要求的任一项的方法的实体提供数据块的方法,其包括:生成数据块的经编码版本,其中数据块的经编码版本
包括至少部分使用错误控制码编码的数据块;向数据块的经编码版本应用修改来形成数据
块的修改的经编码版本,其中修改是使得错误控制码可以校正该修改来从数据块的修改的
经编码版本产生数据块的经编码版本;并且向该实体提供数据块的修改的经编码版本。
[0045] 根据本发明的方面,提供了一种包括处理器的装置,其中所述处理器被布置成执行上文方法中的任一个。
[0046] 根据本发明的方面,提供了一种计算机程序,所述计算机程序当被处理器运行时使处理器执行上文方法中的任一个。计算机程序可以被存储在计算机可读介质上。
[0047] 利用本发明的实施例,错误可以被引入到从编码器提供的经编码数据中,以使得解码器能够在通过第二预定函数对经编码数据(具有错误)的处理之后移除错误的影响。
以这种方式,使用这样的错误来控制基于ECC的数据变换是可能的。这增强了可用的多样
平,因为多样性可被构造成两种多样性:(1)基于码的多样性(不同的多样性来自于提
供和执行码的不同实例,其中不同实例通过向初始或者基线码应用不同变换来生成);以
及(2)基于数据的多样性(不同的多样性来自于向多样化码的相同版本应用不同的控制数
据)。因此,与当前现有的单纯基于码的多样性技术相比,根据本发明实施例的ECC的使用
提供了有助于增大可用的多样性的量的有效方式。
[0048] 而且,根据本发明实施例的ECC的使用提供了混淆函数实现方式的方法并且提供了用于使攻击者较难攻击一件软件的机制(诸如通过试图执行故障注入攻击)。

附图说明

[0049] 现将仅作为示例,参考附图来描述本发明的实施例,其中图1提供了使用AES算法加密的概述;
图2提供了使用AES算法解密的概述;
图3示意性地图示出计算机系统的示例;
图4示意性地图示出本发明实施例的概述;
图5示意性地图示出函数e*的概述;
图6示意性地图示出用于实施SubBytes*函数的方法;
图7示意性地图示出函数d*的概述;和
图8示意性地图示出根据本发明实施例的系统。

具体实施方式

[0050] 在以下描述中和在图中,描述了本发明的某些实施例。然而,将领会的是,本发明不限于所描述的实施例并且一些实施例可能不包括以下描述的特征的全部。然而,在不偏
离如在附权利要求中阐述的本发明较宽精神和范围的情况下可以在本文中作出各种修改
和改变将是显而易见的。
[0051] (1)系统概述图3示意性地图示出计算机系统300的示例。系统300包括计算机302。计算机302包
括:存储介质304、存储器306、处理器308、接口310、用户输出接口312、用户输入接口314
和网络接口316,其全部都通过一个或者多个通信总线318来链接到一起。
[0052] 存储介质304可以是任何形式的非易失性数据存储设备,诸如硬盘驱动器、磁盘、光盘、ROM等中的一个或者多个。存储介质304可以存储操作系统以供处理器308执行以
便计算机302运行。存储介质304也可以存储一个或者多个计算机程序(或者软件或者指
令或者代码)。
[0053] 存储器306可以是适合于存储数据和/或计算机程序(或者软件或者指令或者代码)的任何随机存取存储器(存储单元或者易失性存储介质)。
[0054] 处理器308可以是适合于执行一个或者多个计算机程序(诸如存储在存储介质304上和/或存储器306中的那些计算机程序)的任何数据处理单元,其中一些可以是根据
本发明实施例的计算机程序或者当被处理器308运行时使得处理器308执行根据本发明实
施例的方法并且将系统300配置成根据本发明实施例的系统的计算机程序。处理器308可
包括单个数据处理单元或者并行地或者与彼此协作的多个数据处理单元。在执行针对本发
明实施例的数据处理操作中,处理器308可以将数据存储到存储介质304和/或存储器306
或者从其中读取数据。
[0055] 接口310可以是用于向计算机302外部的或者可从计算机302移除的设备322提供接口的任何单元。设备322可以是数据存储设备,例如光盘、磁盘、固态存储设备等中的
一个或者多个。设备322可以具有处理能力—例如,设备可以是智能卡。因此,接口310可
以根据它从处理器308接收的一个或者多个命令来从设备322获取数据、或者向设备322
提供数据、或者与设备322对接。
[0056] 用户输入接口314被布置成从系统300的用户或者操作者接收输入。用户可以经由系统300的一个或者多个输入设备来提供该输入,诸如连接到用户输入接口314的或者
与其相通信的鼠标(或者其它定点设备)326和/或键盘324。然而,将领会,用户可以经由
一个或者多个附加或者可替换输入设备(诸如触摸屏)来向计算机302提供输入。计算机
302可以将经由用户输入接口314从输入设备接收的输入存储到存储器306中,以用于处
理器308后续访问和处理,或者计算机302可以直接将其传递给处理器308,以使得处理器
308可以相应地对用户输入进行响应。
[0057] 用户输出接口312被布置成向系统300的用户或者操作者提供图形/视觉和/或音频输出。同样地,处理器308可以布置成指导用户输出接口312来形成表示期望的图形
输出的图像/视频信号,并且将该信号提供给连接到用户输出接口312的系统300的监视
器(或者屏幕或者显示单元)320。附加地或者可替换地,处理器308可以被布置成指导用户
输出接口312来形成表示期望音频输出的音频信号,并且将该信号提供给连接到用户输出
接口312的系统300的一个或者多个扬声器321。
[0058] 最后,网络接口316为计算机302提供功能性来从一个或者多个数据通信网络下载数据和/或向一个或者多个数据通信网络上传数据。
[0059] 将领会的是,在图3中图示的和上文描述的系统300的架构仅仅是示例性的,并且可以在本发明实施例中使用具有不同架构的其它计算机系统300(例如具有比图3示出的
更少的组件或者具有除图3中示出的之外的附加和/或可替换的组件)。作为示例,计算机
系统300可以包括以下中的一个或者多个:个人计算机、服务器计算机、移动电话、平板计
算机、膝上型计算机、电视机、机顶盒、游戏控制台、个人计算机、服务器计算机、其它移动设
备或者消费电子设备、智能卡等等。
[0060] (2)算法概述令函数“e”表示根据如上文参考图1描述的AES算法而执行的加密处理,并且令函数
“d”表示根据如上文参考图2描述的AES算法而执行的解密处理。给出大小128比特的数
据块D,因此,使用密钥K在数据块D上执行AES加密的结果由数据块e(D,K)来表示,并且
因此使用密钥K在数据块D上执行AES解密的结果由数据块d(D,K)来表示。令Φ表示
ECC,以使得通过使用ECC Φ在数据块D上执行ECC编码的结果由数据块Φ(D)(其将大
于数据块D)来表示。随后,如将在下文中更详细描述的,在本发明的一个实施例中,提供函
数“e*”,函数e*具有ECC Φ的码字和密钥K作为其输入,并且其被布置成使得对所有数
据块D和密钥K有 。在本发明的另一个实施例中,提供函数“d*”,
函数d*具有ECC Φ的码字和密钥K作为其输入,并且其被布置成使得对所有数据块D有

[0061] 换言之,对于数据块D的ECC编码的版本Φ(D)(其中数据块D的经编码版本Φ(D)包括至少部分使用ECC Φ编码的数据块D),数据块D的ECC编码的版本Φ(D)可以使用预
定函数e*或者d*来处理以生成输出。预定函数e*或者d*被布置成使得利用预定函数e*
或者d*对至少部分使用ECC Φ编码的一定数量的数据A进行处理的结果等于至少部分利
用ECC Φ对根据高级加密标准AES处理所述一定数量的数据A的结果进行编码的结果(即
e(A,K)或者d(A,K)—即, 和 。
[0062] 这意味着:给定数据块D的ECC编码的版本Φ(D),函数e*或者d*可以被应用到数据块D的ECC编码的版本Φ(D)以因而生成 或者 。使用ECC Φ对
或者 进行解码分别导致e(D,K)或者d(D,K)。因此,使得ECC Φ对
AES算法是“透明的”。换言之,当函数e*和d*被提供有数据块D的ECC编码的版本Φ(D)
作为输入时,其输出将由在数据块D上执行加密处理e或者解密处理d并随后在经处理的
数据块D上执行ECC编码而得出的结果。使用函数e*或者d*的一个优点在于给定数据块
D的ECC编码的版本Φ(D),如果人们希望形成该数据块D的对应加密或者解密形式的ECC
编码的版本(即,e(D,K)或者d(D,K)的ECC编码的版本),则人们可以简单地使用函数e*和
d*,即,人们不需要(a)在数据块D的输入ECC编码的版本Φ(D)上执行解码,(b)使用函
数e或者d执行加密或者解密处理,并且(c)在加密或者解密处理的输出上执行ECC解码。
这可以降低处理需求、功率需求和执行该处理所需的时间。
[0063] 而且,如将简短描述的,函数e*和d*的中间结果(或者中间状态)是ECC Φ的码字并且因此在中间结果中错误的存在可以通过使用ECC Φ来进行测试。附加地或者可替
换地,可以使用ECC Φ的错误检测/校正能力或者属性来针对错误对数据块D的初始输入
ECC编码的版本Φ(D)和/或函数e*和d*的输出进行测试。如果在以下各项中的一个或
多个中检测出错误:数据块D的所接收的ECC编码的版本、预定函数e*和d*的输出或者
中间结果,那么可以采取合适的行动。该行动可以包括将函数e*和d*的输出设定为大体
上与数据块D的所接收的ECC编码的版本Φ(D)不相关。例如,输出可以被设定为随机值。
另一种行动可以包括使函数e*或者d*停止(在未完成的状态下),即,停止操作。另一种行
动可以使用ECC的错误校正能力(如果ECC是错误校正码的话)来校正任何检测到的错误。
因此,使用函数e*和d*的另一个优点是这么做,可能的是检测到将故障故意或偶然引入到
处理的输入、输出或者中间结果和/或检测到对于函数e*和d*的处理流程的改变—如果
这样的故障或者改变被检测到,那么随后可以采取如上所讨论的合适措施。
[0064] 附加优点在于本发明实施例可以增加对将被加密或者解密的数据的发送器可用的“多样性”。特别地,如果对一定量的数据的加密或者解密由第一实体(例如,客户端)执
行,那么第二实体(例如,服务器)可能向第一实体发送原始数据的ECC编码的版本连同添加
到该ECC编码的数据的一定量噪声。换言之,第二实体可以向ECC编码的数据应用修改以
便产生经修改的ECC编码的数据。因为第二实体可以向ECC编码的数据添加大量不同的噪
声模式而不会阻止ECC解码能够恢复原始数据,所以第二实体可以以大量方法以受保护的
方式向第一实体发送相同的原始数据,即,通过发送具有添加的大量可用的噪声模式或者
所做出的修改之一的ECC编码的原始数据(其中噪声模式仅仅添加可由ECC解码校正的错
误,或者等同地,修改是使得ECC能够校正修改以从所修改的ECC编码的数据来产生或者恢
复ECC编码的数据的)。窃听者/攻击者将不能知道噪声是否已经被添加,更不必说噪声模
式可能实际上是什么,因而使得窃听者/攻击者更难以访问原始数据。
[0065] 在软件保护的上下文中,这样的多样性引入了真正重要的新能力。如所提到的,引入多样性的当前方法涉及重写软件,以使得数据和/或操作被变换,并且通过对不同的软
件实例使用不同的变换来将多样性引入软件内部。然而,一旦软件实例被创建或者被分发,
其多样性后续不能被改变。发行新版本的软件涉及使用新变换来生成新版本,其引入延迟、
各种开销和其他不方便。然而,利用本发明实施例,错误(作为多样性)的添加可以不依赖于
软件而被添加。依据应用的需求,错误可能或者可能不取决于输入数据。而且,可以使设计
参数(诸如生成多项式)依赖于输入数据(假若执行ECC编码的实体和执行ECC解码的实体
被布置成确定和使用相同的设计参数,诸如生成多项式)。
[0066] 因此,本发明的实施例提供了AES加密或者解密处理的有用实现方式—即,执行AES加密或者解密处理但与使用ECC的优点相组合的实现方式。
[0067] 一般地,对于在数据块D上操作的函数F,如果对所有数据块D(其具有针对给函数F的输入的相关大小)有 ,我们将函数F*称为对应的“变换函数”。因
此,对于任何给定密钥K,函数e*是对应于AES加密函数e的变换函数,而函数d是对应于
AES解密函数d的变换函数。
[0068] 图4示意性地图示出可以例如由系统300的处理器308来执行的本发明实施例的概述。
[0069] 在可选步骤400,可以使用ECCΦ来对初始数据块D(大小128比特)进行编码,以产生数据块D的经编码版本Φ(D)。初始数据块D可以例如经由接口310、用户输入接口
313或者网络接口316来接收。附加地或者可替换地,初始数据块D可以已经被系统300存
储在存储介质304或者存储器308中。
[0070] 步骤400是可选步骤,因为系统300可能已经存储(例如,在存储介质304或者存储器306中)或者可能已将接收(例如,经由接口310、用户输入接口314或者网络接口316)
数据块D的经编码版本Φ(D),而不是必须自己执行ECC编码。
[0071] 接下来,在步骤410,使用密钥K将函数e*或者d*应用到数据块D的经编码版本Φ(D),以产生 或者 作为输出。该输出可以例如被存储在存储介质
304或者存储器306中,或者可以例如经由接口310、用户输出接口312或者网络接口318
从计算机302输出。
[0072] 要注 意,因为 函数 e* 和 d* 的性质, 和。因此,在可选步骤420,输出可以经历使用ECC Φ的ECC解码,其
导致e(D,K)或者d(D,K)。经解码的数据e(D,K)或者d(D,K)可以被存储在例如存储介质
304或者存储器306,或者可以例如经由接口310、用户输出接口312或者网络接口316来从
计算机302输出。
[0073] 在本发明实施例中执行的操作的更多细节将在下文中进行阐述。
[0074] (2.1)ECC编码和解码对于AES算法,状态S是矩阵
在图4的步骤400接收的或者访问的128比特的初始数据块D可以上文针对AES算法
讨论的方式被格式化成状态矩阵S。
[0075] 对于步骤400处执行的编码,矩阵S的四行的每一行被认为是四元素消息。随后,ECC编码应用到这四个消息中的每一个消息中。特别地,矩阵S的第r行对应于消
息mr(X),其中 (虽然将领会的是可以替代地
使用将状态S的第r行的元素映射到消息mr(X)的系数的其它方式,例如人们可以设定
)。随后,均使用具有生成多项式g(X)的多项式
ECC来对消息 进行编码以形成对应的码字cr(X),其中 。在该
实施例中,非系统编码被用作是示例,但是将领会的是,系统编码或者用于ECC的其它编码
方法可以被替代地使用。假设g(X)的次数是w,那么码字cr(X)具有高达w+3的次数。随
后形成变换状态S*,其是 矩阵,其中状态S*的第r行的元素是码字cr(X)的系数。
例如,如果w=2以使得 ,则状态S根据以下被映射到变换状态S*:
其中 。再次,将领会的时,
码字cr(X)的系数可以被映射到变换状态S*的第r行的不同元素位置。
[0076] 在下文中,将假设生成多项式是2次多项式 ,但是将领会的是其它次数也可以被替代地用于ECC生成多项式g(X)。
[0077] 因此,在可选步骤400形成的或者作为给步骤410的输入而接收的初始ECC编码的数据块Φ(D)是由状态S的以上ECC编码而产生的变换状态S*,其中状态S对应于初始
数据块D。
[0078] 随后,函数e*和d*在变换状态S*上操作—即,给函数e*和d*的输入、来自函数e*和d*的输出和函数e*和d*的中间结果是相应的 矩阵(即,变换状态矩阵S*),
其每个元素是一个字节。
[0079] 对于在步骤420执行的解码,从步骤410处的函数e*或者d*输出的变换状态矩阵S*的四行的每一行被认为是ECC的码字,并且在这些码字上执行对应的ECC解码。这导
致长度为四字节的四个消息。这四个消息的字节被映射回状态矩阵S(使用被用于步骤400
处执行的编码的映射)。随后,可以以上文针对AES算法讨论的方式从该状态矩阵S形成输
出数据块D。
[0080] 将领会的是,任何多项式ECC可以用于上文中的ECC编码和解码。
[0081] (2.1.1)检测错误如上提到的,函数e*和d*的中间结果(或者中间状态)包括ECC Φ的码字—特别地,
函数e*和d*的中间结果是变换状态矩阵,其行表示ECC的相应码字。相似地,给函数e*
和d*的数据块D的初始输入ECC编码的版本Φ(D)和函数e*和d*的输出是变换状态矩
阵,其行表示ECC的相应码字。因此,这些码字中的一个或者多个(函数e*或者d*的中间
结果或者给其的输入或者来自其的输出)可以被测试来检测在该码字中是否存在错误。如
上文讨论的,如果检测到错误,那么可以采取合适的行动。
[0082] ECC惯常的错误检测属性/操作/处理可以被用于这个检测。
[0083] 可替换地,替代于执行ECC的完整的错误检测处理,可以执行缩减的(reduced)错误检测处理。例如,如果码字多项式 对应于消息
多项式 ,那么
因此,在c(X)中不存在错误的情况下:
(等式A)。
[0084] 上文的等式A提供了以四个未知数 的六个等式。因此,依据码字系数推导出定义 的多组等式是可能的。例如,定义:
(等式B)
随后,等式A和B暗示:
(等式C)
等式A和B还暗示:
(等式D)。
[0085] 因此,可以以两种方法来从码字多项式c(X)推断出原始消息m(X)的系数,即是通过:(a)使用函数 和 分别作为消息m(X)的系数a0、a1、
a2和a3;和(b)使用函数 和 和值c5分别作为消息m(X)
的系数a0 、a1、a2和a3。因此,人们可以执行以下测试中的一个或者多个:(a)f0(c0)等
于 ?(b)f1(c0,c1)等于 ?(c)f2(c0,c1,c2)等于 ?(d)
f3(c1,c2,c3)等于c5?如果在这些测试中任一个中发现了不等,那么检测到了码字c(X)中
的错误。
[0086] 将领会的是,可以从等式A中推导出对于依据码字系数c0… c5的系数a0、a1、a2、a3的其它组的等式,以使得可以附加地或者可替换地使用不同的测试。例如,人们可以测
试c2是否等于 和/或人们可以测试c3是否等于

[0087] 将领会的是,如果生成多项式g(X)具有大于2的次数,那么对于依据码字系数的系数a0、a1、a2、a3的对应等式可以被推导出并且用于错误检测。
[0088] 因此,在本发明的一些实施例中,(函数e*或者d*的中间结果的、或者给函数e*或者d*输入的、或者来自函数e*或者d*的输出的)码字中的一个或者多个可以被测试以
检测在该码字中是否存在错误。这可以通过使用上文测试中的一个或者多个来执行。
[0089] (2.2)函数e*图5示意性地图示出函数e*的概述。函数e*以与图1中示出的AES加密100的完
全相同方式进行操作,除了给函数e*的输入、函数e*的输出和函数e*的中间结果是变换
状态矩阵(大小 ),并且函数AddRoundKey120、SubBytes 130、ShiftRows 140和
MixColumns 150由那些函数的对应的变换版本来进行替换,即相应地AddRoundKey*函数
520、SubBytes*函数530、ShiftRows*函数540和MixColumns*函数550。AddRoundKey*
函数520、SubBytes*函数530、ShiftRows*函数540和MixColumns*函数550中的每一个
在变换状态矩阵S*上操作,并且输出变换状态矩阵S*。这些函数将更详细地简短描述。
[0090] 如果AddRoundKey*函数520被表示为函数F*,并且AddRoundKey函数120被表示为对应函数F,那么F和F*是有关的,因为对于所有的数据块D有 。(注
意此处在上文等式中回合密钥RK没有被表示出—如果其被包括的话,那么我们将会对于
所有的数据块D和所有回合密钥RK有 )。因此,AddRoundKey*函数
520是对应于AddRoundKey函数120的变换函数。相似地,如果SubBytes*函数530(或者
ShiftRows*函数540和MixColumns*函数550)被表示为函数F*,并且SubBytes函数130
(或者ShiftRows函数 140和MixColumns函数150)被表示为对应函数F的话,那么F和
F*是有关的,因为对于所有的数据块D有 。因此,SubBytes*函数530是
对应于SubBytes函数130的变换函数;ShiftRows*函数540是对应于ShiftRows函数140
的变换函数;并且MixColumns*函数550是对应于MixColumns函数150的变换函数。这将
被简短地描述。
[0091] 要注意,如果F1和F2是具有对应变换函数F1*和F2*(以使得,对于所有的数据块D有 和 )的两个函数,那么对应于函数 的变换
函数是 。这是因为:
因此,因为函数e*是AddRoundKey*函数520、SubBytes*函数530、ShiftRows*函数
540、和MixColumns*函数550以图5中示出的次序(其对应于图1中示出的次序)的级联,
它遵循上文:函数e*是对应于函数e的变换函数,即,函数e*具有以下属性:对于所有数据
块D, 。
[0092] (2.2.1)AddRoundKey*状态S的第r行由消息 表示并且cr(X)是
对消息mr(X)进行ECC编码的结果。如果对于第R回合的回合密钥RKR是一系列字节kR[j]
(0≤j<16) ,那么在AddRoundKey函数120下,状态S的元素S[r,c]与字节kR[r+4c]
(0≤r<4并且0≤c<4)进行异或,以使得状态S的元素S[r,c]变成
。因此,消息mr(X)将在AddRoundKey函数120下被变换以变成消息 ,其中
令 。令对 进行ECC编码的结
果为 。
[0093] 随后,在已经使用第R回合密钥将AddRoundKey函数120应用到状态S之后对状态S的第r行进行ECC编码的结果(被表示为 )为:
(等式E)。
[0094] 因此,在已经使用第R回合密钥将AddRoundKey函数120应用到状态S之后对状态S的第r行进行ECC编码的结果 可以使用上文等式E根据(i)对状态S的第r行
进行ECC编码的结果cr(X)和(ii)对第R回合密钥的对应字节qR,r(X)进行ECC编码的结
果 来直接进行计算。
[0095] 因此,如果给AddRoundKey*函数520的输入是使码字cr(X)(0≤r<4)作为其行的变换状态矩阵S*,那么当使用第R回合密钥时,AddRoundKey*函数520的输出被定义
为使码字 作为其行的变换状态矩阵S*,其中通过使用上文的等式E来计算
(即, )。要注意,值 可以对于给定回合密钥RKR被预先
计算,或者它们可以被生成为密钥扩展例程的一部分,密钥扩展例程生成密钥次序表。
[0096] 因此,如果AddRoundKey*函数520被表示为函数F*,并且AddRoundKey函数120被表示为对应函数F,那么F和F*是有关的,因为对于所有的数据块D和所有回合密钥RK有
。因此,AddRoundKey*函数520是对应于AddRoundKey函数120
的变换函数。
[0097] (2.2.2)ShiftRows*考虑消息 。向消息m(X)应用向左循环移位一个位置的结
(1) (1)
果是消息m (X),其中 。令对m (X)进行编码的结果被表
示为c'(X),那么:
因为 (等式F)。
[0098] 在上文的等式F中,符号 被使用如下:对于多项式 , 表示其系数是p(X)的系数的左移位的多项式,即 。
[0099] 因此,对消息m(1)(X)进行ECC编码的结果c'(X)可以根据(i)对消息m(X)进行ECC编码的结果c(X)和(ii)生成多项式g(X)来直接进行计算。
[0100] 自然地,如果m(s)(X)是向消息m(X) )应用向左循环移位s个位置的结果,其中s>0,那么对m(s)(X)进行ECC编码的结果可以使用上文根据(i) 对消息m(s-1)(X)进行ECC
编码的结果和(ii)生成多项式g(X)来直接进行计算(其中m(0)(X)=m(X))。这可以迭代
重复s次,以使得对m(s)(X)进行ECC编码的结果可以根据(i) 对消息m(X)进行ECC编码
的结果c(X)和(ii)生成多项式g(X)来直接进行计算。
[0101] 因此,如果状态S的第r行由消息表示,并且如果对消息mr(X)进行ECC编码的结果是消息cr(X),那么在ShiftRows函数130
已经应用到状态S之后对状态S的第r行进行ECC编码的结果可以通过将等式F迭代地应
用r次(因为在ShiftRows函数130下状态矩阵S的第r行被向左移位r个位置)来根据
(i)对状态S的第r行进行ECC编码的结果cr(X)和(ii)生成多项式g(X)直接进行计算。
[0102] 因此,如果对于ShiftRows*函数540的输入是具有码字cr(X)(0≤r<4)作为其行的变换状态矩阵S*,那么ShiftRows*函数540的输出被定义为具有码字
作为其行的变换状态矩阵S*,其中 可以使用通过将等式F迭代地应用于码字cr(X) r
次来计算。
[0103] 因此,如果ShiftRows*函数540被表示为函数F*,并且ShiftRows函数140被表示为对应函数F,那么F和F*是有关的,因为对于所有的数据块D有 。因
此,ShiftRows*函数540是对应于ShiftRows函数140的变换函数。
[0104] (2.2.3)MixColumns*令初始消息m(X)是 并且令c(X)是使用生成多项式 对消息m(X)进行ECC编码的结果。那么:
(等式G)
并且根据等式C和D,我们具有:
(等式H)
定义函数t0、t1、t2和t3为:
(等式I)。
[0105] 随后,对于0≤r<4且0≤c<4,向状态S的元素S[r,c]应用MixColumns函数140的结果S'[r,c]是 。
[0106] 因此,如果状态S的第r行由消息 表示,那么在应用MixColumns函数140之后的状态S的第r行由消息 表示,其中
随后,使用上文的等式G,对 进行ECC编码的结果是 ,其中
(等式J)。
[0107] 如果变换状态矩阵S*具有码字cr(X)(0≤r<4)作为其行,其中,随后,使用上文的等式H,对于对应的状态矩阵S:
(等式K)。
[0108] 因此,给定多项式cr(X)(0≤r<4)和生成多项式g(X),可以通过在等式J中使用等式K来确定多项式 。
[0109] 因此,如果给MixColumns*函数550的输入是具有码字cr(X)(0≤r<4)作为其行的变换状态矩阵S*,那么MixColumns*函数550的输出被定义为具有码字 作
为其行的变换状态矩阵S*,其中可以基于码字cr(X)在等式J中使用等式K来计算 。
[0110] 因此,如果MixColumns*函数550被表示为函数F*,并且MixColumns函数150被表示为对应函数F,那么F和F*是有关的,因为对于所有的数据块D有 。
因此,MixColumns*函数550是对应于MixColumns函数150的变换函数。
[0111] 如较早讨论的,对依据系数c0… c5表达系数a0、a1、a2和a3而言,除了等式H之外,存在其它等式。这样的其它等式可以代替等式H来使用,其中这对等式K具有类似影响。
[0112] (2.2.4)SubBytes*在一些实施例中,SubBytes*函数530通过使用查找表来实施。例如,对于ECC的每
个可能的码字c(X),查找表可以含有ECC的对应码字c'(X)。对应于初始码字c(X)的码
字c'(X)是由以下所得出的码字:(a)在初始码字c(X)上执行ECC解码来生成消息m(X),
(b)在消息m(X)的每个系数上使用SubBytes函数130来生成新消息m'(X),(c)对新消
息m'(X)进行ECC编码来生成c'(X)。随后,如果给SubBytes*函数530的输入是具有码
字cr(X)(0≤r<4)作为其行的变换状态矩阵S*,那么SubBytes*函数530的输出被定义
为具有码字 作为其行的变换状态矩阵S*,其中 是查找表中对应于码字
cr(X)的值。每个码字由6字节来表示(在生成多项式是2次的实施例中)。因此,查找表可
6
以具有大小上大约是256x6字节的阶(order)。
[0113] 图6示意性地图示出用于实施SubBytes*函数530的可替换方法。如在上文的章节2.1.1中讨论的,等式B、C和D可以用来提供从输入码字多项式
的系数c0… c5获得系数a0、a1、a2和a3的两种
不同方法。因此,如在图6中示出的,码字多项式c(X)可以以两种方式来解码成原始消息
m(X),即通过(a)在步骤600,使用如在等式C中示出的函数f0(c0)、f1(c0 ,c1)、f2(c0 ,c1
,c2)和f3(c1 ,c2,c3)来分别推导出消息m(X)的系数a0、a1、a2和a3;和(b)在步骤602,使
用如在等式D中示出的函数 和 和值c5来分别推导出消息
m(X)的系数a0、a1、a2和a3——这个第二组所推导的系数将被称为 和 (单纯
为了在下文中将它们与使用函数f0(c0)、f1(c0 ,c1)、f2(c0 ,c1 ,c2)和f3(c1 ,c2,c3)推导的
系数a0、a1、a2和a3相区分)。
[0114] 由两个解码操作产生的两组系数{a0、a1、a2和a3}和{ 和 }中的系数中的每一个随后可以通过使用原始SubBytes函数130来处理(例如,使用上文的查找表
表1)。令对应于a0、a1、a2和a3的输入值的SubBytes函数130的输出为s0、s1、s2和s3,并
且令对应于 和 的输入值的SubBytes函数130的输出为 和 。
[0115] 定义随后对消息 进行 ECC 编码的结果 是
,其中
和 。相似地,对消息 进
行ECC编码的结果是 ,其中
和 。因此,在步骤610,
消息 被ECC编码来生成码字
,并且在步骤 610,消息 被ECC 编码来生成码字

[0116] 在步骤 620,将两个码字 和相比较。如果没有对值
和 的修改发生,那么两个码字 和
应 该 匹 配 并 且 随 后 SubBytes* 函 数 530
的 输出 是码 字 。 然而,如果 两 个码 字
和 不
匹配,那么这指示可能已经在 中的一个或者多个中存在修
改,或者在通过SubBytes*函数530的过程流中存在修改。因此,如果两个码字
和 不匹配,那
么可以采取合适的行动——这个行动可以是针对函数e*或者d*停止操作,或者针对
SubBytes*函数530输出与其输入无关的值(诸如随机值),或者针对SubBytes*函数530
试图使用ECC的错误校正能力来校正码字中的一个或多个错误,并且然后输出经校正的码
字。
[0117] 上文描述的实施SubBytes*函数530的方法有效地如下进行工作。如果给SubBytes*函数530的输入是具有码字cr(X)(0≤r<4)作为其行的变换状态矩阵S*,那
么对于每个码字cr(X)(0≤r<4):(a)在码字cr(X)上执行两个单独的、不同的ECC解码
操作以生成相应的消息;(b)SubBytes函数130被应用到那些消息的系数以生成相应的经
修改的消息;(c)在经修改的消息上执行相应的ECC编码操作来生成相应的新码字;(d)在
新码字上执行比较操作;和(e)如果新码字与彼此匹配,那么从SubBytes*函数530输出的
变换状态矩阵的第r行被设定为该新码字。
[0118] 将领会的是,基于图6中示出的结构/格式的SubBytes*函数530的其它实施例可以被使用,其可以涉及在输入码字(即,输入变换状态矩阵S*的行)上(以不同方式)执行
两个或者更多ECC解码操作来生成相应的消息,其中这两个或者更多ECC解码操作可以以
与上文描述的相同或者不同方式来进行,在其之后,SubBytes函数130可以被应用到那些
消息的系数来生成相应的经修改的消息,在其之后,在经修改的消息执行相应的ECC编码
操作来生成相应的新码字,并随后可以执行新码字的比较——如果新码字彼此相同,那么
输出变换状态矩阵S*的对应行将被设定为该新码字,否则可以采取合适的行为,如上文讨
论的。
[0119] (2.3)函数d*函数d*以与上文描述的AES解密的完全相同的方式进行操作,除了给函数d*的
输入、函数d*的输出和函数d*的中间结果是变换状态矩阵(大小 ),并且函数
InvAddRoundKey 220、InvSubBytes 230、InvShiftRows 240和InvMixColumns 250被那些
函数的对应的变换版本所替换,即分别为InvAddRoundKey*函数720、InvSubBytes*函数
730、InvShiftRows*函数740和InvMixColumns*函数750。InvAddRoundKey*函数720、
InvSubBytes*函数 730、InvShiftRows*函数740和InvMixColumns*函数750中的每一个
在变换状态矩阵S*上进行操作并且输出变换状态矩阵S*。这些函数将更详细地进行简短
描述。图7示意性地图示出当基于图2的解密200的过程流时的函数d*的概述。
[0120] 如果InvAddRoundKey*函数720被表示为函数F*,并且InvAddRoundKey函数220被表示为对应的函数F,那么F和F*是有关的,因为对于所有的数据块D有
。(注意此处在上文等式中回合密钥RK没有被表示出——如果其被
包括的话,那么我们对于所有数据块D和所有回合密钥RK将会有
)。因此,InvAddRoundKey*函数720是对应于InvAddRoundKey函数220的变换函数。相
似地,如果InvSubBytes*函数730(或者InvShiftRows*函数740或InvMixColumns*函
数750)被表示为函数F*,并且InvSubBytes函数230(或者InvShiftRows 函数240或
InvMixColumns函数250)被表示为对应函数F,那么F和F*是有关的,因为对于所有的数据
块D有 。因此,InvSubBytes*函数730是对应于InvSubBytes函数230
的变换函数;InvShiftRows*函数740是对应于InvShiftRows函数240的变换函数;并且
InvMixColumns*函数750是对应于MixColumns函数250的变换函数。
[0121] 因此,因为函数d*是InvAddRoundKey*函数720、InvSubBytes*函数730、InvShiftRows*函数740、和InvMixColumns*函数750以例如图7中示出的次序(其对应于
图2中示出的次序)的级联,它遵守上文:函数d*是对应于函数d的变换函数,即,函数d*
具有属性:对于所有数据块D, 。
[0122] (2.3.1)InvAddRoundKey*InvAddRoundKey*函数720与AddRoundKey*函数520相同(因为InvAddRoundKey函数
220与AddRoundKey函数120相同)。
[0123] (2.3.2)InvShiftRows*InvShiftRows*函数740将涉及以与ShiftRows*函数540相似的方式来左移位,尽管
具有不同数量的左移位(因为状态S的行的n个位置的右移位等于状态S的该行的4-n个
位置的左移位,对于0≤n≤3)。因此,关于ShiftRows*函数540的相同等式(但是取决
于对于InvShiftRows函数240状态S的行经历了多少左移位而具有对应的不同迭代数)被
用于InvShiftRows*函数740。特别地,如果给InvShiftRows*函数740的输入是具有码
字cr(X)(0≤r<4)作为其行的变换状态矩阵S*,那么InvShiftRows*函数740的输出被
定义为具有码字 作为其行的变换状态矩阵S*,其中可以使用通过将等式F迭
代地应用于码字cr(X) (4-r)mod 4次来计算 。
[0124] (2.3.4)InvMixColumns*InvMixColumns*函数750以与对于MixColumns*函数550完全相同的方式来执行,除
了等式I中的函数t0、t1、t2和t3用以下函数替换:
(其中系数是十六进制的)。
[0125] (2.3.5)InvSubBytes*InvSubBytes*函数730以与对于SubBytes *函数530完全相同的方式来执行,除了使
用InvSubBytes函数230来代替SubBytes函数130。
[0126] (2.4)e*和d*的规定(provision)图8示意性地图示出根据本发明实施例的系统。
[0127] 提供器800被布置成使用生成程序802来生成初始算法e或者d的对应实现方式e*或者d*。生成程序802可以利用一个或者多个参数804来形成e*或者d*。这些参数
804可以例如是定义将在e*或者d*中使用的ECC的参数。提供器800向客户端810提供
实现方式e*或者d*,以使得客户端810可以执行、使用或者实施e*或者d*。e*或者d*的
实现方式可以被提供给客户端810作为软件和/或硬件
[0128] (2.5)修改在上文的章节2.1中,描述了ECC编码。特别地,在步骤400的ECC编码被描述为将状
态S的四行认为是向其应用ECC编码的四条消息,其中所得到的四个码字形成变换状态矩
阵S*的对应行或者由其表示。然而,将领会的是,可以替代地从S的四列形成四个消息。实
际上,可以从状态S的任何四组系数形成四个消息——优选地,这些系数组的并集是16个
可用系数的完整集合。而且,将领会的是,向其应用ECC编码的消息不需要是长度为四的,
而是可以替代地具有不同的长度。因此,不需要存在向其应用ECC编码的四个消息——可
以使用不同数量的消息。例如,可以形成长度为八字节的两个消息(例如,状态S的前两行
可以形成第一消息并且状态S的后两行可以形成第二消息),其中ECC编码被应用到这两个
消息。附加地,虽然变换状态矩阵S*已经被描述为是使用码字作为其行来形成的,但是将
领会的是,这不是必要的——例如,可以通过将其列设定为码字的系数来形成变换状态矩
阵S*(以使得变换状态矩阵然后是(4+w)x4矩阵);可以使用用变换状态矩阵表示码字的其
它方式。还将领会的是,并不是状态S的所有元素都需要被ECC编码来形成变换状态矩阵
S*。用于向状态矩阵S的元素应用ECC编码来形成对应的变换状态矩阵S*的其它变型是
可能的,如将由本领域技术人员领会的。上文阐述的等式将随后被相应地修改。
[0129] 用于ECC处理的字母表不需要包括字节——替代地,可以使用涉及不同的字母表的ECC处理,诸如其元素是g比特字(其中g>0)的字母表。将领会的是,上文描述的等式的
系统将被相应地修改。
[0130] 已经关于特定等式组描述上文阐述的函数。然而,如上提到的,这些等式的其它公式化可以被替代地使用来生成相同结果。等式或者其实现方式可以被优化—例如,当使用
具有特定架构的目标设备来实施本发明实施例时,所使用的等式可以针对该设备或者架构
而被优化。因此,将领会的是,本发明的实施例不限于上文阐述的等式,而是可以基于其它
等同的等式组。
[0131] 在本发明的一些实施例中,上文阐述的函数可以被实施为混淆函数。特别地,对于函数e*和d*的软件实现方式,软件混淆技术可以被应用来生成函数e*和d*的混淆实现
方式——这样的混淆技术是众所周知的,并且因此不将在本文中更详细地讨论。
[0132] 已经在上文参考其当前参数集描述了AES算法—特别地,数据块大小、密钥大小、回合数、所使用的不可约多项式、所涉及的函数的特定操作等是基于AES算法的当前规范
的。将领会的是,如果AES算法的配置在未来某个时间点被更新的话,上文描述的技术可以
被类似地应用到AES算法的更新形式中。
[0133] 将领会的是,所描述的方法已经被示为以特定次序执行的单独步骤。然而,技术人员将领会的是,这些步骤可以被组合或者以不同的次序执行,而依然实现期望的结果。
[0134] 将领会的是,可以使用各种不同信息处理系统来实施本发明实施例。特别地,虽然其图和讨论提供了示例性计算系统和方法,但是这些仅仅被呈现来在讨论本发明的各种方
面中提供有用的参考。本发明的实施例可以在任何适当的数据处理设备上执行,诸如个人
计算机、膝上型计算机、个人数字助理、移动电话、机顶盒、电视、服务器计算机等等。当然,
系统和方法的描述已经为了讨论的目的而被简化,并且它们仅仅是可以用于本发明实施例
的许多不同类型的系统和方法中的一种。将领会的是,在逻辑框之间的界限仅仅是说明性
的,并且可替换实施例可以合并逻辑框或者元件,或者可以对各种逻辑框或者元件施加功
能性的替换分解。
[0135] 将领会的是,上文提到的功能性可以被实施为一个或者多个对应模块,如硬件和/或软件。例如,上文提到的功能性可以被实施为一个或者多个软件组件以供系统的处理器
来执行。可替换地,上文提到的功能性可以被实施为硬件,诸如在一个或者多个现场可编程
门阵列(FPGA)上、和/或一个或者多个专用集成电路(ASIC)上、和/或一个或者多个数字
信号处理器(DSP)上、和/或其它硬件布置上。在本文含有的流程图中实施的或者如上文
描述的方法步骤可以均由对应的相应模块来实施,在本文含有的流程图中实施的或者如上
文描述的多个方法步骤可以一起由单个模块来实施。
[0136] 将领会的是,在这个意义上,本发明实施例由计算机程序实施,那么臣在计算机程序的存储介质和传输介质形成本发明的方面。计算机程序可以具有一个或者多个程序指
令或者程序代码,其当由计算机运行时执行本发明的实施例。如本文使用的术语“程序”可
以是被设计用于在计算机系统上执行的指令序列,并且可以包括子例程、函数、程序、模块、
对象方法、对象实现方式、可执行应用、小应用程序、小服务程序(servlet)、源代码、目标代
码、共享库、动态链接库、和/或被设计用于在计算机系统上执行的其他指令序列。存储介
质可以是磁盘(诸如硬驱动器或者软盘)、光盘(诸如CD-ROM、DVD-ROM或者蓝光盘)、存储器
(诸如ROM、RAM、EEPROM、EPROM、闪速存储器或者便携式/可移除存储器设备)等等。传输介
质可以是通信信号、数据广播、在两个或者更多计算机之间的通信链路等等。
QQ群二维码
意见反馈