CN106130719A - 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置 - Google Patents
一种抵抗内存泄漏攻击的密码算法多核实现方法及装置 Download PDFInfo
- Publication number
- CN106130719A CN106130719A CN201610580036.0A CN201610580036A CN106130719A CN 106130719 A CN106130719 A CN 106130719A CN 201610580036 A CN201610580036 A CN 201610580036A CN 106130719 A CN106130719 A CN 106130719A
- Authority
- CN
- China
- Prior art keywords
- register cache
- core
- cpu
- internal memory
- depositor
- 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.)
- Pending
Links
Classifications
-
- 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/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0631—Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1441—Countermeasures against malicious traffic
-
- 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/0894—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及一种抵抗内存泄漏攻击的密码算法多核实现方法及装置。该方法将CPU所有核心能够使用的寄存器作为多核寄存器缓存来存储密码计算过程中的敏感信息,交换到内存中的数据都要进行加密,将密码算法能够并行的部分拆分到多个CPU核心上同时运行,各核心的寄存器缓存通过内存交换敏感数据的密文。该装置为抵抗内存泄露攻击的RSA高速计算装置,使用CPU两个核心的寄存器缓存分别计算两个蒙哥马利模幂,而后用其中一个CPU核心的寄存器缓存读取模幂结果并计算RSA结果。该装置在保证抵抗内存泄露攻击的同时,计算速度达到OpenSSL中算法实现的70%以上。
Description
技术领域
本发明涉及计算机安全领域,特别涉及一种抵抗内存泄漏攻击的密码算法多核实现方法及装置。
背景技术
在CPU平台,程序使用CPU内的计算单元进行计算,使用寄存器或内存存储程序的输入参数、中间计算结果和输出结果。CPU指令一般可以对寄存器或者一个内存地址进行操作。使用汇编语言编程可以直接指定操作数存储的位置,使用C语言或者更高级的语言则更多地由编译器或者解释器来决定操作数具体的存储位置。高速缓冲存储器(Cache)是CPU内对内存的缓存,一个内存操作数可能保存在Cache中或内存中,对编程人员是透明的。除非特别的性能考虑,程序一般不关心计算过程中变量存储的位置,是保存在寄存器中、Cache中还是内存中。
操作系统具有各种内存安全保护机制(进程隔离、访问控制等),过去认为如果操作系统的安全漏洞没有被攻击者利用,一个进程保存在内存中的数据是安全的,不会被攻击者获取。但是内存泄露攻击的出现使内存中的数据不再安全。内存泄露攻击一般是指某种物理攻击,通过直接接触要攻击的主机,绕过操作系统的各种内存安全保护机制,获取内存某个区域的数据甚至整个内存镜像。内存泄露攻击包括冷启动攻击(Cold boot attack)和DMA攻击。冷启动攻击利用了动态随机存储器(DRAM)的保持效应,即DRAM在掉电以后仍能在一段时间内保持数据,如果在低温的状态下(如用液氮进行降温)数据甚至可以保持几个小时。基于此,攻击者可以实施如下攻击:直接从目标主机中拔出内存条,用液氮降温,插入自己的主机中,然后用攻击引导程序启动主机,获取整个内存镜像。DMA(Direct MemoryAccess)即存储器直接访问,是指外部设备可以在DMA控制器的控制下直接与内存交换数据,不需要CPU干预,使CPU和输入输出可以并行操作。DMA攻击将攻击设备通过某种DMA总线(FireWire、ExpressCard、Thunderbolt、PCI Express等)接入目标主机,绕过操作系统的各种安全机制直接读取或写入某个内存地址,甚至是系统内核的内存地址。所以,由于内存泄露攻击的存在,现在内存中存储的数据都不再是安全的,可能被攻击者获取。
密码算法包括对称密码算法、公钥密码算法以及哈希算法等。对称密码算法在加密和解密时使用同一个密钥,公钥密码算法使用一个公私钥对,私钥用于签名和解密,公钥用于验证签名和加密。对称密码算法的密钥和公钥密码算法的私钥都是安全敏感信息,需要进行保护,如果被敌手获取则整个密码系统没有任何安全性可言。此外,如果明文不希望被敌手获知,则也是安全敏感信息。密码算法要在某种计算平台上进行实现,即通过编码形成可以在该计算平台运行的程序,称为密码算法实现。密码算法实现在计算过程中会产生许多中间结果,如果某些中间结果会泄露对称密钥或私钥的信息,则也是安全敏感信息。以上提到的安全敏感信息在密码计算过程中都要被保护。
由于内存泄露攻击的存在,所有安全敏感信息在密码计算过程中都不能明文存储在内存中。现有的解决方案主要是无内存的密码算法实现,即使用攻击者无法接触到的资源来存储安全敏感信息,包括寄存器和Cache。这两种资源都在CPU内,所以又称为CPU界内的密码算法实现。更具体地讲,寄存器和L1Cache、L2Cache都在一个CPU核心中,它们对于当前运行在这个CPU核心上的进程是私有的,无法被别的CPU核心上的进程直接访问,所以存储在其中的数据是安全的。此外,由于现有的CPU大部分都有多个核心,要考虑方案在多个核心上运行时的安全性和计算性能。
寄存器方案将明文的安全敏感信息保存在寄存器中,所有内存中出现的安全敏感信息都是经过加密的。对于对称密码算法,对称密钥存储在某些不常用的寄存器中,如Debug寄存器,同时禁止用户态程序访问这些寄存器,以保护对称密钥。特别的,对于对称密码算法AES,寄存器方案可以使用AES-NI指令,将轮密钥和计算中间状态都保存在XMM寄存器中。对于非对称密码法,现有已有两个对2048比特RSA(RSA-2048)安全实现的方案。第一个方案使用高级矢量扩展指令集(AVX)进行2048比特模乘计算,同时使用16个256比特的YMM寄存器存储中间计算结果,私钥的密文从内存中读取并使用AES-NI进行解密。该方案存在以下不足:
1.由于只使用YMM寄存器,2048比特模乘计算过程中的一个中间状态变量无法保存在寄存器中,只能被明文保存在内存中。虽然该方案证明如果只能获取一个该中间状态变量的镜像(如冷启动攻击)不能获得私钥的大部分比特,但是如果可以获得多个镜像(如DMA攻击)则可能获得整个私钥。
2.由于该方案将一个中间状态变量明文保存在内存中,无法使用中国剩余定理(CRT)对RSA实现进行优化,否则p和q的信息就会泄露,从而计算出私钥d。这使得该方案的速度至少比不考虑内存泄露攻击的实现速度慢四倍。
3.由于该方案使用一段静态内存存储明文的中间结果,为了保证计算结果的正确性,在多核CPU上只能运行一个安全方案的计算进程,极大地降低了性能。
另一个方案使用CPU内的一个核心中可用的寄存器作为数据缓存计算整个RSA-2048。该方案吞吐量较高,但是由于整个算法实现要在一个CPU核心上执行,不能实现算法内并行计算,计算延迟较高。
Cache方案将公钥密码算法的私钥和计算过程中的中间结果都保存在寄存器和Cache中。Cache的存储容量比寄存器要大,已有研究成果实现了4096比特的RSA。现在的CPU都有一个多核共享的L3Cache,使得其他CPU核心可以通过刷满L3Cache,使在Cache中的敏感信息被强制写回内存。所以在密码算法运行时,必须将其他CPU核心设置为no-fill模式,禁止使用Cache。这样会其他CPU核心上运行的程序性能大幅降低,影响程序的正常运行。而且只能有一个CPU核心运行该安全方案。
在多核CPU上,现有方案均存在一定不足,不能在满足抵抗内存泄漏攻击的基础上,同时获得较高的计算性能和较低的计算延迟。
发明内容
针对现有技术中的不足,本发明提供了一种抵抗内存泄漏攻击的密码算法多核实现方法,将CPU各核心内所有允许使用的寄存器作为多核寄存器缓存来存储密码计算过程中的敏感信息,将密码算法能够并行的部分拆分到多个CPU核心上同时运行,在每个CPU核心上优先使用寄存器缓存存储参数和中间结果,无法存储的数据加密后保存到内存中,各核心的寄存器缓存通过内存交换敏感数据的密文。该方法充分利用CPU的多核特性,在保证密码算法在抵抗内存泄漏攻击的同时尽力提高计算吞吐率和降低计算延迟。
基于该方法,本发明还提供了一种抵抗内存泄漏攻击的RSA计算装置。该装置使用CPU两个核心的寄存器缓存分别计算两个蒙哥马利模幂,并使用其中一个CPU核心的寄存器缓存读取两个模幂结果并计算RSA结果。该装置使用了预计算表、CRT技术等优化方法进行加速,使用AES-NI指令进行AES加解密。该装置RSA-2048的计算速度达到OpenSSL中算法实现的70%以上并降低了计算延迟。
本发明首先提出了一种多核寄存器缓存,如图2所示,其具有如下特征:
1.将CPU所有核心的可用的寄存器作为敏感数据的缓存,称为多核寄存器缓存。每个CPU核心可用的寄存器构成该核心的寄存器缓存,各个核心的寄存器缓存通过最后一层Cache或内存交换敏感数据,被交换的数据必须是加密的。整个多核寄存器缓存是明文区域,用于存储密码计算过程中的敏感信息,一般包括密钥、与密钥相关的参数、可能泄露密钥信息的中间变量。
2.对于x86CPU,每个CPU核心的寄存器缓存一般包括如下寄存器:标量指令使用的通用寄存器(GPR)、多媒体扩展指令集(MMX)使用的MM寄存器、单指令多数据流扩展指令集(SSE)使用的XMM寄存器、高级矢量扩展指令集(AVX)使用的YMM寄存器。其中YMM寄存器是256比特,是对XMM寄存器的扩展,XMM寄存器是YMM寄存器的低128比特。各指令集的指令要在对应的寄存器上进行操作。如果较老的x86CPU不支持某个指令集,则也没有对应的寄存器。
3.每个CPU核心的寄存器缓存分为两部分:寄存器计算集和寄存器存储集。寄存器计算集是当前一组计算指令(工作集)对应的一组寄存器。寄存器计算集为工作集提供操作数并保存计算结果。这里的工作集是指完成某个计算的一组指令。寄存器存储集是指除寄存器计算集之外的寄存器缓存中所有其他的寄存器。寄存器存储集用于存储当前工作集使用不到的参数和计算中间结果。
4.随着工作集的变化,每个CPU核心的寄存器计算集和寄存器存储集会进行相应的转换。例如,在Intel Haswell CPU上,当前工作集使用AVX指令在16个YMM寄存器上进行计算,则寄存器计算集包括16个YMM寄存器,寄存器存储集包括15个通用寄存器和8个MM寄存器。之后的一个工作集使用标量指令在通用寄存器上进行计算,则寄存器计算集包括15个通用寄存器,寄存器存储集包括16个YMM寄存器和8个MM寄存器。特别的,RSP通用寄存器保存着栈顶指针,不能用于计算或存储其他数据。
5.Cache和内存是密文区域。任何从每个CPU核心的寄存器缓存保存到Cache或内存中的敏感信息,必须首先在寄存器缓存中进行加密,再将密文保存到Cache或内存中。任何从Cache或内存中读取的敏感信息都是密文,首先读取到寄存器缓存中对其进行解密,而后用于计算。
本发明提供的一种抵抗内存泄漏攻击的密码算法多核实现方法,如图1所示,包括如下步骤:
步骤A:对密码算法的计算过程进行分析,将若干输入和输出没有互相依赖的计算部分作为能够并行计算的部分在不同CPU核心的寄存器缓存中同时进行计算;
步骤B:保存要使用的各CPU核心寄存器缓存中原有的数据并清空这些核心的寄存器缓存;
步骤C:从内存中读取参数保存到各CPU核心的寄存器缓存中并进行解密;
步骤D:进行密码计算,将敏感信息(参数和计算过程中的中间变量等)保存在CPU核心的寄存器缓存中;
步骤E:将无法保存在寄存器缓存中的敏感信息(寄存器缓存存储不下的敏感信息)进行加密保存到内存中;
步骤F:将计算过程中需要使用的保存在内存中的敏感信息读取到寄存器缓存中并进行解密;
步骤G:若计算结果是敏感信息,进行加密保存到内存中,否则直接保存到内存中;
步骤H:执行密码算法的串行部分,将并行计算过程中各CPU核心寄存器缓存保存到内存中的结果读取到一个CPU核心的寄存器缓存中并进行解密;
步骤I:清空使用过的各CPU核心的寄存器缓存并恢复数据。
进一步,上述方法中,对密码算法的计算过程进行分析,将计算过程分为并行部分和串行部分。密码算法的并行部分在多个CPU核心的寄存器缓存中同时进行计算,并将计算结果加密后保存到内存中,具体步骤为:步骤B初始化要使用的各个CPU核心的寄存器缓存,步骤C将各并行部分的计算参数读取到各个CPU核心的寄存器缓存中,重复执行步骤D、步骤E和步骤F,在各CPU核心的寄存器缓存中完成计算,步骤G将各CPU核心寄存器缓存中的计算结果进行加密,保存到内存中。密码算法的串行部分要在一个CPU核心的寄存器缓存中完成,具体步骤为:步骤H将并行部分的计算结果从内存中读出保存到一个CPU核心的寄存器缓存中并进行解密,重复执行步骤D、步骤E和步骤F,完成串行部分的计算,步骤G将整个密码算法的计算结果保存到内存中,步骤I清空并恢复使用过的各CPU核心的寄存器缓存。
进一步,步骤B根据并行部分拆分的数量占用若干CPU核心的寄存器缓存。如果CPU核心的寄存器缓存数量不够,在1个或多个CPU核心的寄存器缓存中进行2个或更多的并行部分计算。
进一步,步骤C分别从内存中读取各密码计算并行部分需要的参数保存到各CPU核心的寄存器缓存中并对其解密。
进一步,步骤D按照当前的工作集(完成某个计算的一组指令)将寄存器缓存划分为寄存器计算集和寄存器存储集,在工作集改变时调整寄存器计算集和寄存器存储集。特别的,应按照最大可能的寄存器计算集(如用AVX向量指令计算,最多只有16个YMM寄存器)划分工作集,使最常执行的工作集需要的存储空间小于最大可能的寄存器计算集。如蒙哥马利模乘是RSA的基本运算,可以将一个蒙哥马利模乘划分为多个工作集,使每个工作集都能够完全在寄存器中执行。此外,密码算法实现选用的算法和指令应综合考虑计算性能和需要的存储空间大小。如AVX指令数据吞吐量大,但是对于同一个数据需要更多的存储空间,标量指令数据吞吐量小,但是对于同一数据需要较少的存储空间,应首先保证工作集需要的数据都可以存在寄存器中,避免频繁地与Cache和内存交换数据,而后再考虑哪种指令计算速度更快。
进一步,步骤E和步骤F使用的加密和解密算法要选择一种快速的对称密码算法;如果该对称密码算法的轮密钥需要大量存储空间,则选择轮密钥即时生成,并将需要加密或解密的数据累积起来一起进行加密或解密,以降低重复生成轮密钥带来的性能损失。
进一步,步骤H选择一个已使用的CPU核心寄存器缓存来计算密码算法的串行部分。
进一步,密码算法运行在系统内核态下,在计算开始前关闭中断、禁止内核抢占,计算结束后打开中断、允许内核抢占,以使计算过程保持原子性,使寄存器缓存中的数据不会因进程切换被明文存储到内存中。
进一步,数据在寄存器和Cache、内存之间交换时加解密使用的密钥应保存在一组特殊的寄存器中,这些寄存器只能在内核态被读取和修改,不能被用户态下的进程读取和修改。这些寄存器不在寄存器缓存中,计算时不能被使用,也不能被清空。
本发明还提供一种采用上述方法的抵抗内存泄漏攻击的RSA密码算法实现装置,使用CPU两个核心的寄存器缓存分别计算两个蒙哥马利模幂,并使用其中一个CPU核心的寄存器缓存读取两个模幂结果并计算RSA结果;该装置使用预计算表、CRT技术等优化方法进行加速,使用AES-NI指令进行AES加解密。
采用本发明提供的抵抗内存泄漏攻击的密码算法多核实现方法,在操作系统内核可信的前提下,可以保证密码算法实现在运行时,不会有敏感信息以明文形式出现在Cache或内存中,同时最大限度地利用了CPU的多个核心及其寄存器,提高了计算吞吐率并降低了计算延迟。
附图说明
图1为本发明抵抗内存泄漏攻击的密码算法实现方法的流程示意图;
图2为本发明多核寄存器缓存的示意图;
图3为Intel Haswell CPU中一个核心的寄存器缓存的示意图;
图4为本发明RSA-2048计算装置的双CPU核心计算过程和数据交换示意图;
图5为本发明1024比特蒙哥马利模乘一轮计算的过程和数据存储示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
本实施例提供一种抵抗内存泄漏攻击的RSA多核计算装置。该装置包括RSA密码算法的多核安全高速实现方案、Intel Haswell CPU或更新架构的CPU和64位Linux操作系统。
Intel Haswell CPU具有如下特征:一个CPU内有多个核心,每个核心支持AVX2指令集、AES-NI指令集和MULX指令。Intel Haswell CPU内的多个核心共享L3Cache,能够通过L3Cache或内存共享数据。AVX2指令集是AVX指令集的升级版,支持256位整数操作。高级加密标准(AES)是一种常用的对称密码算法,支持128比特、192比特和256比特密钥长度。AES-NI指令集支持用汇编指令调用CPU内的ASIC AES实现,计算速度快,同时抵抗Cache攻击和时间攻击等侧信道攻击。MULX是新引入的一个三操作数标量乘法指令,乘法结果可以不破坏被乘数和乘数,减少乘法计算中的MOV指令。
Intel Haswell CPU根据具体CPU型号有2个或4个核心,如Intel Haswell i74770R有4个核心,每个核心都有自己的寄存器缓存。在64位Linux操作系统的支持下,每个核心的寄存器缓存如图3所示:
GPR是通用寄存器,在64位模式下是16个64比特寄存器。YMM是AVX2指令集操作的寄存器,在64位模式下是16个256比特寄存器。XMM是YMM寄存器的低128位,在64为模式下是16个128比特寄存器,AES-NI指令集在XMM寄存器上进行操作。MM是MMX指令集操作的寄存器,在64位模式下是8个64比特寄存器。以上所有寄存器的容量之和是5632比特,即704字节。此外,DR是调试寄存器,共8个64比特寄存器,其中4个寄存器可以使用,用于存储AES密钥。CR是控制寄存器,共8个64比特寄存器,不可被占用。所以该装置共有2个或4个寄存器缓存,每个寄存器缓存的大小是704字节。
RSA是一种广泛使用的公钥密码算法,其安全性基于大整数分解的困难性,主要计算是大整数模幂,例如RSA-2048的主要计算是一个2048比特的大整数模幂。中国剩余定理(CRT)是一种RSA计算的优化方法,可以将RSA-2048的主要计算转化为两个1024比特的大整数模幂计算,性能提升4倍。
根据本发明提出的抵抗内存泄漏攻击的密码算法多核实现方法和RSA基于CRT技术计算过程中的并行性实现计算装置。本装置要计算的两个模幂是数据无关的,可以同时进行,所以将两个模幂分别放在CPU的两个核心的寄存器缓存中进行计算,并将模幂的计算结果加密保存在内存中,而后在一个CPU核心的寄存器缓存中读取两个模幂的计算结果并计算RSA的结果。计算过程如图4所示,p和q是模数N的两个素因子,Cp=C mod p,Cq=C modq是底数C模p和模q的结果,dp=d mod p,dq=d mod q是指数d模p和模q的结果,两个CPU核心分别计算两个模幂Mp和Mq是模幂的计算结果,最后在第二个CPU核心的寄存器缓存中计算出RSA的计算结果M。由于主要计算量是两个模幂,最后RSA结果的计算量很小,所以我们的方案通过用两个寄存器缓存同时计算两个模幂将RSA的计算延迟降低了接近一半。
模幂用模乘和模平方计算,我们使用蒙哥马利模乘来计算模乘。在x86CPU上,蒙哥马利模乘主要有两种实现方法:标量实现和向量实现。标量实现使用标量乘法指令和标量带进位加法指令,将蒙哥马利模乘中的参数和中间变量都拆分为64比特的字。由于没有向量的带进位加法指令,向量实现需要使用冗余表示的方法来存储参数和中间变量,用空出的若干高位来累加进位,最后统一处理进位,来解决进位向高位传播的问题。冗余表示方法需要一倍以上的空间来存储一个变量。向量实现计算速度快,但是需要的存储空间大于寄存器缓存的容量,需要与内存频繁交换数据。所以,本发明的装置使用标量实现,使用标量指令和通用寄存器进行计算,使用YMM向量寄存器和MM向量寄存器存储模幂计算需要的参数和中间结果,并将1024比特蒙哥马利模乘的计算过程切分为4个部分,使整个计算过程中需要的计算参数和中间变量都保存在寄存器缓存中。
本发明提出的计算装置的将RSA的计算过程分为三层:模乘层、模幂层和RSA层。如图4所示,模幂层调用模乘层进行计算,RSA层使用模幂层的结果进行计算,CPU的两个核心首先计算模幂层,而后其中一个核心计算RSA层。
模乘层使用标量指令乘法指令MULX和标量带进位加法指令ADC实现全寄存器的1024比特蒙哥马利模乘,共分成4部分计算,每部分都是一个工作集,如图5所示。该工作集的所有中间状态变量和乘法结果都保存在15个64比特通用寄存器中,参数A、B和M从YMM寄存器获取,产生的临时变量q被保存到MM寄存器中供之后的蒙哥马利模乘部分使用。所以对于这4个工作集,寄存器计算集包括15个通用寄存器,寄存器存储集包括16个YMM寄存器和8个MM寄存器。图5描述了1024比特蒙哥马利模乘一轮计算的过程和数据存储。
模幂层调用1024比特蒙哥马利模乘来计算1024比特蒙哥马利模幂。模幂计算使用了预计算表的加速方法来减少模乘的计算次数。在模幂的计算过程中首先计算一个25大小的预计算表,AES加密后存储到内存中,而后根据指数从预计算表中查找预计算值读入XMM寄存器进行AES解密。在计算预计算表时由于寄存器缓存大小的限制,计算出每个预计算立刻加密存储到内存中。AES加解密时使用AES-NI指令,从调试寄存器获得AES密钥,在XMM寄存器中进行计算,使用即时生成(on-the-fly)的方法产生轮密钥,并用每一轮的轮密钥对所有需要加密/解密的数据进行操作,即计算一次轮密钥就完成对所有数据的一轮操作。模幂层将计算结果加密后保存在内存中。
RSA层将两个核心模幂层的计算结果和RSA参数读入寄存器缓存并进行解密,使用CRT方法完成RSA计算,将计算结果保存到内存中。
此外,该装置将RSA-2048实现作为内核模块集成到Linux内核中,使其在内核态执行。在RSA-2048计算开始之前禁止内核抢占和关闭中断,在RSA-2048计算结束时打开内核抢占,打开中断,这样保证RSA-2048计算的原子性,不会因为进程调度使寄存器中的数据被明文保存到内存中。而且,在开机阶段通过用户手动输入PIN码的方式生成AES密钥,并将其保存到各个CPU核心的调试寄存器中,即各CPU核心保持相同的AES密钥。
该装置可以在Intel Haswell CPU i7 4770R的4个核心上同时执行两个独立的RSA-2048计算,其中每个RSA-2048计算使用两个CPU核心及其寄存器缓存,两个RSA-2048计算不会相互影响。
本发明提出的实现装置将RSA-2048的计算放在两个CPU核心的寄存器缓存中,内存中每个CPU核心的寄存器缓存有各自的加密的预计算表,模幂计算完成时一个CPU核心将模幂计算结果加密后通过内存传递给另一个CPU核心,所以在整个RSA-2048的计算过程中没有明文的敏感信息出现在内存中。而且,由于1024比特蒙哥马利模乘完全在寄存器中进行,整个RSA的计算过程与内存交换数据的次数很少,所以AES加解密次数也很少,对性能造成的损失也很小。该装置RSA-2048的计算速度达到OpenSSL中RSA-2048实现的70%以上,在保证安全的同时达到较高的计算吞吐量和较低的计算延迟。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (9)
1.一种抵抗内存泄漏攻击的密码算法实现方法,其特征在于,包括以下步骤:
步骤A:对密码算法的计算过程进行分析,将若干输入和输出没有互相依赖的计算部分作为能够并行计算的部分在不同CPU核心的寄存器缓存中同时进行计算;
步骤B:保存要使用的各CPU核心寄存器缓存中原有的数据并清空这些核心的寄存器缓存;
步骤C:从内存中读取参数保存到各CPU核心的寄存器缓存中并进行解密;
步骤D:进行密码计算,将敏感信息保存在CPU核心的寄存器缓存中;
步骤E:将无法保存在寄存器缓存中的敏感信息进行加密保存到内存中;
步骤F:将计算过程中需要使用的保存在内存中的敏感信息读取到寄存器缓存中并进行解密;
步骤G:若计算结果是敏感信息,进行加密保存到内存中,否则直接保存到内存中;
步骤H:执行密码算法的串行部分,将并行计算过程中各CPU核心寄存器缓存保存到内存中的结果读取到一个CPU核心的寄存器缓存中并进行解密;
步骤I:清空使用过的各CPU核心的寄存器缓存并恢复数据。
2.如权利要求1所述的方法,其特征在于:对密码算法的计算过程进行分析,将计算过程分为并行部分和串行部分;密码算法的并行部分在多个CPU核心的寄存器缓存中同时进行计算,并将计算结果加密后保存到内存中,具体步骤为:步骤B初始化要使用的各个CPU核心的寄存器缓存,步骤C将各并行部分的计算参数读取到各个CPU核心的寄存器缓存中,重复执行步骤D、步骤E和步骤F,在各CPU核心的寄存器缓存中完成计算,步骤G将各CPU核心寄存器缓存中的计算结果进行加密,保存到内存中;密码算法的串行部分要在一个CPU核心的寄存器缓存中完成,具体步骤为:步骤H将并行部分的计算结果从内存中读出保存到一个CPU核心的寄存器缓存中并进行解密,重复执行步骤D、步骤E和步骤F,完成串行部分的计算,步骤G将整个密码算法的计算结果保存到内存中,步骤I清空并恢复使用过的各CPU核心的寄存器缓存。
3.如权利要求1所述的方法,其特征在于:步骤B根据并行部分拆分的数量占用若干CPU核心的寄存器缓存;如果CPU核心的寄存器缓存数量不够,在1个或多个CPU核心的寄存器缓存中进行2个或更多的并行部分计算。
4.如权利要求1所述的方法,其特征在于:按照当前的工作集将寄存器缓存划分为寄存器计算集和寄存器存储集,在工作集改变时调整寄存器计算集和寄存器存储集。
5.如权利要求4所述的方法,其特征在于:按照最大可能的寄存器计算集划分工作集,使最常执行的工作集需要的存储空间小于最大可能的寄存器计算集,并且密码算法实现选用的算法和指令应综合考虑计算性能和需要的存储空间大小。
6.如权利要求1所述的方法,步骤E和步骤F使用的加密和解密算法选择一种快速的对称密码算法;如果该对称密码算法的轮密钥需要大量存储空间,则选择轮密钥即时生成,并将需要加密或解密的数据累积起来一起进行加密或解密,以降低重复生成轮密钥带来的性能损失。
7.如权利要求1所述的方法,步骤H选择一个已使用的CPU核心寄存器缓存来计算密码算法的串行部分。
8.如权利要求1至7中任一权利要求所述的方法,其特征在于:密码算法运行在系统内核态下,在计算开始前关闭中断、禁止内核抢占,计算结束后打开中断、允许内核抢占,以使计算过程保持原子性,使寄存器缓存中的数据不会因进程切换被明文存储到内存中;数据在寄存器和Cache、内存之间交换时加解密使用的密钥保存在一组特殊的寄存器中,该寄存器只能在内核态被读取和修改,不能被用户态下的进程读取和修改,这些寄存器不在寄存器缓存中,计算时不能被使用,也不能被清空。
9.一种采用权利要求1所述方法的抵抗内存泄漏攻击的RSA密码算法实现装置,其特征在于,使用CPU两个核心的寄存器缓存分别计算两个蒙哥马利模幂,并使用其中一个CPU核心的寄存器缓存读取两个模幂结果并计算RSA结果;该装置使用预计算表、CRT技术进行加速,使用AES-NI指令进行AES加解密。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610580036.0A CN106130719A (zh) | 2016-07-21 | 2016-07-21 | 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610580036.0A CN106130719A (zh) | 2016-07-21 | 2016-07-21 | 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106130719A true CN106130719A (zh) | 2016-11-16 |
Family
ID=57289562
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610580036.0A Pending CN106130719A (zh) | 2016-07-21 | 2016-07-21 | 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106130719A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110086602A (zh) * | 2019-04-16 | 2019-08-02 | 上海交通大学 | 基于gpu的sm3密码散列算法的快速实现方法 |
CN111177805A (zh) * | 2019-12-12 | 2020-05-19 | 海光信息技术有限公司 | 一种提高处理器运行安全性的方法、装置及cpu芯片 |
CN111241551A (zh) * | 2019-09-19 | 2020-06-05 | 中国科学院信息工程研究所 | 基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法 |
CN111814162A (zh) * | 2020-06-30 | 2020-10-23 | 浙江大学 | 一种基于定制硬件安全属性的内核敏感数据保护方法 |
US20210105253A1 (en) * | 2019-10-07 | 2021-04-08 | Cameron International Corporation | Security system and method for pressure control equipment |
CN113535150A (zh) * | 2021-07-29 | 2021-10-22 | 北京大学 | 一种针对dram/nvm混合内存的无内存泄漏编程方法 |
CN113688407A (zh) * | 2021-07-30 | 2021-11-23 | 山东云海国创云计算装备产业创新中心有限公司 | 一种数据管理方法及相关装置 |
CN109522736B (zh) * | 2018-12-13 | 2021-12-10 | 中国科学院信息工程研究所 | 一种在操作系统中进行密码运算的方法和系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
US20110161677A1 (en) * | 2009-12-31 | 2011-06-30 | Savagaonkar Uday R | Seamlessly encrypting memory regions to protect against hardware-based attacks |
CN102694649A (zh) * | 2012-05-29 | 2012-09-26 | 北京大学 | 一种抵御冷启动攻击的公钥密码实现方法 |
CN104636276A (zh) * | 2015-01-07 | 2015-05-20 | 大连理工大学 | 一种保护内存存储器数据机密性和完整性的方法 |
US9047263B2 (en) * | 2013-01-24 | 2015-06-02 | Dell Products L.P. | System and method for secure SMI memory services |
CN104883256A (zh) * | 2014-02-27 | 2015-09-02 | 中国科学院数据与通信保护研究教育中心 | 一种抵抗物理攻击和系统攻击的密钥保护方法 |
-
2016
- 2016-07-21 CN CN201610580036.0A patent/CN106130719A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110161677A1 (en) * | 2009-12-31 | 2011-06-30 | Savagaonkar Uday R | Seamlessly encrypting memory regions to protect against hardware-based attacks |
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
CN102694649A (zh) * | 2012-05-29 | 2012-09-26 | 北京大学 | 一种抵御冷启动攻击的公钥密码实现方法 |
US9047263B2 (en) * | 2013-01-24 | 2015-06-02 | Dell Products L.P. | System and method for secure SMI memory services |
CN104883256A (zh) * | 2014-02-27 | 2015-09-02 | 中国科学院数据与通信保护研究教育中心 | 一种抵抗物理攻击和系统攻击的密钥保护方法 |
CN104636276A (zh) * | 2015-01-07 | 2015-05-20 | 大连理工大学 | 一种保护内存存储器数据机密性和完整性的方法 |
Non-Patent Citations (2)
Title |
---|
YUAN ZHAO等: "RegRSA: Using Registers as Buffers to Resist Memory Disclosure Attacks", 《ICT SYSTEMS SECURITY AND PRIVACY PROTECTION, SEC 2016》 * |
唐笑林: "高效RSA 算法的研究与并行实现", 《计算机工程》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522736B (zh) * | 2018-12-13 | 2021-12-10 | 中国科学院信息工程研究所 | 一种在操作系统中进行密码运算的方法和系统 |
CN110086602B (zh) * | 2019-04-16 | 2022-02-11 | 上海交通大学 | 基于gpu的sm3密码散列算法的快速实现方法 |
CN110086602A (zh) * | 2019-04-16 | 2019-08-02 | 上海交通大学 | 基于gpu的sm3密码散列算法的快速实现方法 |
CN111241551A (zh) * | 2019-09-19 | 2020-06-05 | 中国科学院信息工程研究所 | 基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法 |
CN111241551B (zh) * | 2019-09-19 | 2022-01-25 | 中国科学院信息工程研究所 | 基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法 |
US20210105253A1 (en) * | 2019-10-07 | 2021-04-08 | Cameron International Corporation | Security system and method for pressure control equipment |
US11765131B2 (en) * | 2019-10-07 | 2023-09-19 | Schlumberger Technology Corporation | Security system and method for pressure control equipment |
CN111177805A (zh) * | 2019-12-12 | 2020-05-19 | 海光信息技术有限公司 | 一种提高处理器运行安全性的方法、装置及cpu芯片 |
CN111177805B (zh) * | 2019-12-12 | 2023-10-03 | 海光信息技术股份有限公司 | 一种提高处理器运行安全性的方法、装置及cpu芯片 |
CN111814162A (zh) * | 2020-06-30 | 2020-10-23 | 浙江大学 | 一种基于定制硬件安全属性的内核敏感数据保护方法 |
CN113535150B (zh) * | 2021-07-29 | 2023-09-22 | 北京大学 | 一种针对dram/nvm混合内存的无内存泄漏编程方法 |
CN113535150A (zh) * | 2021-07-29 | 2021-10-22 | 北京大学 | 一种针对dram/nvm混合内存的无内存泄漏编程方法 |
CN113688407A (zh) * | 2021-07-30 | 2021-11-23 | 山东云海国创云计算装备产业创新中心有限公司 | 一种数据管理方法及相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106130719A (zh) | 一种抵抗内存泄漏攻击的密码算法多核实现方法及装置 | |
Go et al. | {APUNet}: Revitalizing {GPU} as packet processing accelerator | |
CN109479003B (zh) | 用于安全椭圆曲线密码指令的处理器、系统、方法和设备 | |
CN107924448A (zh) | 硬件实施的单向密码术 | |
Mei et al. | CUDA-based AES parallelization with fine-tuned GPU memory utilization | |
US10089500B2 (en) | Secure modular exponentiation processors, methods, systems, and instructions | |
CN105678173B (zh) | 基于硬件事务内存的vTPM安全保护方法 | |
TW200818831A (en) | Programmable processing unit | |
CN106687938A (zh) | 跨电源周期维护安全处理环境 | |
Wang et al. | Toward scalable fully homomorphic encryption through light trusted computing assistance | |
Dürmuth et al. | On password guessing with GPUs and FPGAs | |
US11403005B2 (en) | Cryptographic memory ownership | |
Pessl et al. | Curved tags–a low-resource ECDSA implementation tailored for RFID | |
Guan et al. | Copker: a cryptographic engine against cold-boot attacks | |
CN110659505A (zh) | 用于对机密数据和附加认证数据进行加密或解密的加速器 | |
Shrivastava et al. | Securator: A fast and secure neural processing unit | |
Seo | SIKE on GPU: Accelerating supersingular isogeny-based key encapsulation mechanism on graphic processing units | |
Xiong et al. | SecNDP: Secure near-data processing with untrusted memory | |
CN113849804A (zh) | 用于访问密码计算元数据和高速缓存扩展的无冲突散列 | |
Fu et al. | VIRSA: Vectorized in-register RSA computation with memory disclosure resistance | |
US20230246806A1 (en) | Efficient masking of secure data in ladder-type cryptographic computations | |
Simplicio Jr et al. | The Lyra2 reference guide | |
EP3972187A1 (en) | Protection of authentication tag computation against power and electromagnetic side-channel attacks | |
US11924320B2 (en) | Devices and methods for protecting cryptographic programs | |
Leboeuf et al. | High performance prime field multiplication for GPU |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20161116 |
|
WD01 | Invention patent application deemed withdrawn after publication |