专利名称:执行透明化密码区块串行模式密码运算的装置及方法
技术领域:
本发明涉及微电子学领域,尤其涉及一种在微处理器或其它设备中执行透明化密码区块串行模式密码运算的装置及方法。
背景技术:
一早期计算机系统,与其它计算机系统独立运作,因此一在早期计算机系统中执行的应用程序,所请求的全部输入数据,可能位于该计算机系统,或由一应用程序设计者于执行时提供。该应用程序由输出数据产生,且为执行后的结果,而该输出数据通常以书面输出,或为文件形式,写在一磁带机、磁盘或其它位于该计算机系统内的大量储存装置中。该输出文件接着可以作为执行在同一计算机系统中,一系列应用程序的输入文件,或者该输出数据先前就已经以一文件形式储存到一可移除或可运输的大量储存装置,则它可接着被提供到一不同、甚至不兼容的计算机系统,以供应用程序使用。在这些早期的计算机系统中,已确认保护敏感数据的需求,而在其它信息保全措施中,密码程序发展及利用来保护未授权揭露的敏感数据。一般来说,这些密码程序将储存在大量储存装置的输出数据的加密及解密。
几年前,使用者发现连结网络计算机,以提供存取已共享的数据。连带地,网络结构、操作系统及数据传输协议,同样地将存取已分享数据的能力,发展到不仅仅是支持,甚至扮演起突起性重要的角色。例如,在今日一计算机工作站的使用者,能够读取不同工作站或网络文件服务器的文件、使用因特网取得新闻及其它信息、在数百部计算机间传送及接收电子信息(亦即电子邮件)、连接到供货商的计算机系统,提供信用卡或银行功能信息,以进行与供货商之间的买卖、或在餐厅、机场或其它公共场所利用无线网络进行前述活动,都是相当平常的事情。因此,保护未授权揭露的敏感数据本身及传输的需求剧烈的成长。一使用者在一给定计算机多层协议期间,有义务来保护敏感数据的案例越来越多。目前新闻头条规律性地加重计算机信息安全议题的力道,例如垃圾邮件、黑客攻击、个人数据外流、还原工程、网络诈骗以及信用卡诈欺等公众议题的最前线。而因为这些预谋的网络恐怖主义,以不正的手段入侵个人隐私范围的影响,有关机关已经拟定出相对应的新法、严格的执行及公众教育的程序。然而,没有任何一种反应在计算机信息妥协处理趋势上表现出作用。原本只有政府关心的事情,金融制度,军事及间谍问题,现在变成一般市民从其家用计算机读取电子邮件或执行活储户头存取时一种显著的主题。在信息安全范畴方面,已逐渐发展出一些技术与装置可以让信息只会被特定的对像所接收了解,即所谓的密码学(cryptography)。当特别应用于保护信息时,其为在计算机间储存或传送时,加密使用于传送敏感的信息(已知如“明文”(cleartext)或“本文”(plaintext)至不能了解的形式(如“密文”(ciphertext))。明文转换至密文的传送过程称“加密(encryption)”、“译成密码(enciphering)”、或“密码化(ciphering)”,且密文转换至明文的传送过程称“解密(decryption)”、“解除密码(deciphering)”、或“转换密码(inverse ciphering)”。
在密码范畴中,已发展出数个步骤及规则,来允许使用者不需要高度知识或努力来完成密码操作,且使这些使用者能够传送或以其它方式如加密形式提供其信息给其它使用者。顺着加密信息,传送者一般提供接受者一个不能使接受者解除加密信息的“加密密码”,因此接受者不能够移除或以其它方式增加未加密原始信息的存取。一种技术将这些步骤或规则采取密码保护,数学运算及特别设计的应用程序形式将高敏感度信息加密或解密。
一些运算类别使用于将数据加密或解密。在此提及的第一类运算类别(如公共密钥加密运算RSA运算)利用两种加密密码(一种公共密钥(publickey)及一种私人密钥(private key))来将数据加密或解密。提及一些公共密钥运算,一种公共密钥利用来传送给接受者的数据加密。在使用者公共及私人密钥兼有一个数学演算关系,接受者必须利用其私人密钥将传送数据解密以恢多据。虽然此类加密运算在今日广泛被使用,但加密及解密操作速度仍然过慢,即使只加密与解密少量数据。第二类运算,如对称密钥运算(symmetric key algorithms),提供数据安全相当程度,且速度更快。这些运算称为对称密钥运算,因为其使用加密密钥于加密及解密信息。有三种公共公知的主要加密密钥运算数据加密标准规则(data encryption standard、DES),三重数据加密标准规则(Triple DES),及进阶加密标准规则(advancedencryption standard、AES)。因为这些演算强度保护高敏感度数据,其现在由美国政府及其代理机构使用。但可以预期,这些技术中的一个或多个将在未来成为商业或私人传送标准。根据这些对称密钥运算,明文及密文分别被区隔于一个特殊的大小来加密或解密。举例,在128位大小区间的进阶加密标准规则完整加密操作,且使用128、192及256位的加密密钥。其它对称密钥运算允许192及256位数据组的进阶加密标准。提及分组加密操作,一种1024位明文信息为如八个128字节加密。
全部的对称密钥运算利用相同形式的次操作,将一明文区块加密。且提及一般更常使用的对称密钥运算,一种最初加密密钥扩充进多种密钥(如一种“密钥目录”),每一个如符合次操作加密“轮”(round)在明文区块中完成。举例,密钥目录的第一密钥使用来完成在明文区块上次操作的第一加密轮,其中第二轮利用密钥目录的第二密钥来产生第二结果。一种特定数量的次单元轮被完成来产生一个密文本身的最终回结果。进阶加密标准规则运算的每一轮中的次操作,尚有次位(或S-box)、移列(ShiftRows)、混栏(MixColum)、加轮密钥(AddRoundKey)等术语。每一轮期间,一种密文区块解密完成,除了完成密文输入转换密码以及转换次操作(如混栏,移列),每一轮最终结果为明文区块。
数据加密标准规则及三重数据加密标准规则利用不同特性次操作,但次操作与这些进阶加密标准规则同工,因为其利用于类似方式转换一明文区块成一密文区块。
在多重连续测试组上完成密码操作,全部对称密钥运算利用相同的模式。这些模式包含电子密码本(electronic code book、ECB)模式、密码块链(cipher block chaining、CBC)模式、密码反馈(cipher feedback、CFB)模式、及输出反馈(output feedback、OFB)模式。在次操作完成期间,一些模式利用一种附加初始化向量且一些使用完成于第一明文区块加密第一位置的密文输出如一种附加输入至完成于第二明文区块的加密第二位置。更多的相关技术细节,可以参见Federal Information Processing Standards Publication46-3(FIPS-46-3),1999年10月25日,其详细讨论了数据加密标准规则、三重数据加密标准规则;以及参见FIPS-197,2001年11月26日,其对进阶加密标准作了详细解释。前述标准规则系由国家标准科技研究所(NationalInstitute of Standards and Technology、NIST)颁布及主张。此外,个别的指令、白皮书、套装工具及对策可参考国家标准科技研究所的计算机安全应变中心(CSRC),网址为http//csrc.nist.gov/。
公知技术者将察觉多数应用程序可以有效的在计算机上执行以完成加密操作(如加密及去密)。事实上,一些操作系统(如Microsoft、WindowsXP、Linux)在原始加密形式、加密应用程序接口及相似物时,直接提供加密/解密服务。无论如何,今日计算机加密技术仍存在一些缺陷。请直接参考图1,借以在下面突显及讨论这些缺陷。
图1为一种今日计算机加密应用的方框图100,描述一个与局域网络105连结的第一计算机工作站101、一个第二计算机工作站102、一个网络文件储存设备106、一个第一路由器107、或其它与广域网络(WAN)110如因特网、及一个无线网络路由器108如IEEE标准802.11形成的接口亦与局域网络105连结。一个笔记型计算机104利用无线网络109连接至无线网络由器108。广域网络110另一个重点,一个第二路由器111提供一个第三计算机工作站103接口。
如上提及,今日使用者在工作期间多次面临计算机信息安全性的议题。举例,在今日多重工作操作系统控制下,一个工作站101使用者可同步完成数个工作,每一个皆需要密码操作。工作站101使用者需要进行加密/解密应用程序112(如部分操作系统提供或由操作系统行驶)已在网络文件储存设备106上储存区域文件。在文件储存的同时,使用者可传送加密信息至位于第二计算机工作站102的第二使用者,其亦需要执行加密/解密应用程序112。加密信息可为实时(如一种立即信息)或非实时(如电子邮件)。另外,使用者还可从第三计算机工作站(103)经由广域网络110存取或提供他/她最终数据(如信用卡号码,金融转账,等)或其它形式的敏感数据。当走出公司进入任何一个在局域网络105上的分享资源101,102,106,107,108,109工作站101,使用者使用第三计算机工作站103可代表家用计算机或远距计算机103。每一个前述动作需要一个符合执行加密/解密应用程序112的例子。此外,无线网络109现在常态性的提供于咖啡店,机场,学校,及其它公共场所,因此笔记型计算机104使用者一个加密解密无论是他/她的信息传送/接收其它使用者立即的需要,且经由无线网络109至无线网络由器108加密或解密所有信息。
公知技术者可以了解,每一个上述活动都需要在工作站101-104上做加密操作,也就相应有执行一个立即的加密/解密应用程序112的需求。因此,计算机101-104进一步可能同时完成数百个加密操作。
无论如何,存在一些在计算机系统101-104上执行至少一个以上立即的加密/解密应用程序112而完成加密操作方法的限制。举例,经由一个软件程序完成一个前述功能相对比经由硬件完成相同功能执行慢。每一个加密/解密应用程序112都需要一段时间,并且正在计算机101-104上执行的现行程序可能在这段时间内必须暂停执行,且加密操作(如明文,密文,模式,密钥等)参数必须通过操作系统至加密/解密应用程序112,执行加密操作。且因为加密运算必须包含特殊组别数据几回次操作,加密/解密应用程序(112)执行包含执行多个计算机延伸指令,因此全部系统操作速度有不利的影响。如一般公知技术者所能查觉,在Microsoft Outlook传送一个小的加密电子邮件会较传送一个未加密电子邮件慢5倍。
另外,当前技术的局限是由操作系统干涉的延迟所造成的。大多数应用程序并不提供整数密钥产生或加密/解密组件,他们执行操作系统的组件或内嵌应用程序,以完成这些任务。而操作系统系按照其它正在执行应用程序的需求及中断进行调度。
甚至,本发明注意到在当前计算机系统101-104上密码运算的完成与在微处理器中专用浮点单元出现前浮点数学运算的完成是类似的。早期的浮点运算通过软件实现,所以执行速度很慢。就像浮点运算一样,通过软件执行密码运算是相当慢的。随着浮点技术的改进,浮点指令提供在浮点共同处理器上执行,共同处理器执行浮点运算比软件的实现要快很多,当然它也增加了系统的成本。同样地,今日密码共同处理器以扩展板或通过并行端口或其它外围接口(如USB)连接到主处理器的外部设备的形式。共同处理器当然使得密码运算的执行比纯软件的实现要快。但密码共同处理器给系统配置增加了成本,他需要额外的电源、而且降低了系统的可靠性。由于数据通路不像主微处理器那样在同一个模块上,所以密码共同处理器的执行乃更易被监听。
因此,本发明了解到人们需要在今日的微处理器里有一个专门的密码硬件,这样需要密码运算的应用程序可以直接经由一条单独的、微密码指令指示微处理器执行该密码运算。本发明也提供这样的功能,减少对操作系统的干涉和管理。并且该密码指令最好能够在应用程序的特权级加以使用,指定的密码硬件能够与当前流行的微处理器兼容。同时密码硬件和相关密码指令要提供与先前操作系统和程序的兼容的方式。最主要的是提供一种执行密码运算的装置和方法,使有效抵御未授权的监听,并能支持多种密码算法,支持对在其中实施的特殊密码算法进行验证和测试,允许用户提供的密钥和自行产生的密钥,支持多重的数据块大小和密钥长度,提供可编程的区块加密/解密模式,即如ECB、CBC、CFB和OFB等,并且在使用上述可编程区块加密/解密模式时能够对大量数据块高效执行区块密码功能。
发明内容
本发明用以解决公知技术的上述以及其它的问题和缺陷。本发明提供一种较好的技术以在微处理器内执行密码运算。
在一个方案中,在一微处理器内提供用以完成密码运算的装置。该装置包括一密码指令电路、密码区块串行区块指针逻辑电路和执行逻辑电路。密码指令电路所提供的密码指令,通过计算装置以接收,并作为在计算装置上所执行指令流的一部分,密码指令也规定了一种密码运算。密码运算包括多个密码区块串行区块密码运算,而这些密码区块串行区块密码运算则在相对应的多个输入内文区块中被处理。密码区块串行区块指针逻辑电路和密码指令电路结合在一起。该密码区块串行区块指针逻辑电路指示计算装置更新指针寄存器及每一个多个密码区块串行区块密码运算的中间结果。执行逻辑电路和密码区块串行区块指针逻辑电路相互结合,执行逻辑电路则执行一条密码指令。
本发明另一方案为一种执行密码运算的装置,该装置包括一内嵌在一设备中的密码单元和密码区块串行区块指针逻辑电路。密码单元对收到的指令流中指定了一条密码运算的密码指令作出响应并执行一种密码运算,此密码运算包括数个密码区块串行区块密码运算。而密码区块串行区块密码运算则于所对应的数个输入内文区块中被处理。密码区块串行区块指针逻辑电路和密码单元结合在一起。密码区块串行区块指针逻辑电路指示该设备更新指针寄存器的内容,并暂存每一个密码区块串行区块密码运算的结果。
本发明又一方案为一种在一设备内执行密码运算的方法。该方法包括响应收到的密码指令并执行一种密码运算,其中密码指令规定了一种密码运算,而该执行包括完成数个在相对应数个输入文字区块中的密码区块串行模式区块运算。该方法还包括将一个当前输入文字区块写到一个初始化向量的位置,以使在下一个输入文字区块的下一个密码区块串行模式区块运算,使用当前输入文字区块作为一个等效的初始化向量。
图1是说明当前密码应用的示意图。
图2是描述执行密码运算技术的示意图。
图3揭示依据本发明用以执行密码运算的微处理器装置的示意图。
图4揭示依据本发明一微密码指令实施例的示意图。
图5依据图4的微密码指令说明典型区块密码模式的数值表。
图6详细描述依据本发明在一个x86兼容微处理器内密码单元的方框图。
图7说明在图6的微处理器内执行密码子运算的典型微指令的示意图。
图8根据图7的格式说明一加载微指令寄存器字段的数值表。
图9根据图7的格式揭示一储存微指令寄存器字段的数值表。
图10依据本发明用以规定密码运算的密码参数的典型控制字格式图。
图11依据本发明密码单元详细描述的方框图。
图12依据本发明说明一种区块密码逻辑电路实施例的方框图,使按照进阶加密标准执行密码运算。
图13依据本发明描述在一中断事件中用以查看密码参数状态方法的流程图。
图14依据本发明描述在至少一个中断事件下于数输入数据区块中完成特定密码区块串行模式密码运算的方法的流程图。
其中,附图标记说明如下100方框图 101第一计算机工作站
102第二计算机工作站 103第三计算机工作站104笔记本计算机 105局域网络106网络文件储存设备 107第一路由器108无线网络由器 109无线网络110广域网络 111第二路由器112加密/解密应用程序 200方框图201微处理器 202操作系统203应用内存 204密码密钥产生程序205密钥目录 206区块加密程序207区块解密程序 208初始化向量209密码参数 210明文区块211密文区块 300方框图301微处理器 302指令寄存器303转译逻辑电路 304微指令队列305、306微指令入口 307寄存器组308-313寄存器314加载逻辑电路 315数据高速缓存316密码单元 317储存逻辑电路318写回逻辑电路 319内存总线320操作系统 321系统内存322密码指令 323初始控制字符324初始密钥或密钥目录325初始化向量326输入文字区块 327输出文字区块328执行逻辑电路 400微密码指令401可选择性前置字段 402重复前置字段403运算码字段404区块密码模式字段500表600x86兼容微处理器601获取逻辑电路 602转译逻辑电路603转译器604微码只读存储器605寄存器阶段606寻址阶段
607加载阶段 608执行阶段609微指令队列 610整数单元611微指令队列 612浮点单元613微指令队列 614多媒体延伸集单元615微指令队列 616串流延伸集单元617密码单元 618储存阶段619写回阶段 620加载总线621延迟信号 622储存总线624标志寄存器 625X位626中断逻辑电路 627软件及硬件中断信号628机器特定寄存器 629E位630特性控制寄存器 631D位632执行逻辑电路 640密码区块串行区块指针逻辑电路700微指令 701微运算码字段702数据寄存器字段 703寄存器字段704数据域位 800表900表 1000控制字符格式1001保留字段1002密钥大小字段1003加密/解密字段 1004中间结果字段1005密钥产生字段1006算法字段1007轮计数字段 1100密码单元1101区块密码逻辑电路1102密钥随机存取内存1103微指令寄存器1104控制字符寄存器1105输入-0寄存器1106输入-1寄存器1107密钥-0寄存器1108密钥-1寄存器1109输出-0寄存器1110输出-1寄存器1111加载总线1112储存总线1113延迟信号1114微指令总线1200区块密码逻辑电路1201微指令寄存器
1202控制字符寄存器 1203密钥-0寄存器1204key-1寄存器1205-1206输入寄存器1207-1208输出寄存器1210轮引擎控制器 1211-1214总线1216-1218总线1220轮引擎 1221第一密钥XOR逻辑电路1222第一寄存器暂存-0 1223S-Box逻辑电路1224移列逻辑电路 1225第二寄存器暂存-11226混栏逻辑电路 1227第三寄存器暂存-21302区块 1304判断区块1306区块 1308区块1310区块 1312区块1402区块 1404区块1406判断区块 1408区块1410区块 1412区块1414区块 1416区块1418区块 1420区块1422区块 1426判断区块1428区块 1430区块具体实施方式
以下所述为应用公知技术而制造或使用文中特定应用及需求的本发明所列举的例子。然而,实施例中所提及的各种修改用于彰显与公知技术的不同处,此一般原则可应用于其它实施例中。因此,本发明并非限定于特定实施例。
有鉴于上述关于密码程序的技术背景及当今计算机系统所使用将数据加密及解密的相关技术,我们将参照图2来继续探讨这些技术及其限制。接着,将参照图3-14继续讨论本发明。
请看图2,一方框图200描述了在上述当代计算机系统上完成密码运算的技术。方框图200包括一个微处理器201,其从一个应用程序对应的系统内存中,被称作应用内存203的一部份,进行获取指令和存取数据。程序的控制和从该应用内存203存取数据是由驻留在一系统内存中已受到保护的区域内的操作系统202管理。如上述讨论,如果一个正在执行的应用程序(例如一电子信箱程序或一文件储存程序)需要执行一个密码运算,正在执行的应用程序即必须指使微处理器201执行特定数量的指令才能完成密码运算。这些指令也许就是该正在执行应用程序部份的一个子程序,它们也可能是链接到该正在执行应用程序的内嵌程序,也可能是该操作系统202所提供的服务。不管它们的结合,一个本领域技术人员将了解这些指令将驻留在一些指定的或是已分配的内存区域中。基于讨论的目的,这些储存区域将会被揭示在该应用内存203中,及包含一个密码密钥产生程序204,其可产生或接收一个密码密钥并可将该密钥扩展成为一密钥目录205以供密码轮运算使用。对于多区块的加密运算,一区块加密程序206将被引动。该加密程序206执行可存取多个区块的指令,多个区块包含明文区块210、密钥目录205、诸如模式、密钥目录的位置等更为详细加密运算的密码参数209。如果指定的模式需要,一个初始化向量208也会借助加密程序206来存取。加密程序206执行这些指令使产生相关的密文区块211。同样地,为了执行区块解密运算,需引动一区块解密程序207。解密程序207执行用来存取多个区块的指令,多个区块包含密文区块211、密钥目录205、更为详细解密运算的密码参数209,如果模式需要,一初始化向量208也会被存取。解密程序207执行这些指令以产生相对应的明文区块210。
值得注意的是需要执行特定数量的指令,以产生密码密钥和加密或解密文字区块。上述的FIPS规范包含了许多伪码范例,使得需确定的指令数量能够被估计出来。因此,一个本领域技术人员通晓需要上百个指令完成一个简单的区块加密运算,其中每个指令都要借助微处理器201执行,才能完成所需的密码运算。进一步来说,执行这些指令来完成一个密码运算,对于当前正在执行应用程序的主要目的(如文件管理,实时消息,电子信箱,远程文件存取、信用卡交易)来说是多余的运算。因此,当前正在执行应用程序的用户感觉到当前所执行程序的完成并没有有效率。在独立的或内嵌的加密及解密程序206、207的情况下,启动和管理这些程序206、207也要受到操作系统202的其它需求所支配,诸如支持中断、异常以及恶化问题的事件等。再者,对于在一计算机系统上所需求的每一并行的密码运算,程序204、206、207的一例子就是须分开配置于内存203中。及如上所述,可以预期的是,要求由一微处理器201并行的密码运算数目,将会随着时间持续增加。
本发明的发明人注意到了这些问题和当前计算机系统密码技术的局限,更确认了提供在一不会对使用者出现程序延迟的微处理器中,执行密码运算的装置和方法的需求。运算因此,本发明于此提供一微处理器,经由专属的密码单元,执行密码运算的装置及相关的方法。当启动密码单元时,以经由一单一密码指令的程序化执行密码运算。现在将参照图3-12讨论本发明。
参照图3,一方框图300描述了一个依据本发明执行密码运算的微处理器装置。方框图300描述了一个微处理器301,其通过一内存总线319连到一系统内存321上。微处理器301包括从一指令寄存器302接收指令的转译逻辑电路303。转译逻辑电路303可以是逻辑电路、装置或微码(即微指令或本地指令)、或是一个逻辑电路、装置或微码的组合,或是能够转译指令到相关微指令序列的等效组件。在转译逻辑电路303中所执行转译的组件可能被其它的电路、微码等所共享,即在微处理器301内执行其它的功能。依据本发明的目的,微码是一个术语,它表示大量的微指令。一微指令(或称为本地指令)是一个执行单元级别的指令。例如,微指令由精简指令集计算机微处理器直接执行。对于一个复杂指令集计算机微处理器,诸如一x86兼容微处理器,x86指令会被转译成相关的微指令,而这些微指令可以在复杂指令集计算机微处理器内由至少一个单元直接执行。转译逻辑电路303连接到一微指令队列304上,微指令队列304有数个微指令入口305、306。微指令由微指令队列304提供给包括一寄存器组307的寄存器阶段逻辑电路。寄存器组307具有多个寄存器308-313,且这些寄存器的内容在执行一个指定的密码运算前即被建立。寄存器308-312指向内存321中的相应位置323-327,这里存放着执行指定密码运算所需的数据。寄存器阶段连接到加载逻辑电路314,其连接到用来检索完成指定密码运算数据的数据高速缓存315。数据高速缓存315通过内存总线319连接到内存321上。执行逻辑电路328和加载逻辑电路314相接,并通过上一阶段传送下来的微指令执行指定的运算。执行逻辑电路328包含逻辑电路、装置或微码(即微指令或本地指令)、或是一个逻辑电路、装置或微码的组合,或是能通过提供给它的微指令执行指定运算的等效组件。在执行逻辑电路328中执行运算的组件可能被其它的电路、微码等所共享,即在微处理器301内完成其它的功能。执行逻辑电路328包括一个密码单元316,密码单元316从加载逻辑电路314接收,用以执行指定密码运算所需的数据。微指令驱动密码单元316在多个输入文字区块326上执行指定的密码运算,以生成相关的多个输出文字区块327。密码单元316包含逻辑电路、装置或微码(即微指令或本地指令)、或是一个逻辑电路、装置或微码的联合体,或是能执行密码运算的等效单元。在密码单元316中执行密码运算的组件可能被其它的电路、微码等所共享,即在微处理器301内完成其它的功能。在一实施例中,密码单元316和执行逻辑电路328的其它执行单元(未图标),诸如整数单元、浮点单元等,并行执行。在本发明范围中一“单元”的一实施例包含逻辑电路、装置或微码(即微指令或本地指令)、或是一个逻辑电路、装置或微码的联合体,或是能执行指定运算或指定功能的等效组件。这些在一个特殊单元上执行指定运算或执行指定功能的组件,可能被其它的电路、微码等所共享,即在微处理器301内执行其它功能或运算。例如,在一个实施例中,一整数单元包含逻辑电路、装置或微码(即微指令或本地指令)、或是一个逻辑电路、装置或微码的组合,或是能执行整数指令的等效组件。一浮点单元包含逻辑电路、装置或微码(即微指令或本地指令)、或是一个逻辑电路、装置或微码的组合,或是能执行浮点指令的等效组件。在整数单元内执行整数指令的组件可以共享电路、微码等,即在浮点单元内执行浮点指令。在相容x86体系的一实施例中,密码单元316和一x86的整数单元、一x86的浮点单元、一x86的多媒体延伸单元和一x86的串流延伸单元并行执行。根据本发明,一兼容x86体系的实施例是指这个实施例能够正确地执行大多数设计用来在一x86微处理器上执行的应用程序。如果得到一个正确结果,应用程序能被正准确地被执行。可供选择的x86兼容实施例期望密码单元与上述所提到x86执行单元的一个子集并行执行。密码单元316连接到储存逻辑电路317上,并提供相对应多个输出文字区块327。储存逻辑电路317也连接到数据高速缓存315,其将输出文字区块327发送到系统内存321处以供储存。储存逻辑电路317连接到写回逻辑电路318上。当指定的密码运算完成,写回逻辑电路318将更新寄存器组307中的寄存器308-313。在一个实施例中,微指令与一频率信号(未图标)同步,流经每一个上述的逻辑阶段302、303、304、307、314、316-318,这样,这些运算就可以并行执行,就像一条装配线一样。
在系统内存321中,一应用程序需要指定的密码运算,且可经由一个单一密码指令322,指示微处理器301去执行密码运算。在此以一密码(XCRYPT)指令作为范例说明。在一复杂指令集计算机实施例中,密码指令322包含一指定一密码运算的指令。在精简指令集计算机实施例中,密码指令322包含一指定一密码运算的微指令。在一实施例中,密码指令322利用现有指令集架构中多余的或未用的指令编码。在一x86兼容的实施例中,密码指令322为一个4字节的指令,其包含x86重复(REP)前置(即0xF3),接着2字节未用的x86运算码(例如0x0FA7),再加上1字节,其指定在执行一指定密码运算时使用的一特定区块密码模式。在一个实施例中,依据本发明密码指令322可以在提供给应用程序的系统权限级下执行,并因此能在一应用程序或在一操作系统320的控制之下,编写到程序指令流里使提供给微处理器301。由于执行指定的密码运算只需一密码指令322指示微处理器301,这样,运算的完成对于操作系统320来说将完全是透明化的。
运算时,操作系统320引动一个应用程序使在微处理器301上执行,在执行该应用程序期间,作为指令流的一部分,一密码指令322由内存321提供给获取逻辑电路302。然而,在执行密码指令322之前,在程序流中的指令指示该微处理器301,以初始化寄存器308-312的内容,以致将其指向在内存321中的位置323-327,这些位置包含一密码控制字符323、一初始密码密钥324或一密钥目录324、一初始化向量325(如果需要的话),供运算的输入文字326和输出文字327。在执行密码指令322之前需初始化寄存器308-312,因为密码指令322需指示寄存器308-312与一附加寄存器313,所以在执行密码指令322之前需初始化寄存器308-312,而附加寄存器313包含一区块计数,其为在输入文字326中一些被加密或解密的数据区块。这样,转译逻辑电路303从获取逻辑电路302获取到密码指令,及将其转译至一相对应于微指令序列,以指示微处理器301执行指定的密码运算。运算一在相对应于微指令电路系列的第一多的微指令电路305-306,特别指示密码单元316加载由加载逻辑电路314提供的数据,即开始执行已指定密码轮的数量,以产生一相对应的输出数据区块,及提供相对应的输出数据区块至储存逻辑电路317,经由数据高速缓存315将其储存在内存321的输出文字327。在相对应于微指令的序列内,一第二多微指令(未绘示)指示在微处理器301内的其它执行单元,执行其它必须的运算,以完成指定的密码运算,例如管理无架构寄存器(未绘示),其包含暂时结果及计数器,更新输入及输出指示器寄存器311-312,及在一输入文字326的加密/解密后,更新初始向量指针寄存器310(如果需要的话),处理中断搁置等等。在一实施例中,寄存器308-313为结构性寄存器。一结构性寄存器308-313定义为在用于特殊微处理器之指令集架构(instruction set architecture,ISA)内的一寄存器。
运算在一个实施例中,密码单元316被分为数个阶段,借此允许管线化连续输入文字326。
图3的方框图300提供本发明的必要组件,也因此,在微处理器301内的多数逻辑电路,为了清楚明了,因而于方框图300省略。然而一本领域技术人员将会理解,微处理器301依据特定实施,包含许多阶段及逻辑组件,为了清楚明了,将其聚集起来。例如,加载逻辑电路314可以实施一地址产生阶段,紧接着一高速缓存接口阶段,接着一高速缓存线对准阶段。然而重要的是,依据本发明,在多个输入文字326上的一完整的密码运算,依据本发明被指示经由一单一密码指令322,其密码指令电路的密码运算只考虑到操作系统320,及其密码指令电路的执行经由一专属的密码单元316,在微处理器301内平行运算完成。本发明专注的焦点密码单元316的另一实施例,类似于几年年前,在一微处理器中专属浮点单元硬件的实施组态。密码单元316及相关的密码指令322的运算,完全与同时的旧有操作系统320和应用兼容,将在以下做更详细的说明。
现在参照图4,一示意图显示一依据本发明的微密码指令400的实施例。微密码指令400包含一可选择性前置字段401,其后紧接着一重复前置字段402,之后又接着一运算码字段403,而后紧接着一区块密码模式字段404。在一实施例中,这些字段401-404的内容与x86指令集架构相符合。其它的实施例普遍与其它指令集架构兼容。
运算上,可选择性前置字段401是用在许多指令集架构,以致能或不致能一主微处理器某些处理特性装置,例如指示16-位或32-位运算,指示处理或存取特定存储片段等等。重复前置字段402指示由微密码指令电路400指定的密码运算在多个输入数据区块上完成(亦即明文或密文)。重复前置字段402亦暗指一适合的微处理器,以使用多个架构性寄存器的内容,作为一在系统内存内位置的指针,系统内存包含特定密码运算的数据及参数。如上所述,在一x86相容的实施例中,重复前置字段402的数值为0xF3。而且,根据x86的结构协议,密码指令与REP.MOVS之类的x86重复串指令相当类似。举例而言,当执行本发明的与x86兼容的微处理器实施例时,重复前置字段指令指示储存在结构寄存器ECX中的区块计算变量、储存在寄存器ESI中的来源地址指针(指出密码运算所用的输入数据)以及储存在寄存器EDI中的目的地址指针(在内存中指出输出数据区域)。在x86相容的实施例中,本发明使公知重复串指令内容,更参照储存在寄存器EDX中的控制字符指针、储存在寄存器EBX中的密码密钥指针、以及储存在寄存器EAX中的初始化向量的指针(若指定的芯片模式需要的话)。运算码字段403指定微处理器完成密码运算,其更指定于储存在内存中的控制字符内,此内存通过控制字符指针指示。本发明计算出运算码字段403的较佳选择值以作为现存指令集架构内备用或未用运算码之一,以便保留旧有操作系统以及应用软件符合的微处理器的一致性。举例而言,如前所述,运算码字段403施行数值0x0FA7,以指示执行具体说明的密码运算。区块密码模式字段404指定特殊区块密码模式,以在具体说明密码运算期间执行,如图5所示。
图5绘示了一表500,此表500绘示了根据图4的电子结构的示范性区块密码模式字段的数值。数值0xC8指定密码运算可借助使用电子密码本(electronic code book,ECB)信息模式而完成。数值0xD0指定密码运算可使用密码块链(cipher block chaining,密码块链)而完成。数值0xE0指定密码运算可使用密码反馈模式(cipher feedback,CFB)而完成。数值0xE8指定密码运算可使用输出反馈模式(output feedback,OFB)而完成。区块密码模式字段404的所有其它值会被保留。这些模式在前述的FIPS文字中有所描述。
接着,图6绘示了一方框图,此方框图描述了根据本发明的x86-兼容微处理器600中的密码单元617。微处理器600包含获取逻辑电路601,获取逻辑电路601自内存(未绘示)取得用以执行的结构。获取逻辑电路601连接至转译逻辑电路602。转译逻辑电路602包含逻辑电路、组件或是微码(换言之,微结构或是本体结构)或者逻辑电路、组件、或微码的组合,或者使用转译结构至微结构的相关顺序的等效组件。在转译逻辑电路602中执行转译的组件可与其它电路、微码等所共享,这些电路、微码用以在微处理器600中执行其它功能。转译逻辑电路602包含转译器603、连接至微码只读存储器604的转译器603、以及连接至转译器603和微码只读存储器604的密码区块串行区块指针逻辑电路640。中断逻辑电路626通过总线628连接至转译逻辑电路602。多数软件及硬件中断信号627借助中断逻辑电路626而处理,中断逻辑电路626指示将中断传送至转译逻辑电路602。转译逻辑电路602连接至微处理器600的连续阶段,此微处理器600包含一寄存器阶段605、寻址阶段606、加载阶段607、执行阶段608、储存阶段618以及写回阶段619。连续阶段中的每一个包含完成特定功能的逻辑电路,这些特定功能与执行获取逻辑电路601提供的指令有关,且这些结构在图3的微处理器中以类似的名称描述。图6所描述的x86兼容实施例的特色为在执行阶段608中的执行逻辑电路632,执行阶段608包含平行执行单元610、612、614、616、617。一整数单元610自微指令队列609接收整数微指令电路以执行。一浮点单元612自微指令队列611接收浮点微指令电路以执行。一多媒体延伸集单元614自微指令队列614接收多媒体延伸集微指令以执行。一串流延伸集单元616自微指令队列615接收串流延伸集微指令以执行。在示范性x86实施例中,密码单元617通过加载总线620、延迟信号621以及储存总线622连接至串流延伸集单元616。密码单元617分享了串流延伸集单元的微指令队列615。在另一替代性实施例中,以类似于单元610、612和614的方式执行密码单元617的独立平行运算。整数单元610连接至x86标志(EFLAGS)寄存器624。标志寄存器包含X位625,其用以指示密码运算是否在处理中。在一实施例中,X位625为排在x86标志寄存器624的第30个位。此外,整数单元610接收机械特定寄存器628以鉴定E位629的状态。E位629的状态指示密码单元617是否在微处理器600中呈现。整数单元在特性控制寄存器630中接收一D位631,以使密码单元617致能或非致能。如图3所示的微处理器实施例301,图6的微处理器600特别描述了一些组件以清楚的表现x86-兼容实施例的来龙去脉并清楚的聚集或删除微处理器的其它组件。本领域技术人员可轻易知晓完成接口所需要的其它组件如数据高速缓存(未绘示)、总线接口单元(未绘示)、频率产生以及分配逻辑电路(未绘示)等等。
运算中,借助获取逻辑电路601,从内存(未绘示)取得指令电路并同步于频率信号(未绘示)提供指令给转译逻辑电路602。转译逻辑电路602转译每一指令电路至微指令电路的对应队列,这些微指令队列同步于一频率信号,连续地被提供给微处理器的随后阶段605-608、618和619。微指令序列中的每一微指令电路指示子运算的执行,此子运算需完成全面运算,且此全面运算借助对应指令电路而指定,这些对应指令可如底下的指令电路借助寻址阶段606的地址的产生;整数单元610中的两相加运算码,此整数单元610从寄存器阶段605中的指定寄存器(未绘示)而获得;储存执行单元610、612、614、616、617之一所产生的结果,此储存借助储存阶段618所执行。根据被转译的指令,转译逻辑电路602将使转译器603直接产生微指令序列,或者获得来自微码只读存储器604的序列,或者使转译器603直接产生序列的一部份并获得来自微码只读存储器604的现存序列部份。微指令与频率信号同步通过随后阶段605-608、618和619而相继进行。在微指令到达执行阶段608时,他们与其运算码以及被指定的执行单元610、612、614、616、617(在寄存器阶段605中自寄存器取得,或者被地址阶段606中的逻辑电路所产生,或者借助加载阶段607自数据高速缓存所取得)一起被执行逻辑电路632所安排执行,借助被相对应的微指令队列609、611、613、615替换微指令而达成。执行单元610、612、614、616、617执行微指令并提供结果给储存阶段618。在一实施例中,微指令包含指示其是否与其它运算平行执行的字段。反应于前述的取得密码指令,转译逻辑电路602产生相关的微指令,这些微指令在微处理器600的随后阶段605-608、618、619中指出逻辑电路,以施行指定的密码运算。运算第一多数相关微指令被传送至密码单元617并指示密码单元617加载由加载总线620所提供的数据,或者加载一区块的输入数据并开始执行预定数量的加密循环,以产生一区块的输出数据,或者通过储存总线622,以提供输出数据的产生区块,并借助储存阶段618而储存在内存中。第二多数相关微指令被传送至其它执行单元610、612、614、616以执行其它子运算,这些子运算需完成预定密码运算,这些预定密码运算可为测试E位629,致能D位631、设定X位625以指出密码运算是否在执行、更新寄存器605中的寄存器(也就是计算寄存器、输入文字指针寄存器、输出文字指针寄存器),处理被中断逻辑电路626所指示的中断627。通过交错密码单元微指令序列中的整数单元微指令,相关微指令被提供作为多重输入数据区块上特定密码运算之执行,以使整数运算能够和密码单元运算并行完成。微指令包含在相关的微指令中以允许响应中断627和从中断627返回。由于所有密码参数和数据的指针都存放在x86的结构寄存器中,当处理中断时他们的状态将会被保存,而且等状态在从中断返回时恢复。因此,当有中断发生时,程控将跳转到相应的中断服务程序。作为程控跳转的一部分,X位625将被清掉,以表示密钥数据和控制字符数据不再有效。当从中断返回时,程控被转回到密码指令,并作为其相关微指令的一部分,特殊的微指令将测试X位625的状态以决定密钥数据和控制字符数据是否有效。如果有效,程序将对在中断发生之前的特定输入数据区块继续进行处理,如果X位625的状态表明密钥数据和控制字符数据不再有效,将会重新到内存,并读取中断发生时正在处理特定输入数据区块的密钥和控制字符。总之,根据本发明,执行一密码指令总是包含X位625的初始测试以决定在密码单元617中密钥数据和控制字符数据的有效性。如果密钥数据和控制字符数据无效,即可从内存读取密钥数据和控制字符数据。然后由输入指针寄存器指向的输入数据区块乃被加载,而且指定密码运算系在输入数据区块上执行。另外,输入数据区块的加载和指定密码运算的执行并不需要先加载密钥数据和控制字符数据。
如果有了一个新的密钥和控制字符,那么在执行新的密码指令之前必须清掉该X位625。使用相同密钥数据和控制字数据的连续密码指令也能够被执行。在这种情况下,无需在初始化密钥数据和控制字数据被输入后清掉X位625。例如,为了提高内存总线的速度,用户可以将500个输入数据区块的加密/解密分成5个密码指令,其每个指令可处理100个输入数据区块。
利用密码区块串行模式,密码区块串行区块指针逻辑电路640将完成密码运算。密码区块串行区块指针逻辑电路640确保相关的微指令工作正常并允许指针寄存器和在系列输入文字区块上的区块密码运算序列的中间结果在处理中断627之前能够被更新。密码区块串行区块指针逻辑电路640指示插入到微指令流中的微指令电路,这样在执行第一区块输入数据的密码运算时,在内存中的输入及输出数据区块指针乃被更改指向下一输入及输出数据区块。另外,密码区块串行区块指针逻辑电路640指示插入到相应的微指令流中的微指令,使更改区块计数器以表明当前输入数据区块上的密码运算已经完成。一个本领域技术人员了解在密码区块串行模式下的加密运算使用一个初始化向量,其被一第一明文区块使用以产生一第一密文区块。为了生成一第二密文区块,第一密文区块将被作为第二明文区块的等量初始化向量,依次延续。因此密码区块串行区块指针逻辑电路640识别密码区块串行模式加密并提供一序列微指令以更新该结构寄存器的指针,进而确保第一明文区块后的区块,以使用合适的密文区块作为其等量初始化向量。
对于密码区块串行模式解密,一个本领域技术人员了解使用一个初始化向量和一第一密文区块,以产生一第一明文区块。为了生成下一个明文区块,第一密文区块将被作为该第二密文区块的等量初始化向量,依次延续。因此该密码区块串行区块指针逻辑电路640识别密码区块串行模式解密并提供一序列微指令,当相应的明文区块产生时,暂时储存每一密文区块,并将暂时储存的密文区块写回到初始化向量指针寄存器指向的内存区,使得下一个明文区块产生时得以作为一等量初始化向量。
现在参照图7,图表举例说明了一在图6的微处理器内执行密码子运算的典型微指令700的结构。微指令700包括一个微运算码字段701,一个数据寄存器字段702和一个寄存器字段703。微运算码字段701表明了一个要被执行的特定子运算,并且表明了微处理器600执行子运算的至少一个阶段的逻辑电路。微运算码字段701的特殊值表明指定的微指令通过依据本发明的密码单元来执行。在一个实施例中,有两种特殊值。一第一值加载(XLOAD)表明要从内存位置获取数据,内存地址是由数据寄存器字段702所表示的结构寄存器的内容指定。数据将被加载到密码单元的寄存器中,而寄存器则由寄存器字段703所指定。获取到的数据(例如密码密钥数据、控制字符、输入文字数据、初始化向量)提供给密码单元。微运算码字段701的一第二值储存(XSTOR)表明由密码单元所产生的数据将要被储存到一内存位置,其地址由数据寄存器字段702所表示的结构寄存器指定。在一个多阶段密码单元的实施例中,寄存器字段703指示数组输出数据区块中的一组,用以储存在内存中。输出数据区块由密码单元在数据域位704中提供给储存逻辑电路存取。依据本发明,有关密码单元执行加载和储存微指令的更详细描述将在图8和图9中讨论。
来看图8,表800描述了根据图7的格式700,一条加载微指令的寄存器字段703的值。如前面的讨论,转译一密码指令将引起产生一个微指令序列。微指令序列包含一执行密码单元的第一组微指令和一组被该微处理器内密码单元以外的其它并行功能单元执行的第二组微指令。第二组微指令完成,诸如更新计数器、暂时寄存器、结构寄存器、测试和设置在机器特殊寄存器上的状态位等子运算。第一组指令提供密钥、密码参数、及输入数据到密码单元并指示密码单元使生成密钥目录(或加载从内存所获取的密钥目录),加载并加密(或解密)输入文字数据,及储存输出文字数据。一加载微指令为密码单元提供加载控制字符数据,加载密码密钥或密钥目录,加载初始化向量数据,加载输入文字数据,及加载输入文字数据并驱动密码单元执行指定的密码运算。在一加载微指令寄存器字段703中的数值0b010,指定密码单元加载一控制字符到自身内部控制字符寄存器中。由于这个指令是在管在线执行,寄存器阶段的结构控制字符指针寄存器乃被存取,以取得存放了控制字符在内存中的地址。寻址逻辑电路将地址转译成为实体地址,以供内存存取。加载逻辑电路从高速缓存获取控制字符,并将控制字符放置到数据域位704,此时控制字符已经传送到密码单元。同样的,寄存器字段数值0b100指示密码单元,以加载在数据域位704所提供的输入文字数据,及随后的加载、执行指定的密码运算。同控制字符一样,输入数据通过一储存在结构寄存器里的指针被存取。数值0b101表示数据域位704所提供的输入数据将被加载到内部寄存器1输入-1。加载到输入-1寄存器的数据可以是输入文字数据(当管线化时),也可以是一初始化向量。数值0b110和0b111表示密码单元分别加载一个密码密钥或是在使用者产生密钥目录中一个密钥的低位和高位。依据本发明,使用者是指完成一个指定功能或指定运算,使用者可以是一应用程序、一操作系统、一机器,或一个人。因此,在一个实施例中,使用者产生密钥目录可由应用程序建立。在一可选的实施例中,使用者产生密钥目录可由人所建立。
在一个实施例中,寄存器字段的数值0b100和0b101将一个密码单元分为两个阶段,连续的输入文字数据区块能被管线化。因此,为了使两个连续的输入数据区块进行管线化,一第一加载微指令执行给输入-1提供了一第一输入文字数据区块,随后执行一第二加载微指令给输入-0提供一第二输入文字数据区块,同时指示密码单元开始执行指定的密码运算。
如果一使用者产生密钥目录被用来执行密码运算,那么和使用者产生密钥目录的密钥数量相对应的多数加载微指令将被发送到密码单元,其用以加载在密钥目录中的每一轮密钥。
加载微指令的寄存器字段703的所有其它值予以保留。
参照图9,表900绘示根据图7的格式700一储存微指令的寄存器字段703的数值。储存微指令指示密码单元产生(即加密或解密)的输出文字数据提供给储存逻辑电路,将其储存在寻址字段702指定的内存地址。因此,根据本发明,转译逻辑电路在为其相关输入文字区块发送一条加载微指令后,为特定的输出文字区块发送一个储存微指令。寄存器字段703的数值0b100指示密码单元联合其内部输出-0输出-0寄存器将输出文字区块提供给储存逻辑电路储存。输出-0的内容和提供到输入-0的输入文字区块有关。同样,参照寄存器字段数值0b101,内部输出-1寄存器的内容和提供到输入-1的输入文字数据也是关联的。因此,加载密钥和控制字符数据之后,发送密码微指令使多个输入文字区块能通过密码单元进行管线化,这些密码微指令依序为以加载.输入-1、加载.输入-0(加载.输入-0也可以指示密码单元开始执行密码运算)、储存.输出-1、储存.输出-0、加载.输入-1、加载.输入-0(开始对下面两个输入文字区块进行运算)等等。现在来看图10,依据本发明,图表着重描述一个控制字符格式1000,控制字符指定密码运算的密码参数。控制字符1000是由使用者程序化到内存,而在执行密码运算之前,其指针由一适合微处理器的结构寄存器所提供。因此,作为密码指令相关的微指令序列的一部分,一加载微指令指示微处理器读取包含有指针的结构寄存器,将指针转换为一个实体地址,从内存(高速缓存)读取控制字符1000并将控制字符1000加载到密码单元的内部控制字符寄存器中。控制字符1000包括一个保留字段(RSVD)1001,一个密钥大小字段(KSIZE)1002,一个加密/解密字段(E/D)1003,一个中间结果字段(IRSLT)1004,一个密钥产生字段(KGEN)1005,一个算法字段(ALG)1006和一个轮计数字段(RCNT)1007。
保留字段1001的所有值都被保留。密钥大小字段1002的内容指定用来完成加密或解密的密码密钥大小。在一个实施例中,密钥大小字段或者是一128位密钥,或者是一192位密钥,或者是一256位密钥。加密/解密字段1003指定密码运算是加密运算还是解密运算。密钥产生字段1005表明内存内提供的是一使用者产生密钥目录还是一单一的密码密钥,如果是一单一密码密钥的话,微指令将和密码密钥一起发送到密码单元,使根据算法字段1006指定的密码算法,指示单元将密钥扩展为密钥目录。在一个实施例中,算法字段1006指定的算法为目前所讨论过的数据加密标准算法,三重数据加密标准算法或是进阶加密标准算法。可替代的实施例包含其它的算法,诸如Rijndael密码算法,Twofish密码算法等。轮计数字段1007的内容依据给定算法完成每一输入文字区块所给定的密码轮数。虽然以上的密码算法标准指定了每一输入文字区块的固定密码轮数,但是提供轮计数字段1007允许程序员更改该标准所指定的轮数。在一个实施例中,程序员可以对每个区块指定0到15轮。最后,中间结果字段1004的内容指定一个输入文字区块的加密/解密是否根据算法字段1006指定的密码算法标准,以轮计数字段1007所指定的轮数执行者,或者加密/解密是否根据算法字段1006指定的算法,以轮计数字段1007指定的轮数执行,而最后一轮执行结果是一个中间值而不是最终结果。一个本领域技术人员将希望在每一轮中,许多密码算法都执行相同的子运算,除了最后一轮的执行以外。因此,对中间结果字段1004编程以提供中间结果而不是最后结果,可允许程序员更改施行运算法的中间步骤。例如,可以通过在一个文字区块上执行一轮加密,然后在相同文字区块上执行两轮,然后3轮等,以获得累加的中间结果以验证算法的性能。提供可编程轮计数和中间结果的功能让使用者能够验证密码编码性能,检测故障,并探究不同密钥结构和轮计数的效用。
参照图11,方框图详细描述依据本发明的密码单元1100。密码单元1100包括一个通过微指令总线1114接收密码微指令(即加载和储存微指令)的微指令寄存器1103。密码单元1100也具有一控制字符寄存器1104、一输入-0寄存器1105、及一输入-1寄存器1106、一密钥-0寄存器1107,一密钥-1寄存器1108。数据通过一加载总线1111提供给寄存器1104-1108,如同在微指令寄存器1103里的加载微指令内容所指定。密码单元1100也包括连接到所有寄存器1103-1108和密钥随机存取内存(cryptographic key RAM)1102的区块密码逻辑电路1101。区块密码逻辑电路提供一个延迟信号1113,并将区块结果提供到一输出-0寄存器1109和一输出-1寄存器1110。输出寄存器1109-1110通过一储存总线1112发送他们的内容到一适合微处理器的相继阶段中。在一个实施例中,微指令寄存器1103为32位,而其它寄存器1104-1110则皆为128位。
在运算中,密码微指令顺序地传送给微指令寄存器1103,同时控制字符寄存器1104或输入寄存器1105-1106中的一个,或密钥寄存器1107-1108中的一个所指定数据也被发送。在参照图8和图9所讨论的实施例中,一控制字符首先通过一加载微指令加载到控制字符寄存器1104中。然后通过后续加载微指令加载密码密钥或密钥目录。如果一个128位的密码密钥被装入,一加载微指令即可提供给指定寄存器密钥-01107。如果大于128位的密码密钥被加载,那么一加载微指令除了提供给指定寄存器密钥-01107外,亦同时提供寄存器密钥-11108所指定的一加载微指令。如果使用者产生密钥目录被加载,则寄存器密钥-01107所指定的后续加载微指令将被提供。密钥目录里所加载的每个密钥依次地储存在密钥随机存取内存1102中在他们相应的密码轮中使用。继这之后,输入文字数据(如果不需要初始化向量)将被加载到输入-1寄存器1106。如果需要初始化向量,它将通过一条加载微指令被装载到输入-1寄存器1106。作用于输入-0寄存器1105的加载微指令指示密码单元,使加载输入文字数据到输入-0寄存器1105,并开始根据由控制字符寄存器1104提供的参数,使用输入-1的初始化向量或两个输入寄存器1105-1106(如果输入数据管线化)以执行寄存器输入-01105输入文字数据的密码轮。在收到输入-01105所指定的加载微指令之后,区块密码逻辑电路通过控制字符的内容,开始执行所指定的密码运算。如果一个单独的密码密钥需要被扩展,区块密码逻辑电路即在密钥目录里生成每个密钥,并且把他们储存在密钥随机存取内存1102里。无论区块密码逻辑电路1101产生密钥目录或是密钥目录从内存加载,第一轮密钥被缓存在该区块密码逻辑电路1101内,以便该第一个区块密码轮无需要访问该密钥随机存取内存1102即可执行。一旦起动,区块密码逻辑电路乃在至少一个输入文字区块继续执行规定的密码运算直到完成运算,像密码学算法所要求的那样从密钥随机存取内存1102中连续截取轮密钥。密码单元1100在指定的输入文字区块上执行一个指定的区块密码运算。连续的输入文字区块即可经由相应且连续的加载和储存微指令执行加密或解密。当一储存微指令被执行后,如果被指定的输出数据(即输出-0或输出-1)还没完全产生,此时区块密码逻辑电路乃产生延迟信号1113。当输出数据产生并被置入一相应的输出寄存器1109-1110时,寄存器1109-1110的内容即被移转至储存总线1112。
现在看图12,一方框图说明了根据本发明使用进阶加密标准执行密码运算的一个区块密码逻辑电路1200的实施例。区块密码逻辑电路1200包括通过总线1211-1214和总线1216-1218连接到一轮引擎控制器1210的轮引擎1220。轮引擎控制器1210存取一微指令寄存器1201,控制字符寄存器1202,密钥-0寄存器1203,以及密钥-1寄存器1204以存取指示密码运算的密钥数据、微指令和参数等。输入寄存器1205-1206的内容提供到轮引擎1220及轮引擎1220将相应的输出文字提供到输出寄存器1207-1208。输出寄存器1207-1208通过总线1216-1217,连接到轮引擎控制器1210,以确保轮引擎控制器能够存取每个连续密码轮的结果,其通过总线NEXTIN 1218为一下一个密码轮提供到轮引擎1220。密钥随机存取内存(未图标)的密钥,通过总线1215被存取。(ENC/DEC)加密/解密信号1211指示轮引擎使用子运算执行加密(例如S-Box)或解密(例如反转S-Box)。轮计数(RNDCON)总线1212的内容驱动轮引擎1220执行一第一进阶加密标准轮,一中间进阶加密标准轮或者最后的进阶加密标准轮。单一产生密钥(GENKEY)信号1214用来指示轮引擎1220,以根据总线1213所提供的密钥生成一密钥目录。当它的相应轮被执行时,密钥总线1213乃提供给轮引擎1220每一轮的密钥。
轮引擎1220包括连接到一第一寄存器暂存-0 1222上的第一密钥XOR逻辑电路1221。第一寄存器1222连接到S-Box逻辑电路1223,而S-Box逻辑电路1223则连接到移列逻辑电路1224上。移列逻辑电路1224连接到一第二寄存器暂存-1 1225处。第二寄存器1225则连接到混栏逻辑电路1226,混栏逻辑电路1226连接到一第三寄存器暂存-2 1227。这些在上面讨论的进阶加密标准FIPS中的第一密钥逻辑电路1221,S-Box逻辑电路1223,移列逻辑电路1224及混栏逻辑电路1226在输入文字数据上执行像他们名称一样的子运算。混栏逻辑电路1226在中间轮期间需要通过密钥总线1213,使用轮密钥在输入数据上执行进阶加密标准XOR功能。第一密钥逻辑电路1221,S-Box逻辑电路1223,移列逻辑电路1224,及混栏逻辑电路1226也用来在解密期间通过加密/解密状态1211,用以执行他们相应的反向进阶加密标准子运算。一位本领域技术人员了解根据由控制字符寄存器1202的内容指定的特殊区块加密模式,使中间轮数据被回授到轮引擎1220。初始化向量数据(如果需要)系通过总线NEXTIN 1218提供给轮引擎1220。
在图12所示的实施例中,轮引擎被分为两个阶段暂存-0 1222与暂存-1 1225之间第一阶段,而暂存-1 1225与暂存-2 1227则第二阶段。中间轮数据与频率信号(未图标)同步在阶段间管线化传送。当密码运算在一输入数据区块上完成时,相关输出数据即被存放到相应的输出寄存器1207-1208。一微指令储存的执行使得一指定输出寄存器1207-1208的内容被提供至一储存总线(未图标)。
现在看图13,一流程图描述了根据本发明在一次中断事件期间保护密码参数状态的方法。根据本发明,当一微处理器执行指令流时,流程在区块1302处开始执行。指令流程并不是一定要包括一个此处所描述的密码指令。随后,流程处理判断区块1304。
在判断区块1304时,做出评估以确定是否一次中断事件(例如,可屏蔽中断,不可屏蔽中断,错页,任务切换,等等)发生要求在改变当前的指令流(″中断处理器″)去处理该中断事件。如果是,流程即执行区块1306。如果不是,流程在判断区块1034循环,在此指令会继续执行直到一次中断事件发生。
根据本发明,在区块1306时,因为有一中断事件发生,在将程控交给相应的中断处理器之前,中断逻辑电路指引清掉标志寄存器内的X位。清除X位确保,当从中断处理器返回时,如果一区块密码运算在进行,表明至少一个中断事件发生,并且在由输入指针寄存器内容所指向的输入数据区块的区块密码运算继续之前,控制字符数据和密钥数据一定要重新加载。随后流程进入到区块1308。
在区块1308,根据本发明,给所有包含与执行区块密码运算有关的指针和计数器的结构寄存器储存到内存。本领域技术人员了解在转交程控到中断处理器之前,储存结构寄存器是在当前数据计算装置完成的行为。从而,本发明利用当前数据结构的目的在整个中断事件期间提供执行的透明化。当寄存器被储存后,流程即进行到区块1310。
在区块1310,程序流移转到中断处理器。随后流程即进行到区块1312。
在区块1312,完成方法。本领域技术人员了解,图13的方法从中断处理器返回后,再次从区块1302开始。
现在参考图14,流程图描绘了依据本发明在至少一次中断事件发生的情况下,在数个输入数据区块上执行一指定密码区块串行模式密码运算的方法。
流程在区块1402开始,根据本发明,在此一密码指令指引密码运算,让密码运算使用密码区块串行模式开始执行。密码的执行可以是一第一执行,也可以是自一第一执行之后,由一中断事件执行中断的结果,程控在一中断处理器已执行后,传回到密码指令处。流程随后进行到区块1404。
在区块1404,依据本发明,内存内经由一输入指针寄存器的内容所指向的一数据区块,从内存加载并启动一指定的密码运算。特定的输入指针寄存器是由指定的特殊密码运算(例如,加密或解密)和指定的区块密码模式(例如ECB、密码区块串行、CFB、或OFB)所决定者。例如,如果一加密运算使用OFB模式,那么用来加载数据的输入指针寄存器即系指向内存中一初始化向量的寄存器。如果一解密运算使用ECB模式,那么用来加载数据的输入指针寄存器即指向内存中下一密码区块的寄存器。如果指定一密码区块串行模式加密运算,指向下一明文区块的寄存器将被用作输入指针寄存器,而由初始化向量指针寄存器指向的数据区块,又被用来生成相应的密文区块。如果指定一密码区块串行模式解密运算,指向下一密文区块的寄存器将被用作输入指针寄存器,而由初始化向量指针寄存器指向的数据区块又被用来生成相应的明文区块。流程随后进行到判断区块1406。
在判断区块1406,一评估被用来决定是否在一标志寄存器中设置X位。如果X位被设置,即表明目前依据本发明加载到一密码单元的控制字符和密钥目录是有效的。如果清除X位,即表明目前加载到密码单元的控制字符和密钥目录无效的。如上述间接提到的那样,参照图13,当一次中断事件发生时,X位即被清掉。另外,如上提到的那样,当需要加载一新控制字符或密钥目录或两个都必须加载时,在发送密码指令之前即必须清掉X位。在一使用x86标志(EFLAGS)寄存器的第30位的x86兼容实施例中,通过执行一随后有一个POPFD指令的PUSHFD指令清掉X位。不过本领域技术人员了解,在其它可置换实施例中其它指令必须被用来清掉X位。如果X位被设置,流程将进行到区块1412。如果该X位被清掉,流程即进行到区块1408。
在区块1408,由于一被清除的X位已经表明一中断事件已经发生,或者一个新控制字符和/或密钥数据将被加载,因此一个控制字符乃从内存处加载。在一个实施例中,加载控制字符阻止密码单元执行如上述区块1404所述的指定密码运算。在这个典型的实施例中,在区块1404里启动一密码运算,允许通过假定利用目前加载的控制字符和密钥数据对多区块密码运算进行最佳化。因此,当前输入数据区块乃被加载,而且密码运算在检查判断区块1406中X位的状况之前就已经开始。流程接下来即进行到区块1410。
在区块1410,密钥数据(即一密钥或一完整的密钥目录)从内存被加载,另外,依据新加载的控制字符及密钥目录,在区块1404所提到的输入区块及初始化向量(或等效初始化向量)被再次地加载并启动密码运算。流程接下来即进行到区块1412。
在区块1412,一评估被用来决定是否指定了一密码区块串行加密运算或密码区块串行解密运算。如果指定为加密,流程即进行到区块1420,如果指定为解密,流程即进行到区块1414。
在区块1420,一相对应于该被加载输入区块(明文)的输出区块(密文)被产生。流程随后进行到区块1422。
在区块1414,在区块1404或区块1410中加载的输入数据区块(当前密文区块)被储存到一内部寄存器TEMP。流程然后进行到区块1416。
在区块1416,一相对应于被加载输入区块(密文)的输出区块(明文)被产生。流程随后处理区块1418。
在区块1418,内部寄存器TEMP(当前的密文区块)的内容被写给初始化向量指针寄存器内容所指向的内存位置,以便一后续密文区块的解密,并将使用密文的当前区块作为一等量的初始化向量。流程然后进行到区块1422。
区块1414、1416及1418内所描述的步骤被要求保证在一个状态,其允许使用密码区块串行模式所执行的一密码指令随时被打断。例如,在一实施例中,一错页在一密码指令的执行期间可在任一点发生。
在区块1422,产生的输出区块被储存到内存。流程然后进行到区块1424。
在区块1424,输入和输出区块指针寄存器的内容被修改成指向下一个输入和输出数据区块。另外,区块计数寄存器的内容被修改成表明在当前输入数据区块上密码运算的完成。在图14所讨论的实施例中,区块计数寄存器是递减的。不过本领域技术人员了解,可置换实施例使用区块计数寄存器内容的运算和测试,以容许输入文字区块管线化执行。流程随后进行判断区块1426。
在判断区块1426,一评估被用以决定是否一个输入数据区块待被执行。在这里描述的实施例中,为说明性的目的,区块计数器用以决定它是否等于零。如果没有区块待被执行,流程即进行到区块1430。如果一区块待被执行,流程乃开始进行区块1428。
在区块1428,当经由输入指针寄存器的内容指向时,输入数据的下一区乃被加载。流程然后处理区块1412。
在区块1430,完成方法。
本领域技术人员希望区块1416、1418、1420、1422及1424所讨论的步骤能沿着他们的特殊流动路径,以不同的次序发生或者他们能并行发生。
虽然已详细描述本发明和它的目标、特征和优势,但是其它实施例也应被本发明所涵盖。例如,本发明对与x86体系兼容的实施例已经进行了详细讨论。但是,这样的讨论方式,是因为x86体系被广泛地理解,因此提供一充足的手段以学习本发明。本发明仍然包括诸如PowerPC、MIPS及其类似者的其它指令集架构以及其它完全是新的指令集架构相适应的实施例。
本发明尚包含在一计算系统组件中而非在该微处理器本身中密码运算的执行。例如,依据本发明密码指令能容易地在一密码单元实施例中使用,那并非像微处理器内的集成电路那样必须作为计算机系统一部分使用。预期本发明的实施例将被集成到一微处理器周围的一个芯片组(例如,北桥、南桥)或者作为执行密码运算的专用处理器,在此密码指令从一个主微处理器交给处理器。预计本发明将应用于嵌入式控制器、工业控制器、信号处理器、阵列处理机和用于处理数据的其它设备中。本发明也包括在这里所描述执行密码运算所必须的组件组成的实施例。这样的一个设备作为在一个通信系统内的一加密/解密处理器,的确将提供一低成本、低功率的选择以执行密码运算。为明确起见,本发明提及的这些可选择处理组件是上面所述的处理器。
另外,尽管本发明是以128位区块加以描述,但是只需改变输入数据、输出数据、密钥和控制字符寄存器的大小就可以实现不同的区块大小。
而且,虽然数据加密标准、三重数据加密标准、和进阶数据加密标准在本发明中有详细的描述,本发明指出也包括较少人熟知的区块密码算法,诸如MARS密码算法、Rijndael密码算法、Twofish密码算法、Blowfish密码算法、Serpent密码算法和RC6密码算法。本发明提供指定的区块密码装置并且在一个微处理器内支持一套实现的方法,在微区块密码运算可以通过一条单独指令的执行被引动。
此外,虽然本发明按照区块密码算法,以及对执行区块密码功能的相关技术进行了描述,值得注意本发明完全包括除了区块密码以外的其它密码形式。提供一条单独指令,凭使用者能指示一兼容的微处理器进行一密码运算诸如加密或者解密,在此微处理器包括一个指定的密码单元,指定的密码单元通过指令电路完成被指定的密码功能。
而且,这里关于轮引擎的讨论提供一个2阶段的装置,这样两输入数据区块就可以管线化执行。发明人指出其它的实施例可能多于2个阶段。预期更多输入数据区块的管线阶段划分乃与一相称微处理器内的其它阶段是一致的。
最后,虽然本发明作为一支持数区块密码算法的单独密码单元已加以讨论,本发明也包括提供和在一兼容微处理器中的其它执行单元并行连接的数个密码单元,在此,这些密码单元中的每一个用以执行一特定的区块密码算法。例如,一第一单元配置成进阶加密标准,一第二单元则配置成数据加密标准等等。
本领域技术人员应了解易使用揭示明确的概念和实施例,以作为完成本发明的目的基础设计或者修改其它结构,而依此所进行的各种改变、替代和变化均未脱离本发明所界定的精神及范围。
权利要求
1.一种用以执行密码运算的装置,包含一密码指令电路,其产生由一计算设备所接收的一密码指令,该密码指令作为在该计算设备上执行的指令流的一部分,该密码指令指定所述密码运算之一且其中指定的该密码运算包含在一相对应多个输入文字区块上执行多个区块密码串行区块密码运算;一区块密码串行区块指针逻辑电路,其连接到该密码指令电路,用以驱动该计算设备,以更新多个指针寄存器和每一个所述区块密码串行区块密码运算的多个中间结果;以及一执行逻辑电路,其被连接到该区块密码串行区块指针逻辑电路,用以执行指定的该密码运算。
2.根据权利要求1所述的装置,其中指定的该密码运算进一步包含下列运算的至少一个一区块密码串行模式加密运算,其运算包含加密多个明文区块,以产生相对应的多个密文区块;以及一区块密码串行模式解密运算,其运算包含解密多个密文区块,以产生相对应的多个明文区块。
3.根据权利要求1所述的装置,该密码指令指定用以执行指定的该密码运算的一密码区块串行模式。
4.根据权利要求1所述的装置,进一步包含一位储存器,其储存一位并连接到该执行逻辑电路,该位用以表明指定的该密码运算是否已被一中断事件打断。
5.根据权利要求4所述的装置,其中该位寄存器位于一标志寄存器中。
6.根据权利要求4所述的装置,其中该中断事件包含转移程控到一处理该中断事件的程序流,且其中在当前输入文字区块的该密码运算的执行被中断。
7.根据权利要求6所述的装置,其中当从程控返回该密码指令时,指定的该密码运算是在该当前输入文字区块中被执行的。
8.根据权利要求1所述的装置,其中在每一个相对应所述输入文字区块上的每一个所述密码区块串行区块密码运算完成时,指定的该密码区块串行区块指针逻辑电路指引该计算设备,来修改该指针寄存器,以指向下一个输入和输出文字区块,并将当前的输出文字区块储存到经由一初始化向量寄存器的内容所指向的内存位置处。
9.根据权利要求1所述的装置,其中该密码指令涉及到在该计算设备中的多个寄存器。
10.根据权利要求9所述的装置,其中所述寄存器包含选自下列之一一第一寄存器,其中该第一寄存器的内容包含一指向第一内存地址的第一指针,该第一内存地址指定了在内存中的一第一位置,在指定的该密码运算将被完成时存取所述输入文字区块;一第二寄存器,其中该第二寄存器的内容包含指向一第二内存地址的一第二指针,该第二内存地址指定在该内存中的第二位置以保存相对应的多个输出文字区块,该相对应的多个输出文字区块在多个输入文字区块上完成指定的该密码运算所产生的结果;一第三寄存器,其中该第三寄存器的内容表明在多个输入文字区块内多个文字区块;一第四寄存器,其中该第四寄存器的内容包含指向一第三内存地址的一第三指针,该第三内存地址指定一在内存中的第三位置,以供用来完成指定的该密码运算所使用的密码密钥数据的存取;一第五寄存器,其中该第五寄存器的内容包含一指向一第四内存地址的第四指针,该第四内存地址指定一在内存中的第四位置,以供用来完成指定的该密码运算所使用的一初始化向量的存取;以及一第六寄存器,其中该第六寄存器的内容包含指向一第五内存地址的一第五指针,该第五内存地址指定一在内存中的第五位置,以供用来完成指定的该密码运算所使用的控制字符的存取,其中该控制字符为指定的该密码运算的多个密码参数。
11.根据权利要求1所述的装置,其中该执行逻辑电路包含一个密码单元,其在每一所述输入文字区块上执行多个密码轮,以在每一所述输出文字区块产生相对应的一输出文字区块,所述密码轮由与该密码单元相作用的一控制字符所指定。
12.一种用以执行密码运算的装置,包含一在一设备内的密码单元,用以在指定的该密码运算的指令流内执行响应到接收一密码指令的所述密码运算之一,其中指定的该密码运算包含在一相对应多个输入文字区块上执行多个密码区块串行区块密码运算;以及密码区块串行区块指针逻辑电路,其连接到该密码单元,用以指引该装置,以更新指针寄存器和每一所述密码区块串行区块密码运算的中间结果。
13.根据权利要求12所述的装置,其中一中断事件使得一程控转移到一处理该中断事件的程序流,且其中断在当前输入文字区块之中指定的该密码运算的执行。
14.根据权利要求13所述的装置,其中当从程控返回到该密码指令时,指定的该密码运算即在该当前输入文字区块上执行。
15.根据权利要求12所述的装置,其中在每一相对应的多个输入文字区块上的每一所述密码区块串行区块密码运算完成时,指定的该密码区块串行区块指针逻辑电路指引该计算设备,来修改该指针寄存器,以指向下一个输入和输出文字区块,并储存一当前输出文字区块到一经由一初始化向量寄存器所指向的内存位置。
16.一种在一设备中执行密码运算的方法,该方法包含执行所述密码运算之一,以响应至接收一密码指令,其中该密码指令指示指定的该密码运算,该执行包括在一相对应的多个输入文字区块上执行多个密码区块串行模式区块运算;以及把一当前输入文字区块写到一初始化向量位置处,以便在下一所述输入文字区块上,使得下一所述密码区块串行模式区块运算之一使用该当前输入文字区块,作为一个初始化向量的等效物。
17.根据权利要求16所述的方法,还包含转移程控到一程序流,用以处理一中断事件;以及中断在该当前输入文字区块上指定的该密码运算的执行。
18.根据权利要求17所述的方法,还包含在从程控返回到该转移后的密码指令时,在该当前输入文字区块上进行该执行。
19.根据权利要求16所述的方法,其中该接收包含指定一密码区块串行模式解密运算,以作为指定的该密码运算。
20.根据权利要求16所述的方法,其中该接收包含在该密码指令内指定一种用以完成指定的该密码运算的密码区块串行模式。
全文摘要
本发明涉及一种在一处理器内的多个输入数据区块中执行密码运算的装置及方法。该装置包括一密码指令电路、密码区块串行区块指针逻辑电路、和执行逻辑电路。密码指令电路所产生的密码指令通过一计算设备接收,以作为在计算设备上执行指令流的一部分,且密码指令指定一种密码运算,包括在一相对应输入文字区块上执行多个密码区块串行区块密码运算。密码区块串行区块指针逻辑电路连接到密码指令电路,且指引计算设备不断更新指针寄存器和每个密码区块串行区块密码运算的中间结果。执行逻辑电路连接到密码区块串行区块指针逻辑电路,且执行一指定的密码运算。
文档编号H04L9/00GK1649296SQ200510052690
公开日2005年8月3日 申请日期2005年3月3日 优先权日2004年4月16日
发明者G·葛连·亨利, 汤姆斯·A·克雷斯平, 泰瑞·派克斯 申请人:威盛电子股份有限公司