用于计算系统中的软件指针认证的硬件支持的制作方法

未命名 08-05 阅读:71 评论:0

用于计算系统中的软件指针认证的硬件支持


背景技术:

1.本发明一般地涉及信息处理和数据处理系统、处理器和存储器系统,并且更具体地涉及例如在运行软件应用时向信息处理系统、处理器和存储器子系统提供增强的安全性。
2.随着近来信息技术的进步和广泛使用互联网来存储和处理信息,对计算系统获取、处理、存储和传播信息提出了越来越多的需求。正在开发计算系统以增加计算机能够执行日益复杂的应用以用于商业、个人使用和娱乐的速度。总体计算机系统性能受计算机结构的每个关键元素影响,包括处理器的性能/结构、任何存储器高速缓存、输入/输出(i/o)子系统、存储器控制功能的效率、存储器设备和系统以及任何相关联的存储器接口元件的性能、以及存储器互连接口的类型和结构。
3.现代计算机系统通常包含若干集成电路(ic),包括可以用于处理计算机系统中的信息的处理器。由处理器处理的信息可以包括由处理器执行的计算机指令以及由处理器使用计算机指令操纵的数据。计算机指令和数据通常存储在计算机系统中的主存储器中。
4.防止未经授权的用户和/或恶意软件访问信息处理和数据处理系统变得越来越重要并且难以实现。在一种情况下,用户或软件应用可以被授权访问信息处理系统、处理器、寄存器文件和/或存储器子系统,但可以不是被授权具有对完整系统、所有寄存器文件或所有存储器子系统的完整访问。因此,虽然用户或软件应用被授权访问系统的部分,但是用户和/或软件应用未被授权访问整个系统、所有寄存器文件和/或所有存储器子系统。在其他情况下,用户和/或软件应用未被授权访问计算系统的任何部分、寄存器文件、和/或存储器子系统的任何部分。保护系统、寄存器文件和/或存储器子系统不被未授权用户和/或软件应用访问可能是困难的。
5.应用软件在调用函数时将代码指针(如函数返回地址)或数据(如局部变量值或指针变量)存储在栈中。恶意用户可利用代码漏洞(如缓冲器溢出、无边界检查的阵列访问、自由后使用和其他技术)来攻击和重写栈的内容,使得在从函数返回时,使用软件应用未预期的代码指针或数据值。这可导致劫持程序的控制流,因为返回地址不再是预期的返回目标。这有时被称为面向返回编程(rop)攻击。这些技术还可以用于操纵软件,以便在不影响控制流的情况下访问软件程序不旨在访问的数据值及揭示秘密信息。这种类型的攻击有时被称为面向数据编程(dop)攻击。如果可以克服这样的攻击和它们的技术以提供更安全的信息处理系统、处理器、存储器子系统和在这样的系统、设备和子系统上运行的软件应用,这将是有益的。


技术实现要素:

