黑暗中的利刃, 解析区块链+DevOps实践 | 案例

2019-10-10 10:47:53 浏览数 (1)

来源 | Hackernoon

编译 | guoxi

责编 | Carol

出品 | 区块链大本营(blockchain_camp)

去年加密货币的暴跌戳破了无数投资者一夜暴富的美梦,也让不少用户渐渐对加密货币失去了信心。

在寒冬中,人们开始思考区块链的未来,越来越多的人开始将目光放在区块链这项技术上,开始探索区块链技术的无限可能,其中就包括今天故事的主人公 Dennis Zimmer。

Dennis Zimmer 当时正苦于没有一个很好的基础设施来实现自己的项目,区块链的出现给Dennis Zimmer 带来了转机,也让他实现了用区块链为数字资产保驾护航的想法。

区块链技术如何与数字资产有机结合?让我们在文章中一探究竟。(下文将统一用第一人称“我”表示Dennis Zimmer)

我至今仍记得 2018 年 2 月。那时加密货币的泡沫被戳破,大多数加密货币的价格暴跌,几近腰斩,凉透了所有加密货币爱好者和投资者的心。

在那个时候,我和我的联合创始人 Moshe Bar (他主要的头衔是虚拟化软件初创公司 XenSource 和 Qumranet 的联合创始人,2008 年 9 月,红帽以 1.07 亿美元的价格收购了 Qumranet )进行了一些非常深刻的讨论,讨论如何解决 DevOps (DevOps 是 Development 和 Operations 的组合词,是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合)相关的问题。

我们希望在无需修改或增添任何事物的前提下为每个数字资产赋予一个全球唯一且有意义的标识,从而实现对任何数字资产的完整性保证和信任。

在阅读我们这次难忘的经历之前,你可以来我们的 Github 上看看我们所做的项目,这些项目对开源项目和非盈利项目都是免费的。

  • https://github.com/vchain-us/vcn
  • https://github.com/vchain-us/kube-notary
  • https://www.codenotary.io/

故事发生的背景

在当下,人们为了保证重要文件不被篡改,要么是提前计算文件、源代码或 docker 容器映像的校验和,要么就是使用数字证书对需要保护的文件进行签名,数字证书是目前最推荐的一种方式,但是签名时要保证数字证书支持该类型的文件。

虽然安全哈希算法 SHA-256 和 SHA-512 非常适用于计算数字指纹,但实际上并没有哪些数字证书真正适用于你可以找到的任何数字资产。最后但非常重要的一点是,数字证书绝对不是为这个快速发展的世界制作的。

你可能已经被我绕晕了,这里让我们先补充一下基础知识,如果数字证书被撤销将会发生什么:

  • 使用这个数字证书签名的所有数字对象都会被撤销。
  • 你的设备上会不断显示该数字对象签名已被撤销的警告,具体警告的形式取决于你使用的操作系统、应用程序以及对应的执行引擎。
  • 在某些时候,签名被撤销的二进制文件无法再被打开。

你可能会问了,那为什么要撤销数字证书呢?在以下几个场景中,你不得不这样做:

  • 当你丢失了自己的私钥时。
  • 当有人偷了你的私钥时。
  • 当你不再信任已签署的数字资产时。

那么问题就来了,设想一下,如果你需要签署数百甚至数千个数字资产,如此大的工作量你绝对不会仅仅因为不再信任一个或两个数字资产就撤销数字证书。这也就意味着,大多数的数字证书永远都不会被撤销,即使是在这些证书丢失、被盗、不再被信任的前提下。

如果想要使用一个新的数字证书,对一个数字证书已被撤销的数字对象进行签名,你需要有访问它并重新构建它的权限。这不仅是一个巨大的工程,而有时这种操作完全是不可能的。这也是为什么数字证书可以保证信任的原因。

但这使得数字证书并不适用于我们所要构建的解决方案。

区块链来了

在 2018 年,加密货币价格的暴跌让大多数人开始意识到,区块链应该注重技术而不是疯狂炒作。区块链技术也确实给我们的项目带来了巨大的转机,我们认为,区块链技术正是我们想要实现全球化数字资产身份认证和信任目标所必须的技术,这种技术可以让我们的项目免于与中心化的数字证书认证机构打交道。

在确定了方向之后,我们不断向前推进,成立了 vChain.Inc 这家公司,并组建了一支团队开始编程实现。

1、去中心化帐本技术

