一种透明的对象存储加解密方法、对象存储系统及介质与流程

文档序号:22506129发布日期:2020-10-13 09:44阅读:105来源:国知局
一种透明的对象存储加解密方法、对象存储系统及介质与流程

本发明涉及计算机加密领域,尤其涉及一种透明的对象存储加解密方法、对象存储系统及介质。



背景技术:

存储局域网(san)和网络附加存储(nas)是目前两种主流网络存储架构,对象存储(object-basedstorage)是一种新的网络存储架构。对象存储综合了san和nas的优点,同时具有san的高速直接访问和nas的分布式数据共享等优势,提供了具有高性能、高可靠性、跨平台的数据共享的存储体系结构。随着对象存储的广泛应用,数据的安全性成为一个不可忽视的问题,海量的数据以明文的形式存储在存储服务器,传统的防火墙、反病毒软件、入侵检测等信息安全防护措施已难以独立应对数据安全问题,加强数据自身安全已迫在眉睫。

swift是构建在标准硬件存储基础设施之上,通过软件实现的支持多租户模式、容器和对象读写操作的对象存储。

swift采用层次数据模型,共设三层逻辑结构:account/container/object(即账户/容器/对象),每层节点数均没有限制,可以任意扩展。这里的账户和个人账户不是一个概念,可理解为租户,用来做顶层的隔离机制,可以被多个个人账户所共同使用;容器代表封装一组对象,类似文件夹或目录;叶子节点代表对象,由元数据和内容两部分组成。

swiftapi是一组基于http的rest服务接口,对账户、容器和对象进行操作。通过swiftapi可以对接不同的后端对象存储系统。



技术实现要素:

本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种透明的对象存储加解密方法、对象存储系统及介质,基于swiftapi实现了客户端到对象存储系统的透明加解密,客户端不感知加解密过程,解决了对象存储中数据的安全性问题,适用于所有实现了swiftapi的对象存储系统。

为解决上述技术问题,本发明提出的技术方案为:

一种透明的对象存储加解密方法,对象存储系统前端的加密服务层对客户端请求的处理步骤包括:

1)通过web框架模块接收客户端发起的对象存储请求,依次将请求报文解析、路由分解、参数解析后,判断请求是否为对象操作请求,是则执行步骤2),否则执行步骤3);

2)将请求根据对象请求方法的类型进行处理,将处理后的数据重新组织请求报文并通过swiftapi发送到对象存储系统,等待对象存储系统的响应报文,收到对象存储系统的响应报文后处理响应报文,最后将处理后数据重新组织响应报文并通过swiftapi返回客户端,如果请求报文包含对象明文数据,进行对象数据加密处理,如果响应报文包含对象密文数据,进行对象数据解密处理;

3)将请求路由到反向代理,由反向代理转发请求到对象存储系统,并将响应报文返回客户端。

进一步的,步骤2)包括对象请求方法是put时的处理步骤,具体包括:读取加密类型,再通过加密类型获取密钥和加密接口,读取对象明文数据,通过明文数据计算明文数据长度和明文md5值,并将明文数据长度、明文md5值和密钥作为对象操作模块的自定义元数据,然后使用获取的加密接口对请求报文的对象明文数据加密处理为对象密文数据,并将对象操作模块的自定义元数据和加密后的对象密文数据重新组织请求报文发送到对象存储系统,接收到对象存储系统的响应报文后,再对响应报文元数据中的etag替换为明文md5值,长度替换为明文数据长度,最后将处理后的响应报文返回客户端。

进一步的,步骤2)包括对象请求方法是get时的处理步骤,具体包括:首先将请求报文转发到对象存储系统,然后接收对象存储系统的响应报文,将响应报文中对象操作模块的自定义元数据取出,将其中的明文md5写入响应报文头的etag域,将其中的明文数据长度写入响应报文头中的长度域,然后删除响应报文中对象操作模块的自定义元数据;从响应报文相关的数据结构域中获取加密类型和密钥,将对象密文数据解密处理,最后将处理后的报文返回客户端。