6.给出本公开的发明内容以帮助理解计算机系统、计算机体系结构、处理器、其操作方法、以及软件应用的执行,包括为这样的系统、处理器、以及在这样的系统和/或设备上运行的软件应用提供更安全的操作方法的技术,并且不旨在限制本公开内容或本发明。本公开内容针对本领域普通技术人员。应理解,本公开的各个方面和特征可有利地在一些情况
下单独地使用,或在其他情况下与本公开的其他方面和特征组合使用。因而,可以对计算机系统、体系结构、处理器、寄存器文件、它们的操作方法和执行软件应用的方式做出变型和修改以实现不同的效果。
7.本公开的各方面在一个或多个实施例中提供了一种在处理器中处理数据的系统、方法、和/或计算机程序产品,其包括:响应于在运行软件程序时遇到函数调用指令,使用三个散列输入参数的散列来计算进入散列值,其中输入参数之一是存储在专用寄存器中的密钥;以及将所述进入散列值存储在第一存储器位置中。在一个方面中,第一存储器位置位于距第一通用寄存器中的栈指针的第一偏移处。实施例中的系统、方法和/或计算机程序产品还包括:将链接寄存器提供的值复制到第二通用寄存器条目中;以及将来自第二通用寄存器条目的值存储到第二存储器位置。第二存储器位置优选地位于距第一通用寄存器条目中的栈指针的第二偏移处。用于计算进入散列的三个散列参数输入可选地包括第一散列输入参数、第二散列输入参数和第三散列输入参数,第一散列输入参数是第一通用寄存器条目中的值、第二散列输入参数是第二通用寄存器条目中的值,第三散列输入参数是密钥。在一个方面中,存储密钥的专用寄存器仅在高于计算进入散列值的特权级别的特权级别中可访问。
8.在一个方面中,所述方法、系统和/或计算机程序产品进一步包括:响应于在运行软件应用时遇到函数退出指令,使用在计算进入散列值时所使用的相同的三个输入参数和相同的散列来计算退出散列值;以及确定进入散列值是否与退出散列值相同。在一个或多个实施例中,所述方法、系统和/或计算机程序产品进一步包括:响应于进入散列值等于退出散列值,执行函数返回,其中处理器退出函数;以及响应于进入散列值不等于退出散列值,执行陷阱中断。陷阱中断优选地将控制转移到操作系统。在进一步的方面中,响应于遇到函数退出指令:将进入散列值从第二存储器位置加载到第三通用寄存器中;将所述值从第一存储器位置加载到第二通用寄存器中;以及将所述值从第二通用寄存器移动到链接寄存器。
9.公开了一种用于执行软件应用中的指令的系统,包括:处理器,所述处理器具有用于执行所述指令的电路和逻辑,所述处理器包括:解码单元,所述解码单元包括用于解码所述指令的电路和逻辑;发布单元,所述发布单元包括用于接收经解码的指令并发布经解码的指令的电路和逻辑,和执行单元,所述执行单元包括用于执行由所述发布单元发布的经解码的指令的电路和逻辑,所述执行单元与专用寄存器相关联;以及非临时性计算机可读介质,所述非临时性计算机可读介质具有用其体现的程序指令,所述程序指令可由所述处理器执行以使所述处理器:响应于遇到函数进入指令,使用三个散列输入参数的散列来计算进入散列值,其中所述输入参数中的一个输入参数是存储在专用寄存器中的密钥;响应于遇到函数退出指令,使用在计算所述进入散列值时所使用的相同的三个输入参数和相同的散列来计算退出散列值;以及确定所述进入散列值是否与所述退出散列值相同。
10.公开了一种用于在处理器中处理数据的方法和/或系统,包括:响应于遇到函数调用指令,使用一个或多个散列输入参数的散列来计算进入散列值,其中所述输入参数中的一个输入参数是存储在专用寄存器中的密钥;响应于遇到函数返回指令,使用在计算所述进入散列值时所使用的相同的一个或多个输入参数和相同的散列来计算退出散列值;确定所述进入散列值与所述退出散列值是否相同;以及响应于所述进入散列值不等于所述退出
散列值,将控制转移到操作系统并且不执行所述返回函数指令。
11.根据如在附图中展示的本发明的示范性实施例的以下更具体的描述,本发明的前述和其他目的、特征以及优点将是明晰的,其中相同的附图标记一般表示本发明的示范性实施例的相同部分。
附图说明
12.当结合所提供的附图进行阅读时,将更好地理解信息处理系统、计算机系统、计算机体系结构、处理器、寄存器文件、其操作方法、和执行软件应用的方式的不同方面、特征和实施例。出于说明计算机系统、计算机体系结构、处理器、寄存器文件及其操作方法(包括它们执行软件应用的方式)的方面、特征和/或各种实施例的目的,在图中提供了实施例,但权利要求不应限于所示的精确布置、结构、组件、子组件、功能单元、机构、特征、方面、实施例、设备、方法、过程或技术,并且所示的布置、结构、组件、子组件、功能单元、机构、特征、方面、实施例、设备、方法、过程和技术可以单独地使用或者与其他布置、结构、组件、子组件、功能单元、机构、特征、方面、实施例、设备、方法、过程和/或技术组合地使用。
13.图1描绘了根据本公开的实施例的一般计算或数据处理系统。
14.图2描绘了根据本公开的实施例的处理器和存储器子系统。
15.图3描绘了根据本公开的实施例的处理器的框图。
16.图4描绘了根据实施例的当在处理器上运行软件程序/应用时在函数进入时计算散列的方法的流程图。
17.图5描绘了根据实施例的当在处理器上运行软件程序/应用时在函数退出时检查散列的方法的流程图。描绘了根据本公开的实施例的用于在函数退出时或之前插入到软件程序中以检查散列的代码的图示说明。
18.图6描绘了根据本公开的实施例的用于在函数进入时插入软件程序中以计算散列的代码的图示说明。
19.图7描绘了根据本公开的实施例的用于在函数退出时或之前插入到软件程序中以检查散列的代码的图示说明。
具体实施方式
20.进行以下描述以示出本发明的一般原理并且不旨在限制在此要求的发明性概念。在以下详细描述中,阐述了许多细节以便提供对信息处理系统、计算机系统、计算机体系结构、处理器、存储器、功能单元、寄存器文件、存储器子系统及其操作方法(包括它们执行软件应用的方式)的理解,然而,本领域技术人员将理解,计算机系统、计算机体系结构、处理器、功能单元、寄存器文件、存储器子系统及其操作方法(包括它们执行软件应用的方式)的不同和许多实施例可在没有这些具体细节的情况下实践,并且权利要求和发明不应被限制为本文中具体描述和示出的实施方式、组件、子组件、结构、布置、机构、功能单元、特征、方面、过程、方法、技术或细节。进一步地,本文描述的特定特征、功能单元、机构、结构、布置、实施例、方面和技术可与其他描述的特征、功能单元、机构、结构、布置、实施例、方面和技术在各种可能的组合和置换中的每一者中组合使用。
21.除非在此另外明确定义,所有术语将被给予其最广泛的可能解释,包括从说明书
中暗示的含义,连同本领域技术人员所理解的和/或如在字典、论文等中定义的含义。还必须注意的是,如在说明书和所附权利要求中使用的,除非另外指明,单数形式“一个”、“一种”和“该”包括复数指示物,并且当使用时,术语“包括”和/或“包含”指定所陈述特征、整体、步骤、操作、元件和/或部件的存在,但不排除一个或多个其他特征、整体、步骤、操作、元件、部件和/或其组合的存在或添加。
22.以下讨论省略或仅简要描述信息处理系统的常规特征,包括处理器(例如,微处理器)、存储器子系统和系统架构,以及它们的操作方法(包括它们执行软件应用的方式),这对于本领域技术人员来说是明晰的。假定本领域技术人员熟悉计算机系统的一般架构、存储器子系统、处理器、寄存器文件以及它们的操作方法(包括它们执行软件应用的方式)。可以注意到,编号的元件是根据其中引入该元件的附图编号的,并且贯穿随后的附图典型地但不必定由该数字指代。
23.适合用于本公开的计算或数据处理系统100可以采取多种形式,其中之一在图1中示出,其中计算或数据处理(信息处理)系统100被配置为用于存储和/或执行程序代码(例如,软件应用)。在一个实施例中,信息处理系统100可以包括至少一个处理器102,其可以是控制器或者可以是控制器的一部分,通过系统总线106直接地或间接地耦合到存储器设备和输入/输出设备,如图1所示。图1中的计算系统100被示出为具有处理器102(也称为中央处理单元(cpu)或微处理器)、随机存取存储器(ram)103、非易失性存储器104、设备特定电路101和i/o接口105。替换地或附加地,ram 103和/或非易失性存储器104可以被包含在处理器102中,设备特定电路101和i/o接口105也可以包含在处理器102中。处理器102可包括例如现成微处理器、定制处理器、现场可编程门阵列(fpga)、专用集成电路(asic)、分立逻辑等,或一般地用于执行数字指令的任何设备。ram 103通常用于保持可变数据、栈数据、可执行指令等。
24.根据各种方案,非易失性存储器104可以包括任何类型的非易失性存储器,诸如但不限于电可擦除可编程只读存储器(eeprom)、闪存可编程只读存储器(prom)、电池备份ram、硬盘驱动器等。非易失性存储器104典型地用于保持可执行固件和任何非易失性数据,诸如可以被执行以使处理器102执行某些功能的编程指令和应用。
25.在一些实施例中,i/o接口105可以包括通信接口,该通信接口允许处理器102与控制器外部的设备进行通信。通信接口的示例可以包括但不限于串行接口(诸如rs-232、usb(通用串行总线)、小型计算机系统接口(scsi)、rs-422)或无线通信接口(诸如wi-fi、蓝牙、近场通信(nfc)或其他无线接口)。计算系统100可以经由通信接口105以任何通信协议(诸如像自动化驱动接口(adi))与外部设备通信。
26.图2描绘了可以实施本公开的示例性处理系统180,该处理系统可以是较大的计算机系统结构或网络的一部分。处理系统180包括控制处理器系统或处理器102,其是包括至少一个处理器单元(cpu)125的处理子系统,该处理器单元(cpu)125可以被配置为与存储器控制单元(mcu)140对接。cpu 125(也称为微处理器)可为处理来自系统控制器(未描绘)的读取、写入及配置请求的模块。cpu 125可以是多核处理器。mcu 140可包括存储器控制器同步(mcs)142,也称为存储器控制器,控制与存储器子系统103中的一个或多个存储器设备(例如,dram(图2中未示出))的通信。mcu 140和mcs142可包括一个或多个处理电路,或者处理可由处理器125执行或结合处理器125执行。控制处理器系统102通过通信总线106与存储
器子系统103进行通信。
27.图3描绘了根据可以实现本公开的实施例的处理器102的框图。处理器102可以是被配置为执行一个或多个指令或线程流的流水线处理器。线程(也称为指令流)包括一起执行特定任务的指令序列或集合。线程可为来自在处理器上执行的同一程序的不同部分的指令流,或可来自在处理器上执行的不同程序,或其组合。在一个实施例中,处理器可以是多线程处理器,并且可以同时处理多个线程。
28.根据一个实施例,处理器102可以包括存储器202、指令高速缓存204、指令获取单元206、分支预测器208、处理流水线210和目的地资源220。处理器102可包含在计算机处理器内或以其他方式分布在计算机系统内。指令和数据可以存储在存储器202中,并且指令高速缓存204可以访问存储器202中的指令,并且将要获取的指令(例如不同线程的指令)存储在高速缓存存储器204中。存储器202可包括任何类型的易失性或非易失性存储器,诸如例如高速缓存存储器。存储器202和指令高速缓存204可包括多个高速缓存级。数据高速缓存(未示出)也可以包括在处理器102中。处理器102优选地允许多个线程优选地以并行方式共享处理器102的功能单元(例如,指令获取和解码单元、高速缓存、分支预测单元和执行单元)。
29.在图3中,描绘了指令获取单元206和处理流水线210的简化示例。在各种实施例中,处理器102可包括一个或多个处理流水线210和指令获取单元206。在实施例中,处理流水线210包括解码单元20、发布单元22、执行单元24、回写逻辑26、逻辑寄存器映射器28、历史缓冲器(例如,保存和恢复缓冲器(srb)30)以及物理寄存器文件32。指令获取单元206和/或分支预测器208也可以是处理流水线210的一部分。处理流水线210还可包括其他特征,诸如错误检查和处理逻辑、通过处理流水线210的一个或多个并行路径、以及本领域现在或之后已知的其他特征。流水线也可被分解并被不同地示出。虽然在图3中示出了通过处理器102的前向路径,但是在处理器102的元件之间可以包括其他反馈和信令路径。处理器102可包含其他电路、功能单元和组件。
30.指令获取单元206从指令高速缓存204中获取指令以供解码单元20进一步处理。解码单元20解码指令并且将经解码的指令、指令的部分或其他经解码的数据传递给发布单元22。解码单元20还可检测未由分支预测器208预测的分支指令。发布单元22分析指令或其他数据并且基于该分析将经解码的指令、指令的部分或其他数据传输至流水线210中的执行单元24。执行单元24执行由向执行单元24发出的指令指定的操作。执行单元24可包括多个执行单元,诸如例如定点执行单元、浮点执行单元、加载/存储执行单元、向量标量执行单元和/或其他执行单元。物理寄存器文件32保持执行单元24的数据。逻辑寄存器映射器28包含提供逻辑寄存器条目(lreg)和物理寄存器文件32中的条目之间的映射的条目。当指令想要读取逻辑寄存器条目(lreg)时,逻辑寄存器映射器28通知发布单元22,发布单元22通知执行单元24可在何处定位物理寄存器文件32中的数据。
31.当检测到错误预测的分支指令或其他异常时,丢弃在错误预测的分支或异常之后的指令和数据,例如从处理器110的各种单元中刷新(flush)。历史缓冲器(例如,保存和恢复缓冲器(srb)30)包含推测寄存器状态和架构寄存器状态,并且当调度新指令时备份逻辑寄存器文件数据。就此而言,当新指令从逻辑寄存器映射器28逐出数据时,历史缓冲器30存储来自逻辑寄存器映射器28的信息,以防新指令被刷新并且旧数据需要被恢复。历史缓冲
器(srb)30保持所存储的信息,直到新指令完成。历史缓冲器(srb)30与逻辑寄存器映射器28对接,以便将逻辑寄存器条目的内容从历史缓冲器(srb)30恢复到逻辑寄存器映射器28,更新逻辑寄存器映射器28中的指针,因此指令知道在何处获得正确数据,例如,处理器返回到可中断指令,例如分支指令,被错误预测之前存在的状态。
32.回写逻辑26将执行的指令的结果写回到目的地资源或目标220。目的地资源220可以是任何类型的资源,包括寄存器、高速缓存存储器、其他存储器、用于与其他设备通信的i/o电路、其他处理电路、或用于执行的指令或数据的任何其他类型的目的地。处理器流水线单元中的一者或多者还可将关于条件分支指令的执行的信息提供到分支预测器208。
33.可以在逻辑流水线级的序列中在处理器102中处理指令。然而,应理解,这些级的功能可合并在一起,使得级的此特定划分不应被视为限制,除非在本文的权利要求中清楚地表明了此种限制。实际上,为了简化理解,在图3中一些级表示为单个逻辑单元,并且在下面提供相关的进一步细节。
34.在一些方面中,处理器102可以具有多个执行/处理切片,每个切片具有图3中所示的单元中的一者或多者。例如,每个处理切片可具有其自身的具有功能/执行单元24的处理流水线210。具有多个处理切片的处理器102可能能够同时执行多个指令,例如,在一个处理周期中同时在每个处理切片中执行一个指令。具有多个处理切片的此种处理器可称为多切片处理器或并行切片处理器。在多个切片中的同时处理可以大大提高处理速度。在单线程(st)模式中处理单个线程,在smt模式中处理多个线程,例如,在一个或多个实施例中,同时处理两个线程(smt2)或四个线程(smt4)。
35.信息处理和数据处理系统、计算机系统、处理器和/或数字逻辑系统易于受到攻击,例如,通过面向返回编程(rop)攻击,这可能导致对程序流的劫持控制。提供针对此类攻击提供更好的安全性的系统和技术是有利和有益的。在一个或多个实施例中,更安全的信息处理系统、处理器和技术包括在函数调用时计算和存储密码签名,以及在函数返回(函数退出)时验证密码签名,并且在实施例中,在退出函数之前验证密码签名并参考栈指针以控制程序流或数据访问。在一个或多个实施例中,密码签名是三个参数的散列h(x,y,z),其中优选地这些参数之一是密钥。在实施例中,用在单独位置中提供的密钥计算的栈指针的加密签名被利用。在实施例中,密钥仅在管理者模式下可访问,并且在一个方面中在高于计算散列的特权级别的特权级别中存储在专用寄存器(spr)中。在实施例中,由用于计算签名的散列函数的加密强度并且由用作计算散列的参数之一的密钥提供增强的安全性(例如,更安全的签名)。
36.在一个或多个实施例中,引入新的处理器指令以计算三个参数的密码散列,其中,第一参数(值)由第一寄存器、优选地通用寄存器(gpr)提供;第二参数(值)由第二寄存器、优选地通用寄存器(gpr)提供;并且第三参数由第三寄存器、优选地专用寄存器(spr)提供。在一个或多个实施例中,第三参数优选地是在专用寄存器(spr)中设置的密钥。散列可以由rt<=h(ra,rb,<secret key>)表示。在一个或多个实施例中,存储密钥的专用寄存器(spr)在计算散列的特权级别(例如,不是执行散列计算的特权级别)中不可直接访问,但是在高于执行散列计算指令的特权级别的特权级别中可访问。
37.在实施例中,使用新的仅特权访问的专用寄存器(spr)为仅在管理者模式下可访问的每个线程存储当前密钥。在一个方面中,确切功能和密钥是特定于实现的,其中密钥可
以是进程上下文的一部分。在实施例中,与专用寄存器(spr)中的过程相关联的密钥在该过程在硬件线程上被调度之前被设置。在一个或多个实施例中,在管理者操作等级(也称为处理器中执行的状态)中设置秘密。就此而言,诸如电子邮件客户端、浏览器等的应用以称为用户模式或问题状态的特权状态运行。操作系统通常以称为管理者特权状态的较高特权状态在处理器上执行。处理器中存在只能在管理者特权状态中直接访问(例如,读取或写入)的寄存器,并且当尝试在用户模式/问题状态中直接访问(读取/写入)该寄存器时导致访问异常。在一个或多个实施例中,密钥被保持在这样的寄存器中,并且因此,对于在用户模式/问题状态中执行的应用,寄存器被认为是秘密或隐藏的。
38.在实施例中,用于存储密钥的专用寄存器(spr)是每硬件线程寄存器,并且在一个方面中,保存密钥的专用寄存器(spr)35位于与图3中所示的处理器102的执行单元24相关联的物理寄存器文件32中,但可以设想保存密钥的专用寄存器(spr)35可以位于处理器中的其他位置中。例如,具有专用寄存器(spr)35的物理寄存器文件32可以驻留在执行单元24内,或者单独的专用寄存器(spr)35可以位于执行单元24中,如图3中的虚线所示。
39.在一个或多个实施例中,用于计算散列的新指令被称为“hashgen”,但是其他术语设想用于新指令。在实施例中,新的“hashgen”指令计算三个参数的密码散列,在一个实施例中,包括使用密钥值作为参数之一。在实施例中,将密钥存储在具有受限访问的专用寄存器(spr)中,并且在一个方面中将密钥存储在仅在高于执行新计算散列指令(“hashgen”)的特权级别的特权级别中可访问的专用寄存器(spr)中。在实施例中,密码散列指令“hashgen”计算以下的密码散列:双字宽(64位)的通用寄存器(gpr)提供的栈指针、双字宽(64位)的另一通用寄存器(gpr)的标签/上下文id以及密钥。在实施例中,密钥是在计算密码散列指令(“hashgen”)在其中执行的特权级别中不可直接访问的双字(64位)字段。
40.提供处理器(例如,电路、逻辑、固件等)以支持计算散列函数(即新(“hashgen”)指令),并且编译器将在适当位置插入指令并且因此保护应用代码免受攻击。使用“hashgen”指令计算散列(签名)典型地在函数调用时执行(例如在进入软件应用中的函数时,其中处理器将执行多个指令)。在函数调用时(例如在函数进入时),在代码中如此插入hashgen指令,计算散列(签名)并且将其存储在存储器中。通常,可以使用具有所需的输入、输出和密钥宽度的选择的任何散列函数。
41.在从函数返回(例如,退出函数)之前或之时,应当检查散列(签名)以确定它们是否匹配,因为如果它们不匹配,则应用/处理器可能经受攻击。因此,在函数返回时,例如,在退出函数时,散列(签名2)必须重新计算并针对先前在函数进入时计算并保存到存储器的散列(签名1)进行检查。换言之,必须认证签名(散列值)使得软件指针被验证为是准确的并且指向预期目标。在一个或多个实施例中,散列(签名2)可以在函数退出之前或之时通过使用用于生成散列的相同指令(例如,在函数进入时使用的“hashgen”指令)来重新计算。例如,在退出函数时或刚好在退出函数之前,可以使用新的“hashgen”指令来重新计算散列(签名2),该新的“hashgen”指令用于在进入函数时计算散列(签名1),并且可以针对在进入函数时存储在存储器中的散列值(签名1)来检查重新计算的散列(签名2)。可以调用并加载先前存储到存储器中的计算的散列(签名1),可以使用在函数进入时生成散列的相同指令(例如,“hashgen”指令)来生成新的或重新计算的散列(签名1),并且可以将重新计算的散列(签名2)与存储在存储器中的散列值(签名1)进行比较。如果两个散列值匹配(即,签名1
=签名2),则代码可退出函数(返回)并继续操作,因为很可能不存在恶意攻击。
42.如果这两个散列值不匹配(签名1不等于签名2),则存在应被解决的错误和/或潜在恶意攻击。在一个方面中,如果重新计算的散列值(签名2)和存储的散列值(签名1)不匹配,则可以结合陷阱函数。如果散列(签名)不匹配,则与等待默认或允许函数返回指令执行相反,陷阱函数或陷阱中断可将控制引导至操作系统。就此而言,被称为“trapne”或“tdne”的新指令被用于执行将重新计算的散列(签名2)与来自存储器的散列值(签名1)进行比较的功能,并且如果散列值(签名)不匹配,则执行陷阱功能(陷阱中断),其中控制被转移至操作系统,或者可以建立某个其他陷阱以避免攻击或进一步检查差异(不匹配的签名)。
43.在实施例中,使用来自双字(64位)指针的新的“hashgen”指令来计算双字大小的散列(64位),并且在一个方面中,所计算的散列被存储在与指针被存储的位置分开的位置中,从而为处理器和在处理器上运行的软件应用提供额外的安全性。散列计算充当签名并且使得攻击处理器及接管其控制更困难,因为修改单个存储器位置不足以伪造签名并执行攻击。即,在一个或多个实施例中,栈指针的返回地址保存在一个存储器位置中,所计算的散列(例如,签名)被存储在存储器中的另一位置中。因而,为了成功地攻击操作软件程序的处理器,仅修改栈指针的返回地址不足以接管处理器和/或执行程序的控制。
44.此外,由于利用更宽签名的能力,可以实现更安全的散列函数。例如,由于更宽的字段被用作用于计算散列的参数(基值),可实现双字(64位)大小的散列。在实施例中,六十四(64)位值被用作签名,而不是较小的字段,诸如像将签名填入寄存器字段宽度的一部分中,例如将签名适配到有效地址(ea)本身的一部分(15位)中。在一个或多个实施例中,如果在所计算的散列与重新计算的散列之间存在不匹配,则在检查散列以将控制从应用转移到系统软件时生成陷阱异常或陷阱中断。陷阱异常或陷阱中断是当用户模式指令运行到错误条件(在该情况下所存储的散列vs重新计算的散列的不匹配)时在处理器中生成的异常的类型,其将控制转移到管理者状态。在一个方面中,提供显式散列检查指令,该指令在重新计算的散列不匹配时将控制从正在运行的应用转移到系统软件。在实施例中,可选的陷阱异常将程序控制移动/转移到管理者状态,使得返回指令不执行,从而在签名(散列)不匹配的情况下提供比等待故障发生更好的控制。
45.将更详细地描述本公开的一个或多个实施例,但应认识到本发明不应局限于这些细节,除非以权利要求书的语言明确陈述。用于计算散列(优选地秘密散列)的指令(被称为“hashgen”)将采取以下形式:hashgen rt,ra,rb,并且执行以下函数:rt<=散列函数(ra,rb,secret-key spr),其中rt、ra、rb都是通用寄存器,优选地是64位通用寄存器。密钥优选地是由专用寄存器(spr)指定的64位密钥,该spr在通过move-to(mt1r)或move-from(mflr)spr指令执行散列的特权级别中不可直接访问,但在高于它的特权级别中可访问。在实施例中,rb提供受保护的代码指针(例如,保持代码指针的存储器地址的通用寄存器);ra提供标签/上下文信息(例如,保持上下文id的通用寄存器);“secret-key spr”是保持密钥的spr;并且rt是向其输出或返回所计算的散列(例如,结果/签名)的返回寄存器。
46.用于在函数调用时(例如,在进入函数时)生成散列的指令通常与用于在存储器中存储散列的存储指令一起使用。因而,插入到函数调用(函数进入)所位于的代码中的指令可如下使用:
47.hashgen rt,ra,rb
48.store rt,d(ra)[memory[ra+d]<=temp]
[0049]
其中,将散列计算的输出(签名)存储在存储器中的操作是单独的指令。在实施例中,散列计算指令“hashgen”将散列签名输出至另一通用寄存器(gpr)(例如,rt),并且接着可以利用现有存储指令(例如,“std”)执行用于将散列结果(签名)存储到存储器中的操作。即,从rt到存储器存储散列计算(例如,签名)的操作可以是单独的存储指令(例如,“std”)。在实施例中,该值可以通过指定相对于指定标签/上下文信息的输入寄存器的偏移来将散列计算的值存储到存储器。
[0050]
在替代性实施例中,计算/生成散列指令可以将存储操作/指令与计算散列指令结合,从而使得计算散列(例如,签名)的结果在没有单独的存储(“st”)指令的情况下被直接存储到存储器。在实施例中,计算散列和将散列计算的结果(签名)从rt存储到存储器的微操作可以是单个指令,该个条指令可以被称为“hashgen”或可以使用不同的术语“hashst”。在一个方面中,执行计算和存储散列的两个微操作的单个指令可包括通过指定相对于指定标签/上下文信息的输入寄存器的偏移来存储散列。
[0051]
使用相同的“hashgen”指令重新计算散列(签名2)以及针对之前计算并存储在存储器中的散列(签名1)进行检查可以采取以下形式:
[0052]
load r1,d(ra)
[0053]
hashgen rt,ra,rb
[0054]
trapne r1,rt[比较并且可选地在寄存器值不同的情况下执行陷阱]
[0055]
其中,“load”r1,d(ra)是指将存储在存储器中的先前计算的散列(签名1)的值加载到r1中,并且“hashgen”rt,ra,rb基于ra、rb中的当前值以及在一个或多个实施例中可选的密钥重新计算散列(签名2)。指令“trapne”(也称为“tdne”)针对输出到rt的当前生成的散列(签名2)检查并比较从存储器加载到r1中的散列值(签名1)。在实施方式中,“trapne”或“tdne”指令还可包括陷阱函数。例如,如果在比较两个寄存器r1、rt中的值时值不相同,则不是等待故障,而是将控制转移至操作系统和/或操作退出函数但不执行函数返回指令以继续执行所述代码。可选的陷阱函数(陷阱中断)可以与散列检查操作结合,使得单个指令执行散列值(签名)的比较和陷阱函数。
[0056]
在替代性实施例中,指令的紧凑形式可以将存储器加载指令和检查散列/陷阱函数结合在同一指令中。即,检查散列签名指令“trapne”或“tdne”(其在实施例中可选地包括陷阱函数)可以结合存储访问,即加载到存储器指令。使用相同的“hashgen”指令重新计算散列(签名2)、从存储器加载散列值(签名1)、针对先前计算并存储在存储器中的散列(签名1)进行检查、并且可选地包括陷阱函数可以采取以下形式:
[0057]
hashgen rt,ra,rb
[0058]
trapne r1,rt[比较并且可选地在寄存器值不同的情况下执行陷阱]
[0059]
其中“trapne”包括以下操作:(1)从存储器加载散列(签名1),(2)用重新计算的散列(签名2)检查来自存储器的散列值(签名1),以及(3)如果包括的话,可选地执行陷阱微操作。
[0060]
使用“hashgen”指令并且在实施例中使用“tdne”或“trapne”指令检查散列(签名)典型地是在退出软件应用中的函数之前或之时执行的。“ld”(加载)指令、“hashgen”指令和“tdne”(“trapne”)指令(并且在实施例中结合加载指令的指令的紧凑形式)在函数退出之
前或之时(在执行函数返回指令之时或之前)被这样插入,散列(签名2)被重新计算并且针对先前在进入函数之时或之前存储在存储器中的散列(签名1)进行检查。
[0061]
处理器设置有电路、逻辑、功能单元(例如,用于密钥的专用寄存器)、固件等,以支持计算散列函数,例如新的(hashgen)指令(或结合存储指令的紧凑版本),以及新检查散列和可选地陷阱函数,例如“tdne”指令(或结合加载指令的紧凑版本),并且编译器会将新指令插入适当位置(在函数调用和函数返回时)并且因此保护应用代码免受攻击。
[0062]
图4示出了经历过程的方法400的实施例,该过程用于保护处理器并且更具体地使得处理器在运行软件应用时更抗攻击。方法400更具体地涉及计算并利用密码签名以使得处理器更安全,尤其是在操作软件应用时。虽然为了方便起见并且不旨在将本公开限制为包括一系列步骤和/或数个步骤而描述了图4中所示的方法400,应当理解,该过程不需要作为一系列步骤执行和/或这些步骤不需要以关于图4所示出和描述的顺序执行,相反该过程可以被集成和/或一个或多个步骤可以一起、同时执行,或者这些步骤可以按照所公开的顺序或者按照备选顺序执行,除非另有说明。
[0063]
使执行软件应用的处理器更安全(例如,更能抵抗控制程序流和/或获得未经授权的数据访问的尝试)的方法400包括在410处在例如执行软件应用时经历函数进入。在示例中,在处理期间遇到函数调用(也称为函数序言)。在420处,在函数进入时,将返回地址值复制到通用寄存器中,例如复制到gpr r0中。在一个方面中,复制的返回地址由链接寄存器(lr)提供。在一个方面中,通用寄存器(例如,gpr r0)是六十四(64)位gpr,尽管其他大小被预期。在430处,将来自通用寄存器gpr r0的返回地址值存储到存储器位置。即,将示例中来自gpr r0的值移动到存储器位置。在一个或多个实施例中,来自gpr r0的值优选地在距通用寄存器gpr r1中的栈指针的偏移(例如,偏移1)处存储到存储器。例如,偏移可以是距gpr r1中的栈指针的负偏移或正偏移。
[0064]
在440处使用散列函数h计算散列(例如,签名)。散列计算可以包括多个输入或参数,并且在实施例中包括三个参数或输入。在实施例中,在gpr r0中产生散列计算的结果或输出,并且在优选实施例中,散列计算的结果或输出是六十四(64)位。用于散列计算的三个输入或参数是gpr r0、gpr r1和专用寄存器(spr)中的值。专用寄存器(spr)中的值是密钥,并且在一个方面中spr被称为“hashkeyr”。在实施例中,专用寄存器hashkeyr中的值仅可从比散列计算的执行高的特权级别访问。散列函数h可以是任何数量的散列函数,并且该方法不受所选择的或使用的散列函数h的限制。在实施例中,使用预定义的散列函数。在特定的优选实施例中,到gpr r0的输出可以由r0=h(gpr r0,gpr r1,hashkeyr)表示。
[0065]
在一个或多个实施例中,在450处,输出到gpr r0的散列值存储到存储器位置,并且在实施例中,存储在距gpr r1中的栈指针的另一偏移(偏移2)处。在460处,执行在410处进入的函数的剩余部分。执行该函数的处理,并且当该函数完成并且该程序将退出该函数时(例如,在函数返回时),执行进一步的处理以对于在函数退出时执行的重新计算的散列检查在函数进入时执行的散列签名。
[0066]
图5示出了经历过程的方法500的实施例,该过程用于保护处理器并且更具体地使得处理器在运行软件应用时更抗攻击。方法500更具体地涉及计算和利用密码签名以使得处理器更安全,尤其是在操作软件应用时。虽然为了方便起见并且不旨在将本公开限制为包括一系列步骤和/或数个步骤而描述了图5中所示的方法500,应当理解,该过程不需要作
为一系列步骤执行和/或这些步骤不需要以关于图5所示出和描述的顺序执行,相反该过程可以被集成和/或一个或多个步骤可以一起、同时执行,或者这些步骤可以按照所公开的顺序或者按照备选顺序执行,除非另有说明。
[0067]
使执行软件应用的处理器更安全(例如,更能抵抗控制程序流和/或获得未经授权的数据访问的尝试)的方法500包括在510处,在例如执行软件应用时,在完成函数之后遇到函数退出(函数返回)指令。在示例中,在处理函数期间函数完成,并且函数退出或返回(也称为函数尾声)。在520处,在退出函数之时或之前,将来自存储器的散列签名加载到通用寄存器(例如,gpr r31)中。在示例中,将在450处所描述的在函数进入时存储在距gpr r1中的栈指针的偏移2处的值加载到gpr r31中。在530处,将来自存储器的返回地址(例如,如参考图4在430处所描述的存储在距gpr r1中的栈指针的偏移1处)加载到gpr r31中。在540处,将来自gpr r0的返回地址移动到链接寄存器(lr)。
[0068]
在550处使用散列函数h计算散列(例如,签名)。就此而言,在550处使用用于在进入函数时计算散列的相同寄存器中的值并以相同方式(例如,与在440处计算散列相同的方式)来重新计算散列。散列函数h是用于在函数进入时计算散列的相同散列函数h。散列计算包括与在进入函数时计算散列时所使用的相同的参数。在实施例散列计算的结果或输出在gpr r0中产生,并且具有与用于在函数进入时计算散列的位数相同的位数。在实施例中,用于散列计算的三个输入或参数是gpr r0、gpr r1和专用寄存器(spr)(例如,来自“hashkeyr”)中的值。在特定的优选实施例中,从550到gpr r0的输出可以由r0=h(gpr r0,gpr r1,hashkeyr)表示。
[0069]
在560处确定gpr r31中的值与gpr r0中的值是否相同(函数进入时的散列签名等于函数退出时的散列签名吗?)。如果散列签名值相同(560:是),则过程500前进至570并且安全检查通过。在570处,恢复gpr r31,并且对链接寄存器中的地址执行函数返回或退出。如果在560,gpr r31中的散列值不等于gpr r0中重新计算的散列值(560:否),则过程继续到580,其中安全检查失败。在实施例中,在580处,经由陷阱中断将控制转移至操作系统(os)。
[0070]
参考图6描述了根据实施方式的插入代码中以在函数调用(函数进入)时计算散列的指令的示例,其中处理器中所支持的新指令“hashgen”在软件程序/应用的处理期间在函数进入之前或在函数进入时计算三个参数的密码散列。所计算的密码散列充当保存在通用寄存器(gpr)31中的签名。在图6中,指令编号0和1执行保存来自逻辑寄存器的值的功能。更具体地,指令0,从链接寄存器移动(mflr),将值从链接寄存器移动到通用寄存器(gpr)r0中,并且指令1将来自链接寄存器的值存储到在距gpr r1中的栈指针的偏移1处的存储器位置。在指令2处,执行“hashgen”指令以计算散列。在优选实施例中,使用三个输入来计算散列,这三个输入包括gpr r0中的值、gpr 1中的值和密钥(优选地,从具有比hashgen指令高的特权级别的专用寄存器可访问),并且输出(返回)散列计算至r)。指令4将输出到gpr r0的散列值存储到在距gpr r1中的栈指针的偏移2处的存储器位置。指令5在距gpr r1中的栈指针的偏移3处将值保存在gpr 31中。
[0071]
参照图7描述了根据实施例的通过例如编译器插入到代码中以在函数返回(函数退出)时检查散列签名的指令的实例,其中处理器中所支持的新指令“tdne”在软件程序/应用的处理期间在函数退出(返回)时检查密码散列,并且在散列签名不匹配的情况下执行陷
阱中断函数。在图7中,指令0将存储在存储器中的散列签名(例如,在函数调用时计算的在距gpr r1中的栈指针的偏移2处存储的值)加载到gpr 31。在指令1处,将来自存储器的返回地址(例如,存储在距gpr r1中的栈指针的偏移1处,其是在函数进入微操作期间存储的)加载到gpr r0。在指令2处,将来自gpr r0的返回地址移动到链接寄存器。在指令3处,执行“hashgen”指令以使用与用于计算在函数调用(函数进入)时计算的第一散列相同的散列函数和相同的参数来计算第二散列(签名2)。使用三个输入来重新计算散列,这三个输入包括gpr r0中的值、gpr 1中的值、以及密钥(优选地从具有比hashgen指令高的特权级别的专用寄存器可访问),并且输出(返回)第二散列计算(签名2)到r0。指令4对照在图7中的指令3重新计算的散列(签名2)检查从存储器中恢复(并且在函数进入时计算)的散列(签名1),以验证签名是否匹配。如果指令中包含该微操作并且如果满足条件(即,散列签名1不匹配散列签名2),则指令4进一步执行可选的陷阱函数。指令5用在距gpr r1中的栈指针的偏移3处的值恢复(加载)gpr,并且指令6返回到链接寄存器中的地址。
[0072]
本发明可以是系统、方法、和/或计算机程序产品。计算机程序产品可包括其上具有用于使处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质(或多种介质)。
[0073]
计算机可读存储介质可以是可以保留和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者上述的任意合适的组合。计算机可读存储介质的更具体示例的非穷尽列表包括以下:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式紧凑盘只读存储器(cd-rom)、数字多用途盘(dvd)、记忆棒、软盘、机械编码装置(诸如具有记录在其上的指令的槽中的凸起结构或穿孔卡)、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发射的电信号。
[0074]
在此所描述的计算机可读程序指令可以经由网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载至对应的计算/处理装置或者下载至外部计算机或外部存储装置。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
[0075]
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如smalltalk、c++等)和常规的过程式程序设计语言(诸如“c”程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络连接到用户的计算机,包括局域网(lan)或广域网(wan),或者可与外部计算机(例如,使用
互联网服务提供商通过互联网)进行连接。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本发明的各方面。
[0076]
在此参照根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的多个方面。应当理解,流程图和/或框图的每个框以及流程图和/或框图中框的组合,都可以由计算机可读程序指令实现。
[0077]
这些计算机可读程序指令可以被提供给通用计算机、专用计算机、或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现流程图和/或框图的一个或多个框中所指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令可以指引计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而其中存储有指令的计算机可读存储介质包括包含实现流程图和/或框图中的一个或多个框中所指定的功能/动作的方面的指令的制造品。
[0078]
计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置、或其他设备上,以使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤以产生计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现在流程图和/或框图的一个或多个框中所指定的功能/动作。
[0079]
附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。就此而言,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现所指定的逻辑功能的一个或多个可执行指令。在一些备选实现中,框中标注的功能可以不按照图中标注的顺序发生。例如,取决于所涉及的功能,连续示出的两个框可以基本上同时执行,或者这些框有时可以以相反的顺序执行。也要注意的是,框图和/或流程图中的每个框、以及框图和/或流程图中框的组合,可以用执行指定功能或动作或者执行专用硬件与计算机指令的组合的基于专用硬件的系统来实现。
[0080]
此外,根据各种实施例的系统可以包括处理器和与处理器集成和/或可由处理器执行的逻辑,逻辑被配置为执行在此叙述的过程步骤中的一个或多个。通过与其集成,意味着处理器具有与其嵌入作为硬件逻辑(诸如专用集成电路(asic)、现场可编程门阵列(fpga)等)的逻辑。通过处理器可执行,意味着逻辑是硬件逻辑;软件逻辑,诸如固件、操作系统的一部分、应用程序的一部分;等等,或者硬件和软件逻辑的某种组合,硬件和软件逻辑可由处理器访问并且被配置为在由处理器执行时使处理器执行某种功能。软件逻辑可以存储在本领域中已知的任何存储器类型的本地和/或远程存储器上。可以使用本领域已知的任何处理器,例如软件处理器模块和/或硬件处理器,诸如asic、fpga、中央处理单元(cpu)、集成电路(ic)、图形处理单元(gpu)等。
[0081]
将清楚的是,前述系统和/或方法的各种特征可以以任何方式进行组合,从而根据以上呈现的描述创建多个组合。
[0082]
应进一步了解,本发明的实施例可以按代表顾客部署的服务的形式来提供以按需提供服务。
[0083]
已经出于说明的目的呈现了对本发明的各种实施例的描述,但并不旨在是穷尽或
限于所公开的实施例。在不脱离所描述的实施例的范围的情况下,许多修改和变型对于本领域普通技术人员来说是明晰的。这里使用的术语被选择来最好地解释实施例的原理、实际应用或对在市场中找到的技术的技术改进,或者使得其他本领域普通技术人员能够理解本文公开的实施例。

技术特征:
1.一种在处理器中处理数据的方法,所述方法包括:响应于遇到函数调用指令,使用三个散列输入参数的散列来计算进入散列值,其中所述输入参数中的一个输入参数是存储在专用寄存器中的密钥;以及将所述进入散列值存储在第一存储器位置中。2.根据权利要求1所述的方法,其中,所述第一存储器位置位于距第一通用寄存器中的栈指针的第一偏移处。3.根据权利要求1所述的方法,进一步包括:将链接寄存器提供的值复制到第二通用寄存器条目中;以及将来自所述第二通用寄存器条目的所述值存储到第二存储器位置。4.根据权利要求3所述的方法,其中,所述第二存储器位置位于距所述第一通用寄存器条目中的栈指针的第二偏移处。5.根据权利要求4所述的方法,其中,用于计算所述进入散列的所述三个散列输入参数包括第一散列输入参数、第二散列输入参数和第三散列输入参数,所述第一散列输入参数是所述第一通用寄存器条目中的所述值、所述第二散列输入参数是所述第二通用寄存器条目中的所述值,所述第三散列输入参数是所述密钥。6.根据权利要求5所述的方法,其中,存储所述密钥的所述专用寄存器仅在高于计算所述进入散列值的特权级别的特权级别中可访问。7.根据权利要求1所述的方法,进一步包括:响应于遇到函数退出指令,使用在计算所述进入散列值时所使用的相同的三个输入参数和相同的散列来计算退出散列值;以及确定所述进入散列值是否与所述退出散列值相同。8.根据权利要求7所述的方法,进一步包括:响应于所述进入散列值等于所述退出散列值,执行函数返回,其中所述处理器退出所述函数;以及响应于所述进入散列值不等于所述退出散列值,执行陷阱中断。9.根据权利要求8所述的方法,其中,所述陷阱中断将控制转移到操作系统。10.根据权利要求3所述的方法,进一步包括:响应于遇到函数退出指令:将所述进入散列值从所述第二存储器位置加载到第三通用寄存器中;将所述值从所述第一存储器位置加载到所述第二通用寄存器中;以及将所述值从所述第二通用寄存器移动到所述链接寄存器。11.根据权利要求10所述的方法,其中,用于计算所述退出散列的所述三个散列参数输入包括第一散列输入参数、第二散列输入参数和第三散列输入参数,所述第一散列输入参数是所述第一通用寄存器条目中的所述值,所述第二散列输入参数是所述第二通用寄存器条目中的所述值,所述第三散列输入参数是所述密钥。12.一种用于执行软件应用中的指令的系统,所述系统包括:处理器,所述处理器具有用于执行所述指令的电路和逻辑,所述处理器包括:解码单元,所述解码单元包括用于解码所述指令的电路和逻辑;发布单元,所述发布单元包括用于接收经解码的指令并发布经解码的指令的电路和逻
辑;和执行单元,所述执行单元包括用于执行由所述发布单元发布的经解码的指令的电路和逻辑,所述执行单元与专用寄存器相关联;以及非临时性计算机可读介质,所述非临时性计算机可读介质具有用其体现的程序指令,所述程序指令可由所述处理器执行以使所述处理器:响应于遇到函数进入指令,使用三个散列输入参数的散列来计算进入散列值,其中所述输入参数中的一个输入参数是存储在所述专用寄存器中的密钥;响应于遇到函数退出指令,使用在计算所述进入散列值时所使用的相同的三个输入参数和相同的散列来计算退出散列值;以及确定所述进入散列值是否与所述退出散列值相同。13.根据权利要求12所述的系统,进一步包括将所述进入散列值存储在第一存储器位置中。14.根据权利要求13所述的系统,进一步包括由所述处理器可执行的编程指令以使所述处理器:将由链接寄存器提供的值复制到第二通用寄存器条目中;以及将来自所述第二通用寄存器条目的所述值存储到第二存储器位置。15.根据权利要求14所述的系统,其中,用于计算所述进入散列的所述三个散列参数输入包括第一散列输入参数、第二散列输入参数和第三散列输入参数,所述第一散列输入参数是所述第一通用寄存器条目中的所述值,所述第二散列输入参数是所述第二通用寄存器条目中的所述值,所述第三散列输入参数是所述密钥。16.根据权利要求15所述的系统,其中,存储所述密钥的所述专用寄存器仅在高于计算所述进入散列值的特权级别的特权级别中可访问。17.根据权利要求12所述的系统,进一步包括由所述处理器可执行的编程指令以使所述处理器:响应于所述进入散列值等于所述退出散列值,执行函数返回,其中所述处理器将退出所述函数;以及响应于所述进入散列值不等于所述退出散列值,执行陷阱中断。18.根据权利要求17所述的系统,其中,执行所述陷阱中断使控制转移到操作系统。19.根据权利要求14所述的方法,进一步包括由所述处理器可执行的编程指令以使所述处理器:响应于遇到函数退出指令:将所述进入散列值从所述第二存储器位置加载到第三通用寄存器中;将所述值从所述第一存储器位置加载到所述第二通用寄存器中;以及将所述值从所述第二通用寄存器移动到所述链接寄存器。20.一种在处理器中处理数据的方法,所述方法包括:响应于遇到函数调用指令,使用一个或多个散列输入参数的散列来计算进入散列值,其中所述输入参数中的一个输入参数是存储在专用寄存器中的密钥;响应于遇到函数返回指令,使用在计算所述进入散列值时所使用的相同的一个或多个输入参数和相同的散列来计算退出散列值;
确定所述进入散列值与所述退出散列值是否相同;以及响应于所述进入散列值不等于所述退出散列值,将控制转移到操作系统并且不执行所述返回函数指令。21.一种计算机程序产品,包括指令,所述指令由处理器可执行以使所述处理器执行根据权利要求1至11中任一项所述的方法。

技术总结
公开了一种用于处理信息的处理器和方法,其响应于在运行应用时遇到函数进入指令,使用三个散列输入参数的散列来计算进入散列值,其中输入参数之一是存储在专用寄存器中的密钥;以及响应于遇到函数退出指令,使用在计算进入散列值时所使用的相同的三个输入参数和相同的散列来计算退出散列值;以及确定进入散列值是否与退出散列值相同。是否与退出散列值相同。是否与退出散列值相同。


技术研发人员:J
受保护的技术使用者:国际商业机器公司
技术研发日:2021.10.20
技术公布日:2023/8/4
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