用于保护密码散列函数的执行的方法和系统的制作方法

文档序号:6484773阅读:167来源:国知局
用于保护密码散列函数的执行的方法和系统的制作方法
【专利摘要】一种在能够观察输入、输出和中间值的计算环境中保护诸如SHA-256的密码散列函数的执行的计算机实现的方法。所述方法包含:对输入消息进行编码,使得散列函数输入被放置在变换后的域中,并接着应用变换后的密码散列函数以产生编码输出摘要;所述变换后的密码散列函数在所述变换后的域中实现所述密码散列函数。
【专利说明】用于保护密码散列函数的执行的方法和系统
【技术领域】
[0001]本发明一般涉及数字密码。更特别地,本发明涉及在白盒攻击环境中保护密码散列函数的操作。
【背景技术】
[0002]密码散列函数用来产生数据的数字“指纹”,并且是许多密码系统的组件。这种散列函数采取任意长度的位串作为输入,并将它们映射到固定长度的位串作为输出。输入通常被称作消息,而其输出通常被称作摘要(digest)。
[0003]在散列函数与其它密码原语(例如,块密码)之间的重要区别在于散列函数没有密钥(即,它们是无密钥原语)。这意味着给定输入消息,任何人都可以计算其摘要。存在许多已经在公共可用标准中指定的密码散列函数。例如,2008年10月的安全散列标准(SHS),FIPS PUB 180-3 (美国商务部)指定了五个密码散列函数:SHA-l、SHA-224、SHA-256、SHA-384、SHA-512,通过引用将其内容整体并入本文中。给定到散列函数的输入,计算其输出是非常容易的。然而,安全的密码散列函数必须满足被称作抗预映像或“单向性(one-way-ness)”的数学性质,其意味着,给定输出,计算散列至该输出的输入是非常困难的。因此,散列函数具有重要的不对称性:它们容易估计,但难以反转。
[0004]密码散列函数的公知应用包括数字签名方案、消息认证编码、伪随机数生成、代码签名方案、基于口令的认证以及密钥推导函数。散列函数也用来在数字权利管理(“DRM”)方案中恢复内容密钥。这是用于开放移动联盟(“OMA”)DRM的情况,所述开放移动联盟(“OMA”)DRM被部署在诸如移动电话的便携式电子装置上。内容供应者通过使用被称作内容加密密钥的对称密钥对内容进行加密来在交付给最终用户之前在OMA DRM系统中保护他们的内容(例如,视频、歌曲、游戏等等)。如果用户发出请求以在他们的电话上播放受保护的内容,则该电话的DRM代理首先检查针对该内容发行的权利对象内指定的许可。假定请求是授权的,则DRM代理将接着完成用来从权利对象内的数据中恢复所要求的内容加密密钥的计算。然后,解密并播放该内容。在2008年11月6日的OMA DRM规范V.2.1的章节
7.1.2中描述了由用来恢复内容加密密钥的DRM代理来完成的密码操作,通过引用将其内容整体并入本文中。该计算包括使用基于诸如SHA-1或SHA-256的散列函数的密钥推导函数。
[0005]恶意用户可能试图通过分析实现DRM代理的软件来提取内容密钥。特别是,在攻击者具有对执行环境和软件实现的完全控制(除非计算装置是物理上安全的)的白盒环境中,攻击者可访问代码、数据结构和执行环境。在这种环境中操作的攻击者可以通过进行存储器信息转储或通过在调试器中运行DRM代理来观察散列函数的输出。如果由DRM代理恢复的内容加密密钥被暴露了,则恶意攻击者可以访问它们,并且使用它们来脱机解密内容且将其从由权利对象强加的限制中释放出来(即,它们将能够规避DRM)。因此,重要的是,由DRM代理执行的密码操作是对用户隐藏的。
[0006]所以,可期望的是,在不泄露消息、摘要或者在它们两者之间的任何中间物的情况下提供消息的散列,使得散列操作自身是抗白盒攻击的。

【发明内容】