在深入研究去中心化帐本技术时,你很快会意识到当前去中心化账本的许多组件仍处于试验阶段,而现有的开发工具也都尚处于初期阶段。因而直接使用公有区块链对我们来说并不现实,公有区块链有一些非常致命的痛点,其中最令人诟病的莫过于高延迟以及加密货币币价的不稳定。

经过我们仔细地分析,我们项目所需的技术应该满足以下要求:

  • 区块链中没有加密货币或通证:由于我们需要将大量的数字资产写入到区块链中,因而区块链无需交易费用是至关重要的一环。
  • 区块链不能是私有区块链:区块链中不支持加密货币,但我们也不想将它转换成一条私有区块链,因为我们想要通过将数据连接到区块链上来实现数据的公开访问。
  • 可用的开发人员和开发工具:如果使用的区块链过于小众,那么我们就很难找到可用的开发人员,大多数基础的开发工具也得我们重新开发。
  • 始终可用:区块链要保证可以一直稳定运行。
  • 区块链不能是托管的区块链:我们想到的最后一条要求从项目建立的第一天就悬而不决,伴随而来的还有区块链上数据迁移的问题,哎,一言难尽。

在比较了多个解决方案之后,我们最终选择了基于以太坊(以太坊 Parity 客户端)的联盟区块链。

2、零信任联盟

在拿定主意之后,我们需要找到一个切入点着手去做,因此我们在没有建立联盟的情况下先在内部建立了我们的区块链测试网络,用这个区块链测试网络进行试验来研究项目对智能合约的需求并创建初始区块链架构。我们还与不同的软件公司沟通,谋求共同建立一个运营区块链的联盟。

令我们惊讶的是,许多公司都对我们的联盟区块链表现出了极大的兴趣。在 2019 年 1 月,我们正式建立了零信任联盟( Zero Trust Consortium ,ZTC)。零信任联盟共有 12 个初始成员,这些成员运行着各自的以太坊 Parity 客户端节点。共同组成了我们的联盟链主网。在之后的 9 个月里,我们的项目蓬勃发展,时至今日,零信任联盟的成员数已经超过了 30 家。

零信任联盟的总部位于瑞士,其主要职责是对新成员实行链下治理,独立于其他成员进行自己的操作。我们的联盟区块链可以实现零停机时间,没有硬分叉,完全由联盟管理,我们本着开放的态度欢迎每一家软件公司加入这个联盟,运行一个节点或者成为联盟的成员。

了解DevOps

接下来,让我们通过一些基础知识来了解 DevOps。

由于零信任联盟平台可以涵盖我们解决方案的基础,因而我们可以完全专注于开发我们自己的解决方案,也就是 CodeNotary 。

在谈论 DevOps 时,我们往往谈论的都是一系列的组件,包括进程、工具、自动化、构建管道、源代码的处理与存储、微服务、docker 容器,当然 DevOps 远远不止这些,这个名单还可以一直列下去。

但是从数字资产的角度来看,DevOps 最重要的组件是:

  • 源代码(代码存储库)。
  • 软件制品(CI (Continuous Integration,持续集成)/ CD(Continuous Deployment,持续部署),自动化)。
  • 文件(配置文件,定义文件,描述文件,文档)。
  • docker 容器(镜像,只读层)。

从一开始,我们的目标就是支持所有地这些组件,但不做深入的更改,也不以任何方式破坏自动化。当然,这种集成应该易于使用,易于集成从而满足软件开发的需求。

我们将通过用户身份创建数字资产身份的过程命名为公证( notarization ),将验证完整性和信任级别的过程命名为身份验证( authentication )。

当然了,这两个过程是有先后顺序的,在 CodeNotary 平台中,一个数字资产只有先被用户公证之后才能进行身份验证。

CodeNotary 的公证过程

CodeNotary 的公证过程如下:

  1. 计算安全哈希算法 SHA-256 校验和。
  2. 获取文件或对象的属性。
  3. 使用用户身份(私钥)将对象校验和以及信任级别写入基于以太坊技术的区块链中。
  4. 在受区块链保护的关系数据库( CodeNotary 后端)中添加对象属性。
  5. 只有当所有的数据都被成功写入到区块链时,才会返回成功。

接下来我们用自动监控报警系统 Prometheus 配置文件的公证过程来做介绍,这里公证的对象可以是任何软件制品,包括 github 存储库,docker 镜像或者是一个本地目录。

文件的公证过程,注意最下方的信任级别为 3-已验证身份,状态为可信(TRUSTED)。

