用于通用密钥导出函数支持的安全接口的制作方法

文档序号:7950467阅读:307来源:国知局
专利名称:用于通用密钥导出函数支持的安全接口的制作方法
技术领域
本发明主要涉及密码系统领域。更确切地说,本发明涉及提供通 用密钥导出函数支持。
背景技术
Diffie-Hellman (DH)密钥协定是密码系统方面的基本发展。该协 定是公钥密码系统的第 一个可使用的方法,使密钥分配可行而不预先 确定密码。
在DH密钥协定最简单的形式中,每一方有各自的私钥x, y,可 从私钥分别导出公钥ax, ay。通过交换公钥,每一方可以通过联合私 钥和公钥计算出共享加密密钥axy。用以从私钥导出公钥的函数是单 向函数,该单向函数可以相对简单地计算出公钥,但不能从公钥中提 取私钥。这类函数基于因式分解大数字或有限域上离散对数问题的困 难性,其中的大数字是两个大质数的积。
现今Diffie-Hdlman (DH)密钥协定在广泛使用中。IPSec协议使用 DH密钥协定,并且IPSec用在大部分虚拟专用网络(VPNs)中,大 部分公司使用该虚拟专用网络以允许员工与公司网络远程连接,以及 用于通过开放的互联网连接分立办公处所。
Diffie-Hellman (DH)密钥协定还是传输层安全(TLS )协议中NIST 推荐的选项。该TSL协议是SSL协议的接继者。现今这些协议广泛 用于保护敏感网络通信,例如网上银行业务。
静态DH密钥协定是DH密钥协定的变体,其中一个私钥是静态 的,这意味着该静态私钥是将多次使用的长期密钥。
由于私钥的敏感性,尤其在它被多次使用的情况下,私钥通常设 置于私钥模块中,私钥模块是包括私钥操作的执行(implementation )。 通常,此类模块包括防止提取私钥的措施,以及在更加有限的程度上
防止滥用私钥操作的措施。例如,这些模块可在专用硬件中执行,这 些专用硬件不允许加载恶意软件,如病毒、蠕虫和特洛伊木马。通常, 实现此类防干扰措施代价昂贵。因而,为了降低成本,这些模块通常 设计为具有最小功能。那样,只有最少量的功能需要防干预保护。
作为简单实例,模块是智能卡。该智能卡由用户拥有。假如该用 户希望从某远程计算机与诸如家用计算机的目的站安全连接。用户将 智能卡放入与远程计算机相连的智能卡阅读器。而后与家用计算机进 行连接。该家用计算机通过发送口令鉴别用户。远程计算机向智能卡 转送口令。智能卡签署口令,然后将其发送回家用计算机。家用计算 机验证该口令并而后经过远程计算机向用户提供必要的入口 。这样允 许用户四处移动到不同的远程计算机。然而,这些远程计算机应该不
能够/人智能卡提取用户的私钥。也就是"i兌,当用户将智能卡留在阅读 器中时,他们应该只能够与家用计算机连接。(为实现这一点,需要 比简单口令和应答更复杂的方法。反之,智能卡可能需要执行常规的
通信鉴别或甚至所有通信的加密和解密。)
为了进一步提高安全性,常常指定密钥导出函数(KDF),该函
数是应用于原始DH共享加密的单向函数。 一些标准规定将一个KDF 与DH密钥协定一起使用。然而,不同的标准推荐不同的KDF。例如, ANSI指定几个不同的KDF, IEEE同样,SSL和TLS也同样,而IPSec 又不同。
下面提供支持两个标准化密钥导出函数的详细资料的筒化说明。 这两个函数是ANSIX9.63密钥导出函数和TLS密钥导出函数。
如下计算ANSI X9.63密钥导出。输入有三部分。第一输入部分 是Z,它是私钥模块和如上面简单实例中的家用计算机这样的目的站 之间共享的加密值。这个共享加密值Z不被透露给任何网关 (gateway),例如上面实例中远程计算机。第二输入部分是整型密钥 ^to/e",它是将被生成的密钥数据的字节长度。可选的第三输入部分 是字节串(octet string) 57^"d/w/o,它由一些共享数据组成,这些数 据由共享上述共享加密值Z的实体共享。而且,57^r^//M/o还可^皮任
选地给定抽象语法符号一 (ASN.l)编码,它包括5个字^::算法标 识符、用于两个实体中每一个的可选标识符、可选公共共享信息和可 选私用共享信息。然后如下基于这个输入进行KFD求值。
ANSI X9.63密钥导出函数的最初几步是对输入长度和理想的输 出长度^y&to/e"做出的某些一致性检验。然后对4字节(4-octet) 整型计数器_/赋初值1。如下计算一系列的散列值(hash values): SHA隱1 (Zfll [67wrW/"/o]),其中H表示串联(concatenation),而[〗表 示加方括号的输入是可选的。这些输出的数量,视^y^to/ew而定。 这些散列值被串联而形成字节串〖'=《/ II〖2 II ... II &。通过取走最左 边的一)^/ato/ew字节字节串被删节为短型字节串〖。
在TLS标准中,密钥导出函数被称为伪随机函数(PRF)。该TLS PRF的构造完全不同于ANSI X9.63 KDF,按如下给出。该构造利用 辅助构造HMAC,先描述该辅助构造。
HMAC构造可基于任何散列函数(hashfiinction)构造。当HMAC 结构与散列函数例如MD5和SHA-1 —起使用时,那么结果函数 (resulting function)被标记为HMAC-Hash,其中Hash是散列函数的 名称。TLS PRF使用HMAC-SHA-1和HMAC-MD5。 HMAC的通用 形式,即HMAC-Hash,如下运算。
向HMAC输入的是加密密钥〖和消息M。输出是标签r。 HMAC 标签计算为r=Hash((C+iO||Hash((D+iO||M)),其中||表示串联,+ 表示熟知的按位异或(XOR)运算,而C和D是如由HMAC算法确定 的常量位串。更确切地说,用0位填补密钥〖直到密钥K的长度与C 和"的长度匹配,但如果〖长于C和D,在这种情况下,K替换为 密钥的散列。这表示为
T=HMAC-Hash M).
函数HMAC-Hash用在TLS PRF的另一个辅助通用散列构造 (Hash-generic construction)中,称为P_Hash, 构造如下
PHash ( Z, seed ) = HMAC醒Hash ( Z, A(l) || seed ) || HMAC-Hash (Z, A(2) II seed) || HMAC-Hash (Z, A(3) || seed) ||...
其中ll表示串联,而A()定义如下<formula>formula see original document page 6</formula>
P—Hash可按需要的次数多次迭代从而产生必需的数据量。当 HMAC标签的结果串联比所需的数据量长时,如同ANSIX9.63那样, 使用最后(最右端)字节的截断(truncation )。
TLS PRF定义如下
<formula>formula see original document page 6</formula>
照常,其中+表示异或,而H表示串联。值S1和S2通过将字节串加密 值Z划分为两半得到,左半部分为Sl,而右半部分S2,作为大加密 值的左半部分有奇数个字节(octets )。
因为当SHA-1输出为20字节时,由该算法规定的MD5输出是 16字节,所以与函数P—SHA-1相比,P—MD5通常使用更多的迭代。
在TLS协议中广泛使用TLS PRF。例如,其用于从预主加密值 (pre誦master secret)导出主力口密Y直(master secret ),而其还用于乂人主力口 密钥导出加密密钥,等等。
有关KDF的标准之间的不协调导致模块执行者或者支持无KDF 的DH密钥协定,或者只支持有限数量的KDF。
标准的公钥密码标准(PKCS) #11:密码令牌接口 (cryptoki)为 令牌例如智能卡提供接口,智能卡是一类私钥模块。在这个标准中, 支持数个KDF,但所提供的接口通常不是对KDF可变通的。标准FIPS 140-2也规定对私钥模块的要求。其明确要求诸如原始DH共享加密 值的密码值不脱离私钥模块的安全边界,但它没有为密钥导出提供准 确的机制(mechanism )。
发明人已发现不适当的再利用静态DH私钥可最终导致由对手复 原私钥。更确切地说,当不应用密钥导出函数(KDF)使用通过静态 DH密钥协定建立的共享密钥时,对手可在建立以及^^用多个不同共 享密钥的情况下发起攻击,从而复原该静态DH私钥。
发明人最近的发现意味着无KDF而执行DH的选项有安全风险。支持数量减少的KDF可能功能太有限例如,其仅为了使用新的应
用标准而要求硬件更新。
由于标准对密钥导出函数没有达成协议,用于执行DH私钥操作 的模块必须设法支持多个不同KDF标准。 一个方法是该模块执行所 有KDF算法,因为该模块必须支持多个不同的KDF所以这样可能代 价很高,并且因为当出现新的KDF时该模块不能支持它们所以又很 有限。相对的方法是该模块提供通向原始DH私钥操作的无保护入口 , 并且让使用该模块的应用程序应用KDF。然而,这样致使私钥易受最 近发现的攻击的损坏。
本发明的目的是消除或减轻以上缺点。

发明内容
一般而言,本发明准许模块执行部分KDF算法,如同使用该模 块的应用程序所指明的那样。这样使模块免于对每一所需的KDF执 行整个KDF。反之,仅执行大部分KDF公用的可重复使用部分。而 且,当需要新的KDF时,如果它们建立在模块已执行的KDF部分之 上,该模块能够支持它们。
这种情况下,在该模块上不准许通向静态DH私钥操作的原始入 口 (raw access),因为这样通常往往有太多的安全风险。反而,该模 块提供足够灵活的接口以支持所有现有的重要KDF以及所有可预测 到的KDF。通过在安全私钥才莫块上执行现有的和可预测到的KDF的 公用部分实现这一点。现今的大部分KDF基于散列函数构造。适宜 地,大多数私钥模块需要执行至少一个散列函数。这一点对于防干扰 考虑也很重要,因为散列函数对许多诸如数字签名这样的算法的安全 性来说是至关重要的。
另夕卜,模块还可仅提供通向SHA-1的压缩函数的入口。该应用程 序仅通过增加一些必要的填充和做一些适当的链接即可使用这个压 缩函数计算SHA-1。这进一步筒化了该执行模块并且还使其更加灵 活。例如,某些附加的灵活性是一定的ANSI确定性随机数发生器使用SHA-1的压缩函数而不是整个SHA-1函数。更一般地说,随机数
的产生,诸如密钥导出,通常涉及基于安全和非安全输入混合的散列
函数评估的组合。因而本发明不只限于支持多个KDF,其还支持多个 确定性随机数发生器。
为了更大的灵活性,模块可支持更基本的操作,例如SHA-1压缩 函数的一些子操作。然而,,看起来不可能将这些子操作再用于除 SHA-1压缩函数外的某些目的。而且,这些单个子搮:作不提供SHA-1 的完全安全性,因而可能将模块上的加密值暴露给应用程序 (application),这将纟皮避免。然而,对于这个原则的例外是两对新散 列函数SHA-384和SHA-512对,以及SHA-224和SHA-256对。这 些对中每一对有很多公共部分并且实质上能够用单个公共函数执行。 应用程序将只对公共函数进行输入和输出从而获得期望的散列函数。
在TLS密钥导出情况下,TLS术语中称为伪随机函数(PRF), 使用两个散列函数。 一个是SHA-1而另 一个是MD5。为了将PRF-TLS 应用于加密值Z,该加密值被分为两半,Sl和S2。而后基于MD5 的PRF应用于Sl,而基于SHA1的函数应用于S2。为了使模块免予 既执行MD5又执行SHA1,可能非常昂贵,该模块可改为提供一种 机制,将Sl暴露给应用程序而将S2保持在模块中。该模块可在S2 上执行SHA1计算并且应用程序可在Sl上执行MD5计算。
尽管无法预计除了 TLS中的KDF会不会有任何其他KDF会以这 种方式分割加密值,但往往很难预言标准走哪条路。因而对于模块来 说支持分割加密值的通用方法可能有用。用于该模块的接口因而包括 一种才几制(mechanism),由此应用程序可i青求-使部分加密佳乂^开。以 这样一种方式执行该模块,使得足够的加密值保持安全,并且该应用 程序不能对加密值的不同部分进行多次请求。
因为新标准不断出现,并且由于标准不时重新i殳计KDF和随才几 数发生器,所以硬件模块的灵活的并且安全的接口为延伸该模块的可 用性提供了极高的价值。否则该模块有变得过时太快的风险。


现在将参照附图仅通过实例描述本发明实施例,其中
图l是一结构图,示出了用户设备和用私钥模块加密的目的站之
间的连4妻;以及
图2是一示意图,说明了在用户设备和图1所示的私钥模块中的密 钥导出函数的执行。
图3是说明私钥模块设备的示意图。
图4是说明 一个私钥导出函ft实例的流程图。
图5是说明另 一个密钥导出函数实例的流程图。
具体实施例方式
通过说明本发明原理的具体实施例的一个实例或多个实例提供 以下说明和其中的所述的实施例。出于说明而并非限制这些原理和本 发明的目的提供这些实例。以下说明中,在通篇说明书和附图中相同 的部件用各自相同的附图标记表示。
参照图1,示出了用户设备40和用私钥模块设备50加密的目的 站100之间的连接。通常,用户设备40和目的站100之间的连接不 是安全的而是开放的。例如,该连接可包括链接70和链接90,链接 70连至公共网络80,例如因特网,而链接90从公共网络连至目的站 100。任一链接可以是有线链接、无线链接或两者的组合。 一般而言, 私钥模块设备50是独立设备(self-contained device),例如智能卡或 令牌,可插入其上运行应用程序的某本地设备或用户设备40。当被应 用程序调用时,模块设备50与用户设备40合作保护经过链接70的 通信。
在这种工作模式下,私钥模块设备50提供私钥功能来保护用户 设备40和目的站设备100之间的连接。然而,由于私钥模块设备50 是自定义的私钥模块,其需要除了像用户设备40的典型用户计算机 保护之外的某种另外的保护。密钥导出函数(KDF)部分在用户设备 40上运行的应用程序中执行,而部分在私钥模块设备50上执行的模
块中执行,提高了安全性。应该明白尽管在此将用户设备40和私钥 模块设备50描述为不同的设备,但它们可集成在单个物理设备中。
例如,私钥模块设备50可作为专用嵌入芯片设置在用户设备40中。 用户设备40典型地将利用CPU 42和内存设备44运行多个应用 程序并执行不同的功能。用户设备40包括通信模块45,以在运行在 CPU42上的通信应用程序的指挥下管理链接70。为了建立安全通信, 该通信应用程序执行已建立的安全协议,例如上述的这些安全协议中 之一,安全协议需要私钥功能,例如KDF。为了便于计算所选择的 KDF,同时保持灵活性,KDF导出被分成谨慎的子程序(discreet subroutines),并且通过私钥模块50执行要求根据私钥运算的这些子 程序。通过用户设备40进行平衡(balance)以便不易通过用户设备 40得到原始私钥数据。
参照图2,示出了具有密钥导出函数(KDF)的安全系统的示例 性执行,该密钥导出函数部分在用户设备40上运行的应用程序10中 执行,而部分在私钥模块设备50上运行的应用程序20中执行。该 KDF被分为两部分。私钥模块50生成KDF组分24,而应用程序10 使用这些组分计算KDF的平衡22。私钥模块20具有模块接口 26用 以与应用程序IO交换数据和通信。模块接口 26进一步具有两个接口 函数,第一接口函数28和第二接口函数30。
有利地,某些加密值,例如Diffie-Hellmena共享加密值Z,在私 钥模块20中确定。应用程序10已知Z的长度,但未知Z的值。应用 程序IO有一句柄,由此其可引用加密值Z并因此要求私钥模块20导 出Z的j直。
第一接口函数28有包括整数和加密值Z的句柄的输入。该整数 定义了应该透露给应用程序10的Z的字节凄t。这是TLSPRF中的Sl 值。当执行该函数时,私钥模块20可强制将加密值的最小字节数留 作S2,以便应用程序IO不会知道整个密钥。选择该最小数以适于应 用程序所预期的安全级。对于80位的安全级,最小数可为IO字节。 一旦调用第一接口函数28,该加密值被永久截断为S2,并且私钥模
块20将不允许S2的进一步截断。用于引用S2的句柄或指针提供给
应用程序IO。优选地,由于在进一步的计算中不使用z,引用z的句
柄或指针可被再次使用。此后,调用第一接口函数28后,私钥模块 20设置加密值Z二S2。可选地,私钥模块20可创建只指向S2的新句 柄,并向应用程序IO输出该新句柄,使应用程序IO稍后能够引用S2。 值S1总是第一接口函数28输出的一部分,以便应用程序IO,即含在 应用程序10中的KDF的第一部分22,可执行有关Sl的任何它需要 执行的计算,例如用在TLS PRF中的MD5的计算。
第二接口函婆t 30具有包括两个值X和Y以及加密值Z的句柄的 输入。第一值是长度与加密值Z —致的字节串。第二接口函数30的 输出是
SHA-1 (X+Z||Y).
第二接口函数30是基本加密运算,由此可构造ANSIX9.63KDF 和TLS PRF。根据第一接口函数28的输出Sl和第二件口函数30的 输出,即SHA-1的散列值,应用程序IO可完成KDF计算并导出密钥。
用户设备40通常有CPU42,可由CPU42访问的内存设备44, 也可由CPU20访问的存储介质46,以及一些输入和输出设备(未示 出)。应该了解,用户设备40还可以是某种其他可编程计算设备。应 用程序10在CPU 42上执行。应用程序10可存储在存储介质46上, 该存储介质46可固定安装在用户设备40上、可从用户设备40上取 下或可由设备40远程访问。应用程序IO还可直接加载到CPU42上。 需要KDF的输出用于保护从用户设备40到目的站100的连接。
私钥模块50通常具有CPU或微处理器52、 CPU 52可访问的内 存设备54,也可由CPU 52访问的存储介质56,。私钥模块20在CPU 52上执行。私钥模块50可存储在存储介质56上或直接加载到内存设 备52上。私钥模块50可将加密私钥存储在其内存设备54或其存储 介质56中。应该了解,私钥模块50还可以有供用户输入加密私钥的 输入装置,例如键盘,如果私钥模块50是带键盘的智能卡。
尽管这里对通常倾向于存储较易变的数据的内存设备54和通常
倾向于存储较持久的数据的存储介质56进行区别,但私钥模块设备 50可以只有单个用于存储易变和不变数据两者的数据存储设备。
当需要时,数据链接60提供应用程序10和私钥模块50之间的 信道。数据链接60可以是有线的、或无线的。其可以是用户设备40 和私钥模块设备50之间的直接连接。,数据链接60可以是固定的, 或更优选地在需要时建立的连接。 一般而言,数据链接60不是开放 链接,而是受保护的链接。
如上所述,私钥模块20不执行整个KDF。在私钥模块50中生成 的KDF的组分24仅执行那些可重新使用的部分和仅仅是实现对安全 而言比较基础的加密运算的部分。这样提升了灵活性而不损害安全 性。例如当执行DH协议时,在模块上不准许通向静态DH私钥操作 的原始入口。反而,该模块提供足够灵活的接口以支持所有现有的 KDF以及所有可预测的KDF。最有效地做到这一点的一个方法是执 行现有和可预测的KDF的公用部分。尽管可以预测将来可才艮据分组 密码构造某些KDF,但现今的大多数KDF基于散列函数构造。大多 数私钥模块应该至少支持散列函数,因为散列函数对许多算法的安全 都至关重要,例如数字签名。幸运地,与KDFs相比,较少的散列函 数被标准化。例如,可重新利用散列函数SHA-1以支持几个不同的 KDF,例如截然不同的ANSI、 IPSec和TLS密钥导出函数。该TLS 密钥导出还使用另一个散列函数MD5,但这可在模块50外面处理, 这一点在下文进一步解释。
参照图3,对于使用SHA-1运算生成的KDF,应用程序10指示 私钥模块50提供什么样的输入作为散列函数的输入。部分输入对应 用程序是保密和未知的。为了说明这一点,应用程序IO通过句柄或 指针57引用这种加密输入。可通过应用程序IO直接提供公共输入。 对每个KDF是自定义的输入的格式化由该模块提供的通用格式化接 口规定。私钥模块50提供给应用程序10的散列输出可被应用程序10 再利作为对更多散列函数调用的进一步输入。这是因为许多KDF基 于链式结构,其中一个散列调用的输出被传送给另一个散列调用的输入。
在一个实施例中,私钥模块50包括SHA-1的执行和简单接口 。 在可选实施例中,私钥模块20包括通用执行环境。
可选地,可实现接口,由此模块可支持TLS PRF和ANSIX9.63 KDF两者而不过度地暴露原始私钥操作(从而避免发明人发现的攻 击)。
ANSI X9.63 KDF和TLS PRF支持该,搡作,ANSI X9.63 KDF通 过计算基于共享加密值从散列函数SHA-1算出的一系列散列值,并且 而后截断由散列值串联形成的字节串,从而从共享加密值导出密钥, 而TLS PRF有更加复杂构造,涉及散列函数MD5和散列函数SHA-1 两者的计算。
模块接口 26的目标是不执行散列函数MD5。在私钥模块20上, 即在KDF的第二部分24上,仅执行散列函数SHA-1。利用私钥模块 20的应用程序10因而负责在其KDF的第一部分22中执行MD5。从 安全性观点来看,这样可能不存在严重缺陷。这是因为普遍认为MD5 散列函数不能提供足够的安全性,然而往往普遍接受对于所有安全级 SHA-1散列函数可为密钥导出的目的提供足够的安全性,除了最高安 全级(这些4交高的安全级要求-使用SHA-256或SHA-1的另一个后继 者)。
在图4中主要示出了支持ANSI X9.63 KDF的操作。在这种操作 中,应用程序10选择X-0以及Y^j II [Sharedlnfo],其中j是应用程 序保持的4字节计数器。而后应用程序IO可以通过X、 Y以及Z的 句柄调用函数30。而后私钥模块50的应用程序20可以根据上述的和 图4中所示的表达式使用由应用程序10提供的X和Y的值以及Z的 句柄计算SHA-1。而后应用程序IO可以得到所计算出的SHA-1值, 并利用这一点构造ANSI X9.63 KDF并导出密钥。
图5示出了支持TLS PRF的应用程序10和20的运行。为了将共 享加密值Z分割为两半Sl和S2,应用程序10调用第一接口函数28 (图5的部分1以及以上已关于函数28描述)。接着应用程序IO调用
第二接口函数30从而基于S2计算散列值(图5的部分2 ),而后使用 上面的构造从第一和第二接口函数28、 30的输出计算P—SHA-1 (图 5的部分3)。在下面阐述部分2和3。
为了构造用在图5中所示的TLS PRF才喿作的部分2中的函数 HMAC-SHA-l,应用程序10先通过1=/)和i^M以及密钥I的句柄 调用第二接口函数30,得出Tl= SHA-1 (CD + X)||M)。 (Z)的值是公 知的常量,因此应用程序IO可利用。)而后应用程序lOi殳定Z- C 以及F = r,用相同的〖句柄,得到r = SHA-1 ((C + K) il 77)= HMAC-SHA(《,M)。 ( C的值像D —样是公开的。)
如果密钥K需要用O位填充,那么应用程序IO将通过用与适当 长度的常量C和D异或的必需0位预先考虑第二输入Y解决这一点。 如果密钥K足够长而需要首先压缩,那么应用程序10可通过设置X^0 和Y-O实现,从而得到散列密钥。这种情况下,应用程序10可选地 能够自己执行计算的其余部分,因为它有所有的必要信息,或它可以 使用第三接口特征将以上散列输出指定为具有新句柄的另 一个加密 值。
为了构造图3中所示的支持TLS-PRF的操作的部分3中的函数 P_SHA-1,现在应用程序l(H吏用作为部分1的输出所提供的Sl和上 面用于计算HMAC-SHA-1的构造,其中加密密钥被限制于私钥模块 20。这包括利用HMAC_SHA-1的迭代应用计算A(O)、 A(l)、 A(2), 而后HMAC_SHA-1的迭代应用用于通过HMAC^SHA-1的进一步应 用而形成P_SHA-1的输出。
而后输出P_SHA-1可用于构造KDF并导出密钥。
上面实例假定将在私钥模块20中导出的密钥作为输出传递给应 用程序10。另一种选择是导出的密钥仍保留在私钥模块20中,而输 出只是指向所述密钥的句柄或指针。这样的优点是所有密钥可保留在 私钥模块20中,这样向模块持有者较好地保证应用程序甚至不能滥 用导出的对话密钥,更不用说长期私钥。
在可选实施例中,私钥模块20有更大的灵活度。私钥模块20将
支持一些简单的执行语言,例如javascript或Java,其能够使绝大多 数操作在卡上执行。换句话说,应用程序10向私钥模块20提供程序, 而后私钥模块20执行该程序。当在模块中时,该程序可自由访问加 密值。为了安全性,私钥模块20确保模块的所有输出经历被批准的 加密算法,例如像SHA-1这样的散列算法或像AES这样的对称加密 运算的一部分。这阻止了恶意程序可能尝试的多数滥用。
为了进一步提高安全性,私钥模块20要求由签名人对程序进行 数字签名,而签名人的公开验证密钥已经安全地加载到了私用模块20 上。这是鉴别加载到私钥模块20中的程序的一个方法。程序鉴别确 保该程序不是以损害模块安全为目的的恶意执行程序。通过程序鉴别 不需要将该模块输出限制于某些散列或其他算法,因为程序自身足够 可信可以执行任何算法。
与第一实施例相比,这个可选实施例的优势在于其提供更大的灵 活性,例如允许在模块上执行现有的和新的多种散列。缺点是模块需 要支持通用执行语言,并且可能需要一部分公钥基础结构(public key infrastructure )。
现在已详细描述了本发明的多种实施例。本领域l支术人员应该了 解可对这些实施例做多种修改、调整和变化而不脱离本发明范围。由 于对上述最好方式进行改动或添加而不脱离本发明属性、实质和范 围,所以本发明不限于这些详细资料而仅由所附权利要求限定。
权利要求
1.一种计算加密函数的方法,所述加密函数涉及DH共享加密值,所述DH共享加密值可由私钥模块访问,所述方法包括以下步骤在所述私钥模块上执行利用所述共享加密值的加密函数的组分,以及向在另一个设备上运行的应用程序提供这类组分从而完成所述加密函数的计算。
2. 根据权利要求1所述的方法,其特征在于所述加密函数是密钥 导出函数。
3. 根据权利要求2所述的方法,其特征在于所述组分包括散列函数。
4. 一种加密装置,所述加密装置包括第一模块、第二模块和数据传 送器,所述第一模块具有共享加密值和利用所述共享加密值生成加密组 分的CPU,所述第二模块运行应用程序来计算加密函数,所述数据传送 器将组分从所述第 一模块传送到所述第二模块。
全文摘要
不适当再利用静态Didhe-Hellman(DH)私钥可泄露有关密钥的信息。通过密钥导出函数(KDF)防止这种泄露,但众多标准对密钥导出函数没有达成协议。用于执行DH私钥操作的模块必须设法支持多种不同的KDF标准。本发明提供中间方法既不试图执行所有可能的KDF运算,也不提供通向原始DH私钥操作的未受保护的入口。反而,该模块执行由使用该模块的应用程序指明的部分KDF运算。这使模块免于对每一所需的KDF执行整个KDF。反之,模块仅执行大部分KDF公用的可重复使用部分。而且,当需要新的KDF时,如果它们建立在模块已执行的部分之上,该模块能够支持它们。
文档编号H04L9/28GK101099327SQ200580046427
公开日2008年1月2日 申请日期2005年11月11日 优先权日2004年11月11日
发明者丹尼尔·R.·L.·布朗, 斯科特·A.·万斯通, 罗伯特·P.·加朗特 申请人:塞尔蒂卡姆公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1