一种基于不同密钥的虚拟机镜像加密方法及装置与流程

文档序号:17428943发布日期:2019-04-17 03:14阅读:577来源:国知局
一种基于不同密钥的虚拟机镜像加密方法及装置与流程

本发明涉及虚拟机加密领域,具体涉及一种基于不同密钥的虚拟机镜像加密方法及装置。



背景技术:

云计算环境下用户虚拟机存在数据保护问题,容易受到“离线攻击”,也就是攻击者在系统关机状态下可以物理接触到磁盘或者其他存储介质。另外,在一个单位内部,不同职位的人有不同的职责和权限,系统处于启动状态时的使用者是工作人员a,而系统关机后,会存放在另外的位置,而工作人员b能够接触到该系统的硬件。如果没有保护措施,那么b就可以轻易地越权获得系统中有关a的内容。除此之外,虚拟机镜像无论在静止还是运行状态都有被窃取、篡改、未授权访问和配置不当而无法正常启动等脆弱漏洞。

传统的解决方案是在任何时刻都对虚拟机镜像(image)进行加密或对虚拟机镜像存储的文件系统进行文件系统加密,但这些方案又会导致性能问题,同时,存在镜像格式限制、与云操作系统紧耦合、密钥单一等缺陷。



技术实现要素:

为解决上述问题,本发明提供一种基于不同密钥的虚拟机镜像加密方法及装置,本发明基于硬件加密卡实现,与云操作系统松耦合,对镜像格式无限制,实现虚拟机镜像一机一密的加密方式。

本发明的技术方案是:一种基于不同密钥的虚拟机镜像加密方法,包括以下步骤:

s11:将密码卡算法加载到linux内核;

s12:修改qemu源码,在虚拟机创建时,为每个虚拟机分别分配唯一口令,并关联相应虚拟机镜像唯一加密密钥;

s13:虚拟机发起写数据时,获取并验证虚拟机口令,虚拟机口令验证通过后,根据虚拟机口令获取虚拟机镜像对应的加密密钥,调用密码卡算法使用加密密钥对数据进行加密后完成写操作。

进一步地,所述步骤s13,具体包括:

s13-1:虚拟机的io设备驱动发出io请求;

s13-2:kvm模块截获io请求,并将io请求放置到内存io共享页,同时通知qemu模拟进程模块来处理本次io请求;

s13-3:qemu模拟进程模块从内存io共享页获取io请求信息,并根据io请求信息获取并验证相应虚拟机口令,虚拟机口令验证通过后获取对应虚拟机镜像加密密钥,调用密码卡算法使用加密密钥对数据进行加密,之后调用物理io设备完成写操作。

进一步地,所述步骤s13还包括:

s13-4:写操作完成后,qemu模拟进程模块将返回值放回内存io共享页,并通知kvm模块读取返回值;

s13-5:kvm模块从内存io共享页读取返回值,并转交给虚拟机io设备驱动。

进一步地,

步骤s13-2中,kvm模块通知qemu模拟进程模块来处理本次io请求后,自动退出kvm模块,进入qemu状态。

进一步地,

步骤s13-3中,qemu模拟进程模块通过linux内核中的物理硬件驱动来调用物理io设备完成写操作。

进一步地,

步骤s11中,通过dm-crypt机制将密码卡算法加载到linux内核。

进一步地,

步骤s13中,通过cryptsetup工具调用密码卡算法使用加密密钥对写数据进行加密。

本发明还提供一种基于不同密钥的虚拟机镜像加密装置,包括:

虚拟机的io设备驱动:用于发出io请求;

kvm模块:用于截获io请求,并将io请求放置到内存io共享页,同时通知qemu模拟进程模块来处理本次io请求;

qemu模拟进程模块:用于从内存io共享页获取io请求信息,并根据io请求信息获取并验证相应虚拟机口令,虚拟机口令验证通过后,根据虚拟机口令获取对应虚拟机镜像加密密钥,调用密码卡算法根据加密密钥对写数据进行加密,之后调用物理io设备完成写操作;

密码管理器:用于把密码卡算法加载到linux内核,实现qemu模拟进程模块对密码卡算法的调用。

进一步地,

qemu模拟进程模块还用于在写操作完成后,将返回值放回内存io共享页,并通知kvm模块读取返回值;

kvm模块还用于从内存io共享页读取返回值,并转交给虚拟机io设备驱动。

进一步地,还包括:

物理硬件驱动:用于qemu模拟进程模块调用物理io设备完成写操作。

