管理具有隔离组件的现场可编程门阵列的使用的制作方法

文档序号:15559021发布日期:2018-09-29 01:48阅读:153来源:国知局

本发明涉及管理具有隔离组件的现场可编程门阵列的使用。



背景技术:

在大多数通用计算机内,操作系统是管理对计算机内资源的访问的主要软件。主要资源是执行被设计成在计算机上运行的应用程序的中央处理单元(cpu)、主存储器和存储。在一些计算机体系结构中,可出现附加的处理单元(诸如处理器中的多个核)和/或附加的处理器(称为协作处理器)。这样的协作处理器的示例包括图形处理单元(gpu)和数字信号处理器(dsp)。操作系统也管理多个进程对这些资源的访问。

现场可编程门阵列(fpga)是一种通常被用在专用计算设备中的逻辑器件。fpga通常被用于执行此门阵列尤其适用于的特定的、专用的功能。

fpga通常位于外围设备或其它专用硬件(诸如连接到诸如pci总线的系统总线并通过该系统总线被访问的印刷电路板)中。一般而言,这样的器件被编程一次并被使用多次。因为这些器件是可编程的,相比于其它专用逻辑器件,它们具有能被在现场更新的优势。



技术实现要素:

提供本发明内容以便以简化形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。

一个或多个现场可编程门阵列(fpga)能在通用计算系统中用作共享可编程协作处理器资源。fpga能被编程来执行功能,这些功能进而能与一个或多个进程相关联。在多个进程的情况下,fpga能被共享,并且进程能在访问fpga的时间间隙期间被分配到fpga的至少一个部分。用硬件描述语言所写的用于编程fpga的程序被用作硬件库。操作系统对以下进行管理:将fpga资源分配到进程、根据要由进程使用fpga来执行的功能来编程该fpga、以及对这些进程对fpga的使用进行调度。

如果fpga被用作通用计算平台的组件,那么其可能容易受到不安全代码的攻击和执行。例如,对数据传输和存储器的检查可能暴露与安全操作相关的密钥、算法和其它信息。为了提升安全性,fpga的各个组件被隔离来保护fpga以及fpga和计算机系统的其它组件之间传输的数据。

例如,由fpga写入到存储器的数据被加密,并在从存储器中读回时在fpga中被解密。在fpga和诸如cpu或gpu等其它组件之间传输的数据(无论是直接地或通过存储器的)可使用为通信组件所知的密钥(无论是使用共享秘密密钥还是公共/私有密钥对)来被类似地加密。被传输的数据还可由fpga或其它组件来数字地签名以提供认证。用于编程fpga的代码可由作者来加密并签名、以被加密的状态加载到fpga中并接着在用该代码编程fpga之前由fpga自己来解密和认证。

在以下描述中,对附图进行了参考,附图构成了实施方式的一部分且在其中作为示例示出了本发明技术的具体示例实现。可以理解,可以使用其它实施例并且可以做出结构上的改变而不背离本发明的范围。

附图说明

图1是对其操作系统能被实现的具有fpga资源的示例计算系统的框图。

图2是fpga功能单元的说明性示例的示意图。

图3是使用具有fpga资源的计算机系统上的硬件和软件库的应用的示例体系结构的示意图。

图4是示出随着时间的对fpga使用的图。

图5是具有支持隔离组件的现场可编程门阵列的计算系统的框图。

图6是现场可编程门阵列的更详细的框图。

图7是描述安全地编程fpga的流程图。

具体实施方式

以下部分提供了对示例计算环境的简要的、一般的描述,在该示例计算环境中能实现用于管理对fpga资源的使用的操作系统。该系统可以用众多通用或专用计算设备来实现。适合的公知计算设备的示例包括但不限于:个人计算机、服务器计算机、手持式或膝上型设备(例如,媒体播放器、笔记本计算机、蜂窝电话、个人数据助理、语音记录器)、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络pc、小型机、大型计算机、包括以上系统或设备的任一个的分布式计算环境等等。

