一种基于区块链技术的容器镜像可信认证的系统与方法
技术领域
本发明涉及云原生领域中,具体涉及一种基于区块链技术的容器镜像可信认证的系统与方法。
背景技术
在云原生领域中,基于容器技术的应用开发和应用部署,都需要基于从远程下载的容器镜像,但是所下载的镜像的可信度认证就一个重要的安全问题,也是一个知识产权保护的问题,目前针对从镜像上传到服务器之后,到某用户下载使用该镜像之间,需要解决如何防止镜像被篡改的问题,因此本专利申请提出一种基于区块链的智能合约技术的去中心化技术,对容器镜像进行认证,该方法能够很好解决上述问题,同样的技术,同样可以对容器编排脚本也进行相应的可信认证;
Docker(应用容器引擎)镜像分发是通过远端仓库(registry)分发数据实现的,镜像发布者在本地计算机上构建容器镜像,然后将镜像推送到远程仓库,然后其他用户可以通过网络拉取镜像;
在现存的镜像仓库技术中,有如下几种安全机制来保证镜像不被篡改/进行可信认证:
1.镜像仓库提供商的镜像操作都需要用户名/密码登陆,避免镜像被人随意篡改;
2.容器镜像签名技术(Docker Content Trust),通过对镜像进行数字签名,并在镜像仓库保障镜像签名的认证;
3.镜像仓库提供商的上传/下载是通过HTTPS协议加密传输;
4.部分镜像仓库提供商也会提供基本的镜像安全扫描机制,在某种程度上能提前发现有非法植入安全风险的恶意镜像,并提示给用户;
5.镜像下载页面上,一般会有标注镜像上传的用户名,并按照例如下载量排序等,以保证最热门的镜像排列在前面;
但是现有技术方法并不是完全可靠的,对上述的安全机制,其缺点为:
1.用户名密码:弱用户名密码常容易被破解,并且仓库服务提供商的服务器也可能被恶意入侵,无法保证下载的镜像就是原始作者最开始时所上传的镜像;
2.镜像签名技术:镜像发布可以对其容器镜像进行数字签名,镜像使用者可以通过远程服务器来检验签名的完整性和发布者,首先该技术需要一个中心化的认证服务器(Docker Notary服务器)来验证,签名的公钥是被添加到Notary服务器(公证服务器),这个中心化的服务器地址有可能被恶意劫持或者被伪造,所以即使镜像内容被签名,也无法保证签名本身不被篡改;
3.HTTPS的协议在一些场景下会受到“中间人攻击”,也非绝对安全;
4.如果不被信任的、含有恶意代码的镜像被上传,虽然镜像仓库供应商有安全扫描功能,并且无法保证第一时间发现所有的恶意程序,也无法保障镜像内容的可信任和可靠性;
5.有些恶意攻击者,会上传一个与现有热门镜像同名的镜像,通过“鱼目混珠”的方式让使用者下载其镜像,因为仓库页面一般通过下载热门程度排序,剽窃者很容易通过伪造热门状况,将所剽窃的镜像排在前面位置,窃取镜像的冠名权;
关于安全信任问题:在云原生领域中,基于kubernetes或docker的应用开发和部署过程中,都需要去远端下载镜像,安全性非常重要,而镜像的可信度从根本上决定应用的安全性,但是基于容器的安全领域,在业界尚未成熟;
应用开发阶段:基于容器化的开发过程中,都会基于从云上的镜像仓库中获取的基础镜像,在其之上迭加业务逻辑,当未被信任的镜像跟随着应用一同上线,对企业安全造成严重影响;
应用部署阶段:现代的部署过程,都是通过容器化部署,以减少环境差异,但是由于应用部署上线所在的生产服务器,一般跟开发测试的环境独立,所以基本上都需要生产服务器从远程镜像仓库获取镜像,下载到本地后部署。但是镜像在原始作者上传到镜像仓库之后,有可能被黑客恶意替换,导致后续下载用户都下载到恶意镜像,也可能在镜像传输过程中,被黑客劫持,替换为恶意镜像,这些都会造成巨大的安全风险;
关于知识产权问题:
容器镜像也是基于程序代码构建而出,本质上也是科技工作者的劳动产出和知识产权,但是如果镜像上传到公共仓库上,很容易被他人下载后,以其名义重新发布,反而容易使得原始作者失去知识产权;
Docker镜像分发是通过远端镜像仓库(registry)分发数据实现的,镜像发布者在本地计算机上构建映像,然后将镜像推送到远程仓库,然后其他用户可以通过网络拉取镜像;
在此过程中,如何确保拉取的镜像是发布者发布的原始版本
如何确保仓库服务器提供商没有修改,如何标记镜像所有权
如何保证镜像的数字签名没被篡改和认证签名的中心服务器没有被劫持
众所周知,集中式网络是不安全的,镜像的下载通道可能通过DNS劫持、中间人劫持等方式被恶意入侵,即便有认证机制,如果认证签发/检验机制是在一个集中式服务器实现,仍然有被劫持的可能,如图3下情况描述一种容器镜像被黑客劫持,植入恶意程序的场景:
1. 原作者上传镜像到某镜像仓库(假设该镜像记为X);
2.黑客恶意篡改了该镜像,将镜像X替换为Y;
3. 某用户,本意是下载镜像X,实际下载了有安全风险的恶意镜像Y。
如图4,又描述另外一种侵犯知识产权的情况,原作者在某公开仓库发表上传了某镜像,被剽窃者修改镜像作者(容器镜像中有一个属性author(作者),是可以更改的)后,重新上传到其他仓库,窃取该镜像的名义归属和知识产权;
1.原作者上传镜像到仓库1 ;
2/3/4:某恶意抄袭者将镜像下载,篡改镜像中的作者属性,然后以自己名义上传到仓库2。
发明内容
本发明要解决的技术问题是现有各种镜像信任保证机制都或多或少有缺陷,比如依赖于中心化服务器等,现有的容器镜像分发技术中,无法保证镜像仓库中的镜像是原作者上传的原始版本,无法保证不被中途篡改,如果被篡改,会带来例如镜像安全隐患问题和知识产权问题,容器镜像签名技术仍然依赖于中心化的认证,依旧存在风险,本系统提出一种基于区块链的去中心化的可信认证机制,加强和解决镜像安全认证,本发明提供一种基于区块链技术的容器镜像可信认证的系统,镜像发布者计算本地计算机上镜像的数字签名,然后将包含数字签名在内的镜像可信认证信息写入基于区块链技术的可信认证组件中,区块链上的分布式的密码学算法能够保证在此过程中不会伪造,因此发布者可以安全地在公开的镜像仓库上共享镜像,用以解决现有技术导致的缺陷。
本发明还提供一种基于区块链技术的容器镜像可信认证的方法。
为解决上述技术问题本发明提供以下的技术方案:
第一方面,一种基于区块链技术的容器镜像可信认证的系统,其中,包含镜像签名注册组件、去中心化的镜像可信认证组件、镜像签名验证组件、镜像仓库;
所述镜像签名注册组件用于原作者上传镜像,并将所述镜像传输至所述镜像仓库,还用于计算所述镜像的内容得到可信认证信息,并将所述镜像与所述可信认证信息传输至所述去中心化的镜像可信认证组件,所述可信认证信息包含镜像作者信息、数字签名、镜像名称、镜像ID;
所述去中心化的镜像可信认证组件用于获取的所述镜像与所述可信认证信息,并将所述镜像与所述可信认证信息组合成智能合约写入区块链网络中,所述区块链网络提取所述可信认证信息中的所述数字签名;
所述镜像签名验证组件用于从所述镜像仓库获取所述镜像后计算所述镜像的所述数字签名,还用于从所述去中心化的镜像可信认证组件中获取提取的所述数字签名,还用于验证对比上述两个数字签名是否一致,若不一致则拒绝下载者使用所述镜像,若一致则接受下载者使用所述镜像。
上述的一种基于区块链技术的容器镜像可信认证的系统,其中,所述数字签名为所述镜像签名注册组件计算所述镜像的内容得到的哈希值。
上述的一种基于区块链技术的容器镜像可信认证的系统,其中,所述镜像签名注册组件计算所述镜像的内容得到所述哈希值的计算方法为安全散列算法128或安全散列算法224或安全散列算法256或安全散列算法384或安全散列算法512或信息摘要算法或哈希算法。
上述的一种基于区块链技术的容器镜像可信认证的系统,其中,所述区块链网络为通过互联网两两互联的多个客户端,所述客户端内部安装有所述一种基于区块链技术的容器镜像可信认证的系统,多个所述客户端形成一个分布式的星型结构,所述区块链网络具有去中心化的特质,对镜像的信息和数字签名进行了可信认证,避免了集中式系统的集中式认证或集中式证书签发的安全问题 。
上述的一种基于区块链技术的容器镜像可信认证的系统,其中,所述客户端为可信任认证系统,所述可信任认证系统包含镜像签名注册组件、镜像签名验证组件;
所述镜像签名注册组件用于在上传所述镜像时进行签名计算和注册到所述区块链网络中;
所述镜像签名验证组件用于在下载所述镜像时签名的校验。
第二方面,一种基于区块链技术的容器镜像可信认证的方法,其中,包含以下步骤:
步骤1:原作者上传镜像至镜像签名注册组件,镜像签名注册组件根据镜像计算出镜像作者信息、数字签名、镜像名称、镜像ID,并将所述镜像作者信息、所述数字签名、所述镜像名称、所述镜像ID整合成可信认证信息后与镜像一起写入去中心化的镜像可信认证组件中,所述去中心化的镜像可信认证组件将所述镜像与所述可信认证信息组合成智能合约写入区块链网络中,随后将镜像上传至镜像仓库内,镜像仓库将镜像与可信认证信息进行关联;
步骤2:下载或使用该镜像的下载者从镜像仓库下载镜像至镜像签名验证组件,镜像签名验证组件对镜像进行数字签名计算,并从去中心化的镜像可信认证组件中获取镜像与数字签名;
步骤3:将镜像签名验证组件计算的数字签名与从去中心化的镜像可信认证组件中获取的数字签名进行对比验证,若两个数字签名相同,则镜像签名验证组件允许镜像被使用,若两个数字签名不相同,则镜像签名验证组件拒绝镜像被使用。
具体使用时的实现是基于以太坊(Ethereum)实现的智能合约:
在“镜像签名注册组件”中,采用Solidity语言实现了以太坊(Ethereum)智能合约,并采用如下数据结构实现智能合约:ownerIdImageMap[msg.sender][repoTag] =Image(imageHash, msg.sender, repoTag, imageId);
其中:
ownerIdImageMap是交易的记录;
msg.sender是合约发起者(就是镜像的原作者);
repoTag就是镜像名称;
imageHash就是镜像的数字签名;
imageId是镜像的ID值;
实现上,基于以太坊,每个合约交易上(以太坊的概念)记录着镜像的名称,镜像文件的数字签名,交易提交者,镜像ID;
镜像的“数字签名”的具体实现:可以通过”docker save”命令,将镜像保存为.tar文件,然后通过操作系统的工具计算该.tar文件的安全散列算法256(SHA256)哈希值(采用安全散列算法256计算镜像数据的哈希值只是数字签名生成方式的一个示例,本技术方案的数字签名计算方式包括但不限于安全散列算法256);
另外,在实践中,一般镜像上传下载多通过docker引擎(一种开源容器引擎)实现(docker push做上传,docker pull做下载),所以,本系统的一个实现方式如下:
将上传过程中镜像签名验证组件的逻辑,植入到docker引擎中,在docker push中实现,在执行docker push(上传)命令时,引擎后台自动触发到区块链网络上的签名注册;
将下载过程中镜像签名验证组件的逻辑,植入到docker引擎中,在docker pull中实现,在执行docker pull(下载)命令时,引擎后台自动触发到区块链上拉取签名和本地文件校验。
上述的一种基于区块链技术的容器镜像可信认证的方法,其中,所述数字签名为所述镜像签名注册组件计算所述镜像的内容得到的哈希值;
所述镜像签名注册组件计算所述镜像的内容得到所述哈希值的计算方法为安全散列算法128或安全散列算法224或安全散列算法256或安全散列算法384或安全散列算法512或信息摘要算法或哈希算法。
上述的一种基于区块链技术的容器镜像可信认证的方法,其中,所述区块链网络为通过互联网两两互联的多个客户端,所述客户端内部安装有所述一种基于区块链技术的容器镜像可信认证的系统,多个所述客户端形成分布式网络系统。
上述的一种基于区块链技术的容器镜像可信认证的方法,其中,所述客户端为可信任认证系统,所述可信任认证系统包含镜像签名注册组件、镜像签名验证组件;
在上传所述镜像时通过所述镜像签名注册组件进行签名计算和注册到所述区块链网络中;
在下载所述镜像时通过所述镜像签名验证组件对签名进行校验。
本发明一种基于区块链技术的容器镜像可信认证的系统与方法提供的技术方案具有以下技术效果:
通过区块链网络技术维护一个基于区块链的镜像可信认证网络,进行镜像认证和鉴定,镜像从源头便得到了唯一性保证和无法被篡改,从而保障了用户使用镜像的安全性和可信度,也保障了原作者的著作权;
本本发提供的一种基于区块链技术的容器镜像可信认证的系统将这个实现机制自动化纳入到容器镜像引擎中,使得签名和鉴定动作对于上传者或下载者来说无需任何额外操作,简单便捷。
附图说明
图1为本发明一种基于区块链技术的容器镜像可信认证的系统的结构示意图;
图2为本发明一种基于区块链技术的容器镜像可信认证的系统中区块链网络的结构示意图;
图3为本发明一种基于区块链技术的容器镜像可信认证的系统的一个实施例图;
图4为一种容器镜像被黑客劫持植入恶意程序的场景图;
图5为一种侵犯知识产权情况的场景图。
具体实施方式
为了使发明实现的技术手段、创造特征、达成目的和功效易于明白了解,下结合具体图示,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。
基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
须知,本说明书所附图式所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。
同时,本说明书中所引用的如“上”、“下”、“左”、“右”、“中间”及“一”等的用语,亦仅为便于叙述的明了,而非用以限定本发明可实施的范围,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。
本发明的第一实施例是提供一种基于区块链技术的容器镜像可信认证的系统,目的是通过区块链网络技术维护一个基于区块链的镜像可信认证网络,进行镜像认证和鉴定,镜像从源头便得到了唯一性保证和无法被篡改,从而保障了用户使用镜像的安全性和可信度,也保障了原作者的著作权;
本发明提供的一种基于区块链技术的容器镜像可信认证的系统,并将这个实现机制自动化纳入到容器镜像引擎中,使得签名和鉴定动作对于上传者或下载者来说无需任何额外操作,简单便捷。
如图1所示,第一方面,一种基于区块链技术的容器镜像可信认证的系统,其中,包含镜像签名注册组件、去中心化的镜像可信认证组件、镜像签名验证组件、镜像仓库;
镜像签名注册组件用于原作者上传镜像,并将镜像传输至镜像仓库,还用于计算镜像的内容得到可信认证信息,并将镜像与可信认证信息传输至去中心化的镜像可信认证组件,可信认证信息包含镜像作者信息、数字签名、镜像名称、镜像ID;
去中心化的镜像可信认证组件用于获取的镜像与可信认证信息,并将镜像与可信认证信息组合成智能合约写入区块链网络中,区块链网络提取可信认证信息中的数字签名;
镜像签名验证组件用于从镜像仓库获取镜像后计算镜像的数字签名,还用于从去中心化的镜像可信认证组件中获取提取的数字签名,还用于验证对比上述两个数字签名是否一致,若不一致则拒绝下载者使用镜像,若一致则接受下载者使用镜像。
其中,数字签名为镜像签名注册组件计算镜像的内容得到的哈希值。
其中,镜像签名注册组件计算镜像的内容得到哈希值的计算方法为安全散列算法128或安全散列算法224或安全散列算法256或安全散列算法384或安全散列算法512或信息摘要算法或哈希算法。
如图2所示,上述的一种基于区块链技术的容器镜像可信认证的系统,其中,区块链网络为通过互联网两两互联的多个客户端,客户端内部安装有一种基于区块链技术的容器镜像可信认证的系统,多个客户端形成一个分布式的星型结构,区块链网络具有去中心化的特质,对镜像的信息和数字签名进行了可信认证,避免了集中式系统的集中式认证或集中式证书签发的安全问题。
其中,客户端为可信任认证系统,可信任认证系统包含镜像签名注册组件、镜像签名验证组件;
镜像签名注册组件用于在上传镜像时进行签名计算和注册到区块链网络中;
镜像签名验证组件用于在下载镜像时签名的校验。
而众所周知,区块链技术很好解决了集中式网络的上述可信问题;
区块链最开始应用在数字货币领域,后来逐渐扩展到其他领域,作为去中心化的可信认证的绝佳技术;
本专利通过将镜像信息存储在去中心化的区块链网络上,可以消除在集中式网络中轻易篡改数据的可能性,通过离线签名和验证,使数据发布和获取更加方便和安全;(如图3所示)
1.原作者上传镜像X到镜像仓库;
2.同时在区块链中注册该镜像的签名;
3.某黑客侵入镜像仓库,恶意篡改镜像,将X改为Y;
4.某用户下载镜像X(实际下载的是镜像Y);
5.下载完成后,计算下载镜像的签名,并立刻去区块链进行校验比对;
6.在区块链上获取该镜像的签名(是X的签名),发现跟本地下载的镜像签名不符合,发出警告。
第二方面,一种基于区块链技术的容器镜像可信认证的方法,其中,包含以下步骤:
步骤1:原作者上传镜像至镜像签名注册组件,镜像签名注册组件根据镜像计算出镜像作者信息、数字签名、镜像名称、镜像ID,并将镜像作者信息、数字签名、镜像名称、镜像ID整合成可信认证信息后与镜像一起写入去中心化的镜像可信认证组件中,去中心化的镜像可信认证组件将镜像与可信认证信息组合成智能合约写入区块链网络中,随后将镜像上传至镜像仓库内,镜像仓库将镜像与可信认证信息进行关联;
步骤2:下载或使用该镜像的下载者从镜像仓库下载镜像至镜像签名验证组件,镜像签名验证组件对镜像进行数字签名计算,并从去中心化的镜像可信认证组件中获取镜像与数字签名;
步骤3:将镜像签名验证组件计算的数字签名与从去中心化的镜像可信认证组件中获取的数字签名进行对比验证,若两个数字签名相同,则镜像签名验证组件允许镜像被使用,若两个数字签名不相同,则镜像签名验证组件拒绝镜像被使用。
具体使用时的实现是基于以太坊(Ethereum)实现的智能合约:
在“镜像签名注册组件”中,采用Solidity语言实现了以太坊(Ethereum)智能合约,并采用如下数据结构实现智能合约:ownerIdImageMap[msg.sender][repoTag] =Image(imageHash, msg.sender, repoTag, imageId);
其中:
ownerIdImageMap是交易的记录;
msg.sender是合约发起者(就是镜像的原作者);
repoTag就是镜像名称;
imageHash就是镜像的数字签名;
imageId是镜像的ID值;
实现上,基于以太坊,每个合约交易上(以太坊的概念)记录着镜像的名称,镜像文件的数字签名,交易提交者,镜像ID;
镜像的“数字签名”的具体实现:可以通过”docker save”命令,将镜像保存为.tar文件,然后通过操作系统的工具计算该.tar文件的安全散列算法256哈希值(采用安全散列算法256计算镜像数据的哈希值只是数字签名生成方式的一个示例,本技术方案的数字签名计算方式包括但不限于安全散列算法256);
另外,在实践中,一般镜像上传下载多通过docker引擎(一种开源容器引擎)实现(docker push(通过docker引擎的一个命令)做上传,docker pull(docker引擎的另一个命令)做下载),所以,本系统的一个实现方式如下:
将上传过程中镜像签名验证组件的逻辑,植入到docker引擎中,在docker push中实现,在执行docker push(上传)命令时,引擎后台自动触发到区块链网络上的签名注册;
将下载过程中镜像签名验证组件的逻辑,植入到docker引擎中,在docker pull中实现,在执行docker pull(下载)命令时,引擎后台自动触发到区块链上拉取签名和本地文件校验。
其中,数字签名为镜像签名注册组件计算镜像的内容得到的哈希值;
镜像签名注册组件计算镜像的内容得到哈希值的计算方法为安全散列算法128或安全散列算法224或安全散列算法256或安全散列算法384或安全散列算法512或信息摘要算法或哈希算法。
其中,区块链网络为通过互联网两两互联的多个客户端,客户端内部安装有一种基于区块链技术的容器镜像可信认证的系统,多个客户端形成分布式网络系统。
其中,客户端为可信任认证系统,可信任认证系统包含镜像签名注册组件、镜像签名验证组件;
在上传镜像时通过镜像签名注册组件进行签名计算和注册到区块链网络中;
在下载镜像时通过镜像签名验证组件对签名进行校验。
综上,本发明的一种基于区块链技术的容器镜像可信认证的系统与方法,能够通过区块链网络技术维护一个基于区块链的镜像可信认证网络,进行镜像认证和鉴定,镜像从源头便得到了唯一性保证和无法被篡改,从而保障了用户使用镜像的安全性和可信度,也保障了原作者的著作权;
本本发提供的一种基于区块链技术的容器镜像可信认证的系统将这个实现机制自动化纳入到容器镜像引擎中,使得签名和鉴定动作对于上传者或下载者来说无需任何额外操作,简单便捷。
以上对发明的具体实施例进行了描述。需要理解的是,发明并不局限于上述特定实施方式,其中未尽详细描述的设备和结构应该理解为用本领域中的普通方式予以实施;本领域技术人员可以在权利要求的范围内做出各种变形或修改做出若干简单推演、变形或替换,这并不影响发明的实质内容。