[0007]根据一方面,提供了一种在可以观察输入、输出和中间值的计算环境中保护诸如SHA-U SHA-224、SHA-256、SHA-384、或者SHA-512的密码散列函数的执行的计算机实现的方法。该方法包括对输入消息进行编码以在变换后的域中提供编码输入消息。然后,应用变换后的密码散列函数以提供输出摘要。变换后的密码散列函数在变换后的域中实现密码散列函数。然后,对输出摘要进行编码以提供编码输出摘要。也提供了包含指令的非瞬态计算机可读介质,其当由处理器执行时使处理器执行所述方法。
[0008]根据实施例,可以以编码形式接收输入消息,并且可以根据内部编码对输入消息进行重新编码。可以用未编码的填充字节来填充编码输入消息以提供填充后的消息,并且可以划分填充后的消息以提供编码字和未编码的填充字的至少一个阵列。可以根据变换后的安全散列函数来处理每个阵列,使得包含输入消息的任何部分的中间值总被编码。初始状态变量和常数可以被初始化,并接着用在散列函数迭代中以提供更新后的状态变量。可以将输出编码应用于更新后的状态变量以提供编码状态变量,并且可以将编码状态变量级联以提供输出摘要。可以确定在变换后的域中的用在散列函数中的组件函数的映射,并将其用在每次散列函数迭代中。这些映射可以被存储在查找表中,并且可以用来扩充在每个阵列中的字的数量,并且用来提供状态变量的中间值。
[0009]根据更进一步的方面,提供了一种通过使用密码散列函数来导出用于数字权利管理(DRM)内容的加密密钥的计算机实现的方法。该方法包括对输入消息进行编码以在变换后的域中提供编码输入消息。然后,应用变换后的密码散列函数以提供加密密钥,所述变换后的密码散列函数在变换后的域中实现密码散列函数,并且该加密密钥被编码。
【专利附图】