图1仅仅示出示例计算环境,并不旨在对适合的计算环境的使用范围或功能提出任何限制。

参考图1,示例计算环境包括计算设备100。在一个基本配置中,计算设备100包括至少一个处理单元102(诸如通用计算机的典型中央处理单元(cpu))和存储器104。

计算设备可包括多个处理单元和/或附加的协作处理单元,诸如图形处理单元(gpu)。计算设备还包括一个或多个现场可编程门阵列(fpga),其被表示为可用作共享(在运行在计算机上的进程间共享)的协作处理资源的fpga单元120。fpga可位于其自己的cpu插孔中或位于分开的被插入到扩展槽(诸如快速外围部件互连(pci-e)槽)中的卡上。通过提供这样的fpga单元,能在得到硬件加速的益处的情况下实现各种非常适合于门阵列来实现的功能。

取决于处理单元和fpga单元的配置,该单元或单元内的每个功能单元具有相关联的输入/输出通道来用于与主操作系统进程进行通信。例如,能提供专用于该功能单元并在其与使用该功能单元的进程之间共享的存储器区域。一种请求队列和响应队列还能被用于使得能够实现在fpga单元内实现的操作的异步调用。此外,fpga单元中的功能单元针对进程的状态能被保存到用于该功能单元和该进程的存储器区域并从该存储器区域中还原。替换地,其它技术能被用于确保功能单元在被其进程使用前处于已知状态。

取决于计算设备的配置和类型,存储器104可以是易失性的(诸如ram)、非易失性的(诸如rom、闪存等)或是两者的某种组合。处理单元、协作处理器和存储器的该配置在图1中用虚线106示出。

计算设备100还可具有附加的资源和设备。例如,计算设备100还可包含附加存储(可移动和/或不可移动),包括但不限于磁盘、光盘或磁带。在图1中通过可移动存储108和不可移动存储110示出这样的附加存储。计算机存储介质包括以用于存储诸如计算机程序指令、数据文件、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器104、可移动存储108和不可移动存储110全部都是计算机存储介质的示例。计算机存储介质包括但不限于,ram、rom、eeprom、闪存或其它存储器技术、cd-rom、数字多功能盘(dvd)或其它光存储、磁带盒、磁带、磁盘存储或其它磁存储设备,或者可用于存储所需信息并且可由计算设备100访问的任何其它介质。任何这样的计算机存储介质都可以是计算设备100的一部分。

计算设备100还可包括通信连接112,其允许设备通过通信介质与其它设备进行通信。通信连接112的实现是取决于正由计算设备访问的通信介质的种类的,这是因为其提供了对这样的介质的接口以允许通过该通信介质的数据的传输和/接收。通信介质通常承载诸如载波或其他传输机制等已调制数据信号中的计算机程序指令、数据文件、数据结构、程序模块或其他数据,并包括任何信息传递介质。术语“已调制数据信号”指其一个或多个特征以这样的方式设置或改变以便在信号中对信息进行编码的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、rf、红外及其他无线介质之类的无线介质。

计算设备100可具有各种输入设备114,如键盘、鼠标、笔、相机、触摸输入设备等。还可包括诸如显示器、扬声器、打印机等输出设备116。所有这些设备在本领域中是公知的并且不必在此详细讨论。

使用由计算设备处理的诸如程序模块等计算机可执行指令和/或计算机解释的指令来实现在计算设备上执行的应用。一般而言,程序模块包括在由处理单元处理时指示处理单元执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。在分布式计算环境中,这样的任务能由通过通信网络链接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。

在计算设备上执行的操作系统管理进程对计算设备的各种资源的访问。通常,在计算机系统上运行应用导致一个或多个进程被创建,其中每个进程随着时间被分配到不同的资源。如果资源在进程间共享,并且如果进程不能并发地共享资源,那么操作系统随着时间调度对资源的访问。这样的资源之一是图1的fpga单元120,其可包括一个或多个分立的fpga。

