发明内容
本发明实施例提供了一种加密方法、装置及解密方法、装置,以解决页面从内存换出到Swap空间时,页面被窃取或者泄露的问题,以及当页面从Swap空间换入内存时,页面不完整的问题。
第一方面,提供了一种加密方法,所述方法应用于将第一页面从第一空间换出到第二空间,所述方法包括:
加解密硬件接收操作系统OS发送的第一页面的物理地址和页面属性PageAttribute;在被所述物理地址和所述PageAttribute触发后,生成第一随机数;根据预存的交换页面根密钥SwapRootKey以及所述第一随机数,生成第一密钥和第二密钥;根据所述第一密钥,对第一页面进行加密,生成第一页面的加密内容;根据所述第二密钥、所述第一随机数、第二随机数、初始向量IV、第一页面的加密内容及所述PageAttribute生成第一页面的信息验证码MAC;其中,所述第一随机数、第二随机数、IV、PageAttribute、MAC及第一页面的加密内容,构成加密辅助信息encrypt_facility_info;将所述encrypt_facility_info发送给所述OS。
在一种可能的实现方式中,当所述OS为主机Host OS时,所述第一页面的物理地址为第一页面的真正物理地址;或者,当所述OS为客机Guest OS时,所述第一页面的物理地址为第一页面的虚拟物理地址。
在一种可能的实现方式中,当Host OS将Guest OS的第一页面从第一空间换出到第二空间时,所述加解密硬件接收OS发送的第一页面的物理地址和PageAttribute,具体包括:所述加解密硬件接收Host OS发送的第一页面的真正物理地址、第一页面的虚拟物理地址、第一页面的PageAttribute,以及虚拟机标签VMID。
在一种可能的实现方式中,所述加解密硬件接收Host OS发送的第一页面的真正物理地址、第一页面的虚拟物理地址、第一页面的PageAttribute,以及VMID之后,还包括:在被所述第一页面的真正物理地址和所述PageAttribute触发后,所述加解密硬件生成第一随机数;将所述第一页面的虚拟物理地址和所述VMID进行验证,以及,查询内存中预存的页框属性表PFAT,将所述第一页面的真正物理地址和所述PFAT中的第一页面的真正物理地址进行验证;当验证通过后,根据预存的SwapRootKey以及所述第一随机数,生成第一密钥和第二密钥。
第二方面,提供了一种加密装置,所述装置应用于将第一页面从第一空间换出到第二空间,所述装置包括:接收单元,用于接收OS发送的第一页面的物理地址和PageAttribute;生成单元,用于在被所述物理地址和所述PageAttribute触发后,生成第一随机数;所述生成单元,还用于根据预存的SwapRootKey以及所述第一随机数,生成第一密钥和第二密钥;加密单元,用于根据所述第一密钥,对第一页面进行加密,生成第一页面的加密内容;所述生成单元,还用于根据所述第二密钥、所述第一随机数、第二随机数、初始向量IV、第一页面的加密内容及所述PageAttribute生成第一页面的信息验证码MAC;其中,所述第一随机数、第二随机数、IV、PageAttribute、MAC及第一页面的加密内容,构成加密辅助信息encrypt_facility_info;发送单元,将所述encrypt_facility_info发送给所述OS。
在一种可能的实现方式中,当所述OS为主机Host OS时,所述第一页面的物理地址为第一页面的真正物理地址;或者,当所述OS为客机Guest OS时,所述第一页面的物理地址为第一页面的虚拟物理地址。
在一种可能的实现方式中,当Host OS将Guest OS的第一页面从第一空间换出到第二空间时,所述接收单元,具体用于:接收Host OS发送的第一页面的真正物理地址、第一页面的虚拟物理地址、第一页面的PageAttribute,以及虚拟机标签VMID。
在一种可能的实现方式中,所述装置还包括:验证单元;所述生成单元,还用于在被所述第一页面的真正物理地址和所述PageAttribute触发后,生成第一随机数;所述验证单元,用于将所述第一页面的虚拟物理地址和所述VMID进行验证,以及,查询内存中预存的页框属性表PFAT,将所述第一页面的真正物理地址和所述PFAT中的第一页面的真正物理地址进行验证;所述生成单元,还用于当验证通过后,根据预存的SwapRootKey以及所述第一随机数,生成第一密钥和第二密钥。
第三方面,提供了一种解密方法,所述方法应用于将第一页面从第二空间换入到第一空间,所述方法包括:加解密硬件接收OS发送的encrypt_facility_info;其中,所述encrypt_facility_info包括第一随机数、第二随机数、IV、PageAttribute、信息验证码及第一页面的加密内容;根据加解密硬件中预存的SwapRootKey以及所述第一随机数,生成第一密钥和第二密钥;根据所述第二密钥和MAC,对所述第一页面进行完整性校验;在完整性校验通过后,根据所述第一密钥,对第一页面的加密内容进行解密,生成第一页面;将所述第一页面发送给所述OS。
第四方面,提供了一种解密装置,所述装置应用于将第一页面从第二空间换入到第一空间,所述装置包括:接收单元,用于接收操作系统OS发送的加密设施信息encrypt_facility_info;其中,所述encrypt_facility_info包括第一随机数、第二随机数、初始向量IV、页面属性PageAttribute、信息验证码及第一页面的加密内容;生成单元,用于根据加解密硬件中预存的交换页面根密钥SwapRootKey以及所述第一随机数,生成第一密钥和第二密钥;校验单元,用于根据所述第二密钥和MAC,对所述第一页面进行完整性校验;解密单元,用于在完整性校验通过后,根据所述第一密钥,对第一页面的加密内容进行解密,生成第一页面;发送单元,用于将所述第一页面发送给所述OS。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图和实施例,对本发明实施例中的技术方案进行清楚地描述。
图1为本发明实施例提供的生成交换页面根密钥(SwapRootKey)的示意图。如图1所示,在计算机刚启动的时候,在计算机中产生一个一次性密钥,即SwapRootKey,并且保存在加解密硬件中,该加解密硬件可以是安全处理器(Secure Processor),此SwapRootKey只有加解密硬件可以使用,每次重启计算机时,都生成一个新的SwapRootKey。
加解密硬件提供接口ENCRYPT_FOR_PAGE_OUT,也可以由计算机直接提供特殊特权级指令来实现。
图2为本发明实施例一提供的加密方法流程示意图。该方法的执行主体为加解密硬件。该方法应用于将第一页面从第一空间换出到第二空间,第一空间可以是内存,第二空间可以是Swap空间,比如当内存不够使用时,需要将一些物理页面临时换出到Swap空间,OS可以是主机操作系统(Host OS),比如,虚拟机管理器(Hypervisor),也可以是客机操作系统(Guest OS)。如图2所示,该方法包括以下步骤:
步骤210,加解密硬件接收OS发送的第一页面的物理地址和页面属性(PageAttribute)。
步骤220,在被物理地址和PageAttribute触发后,生成第一随机数。
其中,加解密硬件在接收到物理地址和PageAttribute后,生成第一随机数。
步骤230,根据预存的SwapRootKey以及第一随机数,生成第一密钥和第二密钥。
步骤240,根据第一密钥,对第一页面进行加密,生成第一页面的加密内容。
步骤250,根据第二密钥、第一随机数、第二随机数、初始向量(initializationvector,IV)、第一页面的加密内容及PageAttribute生成第一页面的信息验证码(MessageAuthentication Code,MAC);其中,第一随机数、第二随机数、IV、PageAttribute、MAC及第一页面的加密内容,构成加密辅助信息encrypt_facility_info。
步骤260,将encrypt_facility_info发送给所述OS。
在一种可能的实现方式中,当OS为Host OS,比如Hypervisor时,Hypervisor可以将自身使用的内存页面换出到Swap空间。如图3所示,首先,Hypervisor得到需要换出页面的物理地址,该物理地址为页面的真正物理地址,例如,第一页面的真正物理地址。然后,查询自己的页表得出该第一页面的相关信息,即PageAttribute,比如第一页面的读写权限等。接着,将第一页面的物理地址及PageAttribute发送给加解密硬件。
加解密硬件接收到第一页面的物理地址及PageAttribute后,随机生成第一随机数Key_ID。根据预存的SwapRootKey和Key_ID,生成第一密钥,即页面加密密钥PageEncryptKey,以及第二密钥,即页面完整性密钥PageIntegrityKey。
加解密硬件进行加密计算,即利用PageEncryptKey进行加密计算,比如,利用高级加密标准(Advanced Encryption Standard,AES)算法对第一页面进行加密计算,生成第一页面的加密内容。接着,加解密硬件进行完整性计算,即利用第二密钥、第一随机数、第二随机数,即唯一编码(Unique Identification,UID)、(initialization vector,IV)、第一页面的加密内容以及PageAttribute,生成第一页面的MAC。
其中,第一随机数、第二随机数、IV、PageAttribute、MAC及第一页面的加密内容,构成encrypt_facility_info。最后,将encrypt_facility_info发送给Hypervisor。
Hypervisor更新自己的页表,将页表中对应的表项删除,即删除页面中的一个条目,比如虚拟地址到物理地址的映射,将页面标记为可用。
在另一个可能的实现方式中,当OS为Guest OS时,Guest OS可以将自身使用的内存页面换出到Swap空间。如图4所示,首先,Guest OS得到需要换出页面的物理地址,此时,该第一页面的物理地址,在Guest OS来看,其为第一页面的真正物理地址,但在Host OS来看,是第一页面的虚拟物理地址。然后,Guest OS查询自己的页表得出该第一页面的PageAttribute。接着,将第一页面的物理地址及PageAttribute发送给加解密硬件。
加解密硬件接收到第一页面的物理地址及PageAttribute后,随机生成第一随机数Key_ID。根据预存的SwapRootKey和Key_ID,生成PageEncryptKey以及PageIntegrityKey。加解密硬件进行加密计算及完整性计算,生成第一页面的加密内容及第一页面的MAC。最后,将encrypt_facility_info发送给Guest OS。
Guest OS更新自己的页表,将页表中对应的表项删除,即删除页面中的一个条目,比如虚拟地址到物理地址的映射,将页面标记为可用。
在再一种可能的实现方式中,Host OS,比如Hypervisor,经授权可以将GuestOS使用的内存页面换出到Swap空间。首先,Hypervisor根据某些策略寻找可以换出的Guest OS的页面的物理地址,(该页面的物理地址在Guest OS看来是页面的真正物理地址,在HostOS看来是页面的虚拟物理地址)比如第一页面的物理地址,其中,该些策略可以根据页面访问的频率,频率低则可以换出,或者也可以根据页面访问的时间,如果访问时间早,最近没有访问,则可以换出等。由于这时第一页面的PageAttribute根据实现不同有可能部分信息Hypervisor无法获取,这里Hypervisor可以清空,余下信息由硬件补上,或者如果Hypervisor对这部分信息有记录,Hypervisor可以提供,但是硬件需要对这部分信息进行验证。然后Hypervisor查看页表,得到第一页面真正的物理地址,最后将需要加密的第一页面真正的物理地址,第一页面的虚拟物理地址,虚拟机标签(Virtual MachineIdentifier,VMID),PageAttribute等一起发送给加解密硬件。加解密硬件随机产生KEY_ID,然后查询页框属性表(Page Frame Attribute Table,PFAT),验证第一页面的虚拟物理地址是否属于VMID,第一页面的真正物理地址与输入是否(即与PFAT中第一页面的真正物理地址)一致。如果验证失败,则返回错误。如果验证通过,根据SwapRootKey和Key_ID产生PageEncryptKey和PageIntegrityKey,进行加密计算和完整性计算,更新PFAT。然后将encrypt_facility_info发送给Hypervisor。
Hypervisor删除自己维护的Guest OS物理地址到Host OS物理地址映射表中的表项,标记物理页面可用。
需要说明的是,后两种实现方式中所描述的加密计算以及完整性计算与第一种实现方式中的过程相同,此处不再赘述。
其中,第二随机数UID,用于防止重放攻击;IV由加解密硬件指定或者随机产生。
由此,实现了在将页面从内存换出到Swap空间时,对换出的页面进行了完整性保护和加密,进而防止了机密内容泄露或者被篡改。
图6为本发明实施例二提供的解密方法流程示意图。该方法的执行主体为加解密硬件。该方法应用于将第一页面从第二空间换入到第一空间,第一空间可以是内存,第二空间可以是Swap空间,比如当运行时发生缺页中断,需要将一些物理页面换出到内存。如图6所示,该方法包括以下步骤:
步骤610,加解密硬件接收OS发送的第一页面的encrypt_facility_info。
其中,encrypt_facility_info包括第一随机数、第二随机数、IV、PageAttribute、MAC及第一页面的加密内容。
步骤620,根据加解密硬件中预存的SwapRootKey以及第一随机数,生成第一密钥和第二密钥。
步骤630,根据所述第二密钥和MAC,对第一页面进行完整性校验。
步骤640,在完整性校验通过后,根据所述第一密钥,对第一页面的加密内容进行解密,生成第一页面。
步骤650,将第一页面发送给OS。
在一种可能的实现方式中,当OS为Host OS,比如Hypervisor时,Hypervisor可以将自己的页面从Swap空间换出到内存。如图7所示,Hypervisor运行时发生缺页中断,Hypervisor寻找空闲物理页面,根据缺页线性地址,从Swap空间查找到需要换入到内存的页面的物理地址,比如需要换入内存的页面为第一页面,将第一页面的加密结果拷贝到此空闲页面,最后将第一页面的encrypt_facility_info,发送给加解密硬件。
加解密硬件用其预存的SwapRootKey,以及encrypt_facility_info中预存的Key_ID计算出第一密钥和第二密钥,并利用第二密钥和MAC,进行完整性校验,接着,在完整性校验通过后,利用第一密钥,解密第一页面的加密内容。然后,检查UID,如果验证没有通过,则返回错误结果。如果验证通过,那么返回第一页面。最后,加解密硬件将第一页面发送给Hypervisor,Hypervisor更新页表。
在另一种可能的实现方式中,当OS为Guest OS时,可以将自己页面从Swap空间换入内存。如图8所示,Guest OS运行时发生缺页中断,其OS从物理内存中寻找空闲物理页面,根据缺页线性地址,找到空闲物理页面,然后从Swap空间寻找需要换入内存的页面的encrypt_facility_info,即第一页面的encrypt_facility_info,将encrypt_facility_info拷贝到此空闲物理页面,最后将encrypt_facility_info,发送给加解密硬件。
加解密硬件用Key_ID和SwapRootKey计算出第一密钥和第二密钥,利用第二密钥和MAC做完整性校验,接着,在完整性校验通过后,利用第一密钥解密第一页面的加密内容,然后检查UID,如果验证没有通过,则返回错误结果。如果验证通过,那么返回第一页面。最后,加解密硬件将第一页面发送给Guest OS,Guest OS更新页表。
在再一种可能的实现方式中,Hypervisor经授权可以将Guest OS需要使用的页面从Swap空间换入到内存。如图9所示,首先Guest OS在运行时发生缺页中断,Hypervisor捕获这个中断,得到需要换入的Guest OS物理页面地址,比如,第一页面的物理地址。然后,Host OS寻找空闲物理页面,找到后,根据Guest OS物理页面地址,从Swap空间查找需要换出到内存的第一页面的加密结果,拷贝到此空闲页面。最后将此页面和相对应的encrypt_facility_info,发送给加解密硬件。加解密硬件用Key_ID和SwapRootKey计算出PageIntegrityKey做完整性检查,计算出PageEncryptKey解密,然后检查UID,如果验证没有通过,则返回错误结果。如果验证通过,更新PFAT,记录VMID等信息,返回第一页面给Hypervisor。
Hypervisor接收到第一页面后,更新Guest OS物理页面到Host物理页面映射表,物理页面地址标记为可用。
由此,实现了将页面从Swap空间换入内存时,做完整性校验和解密,实现了对加密内容的完整性校验及解密。
图10为本发明实施例三提供的加密装置结构示意图。该装置1000应用于将第一页面从第一空间换出到第二空间,如图10所示,装置1000包括:接收单元1010,生成单元1020,加密单元1030,发送单元1040。
接收单元1010,用于接收OS发送的第一页面的物理地址和PageAttribute。
生成单元1020,用于在被所述物理地址和PageAttribute触发后,生成第一随机数。
生成单元1020,还用于根据预存的SwapRootKey以及第一随机数,生成第一密钥和第二密钥。
加密单元1030,用于根据第一密钥,对第一页面进行加密,生成第一页面的加密内容。
生成单元1020,还用于根据第二密钥、第一随机数、第二随机数、IV、第一页面的加密内容及PageAttribute,生成第一页面的MAC;其中,第一随机数、第二随机数、IV、PageAttribute、MAC及第一页面的加密内容,构成encrypt_facility_info。
发送单元1040,用于将encrypt_facility_info发送给OS。
其中,当OS为主机Host OS时,第一页面的物理地址为第一页面的真正物理地址;或者,当OS为客机Guest OS时,第一页面的物理地址为第一页面的虚拟物理地址。
其中,当Host OS将Guest OS的第一页面从第一空间换出到第二空间时,接收单元1010,具体用于:接收Host OS发送的第一页面的真正物理地址、第一页面的虚拟物理地址、第一页面的PageAttribute,以及VMID。
其中,所述装置还包括:验证单元1050。
生成单元1020,还用于在被第一页面的真正物理地址和PageAttribute触发后,生成第一随机数。
验证单元1050,用于将第一页面的虚拟物理地址和VMID进行验证,以及,查询内存中预存的PFAT,将第一页面的真正物理地址和PFAT中的第一页面的真正物理地址进行验证。
生成单元1020,还用于当验证通过后,根据预存的SwapRootKey以及第一随机数,生成第一密钥和第二密钥。
图11为本发明实施例四提供的解密装置结构示意图。该解密装置1100应用于将第一页面从第二空间换入到第一空间,包括:接收单元1110,生成单元1120,解密单元1130,校验单元1140和发送单元1150。
接收单元1110,用于接收OS发送的encrypt_facility_info;其中,encrypt_facility_info包括第一随机数、第二随机数、IV、PageAttribute、MAC及第一页面的加密内容。
生成单元1120,用于根据加解密硬件中预存的SwapRootKey以及第一随机数,生成第一密钥和第二密钥。
校验单元1130,用于根据第二密钥和MAC,对第一页面进行完整性校验。
解密单元1140,用于在完整性校验通过后,根据第一密钥,对第一页面的加密内容进行解密,生成第一页面。
发送单元1150,用于将第一页面发送给OS。
结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(Random Access Memory,RAM)、闪存、只读存储器(ReadOnly Memory,ROM)、可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)、电可擦可编程只读存储器(Electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。