本发明提供的基于不同密钥的虚拟机镜像加密方法及装置,将密码卡算法加载到linux内核,实现硬件密码卡对虚拟机镜像加密,提高加密效率;通过修改qemu源码,在虚拟机创建时,为每个虚拟机分别分配唯一口令,并关联相应虚拟机镜像唯一加密密钥,实现不同虚拟机镜像采用不同密钥加密,即一机一密的加密方式,使虚拟机具有更高的安全性。同时本发明的加密方法,与云操作系统松耦合,对镜像格式无限制,加密更加灵活和高效。

附图说明

图1是本发明具体实施例方法流程示意图。

图2是本发明具体实施例装置结构示意框图。

具体实施方式

下面结合附图并通过具体实施例对本发明进行详细阐述,以下实施例是对本发明的解释,而本发明并不局限于以下实施方式。

linux宿主机上创建并运行qemu-kvm虚拟机时,虚拟机内部io操作会触发宿主机io驱动读写物理存储设备。该过程中,io信息以明文传输,并明文存储到物理设备上,存在数据窃取、篡改风险。

本发明首先借助dm-crypt机制,将密码卡算法加载到linux内核,保证用户态程序可以借助cryptsetup工具成功调用密码卡算法;然后,修改qemu源码,当虚拟机创建时,为该虚拟机分配唯一口令,并关联虚拟机镜像唯一加密密钥,配置虚拟机镜像存储位置。虚拟机启动后,当发起写数据时,获取虚拟机对应的口令,间接获取该虚拟机对应的对称加密密钥,对io数据进行加密后存储。

如图1所示,本实施例提供的基于不同密钥的虚拟机镜像加密方法,具体包括以下步骤:

s11:将密码卡算法加载到linux内核;

需要说明的是,通过dm-crypt机制将密码卡算法加载到linux内核。

s12:修改qemu源码,在虚拟机创建时,为每个虚拟机分别分配唯一口令,并关联相应虚拟机镜像唯一加密密钥;

需要说明的是,为每个虚拟机分配的唯一口令和关联的虚拟机镜像加密密钥,可存储到特定位置,以便后续调用。

s13:虚拟机发起写数据时,获取并验证虚拟机口令,虚拟机口令验证通过后,通过虚拟机口令获取对应虚拟机镜像加密密钥,调用密码卡算法根据加密密钥对数据进行加密后完成写操作。

完成写操作的具体流程为:

(1)虚拟机启动后,进入kvm模块,当虚拟机进行io操作访问设备时,会引起虚拟机io设备驱动发起io请求,kvm模块会截获这次请求,并将这次请求存放到内存io共享页,同时通知虚拟机qemu模拟进程模块(对于宿主机而言,是一个用户空间进程qemu-kvm)来处理本次请求,之后自动退出kvm,进入qemu状态。

(2)qemu模拟进程模块从内存io共享页中获取本次io操作的具体信息后,交由硬件模拟代码来执行本次io操作。首先获取io请求信息获取并验证虚拟机口令,虚拟机口令验证通过后,根据虚拟机口令获取对应虚拟机镜像加密密钥,然后调用密码卡根据加密密钥对数据进行加密,再通过linux内核里的物理硬件驱动调用物理io设备完成io写操作,并将返回值放回内存io共享页,并通知kvm模块读取。

(3)重新进入kvm模块,由kvm模块从内存io共享页读取处理结果,并转交给虚拟机上的io设备驱动。

如图2所示,本实施例还提供一种基于不同密钥的虚拟机镜像加密装置,该装置包括:

虚拟机的io设备驱动:用于发出io请求;

kvm模块:用于截获io请求,并将io请求放置到内存io共享页,同时通知qemu模拟进程模块来处理本次io请求;

qemu模拟进程模块:用于从内存io共享页获取io请求信息,并根据io请求信息获取并验证相应虚拟机口令,虚拟机口令验证通过后,根据虚拟机口令获取对应虚拟机镜像加密密钥,调用密码卡算法根据加密密钥对写数据进行加密,之后调用物理io设备完成写操作;;

密码管理器:用于将密码卡算法加载到linux内核,实现qemu模拟进程模块对密码卡算法的调用;

物理硬件驱动:用于qemu模拟进程模块调用物理io设备完成写操作。

其中qemu模拟进程模块还用于在写操作完成后,将返回值放回内存io共享页,并通知kvm模块读取返回值;kvm模块还用于从内存io共享页读取返回值,并转交给虚拟机io设备驱动。

以上公开的仅为本发明的优选实施方式,但本发明并非局限于此,任何本领域的技术人员能思之的没有创造性的变化,以及在不脱离本发明原理前提下所作的若干改进和润饰,都应落在本发明的保护范围内。

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