进一步的,步骤2)包括对象请求方法是head时的处理步骤,具体包括:先将请求报文发送到对象存储系统,接收到响应报文后,通过响应报文元数据判断对象是否为动态大对象,是则使用容器的get接口和对象前缀获取动态大对象的所有分段对象信息,再逐个获取所有分段对象的元数据,根据对象操作模块的自定义元数据中的明文数据长度和明文etag计算出动态大对象的明文数据长度和明文etag,然后将计算出的动态大对象的明文数据长度和明文etag写入返回报文的长度和etag域;否则直接将对象操作模块的自定义元数据中的明文数据长度和明文md5值写入返回报文的长度和etag域;最后将处理后的响应报文返回客户端。

进一步的,步骤2)包括对象请求方法是post时的处理步骤,具体包括:先发送一个head请求对对象存储系统获取请求对象的元数据,将获取到的对象操作模块的自定义元数据加入到原请求报文中,再将请求报文发送到对象存储系统,并将响应报文返回客户端。

进一步的,步骤2)包括:

对象请求方法是copy时的处理步骤,具体包括:先从请求报文元数据判断是否需要刷新元数据,如果需要刷新元数据,则先使用head方法获取一次对象的元数据,然后把对象操作模块的自定义元数据取出来加入到请求报文中,然后再发送请求报文到对象存储系统;如果不需要刷新元数据,则直接将请求报文发送到对象存储系统;接收到对象存储系统的响应报文后,将对象操作请求处理模块的自定义元数据从响应报文中删除,然后将响应报文返回客户端;

对象请求方法是delete时的处理步骤,具体包括:直接将请求报文转发到对象存储系统,并将对象存储系统的响应报文返回客户端。

进一步的,步骤2)中对象数据加密处理具体包括以下步骤:

a1)通过配置管理模块读取加密类型;

a2)根据加密类型生成密钥,并获取加密接口;

a3)读取请求的对象数据到缓冲区,计算对象数据的长度和md5值;

a4)将对象的明文数据长度、明文数据计算的明文md5值和生成的密钥写作为对象操作模块的自定义元数据写入请求报文头中;

a5)将加密类型写入到对象数据域,将密钥按64字节长度写入对象密钥域,长度不足部分填充0;

a6)使用密钥和加密接口对明文数据按4kb大小的块进行分块加密处理,在每个加密数据块前面写入一个4字节长度的数据块头部,所述数据块头部包括1个字节的加密类型、2个字节的后续加密数据块包含的明文数据长度和1个字节的保留字段,将数据块头部和加密数据块写入对象数据域;

a7)循环执行步骤a6)直到剩余明文数据长度不足4kb,如果剩余明文数据长度是64字节的整数倍,使用密钥和加密接口对剩余明文数据作为一个数据块进行加密处理,在加密数据块前面写入数据块头部,然后将数据块头部和加密数据块写入对象数据域;如果剩余明文数据长度不是64字节的整数倍,则先将整除64的长度部分的数据进行加密,然后将剩余的n个字节的数据填充至64字节再进行加密,n为剩余明文数据长度除64的余数,将加密后的数据写入对象数据域,之后再填充n个字节到对象数据域;

a8)写入一个长度域为0的数据块头部到对象数据域;

a9)将明文数据计算的明文md5值写入到对象数据域尾部。

进一步的,步骤2)中对象数据解密具体包括以下步骤:

b1)从对象密文数据第1个字节读取加密类型,使用该加密类型获取其对应的解密算法接口和密钥长度;

b2)从对象密文数据的密钥域读取64字节数据,再根据密钥长度截取密钥;