参考图2,fpga单元内的资源之一是一组或多组可编程门,在此称为功能单元。每个功能单元通过一组门和/或门阵列中的其它资源来定义。一般而言,功能单元是不重叠的,即,不共享门阵列中的可编程元件。例如,如图2中示意地示出的,功能单元200、202、204和206是不重叠的。大多数fpga只有一个功能单元。然而,图1中的fpga单元120可具有一个或多个fpga。在多个fpga的情况下,每个fpga可被视为功能单元。参考图3,每个功能单元是以下资源:其能被分配给一个或多个进程、被操作系统使用实现一操作的硬件库来编程并接着被分配给其的进程用于执行该操作。参考图3,作为一个示例,应用300可使用传统的软件库302以及fpga硬件库304来执行各种操作。如果应用依赖硬件库304,则操作系统306使用该硬件库来编程fpga资源310以允许应用300使用库。fpga可在应用开始执行之前被编程。如果fpga可被足够快地重新编程,那么库可在操作系统的调度量子(quantum)内被加载到fpga中。操作系统306还执行来自应用300和cpu308上的软件库302的软件命令。当应用作出对由软件库执行的功能的调用时,操作系统执行来自cpu308上的软件库的功能。当应用作出对由fpga执行的功能的调用时,操作系统确保fpga是使用硬件库来编程的并使用fpga来执行功能。

为了示出不同的功能单元能随着时间如何被使用,现在参考图4。在图4中,在时间t1,使用功能单元400和402。在时间t2,使用功能单元400和404。在时间t2,再次使用功能单元400和402。在时间t1,功能单元400能被分配给进程p1,而功能单元402能被分配给进程p2。在时间t2,进程p2可能是不活动的,而进程p1能使用功能单元400并且进程p3能使用功能单元404。在时间t3,另一进程(诸如进程p4)能开始使用功能单元400;并且进程p2能再次活动来使用功能单元402。通过当前的fpga实现,在同一时间由不同的进程对多个功能单元的使用暗示多个fpga的使用。就fpga能支持由不同的进程在同一时间使用的多个功能单元而言,这些功能单元能在同一fpga上。实际上,操作系统在时间和空间方面在统计学上复用fpga。

为了允许这种随着时间由不同的进程对fpga资源的使用,操作系统具有调度器,该调度器确定在每个调度量子(即,时间段)哪个进程能访问fpga资源以及何时fpga功能单元将用硬件库来编程使得功能单元可用于由该进程使用。由此,用于fpga单元的调度器的实现部分地取决于fpga单元的性质以及其包括的一个或多个fpga。要考虑的与fpga有关的因素包括但不限于以下。例如,在一些情况下,如果一个功能单元不能独立于其它功能单元而被编程,那么整个fpga要被刷新来编程功能单元。另一考虑是功能单元能被编程的速度以及功能单元的编程是否阻止其它功能模块在编程阶段期间被使用。要考虑的另一因素是进程是否能通过共享功能单元来共享硬件库。调度器还考虑诸如以下的因素:并发进程的数量、应用性能保证、应用的优先级、进程上下文切换花费、对存储器和总线的访问以及在没有功能单元在fpga单元中可用的情况下软件库的可用性。

可以存在其它情况,其中fpga单元向应用或操作系统提供通用设施,其因此被调度为应用实例化的长度。例如,自定义网络协议或卸载可作为fpga单元上的加速服务来提供。相反,一般在通用cpu中执行的系统调用或标准库调用能使用fpga来被加速。此外,操作系统能基于进程优先级的偏好来复用cpu。在另一情况中,操作系统能使用应用的简档(统计地或动态地生成)来预测最适合于在fpga单元上运行的功能并接着预先加载该功能,使得其可用于调度。通过将简档用作向导,操作系统能确保空间和时间均在fpga单元上可用来加速应用。最终,操作系统能使用来自应用的简单提示来知道何时在fpga单元上调度时间。例如,某些到操作系统内的调用(系统调用)可指示长的延迟(对盘或网络的调用),其提供了fpga单元能空闲某一时间量来供其它线程或进程使用的提示。因此,操作系统使用各种提示和偏好来创建对复用对fpga单元的访问的调度。由于操作系统控制调度器,因此其具有关于正在执行和即将到来的工作、可用的硬件库以及在编程fpga所花费的时间的详细知识。因此,它能使用该知识来确定在执行期间哪些进程利用fpga。