【附图说明】
[0010]现在将参考附图仅通过举例来描述本发明的实施例。在所述附图中:
图1是描绘了 SHA-256算法的常规实现的高级别概观的流程图。
[0011]图2是描绘了用于SHA-256算法的消息填充过程的流程图。
[0012]图3是描绘了用于SHA-256算法的消息块扩充过程的流程图。
[0013]图4是描绘了用于SHA-256算法的使用压缩算法的临时值的处理的流程图。
[0014]图5是示出了在变换后的和未变换的域中的加密和解密函数的通用化实现。
[0015]图6是根据实施例的用于保护密码散列函数的操作的系统的框图。
[0016]图7是根据实施例的SHA-256算法的安全实现的流程图。
[0017]图8是描绘了根据实施例的用于SHA-256算法的编码实现的填充过程的流程图。
[0018]图9是描绘了根据实施例的Wi阵列消息扩充的安全实现的流程图。
[0019]图10是描绘了根据实施例的用来处理Hi阵列的安全SHA-256实现的流程图。
【具体实施方式】
[0020]一般地,本发明提供了用于创建密码散列函数的安全软件实现的方法和系统,所述密码散列函数在白盒环境中抗攻击。如本文中使用的,白盒环境是攻击者对执行环境和软件实现具有完全控制的环境。换句话说,攻击者可访问代码、数据结构和执行环境。题目为 “SYSTEM AND METHOD FOR OBSCURING BIT-WISE AND TWO’S COMPLEMENT INTEGERCOMPUTATIONS IN SOFTWARE”的Johnson等人的美国专利N0.7,397,916包含关于白盒攻击的背景信息,并且通过引用并入本文中。
[0021]本文中描述的安全的密码散列实现允许对散列计算的输入和输出进行编码。如本文中使用的,编码是可逆的函数(例如,从字节到字节,或者从字到字),其用来隐藏敏感数据。本公开内容描述了如何接受编码消息和产生编码摘要,而没有暴露存储器中的未编码的值(即,消息、摘要和中间值)。
[0022]本公开内容的实施例变换散列算法以在变换后的域中操作,并且以对变换后的输入起作用和/或以有效的方式产生变换后的输出而在任何时间不暴露受保护的资产,由此针对白盒攻击保护散列函数的操作。实施例在仍维持与原始散列算法的兼容性的同时完成这个。在该上下文中的兼容性意味着接收编码消息输入并产生未编码的输出摘要的安全实现将产生与接收未编码的消息输入的标准散列函数实现相同的结果。
[0023]常规散列算法
如在2008年10月的安全散列标准(SHS)、FIPS PUB 180-3 (美国商务部)中描述的,示例密码散列函数是SHA-256算法。图1-4及其所附描述描述了 SHA-256算法的常规实现。SHA-256算法仅作为示例提供,并且用来说明本发明。然而,本领域的普通技术人员将理解,本公开内容的实施例可以应用于任何密码散列函数。
[0024]图1示出了 SHA-256算法的面向字节的散列实现的高级别概观。如将由本领域技术人员理解的,也可以支持面向位的实现。
[0025]首先将8个初始散列值Hi (在本文中也被称作状态变量)以及64个常数值Kj初始化为如在算法规范中定义的特定的常数值(步骤102,104)。
[0026]然后,预处理输出消息M。根据图2中的算法首先填充消息(步骤106)。如图2中所示,将0x80字节附加至消息M的末端(步骤202)。然后,进一步地将O X 00填充字节附加至消息M的末端,直至M的长度(以字节为单位)是56模64 (56 modulo 64)(步骤204,206)。然后,将以位为单位的M的原始长度附加至M作为64位的大端整数(即,8个字节)(步骤208)。因此,填充过程产生填充后的消息,其以字节为单位的长度是全等于O模64(congruent to O modulo 64)。再次参考图1,于是,将消息划分为64字节的块,其中,每个块被解释为16个32位大端字的阵列m (步骤108)。
[0027]如图3中详述的,在对中间值a, b, -h进行初始化(步骤110)之后,将每个阵列m扩充为64个32位字的阵列W (步骤112)。如图3所示,对于O Si £ 1.5,元素Wi =Mi,并且对于16 S B 63,元素州=Wm6+oD{Wn5)+V^?7+ai(Wh2),其中,如所示的,根据“右旋,,(ROTR)和“右移”(SHR)函数来定义σ函数。
[0028]对于阵列W的每个元素,将8个散列值Hi复制为临时处理值(a至h),其如在图4的流程图中示出的那样被映射(步骤114),并且被反馈到8个中间摘要值Hi中(步骤116),直至填充后的消息M的所有块已经被处理(步骤118)。最终的散列摘要是在所有的消息块m已经被处理后通过级联最终的8个Hi值来形成的256位的值(步骤120)。
[0029]可以从上面的描述中推论标准SHA-256算法的当考虑如何针对白盒攻击保护实现时是重要的以下性质: 1.输入消息必须是可访问的(可读取的),以便构建W阵列。
[0030] 2.如图3所示的W阵列的构建仅使用“移动”、“异或”(XOR)以及“加”操作。如被良好理解的,旋转操作可以用“移动”和XOR来实现。例如,32位字X的右旋η位可以通过X的右移η与X的左移(32-η)进行异或来完成。
[0031 ] 3.W阵列中的前16个值正好是16个字m,其正好是当前正被处理的M的512个位。
[0032]4.取决于消息M的长度,填充位存在于最终的消息块中,并且可以存在于倒数第二个的消息块中。这些填充位是已知的值。假定攻击者知道M的长度,并因此知道所有填充位以及填充开始的地方。
[0033]5.在用图4中的方法处理第一消息块的同时,值H以及因此的a至h都是固定的,可以基于正被使用的算法预测的已知值。如图4所示,在构建1\中“未知”值(消息位或者从消息位导出的值)仅仅通过W阵列而混合。这些未知值以每轮两个的速率(在第一轮后的a和e、在第二轮后的a、e、b和f、等等)通过加上T1以及使值经过状态变量而前进来传播到状态变量中。仅在第一个消息块的第四轮后,所有状态值包含“未知”数据。随后的消息块从前面块的最后状态开始,并因此包含从开始的未知数据。
[0034]6.图4的消息块处理、或者压缩算法仅使用移动、异或、与、非以及加操作。异或可以被表达为加和与的组合。
[0035]7.在许多应用中,消息和摘要被作为字节的阵列对待,但SHA-2算法将它们作为32位或64位的字来进行内部操作。
[0036]编码函数
对密码加密和解密函数的安全软件实现的输入和/或输出由编码参数组成,所述编码参数在与安全软件实现对接的模块中的要求特定的自适应。图5示出了带有操作的应用,所述操作使用函数E将输入域ID映射到输出域0D。反向操作D将输出值映射回在输入域ID中的值。图表也示出了将输入域ID映射到编码输入域ID’的变换Ta以及用来将编码输出域0D’中的值映射到输出域OD的变换TB。Ta和Tb是双向单射的。
[0037]连同密码函数E和D使用编码函数TA、TB暗示了通过应用变换函数Ta将域ID’的变换后的数据元素输入到变换后的加密函数E’,而不将输入域ID的数据元素输入到加密函数E以获得输出域OD的加密数据元素。变换后的加密函数E’在加密操作中组合反变换函数T/和/或IV1以保护机密信息,诸如密钥。然后,获得域0D’的变换后的加密数据元素。类似地,D’解密0D’中的数据值,并将它们映射到ID’中的值。通过在安全实现中执行Ta和/或TB,当在变换后的数据空间中分析输入数据和输出数据时不能够取回用于加密函数E和解密函数D的密钥。
[0038]变换函数1\、\中的至少一个应当是非平凡函数(S卩,它应当不同于恒等函数)。如果Ta是恒等函数,则输入域ID和ID’将是相同的域。如果Tb是恒等函数,则输出域是相同的域。
[0039]在散列算法中的编码
在OMA DRM示例中,散列函数的输出用来恢复内容加密密钥。因此,在这种情况下,至少应当将编码应用于摘要。然而,仅对摘要进行编码不提供充分的保护。因为散列函数是未加密钥的,所以如果攻击者可以观察未编码的输入,则他们可以通过使用他们自己的在OMA规范中定义的散列函数实现来计算未编码的输出。所以,在实施例中,也对散列函数的输入进行编码。
[0040]在要求密码散列函数的受保护实现的大部分情况下,必须对输入消息进行编码。编码帮助使消息对于攻击者保持机密(即消息不能容易被读取),并且使攻击者难以以有意义的方式改变消息,由此提供消息完整性的形式。必须遍及至少一些散列算法来维持编码,使得攻击者难以从中间状态向后工作并计算可能的未编码的输入消息。
[0041]注意的是,从编码消息产生未编码的摘要不必然泄露未编码的消息。安全密码散列函数的单向函数性质意味着找到产生给定摘要的输入消息在计算上是不可行的。因此,应用使用带有未编码输出的散列函数的安全实现是可能的。然而,将编码应用于摘要帮助使它们对于白盒攻击者保持机密,并且使它们难以以有意义的方式变更。
[0042]如上面注意的,本公开内容的实施例使用SHA-256散列算法。以下的描述提供了如何创建抗白盒攻击的SHA-256的实施方式的示例。如本领域普通技术人员将理解的,可以在仅平凡的改变的情况下以类似的方式使用所描述的方法和系统来保护SHA-2族(SHA-224、SHA-384和SHA-512)的其它密码散列函数。此外,该方法和描述使本领域技术人员足以将相同的保护应用于诸如SHA-1、MD5及其祖先的其它密码散列函数。
[0043]抗白盒攻击是通过对散列算法的输入、输出和中间状态值进行编码的使用来完成的。消息(输入)和摘要(输出)可以独立地受保护,并且如果被编码,则消息或摘要不在实现中的任何点处以它们的原始的未编码的形式出现。算法的基础功能未被修改,意味着由受保护的实现产生的编码摘要与通过将相同的编码应用于由未受保护的实现产生的摘要来产生的摘要完全相同。
[0044]鲁棒散列
保护散列操作实质上涉及通过应用可逆的编码函数来变换散列函数的输入(消息)和/或输出(摘要)。该编码函数可以如与固定值的异或那么简单,或者可以是任意复杂函数。本公开内容的实施例改变散列算法以对变换后的输入起作用,和/或以在任何时间处在不暴露受保护的资产的情况下以有效的方式产生变换后的输出,同时仍维持与原始散列算法的兼容性(即,涉及变换后的消息输入和未编码的输出摘要的白盒实现的实施例将产生与具有相同消息的未编码形式的标准实现相同的散列)。本公开内容的实施例允许大小为8位和32位的变换(每次变换8位或32位,分别使用8位或32位的变换系数),以便允许更大的变换空间。用表查找操作来代替散列算法的部分,所述表查找操作在不暴露变换方案的细节的情况下提供从变换后的输入到变换后的输出的有效映射。
[0045]该公开内容的特定实施例假定消息和摘要都被变换。该配置提供了最大的安全。然而,以变弱的安全性质为代价可以使用未变换的消息或摘要。使用未变换的消息和未变换的摘要两者的配置是可能的,但是不被推荐,因为它给予有限的保护。所描述的实施例假定8位变换用于消息和摘要两者,然而,如下面讨论的,进一步的实施例支持32位变换。
[0046]图6是用于保护密码散列函数的操作的系统的高级别框图。于是,相对于图7-10描述了根据本公开内容的一个实施例描述的SHA-256算法的受保护实现。不使用输入或输出的编码的实施例容易通过将Tm或Td设置为恒等变换(注意的是,Tm和Td分别是消息输入编码和摘要输出编码)来从上面导出。这仅影响从Tm到Tim以及从Th到Td的映射。然而,这些实例是较不安全的,因为已知的值将用中间变换来进行编码,其可能允许攻击者攻击该变换并恢复编码资产。[0047]如图6所示,根据编码函数Tm编码的输入消息M对输入编码函数Tim 602重新编码。然后,根据填充函数604填充在IM域中所得的编码消息Tim(M)至如由密码散列函数确定的长度。例如,对于SHA-256,填充后的Tim编码的输入消息的长度是O模64 (O mod64)字节。如在下面更详细讨论的,填充字节是未编码的,除了根据一个实施例将消息长度上调至多个4字节所需的初始填充字节,所述填充字节是在Tim域中进行编码的。该实施例提供附加的安全,因为它确保未编码的填充字节不与消息字节一起被包括在相同的字边界内。这确保了消息字节可以在不担心字的部分被编码且其它部分未被编码的情况下均一地被划分为字。然而,如本领域普通技术人员将理解的,如果所有填充字节都是未编码的,本公开内容的实施例将运行。
[0048]然后,预先处理填充后的Tim编码的消息,以由分块或划分函数606将其划分为预先确定的长度的字的块。例如,在SHA-256的受保护实现中,首先将填充后的Tim编码的输入消息划分为64字节的“组块”,并随后将每个组块划分为16位、32位字的块,导致16字的编码阵列TIM(m)。
[0049]然后,通过在Tim域中应用变换后的函数来处理每个TIM(m)阵列。对于变换后的SHA-2散列函数,如所示的,在Tim域608中根据扩充函数首先处理给定的Tim(m)阵列,以提供编码阵列Tw(W)。例如,对于SHA-256,扩充函数导致由64个32位字组成的编码Tw(W)阵列。然后,在Tw域610中由压缩函数压缩该扩充后的阵列,导致编码中间值Tw(a,b,…h)。一旦消息的所有的组块都已经被处理,最终中间值通过使用编码函数Th 612可选地进行编码,以提供编码输出散列值TwOlci, H1, -,H7)。然后,由级联函数614级联这些输出散列值以生成原始输入消息M的编码输出摘要Td(D)。
[0050]现在将参考变换后的实现SHA-256,并且如图7_10所示的,更详细地描述本方法的操作。如图7所示,将状态变量Htl至H7初始化为如由散列函数标准指定的值(步骤702)。也将64个KyK63值初始化为如在散列算法规范中定义的它们的常数值(步骤704)。这些变量最初是未编码的,帮助确保攻 击者不能使用已知的预定义的值来攻击对Htl至H7的变换。
[0051]通过使用编码方案Tm来以编码格式将消息数据输入到算法。该变换可以是面向字节或面向字的。Tm是在散列实现与使用受保护的散列函数的模块之间进行编码的“接口”。Tm编码可以对应用是唯一的,或者可以对用于应用内的散列算法的使用的实例是唯一的。在一些实施例中,将外部变换Tm转换为内部的任意选择的8位变换TIM。Tm编码的字节/字用Tim编码重新进行编码(例如,X’ = TimCTm(X)))。根据优选的实施例,重新编码优选地被完成为组合的操作,而非在解码之后编码;以这种方式,编码方案不被暴露。如下所述,Tim变换对于在不暴露变换Tm的情况下处理填充字节是有用的。然后填充消息M(步骤706)以产生填充后的编码消息。
[0052]填充方法在图8中示出。一般地,以未编码形式添加填充字节,以减小已知的填充字节可以用来攻击对消息的变换Tim的危险。为了简化将消息字节划分成消息字,优选地在32位字边界处执行从编码形式到未编码形式的转变。如果编码消息M的长度是O模4 (Omod 4),则将未编码的0x80字节以及零 或更多的未编码的0x00字节附加至消息的末端,直至填充后的消息的长度是56模64 (56 mod 64)(步骤802、804)。如果编码消息M的长度不是O模4 (O mod 4),则将Tim编码的0x80字节以及零至两个Tim编码的0x00字节附加至编码消息M的末端,直至它的长度是O模4 (O mod 4)(步骤806、808),在这之后,在其长度是56模64 (56 mod 64)之前,将未编码的0x00字节附加至消息的末端,直到至填充后的消息的末端(步骤804)。这些Tim编码的0x80和0x00值可以进行预计算,而非在运行时间处确定。优选地选择Tim变换,使得暴露值0x80和0x00不需要暴露其它值。然后,将消息M (以位为单位)的原始长度附加至填充后的消息,作为64位整数(步骤810)。注意的是,因为该长度字段总是8字节长且以512位的组块结束,所以它将总是字对准的。注意的是,这是适合于应用的简化实现,其中,所有消息具有全等于O模8 (O mod 8)的以位为单位的长度(即,它们是面向字节的,而非面向位的)。将该方案扩展至面向位的消息可以通过附加编码值来平凡地完成,以(在可能的更多的Tim被暴露的安全暗示的情况下)覆盖包含初始“I”个填充位的字节的剩下可能值。然而,用于散列算法的各种各样的应用不要求逐位散列。
[0053]返回到图7,填充过程产生填充后的消息,其以字节为单位的长度等同于O模64(0mod 64)。Tim编码的消息字节由此被划分为64字节的组块(步骤708)。每个组块中的字节进一步被划分为32位的大端字,以形成阵列m的16个字。在将中间值a, b…h初始化为HyH7的当前值(步骤710)之后,通过使用在图9中示出的消息扩充函数来构建阵列W (步骤 712)。
[0054]如图9所示,首先确定并存储阵列W的首先的16个元素(对于O≤i≤15的WiX在处理中,消息字节在一些点处将转变为未编码填充字节。以未编码形式将未编码填充字节存储在W阵列中。注意的是,如上面图8中概括的填充过程确保从编码消息字节到未编码消息字节的转变可以仅发生在字边界上。所以,每个消息字%由四个编码字节或由四个未编码字节组成,但绝不是编码字节和未编码字节的组合。如果Hli是未编码的(即,如果Hli仅由填充字节组成),则Wi = HIi (步骤902)。
[0055]如果Hii被编码 ,则Wi = TwCT1im(Hii))。根据优选的实施例,重新编码优选地被完成为组合的操作,而非在解码之后编码;以这种方式,编码方案不被暴露(步骤902)。Tw是字节到字函数。
[0056]阵列W的这些初始16个字转而被扩充为64个32位编码字的阵列W。W阵列的这些剩下的元素通过查找表LSp LS1, SLS0和SLS1来计算。如将由本领域普通技术人员理解的,SHA-256算法使用六个逻辑函数,其中,每个函数对32位字进行操作,所述32位字被表示为x、y和z。该函数如下:
【权利要求】
1.一种在能够观察输入、输出和中间值的计算环境中保护密码散列函数的执行的计算机实现的方法,所述方法包括: 对输入消息进行编码以在变换后的域中提供编码输入消息;以及应用变换后的密码散列函数以提供输出摘要,所述变换后的密码散列函数在所述变换后的域中实现所述密码散列函数。
2.权利要求1所述的方法,进一步包括: 对所述输出摘要进行编码以提供编码输出摘要。
3.权利要求1或权利要求2所述的方法,其中,以编码形式接收所述输入消息,以及对所述输入消息进行编码包括根据内部编码对所述输入消息进行重新编码。
4.权利要求1至3中的任意一项所述的方法,其中,所述密码散列函数是SHA-1、SHA-224、SHA-256、SHA-384、或者 SHA-512。
5.权利要求4中的任意一项所述的方法,进一步包括: 用未编码的填充字节来填充所述编码输入消息以提供填充后的消息。
6.权利要求5所述的方法,进一步包括: 划分所述填充后的消息以提供编码字和未编码的填充字的至少一个阵列。
7.权利要求6所述的方法,其中,应用所述变换后的密码散列函数包括: 根据所述变换后的安全散列函数来处理所述至少一个阵列中的每个,使得包含所述输入消息的任何部分的中间值总被编码。`
8.权利要求7所述的方法,其中,处理所述至少一个阵列中的每个包括: 对将用在散列函数迭代中的初始状态变量和常数进行初始化; 对所述至少一个阵列中的每个执行散列函数迭代以提供更新后的状态变量; 将输出编码应用于所述更新后的状态变量以提供编码状态变量;以及 将所述编码状态变量级联以提供所述输出摘要。
9.权利要求8所述的方法,其中,对所述至少一个阵列中的每个执行散列函数迭代包括: 在所述变换后的域中确定用在所述散列函数中的组件函数的映射。
10.权利要求9所述的方法,其中,所述映射被存储在查找表中。
11.权利要求9或权利要求10所述的方法,其中,所述映射用来扩充在所述至少一个阵列中的字的数量。
12.权利要求9-11中的任意一项所述的方法,其中,所述映射用来提供所述状态变量的中间值。
13.一种包含指令的非瞬态计算机可读介质,其当由处理器执行时使所述处理器执行在能够观察输入、输出和中间值的计算环境中保护密码散列函数的执行的方法,所述方法包括: 对输入消息进行编码以在变换后的域中提供编码输入消息;以及应用变换后的密码散列函数以提供输出摘要,所述变换后的密码散列函数在所述变换后的域中实现所述密码散列函数。
14.权利要求13所述的计算机可读介质,进一步包括: 对所述输出摘要进行编码以提供编码输出摘要。
15.权利要求13或权利要求14所述的计算机可读介质,其中,以编码形式接收所述输入消息,以及对所述输入消息进行编码包括根据内部编码对所述输入消息进行重新编码。
16.权利要求13至15中的任意一项所述的计算机可读介质,其中,所述密码散列函数是 SHA-1、SHA-224、SHA-256、SHA-384、或者 SHA-512。
17.权利要求13至16中的任意一项所述的计算机可读介质,进一步包括: 用未编码的填充字节来填充所述编码输入消息以提供填充后的消息。
18.权利要求17所述的计算机可读介质,进一步包括: 划分所述填充后的消息以提供编码字和未编码的填充字的至少一个阵列。
19.权利要求18所述的计算机可读介质,其中,应用所述变换后的密码散列函数包括: 根据所述变换后的安全散列函数来处理所述至少一个阵列中的每个,使得包含所述输入消息的任何部分的中间值总被编码。
20.权利要求19所述的计算机可读介质,其中,处理所述至少一个阵列中的每个包括: 对将用在散列函数迭代中的初始状态变量和常数进行初始化; 对所述至少一个阵列中的每个执行散列函数迭代以提供更新后的状态变量; 将输出编码应用于所述更新后的状态变量以提供编码状态变量;以及 将所述编码状态变量级联以提供所述输出摘要。
21.权利要求20所述的计算机可读介质,其中,对所述至少一个阵列中的每个执行散列函数迭代包括:` 在所述变换后的域中确定用在所述散列函数中的组件函数的映射。
22.权利要求21所述的计算机可读介质,其中,所述映射被存储在查找表中。
23.权利要求21或权利要求22所述的计算机可读介质,其中,所述映射用来扩充在所述至少一个阵列中的字的数量。
24.权利要求21-23中的任意一项所述的计算机可读介质,其中,所述映射用来提供所述状态变量的中间值。
25.—种通过使用密码散列函数来导出用于数字权利管理(DRM)内容的加密密钥的计算机实现的方法,所述方法包括: 对输入消息进行编码以在变换后的域中提供编码输入消息; 应用变换后的密码散列函数以提供所述加密密钥,所述变换后的密码散列函数在所述变换后的域中实现所述密码散列函数;以及对加密密钥进行编码。
【文档编号】G06F21/60GK103875001SQ201180071355
【公开日】2014年6月18日 申请日期:2011年3月31日 优先权日:2011年3月31日
【发明者】J.埃梅特, P.A.埃森, J.缪尔, D.默多克 申请人:耶德托公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1