CN115994389A - 一种基于risc-v架构的硬件内存加密系统及其应用 - Google Patents
一种基于risc-v架构的硬件内存加密系统及其应用 Download PDFInfo
- Publication number
- CN115994389A CN115994389A CN202310027782.7A CN202310027782A CN115994389A CN 115994389 A CN115994389 A CN 115994389A CN 202310027782 A CN202310027782 A CN 202310027782A CN 115994389 A CN115994389 A CN 115994389A
- Authority
- CN
- China
- Prior art keywords
- key
- memory
- encryption
- instruction
- data
- 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
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明属于硬件内存安全领域,具体涉及一种基于RISC‑V架构的硬件内存加密系统及其应用,包括:基于RISC‑V架构所设置的密钥管理模块、加解密引擎、传输模块和编程接口;其中,扩展了RISC‑V架构的指令集,包含setcbit和setkybit两条指令,通过编程接口调用这两条指令,实现对内存空间加密标志位和密钥编号位的控制,可将内存空间设置为加密空间;密钥管理模块采用片上加内存的密钥存储方式进行密钥管理,采用LRU策略维护片上缓冲区,采用Cuckoo Hash算法维护内存密钥表;RISC‑V指令集经扩展,还包含datats和accdatats两条指令,通过配置编程接口能够调用这两条指令,控制传输模块进行内存数据的发送和接收。本发明能够更有效地保护内存数据安全。
Description
技术领域
本发明属于硬件内存安全领域,更具体地,涉及一种基于RISC-V架构的硬件内存加密系统及其应用。
背景技术
为了防止针对内存设备软硬件的攻击造成的内存数据泄漏风险,工业界和学术界一般会对内存数据进行加密。加密方式主要分为硬件加密和软件加密。
目前学术界和工业界已有许多成熟的硬件内存加密技术。Intel公司研发的MKTME技术是一种多密钥的全内存加密技术,它使用物理地址的上位数作为keyID,支持使用多把密钥对内存进行加密。它在内存写入时加密,在内存读取时解密,从而防止复杂离线攻击下数据被窃取。它的结构和功能简单,架构上可叠加其他安全特性,对软件兼容性也很好。中国团队研发的Penglai基于开源RISC-V架构,利用PMP/sPMP功能模块提供飞地功能,基于openSBI开源监管接口,不需要修改硬件即可完成加密,利用硬件TVM功能在不受信任的主机和飞地之间进行4KB页面级别的细粒度隔离,提升了内存加密系统的可扩展性。
然而,一些问题仍然存在。现有硬件内存加密技术如Intel公司的MKTME技术和AMD公司的SEV技术都以页为粒度对内存进行加密,而SGX和Trustzone只能对有限块区域进行加密,加密区域受限。其次,现有硬件内存加密技术仅支持少量密钥,Intel公司的MKTME技术以及AMD公司的SME技术等加密技术可使用的加密区域数量小,可能产生高性能开销。Intel公司的MKTME技术可信密钥存储区域仅为32k,每个密钥表的标识在4-15bit之间,密钥存储会占用现有物理地址空闲位,存在内存数据泄露风险。此外,现有硬件内存加密系统不支持全过程加密的数据传输。
因此,如何高效地实现内存数据安全保护,是目前硬件内存加密系统亟需改进的方向。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了一种基于RISC-V架构的硬件内存加密系统及其应用,其目的在于提出一种硬件内存加密系统,以更加高效地保护内存数据安全。
为实现上述目的,按照本发明的一个方面,提供了一种基于RISC-V架构的硬件内存加密系统,包括:基于RISC-V架构所设置的密钥管理模块、加解密引擎、传输模块和编程接口;其中,
所述RISC-V架构的指令集经扩展,包含有用于内存加密的setcbit和setkybit两条指令,通过所述编程接口,使得所述密钥管理模块能够用于调用指令setcbit和setkybit,以分别设置已申请内存空间的加密标志位和密钥编号,从而将内存空间设置为加密空间;
所述密钥管理模块在进行密钥管理时分为密钥存储和密钥获取两部分,其中,采用片上加内存的密钥存储方式,并采用LRU替换策略维护片上缓冲区,采用Cuckoo HashKey Table作为内存密钥表;
所述RISC-V架构的指令集经扩展,还包含用于内存数据传输的datats和accdatats两条指令,通过配置所述编程接口,使得所述传输模块能够调用指令datats和accdatats,分别进行内存数据的发送和接收。
进一步,所述密钥管理模块还用于根据用户请求,调用setkybit、setcbit指令,将待释放内存页面的密钥编号和加密标志位恢复为默认值,从而将内存空间设置为非加密空间;通过Free方法,通知操作系统释放该内存空间,从而释放加密内存空间。
进一步,采用RV64 R-type指令格式,设计得到指令genky、setky、setcbit、setkybit、datats以及accdatats的定义方法,具体为:
定义genky指令的方法为:定义指令无写回结果,指令无需读取操作数;
定义setky指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为共享密钥虚拟地址;
定义setcbit指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为待设置的虚拟客机页面的虚拟地址;
定义setkybit指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为待设置的虚拟客机页面的虚拟地址;
定义datats指令的方法为:定义指令无写回结果,指令需读取操作数rs1、rs2,操作数rs1的值为待传输内存的虚拟地址,操作数rs2的值为目标信息结构体的虚拟地址;
定义accdatats指令的方法为:定义指令无写回结果,指令需读取操作数rs1、rs2,操作数rs1的值为待接收数据的虚拟地址,操作数rs2的值为客机信息结构体的虚拟地址。
进一步,所述密钥管理模块进行密钥管理的方式为:
使用一个缓冲区存储部分虚拟机或进程的密钥,先访问缓冲区,若该密钥不存在,则在内存密钥表中查找,若仍不存在,生成一个密钥并进行存储;当进程被销毁,将该进程对应的所有密钥清除。
进一步,所述RISC-V架构的指令集经扩展,还包含有用于内存加密的genky、setky两条指令,genky指令用于使得密钥管理模块为用户进程生成一个默认密钥;setky指令用于用户指定一个私有密钥;
所述密钥管理模块进行密钥管理的具体方式为:
S1、使用一个缓冲区存储最近常用内存页面所对应的部分虚拟机或进程的密钥;
S2、经触发,通过可信通道取得待加解密数据所在当前内存页面的虚拟机编号、进程编号、核编号、密钥编号和加密标志位,根据密钥编号、虚拟机编号、进程编号和核编号以及所申请的内存空间地址,确定目标密钥,判断目标密钥是否位于缓冲区中;若是,直接将目标密钥传输至加解密引擎;若否,到步骤S3;其中,所述密钥编号为所述默认密钥的编号或所述私有密钥的编号;
S3:判断逐出到内存密钥表中的密钥数量是否为0;若是,到步骤S8;若否,到步骤S4;
S4:判断目标密钥是否位于内存密钥表中;若是,将目标密钥传输至加解密引擎,转到步骤S5;若否,到步骤S8;
S5:判断所述缓冲区是否有空闲存储空间;若是,转到步骤S7;若否,转到步骤S6;
S6:使用LRU策略找到最近最少使用的密钥,将最近最少使用的密钥用可信平台模组所生成的密钥进行算法加密后,逐出到内存密钥表中,逐出密钥计数器加一,并转到步骤S7;
S7:将目标密钥插入缓冲区;
S8:向用户提出错误。
进一步,所述述密钥管理模块在将目标密钥插入缓冲区后,还用于:
通过加解密引擎使用可信平台模组所生成的密钥对被逐出待定密钥K-e进行加密,将K-e插入内存密钥表中,其中,所述内存密钥表为由密钥管理模块构建并管理的Cuckoo Hash Key Table。
本发明还提供一种采用如上所述的一种基于RISC-V架构的硬件内存加密系统执行内存加密传输的方法,将所述硬件内存加密系统嵌入计算机系统中,其中,所述硬件内存加密系统中的加解密引擎和密钥管理模块设置在所述计算机系统的内存控制器中,并执行以下步骤:
在所述计算机系统开启且所述硬件内存加密系统完成自检后,并当用户申请加密内存空间时,通过编程接口,所述硬件内存加密系统中的密钥管理模块调用指令setcbit和setkybit,分别设置已申请内存空间的加密标志位和密钥编号,从而将内存空间设置为加密空间;在接收到计算机系统的处理器控制内存控制器从内存读取数据或向内存写入数据的触发信号后,通过可信通道取得数据所在当前内存页面的虚拟机编号、进程编号、核编号、密钥编号和加密标志位;根据所述加密标志位,确定数据是否需要加密;若否,直接将数据送出内存控制器,若是,基于所述密钥编号、所述虚拟机编号、所述进程编号和所述核编号以及所述加密空间的地址,执行密钥访问,获取目标密钥并分发给所述硬件内存加密系统中的加解密引擎;
所述加解密引擎依据密钥使用加密算法加解密数据,并将数据交给所述内存控制器;
所述硬件内存加密系统中的传输模块当接收到数据传输的指令请求并通过安全性验证后,调用datats和accdatats指令,分别进行内存数据的发送和接收,实现全过程加密传输。
进一步,发送内存数据的实现方式为:
在计算机系统向远程服务器发起数据传输请求,并在接收到远程服务器所发送的传输公钥和身份信息时,所述加解密引擎利用所述传输密钥将一个三元组结构加密,所述三元组结构顺序分别为:待传输数据的VMID-VPIDcore-KeyID信息,密钥,以及待传输数据所在的页表项;所述计算机系统将所述三元组结构以及待传输的内存数据发送至远程服务器,其中,VMID-VPIDcore-KeyID代表对应页面所属的虚拟机编号和进程编号以及所使用的密钥编号。
进一步,发送内存数据的具体实现方式为:
(1)所述计算机系统按照msg=tS0||randN0||size,发送本地数据传输请求:IDA||cla||PB||sigB(msg)||msg,式中,||符号表示字符串的连接,msg表示本地数据传输请求信息,tS0表示时间戳信息,randN0表示随机数,size代表传输数据的大小,cla表示操作类型,代表虚拟机迁移或数据传输,PB表示计算机系统传输模块产生的公钥,sigB(msg)是一个函数,其功能是利用传输模块产生的私钥对msg的签名;
(2)所述计算机系统在接收到远程服务器所发送的身份串IDA||sigK(randN0)||EPB(rVMID||rPID)之后,所述传输模块对IDA||sigK(randN0)进行校验;若校验成功,则发送EPK(sk)||SM4SK(sigB(H(KT))||M到远程服务器,式中,sk为所述计算机系统为本次传输产生的随机会话密钥,EPK(sk)代表所述本地计算机系统利用远端设备公钥加密sk,SM4SK()代表使用会话密钥加密,KT代表VMID||VPIDcore||Key0||Key1,SM3(M)代表使用SM3算法计算KT的校验值;其中,所述身份串IDA||sigK(randN0)||EPB(rVMID||rPID)是在远程服务器查找预先添加在其认可列表的设备码IDA并校验:verPB(sigB)=msg之后,式中,verPB(sigB)是一个函数,其功能为远程服务器利用PB校验msg的签名,若校验成功,根据cla进行配置,并向所述计算机系统所发送的身份串;式中,K表示远程服务器为AC证书系统下的私钥,sigK(randN0)表示返回远程服务器利用私钥对随机数randN0的签名,rVMID表示远程服务器上目标虚拟机的编号,rPID表示远程服务器上目标进程编号,EPB()是一个函数表示使用PB对rVMID||rPID进行SM2加密;
(3)远程服务器成功获取sk以及KT信息后,向所述计算机系统发送Ack信号,其中,Ack信号代表密钥就位确认信号;
(4)所述计算机系统在接收到Ack信号后发送Mc,其中,Mc代表加密的内存数据。
本发明还提供一种计算机系统,嵌有如上所述的一种基于RISC-V架构的硬件内存加密系统,用于执行如上所述的内存加密传输的方法。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
本发明所示提出一种基于RISC-V架构的硬件内存加密系统,针对现有硬件内存加密解决方案进行改进,更有效地保护内存数据安全。本发明首先提出扩展RISC-V指令集,利用新增指令创建内存安全空间管理办法,将一般内存转换成加密空间,增加加密区域;其次,设计多密钥驱逐方案,在内存领域实施LRU替换策略,并应用Cuckoo Hash算法,实现了密钥数量无限制和密钥获取高效率;另外,采用上述协议授权的内存数据传输方案,实现本地与远端的内存数据全过程加密传输,该方案在现有内存加密方案中系首次实现。
附图说明
图1为本发明实施例中用于基于RISC-V架构及国密算法的硬件内存加密系统的架构模型图;
图2为本发明实施例中用于基于RISC-V架构及国密算法的硬件内存加密系统读写数据时加解密内存的流程示意图;
图3为本发明实施例中用于基于RISC-V架构及国密算法的硬件内存加密系统自定义指令编码示意图;
图4为本发明实施例中用于基于RISC-V架构及国密算法的硬件内存加密系统Cuckoo Hash Key Table Entry的示意图;
图5为本发明实施例中用于基于RISC-V架构及国密算法的硬件内存加密系统内存数据加密方式;
图6为本发明实施例中用于基于RISC-V架构及国密算法的硬件内存加密系统内存数据传输方案的流程示意图;
图7为本发明实施例中用于基于RISC-V架构及国密算法的硬件内存加密系统中加密引擎模块的架构示意图;
图8为本发明实施例中用于基于RISC-V架构及国密算法的硬件内存加密系统密钥管理器的架构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例一
一种基于RISC-V架构的硬件内存加密系统,包括:基于RISC-V架构所设置的密钥管理模块、加解密引擎、传输模块和编程接口;其中,
所述RISC-V架构的指令集经扩展,包含有用于内存加密的setcbit和setkybit两条指令,通过所述编程接口,使得所述密钥管理模块能够用于调用指令setcbit和setkybit,以分别设置已申请内存空间的密钥编号和加密标志位,从而将内存空间设置为加密空间;
密钥管理模块在进行密钥管理时分为密钥存储和密钥获取两部分,其中,采用片上加内存的密钥存储方式,并采用LRU替换策略维护片上缓冲区,采用Cuckoo Hash KeyTable作为内存密钥表;
RISC-V架构的指令集经扩展,还包含用于内存数据传输的datats和accdatats两条指令,通过编程接口,使得传输模块能够调用指令datats和accdatats,分别进行内存数据的发送和接收。
可作为优选的实施方案,上述密钥管理模块还用于根据用户请求,调用setky、setcbit指令,将待释放内存页面的密钥编号和加密标志位恢复为默认值,从而将内存空间恢复为非加密空间;通过Free方法,通知操作系统释放该内存空间,从而释放加密内存空间。
也就是,为实现内存数据传输及虚拟机迁移的功能,本系统在RISC-V原有指令集下做了适当扩展,创新地增加了六条指令,分别为genky,setky,setcbit,setcbit,datats,accdatats,可作为优选的实施方案,采用RV64 R-type指令格式,设计得到指令genky、setky、setcbit、setkybit、datats以及accdatats的定义方法,具体为:
定义genky指令的方法为:定义指令无写回结果,指令无需读取操作数;
定义setky指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为共享密钥虚拟地址;
定义setcbit指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为待设置的虚拟客机页面的虚拟地址;
定义setkybit指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为待设置的虚拟客机页面的虚拟地址;
定义datats指令的方法为:定义指令无写回结果,指令需读取操作数rs1、rs2,操作数rs1的值为待传输内存的虚拟地址,操作数rs2的值为目标信息结构体的虚拟地址;
定义accdatats指令的方法为:定义指令无写回结果,指令需读取操作数rs1、rs2,操作数rs1的值为待接收数据的虚拟地址,操作数rs2的值为客机信息结构体的虚拟地址。
对于更为具体的定义方式,如图3所示,本实施例给出如下示例:
(1)定义区间:指令第0位至第1位的QUADRANT区间,表示可标识指令长度种类;指令第2位至第6位区间为指令操作码OPCODE,用于选择EXTOPT指令组;指令第12至14位的FUNCT3区间为功能编码区间,用于定义传输内存数据的具体指令;指令第20至24位的OPTN区间为功能编码区间,用于定义内存加密的具体指令;指令第25至31位的EXTOPT区间,表示扩展操作码标识;
(2)根据区间定义,定义用于给加密内存空间生成密钥的genky指令为:
令QUADRANT=0x11,表示可标识指令长度种类为17;OPCODE=0x1d,即采用EXTOPT指令组;OPTN=0x0,即该值编码为genky指令;EXTOPT=0x0,即该值编码指令为用于内存加密的指令;
定义用于为当前进程导入用户密钥的setky指令为:
令QUADRANT=0x11,表示可标识指令长度种类为17;OPCODE=0x1d,即采用EXTOPT指令组;OPTN=0x1,即该值编码为setky指令;EXTOPT=0x0,即该值编码指令为用于内存加密的指令;RD可使用任意RISC-V通用寄存器;
定义用于将指定页面设为加密页的setcbit指令为:
令QUADRANT=0x11,表示可标识指令长度种类为17;OPCODE=0x1d,即采用EXTOPT指令组;OPTN=0x2,即该值编码为setcbit指令;EXTOPT=0x0,即该值编码指令为用于内存加密的指令;
定义用于将指定页面设为用户密钥加密页的setkybit指令为:
令QUADRANT=0x11,表示可标识指令长度种类为17;OPCODE=0x1d,即采用EXTOPT指令组;OPTN=0x3,即该值编码为setkybit指令;EXTOPT=0x0,即该值编码指令为用于内存加密的指令;
定义用于传输当前进程指定数据到指定目标的datats指令为:
令QUADRANT=0x11,表示可标识指令长度种类为17;OPCODE=0x1d,即采用EXTOPT指令组;FUNCT3=0x0,即该值编码为datats指令;EXTOPT=0x1,即该值编码指令为用于传输内存的指令;RD和RS1可使用任意RISC-V通用寄存器;
定义用于接受指定目标数据到当前进程指定区域的accdatats指令为:
令QUADRANT=0x11,表示可标识指令长度种类为17;OPCODE=0x1d,即采用EXTOPT指令组;FUNCT3=0x2,即该值编码为accdatats指令;EXTOPT=0x1,即该值编码指令为用于传输内存的指令;
其中,EXTOPT指令组为由指令genky、setky、setcbit、setkybit、datats以及accdatats所构成的指令组。
利用上述指令,本实施例的系统所配置的密钥管理模块能够执行全新的内存加密空间管理方法:通过设置密钥编号和加密标志位将一般内存空间变成加密空间,扩大了加密区域数量。可作为优选的,申请加密内存和释放加密内存的具体方式为:
通过Malloc方法,向操作系统申请一般内存空间,调用setky指令和setcbit指令,设置内存页面的密钥编号和加密标志位,从而将内存空间设置为加密空间,再将内存空间地址返回给用户,从而向用户提供加密内存空间。另外,本发明提供了释放加密内存的方法,调用setky指令和setcbit指令,将内存页面的加密位和密钥标识位恢复为默认值,从而将内存空间设置为非加密空间,通过Free方法通知操作系统释放该内存空间,从而释放加密内存空间。
在申请加密内存之后,密钥管理模块还需要为加密内存数据访问获取加解密钥。为了解决密钥存储量受限的问题,本发明采用片上加内存的存储方式,并采用LRU替换策略。为了高效获取密钥,本发明参考Cuckoo Hash Page Table的设计思想,提供一种应用Cuckoo Hash Key Table的实现方法。密钥管理模块访问对应密钥的具体步骤为:
一般地,使用一个小型缓冲区buffer1存储部分虚拟机或进程的密钥。先访问缓冲区,若该密钥不存在,则在内存密钥表中查找,若仍不存在,生成一个密钥并进行存储。当进程被销毁,管理器会将该进程对应的所有密钥清除。
其中,LRU是常用的替换方法,另外,Cuckoo Hash Key Table能够以实现最小代价,实现多路密钥查找。
进一步可作为优选的,上述RISC-V架构的指令集经扩展,还包含有用于内存加密的genky、setky两条指令,genky指令用于使得密钥管理模块为用户进程生成一个默认密钥;setky指令用于用户指定一个私有密钥。如图8所示,上述密钥管理模块进行密钥管理的方式具体为:
S1、使用一个缓冲区存储最近常用内存页面所对应的部分虚拟机或进程的密钥;
S2、经触发,通过可信通道取得待加解密数据所在当前内存页面的虚拟机编号、进程编号、核编号、密钥编号和加密标志位,根据密钥编号、虚拟机编号、进程编号和核编号以及所申请的内存空间地址,确定目标密钥,判断目标密钥是否位于缓冲区中;若是,直接将目标密钥传输至加解密引擎;若否,到步骤S3;其中,所述密钥编号为所述默认密钥的编号或所述私有密钥的编号;
S3:判断逐出到内存密钥表中的密钥数量是否为0;若是,到步骤S8;若否,到步骤S4;
S4:判断目标密钥是否位于内存密钥表中;若是,将目标密钥传输至加解密引擎,转到步骤S5;若否,到步骤S8;
S5:判断所述缓冲区是否有空闲存储空间;若是,转到步骤S7;若否,转到步骤S6;
S6:使用LRU策略找到最少使用的密钥,将最少使用的密钥用可信平台模组生成的密钥进行算法加密后,逐出到内存密钥表中,逐出密钥计数器加一,并转到步骤S7;
S7:将目标密钥插入缓冲区;
S8:向用户提出错误。
可作为优选的,上述密钥管理模块在将目标密钥插入缓冲区后,还用于:通过加解密引擎使用可信平台模组生成的密钥对被逐出待定密钥K-e进行加密,将K-e插入内存密钥表中,其中,所述内存密钥表为由密钥管理模块构建并管理的Cuckoo Hash Key Table。
缓冲区通过LRU策略找到最近最少使用的密钥,将其逐出缓冲区以进行替换。Cuckoo Hash Key Table Entry的主要流程如图4所示,Valid位表示该密钥行是否有效,VMID和PID分别表示该密钥行对应的虚拟机编号和进程编号,internalKey存储的是密钥管理器生成的密钥,externalKey存储的是用户指定的密钥。可信平台模组(TPM)生成的密钥存储在平台内的一次性可编程(OTP)内存中,并且是加密的,安全性高,不会被其他软硬件获取。
实施例二
一种采用实施例一所述的一种基于RISC-V架构的硬件内存加密系统执行内存加密传输的方法,具体为:将硬件内存加密系统嵌入计算机系统中,其中,所述硬件内存加密系统中的加解密引擎和密钥管理模块设置在所述计算机系统的内存控制器中,并如图1和图2所示,执行以下步骤:
在计算机系统开启且硬件内存加密系统完成自检后,硬件内存加密系统中的密钥管理模块调用指令setcbit和setkybit,以分别设置已申请内存空间的密钥编号和加密标志位,从而将内存空间设置为加密空间;在接收到计算机系统的处理器控制内存控制器从内存读取数据或向内存写入数据的触发信号后,通过可信通道取得数据所在当前内存页面的虚拟机编号、进程编号、核编号、密钥编号和加密标志位;根据加密标志位,确定数据是否需要加密;若否,直接将数据送出内存控制器,若是,基于密钥编号、虚拟机编号、进程编号和核编号以及加密空间的地址,执行密钥访问,获取目标密钥并分发给加解密引擎;
硬件内存加密系统中的加解密引擎依据密钥使用软件算法加解密数据,并将数据送出内存控制器;
硬件内存加密系统中的传输模块当接收到数据传输的指令请求并通过安全性验证后,调用datats和accdatats指令,分别进行内存数据的发送和接收,实现全过程加密传输。
也就是,实施例一所述的一种基于RISC-V架构的硬件内存加密系统的运行主要包括以下步骤:
S1、当处理器从内存读取或写入数据时,密钥管理模块访问页面对应密钥并分发对应的密钥到加解密引擎,加解密引擎依据密钥使用SM4算法加解密数据;关于内存数据加密方式,如图5所示,加解密引擎模块的架构如图7所示。
S2、当本地服务器收到ReqMigration的指令请求并验证通过后,调用RecvMigration指令传输本地加密数据到远端,实现全过程加密传输。
在步骤S2中,KeyID位用于标识是该进程对应的哪一把密钥。一个进程最多有两把密钥。KeyID默认为0,表示存放由密钥管理模块生成的透明密钥,KeyID为1表示存放用户给定的密钥。
进一步地,为使进程间可以进行通信,用户可以为需要共享内存的进程的共享页面设置相同的密钥(或不进行加密)。在所述步骤S1中,本实施例在RISC-V架构的基础上添加了内存加密和数据传输的指令,并提供了可用的编程接口,其中API具体形式及功能描述为:
(1)void*encryptedMalloc(
bool enc,
size_t size,
boolext,
unsigned char*extKey)
用于申请内存空间,并调用指令setcbit和setkybit,分别将对应内存页面的C-bit位和KeyID位设置为相应的值。参数enc表示申请的内存空间是否需要加密,为真则需加密,C-bit位的值置1;否则不加密,C-bit位的值置0。参数size为申请内存空间的大小。参数ext表示加密是否使用指定密钥,为真则使用指定密钥,KeyID位的值置1,并调用指令setky为当前进程导入指定密钥;否则使用密钥管理器生成的密钥,KeyID位的值置0。参数extKey指向用户指定密钥。由于输入密钥的信道并不一定安全,因此指定密钥一般不推荐用于加密隐私内存,而是用于加密进程间的共享共存。若用户在同一进程中重复使用该函数时,使用了两把及以上的指定密钥(即extKey),则系统抛出错误。
(2)void encryptedFree(
void*p,
bool enc)
用于释放通过encryptedMalloc申请的内存空间。参数p指向需释放的内存空间。参数enc表示该空间是否已加密,为真则已加密;否则未加密。
(3)void DataTrans(
void*p,
size_t size,
void*dstOpt)
用于发起内存数据传输,并调用指令dataTransmission进行传输。参数p指向需传输的内存数据起始位置;参数size为数据的大小;dstOpt指向一个目标信息结构migDest。其中结构体migDest包含5个元素:ipv4表示目标主机的ipv4地址,port表示目标主机的端口号,nvmid表示目标主机的目标虚拟机编号,npid表示目标主机内目标进程编号,size表示将传输的内存数据大小。
(4)void AccDataTrans(
void*p,
void*IDA)
用于接收内存数据传输,并调用指令dataTransmission进行接收。参数p指向接收数据的存储地址;参数IDA指向待接收源的标识码(是唯一标识硬件设备的机器码)。
在步骤S1和S2中,为实现内存数据传输及虚拟机迁移的功能,本系统在RISC-V原有指令集下做了适当扩展,创新地增加了六条指令,分别为genky,setky,setcbit,setcbit,datats,accdatats,其定义方法及功能描述同实施例一,在此不再赘述。
可作为优选的,采用上述协议授权的内存数据传输方案,实现了全过程内存数据加密传输模块,具体的,如图6所示,发送内存数据的实现方式为:
在计算机系统向远程服务器发起数据传输请求,并在接收到远程服务器所发送的传输公钥和身份信息时,所述加解密引擎利用所述传输密钥将一个三元组结构加密,所述三元组结构顺序分别为:待传输数据的VMID-VPIDcore-KeyID信息,密钥,以及待传输数据所在的页表项;所述计算机系统将所述三元组结构以及待传输的内存数据发送至远程服务器,其中,VMID-VPIDcore-KeyID代表对应页面所属的虚拟机编号和进程编号以及所使用的密钥编号。远端服务器根据三元组重新部署虚拟机。
进一步可作为优选的,发送内存数据的具体实现方式为:
(1)所述计算机系统按照msg=tS0||randN0||size,发送本地数据传输请求:IDA||cla||PB||sigB(msg)||msg,式中,||符号表示字符串的链接,msg表示本地数据传输请求信息,tS0表示时间戳信息,randN0表示随机数,size代表传输数据的大小,cla表示操作类型,代表虚拟机迁移或数据传输,PB表示计算机系统传输模块产生的公钥,sigB(msg)是一个函数,其功能是利用计算机系统传输模块产生的私钥对msg的签名;
(2)远程服务器查找预先添加在其认可列表的设备码IDA并校验:verPB(sigB)=msg之后,式中,verPB(sigB)是一个函数,其功能为远程服务器利用PB校验msg的签名;若校验成功,根据cla进行内存分配等配置;向所述计算机系统发送身份串IDA||sigK(randN0)||EPB(rVMID||rPID);式中,K表示远程服务器为AC证书系统下的私钥,sigK(randN0)表示返回远程服务器利用私钥对随机数randN0的签名,rVMID表示远程服务器上目标虚拟机的编号,rPID表示远程服务器上目标进程编号,EPB()是一个函数表示使用PB对rVMID||rPID进行SM2加密;
(4)所述计算机发送EPK(sk)||SM4SK(sigB(H(KT))||M到远程服务器,所述计算机系统为本次传输产生随机会话密钥sk,发送EPKL(sk)||SM4SK(sigL(SM3(M)))||M,式中,EPK(sk)代表所述本地计算机系统利用远端设备公钥加密sk,SM4SK()代表使用会话密钥加密,KT代表VMID||VPIDcore||Key0||Key1,SM3(M)代表使用SM3算法计算KT的校验值;
(5)所述计算机系统在接收到远程服务器的Ack信号后发送Mc,其中,Ack信号代表密钥就位确认信号,Mc代表加密的内存数据。
总的来说,本发明首先基于RISC-V的开源指令集架构,RISC-V指令集架构开源开放,相比于Intelx86和ARM架构,具有低功耗、低成本、拓展性强、安全可靠、面积小,简洁等优点。使用RISC-V架构,开发者不必购买昂贵的架构许可证,可以自主修改指令集,定义功能模块,修补漏洞和更新,降低代码密度和开发难度。在本发明中使用RISC-V架构,在原有指令集的基础上拓展了六条系统指令,实现了内存数据加解密和内存数据传输的功能。其次,本发明实现软件透明的多密钥加密,目前支持多密钥的内存加密方案如Intel的MKTME仅支持有限数量的密钥,造成硬件资源的浪费,为解决这一问题,本发明设计了多密钥驱逐方案,在内存领域实施LRU替换策略,并应用Cuckoo Hash Key Table:将超出CPU片上存储容量的密钥利用CPU内部密钥将其通过加密引擎加密后存储到DDR内存的保留区域中。该方案实现了密钥对其他软硬件的完全透明,同时由与冷启动攻击者不能获取到CPU内部密钥,因此也能抵御冷启动攻击。另外,本发明方案支持数据传输,现有内存加密方案暂未支持内存数据传输方案。如今,各类云服务、内存池化等技术不断发展,内存互联与异构池化成为热点。为适应和解决内存加密下的数据安全传输,本发明设计了软件透明的内存数据传输方案:由本地程序调用传输指令,利用SM2国密算法,通过传输模块传输页面数据和密钥。远端皆有同样由传输模块负责解密,不需要第三方软件参与。使用该方案一方面可以降低软件开发成本,同时也能够降低来自第三方软件的安全风险。
实施例三
一种计算机系统,嵌有实施例一所述的一种基于RISC-V架构的硬件内存加密系统,用于执行实施例二所述的内存加密传输的方法。
相关技术方案同实施例一和实施例二,在此不再赘述。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于RISC-V架构的硬件内存加密系统,其特征在于,包括:基于RISC-V架构所设置的密钥管理模块、加解密引擎、传输模块和编程接口;其中,
所述RISC-V架构的指令集经扩展,包含有用于内存加密的setcbit和setkybit两条指令,通过所述编程接口,使得所述密钥管理模块能够用于调用指令setcbit和setkybit,以分别设置已申请内存空间的加密标志位和密钥编号,从而将内存空间设置为加密空间;
所述密钥管理模块在进行密钥管理时分为密钥存储和密钥获取两部分,其中,采用片上加内存的密钥存储方式,并采用LRU替换策略维护片上缓冲区,采用Cuckoo Hash KeyTable作为内存密钥表;
所述RISC-V架构的指令集经扩展,还包含用于内存数据传输的datats和accdatats两条指令,通过配置所述编程接口,使得所述传输模块能够调用指令datats和accdatats,分别进行内存数据的发送和接收。
2.根据权利要求1所述的硬件内存加密系统,其特征在于,所述密钥管理模块还用于根据用户请求,调用setkybit、setcbit指令,将待释放内存页面的密钥编号和加密标志位恢复为默认值,从而将内存空间设置为非加密空间;通过Free方法,通知操作系统释放该内存空间,从而释放加密内存空间。
3.根据权利要求1所述的硬件内存加密系统,其特征在于,采用RV64R-type指令格式,设计得到指令genky、setky、setcbit、setkybit、datats以及accdatats的定义方法,具体为:
定义genky指令的方法为:定义指令无写回结果,指令无需读取操作数;
定义setky指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为共享密钥虚拟地址;
定义setcbit指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为待设置的虚拟客机页面的虚拟地址;
定义setkybit指令的方法为:定义指令无写回结果,指令需读取操作数rs1,操作数rs1的值为待设置的虚拟客机页面的虚拟地址;
定义datats指令的方法为:定义指令无写回结果,指令需读取操作数rs1、rs2,操作数rs1的值为待传输内存的虚拟地址,操作数rs2的值为目标信息结构体的虚拟地址;
定义accdatats指令的方法为:定义指令无写回结果,指令需读取操作数rs1、rs2,操作数rs1的值为待接收数据的虚拟地址,操作数rs2的值为客机信息结构体的虚拟地址。
4.根据权利要求1所述的硬件内存加密系统,其特征在于,所述密钥管理模块进行密钥管理的方式为:
使用一个缓冲区存储部分虚拟机或进程的密钥,先访问缓冲区,若该密钥不存在,则在内存密钥表中查找,若仍不存在,生成一个密钥并进行存储;当进程被销毁,将该进程对应的所有密钥清除。
5.根据权利要求4所述的硬件内存加密系统,其特征在于,所述RISC-V架构的指令集经扩展,还包含有用于内存加密的genky、setky两条指令,genky指令用于使得密钥管理模块为用户进程生成一个默认密钥;setky指令用于用户指定一个私有密钥;
所述密钥管理模块进行密钥管理的具体方式为:
S1、使用一个缓冲区存储最近常用内存页面所对应的部分虚拟机或进程的密钥;
S2、经触发,通过可信通道取得待加解密数据所在当前内存页面的虚拟机编号、进程编号、核编号、密钥编号和加密标志位,根据密钥编号、虚拟机编号、进程编号和核编号以及所申请的内存空间地址,确定目标密钥,判断目标密钥是否位于缓冲区中;若是,直接将目标密钥传输至加解密引擎;若否,到步骤S3;其中,所述密钥编号为所述默认密钥的编号或所述私有密钥的编号;
S3:判断逐出到内存密钥表中的密钥数量是否为0;若是,到步骤S8;若否,到步骤S4;
S4:判断目标密钥是否位于内存密钥表中;若是,将目标密钥传输至加解密引擎,转到步骤S5;若否,到步骤S8;
S5:判断所述缓冲区是否有空闲存储空间;若是,转到步骤S7;若否,转到步骤S6;
S6:使用LRU策略找到最近最少使用的密钥,将最近最少使用的密钥用可信平台模组所生成的密钥进行算法加密后,逐出到内存密钥表中,逐出密钥计数器加一,并转到步骤S7;
S7:将目标密钥插入缓冲区;
S8:向用户发出错误提示。
6.根据权利要求5所述的硬件内存加密系统,其特征在于,所述密钥管理模块在将目标密钥插入缓冲区后,还用于:
通过加解密引擎使用可信平台模组所生成的密钥对被逐出待定密钥K-e进行加密,将K-e插入内存密钥表中,其中,所述内存密钥表为密钥管理模块构建并管理的Cuckoo HashKey Table。
7.一种采用如权利要求1至6任一项所述的一种基于RISC-V架构的硬件内存加密系统执行内存加密传输的方法,其特征在于,将所述硬件内存加密系统嵌入计算机系统中,其中,所述硬件内存加密系统中的加解密引擎和密钥管理模块设置在所述计算机系统的内存控制器中,并执行以下步骤:
在所述计算机系统开启且所述硬件内存加密系统完成自检后,并当用户通过编程接口申请加密内存空间时,所述硬件内存加密系统中的密钥管理模块调用指令setcbit和setkybit,分别设置已申请内存空间的加密标志位和密钥编号,从而将内存空间设置为加密空间;在接收到计算机系统的处理器控制内存控制器从内存读取数据或向内存写入数据的触发信号后,通过可信通道取得数据所在内存页面的虚拟机编号、进程编号、核编号、密钥编号和加密标志位;根据所述加密标志位,确定数据是否需要加密;若否,直接将数据送出内存控制器,若是,基于所述密钥编号、所述虚拟机编号、所述进程编号和所述核编号以及所述加密空间的地址,执行密钥访问,获取目标密钥并分发给所述硬件内存加密系统中的加解密引擎;
所述加解密引擎依据密钥使用加密算法加解密数据,并将数据交给所述内存控制器;
所述硬件内存加密系统中的传输模块当接收到数据传输的指令请求并通过安全性验证后,调用datats和accdatats指令,分别进行内存数据的发送和接收,实现全过程加密传输。
8.根据权利要求7所述的方法,其特征在于,发送内存数据的实现方式为:
在计算机系统向远程服务器发起数据传输请求,并在接收到远程服务器所发送的传输公钥和身份信息时,所述加解密引擎利用所述传输密钥将一个三元组结构加密,所述三元组结构顺序分别为:待传输内存数据所在空间的VMID-VPIDcore-KeyID信息,密钥,以及待传输内存数据所在的页表项;所述计算机系统将所述三元组结构以及待传输的内存数据发送至远程服务器,其中,VMID-VPIDcore-KeyID代表对应页面所属的虚拟机编号和进程编号以及所使用的密钥编号。
9.根据权利要求8所述的方法,其特征在于,发送内存数据的具体实现方式为:
(1)所述计算机系统按照msg=tS0||randN0||size,发送本地数据传输请求:IDA||cla||PB||sigB(msg)||msg,式中,||符号表示字符串的连接,msg表示本地数据传输请求信息,tS0表示时间戳信息,randN0表示随机数,size代表传输数据的大小,cla表示操作类型,代表虚拟机迁移或数据传输,PB表示计算机系统传输模块产生的公钥,sigB(msg)是一个函数,其功能是利用传输模块产生的私钥对msg的签名;
(2)所述计算机系统在接收到远程服务器所发送的身份串IDA||sigK(randN0)||EPB(rVMID||rPID)之后,所述传输模块对IDA||sigK(randN0)进行校验;若校验成功,则发送EPK(sk)||SM4SK(sigB(H(KT))||M到远程服务器,式中,sk为所述计算机系统为本次传输产生的随机会话密钥,EPK(sk)代表所述本地计算机系统利用远端设备公钥加密sk,SM4SK()代表使用会话密钥加密,KT代表VMID||VPIDcore||Key0||Key1,SM3(M)代表使用SM3算法计算KT的校验值;其中,所述身份串IDA||sigK(randN0)||EPB(rVMID||rPID)是在远程服务器查找预先添加在其认可列表的设备码IDA并校验:verPB(sigB)=msg之后,式中,verPB(sigB)是一个函数,其功能为远程服务器利用PB校验msg的签名,若校验成功,根据cla进行配置,并向所述计算机系统所发送的身份串;式中,K表示远程服务器为AC证书系统下的私钥,sigK(randN0)表示返回远程服务器利用私钥对随机数randN0的签名,rVMID表示远程服务器上目标虚拟机的编号,rPID表示远程服务器上目标进程编号,EPB()是一个函数表示使用PB对rVMID||rPID进行SM2加密;
(3)远程服务器成功获取sk以及KT信息后,向所述计算机系统发送Ack信号,其中,Ack信号代表密钥就位确认信号;
(4)所述计算机系统在接收到Ack信号后发送Mc,其中,Mc代表加密的内存数据。
10.一种计算机系统,其特征在于,嵌有如权利要求1至5任一项所述的一种基于RISC-V架构的硬件内存加密系统,用于执行如权利要求6至8任一项所述的内存加密传输的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310027782.7A CN115994389A (zh) | 2023-01-09 | 2023-01-09 | 一种基于risc-v架构的硬件内存加密系统及其应用 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310027782.7A CN115994389A (zh) | 2023-01-09 | 2023-01-09 | 一种基于risc-v架构的硬件内存加密系统及其应用 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115994389A true CN115994389A (zh) | 2023-04-21 |
Family
ID=85990008
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310027782.7A Pending CN115994389A (zh) | 2023-01-09 | 2023-01-09 | 一种基于risc-v架构的硬件内存加密系统及其应用 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115994389A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117492932A (zh) * | 2023-12-28 | 2024-02-02 | 北京微核芯科技有限公司 | 虚拟机访问方法和设备 |
-
2023
- 2023-01-09 CN CN202310027782.7A patent/CN115994389A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117492932A (zh) * | 2023-12-28 | 2024-02-02 | 北京微核芯科技有限公司 | 虚拟机访问方法和设备 |
CN117492932B (zh) * | 2023-12-28 | 2024-04-09 | 北京微核芯科技有限公司 | 虚拟机访问方法和设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109844751B (zh) | 用于提供信息隔离的方法和处理器 | |
CN103026347B (zh) | 多核架构中的虚拟机内存划分 | |
US8788840B2 (en) | Secure processor | |
KR101608510B1 (ko) | 글로벌 플랫폼 규격을 사용하는 발행자 보안 도메인에 대한 키 관리 시스템 및 방법 | |
JP5537742B2 (ja) | 多ユーザ機密コードおよびデータを保護するためのアーキテクチャを含む方法および装置 | |
US7986786B2 (en) | Methods and systems for utilizing cryptographic functions of a cryptographic co-processor | |
CN109858265A (zh) | 一种加密方法、装置及相关设备 | |
US20080285747A1 (en) | Encryption-based security protection method for processor and apparatus thereof | |
US10225247B2 (en) | Bidirectional cryptographic IO for data streams | |
CN103038746A (zh) | 用于基础设施即服务云环境中的可信执行的方法和装置 | |
US11775177B2 (en) | Integrity tree for memory integrity checking | |
EP4064084A1 (en) | Password management method and related device | |
CN107526974B (zh) | 一种信息密码保护装置和方法 | |
JP2019532559A (ja) | ハードウェアアクアクセラレーテッド暗号法のためのキーのスレッド所有権 | |
JP4282472B2 (ja) | マイクロプロセッサ | |
CN105678173A (zh) | 基于硬件事务内存的vTPM安全保护方法 | |
TWI797353B (zh) | 動態密碼密鑰擴展之電路、方法及系統 | |
CN115994389A (zh) | 一种基于risc-v架构的硬件内存加密系统及其应用 | |
KR20210095038A (ko) | 메모리 스토리지용 어드레스 암호해독 | |
CN112363800B (zh) | 一种网卡的内存访问方法、安全处理器、网卡及电子设备 | |
JP2022107288A (ja) | 自動車用電子制御装置 | |
CN116860666A (zh) | 一种gpu内存保护方法、装置、芯片及电子设备 | |
CN116015632A (zh) | 一种基于SoC TEE技术及集成密码模块的安全密钥管理方法 | |
CN116933307A (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 |