现在已经描述了这样的计算机体系结构的一般概览,现在将描述示例实现。

参考图5,显示了使用具有隔离组件的现场可编程门阵列502的计算机系统500的一般体系结构。在该示例中,fpga连接到存储器504、中央处理单元506和图形处理单元508。这种连接是通过传统的高速计算机总线510来提供的,诸如具有超传输总线的cpu插孔、pci、pci-e或pci-x总线。

现场可编程门阵列可包括一个或多个寄存器,该一个或多个寄存器包括密钥(诸如对称密钥或公共/私有密钥对)。它还包括使用那些密钥来执行对应的密码操作的能力。密码组件可以是对fpga的可编程元件进行编程的一部分。这些组件可用对策(countermeasure)来实现以增加对芯片进行直接分析(这诸如能使用受信平台模块(tpm)组件来实现)的难度。

在一个实现中,密钥能被存储在tpm组件中,其中fpga仅能在密钥被使用时从该tpm组件中加载这样的密钥。如果tpm能访问由fpga持有的公共/私有对中的公共密钥,那么tpm能使用fpga的公共密钥来加密它对fpga所持有的密钥。由此,密钥本身只在从tpm传送到fpga之后被解密。这种配置允许被加密的密钥通过不安全的总线(诸如标准pc高速互连)来传送。

通过以下方式在fpga502和主存储器505之间创建逻辑通道:在所有数据离开fpga之前用对称密钥对所有数据进行加密,将经加密的数据存储在主存储器中。随后,当经加密的数据从主存储器读回到fpga中时,用fpga内的对称密钥对经加密的数据进行解密。在一个实现中,对数据的加密还可包括完整性保护。例如,可使用用于对称密码的经认证的加密操作模式。作为另一示例,数据可被散列并且散列值可被附加到该数据,并接着具有附加的散列值的数据能在被写入到主存储器之前被加密。

通过相互认证和密钥传输协议,在fpga502和图形处理单元(gpu)508或其它组件(诸如cpu或外围设备)之间创建逻辑通道。在这种情况下,fpga使用公钥/私钥对来向组件(例如,gpu)认证自己,并且该组件使用第二公钥/私钥对(其中私钥仅仅为gpu所知)来这样做。作为相互认证过程的一部分,fpga和gpu建立一个或多个共享秘密(例如,两个共享秘密,一个用于完整性保护而一个用于机密性)。这些共享秘密接着被用于作为fpga和gpu之间安全会话的一部分,对这两个组件之间随后的通信进行加密和认证。

现在参考图6,现在显示了提供隔离组件的现场可编程门阵列的更多细节。

fpga600包括输入/输出存储器602,经加密的数据604和经加密的密钥606通过该存储器来传输。

当被从其它设备接收到经加密的数据604时,该经加密的数据通过解密模块605(其可实现例如对称密钥密码操作)被解密。在一些情况下,经加密的密钥606(其可由解密模块605使用)被接收并通过解密模块608(其可实现例如公钥/私钥密码操作)来解密。经解密的密钥610可被存储在寄存器612中。在其他情况下,经解密的数据614可被存储在存储器616中。

当传输到其它设备时,数据620(诸如从存储器616)由加密模块622(其可实现例如对称密钥密码操作)加密以提供经加密的数据604。加密模块622可使用存储在寄存器612中的密钥610。在一些情况下,加密模块626(其可实现例如公钥/私钥密码操作)可对加密模块622使用的密钥610进行加密以作为经加密的密钥606来传输。经加密的数据604和密钥606可在传输到计算机系统内的另一组件(诸如存储器、gpu、cpu、外围卡或其它设备)之前被存储在存储器602中。