b3)读取数据块头部,从中获取后续加密数据块包含明文数据长度,如果长度为4kb,读取4kb长度的数据块,使用获取的密钥和解密接口对加密数据块进行解密,然后将解密后的数据写入明文数据;如果长度小于4kb,取加密数据块中明文数据长度整除64的长度部分的密文数据使用密钥和解密算法接口对数据解密;如果明文数据长度不为64字节的整数倍,则再截取加密数据块中下一个64字节的密文数据,使用密钥和解密算法接口解密,然后取明文数据的长度除64的余数n截取有效数据,再将解密后的数据写入明文数据;再丢弃加密数据块最后面的n个字节数据;

b4)循环执行步骤b3)直到读取数据块头部获取的明文数据长度为0,对象数据解密完成。

本发明还提供一种对象存储系统,所述对象存储系统前端设有加密服务层,所述加密服务层包括web框架模块、配置管理模块、日志模块、加密模块、密钥管理模块和对象操作模块,其中:

所述web框架模块用于接收客户端发起的对象存储请求,依次将请求报文解析、路由分解、参数解析后,判断请求是否为对象操作请求;

所述配置管理模块用于配置请求方法为put时请求报文对应的加密类型、日志等级、web框架模块的监听端口;

所述日志模块用于记录对象明文数据加密和对象密文数据解密的日志;

所述加密模块用于对象明文数据加密处理和对象密文数据解密处理;

所述密钥管理模块用于根据加密类型生成密钥,并获取加密接口或解密算法接口;

所述对象操作模块用于提供与请求方法的类型一一对应的接口。

本发明还提出一种计算机可读存储介质,所述计算机可读存储介质存储有被编程或配置以执行上述的透明的对象存储加解密方法的计算机程序。

与现有技术相比,本发明的优点在于:

本发明通过在对象存储系统前端增加一个加密服务层,来实现对象数据的加解密,加密服务层接收客户端发起的对象存储操作请求,将请求报文解析、路由分解、参数解析后,分发到对应的对象操作模块接口处理,通过配置管理模块读取加密配置选项,根据配置选项中的加密类型对请求报文包含的对象明文数据进行加密处理以及元数据转换处理,将加密处理后的数据重新组织请求报文,通过swiftapi发送到对象存储系统,并等待对象存储系统的响应报文,收到对象存储系统的响应报文后,再对响应报文中的对象密文数据解密处理以及元数据转换处理,再将响应报文通过swiftapi返回给客户端,本实施例基于swiftapi实现了客户端到对象存储系统的透明加解密,客户端不感知加密和解密过程,解决了对象存储中数据的安全性问题,适用于所有实现了swiftapi的对象存储系统。

附图说明

图1为本发明实施例的结构示意图。

图2为本发明实施例的加密数据结构示意图。

图3为本发明实施例剩余明文数据长度不是64字节的整数倍时加密填充结构示意图。

图4为本发明实施例的对象数据加密流程图。

图5为本发明实施例的对象数据解密流程图。

具体实施方式

以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。

如图1所示,本发明提供一种对象存储系统,在对象存储系统前端设有加密服务层,加密服务层包括web框架模块、配置管理模块、日志模块、加密模块、密钥管理模块和对象操作模块,其中:

web框架模块用于接收客户端发起的对象存储请求,依次将请求报文解析、路由分解、参数解析后,判断请求是否为对象操作请求;

配置管理模块用于配置请求方法为put时请求报文对应的加密类型、日志等级、web框架模块的监听端口;

日志模块用于记录对象明文数据加密和对象密文数据解密的日志;

加密模块用于对象明文数据加密处理和对象密文数据解密处理;

密钥管理模块用于根据加密类型生成密钥,并获取加密接口或解密算法接口;

对象操作模块用于提供与请求方法的类型一一对应的接口。