如果你不再想要支持这个数字资产(可能是因为已经发布了较新的版本,并且你不再想要支持较旧的版本),或者是不再信任这个数字资产(可能是因为你在其中发现了漏洞,问题或者只是不再喜欢它)。这时,区块链上的状态也会发生变化,并且世界各地的各个节点都会收到这次状态的更新,在代码中你所需要的操作如下所示,具体的原理我们后面会讲。

代码语言:javascript复制
vcn unsupport prometheus.yml
代码语言:javascript复制
vcn untrust prometheus.yml

文件的公证过程,注意最下方的状态已经被更新为不再支持(UNSUPPORTED)。

接下来我们来公开公证一个非常常见的 docker 容器镜像:

代码语言:javascript复制
docker pull ubuntu
vcn n -p docker://ubuntu:latest

docker 镜像的公证过程。

重要的一点是,与使用数字签名不同,这个数字资产永远不会被更改。

CodeNotary 的身份验证过程

虽然说公证是 CodeNotary 中十分重要的组成部分,它可以让用户用自己独一无二的身份对数字资产和信任级别进行公证,但如果其他人不能对这个数字资产进行身份验证,那么公证的操作也就没有了意义。在 CodeNotary 中,身份验证的操作如下:

  1. 计算安全哈希算法 SHA-256 校验和。
  2. 在基于以太坊技术的区块链上查询对象校验和,当然了,这个操作只对特定用户或特定组织的成员开放。
  3. 如果身份验证成功:区块链会返回数字资产的信任级别和元数据。
  4. 如果该数字资产尚未进行公证:区块链会返回该数字资产未知。

需要注意的一点是,在我们的设置中,用户执行身份验证时只需要上传该数字资产唯一的校验和,其他数据都不需要上传,这样不仅节省带宽,还可以保护用户的隐私。

接下来让我们将目光转回到刚才公证过的自动监控报警系统 Prometheus 配置文件,我们可以使用两种方法执行身份验证。

我们可以使用 vcn 的命令行对文件进行身份验证:

代码语言:javascript复制
vcn a prometheus.yam

文件的身份验证过程,注意最下方的状态为不再支持(UNSUPPORTED)。

在上文中我们用这个文件演示了不再支持文件的操作,因此在这里身份验证时我们会收到错误消息。在将 vcn 集成到任何自动化测试或脚本中时,这个错误是十分有用的。

我们可以直接对 docker 镜像进行身份验证:

代码语言:javascript复制
vcn a docker://ubuntu:latest

docker 镜像的身份验证过程

除此之外,我们还有很多对数字资产进行身份验证的方法,感兴趣的话你可以点击链接查看:

  1. CodeNotary 网站: https://authenticate.codenotary.io
  2. Google Chrome浏览器扩展程序: https://chrome.google.com/webstore/detail/vchain-codenotary-downloa/mnloemedehacppeggbipipjlphdjpjcb?hl=en
  3. Javascript: https://github.com/vchain-us/jsvcn
  4. 项目管理工具软件 Maven: https://github.com/vchain-us/jvcn-maven-plugin
  5. 容器化应用 Kubernetes: https://github.com/vchain-us/kube-notary

顺便说一句,我们目前正在开发功能完善的 API ,也就是说将来集成的操作会变得更加容易。

CodeNotary 仪表板

无论进行何种操作,你都可以在 CodeNotary 的仪表板面板上检查它。如果你使用 CodeNotary 来开发或维护非赢利的开源项目,那么你可以免费使用 CodeNotary 所有的功能。

CodeNotary 的仪表板面板

区块链透明性

口说无凭,眼见为实。你可以通过以下的视频检查我们的区块链:https://vimeo.com/361498314

  • 区块链资源管理器: https://explore.zerotrustconsortium.org
  • CodeNotary 智能合约解码器: https://decode.codenotary.io

快速安装 CodeNotary

CodeNotary 安装起来十分便捷,你只需要花费几分钟的时间。

CodeNotary 的下载页面

在命令行的环境中,你只需要下载 vcn 的 CodeNotary 版本就可以使用它。

https://github.com/vchain-us/vcn/releases/latest

如果你还意犹未尽,想了解 vnc 更多的实现细节,你可以在我们的 Github 仓库中找到更多的说明文件:https://github.com/vchain-us/vcn

看完本文,是否对DevOps有更深的了解呢?如果你有什么经验或者想法,欢迎留言和我们一起讨论哦 ~

0 人点赞