存储器616一般可由fpga的可编程元件630来访问以用于对数据的读取和写入两者。有可能具有一些仅仅能被可编程元件读取但不能被修改的寄存器。

在存储器616中接收到的数据还可以是用于编程fpga单元的功能单元的编程代码。控制电路632从存储器616中读取编程代码并对可编程元件630进行编程。如将在以下更加详细描述的,这样的结构允许经加密和签名的代码被安全地下载到fpga,在fpga处其被认证和解密,接着被用于编程fpga。

在一些实现中,可使用fpga的可编程元件来实现解密模块和加密模块中的各种密码操作。

在给定这样的结构的情况下,fpga可在它自己和计算机系统内的其它组件之间安全地传输数据,这是因为数据在所有可访问的总线上被加密。

例如,为了将数据传输到其它组件,fpga在fpga内加密数据。经加密的数据接着被传输到主存储器或被直接传输到组件。

如果该组件是fpga自己,那么经加密的数据从主存储器中读回到fpga,并且用fpga内部的密钥和密码操作来对经加密的数据进行解密。在这个示例中,fpga将主存储器用作附加的存储器。

fpga可使用主存储器来将数据传输到其它组件。在这个示例中,其它组件从存储器中读取经加密的数据并解密该数据。由此,cpu、gpu或其它组件还包括类似于fpga中使用的加密/解密模块。

类似地,其它组件可将数据直接地传输到fpga或通过存储器来传输到fpga。其它组件对数据进行加密并将其传输到存储器或fpga。fpga接着从存储器中读取数据或接收数据,并接着解密它。

如果解密使用共享秘密,那么该秘密还可直接地从fpga传输到该组件或通过存储器传输到该组件(或可能已经通过该组件传输到fpga)。共享秘密的传输可使用公钥/私钥加密来执行以保护该秘密。具体而言,为了提供相互认证,fpga使用公钥/私钥对来向组件(例如,gpu)认证自己,并且该组件使用具有仅仅为gpu所知的私钥的第二公钥/私钥对来这样做。

作为相互认证过程的一部分,fpga和gpu建立一个或多个共享秘密(例如,两个共享秘密,一个用于完整性保护而一个用于机密性)。这些共享秘密接着被用于作为fpga和gpu之间安全会话的一部分,对这两个组件之间随后的通信进行加密和认证。

作为另一示例,在图7中显示的,现在描述用于对fpga进行安全地编程的过程。

一般而言,安全地编程fpga涉及将经加密的编程逻辑接收到存储器中。经加密的程序逻辑在现场可编程门阵列中被解密并被解密到fpga中的存储器中。接着使用经解密的程序逻辑来对现场可编程门阵列的可编程元件进行编程。

如图7中显示的,由于程序逻辑旨在实现密码操作,因此所期望的是,确保经加密的程序逻辑是经认证的。例如,经加密的程序逻辑可使用认证加密协议来加密,或者经加密的程序逻辑可包括对未经加密的程序逻辑的数字签名。在一个实现中,经加密的程序逻辑可使用对称密钥来加密,该对称密钥用fpga的公钥来加密并还由受信源以fpga能够密码地验证的方式来数字地签名。

fpga接收700经加密的对称密钥。fpga使用自己的私钥解密702该对称密钥,并使用受信源的公钥认证该对称密钥。fpga接着接收704该经加密的程序逻辑。fpga使用经解密的对称密钥解密706该经加密的程序逻辑,并将该经解密的程序逻辑暂时存储708在fpga中的存储器中,在那里它被控制逻辑用于编程710fpga的可编程元件。

在所附权利要求的主题中的术语“制品”、“过程”、“机器”和“物质组成”旨在将权利要求限制到被认为落入35u.s.c.§101中的这些术语的使用所定义的可被专利保护的主题的范围内。

上文中提到的此处描述的替换实施方式中的任一个或全部可以按形成附加混合实施方式所需的任何组合使用。应该理解,在所附权利要求中定义的主题没有必要限于上述的特定实现。上述特定实现仅作为例子被揭示。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1