本发明通过在对象存储系统前端增加一个加密服务层,来实现对象数据的加解密,加密服务层接收客户端发起的对象存储操作请求,将请求报文解析、路由分解、参数解析后,分发到对应的对象操作模块接口处理,通过配置管理模块读取加密配置选项,根据配置选项中的加密类型对请求报文包含的对象明文数据进行加密处理以及元数据转换处理,将加密处理后的数据重新组织请求报文,通过swiftapi发送到对象存储系统,并等待对象存储系统的响应报文,收到对象存储系统的响应报文后,再对响应报文中的对象密文数据解密处理以及元数据转换处理,再将响应报文通过swiftapi返回给客户端,本实施例基于swiftapi实现了客户端到对象存储系统的透明加解密,客户端不感知加密和解密过程,解决了对象存储中数据的安全性问题,适用于所有实现了swiftapi的对象存储系统。

本实施例中根据上述对象存储系统提出一种透明的对象存储加解密方法,对象存储系统前端的加密服务层对客户端请求的处理步骤包括:

1)通过web框架模块接收客户端发起的对象存储请求,依次将请求报文解析、路由分解、参数解析后,判断请求是否为对象操作请求,是则执行步骤2),否则执行步骤3);

2)将请求根据对象请求方法的类型进行处理,将处理后的数据重新组织请求报文并通过swiftapi发送到对象存储系统,等待对象存储系统的响应报文,收到对象存储系统的响应报文后处理响应报文,最后将处理后数据重新组织响应报文并通过swiftapi返回客户端,如果请求报文包含对象明文数据,进行对象数据加密处理,如果响应报文包含对象密文数据,进行对象数据解密处理;

3)将请求路由到反向代理,由反向代理转发请求到对象存储系统,并将响应报文返回客户端。

本实施例中,对象请求方法类型包括put方法、get方法、head方法、post方法、copy方法和delete方法,步骤2)具体包括:

对象请求方法是put时的处理步骤,具体包括:首先通过配置管理模块读取加密类型,再通过加密类型获取密钥和加密接口,读取对象明文数据,通过明文数据计算明文数据长度和明文md5值,并将明文数据长度、明文md5值和密钥作为对象操作模块的自定义元数据,然后使用获取的加密接口对请求报文的对象明文数据加密处理,并将对象操作模块的自定义元数据和加密后的数据重新组织请求报文发送到对象存储系统,接收到对象存储系统的响应报文后,再对响应报文元数据中的etag替换为明文md5值,长度替换为明文数据长度,最后将处理后的响应报文返回客户端;

对象请求方法是get时的处理步骤,具体包括:首先将请求报文转发到对象存储系统,然后接收对象存储系统的响应报文,将响应报文中对象操作模块的自定义元数据取出,并将其中的明文md5值写入响应包报文头的etag域,将其中的明文数据长度写入响应报文头中的长度域,然后删除响应报文中对象操作模块的自定义元数据;从响应报文相关的数据结构域中获取加密类型和密钥,将对象密文数据解密处理,最后将处理后的报文返回客户端;

对象请求方法是head时的处理步骤,具体包括:先将请求报文发送到对象存储系统,接收到响应报文后,通过响应报文元数据判断对象是否为动态大对象,是则使用容器(container)的get接口和对象前缀获取动态大对象的所有分段对象信息(对象明文、密文长度、密文etag等),再逐个获取所有分段对象的元数据,根据对象操作模块的自定义元数据中的明文数据长度和明文md5值计算出动态大对象的明文数据长度和明文etag,然后将计算出的动态大对象的明文数据长度和明文etag写入返回报文的长度和etag域;否则直接将对象操作模块的自定义元数据中的明文数据长度和明文md5值写入返回报文的长度和etag域;最后将处理后的响应报文返回客户端;

对象请求方法是post时的处理步骤,具体包括:先发送一个head请求对对象存储系统获取请求对象的元数据,将获取到的对象操作模块的自定义元数据加入到原请求报文中,再将请求报文发送到对象存储系统,并将响应报文返回客户端;

