CN107851162B - 用于对安全i/o的密码引擎进行安全编程的技术 - Google Patents
用于对安全i/o的密码引擎进行安全编程的技术 Download PDFInfo
- Publication number
- CN107851162B CN107851162B CN201680042578.0A CN201680042578A CN107851162B CN 107851162 B CN107851162 B CN 107851162B CN 201680042578 A CN201680042578 A CN 201680042578A CN 107851162 B CN107851162 B CN 107851162B
- Authority
- CN
- China
- Prior art keywords
- channel
- programming information
- processor
- programming
- key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims description 62
- 230000004044 response Effects 0.000 claims abstract description 164
- 238000004806 packaging method and process Methods 0.000 claims description 26
- 238000012795 verification Methods 0.000 claims description 11
- 238000005516 engineering process Methods 0.000 abstract description 7
- 239000000306 component Substances 0.000 description 56
- 238000002955 isolation Methods 0.000 description 17
- 238000004891 communication Methods 0.000 description 15
- 238000005192 partition Methods 0.000 description 10
- 238000013500 data storage Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 238000012856 packing Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000008672 reprogramming Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013175 transesophageal echocardiography Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/72—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/0822—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using key encryption key
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
- H04L9/3242—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving keyed hash functions, e.g. message authentication codes [MACs], CBC-MAC or HMAC
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- General Physics & Mathematics (AREA)
- Power Engineering (AREA)
- Mathematical Physics (AREA)
- Storage Device Security (AREA)
Abstract
用于对密码引擎的安全编程的技术包括具有密码引擎和一个或多个I/O控制器的计算设备。该计算设备使用处理器的安全隔离区支持来建立调用安全隔离区。调用隔离区对包括通道密钥的通道编程信息进行配置,并且以通道编程信息作为参数来调用处理器指令。处理器生成经打包的编程信息,包括经加密的通道密钥和消息认证码。经加密的通道密钥利用仅处理器已知的密钥来进行保护。调用隔离区向不可信软件提供经打包的编程信息,不可信软件以经打包的编程信息作为参数来调用处理器指令。处理器对经打包的编程信息进行解包和验证,并且然后对密码引擎进行编程。处理器生成可以由调用隔离区验证的经认证的响应。描述并要求保护其他实施例。
Description
相关申请的交叉引用
本申请要求享有于2015年12月22日提交的、题为“TECHNOLOGIES FOR SECUREPROGRAMMING OF A CRUPTOGRAPHIC ENGINE FOR TRUSED I/O”的美国实用专利申请序号14/979,002的优先权,并且其根据 35 U.S.C.§119(e)要求享有于2015年7月20日提交的、题为“CRYPTOGRAPHIC PROTECTION OF I/O DATA FOR DMA CAPABLE I/O CONTROLLERS”的美国临时专利申请序号62/194,763的优先权,要求享有于2015年7月21日提交的、题为“CRYPTOGRAPHIC PROTECTION OF I/O DATA FOR DMA CAPABLE I/O CONTROLLERS”的美国临时专利申请序号62/195,148的优先权,要求享有于2015年7月22日提交的、题为“TECHNOLOGIES FOR SECURE PROGRAMMING OF A COMMON CRUPTO ENGINE FOR TRUSTED I/O”的美国临时专利申请序号 62/195,595的优先权,并且要求享有于2015年7月22日提交的、题为“TECHNOLOGIES FOR SECURE COMMAND UNWRAPPING AND ERROR REPORTING FORTRUSTED I/O”的美国临时专利申请序号 62/195,600的优先权。
背景技术
为了安全性,典型的计算设备可以依靠软件代理(例如,防恶意软件代理)。然而,赶上用户设备上越来越多的恶意软件攻击是很困难的。为了对抗恶意软件威胁,存在通过在可信执行环境(TEE)内运行安全敏感的软件来保护安全敏感的软件的趋势。TEE提供了即使当系统的其他部分受到损害时也可以保护秘密的无菌环境。TEE的示例包括软件防护扩展 (SGX)、安全虚拟机(VM)以及融合安全引擎(CSE)。TEE虽然对于保护TEE内的秘密很有用,但是不能保护传送到安全“容器”内和/ 或传送到安全“容器”外的诸如用户和传感器数据的I/O数据。对于可信 I/O的安全要求根据使用情况和设备而变化,并且涉及保密性、完整性、活性以及重放保护的风格和组合。
在个人计算机平台上,保护I/O具有若干复杂性。为了保护用于给定用途的I/O,可能需要保护许多输入设备,因为平台通常具有经由不同I/O控制器连接的多个相同类别的设备,并且用户可能在使用期间动态地选择所连接的设备中的任一个。例如,当输入文本时,用户可以选择使用嵌入式键盘、USB键盘、或蓝牙(BT)键盘。用户还可以使用触摸屏来输入数据。这意味着所有键盘和触摸输入可能都需要被保护,以用于要求安全的文本输入的用途。另外,I/O设备可以由安全应用以及由常规应用使用,这意味着可能要求这些设备从受保护动态地切换到未加密(in-the-clear),并且反之亦然。
附图说明
本文描述的概念在附图中通过示例的方式而非通过限制的方式示出。为了简单且清楚地说明,图中所示的元素不一定按比例绘制。在认为适当的地方,附图标记在图中重复以指示对应或类似的元素。
图1是用于对中央密码引擎进行安全编程的计算设备的至少一个实施例的简化框图;
图2是图1的计算设备的密码引擎的至少一个实施例的简化框图;
图3是可以由图1的计算设备建立的环境的至少一个实施例的简化框图。
图4是可以由图1-3的计算设备建立的系统架构的至少一个实施例的简化框图;
图5是可以由图1-4的计算设备执行的用于对中央密码引擎进行安全编程的方法的至少一个实施例的简化流程图;
图6是可以由图1-4的计算设备的处理器执行的用于安全编程信息绑定的方法的至少一个实施例的简化流程图;
图7是示出图6的方法的至少一个实施例的伪代码;
图8A和图8B是可以由图1-4的计算设备的处理器执行的用于安全编程信息解包(unwrap)的方法的至少一个实施例的简化流程图;以及
图9是示出图8A和图8B的方法的至少一个实施例的伪代码。
具体实施方式
虽然本公开的概念易受各种修改和替代形式影响,但是其特定实施例已经通过附图中的示例示出,并且将在本文中详述。然而,应该理解的是,并非旨在将本公开的概念限制到所公开的特定形式,而是相反,旨在覆盖与本公开和所附权利要求一致的所有修改、等同物以及替代物。
在说明书中提及“一个实施例”、“实施例”、“说明性实施例”等指示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可以必须或可以不一定包括该特定特征、结构或特性。此外,这种短语不一定指代相同的实施例。此外,当结合实施例描述特定特征、结构或特性时,认为结合无论是否明确描述的其他实施例来实现这样的特征、结构或特性是在本领域技术人员的知识范围内的。另外,应该认识到,包括在“A、B以及C中的至少一个”形式的列表中的项目可以表示(A);(B);(C);(A 和B);(A和C);(B和C);或(A、B以及C)。类似地,以“A、B、或 C中的至少一个”形式列出的项目可以表示(A);(B);(C);(A和B); (A和C);(B和C);或(A、B以及C)。
所公开的实施例在一些情况下可以以硬件、固件、软件、或其任何组合来实现。所公开的实施例还可以被实现为由一个或多个暂时性或非暂时性机器可读(例如,计算机可读)存储介质携带或存储的指令,其可以由一个或多个处理器读取并执行。机器可读存储介质可以体现为用于存储或传输机器可读形式的信息的任何存储设备、机制、或其他物理结构(例如,易失性或非易失性存储器、媒体盘、或其他介质设备)。
在附图中,可以以特定的布置和/或排序来示出一些结构或方法特征。然而,应该认识到,可以不需要这样的特定布置和/或排序。而是,在一些实施例中,这样的特征可以以不同于说明性的图中所示的方式和/或次序来布置。另外,在特定的图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征或者这些特征可以与其他特征组合。
现在参考图1,在说明性实施例中,用于安全I/O的计算设备100包括处理器120、主存储器132、硬件密码引擎140以及与一个或多个I/O设备 146进行通信的一个或多个I/O控制器144,以及其他组件。在使用中,密码引擎140提供对经由直接存储器存取(DMA)事务在平台I/O控制器144 与存储器132之间传送的数据的即时(on-the-fly)加密和解密。每个DMA 事务利用通道ID(CID)来进行标记,通道ID(CID)表示与特定I/O设备 146或I/O设备146的集合相关联的数据流。密码引擎140使用CID来可靠地识别必须受到保护的事务,取回对应的加密密钥,并且对DMA数据执行适当的密码操作。由可信软件使用处理器120的一个或多个专用指令例如利用通道信息和相关联的加密密钥对密码引擎140进行编程,以生成经打包的编程信息。可信软件将经打包的编程信息提供给不可信软件,例如,内核模式驱动程序。不可信软件使用处理器120的一个或多个专用指令来调用解包引擎以对编程信息进行解包并对密码引擎140进行编程。通过使用专用处理器120指令来对编程信息进行打包,计算设备100可以确保仅可信软件对密码引擎140进行编程。通过允许不可信软件调用解包引擎,计算设备100允许系统软件(例如,操作系统和/或VMM)管理对密码引擎140的编程。另外,通过利用处理器120执行打包和/或解包,计算设备 100可以降低密码引擎140的复杂度。
计算设备100可以体现为能够执行本文描述的功能的任何类型的计算或计算机设备,包括但不限于计算机、台式计算机、工作站、服务器、膝上型计算机、笔记本计算机、平板计算机、移动计算设备、可穿戴计算设备、网络器具、web器具、分布式计算系统、基于处理器的系统、和/或消费者电子设备。如图1所示,计算设备100说明性地包括处理器120、输入 /输出子系统128、存储器132、数据存储设备134以及通信电路136。当然,在其他实施例中,计算设备100可以包括其他或附加组件,例如,在台式计算机中常见地发现的那些组件(例如,各种输入/输出设备)。另外,在一些实施例中,说明性组件中的一个或多个组件可以并入另一组件,或以其他方式形成另一组件的一部分。例如,在一些实施例中,存储器132或其部分可以并入处理器120中。
处理器120可以体现为能够执行本文描述的功能的任何类型的处理器。处理器120可以体现为单核或多核处理器、数字信号处理器、微控制器、或者其他处理器或处理/控制电路。如所示出的,处理器120可以包括硬件虚拟化支持122、安全隔离区(enclave)支持124以及密码引擎编程支持 126。
硬件虚拟化支持122支持计算设备100对操作系统、应用以及其他软件的虚拟化执行。硬件虚拟化支持122可以通过提供以下两种执行模式来包括虚拟机扩展(VMX)支持:VMX根模式和VMX非根模式。VMX根模式允许执行软件对计算设备100及其硬件资源具有广泛的控制。相反地,管理程序、虚拟机监视器(VMM)、或主机操作系统(OS)可以在VMX 根模式下执行。VMX非根模式限制对特定硬件指令的存取,同时仍然实现处理器120的普通环/特权系统。一个或多个客体OS可以在VMX非根模式下执行。这些客体OS可以在环零中执行,类似于不进行虚拟化地执行。硬件虚拟化支持122还可以支持扩展页表(EPT),其可以体现为硬件辅助的第二级页面地址转换。硬件虚拟化支持122可以体现为例如VT-x技术。
安全隔离区支持124允许处理器120建立被称为安全隔离区的可信执行环境,其中执行代码可以被测量、验证和/或以其他方式确定为是可信的。另外,可以对包括在安全隔离区中的代码和数据进行加密,或以其他方式保护其免于被在安全隔离区之外执行的代码存取。例如,包括在安全隔离区中的代码和数据可以在被执行时或者在被存储于处理器120的某个受保护的高速缓存存储器中时由处理器120的硬件保护机制进行保护。包括在安全隔离区中的代码和数据可以在存储于共享高速缓存或主存储器132中时被加密。安全隔离区支持124可以体现为允许处理器120在存储器132 中建立一个或多个安全隔离区的一组处理器指令扩展。例如,安全隔离区支持124可以体现为软件防护扩展(SGX)技术。
密码引擎编程支持126允许处理器120对密码引擎140编程以提供对 I/O数据的密码保护。特别地,处理器120可以启用或禁用某些I/O通道的加密,并且可以将加密密钥安全地提供给密码引擎140。密码引擎编程支持 126可以体现为一个或多个专用处理器指令(例如,指令EBINDTIO、UNWRAP或其他指令)和处理器120的相关联的硬件、微代码、固件、或其他组件。
存储器132可以体现为能够执行本文描述的功能的任何类型的易失性或非易失性存储器或数据存储装置。在操作中,存储器132可以存储在计算设备100的操作期间使用的各种数据和软件,例如,操作系统、应用、程序、库以及驱动程序。存储器132经由I/O子系统128可通信地耦合到处理器120,I/O子系统128可以体现为用于促进与处理器120、存储器132 以及计算设备100的其他组件的输入/输出操作的电路和/或组件。例如,I/O 子系统128可以体现为或以其他方式包括存储器控制器中心、输入/输出控制中心、平台控制器中心、集成控制电路、固件设备、通信链路(即,点对点链路、总线链路、电线、电缆、光导、印刷电路板迹线等)和/或用于促进输入/输出操作的其他组件和子系统。I/O子系统128还可以包括安全路由支持130。安全路由支持130包括硬件支持,用于确保在流氓软件的影响下I/O数据无法在结构128中误传。安全路由支持130可以与密码引擎140 一起用于提供对I/O数据的密码保护。在一些实施例中,I/O子系统128可以形成片上系统(SoC)的一部分,并且与处理器120、存储器132以及计算设备100的其他组件一起并入到单个集成电路芯片上。
数据存储设备134可以体现为被配置用于短期或长期存储数据的任何类型的设备或多个设备,例如,存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器、或其他数据存储设备。在一些实施例中,数据存储设备 134可以用于存储一个或多个安全隔离区的内容。安全隔离区的内容在由数据存储设备134存储时可以被加密以防止未经授权的存取。
计算设备100的通信电路136可以体现为能够通过网络实现计算设备 100与其他远程设备之间的通信的任何通信电路、设备、或其集合。通信电路136可以被配置为使用任何一种或多种通信技术(例如,有线或无线通信)和相关联的协议(例如,以太网、WiMAX等)来实现这种通信。
在一些实施例中,计算设备100可以包括安全引擎138,该安全引擎 138可以体现为能够向计算设备100提供安全相关的服务的任何(多个)硬件组件或电路。特别地,安全引擎138可以包括能够独立且安全地从处理器120执行固件和/或其他代码的微处理器、微控制器、或其他嵌入式控制器。因此,安全引擎138可以用于建立与由处理器120执行的代码分离的可信执行环境。安全引擎138可以通过诸如主机嵌入式控制器接口(HECI) 的专用总线与处理器120和/或计算设备100的其他组件进行通信。安全引擎138还可以提供对计算设备100的远程配置、控制、或管理。在说明性实施例中,安全引擎138体现为并入计算设备100的片上系统(SoC)中的融合安全和管理性引擎(CSME)。在一些实施例中,安全引擎138可以体现为管理性引擎、带外处理器、可信平台模块(TPM)、或者其他安全引擎设备或设备集合。此外,在一些实施例中,安全引擎138还能够独立于计算设备100的状态(例如,独立于主处理器120的状态)使用通信电路136 或专用通信电路进行通信,也被称为“带外”通信。
密码引擎140可以体现为能够执行本文描述的功能的任何微控制器、微处理器、功能块、逻辑、或者其他电路或电路集合。如下面进一步描述的,密码引擎140可以在对存储器132进行的一个或多个直接存储器存取 (DMA)操作中加密和/或解密由I/O控制器144读取或写入的I/O数据。密码引擎140包括内部通道标识符(CID)表142,密码引擎140使用该表来动态地识别要保护的(多个)DMA通道。CID表142可以由可信软件来控制和/或编程,例如,使用处理器120的密码引擎编程支持126。CID表 142的加密密钥和/或其他秘密信息不可用于不可信软件。在一些实施例中,密码引擎140可以与I/O子系统128和/或处理器120一起并入计算设备100 的片上系统(SoC)中。
类似地,I/O控制器144可以体现为能够执行本文描述的功能的任何嵌入式控制器、微控制器、微处理器、功能块、逻辑、或者其他电路或电路集合。在一些实施例中,I/O控制器144中的一个或多个可以嵌入到计算设备100的另一组件中,例如,I/O子系统128和/或处理器120。另外或可替代地,I/O控制器144中的一个或多个可以经由诸如PCI快速(PCIe)或其他I/O连接的扩展总线连接到I/O子系统128和/或处理器120。如下面进一步描述的,I/O控制器144例如通过外围通信总线(例如,USB、蓝牙等) 与一个或多个I/O设备146进行通信。I/O设备146可以体现为任何I/O设备,例如,人机接口设备、键盘、鼠标、触摸屏、麦克风、照相机以及其他输入设备,以及显示器和其他输出设备。如上面描述的,使用被称为通道标识符(CID)的标识符来唯一地标识I/O控制器144和相关联的DMA 通道。每个I/O控制器144可以用每个DMA事务断言适当的CID(例如,作为事务层分组(TLP)前缀的一部分),以唯一地识别DMA事务的源并提供活性保护。CID还实现I/O与不同的设备146的隔离。
现在参考图2,200以高级别示出了密码引擎140的硬件。如所示出的,CE硬件140实现CID表142和请求存储体(bank)202。在一些实施例中,CID表142可以体现为内容可寻址存储器(CAM)142。CID表142 加载有与可信通道相关联的通道信息,例如,CID、可信通道的方向(例如,输入或输出)、跳过长度、密码模式以及相关联的通道密钥。CID是平台实现定义的值。例如,CID可以包括控制器标识符字段和通道编号字段。相应字段的大小及其被赋的值可以是平台100和/或控制器144相关的。因此,应当理解,CID表142中所示的字段是说明性的,并且在一些实施例中,附加字段可以与CID表142中的每个CID条目一起存储,这可以允许密码引擎140管理DMA事务。
在使用中,密码引擎140探查由I/O控制器144生成的针对存储器132 的所有DMA事务。关于去往或来自能够参与可信I/O的设备146的每次事务,密码引擎140参考CID表142以在CID表142中找到与DMA通道相对应的CID。匹配指示通道当前受到保护,并且密码引擎140应当使用与该通道相关联的通道密钥来保护写入到存储器132的数据和/或从存储器 132读取的数据(取决于通道的方向)。请求存储体202表示一组寄存器,其接收来自不可信软件的用于对通道进行编程的经解包的通道编程信息。如下面描述的,请求存储体202可以经由边带接口来接收来自处理器120 的经解包的通道编程,该边带接口对于由计算设备100执行的软件是不可访问的。
现在参考图3,在说明性实施例中,计算设备100在操作期间建立环境 300。说明性环境300包括安全编程模块302、绑定模块304、不安全编程模块306以及解包引擎模块308。环境300的各种模块可以体现为硬件、固件、微代码、软件、或其组合。因此,在一些实施例中,环境300的模块中的一个或多个模块可以体现为电路或电子设备的集合(例如,安全编程电路302、绑定电路304、不安全编程电路306、和/或解包引擎电路308)。应该理解,在这样的实施例中,安全编程电路302、绑定电路304、不安全编程电路306、和/或解包引擎电路308中的一个或多个可以形成处理器120、 I/O子系统128、密码引擎140、和/或计算设备100的其他组件的一个或多个的一部分。另外,在一些实施例中,说明性模块中的一个或多个可以形成另一模块的一部分和/或说明性模块中的一个或多个可以是彼此独立的。
安全编程模块302被配置为利用处理器120的安全隔离区支持124来建立被称为调用隔离区的安全隔离区。安全编程模块302还被配置为由调用隔离区配置通道编程信息。通道编程信息包括待编程到密码引擎140的通道标识符和通道密钥。安全编程模块302还被配置为由调用隔离区以通道编程信息作为参数来调用处理器120的处理器指令。安全编程模块302 还可以被配置为由调用隔离区将经打包的编程信息提供给计算设备100的不可信内核模式组件。在一些实施例中,安全编程模块302还可以被配置为响应于将经打包的编程信息提供给不可信内核模式组件,由调用隔离区接收来自不可信内核模式组件的经认证的响应;以及利用通道编程信息中的通道密钥和随机一次使用数(nonce)来验证经认证的响应。
绑定模块304被配置为响应于由调用隔离区调用处理器指令,由处理器120基于通道编程信息来生成经打包的编程信息。经打包的编程信息包括经加密的通道密钥和在通道编程信息上生成的消息认证码。
不安全编程模块306被配置为由不可信内核模式组件接收来自调用隔离区的经打包的编程信息,并且由不可信内核模式组件以经打包的编程信息作为参数来调用处理器120的处理器指令。如上面描述的,经打包的编程信息包括待编程到密码引擎140的经加密的通道密钥。不安全编程模块 306还可以被配置为由不可信内核模式组件读取由处理器120生成的经认证的响应,并向调用隔离区提供该经认证的响应。
解包引擎模块308被配置为响应于由不可信内核模式组件调用处理器指令而由处理器120对经打包的编程信息进行解包以生成通道编程信息。如所描述的,通道编程信息包括未加密的通道密钥。解包引擎模块308还被配置为响应于验证通道编程信息而验证通道编程信息并且将未加密的通道密钥编程到密码引擎140。解包引擎模块308还可以被配置为确定经打包的编程信息是否潜在地被重放,并且如果是,则指示解包错误。解包引擎模块308还被配置为由处理器120确定是否满足一个或多个目标特定的编程检查,并且如果否,则指示错误。解包引擎模块308还被配置为响应于验证通道编程信息而由处理器120基于编程状态来生成经认证的响应。
现在参考图 4,400示出了可以由计算设备100建立的系统架构。系统架构可以包括不可信I/O堆栈,其包括应用402、设备驱动程序404、过滤器驱动程序406以及总线驱动程序408。不可信I/O堆栈可以经由密码引擎 140接收来自I/O控制器144的不受保护的(即,明文的)I/O数据,并且正常地处理该I/O数据。系统架构还可以包括可信I/O堆栈,其包括应用隔离区410和设备驱动程序隔离区412。可以使用处理器120的安全隔离区支持124来建立隔离区410、412中的每一个,并且因此其是可信的。如所示出的,隔离区410、412中的每一个可以设置有与一个或多个DMA通道相关联的加密密钥。因此,应用隔离区410和/或设备驱动程序隔离区412可以安全地对经由密码引擎140从I/O设备146生成的安全I/O数据进行解密和处理。如所示出的,每个安全隔离区410、412可以经由不可信I/O堆栈的组件(例如,总线驱动程序408和/或过滤器驱动程序406)接收安全I/O 数据。特别地,I/O控制和路由可以由不可信I/O堆栈执行,并且因为安全 I/O数据的有效载荷被加密,所以安全I/O数据保持受到保护。因此,不可信I/O堆栈不需要被包括计算设备100的可信代码库中。在一些实施例中,包括过滤器驱动程序406、总线驱动程序408和/或其他不可信I/O组件的不可信I/O堆栈可以被重新使用或以其他方式与计算设备100的普通操作系统共享。
如所示出的,系统架构400还包括密码引擎隔离区414、密码引擎驱动程序416以及解包引擎418,其可以用于对密码引擎140进行编程。密码引擎隔离区414可以体现为用户级(例如,环3)代码,其受到处理器120的安全隔离区支持124的保护,并且因此可以是可信的。密码引擎隔离区414 维护或以其他方式访问与一个或多个DMA通道相关联的加密密钥。密码引擎隔离区414可以向可信I/O堆栈提供加密密钥。密码引擎隔离区414还可以使用处理器120的密码引擎编程支持126对密码引擎140进行编程。特别地,密码引擎隔离区414可以执行一个或多个专用处理器指令以准备包括经打包的通道编程信息的二进制大对象,经打包的通道编程信息包括可以用于对密码引擎140进行编程的经打包的加密密钥。密码引擎隔离区414 可以将二进制大对象提供给密码引擎驱动程序416,其可以体现为内核级的不可信软件组件。密码引擎驱动程序416将二进制大对象提供给解包引擎 418,该解包引擎418可以对二进制大对象进行解包和验证,并且如果该二进制大对象被验证,则将通道编程信息编程到密码引擎140。因此,密码引擎驱动程序416可以允许操作系统或计算设备100的其他控制软件来管理密码引擎140的编程,而不要求操作系统具有对DMA通道的明文加密密钥的访问权。在说明性实施例中,解包引擎418由处理器120的硬件和/或微代码资源提供;然而,在一些实施例中,解包引擎418的功能可以由处理器120的非核心组件(即,处理器非核心)、密码引擎140、和/或计算设备 100的其他组件来执行。
现在参考图5,在使用中,计算设备100可以执行用于对密码引擎140 进行安全编程的方法500。方法500可以由计算设备100的硬件、固件、处理器微代码、软件、或其他执行资源来执行。方法500开始于框502,其中安全隔离区生成用于对DMA通道进行编程的密钥。例如,在一些实施例中,密码引擎隔离区(CEE)414可以生成用于对DMA通道进行编程的密钥。密钥可以包括用于保护通过DMA通道传输的I/O数据的通道密钥。因此,安全隔离区还可以将通道密钥提供给计算设备100的可以访问受保护的I/O 数据的其他可信组件,例如,应用隔离区410和/或设备驱动程序隔离区412。安全隔离区可以保留通道编程密钥以验证由密码引擎140生成的经认证的响应,如下面进一步描述的。
在框504中,调用安全隔离区(例如,CEE 414)准备要用于对DMA 通道进行编程的通道编程信息。通道编程信息可以包括如在框502中确定的加密密钥以及其他编程信息,例如,待编程的DMA通道的通道标识符 (CID)、编程命令、可以用于认证和重放保护的随机一次使用数、以及其他编程信息。为了准备编程信息,调用隔离区可以例如在包括编程信息的存储器中分配结构,也称为“二进制大对象”。在一些实施例中,编程信息可以以被称为BIND_STRUCT的结构来存储,BIND_STRUCT可以包括下面如表1描述的字段。
表1绑定密钥结构(BIND_STRUCT)
BIND_STRUCT中的绑定目标ID(BTID)字段由调用隔离区设置,该调用隔离区最终将调用处理器指令以编程到目标设备。目标设备说明性地是密码引擎140,但是在一些实施例中,计算设备100可以支持替代的目标设备。BTID字段被设置为目标设备(例如,密码引擎140)的标识符,以使得解包引擎418能够将编程指引到期望的目标设备。在说明性实施例中, CEE 414设立BTID字段,以包括密码引擎140的目标ID。应当理解,在一些实施例中,编程信息可以绑定到除了密码引擎140之外的端点。
绑定目标安全版本号(BTSVN)字段由调用实体设立,并且包含用于在端点设备(例如,密码引擎140)上运行的任何固件的安全版本号(SVN)。在一些实施例中,计算设备100的密码引擎140可以不包括任何固件,并且因此BTSVN字段必须为零(MBZ)。绑定目标策略(BTPOLICY)字段由调用隔离区设立,并且包含必须应用于由目标设备(例如,密码引擎140)处理的数据的策略。在一些实施例中,密码引擎140可能不支持任何定义的策略,并且因此该字段必须是零(MBZ)。
通道ID(CID_IO)字段由调用隔离区设立,并且包含调用隔离区尝试进行编程的通道的通道标识符和方向(即,输入或输出)。调用隔离区使用 CID_IO字段对受可信I/O保护的DMA通道的通道标识符进行编程。在一些实施例中,CID_IO可以包括多于四个字节。TKEY字段由调用隔离区设立,并且包含待编程到目标设备(例如,密码引擎140)的加密密钥。该密钥可以用于保护通过DMA通道传送的I/O数据。
随机一次使用数字段由调用隔离区设立,并且包含由密码引擎140用于生成经认证的响应的随机一次使用数,如下面进一步描述的。经认证的响应可以由调用隔离区用于验证对密码引擎140的编程尝试是成功的。
命令(COMMAND)字段由调用隔离区设立,并且指示要针对目标设备(例如,密码引擎140)进行的编程的类型。密码引擎140可以支持一个或多个命令,包括保护通道(CH_PROTECT)、对通道解除保护 (CH_UNPROTECT)、利用不同密钥对通道重新编程(CH_REPROGRAM)、或查询与通道相关联的密钥(QUERY_KEY)。
如所示出的,BIND_STRUCT结构还可以包括由处理器120的硬件设立的字段,包括序列号(SEQID)和消息认证码(MAC)。下面进一步描述由处理器120生成这些字段。当然,BIND_STRUCT结构示出了通道编程信息的一个潜在的实施例,并且在其他实施例中编程信息可以以不同格式存储。例如,在一些实施例中,编程信息可以包括可变数量的目标特定的数据和/或经打包的数据,以及可以由处理器120解译的相关联的尺寸字段。
仍然参考图5,在框506中,调用隔离区调用处理器120的处理器指令以生成经打包的编程信息。调用隔离区可以将包括通道编程密钥作为参数的BIND_STRUCT传递给处理器指令。处理器120对通道编程信息的密钥进行加密以生成经加密的密钥。处理器120可以使用仅处理器120和解包引擎418已知的密钥打包密钥(KWK)来对密钥进行加密。处理器120可以在用于重放保护的经打包的编程信息中生成并包括序列号,并且处理器 120可以在通道编程信息上生成MAC以用于完整性保护。处理器120可以修改BIND_STRUCT以包含经打包的编程信息。在一些实施例中,在框508 中,调用隔离区可以调用EBINDTIO指令。EBINDTIO指令可以体现为用户级(例如,环3)指令。下面结合图6描述用于执行EBINDTIO指令的方法的一个潜在的实施例。
在框510中,调用隔离区将经打包的编程信息提供给计算设备的不可信内核模式软件,例如,密码引擎驱动程序416。因为经打包的编程信息已经被加密并绑定到密码引擎140,所以通道编程信息中的敏感数据(例如,通道编程密钥)可以不由不可信软件访问。不可信软件可以检查经打包的编程信息中的不受保护的字段(例如,CID_IO字段和COMMAND字段) 以确定是否允许编程尝试。因此,诸如密码引擎驱动程序416的内核模式软件可以在不被信任或以其他方式能够访问受保护的I/O数据的情况下管理密码引擎140的编程。
在框512中,不可信软件(例如,密码引擎驱动程序416)调用处理器 120的处理器指令以对编程信息进行解包并安全地对DMA通道进行编程。例如,密码引擎驱动程序416可以调用处理器指令,该处理器指令使得解包引擎418(例如,处理器120和/或密码引擎140)对通道编程密钥进行解密,验证通道编程信息,并且以其他方式对DMA通道进行编程。为了对密码引擎140进行编程,解包引擎418可以将通道编程信息复制到CID表142 的适当条目中,清除CID表142中的由通道编程信息识别出的条目,或者以其他方式修改CID表142。在编程之后,解包引擎418和/或密码引擎140 生成指示编程状态和/或解包状态的经认证的响应。在一些实施例中,在框 514中,不可信软件调用处理器120的UNWRAP指令。UNWRAP指令可以体现为内核级(例如,环0)指令。在一些实施例中,UNWRAP指令可以生成虚拟机退出(VMExit),允许VMM和/或管理程序对UNWRAP指令的虚拟化进行管理。下面结合图8A和图8B描述用于执行UNWRAP指令的方法的一个潜在的实施例。
在框516中,不可信软件(例如,密码引擎驱动程序416)从存储器 132读取经认证的响应,并将经认证的响应返回到调用隔离区(例如,返回到CEE 414)。不可信软件还可以评估经认证的响应中的未加密字段,例如,编程状态码和/或解包状态码。在框518中,调用隔离区验证经认证的响应。验证经认证的响应允许调用隔离区确定密码引擎140是否成功地完成了编程请求。因此,在验证经认证的响应之后,调用隔离区(例如,CEE 414) 可以例如允许应用隔离区410和/或设备驱动程序隔离区412使用安全DMA 通道。在一些实施例中,在框520中,调用隔离区可以使用包括在原始通道编程信息中的通道编程密钥和随机一次使用数来验证经认证的响应。例如,经认证的响应可以包括可以使用通道编程密钥和随机一次使用数来进行验证的编程状态上的消息认证码。在验证经认证的响应之后,方法500循环回到框502,其中计算设备100可以对附加的DMA通道进行编程。
现在参考图6,在使用中,计算设备100可以执行用于安全编程信息绑定的方法600。方法600可以由处理器120的硬件、固件、处理器微代码、或其他执行资源执行。因此,方法600可以具有硬件信任根(即,处理器 120)。方法600开始于框602,其中计算设备100调用ENBINDTIO处理器指令。如上面结合图5的框506所描述的,诸如密码引擎隔离区(CEE)414的安全隔离区可以调用EBINDTIO指令。调用隔离区将通道编程信息作为参数提供给EBINDTIO指令。例如,包括通道编程信息的指向 BIND_STRUCT的指针可以在处理器120的寄存器(例如,RCX)中传递。在一些实施例中,响应于EBINDTIO指令的调用,处理器120可以例如通过确定调用隔离区的一个或多个属性是否被设置来验证特定隔离区(例如, CEE 414)已经调用了处理器。
在框604中,处理器120将加密密钥打包并将加密密钥绑定到解包引擎418。特别地,处理器120对通道编程密钥进行加密并生成消息认证码 (MAC)以对通道编程信息进行完整性保护。在框606中,处理器120针对打包和绑定过程创建初始化向量(IV)。处理器120可以通过使用内部维护的单调计数器来在每个EBINDTIO调用时生成序列ID。序列ID用于构造用于密码打包的初始化向量。构造初始化向量可以如AES-GCM标准所描述地执行。处理器120还将序列ID存储在BIND_STRUCT的SEQID字段中。SEQID字段可以用作调用计数器,以指示计算设备100上的 EBINDTIO调用的计数,这可以用于重放保护,如下面进一步描述的。
在框608中,处理器120使用密钥打包密钥(KWK)来加密通道编程密钥以创建经加密的通道密钥。如上面描述的,KWK仅是处理器120和解包引擎418已知的。在说明性实施例中,处理器120使用AES-GCM算法来加密通道密钥。当然,处理器120可以使用任何适当的加密算法来加密通道密钥。处理器120可以将经加密的通道密钥存储在BIND_STRUCT对象的TKEY字段中。在框610中,处理器120在经加密的通道密钥和其他 BIND_STRUCT字段上生成消息认证码(MAC)。例如,在说明性实施例中,在BIND_STRUCT字段BTID、BTSVN、BTPOLICY、CID_IO、NONCE、 SEQID、COMMAND以及经加密的通道编程密钥上生成MAC。MAC存储在BIND_STRUCT的MAC字段中,并且允许解包引擎418在转换通过计算设备100的不可信软件时验证经打包的编程信息未被修改。
在框612中,处理器120从执行EBINDTIO指令返回。例如,处理器 120可以恢复执行调用隔离区(例如,CEE 414)的下一指令。在执行 EBINDTIO指令之后,存储器132包括经打包的编程信息。例如, BIND_STRUCT的SEQID、TKEY以及MAC字段可以包括在执行 EBINDTIO指令期间由处理器120存储的值。在返回之后,方法600完成。
现在参考图7,伪代码700示出了EBINDTIO指令的一个潜在的实施例。伪代码700可以示出例如与EBINDTIO指令相关联的处理器120的微代码。如所示出的,处理器120通过对64位单调计数器进行采样来生成序列ID,根据序列ID生成初始化向量,并且将序列ID存储在BIND_STRUCT 中。处理器120在BIND_STRUCT的若干字段上生成认证报头,并且然后使用KWK、初始化向量、认证报头以及通道编程密钥来执行AES-GCM认证的加密操作。处理器120接下来将通过经认证的加密操作产生的密文和消息认证码存储到BIND_STRUCT中。
现在参考图8A和图8B,在使用中,计算设备100可以执行用于安全编程信息解包的方法800。方法800可以由处理器120的硬件、固件、处理器微代码、或其他执行资源来执行。方法800开始于框802,其中计算设备 100调用UNWRAP处理器指令。如上面结合图5的框512所描述的,诸如密码引擎驱动程序416的不可信内核模式(例如,环0)软件实体可以调用UNWRAP指令。引用(call)的不可信软件将经打包的编程信息作为参数提供给UNWRAP指令。例如,指向包括经打包的编程信息的 BIND_STRUCT的指针可以在处理器120的寄存器(例如,RCX)中传递。
在框804中,处理器120将包括在经打包的编程信息中的调用计数器与内部调用计数器进行比较。例如,处理器120可以将包括经打包的编程信息的BIND_STRUCT的SEQID字段与内部调用计数器进行比较。内部调用计数器被初始化为零,并且可以响应于成功调用UNWRAP指令而递增,如下面进一步描述的。在框806中,处理器120确定与经打包的编程信息一起接收到的调用计数器是否大于内部调用计数器。如果否,则解包尝试可能是使用经打包的编程信息的重放攻击。如果与经打包的编程信息一起接收到的调用计数器大于内部调用计数器,则方法800前进到下面描述的框810。如果与经打包的编程信息一起接收到的调用计数器不大于内部调用计数器,则方法800分支到框808。
在框808中,处理器120指示解包失败。例如,处理器120可以在存储器132中的响应结构中写入适当的错误代码。在一些实施例中,响应可以存储于被称为UNWRAP_RESPONSE_STRUCT的结构中,该结构可以包括如下面的表2描述的字段。不可信软件(例如,密码引擎驱动程序416) 可以为存储器中的UNWRAP_RESPONSE_STRUCT分配空间,并且可以将指向UNWRAP_RESPONSE_STRUCT的指针作为参数传递给UNWRAP指令。为了指示由于可疑重放攻击的解包代码,UNWRAP_STATUS字段可以被设置为“10”。在指示解包失败之后,方法800向前分支到框830,其中处理器120从执行UNWRAP指令返回,并且方法800完成。
表2 UNWRAP_RESPONSE_STRUCT
返回参考框806,如果经打包的编程信息的调用计数器大于内部调用计数器,则方法800前进到框810。在框810中,处理器120对经打包的编程信息进行解包并恢复通道编程密钥。处理器120可以使用密钥打包密钥 (KWK)来解密BIND_STRUCT的TKEY字段,该KWK仅由处理器120 和解包引擎418(其在说明性实施例中也是处理器120)已知。在说明性实施例中,处理器120使用AES-GCM算法来解密通道密钥。当然,处理器 120可以使用任何适当的密码算法来解密通道密钥。
在框812中,处理器120验证经打包的编程信息上的MAC。例如,处理器120可以使用经认证的加密算法(例如,AES-GCM)来验证通道密钥和其他BIND_STRUCT字段上的MAC。在一些实施例中,处理器120可以验证BIND_STRUCT字段BTID、BTSVN、BTPOLICY、CID_IO、NONCE、SEQID、COMMAND以及通道密钥上的MAC。当然,处理器120可以在转换通过不可信软件时使用任何适当的密码算法来验证经打包的编程信息尚未被修改。在框814中,处理器120确定MAC是否被验证。如果否,则方法800分支到框808,其中处理器120指示解包失败,如上面描述的。特别地,处理器120可以通过将UNWRAP_RESPONSE_STRUCT的 UNWRAP_STATUS字段设置为“00”来指示MAC失败。在一些实施例中,如果在另一解包请求正在进行的同时调用UNWRAP指令,则处理器120 还可以指示解包失败,通过将UNWRAP_RESPONSE_STRUCT的 UNWRAP_STATUS字段设置为“01”以指示解包引擎418正忙。例如, UNWRAP指令可以维持锁定以保护UNWRAP指令所使用的共享状态。在指示解包失败之后,方法800分支到框830,其中处理器120从执行 UNWRAP指令返回,并且方法800完成。
返回参考框814,如果MAC被验证,则方法800前进到框816,其中处理器120利用经打包的编程信息的调用计数器来更新其内部调用计数器。例如,处理器120可以将内部调用计数器更新为与BIND_STRUCT对象的 SEQID字段的值匹配。如上面描述的,更新内部调用计数器可以允许处理器120检测所尝试的重放攻击。
在框818中,处理器120评估与所请求的编程通道编程命令相关联的一个或多个目标特定的检查。目标特定的检查可以例如通过检查通道编程信息的一致性和/或正确性来验证保护计算设备100免受恶意攻击。由处理器120执行目标特定的检查可以降低编程目标的复杂度和/或成本。在说明性实施例中,执行的检查特定于密码引擎140;然而,在其他实施例中,检查可以适合于作为编程尝试的目标的任何其他组件。
在一些实施例中,在框820中,处理器120可以针对用于将DMA通道编程为安全的命令来执行特定于密码引擎140的检查。处理器120可以检查与经打包的编程信息(例如,BIND_STRUCT对象)一起接收到的通道 ID当前不存在于密码引擎140的CID表142中。换言之,处理器120可以检查正在被编程的DMA通道并非已经是安全的。另外或可替代地,处理器120可以检查CID表142中是否存在用于编程请求的可用条目;也就是说,处理器120可以检查CID表142是否已满。为了执行这些检查,处理器120 可以基于接收到的通道编程请求来对CID表142的状态进行建模。在处理器120上对状态进行建模可以降低密码引擎140硬件的复杂度。
在一些实施例中,在框822中,处理器120可以针对用于将DMA通道编程为不安全的命令来执行特定于密码引擎140的检查。处理器120可以例如通过确保接收到的CID和方向(例如,输入和/或输出)与CID表142 中的CID和方向组合相匹配,来检查与经打包的编程信息(例如, BIND_STRUCT对象)一起接收到的通道ID当前被编程为安全。另外或可替代地,处理器120可以检查与经打包的编程信息一起传递的通道编程密钥与当前通道密钥相同。通过要求相同的通道编程密钥,处理器120可以确保将DMA通道编程为安全的相同隔离区(例如,CEE 414)同样将DMA 通道编程为不安全。如上面描述的,为了执行这些检查,处理器120可以基于接收到的通道编程请求来对CID表142的状态进行建模。
在框824中,处理器120基于密码引擎140的编程状态来生成经认证的响应。所生成的经认证的响应可以具有两个元素:解包状态和加密响应,解包状态用于指示EBIND二进制大对象的解包的状态,密码响应是表示 CID表142的编程状态的经加密的/经认证的响应。密码响应允许调用隔离区(例如,CEE 414)验证不可信软件实际上通过引用UNWRAP启动密码引擎140编程。例如,如上面描述的,经认证的响应可以由 UNWRAP_RESPONSE_STRUCT表示,其中UNWRAP_STATUS字段表示解包状态,并且AUTHENTICATED_RSP字段表示编程状态。AUTHENTICATED_RSP字段可以包括一个或多个状态码或其他预先定义的值。例如,AUTHENTICATED_RSP可以包括:用于指示编程成功的 CH_PROG_SUCCES,用于指示没有CID表142条目可用于编程的 CH_PROG_CAMID_UNAVAILABLE,用于指示请求变得安全的DMA通道已经安全的CH_ALREADY_PROG,用于指示要求变得不安全的通道ID未被使用的CH_PROG_CID_UNAVAILABLE,和/或用于指示请求的通道密钥与当前通道密钥不匹配的CH_PROG_CUR_KEY_MISMATCH。
为了构造经加密的响应,每个编程尝试可以生成状态和可选数据。在说明性实施例中,用于密码引擎140的命令中的任何命令都不返回数据;然而,应该理解,在一些实施例中,可以返回诸如秘密密钥的数据。状态指示编程的状态,并且可以由不可信软件以及调用隔离区二者使用。因此,为了允许不可信软件和调用隔离区二者检查编程状态,编程状态可以是受完整性保护但未加密的。当然,可选数据可以是完整性保护的和加密的二者,防止不可信软件对数据进行访问。
在一些实施例中,在框826中,可以使用由调用隔离区提供的 BIND_STRUCT结构中的随机一次使用数作为初始化向量,并且使用包括在编程尝试中的加密密钥,在编程状态上生成经认证的响应的消息认证码。因此,即使当将DMA通道编程为不安全时,调用隔离区也包括每个编程尝试的密钥(例如,在BIND_STRUCT的TKEY字段中)。生成的响应还包括经加密的响应数据和状态上的MAC。如上面描述的,在接收到该响应时,调用隔离区使用其在原始编程尝试中包括的随机一次使用数和密钥来验证 MAC。MAC的成功验证指示编程尝试通过UNWRAP指令被发送到密码引擎140,因为只有解包引擎418可以对EBIND_STRUCT进行解包,恢复 UNWRAP包括的密钥,并且使用包括在原始编程尝试中的该密钥来生成 MAC。所使用的机制还保证响应不会被不可信软件修改而检测不到,因为如果存在修改经认证的响应的尝试,则由调用隔离区进行的MAC验证将失败。
在框828中,处理器120确定通道编程是否成功。例如,处理器120 可以确定BIND_STRUCT对象是否被成功解包并且针对所请求的命令的目标特定的检查是否被满足。如果通道编程不成功,则方法800前进到框830,其中处理器120从执行UNWRAP指令返回,并且方法800完成。如上面描述的,UNWRAP_RESPONSE_STRUCT对象包括指示编程不成功的经认证的响应。
返回参考框828,如果处理器120确定通道编程是成功的,则方法800 分支到图8B所示的框832。在框832中,处理器120在CID表142中找到适当的条目以用于编程。如上面描述的,处理器120可以基于接收到的通道编程请求来对CID表142的状态进行建模。例如,处理器120可以将CID 表142的内容的副本维持在存储器中,并且响应于成功的编程尝试而更新副本。对于将通道编程为安全的请求,处理器120可以针对可用条目对CID 表142的模型进行搜索。对于将通道编程为不安全的请求,处理器120可以针对对应于指定的CID的条目对CID表142的模型进行搜索。
在框834中,处理器120将经解包的编程信息编程到密码引擎140的CID表142中的选定条目。处理器120可以使用任何技术来编程密码引擎 140。例如,处理器120可以使用处理器120执行的软件不可用的边带接口来对由密码引擎140维护的请求存储体202的一个或多个寄存器进行设置。在编程之后,基于所请求的命令来更新密码引擎140的CID表142。在框 836中,处理器120从执行UNWRAP指令返回,并且方法800完成。如上面描述的,当在成功编程之后返回时,UNWRAP_RESPONSE_STRUCT对象包括指示编程成功的经认证的响应。
现在参考图9,伪代码900示出了UNWRAP指令的一个潜在的实施例。伪代码900可以示出例如与UNWRAP指令相关联的处理器120的微代码。如所示出的,处理器120基于BIND_STRUCT对象的序列ID字段来生成临时初始化向量。处理器120在BIND_STRUCT的若干字段上生成认证报头,并且然后使用KWK、临时初始化向量、认证报头以及通道密钥来执行 AES-GCM认证的加密操作。处理器120接下来将由AES-GCM认证的加密操作生成的参考MAC与BIND_STRUCT对象中提供的MAC进行比较。如果这些值匹配,则处理器120继续评估目标特定的检查,并如框816中所描述地对密码引擎140进行编程。如果这些值不匹配,则处理器120在诸如UNWRAP_RESPONSE_STRUCT的错误结构中指示解包失败。
应当理解,在一些实施例中,方法500、600、和/或800可以体现为存储在计算机可读介质上的各种指令,其可以由处理器120、密码引擎140、和/或计算设备100的其他组件来执行,以使得计算设备100执行对应的方法500、600、和/或800。计算机可读介质可以体现为能够由计算设备100 读取的任何类型的介质,包括但不限于存储器132、数据存储设备134、处理器120的微代码、密码引擎140的存储器、密码引擎140的固件、和/或其他介质。
示例
下面提供了本文公开的技术的说明性示例。这些技术的实施例可以包括下面描述的示例中的任何一个或多个以及任何组合。
示例1包括一种用于安全密码引擎编程的计算设备,该计算设备包括:安全编程模块,其用于(i)由计算设备的具有安全隔离区支持的处理器来建立调用隔离区,(ii)由调用隔离区对通道编程信息进行配置,其中,通道编程信息包括通道标识符以及待编程到计算设备的密码引擎的通道密钥,以及(ii)由调用隔离区以通道编程信息作为参数来调用处理器指令;以及绑定模块,其用于响应于对处理器指令的调用而由处理器基于通道编程信息来生成经打包的编程信息,其中,经打包的编程信息包括经加密的通道密钥和消息认证码。
示例2包括示例1的主题,并且其中,处理器指令包括EBINDTIO指令。
示例3包括示例1和2中任一项的主题,并且其中:通道编程信息包括指示通道编程信息的二进制结构;并且生成经打包的编程信息包括修改二进制结构以生成经打包的编程信息。
示例4包括示例1-3中任一项的主题,并且其中,生成经打包的编程信息包括利用密钥打包密钥对通道密钥进行加密以生成经加密的通道密钥,其中,密钥打包密钥是处理器的秘密。
示例5包括示例1-4中任一项的主题,并且其中,生成经打包的编程信息还包括利用密钥打包密钥来生成消息认证码。
示例6包括示例1-5中任一项的主题,并且其中,安全编程模块还用于由调用隔离区向计算设备的不可信内核模式组件提供经打包的编程信息。
示例7包括示例1-6中任一项的主题,并且其中,不可信内核模式组件包括计算设备的密码引擎驱动程序。
示例8包括示例1-7中任一项的主题,并且其中:安全编程模块还用于 (i)响应于经打包的编程信息向不可信内核模式组件的提供,由调用隔离区接收来自不可信内核模式组件的经认证的响应,以及(ii)由调用隔离区利用通道编程信息中的通道密钥和随机一次使用数来验证经认证的响应;并且对通道编程信息进行配置包括生成随机一次使用数。
示例9包括示例1-8中任一项的主题,并且还包括:不安全编程模块,其用于响应于经打包的编程信息向不可信内核模式组件的提供,由不可信内核模式组件以经打包的编程信息作为参数来调用第二处理器指令;以及解包引擎模块,其用于(i)响应于对第二处理器指令的调用,由处理器对经打包的编程信息进行解包以生成通道编程信息,(ii)响应于对第二处理器指令的调用而验证通道编程信息,以及(iii)响应于对通道编程信息的验证而将通道密钥编程到密码引擎。
示例10包括一种用于安全密码引擎编程的计算设备,该计算设备包括:不安全编程模块,其用于(i)由计算设备的不可信内核模式组件接收经打包的编程信息,其中,经打包的编程信息包括待编程到计算设备的密码引擎的经加密的通道密钥,以及(ii)由不可信内核模式组件以经打包的编程信息作为参数来调用处理器指令;以及解包引擎模块,其用于(i)响应于对处理器指令的调用,由计算设备的处理器对经打包的编程信息进行解包以生成通道编程信息,其中,通道编程信息包括未加密的通道密钥,(ii) 由处理器验证通道编程信息,以及(iii)响应于对通道编程信息的验证,由处理器将未加密的通道密钥编程到密码引擎。
示例11包括示例10的主题,并且其中,处理器指令包括UNWRAP 指令。
示例12包括示例10和11中任一项的主题,并且其中,不可信内核模式组件包括计算设备的密码引擎驱动程序。
示例13包括示例10-12中任一项的主题,并且其中,对经打包的编程信息进行解包以生成通道编程信息包括:利用密钥打包密钥对经加密的通道密钥进行解密以生成未加密的通道密钥,其中,密钥打包密钥是处理器的秘密。
示例14包括示例10-13中任一项的主题,并且其中:(i)确定经打包的编程信息是否被潜在地重放,以及(ii)响应于经打包的编程信息被潜在地重放的确定,由处理器指示解包错误;其中,对经打包的编程信息进行解包包括:响应于经打包的编程信息未被潜在地重放的确定,而对经打包的编程信息进行解包。
示例15包括示例10-14中任一项的主题,并且其中,确定经打包的编程信息是否被潜在地重放包括:确定经打包的编程信息的调用计数器是否与处理器的内部调用计数器具有预先定义的关系;以及响应于对通道编程信息的验证,而利用经打包的编程信息的调用计数器来更新内部调用计数器。
示例16包括示例10-15中任一项的主题,并且其中,验证通道编程信息包括:利用通道编程信息来验证经打包的编程信息的消息认证码。
示例17包括示例10-16中任一项的主题,并且其中:解包引擎模块还用于(i)响应于对通道编程信息的验证,由处理器确定目标特定的编程检查是否被满足,以及(ii)响应于确定目标特定的编程检查未被满足,由处理器指示错误;其中,将未加密的通道密钥编程到密码引擎还包括:响应于目标特定的编程检查被满足的确定,而将未加密的通道密钥编程到密码引擎。
示例18包括示例10-17中任一项的主题,并且其中:通道编程信息包括将DMA通道编程为安全的命令;并且确定目标特定的编程检查是否被满足包括:确定由通道编程信息指示的DMA通道是否已经被编程,或者确定密码引擎的通道标识符表是否已满。
示例19包括示例10-18中任一项的主题,并且其中:通道编程信息包括将DMA通道编程为不安全的命令;并且确定目标特定的编程检查是否被满足包括:确定DMA通道是否已经被编程,或者确定未加密的通道密钥是否匹配与DMA通道相关联的当前通道密钥。
示例20包括示例10-19中任一项的主题,并且其中,将未加密的通道密钥编程到密码引擎包括:利用由处理器维护的密码引擎模型来确定密码引擎的可用通道标识符表条目的索引;以及在可用通道标识符表条目的索引处写入通道编程信息。
示例21包括示例10-20中任一项的主题,并且其中,解包引擎模块还用于响应于对通道编程信息的验证,由处理器基于编程状态来生成经认证的响应。
示例22包括示例10-21中任一项的主题,并且其中,生成经认证的响应包括:利用通道编程信息中的未加密的通道密钥和随机一次使用数来生成编程状态上的消息认证码。
示例23包括示例10-22中任一项的主题,并且其中:不安全编程模块还用于响应于经认证的响应的生成而由不可信内核模式组件读取经认证的响应;并且该计算设备还包括安全编程模块,其用于(i)由处理器利用处理器的安全隔离区支持来建立调用隔离区,以及(ii)响应于对经认证的响应的读取,由调用隔离区验证经认证的响应。
示例24包括示例10-23中任一项的主题,并且其中:安全编程模块还用于由调用隔离区对通道编程信息进行配置,其中,通道编程信息包括未加密的通道密钥和随机一次使用数;其中,验证经认证的响应包括利用通道编程密钥和随机一次使用数来验证经认证的响应。
示例25包括示例10-24中任一项的主题,并且其中:安全编程模块还用于由调用隔离区以通道编程信息作为参数来调用第二处理器指令;并且计算设备还包括绑定模块,其用于响应于对第二处理器指令的调用而由处理器基于通道编程信息来生成经打包的编程信息,其中,经打包的编程信息包括经加密的通道密钥和消息认证码。
示例26包括一种用于安全密码引擎编程的方法,该方法包括:由计算设备的具有安全隔离区支持的处理器利用处理器的安全隔离区支持来建立调用隔离区;由调用隔离区对通道编程信息进行配置,其中,通道编程信息包括通道标识符以及待编程到计算设备的密码引擎的通道密钥;由调用隔离区以通道编程信息作为参数来调用处理器指令;响应于调用处理器指令,由处理器基于通道编程信息来生成经打包的编程信息,其中,经打包的编程信息包括经加密的通道密钥和消息认证码。
示例27包括示例26的主题,并且其中,调用处理器指令包括调用 EBINDTIO指令。
示例28包括示例26和27中任一项的主题,并且其中:对通道编程信息进行配置包括对指示通道编程信息的二进制结构进行配置;并且生成经打包的编程信息包括修改二进制结构以生成经打包的编程信息。
示例29包括示例26-28中任一项的主题,并且其中,生成经打包的编程信息包括利用密钥打包密钥对通道密钥进行加密以生成经加密的通道密钥,其中,密钥打包密钥是处理器的秘密。
示例30包括示例26-29中任一项的主题,并且其中,生成经打包的编程信息还包括利用密钥打包密钥来生成消息认证码。
示例31包括示例26-30中任一项的主题,并且还包括:由调用隔离区向计算设备的不可信内核模式组件提供经打包的编程信息。
示例32包括示例26-31中任一项的主题,并且其中,向不可信内核模式组件提供经打包的编程信息包括向计算设备的密码引擎驱动程序提供经打包的编程信息。
示例33包括示例26-32中任一项的主题,并且还包括:响应于向不可信内核模式组件提供经打包的编程信息,由调用隔离区接收来自不可信内核模式组件的经认证的响应;以及由调用隔离区使用通道编程信息中的通道密钥和随机一次使用数来验证经认证的响应;其中,对通道编程信息进行配置包括生成随机一次使用数。
示例34包括示例26-33中任一项的主题,并且还包括:响应于向不可信内核模式组件提供经打包的编程指令,由不可信内核模式组件以经打包的编程信息作为参数来调用第二处理器指令;响应于调用第二处理器指令,由处理器对经打包的编程信息进行解包以生成通道编程信息;响应于调用第二处理器指令,由处理器验证通道编程信息;以及响应于验证通道编程信息,由处理器将通道密钥编程到密码引擎。
示例35包括一种用于安全密码引擎编程的方法,该方法包括:由计算设备的不可信内核模式组件接收经打包的编程信息,其中,经打包的编程信息包括待编程到计算设备的密码引擎的经加密的通道密钥;由不可信内核模式组件以经打包的编程信息作为参数来调用处理器指令;响应于调用处理器指令,由计算设备的处理器对经打包的编程信息进行解包以生成通道编程信息,其中,通道编程信息包括未加密的通道密钥;由处理器验证通道编程信息;以及响应于验证通道编程信息,由处理器将未加密通道密钥编程到密码引擎。
示例36包括示例35的主题,并且其中,调用处理器指令包括调用 UNWRAP指令。
示例37包括示例35和36中任一项的主题,并且其中,不可信内核模式组件包括计算设备的密码引擎驱动程序。
示例38包括示例35-37中任一项的主题,并且其中,对经打包的编程信息进行解包以生成通道编程信息包括:利用密钥打包密钥对经加密的通道密钥进行解密以生成未加密的通道密钥,其中,密钥打包密钥是处理器的秘密。
示例39包括示例35-38中任一项的主题,并且还包括:由处理器确定经打包的编程信息是否被潜在地重放;以及响应于确定经打包的编程信息被潜在地重放,由处理器指示解包错误;其中,对经打包的编程信息进行解包包括响应于确定经打包的编程信息未被潜在地重放而对经打包的编程信息进行解包。
示例40包括示例35-39中任一项的主题,并且其中,确定经打包的编程信息是否被潜在地重放包括:确定经打包的编程信息的调用计数器是否与处理器的内部调用计数器具有预先定义的关系;以及响应于验证通道编程信息,而利用经打包的编程信息的调用计数器来更新内部调用计数器。
示例41包括示例35-40中任一项的主题,并且其中,验证通道编程信息包括利用通道编程信息来验证经打包的编程信息的消息认证码。
示例42包括示例35-41中任一项的主题,并且还包括:响应于验证通道编程信息,由处理器确定目标特定的编程检查是否被满足;以及响应于确定目标特定的编程检查未被满足,由处理器指示错误;其中,将未加密的通道密钥编程到密码引擎还包括:响应于确定目标特定的编程检查被满足而将未加密的通道密钥编程到密码引擎。
示例43包括示例35-42中任一项的主题,并且其中:通道编程信息包括将DMA通道编程为安全的命令;并且确定目标特定的编程检查是否被满足包括:确定由通道编程信息指示的DMA通道是否已经被编程,或者确定密码引擎的通道标识符表是否已满。
示例44包括示例35-43中任一项的主题,并且其中:通道编程信息包括将DMA通道编程为不安全的命令;并且确定目标特定的编程检查是否被满足包括:确定DMA通道是否已经被编程,或者确定未加密的通道密钥是否匹配与DMA通道相关联的当前通道密钥。
示例45包括示例35-44中任一项的主题,并且其中,将未加密的通道密钥编程到密码引擎包括:使用由处理器维护的密码引擎模型来确定密码引擎的可用通道标识符表条目的索引;以及在可用通道标识符表条目的索引处写入通道编程信息。
示例46包括示例35-45中任一项的主题,并且还包括:响应于验证通道编程信息,由处理器基于编程状态来生成经认证的响应。
示例47包括示例35-46中任一项的主题,并且其中,生成经认证的响应包括:使用通道编程信息中的未加密的通道密钥和随机一次使用数来生成编程状态上的消息认证码。
示例48包括示例35-47中任一项的主题,并且还包括:由处理器使用处理器的安全隔离区支持来建立调用隔离区;响应于生成经认证的响应,由不可信内核模式组件读取经认证的响应;以及响应于读取经认证的响应,由调用隔离区验证经认证的响应。
示例49包括示例35-48中任一项的主题,并且还包括:由调用隔离区对通道编程信息进行配置,其中,通道编程信息包括未加密的通道密钥和随机一次使用数;其中,验证经认证的响应包括使用通道编程密钥和随机一次使用数来验证经认证的响应。
示例50包括示例35-49中任一项的主题,并且还包括:由调用隔离区以通道编程信息作为参数来调用第二处理器指令;以及响应于调用第二处理器指令,由处理器基于通道编程信息来生成经打包的编程信息,其中,经打包的编程信息包括经加密的通道密钥和消息认证码。
示例51包括一种计算设备,其包括:处理器;以及其中存储有多个指令的存储器,该指令在由处理器执行时使得计算设备执行示例26-50中任一项的方法。
示例52包括一种或多种机器可读存储介质,其上存储有多个指令,该指令响应于被执行而使得计算设备执行示例26-50中任一项的方法。
示例53包括一种计算设备,包括用于执行示例26-50中任一项的方法的模块。
示例54包括一种用于安全密码引擎编程的计算设备,该计算设备包括:用于由计算设备的具有安全隔离区支持的处理器利用处理器的安全隔离区支持来建立调用隔离区的模块;用于由调用隔离区对通道编程信息进行配置的模块,其中,通道编程信息包括通道标识符以及待编程到计算设备的密码引擎的通道密钥;用于由调用隔离区以通道编程信息作为参数来调用处理器指令的模块;用于响应于调用处理器指令而由处理器基于通道编程信息来生成经打包的编程信息的模块,其中,经打包的编程信息包括经加密的通道密钥和消息认证码。
示例55包括示例54的主题,并且其中,用于调用处理器指令的模块包括用于调用EBINDTIO指令的模块。
示例56包括示例54和55中任一项的主题,并且其中:用于对通道编程信息进行配置的模块包括用于对指示通道编程信息的二进制结构进行配置的模块;并且用于生成经打包的编程信息的模块包括用于修改二进制结构以生成经打包的编程信息的模块。
示例57包括示例54-56中任一项的主题,并且其中,用于生成经打包的编程信息的模块包括用于利用密钥打包密钥对通道密钥进行加密以生成经加密的通道密钥的模块,其中,密钥打包密钥是处理器的秘密。
示例58包括示例54-57中任一项的主题,并且其中,用于生成经打包的编程信息的模块还包括用于利用密钥打包密钥来生成消息认证码的模块。
示例59包括示例54-58中任一项的主题,并且还包括用于由调用隔离区向计算设备的不可信内核模式组件提供经打包的编程信息的模块。
示例60包括示例54-59中任一项的主题,并且其中,用于向不可信内核模式组件提供经打包的编程信息的模块包括用于向计算设备的密码引擎驱动程序提供经打包的编程信息的模块。
示例61包括示例54-60中任一项的主题,并且还包括:用于响应于向不可信内核模式组件提供经打包的编程信息而由调用隔离区接收来自不可信内核模式组件的经认证的响应的模块;以及用于由调用隔离区使用通道编程信息中的通道密钥和随机一次使用数来验证经认证的响应的模块;其中,用于对通道编程信息进行配置的模块包括用于生成随机一次使用数的模块。
示例62包括示例54-61中任一项的主题,并且还包括:用于响应于向不可信内核模式组件提供经打包的编程指令而由不可信内核模式组件以经打包的编程信息作为参数来调用第二处理器指令的模块;用于响应于调用第二处理器指令而由处理器对经打包的编程信息进行解包以生成通道编程信息的模块;用于响应于调用第二处理器指令而由处理器验证通道编程信息的模块;以及用于响应于验证通道编程信息而由处理器将通道密钥编程到密码引擎的模块。
示例63包括一种用于安全密码引擎编程的计算设备,该计算设备包括:用于由计算设备的不可信内核模式组件接收经打包的编程信息的模块,其中,经打包的编程信息包括待编程到计算设备的密码引擎的经加密的通道密钥;用于由不可信内核模式组件以经打包的编程信息作为参数来调用处理器指令的模块;用于响应于调用处理器指令而由计算设备的处理器对经打包的编程信息进行解包以生成通道编程信息的模块,其中,通道编程信息包括未加密的通道密钥;用于由处理器验证通道编程信息的模块;以及用于响应于验证通道编程信息而由处理器将未加密通道密钥编程到密码引擎的模块。
示例64包括示例63的主题,并且其中,用于调用处理器指令的模块包括用于调用UNWRAP指令的模块。
示例65包括示例63和64中任一项的主题,并且其中,不可信内核模式组件包括计算设备的密码引擎驱动程序。
示例66包括示例63-65中任一项的主题,并且其中,用于对经打包的编程信息进行解包以生成通道编程信息的模块包括用于利用密钥打包密钥对经加密的通道密钥进行解密以生成未加密的通道密钥的模块,其中,密钥打包密钥是处理器的秘密。
示例67包括示例63-66中任一项的主题,并且还包括:用于由处理器确定经打包的编程信息是否被潜在地重放的模块;以及用于响应于确定经打包的编程信息被潜在地重放而由处理器指示解包错误的模块;其中,用于对经打包的编程信息进行解包的模块包括用于响应于确定经打包的编程信息未被潜在地重放而对经打包的编程信息进行解包的模块。
示例68包括示例63-67中任一项的主题,并且其中,用于确定经打包的编程信息是否被潜在地重放的模块包括:用于确定经打包的编程信息的调用计数器是否与处理器的内部调用计数器具有预先定义的关系的模块;以及用于响应于验证通道编程信息而利用经打包的编程信息的调用计数器来更新内部调用计数器的模块。
示例69包括示例63-68中任一项的主题,并且其中,用于验证通道编程信息的模块包括用于利用通道编程信息来验证经打包的编程信息的消息认证码的模块。
示例70包括示例63-69中任一项的主题,并且还包括:用于响应于验证通道编程信息而由处理器确定目标特定的编程检查是否被满足的模块;以及用于响应于确定目标特定的编程检查未被满足而由处理器指示错误的模块;其中,用于将未加密的通道密钥编程到密码引擎的模块还包括用于响应于确定目标特定的编程检查被满足而将未加密的通道密钥编程到密码引擎的模块。
示例71包括示例63-70中任一项的主题,并且其中:通道编程信息包括将DMA通道编程为安全的命令;并且用于确定目标特定的编程检查是否被满足的模块包括用于确定由通道编程信息指示的DMA通道是否已经被编程或者确定密码引擎的通道标识符表是否已满的模块。
示例72包括示例63-71中任一项的主题,并且其中:通道编程信息包括将DMA通道编程为不安全的命令;并且用于确定目标特定的编程检查是否被满足的模块包括用于确定DMA通道是否已经被编程或者确定未加密的通道密钥是否匹配与DMA通道相关联的当前通道密钥的模块。
示例73包括示例63-72中任一项的主题,并且其中,用于将未加密的通道密钥编程到密码引擎的模块包括:用于使用由处理器维护的密码引擎模型来确定密码引擎的可用通道标识符表条目的索引的模块;以及用于在可用通道标识符表条目的索引处写入通道编程信息的模块。
示例74包括示例63-73中任一项的主题,并且还包括用于响应于验证通道编程信息而由处理器基于编程状态来生成经认证的响应的模块。
示例75包括示例63-74中任一项的主题,并且其中,用于生成经认证的响应的模块包括用于使用通道编程信息中的未加密的通道密钥和随机一次使用数来生成编程状态上的消息认证码的模块。
示例76包括示例63-75中任一项的主题,并且还包括:用于由处理器使用处理器的安全隔离区支持来建立调用隔离区的模块;用于响应于生成经认证的响应而由不可信内核模式组件读取经认证的响应的模块;以及用于响应于读取经认证的响应而由调用隔离区验证经认证的响应的模块。
示例77包括示例63-76中任一项的主题,并且还包括:用于由调用隔离区对通道编程信息进行配置的模块,其中,通道编程信息包括未加密的通道密钥和随机一次使用数;其中,用于验证经认证的响应的模块包括用于使用通道编程密钥和随机一次使用数来验证经认证的响应的模块。
示例78包括示例63-77中任一项的主题,并且还包括:用于由调用隔离区以通道编程信息作为参数来调用第二处理器指令的模块;以及用于响应于调用第二处理器指令而由处理器基于通道编程信息来生成经打包的编程信息的模块,其中,经打包的编程信息包括经加密的通道密钥和消息认证码。
Claims (25)
1.一种用于安全密码引擎编程的计算设备,所述计算设备包括:
安全编程模块,其用于(i)由计算设备的具有安全隔离区支持的处理器来建立调用隔离区,(ii)由所述调用隔离区对通道编程信息进行配置,其中,所述通道编程信息包括通道标识符以及待编程到所述计算设备的密码引擎的通道密钥,以及(iii)由所述调用隔离区以所述通道编程信息作为参数来调用处理器指令;以及
绑定模块,其用于响应于对所述处理器指令的调用而由所述处理器基于所述通道编程信息来生成经打包的编程信息,其中,所述经打包的编程信息包括经加密的通道密钥和消息认证码。
2.根据权利要求1所述的计算设备,其中:
所述通道编程信息包括指示所述通道编程信息的二进制结构;并且
生成所述经打包的编程信息包括修改所述二进制结构以生成所述经打包的编程信息。
3.根据权利要求1所述的计算设备,其中,生成所述经打包的编程信息包括:利用密钥打包密钥对所述通道密钥进行加密,以生成所述经加密的通道密钥,其中,所述密钥打包密钥是所述处理器的秘密。
4.根据权利要求3所述的计算设备,其中,生成所述经打包的编程信息还包括利用所述密钥打包密钥来生成所述消息认证码。
5.根据权利要求1所述的计算设备,其中,所述安全编程模块还用于由所述调用隔离区向所述计算设备的不可信内核模式组件提供所述经打包的编程信息。
6.根据权利要求5所述的计算设备,其中:
所述安全编程模块还用于(i)响应于所述经打包的编程信息向所述不可信内核模式组件的提供,由所述调用隔离区接收来自所述不可信内核模式组件的经认证的响应,以及(ii)由所述调用隔离区利用所述通道编程信息中的所述通道密钥和随机一次使用数来验证所述经认证的响应;并且
对所述通道编程信息进行配置包括生成所述随机一次使用数。
7.一种用于安全密码引擎编程的计算设备,所述计算设备包括:
不安全编程模块,其用于(i)由计算设备的不可信内核模式组件接收经打包的编程信息,其中,所述经打包的编程信息包括待编程到所述计算设备的密码引擎的经加密的通道密钥,以及(ii)由所述不可信内核模式组件以所述经打包的编程信息作为参数来调用处理器指令;以及
解包引擎模块,其用于(i)响应于对所述处理器指令的调用,由所述计算设备的处理器对所述经打包的编程信息进行解包以生成通道编程信息,其中,所述通道编程信息包括未加密的通道密钥,(ii)由所述处理器验证所述通道编程信息,以及(iii)响应于对所述通道编程信息的验证,由所述处理器将所述未加密的通道密钥编程到所述密码引擎。
8.根据权利要求7所述的计算设备,其中,对所述经打包的编程信息进行解包以生成所述通道编程信息包括:利用密钥打包密钥对所述经加密的通道密钥进行解密以生成所述未加密的通道密钥,其中,所述密钥打包密钥是所述处理器的秘密。
9.根据权利要求7所述的计算设备,其中:
所述解包引擎模块还用于(i)确定所述经打包的编程信息是否被潜在地重放,以及(ii)响应于所述经打包的编程信息被潜在地重放的确定,由所述处理器指示解包错误;
其中,对所述经打包的编程信息进行解包包括:响应于所述经打包的编程信息未被潜在地重放的确定,对所述经打包的编程信息进行解包。
10.根据权利要求9所述的计算设备,其中,验证所述通道编程信息包括利用所述通道编程信息来验证所述经打包的编程信息的消息认证码。
11.根据权利要求7所述的计算设备,其中:
所述解包引擎模块还用于(i)响应于对所述通道编程信息的验证,由所述处理器确定编程检查是否被满足,以及(ii)响应于确定所述编程检查未被满足,由所述处理器指示错误;
其中,将所述未加密的通道密钥编程到所述密码引擎还包括:响应于所述编程检查被满足的确定,将所述未加密的通道密钥编程到所述密码引擎。
12.根据权利要求7所述的计算设备,其中,将所述未加密的通道密钥编程到所述密码引擎包括:
利用由所述处理器维护的密码引擎模型来确定所述密码引擎的可用通道标识符表条目的索引;以及
在所述可用通道标识符表条目的索引处写入所述通道编程信息。
13.根据权利要求7所述的计算设备,其中,所述解包引擎模块还用于响应于对所述通道编程信息的验证,由所述处理器基于编程状态来生成经认证的响应。
14.根据权利要求13所述的计算设备,其中,生成所述经认证的响应包括:利用所述通道编程信息中的所述未加密的通道密钥和随机一次使用数来生成所述编程状态上的消息认证码。
15.一种用于安全密码引擎编程的方法,所述方法包括:
由计算设备的具有安全隔离区支持的处理器利用所述处理器的安全隔离区支持来建立调用隔离区;
由所述调用隔离区对通道编程信息进行配置,其中,所述通道编程信息包括通道标识符以及待编程到所述计算设备的密码引擎的通道密钥;
由所述调用隔离区以所述通道编程信息作为参数来调用处理器指令;
响应于调用所述处理器指令,由所述处理器基于所述通道编程信息来生成经打包的编程信息,其中,所述经打包的编程信息包括经加密的通道密钥和消息认证码。
16.根据权利要求15所述的方法,其中,生成所述经打包的编程信息包括:利用密钥打包密钥来对所述通道密钥进行加密,以生成经加密的通道密钥,其中,所述密钥打包密钥是所述处理器的秘密。
17.根据权利要求16所述的方法,其中,生成所述经打包的编程信息还包括利用所述密钥打包密钥来生成所述消息认证码。
18.根据权利要求15所述的方法,还包括由所述调用隔离区向所述计算设备的不可信内核模式组件提供所述经打包的编程信息。
19.根据权利要求18所述的方法,还包括:
响应于向所述不可信内核模式组件提供所述经打包的编程信息,由所述调用隔离区接收来自所述不可信内核模式组件的经认证的响应;以及
由所述调用隔离区使用所述通道编程信息中的所述通道密钥和随机一次使用数来验证所述经认证的响应;
其中,对所述通道编程信息进行配置包括生成所述随机一次使用数。
20.一种用于安全密码引擎编程的方法,所述方法包括:
由计算设备的不可信内核模式组件接收经打包的编程信息,其中,所述经打包的编程信息包括待编程到所述计算设备的密码引擎的经加密的通道密钥;
由所述不可信内核模式组件以所述经打包的编程信息作为参数来调用处理器指令;
响应于调用所述处理器指令,由所述计算设备的处理器对所述经打包的编程信息进行解包以生成通道编程信息,其中,所述通道编程信息包括未加密的通道密钥;
由所述处理器验证所述通道编程信息;以及
响应于验证所述通道编程信息,由所述处理器将所述未加密的通道密钥编程到所述密码引擎。
21.根据权利要求20所述的方法,其中,对所述经打包的编程信息进行解包以生成所述通道编程信息包括:利用密钥打包密钥来对所述经加密的通道密钥进行解密,以生成所述未加密的通道密钥,其中,所述密钥打包密钥是所述处理器的秘密。
22.根据权利要求20所述的方法,还包括:
由所述处理器确定所述经打包的编程信息是否被潜在地重放;以及
响应于确定所述经打包的编程信息被潜在地重放,由所述处理器指示解包错误;
其中,对所述经打包的编程信息进行解包包括:响应于确定所述经打包的编程信息未被潜在地重放而对所述经打包的编程信息进行解包。
23.根据权利要求22所述的方法,其中,验证所述通道编程信息包括利用所述通道编程信息来验证所述经打包的编程信息的消息认证码。
24.根据权利要求20所述的方法,还包括:
响应于验证所述通道编程信息,由所述处理器确定编程检查是否被满足;以及
响应于确定所述编程检查未被满足,由所述处理器指示错误;
其中,将所述未加密的通道密钥编程到所述密码引擎还包括:响应于确定所述编程检查被满足,将所述未加密的通道密钥编程到所述密码引擎。
25.根据权利要求20所述的方法,还包括:响应于验证所述通道编程信息,由所述处理器基于编程状态来生成经认证的响应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211234494.0A CN115525903A (zh) | 2015-07-20 | 2016-06-20 | 用于对安全i/o的密码引擎进行安全编程的技术 |
Applications Claiming Priority (11)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562194763P | 2015-07-20 | 2015-07-20 | |
US62/194,763 | 2015-07-20 | ||
US201562195148P | 2015-07-21 | 2015-07-21 | |
US62/195,148 | 2015-07-21 | ||
US201562195595P | 2015-07-22 | 2015-07-22 | |
US201562195600P | 2015-07-22 | 2015-07-22 | |
US62/195,600 | 2015-07-22 | ||
US62/195,595 | 2015-07-22 | ||
US14/979,002 US10303900B2 (en) | 2015-07-20 | 2015-12-22 | Technologies for secure programming of a cryptographic engine for trusted I/O |
US14/979,002 | 2015-12-22 | ||
PCT/US2016/038396 WO2017014889A1 (en) | 2015-07-20 | 2016-06-20 | Technologies for secure programming of a cryptographic engine for secure i/o |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211234494.0A Division CN115525903A (zh) | 2015-07-20 | 2016-06-20 | 用于对安全i/o的密码引擎进行安全编程的技术 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107851162A CN107851162A (zh) | 2018-03-27 |
CN107851162B true CN107851162B (zh) | 2022-10-28 |
Family
ID=57834413
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680042578.0A Active CN107851162B (zh) | 2015-07-20 | 2016-06-20 | 用于对安全i/o的密码引擎进行安全编程的技术 |
CN202211234494.0A Pending CN115525903A (zh) | 2015-07-20 | 2016-06-20 | 用于对安全i/o的密码引擎进行安全编程的技术 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211234494.0A Pending CN115525903A (zh) | 2015-07-20 | 2016-06-20 | 用于对安全i/o的密码引擎进行安全编程的技术 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10303900B2 (zh) |
EP (1) | EP3326105B1 (zh) |
CN (2) | CN107851162B (zh) |
WO (1) | WO2017014889A1 (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10896267B2 (en) * | 2017-01-31 | 2021-01-19 | Hewlett Packard Enterprise Development Lp | Input/output data encryption |
US20190103074A1 (en) * | 2017-09-29 | 2019-04-04 | Intel Corporation | Technologies for secure z-order enforcement with trusted display |
US10754960B2 (en) | 2017-11-17 | 2020-08-25 | Intel Corporation | Support for increased number of concurrent keys within multi-key cryptographic engine |
CN108683492B (zh) * | 2018-04-28 | 2021-09-03 | 全球能源互联网研究院有限公司 | 一种可信无线传感器及控制方法 |
EP4155996A1 (en) | 2018-04-30 | 2023-03-29 | Google LLC | Enclave interactions |
EP3788518A1 (en) | 2018-04-30 | 2021-03-10 | Google LLC | Managing enclave creation through a uniform enclave interface |
CN112005237B (zh) * | 2018-04-30 | 2024-04-30 | 谷歌有限责任公司 | 安全区中的处理器与处理加速器之间的安全协作 |
US11443072B2 (en) * | 2018-06-29 | 2022-09-13 | Microsoft Technology Licensing, Llc | Peripheral device with resource isolation |
US11126733B2 (en) * | 2018-08-27 | 2021-09-21 | Intel Corporation | System, apparatus and method for configurable trusted input/output access from authorized software |
US11126757B2 (en) | 2018-10-19 | 2021-09-21 | Microsoft Technology Licensing, Llc | Peripheral device |
US11461483B2 (en) * | 2020-01-28 | 2022-10-04 | Intel Corporation | Protection of communications between trusted execution environment and hardware accelerator utilizing enhanced end-to-end encryption and inter-context security |
US11856057B2 (en) * | 2020-04-02 | 2023-12-26 | International Business Machines Corporation | Preservation of channel metadata |
US11575520B2 (en) * | 2020-12-14 | 2023-02-07 | International Business Machines Corporation | Key block enhanced wrapping |
US11223489B1 (en) | 2021-02-23 | 2022-01-11 | Garantir LLC | Advanced security control implementation of proxied cryptographic keys |
US11418329B1 (en) | 2021-05-28 | 2022-08-16 | Garantir LLC | Shared secret implementation of proxied cryptographic keys |
US11218317B1 (en) | 2021-05-28 | 2022-01-04 | Garantir LLC | Secure enclave implementation of proxied cryptographic keys |
US11502827B1 (en) * | 2021-09-03 | 2022-11-15 | Garantir LLC | Exporting remote cryptographic keys |
CN113821821B (zh) * | 2021-11-24 | 2022-02-15 | 飞腾信息技术有限公司 | 安全架构系统、安全架构系统的密码运算方法和计算设备 |
CN118171257B (zh) * | 2024-05-14 | 2024-08-06 | 南湖实验室 | 一种基于机密虚拟机的零信任远程认证服务部署系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102215254A (zh) * | 2010-04-09 | 2011-10-12 | 英特尔公司 | 安全提供用户对计算机设备远程管理许可的会话密钥信息 |
CN103428071A (zh) * | 2012-05-21 | 2013-12-04 | 宇龙计算机通信科技(深圳)有限公司 | 终端和信息处理方法 |
CN104170312A (zh) * | 2011-12-15 | 2014-11-26 | 英特尔公司 | 用于使用硬件安全引擎通过网络进行安全通信的方法和设备 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7298847B2 (en) * | 2002-02-07 | 2007-11-20 | Nokia Inc. | Secure key distribution protocol in AAA for mobile IP |
US20050193201A1 (en) * | 2004-02-26 | 2005-09-01 | Mahfuzur Rahman | Accessing and controlling an electronic device using session initiation protocol |
US7716389B1 (en) | 2006-03-17 | 2010-05-11 | Bitmicro Networks, Inc. | Direct memory access controller with encryption and decryption for non-blocking high bandwidth I/O transactions |
JP4347350B2 (ja) | 2007-02-15 | 2009-10-21 | 富士通株式会社 | データ暗号転送装置、データ復号転送装置、データ暗号転送方法およびデータ復号転送方法 |
US20110161675A1 (en) | 2009-12-30 | 2011-06-30 | Nvidia Corporation | System and method for gpu based encrypted storage access |
US8930713B2 (en) | 2010-03-10 | 2015-01-06 | Dell Products L.P. | System and method for general purpose encryption of data |
US8832452B2 (en) * | 2010-12-22 | 2014-09-09 | Intel Corporation | System and method for implementing a trusted dynamic launch and trusted platform module (TPM) using secure enclaves |
US8634561B2 (en) * | 2011-05-04 | 2014-01-21 | International Business Machines Corporation | Secure key management |
WO2013147872A1 (en) | 2012-03-30 | 2013-10-03 | Intel Corporation | Two dimensional direct memory access scheme for enhanced network protocol processing performance |
US10887296B2 (en) | 2012-12-31 | 2021-01-05 | Ncr Corporation | Secure provisioning manifest for controlling peripherals attached to a computer |
US9058494B2 (en) | 2013-03-15 | 2015-06-16 | Intel Corporation | Method, apparatus, system, and computer readable medium to provide secure operation |
US9553721B2 (en) * | 2015-01-30 | 2017-01-24 | Qualcomm Incorporated | Secure execution environment communication |
-
2015
- 2015-12-22 US US14/979,002 patent/US10303900B2/en active Active
-
2016
- 2016-06-20 EP EP16828191.3A patent/EP3326105B1/en active Active
- 2016-06-20 CN CN201680042578.0A patent/CN107851162B/zh active Active
- 2016-06-20 CN CN202211234494.0A patent/CN115525903A/zh active Pending
- 2016-06-20 WO PCT/US2016/038396 patent/WO2017014889A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102215254A (zh) * | 2010-04-09 | 2011-10-12 | 英特尔公司 | 安全提供用户对计算机设备远程管理许可的会话密钥信息 |
CN104170312A (zh) * | 2011-12-15 | 2014-11-26 | 英特尔公司 | 用于使用硬件安全引擎通过网络进行安全通信的方法和设备 |
CN103428071A (zh) * | 2012-05-21 | 2013-12-04 | 宇龙计算机通信科技(深圳)有限公司 | 终端和信息处理方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3326105A1 (en) | 2018-05-30 |
EP3326105B1 (en) | 2019-08-14 |
US10303900B2 (en) | 2019-05-28 |
US20170024584A1 (en) | 2017-01-26 |
WO2017014889A1 (en) | 2017-01-26 |
EP3326105A4 (en) | 2019-03-20 |
CN107851162A (zh) | 2018-03-27 |
CN115525903A (zh) | 2022-12-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107851162B (zh) | 用于对安全i/o的密码引擎进行安全编程的技术 | |
US20230128711A1 (en) | Technologies for trusted i/o with a channel identifier filter and processor-based cryptographic engine | |
CN107851161B (zh) | 对具有dma能力的i/o控制器的i/o数据进行密码保护 | |
CN107851160B (zh) | 用于在isa控制下进行多个共存可信执行环境的可信i/o的技术 | |
CN108140094B (zh) | 用于安全可信i/o访问控制的技术 | |
US8572410B1 (en) | Virtualized protected storage | |
US8826391B2 (en) | Virtualized trusted descriptors | |
US8738932B2 (en) | System and method for processor-based security | |
EP2947594A2 (en) | Protecting critical data structures in an embedded hypervisor system | |
Richter et al. | Isolating operating system components with Intel SGX | |
US10452565B2 (en) | Secure electronic device | |
US10771249B2 (en) | Apparatus and method for providing secure execution environment for mobile cloud | |
US10938857B2 (en) | Management of a distributed universally secure execution environment | |
US10824766B2 (en) | Technologies for authenticated USB device policy enforcement | |
JP2023065323A (ja) | コンピュータに実装された方法、システム及びコンピュータプログラム | |
EP4156010A1 (en) | Data processing method and data processing apparatus | |
Gazidedja | HW-SW architectures for security and data protection at the edge | |
Gameiro | TWallet Arm TrustZone Enabled Trustable Mobile Wallet: A Case for Cryptocurrency Wallets | |
WO2023073124A1 (en) | Method for securely executing an application | |
CN110059489A (zh) | 安全电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TG01 | Patent term adjustment |