在过去的一年时间里,我们在设计了一套工具,它可以使用比特币区块链和open badges规范发布、显示、验证数字学历证书。今天我们放出来这个工具的第一个版本的源代码,这份代码遵循MIT开源许可,这样其他开发者可以用它来实现相似的想法。通过公开代码,我们希望分享我们代码设计背后的思想,还有我们持续从事数字信誉的工作中所遇到的有趣的问题。
你可以在我们的主页找到我们这个项目的源代码、文档和讨论:http://certificates.media.mit.edu.
证书架构的整体设计是比较简单的。文凭的发布人签署一份完整结构的数字证书,把它的哈希值存储进区块链交易中,交易输出分配给一个接收者。
自从这个项目启动以来,我们不仅学到了很多区块链相关的知识,而且认识到新技术技术在证书概念方面塑造社会经济学的实践方式。我们希望通过分享我们已经实现的东西和想法,对其他开发者有所帮助,同时,那些对区块链架构的数字文凭系统感兴趣的院校也可以通过我们已经实现的东西得到一些帮助。
我们所遭遇到的最有趣的挑战不是纯粹技术性的,虽然它们常常和技术无法完全分离,我们微小的设计决策可能会从根本上塑造一种行为。这也是为什么我们进行了试验性的一小步,使用真实用户来测试我们的系统,然后再把我们学到的东西加入我们的系统。区块链技术是一项相当新的技术,它复杂,不可改变,这种重要性不得不让人在做设计决策时考虑到对它长远发展的影响。
我们这套工具的第一版本可以对其他研究员和其它试验项目起到抛砖引玉的作用。如果有院校想要全面铺开这套数字文凭系统,我们推荐等待我们的第二版本。我们已经开始准备从底层重新设计,我们这套工具的未来版本同样会遵守MIT的开源许可。
发布者(Issuer)、查看者(Viewer)、模式(Schema)
下面介绍的三个代码库组成了我们数字文凭的架构:
Cert-schema (https://github.com/digital-certificates/cert-schema),模式(schema) 描述了数字证书的数据规范。一个数字证书本质上是一个JSON文件,它包含一些必须的字段,cert-issuer代码会把这些字段放在区块链上。我们尽力让模式(schema )接近open badges(http://openbadges.org/)的规范,也期望和下一个版本的规范尽可能的接近。
Cert-issuer (https://github.com/digital-certificates/cert-issuer),发布者(issuer)持有一个JSON证书,创建这个证书的哈希值(一串字符,可以作为一个大的数据文件的唯一标识),把这个哈希值嵌入OP_RETURN字段,字段通过发布者机构的比特币地址到接受者比特币地址的一个比特币交易的广播发送给接受者,这样就发布了一个证书。
Cert-viewer (https://github.com/digital-certificates/cert-viewer),查看者(viewer)被用来显示和验证已经发布的证书。viewer为用户还提供请求证书验证的功能,而且可以生成新的比特币(地址)ID。
数字文凭的重要性
在这里我们不再重复我们对证书和认证的总体思路,如果想更了解这其中的背景请看这里(https://medium.com/mit-media-lab/certificates-reputation-and-the-blockchain-aee03622426f#.hf5ur1fir)。我们对这个领域新解决方案的兴趣来源是现存方案的缺陷。证书系统运作有缺陷,带来的后果不仅仅是低效,还有麻烦,请求一个大学成绩证明的有时代价还很高:比如说发生灾难,难民不能提供一个完整的学习证明,那么他们就不能继续完成他们的学业。数字系统可以弥补这些缺陷。
(超越)炒作
请对区块链的炒作保持警惕。在我们创建这个项目的一年中,基于区块链的证书系统已经成为一个热门领域(在谷歌中键入关键字blockchain based academic certificates看看)。无需多言,这些报道使用了夸张的修辞(一些质疑者也是这样)。我们学到的很重要的一点是,区块链比大多数人认为的要复杂得多。在其上创建应用,也就是我们正在做的事情,虽然慢慢的变得容易了一些,但能够深入理解它内部工作的人少之又少(我们不认为我们自己就是这样的人)。区块链并不是一个简单的解决方案,它也不会修复现存证书系统的所有问题,但它有改善现存系统的潜力,这就是我们乐于探索的地方。
为什么使用比特币区块链?为什么不用以太坊?
简单的回答是因为我们的项目启动的时候,以太坊还处在萌芽状态。另一方面是因为,比特币是迄今为止经过时间验证测试过的最可靠的区块链;还有就是矿工的利己行为使这个网络非常健壮,而且,投入比特币和相关公司的金融投资,让比特币可以更长久的存在。我们的方案并不是锁定了一个特定区块链,在其它区块链上发布我们的证书也是很容易的,然而,我们所要的功能比特币区块链都能满足我们。这并不是说我们对智能合约的潜力没有兴趣,我们正在探讨基于以太坊的侧链潜力,研究使用它降低交易成本,和扩展功能。
使用公钥/私钥对儿
我们的系统使用公钥/私钥对儿来验证发布者和接受者。虽然这个概念很强大,但实施起来有点让人头疼。理想情况下,证书接收者(毕业证,工作参与证件等)创建他们自己的密钥对,然后出示给我们公钥,请求一个证书。然而这需要有一定技术基础才能完成这个过程,这限制了这个系统更大范围的试验。到目前,分享一个证书的链接是非常方便的,在未来,我们要找到更好的方法让非技术用户轻松创建管理他们的密钥。比较好的方法是为学历证书建造一个钱包,就像交易持有比特币那样的钱包。另一替代方案,是使用纸质系统,提前创建和共享秘钥(之后销毁它们)。但这需要发布证书的机构提供更高级别的信任水平。
证书的吊销
我们想保有吊销一个证书的功能,一部分原因是每个人都关心这个,还有部分原因是因为,我们担心我们的设计中出现一些错误,需要让一些首次试验的东西无效。在当前的系统(第一版本)中吊销操作不是真正的删除——在区块链上的没有可以删除的信息,它只是一个标记,发布者或者接收者可以在他们不承认的证书上设计一个不可用标记。具体技术细节是这样,我们创建两个0.01美元的输出,一个分配给发布者,一个分配给接收者,只要他们有一个人花掉这个他们控制的0.01美元,这个证书就被注销。这就像一个所有用户必须遵守的约定一样。观察者(viewer )代码可以根据这个约定来检查吊销标识是否被设置,但观察者可以选择忽略它。这个设计选项我们正在重新考虑它,在未来的第二版本中,我们试着探索其它吊销方法,可能会限制查看者展示和验证吊销的证书的能力。两种可行方向的版本,管理和维护同一个吊销列表,版本控制(例如,通过一串交易链找到最新版本的证书)听起来很冗长乏味。从另一方面来说,一个吊销列表,是一个证书 发布者公用的列表,就像open badges和X.509证书一样。
隐私
由于区块链公开且不可更改的属性,每个人都可以进入,上面的信息不可被抹去,这些特性赋予了它管理引导在其上进行非法勾当的能力。与此同时,证书需要和一个人绑定才能生效,所以,保护隐私数据显得尤为重要。一方面,学员需要有能力展示他们(而不是其他人)收到的特定证书的证据,另一方面,他们还应该能够把这些信息对一些雇主屏蔽。我们MIT的同事正在创建一个系统,用一种精巧的方式来管理隐私数据,可是这个系统还在早期开发阶段。我们当前使用的方案,在模糊(让非授权用户很难得到他们不应该得到的入口)和易用性之前保持平衡,这样那些不具备技术背景的机构或学员就可以不受技术的限制使用这种证书系统了。为了达到这种目的,我们把证书(包括一个学员的个人信息)的哈希值放进区块链。如果有人想验证一个证书的有效性,那么他必须让这个学员公开这个证书本身和存放在区块链的证书哈希值。
选择的权利
对于要向别人展示的个人历史部分,学员应该有能力选择吗?传统的证书中,学员可以在不同的目的以不同的结构来阐明他们的经历,例如,一个对料理和写作有兴趣的学员,在应聘新闻记者时,和在应聘大厨时所要强调的重点是不同的。他可能在他的面试过程中用不同的方式把这些经历表达出来。有一些雇主可能更看重一个完整透明的人,但大多数情况下,没有理由让学员用一种方式展示他的所有。在没有更好的保护措施的情况下,公开信息的风险已经大于它的好处了。这又是一个很难处理的问题,因为在你雇佣一位司机前你肯定想知道他之前是否有醉酒驾驶的前科。然而我们相信,我们的法律和社会机制比一个新技术系统更适合处理这样的问题。一些人喜欢公开他们的受教育历史(比如在LinkedIn上显示),而另一些人,更偏向于在需要的时候才展示出来。我们的目的是让学员使用数字文凭的时候,也有这种灵活的选择。当一位学员向一位准雇主展示他的证书时,只有特定的证书内容会被展示。在区块链张可能会搜索到这位学员收到的其它证书,但这些证书的内容都是加密过的。这样的设计有一些缺陷,例如,如果证书发布者只发布一种类型证书,那么他发行证书的所有传输可以在区块链上被搜索到,进而可以推算出还有谁可能接受到这个证书。这也是我们努力在第二版本的底层技术做出改变的原因,让可追溯性变得困难。
追踪证书的使用和价值
追踪证书的使用对于个体的价值,这是我们发现的有潜力的地方,然而我们还没有清晰的设计方案。如果有一个记录学位的公开记录,让雇主更加垂青(超越常青藤大学提供的列表),这将会促进更多学生决定加入,选择一个目录登记。为了实现这个目标,我们有两种方案来拓展我们的架构,它们分别是“交易型的披露”和“通过代理披露”。第一种方案实施起来,就像是公开记录的交易,生成其他人可用的元数据。第二种方案是,通过第三方(举例:通过网站来向雇主展示信息,这个网站在多数情况下应该是证书发布机构)让用户验证证书,保留信息披露的记录。我们不打算把这两种方案加入进第一版本,我们考虑可能会在第二版的代码中加入。
第二版本
在上文中,我们提到过,第一版本是让用户和研究员做试验用的。在第二版中,我们会在做一些结构调整,我们的工作重点依然会放在文档和开发上,这样好让其它机构更容易使用。第二版最大的技术改变是我们存储证书数据的方式。第一版中的证书发布相当于比特币区块链上的一个交易,这是发布证书过程的一个类比(这中间有一个发布者对接收者的真实交易),这是不必要的浪费。在第二版中,我们会把证书存储进二叉哈希树( Merkle tree,一种可供高效存储的密码学结构)。 二叉哈希树根依然存储在比特币区块链,以便保持区块链的优势。这就产生了一些新的有意思的挑战,因为二叉哈希树,似乎更适合发布者维护而不是接收者,然而正如上文提到的,基于钱包的证书(和存储在区块链中与证书相关的数据)管理方案依然可以让接收者完全控制他们的证书。
开始/参与
新项目的主页在这里( http://certificates.media.mit.edu),这里你可以找到所有的源代码、文档和实现的例子。如果你正在进行着着方面的尝试,请考虑加入我们Github的发布者功能(cert-issuer)代码库(https://github.com/digital-certificates/cert-issuer),在这里,我们将会在未来几周加入我们研讨过的大部分功能。对于项目细节功能的需求、bugs或其它议题,我们推荐在Github上展开讨论,或者提代码交合并请求。
感谢
感谢麻省理工媒体实验室的各位同仁,感谢媒体实验室Digital Currency Initiative 的帮助,感谢的人很多……