对象请求方法是copy时的处理步骤,具体包括:先从请求报文元数据判断是否需要刷新元数据,如果需要刷新元数据,则先使用head方法获取一次对象的元数据,然后把对象操作模块的自定义元数据取出来加入到请求报文中,然后再发送请求报文到对象存储系统;如果不需要刷新元数据,则直接将请求报文发送到对象存储系统;接收到对象存储系统的响应报文后,将对象操作模块的自定义元数据从响应报文中删除然后将响应报文返回客户端;

对象请求方法是delete时的处理步骤,具体包括:直接将请求报文转发到对象存储系统,并将对象存储系统的响应报文返回客户端。

如图4所示,本实施例中,对象数据加密处理具体包括以下步骤:

a1)从配置管理模块读取加密类型;

a2)根据加密类型通过密钥管理模块和加密模块生成密钥,并获取加密接口;

a3)读取请求的对象数据到缓冲区,计算对象数据的长度和md5值;

a4)将对象的明文数据长度、明文数据计算的明文md5值和生成的密钥写作为对象操作模块的自定义元数据写入请求报文头中;

a5)将加密类型写入到对象数据域,将密钥按64字节长度写入对象密钥域,长度不足部分填充0;

a6)使用密钥和加密接口对明文数据按4kb大小的块进行分块加密处理,在每个加密数据块前面写入一个4字节的数据块头部,其结构如图2中数据块头部结构所示,第1个字节为加密类型、第2和第3个字节为后续加密数据块包含的明文数据长度,第4个字节作为保留字段暂未使用,将数据块头部和加密后的数据块写入对象数据域;

a7)循环执行步骤a6)直到剩余明文数据长度不足4kb,如果剩余明文数据长度是64字节的整数倍,使用密钥和加密接口对剩余明文数据作为一个数据块进行加密处理,在加密数据块前面写入数据块头部,然后将数据块头部和加密数据块写入对象数据域;如果剩余明文数据长度不是64字节的整数倍(设数据长度除64余n),则先将整除64的长度部分的数据进行加密,然后将剩余的n个字节数据填充至64字节再进行加密,n为剩余明文数据长度除64的余数,将加密后的数据写入对象数据域,之后再填充n个字节到对象数据域,填充结构如图3所示;

a8)如图2所示,写入一个长度域为0的数据块头部到对象数据域;

a9)如图2所示,将明文数据计算的明文md5值写入到对象数据域尾部。

如图5所示,本实施例中对象数据解密具体包括以下步骤:

b1)从对象密文数据第1个字节读取加密类型,使用该加密类型通过加密模块和密钥管理获取其对应的解密算法接口和密钥长度;

b2)从对象密文数据的密钥域读取64字节数据,再根据密钥长度截取密钥;

b3)读取数据块头部,从中获取后续加密数据块包含明文数据长度,如果长度为4kb,读取4kb长度的数据块,使用获取的密钥和解密接口对加密数据块进行解密,然后将解密后的数据写入明文数据;如果长度小于4kb,取加密数据块中明文数据长度整除64的长度部分的密文数据使用密钥和解密接口对数据解密;如果明文数据长度不为64字节的整数倍,则再截取加密数据块中下一个64字节的密文数据,使用密钥和解密算法接口解密,然后取明文数据长度除64的余数n截取有效数据,再将解密后的数据写入明文数据;再丢弃加密数据块最后面的n个字节数据(加密时最后填充的数据);

b4)循环执行步骤b3)直到读取数据块头部获取的明文数据长度为0,对象数据解密完成,最后读取数据尾部的明文md5。

本发明还提出一种计算机可读存储介质,所述计算机可读存储介质存储有被编程或配置以执行上述的透明的对象存储加解密方法的计算机程序。

综上所述,本实施例公开了一种透明的对象存储加解密方法及对象存储系统,可以实现客户端到对象存储系统数据的透明加解密,可提高数据的安全性。

上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。

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