基于区块链的可信高校学生成绩记录系统设计

2020-05-20 07:15郭惠芳王照平刘寒冰
现代计算机 2020年11期
关键词:访问控制账本区块

郭惠芳,王照平,刘寒冰

(黄河科技学院学院计算机科学系,郑州450002)

0 引言

毕业生就业、考研或出国升造时需要到学校开具一份在校学习成绩报告,作为学生在校学习情况的证明,在这个过程中可能存在:①成绩可能会被篡改,不排除由系统管理员在系统中篡改或由个人在纸质证明上进行篡改。②开具的证明是由学校印章来证明这份证明的有效性,但存在印章造假的可能。③可信度低造成用人单位对这份证明的采信度不高。当前大部分高校学生成绩记录系统是建立在传统数据库基础之上的,其安全性也存在一定隐患,例如数据库是可以被修改的,数据库的日志也是可以被修改的。区块链技术最突出的特点就是防篡改、可追溯,这些特征为构建一个可信的高校学生成绩记录系统提供了基础。

一个实体是可信的,如果它的行为总是以预期的方式,达到预期的目标[1]。它一般有三个属性:①能够鉴别用户的身份;②能够确保信息在存储或传输过程中不被篡改;③能够保证用户的隐私信息不被轻易泄漏。构建一个可信的成绩记录系统,我们将考虑这几个方面的实现。

近年来,公有链技术应用于医疗、金融、认证以及政府管理等领域[2-5]。2016 年Learning Machine 与麻省理工学院媒体实验室合作开发了Blockcerts,它基于比特币网络发布文凭,提供学历、专业劳动力资格的认证,凭证可以防篡改并可验证。虽然Blockcerts 在很多大学得到了应用,但开发者们仍然称这个系统是一个实验系统,并声称在访问控制、隐私保护及使用的便捷性上仍在探索[6]。基于公有链基础之上的系统具有以下几点不足,①效率低,②没有身份验证不适合实际应用需求,③监管难。它的优点就是完全去中心化,可信程度高。

经调研,在国内的很多领域实施完全的去中心化是不现实的,并且也不符合我国相关法规[7]。大部分业务场景中存在监管机构,他们有一些权利或义务对交易进行一定程度的业务监督,还有一些领域不适合进行匿名交易,需要确认参与者身份。联盟链技术增加了用户的身份验证功能,但缺点是去中心化不完全,带来的影响是从技术来看可信度及安全性不如公有链,但有了身份验证系统,系统的监管及审计可以集成到区块链系统中,也就是说系统的安全性相比普通的数据库系统好,仍然具有防篡改、可追溯独特优势。另外,从行政管理角度来看,监管和审计模块又可以提升区块链系统的安全性和可管理性。在具体实现中,综合技术与行政管理两个方面的优、缺点,可以取得更好的实践应用。

在高校学生成绩记录系统中,参与学校是需要有身份证明的,教育主管部门需要在其中起到一个监管的作用,它有权对参与其中的高校进行管理。近年发展起来的联盟链就是支持这样的应用场景的区块链技术,它由若干个机构(形成联盟)共同参与管理,每个机构都运行着一个或多个节点,只允许系统内被授权的用户读写或提交交易。超级账本(Hyperledger)的子项目Fabric 是当前最为活跃、成熟的企业联盟链的基础设施。

1 基础平台的支持

1.1 Faabbrriicc平台

Fabric 是一个多链架构,多个组织之间可以根据业务范围的不同,构建不同的链(也称为通道),在一个链上记录着一个账本,但它有多个备份同时保存在多个记账节点上,由共识机制保持着同一个账本的多个备份的一致性。链上除了有账本,还有智能合约(也称为链码),它是开发者编写的访问账本的接口。每笔交易的生成都需要调用相应的智能合约来完成,智能合约中体现每个链上交易生成的逻辑,如前置条件检查等。Fabric 链是由不同种类的节点构成,对于开发者而言有三类节点比较关键。一类是背书节点,初始创建链时由管理员配置该链上交易的背书策略,即规定每个交易需要得到多少数量和身份的节点的确认,来保证多个备份的一致性;一类是排序节点,它将接受不同节点提交来的交易,排序并打包生成区块广播到记账节点;还有一类就是记账节点,每个记账结点收到网络中发来的新区块,对其中每条交易进行验证,确认有效才更新到本地的账本中,防止并发可能产生的不一致。

下面描述了一个成绩记录(交易)上链的典型流程,如图1 所示:1.提交交易,同时将参数上传,如学生的成绩信息;2.交易通过链上节点(peer)向配置的背书结点提出交易申请(proposal);3.背书节点模拟运行相应的智能合约,如果没有冲突,并且身份认证通过,对前面运行的结果进行签名返回;4.负责提交交易的节点收到所有背书的交易响应后进行拼接(若没有冲突的话),向排序节点提交。排序节点将收到的交易按不同通道分别排序,并打包成块(block);5.由排序节点将打包的块广播至记账节点;6.记账节点验证交易,更新本地账本,最后将结果返回给应用程序。

图1 交易上链共识流程

1.2 可信的基础

Fabric 提供了访问CA 的组件Fabric-ca 和一个自带的CA 系统,为用户提供身份认证服务。所有访问系统的组织、节点以及用户都需要拥有这个系统签发的身份证书才能访问这个区块链网络,节点间及用户与节点之间的通信都由相应的私钥进行签名确认,它是构建一个可信的分布式系统的基础。具体一点,链上数据的防篡改以及修改记录的可追溯性是由下面几点机制来保证的:

(1)账本在多个节点中有备份,一个节点上的账本被修改是无效的,共识机制保证多个副本的最终一致性。

(2)交易是通过执行智能合约提交上链的,智能合约的逻辑可以控制同一记录的多次写入;每一次对记录的修改都会被记录在账本中,也可以利用这个特性通过审计环节对多次写入的记录进行事后审查。

(3)Fabric 的账本和其他区块链的结构类似,相邻区块之间由Hash 值串联在一起,同时每个区块中的所有交易由hash 二叉树组织在一起的,如果修改其中一个区块中的交易,则Hash 值验证不通过。

构建一个可信的学生成绩记录系统,仅有以上基础的保障是不够的。表1 中列出了在系统设计中需要解决的问题及解决方法。从表中可看出,Fabric 系统提供了历史记录的防篡改以及可追溯,但用户链上数据的访问控制、敏感数据的保护以及细粒度的授权访问并未提供系统层面的解决[8,9]。文中第3 节给出了一个高校学生成绩记录原型系统的构建,在此基础之上,文中第4 节详细阐述了表中列出的相关安全问题的解决方法。

表1 可信成绩记录链子任务解决方案

2 学生成绩记录链的构建

2.1 原型系统构成

平台的参与方由高校、教育主管部门以及学生或授权单位组成,管理部门对联盟链中的成绩记录(账本)进行审计、监管。该平台是一个可扩展的分布式系统,一个地区可以构建一个成绩记录链,随着平台的运作,在有关部门授权下可以新增联盟链或在现有联盟链中新增高校成员。一个高校学生成绩记录系统的原型如图2 如示。

图下方的虚线框代表联盟链网络Net,其中通道Mychannel 是由若干个高校组成的一个成绩记录链,在Fabric 中通道就是一条链,用于记录这些高校的学生成绩记录。通道内的节点用P1,P2,…,Pn 表示,节点Orderer 1…Orderer m 表示m 个排序节点,功能是排序交易并参与共识和区块打包。图中仅显示了一条链(通道),在整个网络(Net)中可以构建多个这样的成绩记录链。我们在原型系统的链上设计了智能合约,其中包括读记录方法,创建记录方法、审计多条记录方法,同时在智能合约中依据访问者的身份属性进行链上数据的细粒度的访问控制,在第4 部分有详细阐述。中间方框表示由智能合约(也称为通道的链码)向外界暴露的访问接口,例如写入成绩记录、查询、审计查询等。图的上方框内表示高校学生成绩系统的应用程序(Application),此处用三种用户角色来表示应用层的服务,其一是学生用户或授权的用人单位,代表成绩记录查询应用,产生成绩证明文件;其二是学校授权的教务人员,代表成绩上链应用;其三是教育主管部门,代表链上数据审计或流程检查的应用。

图2 高校成绩记录原型系统组成

2.2 成绩记录的链上结构

学生成绩记录提交到系统后,就形成一条交易,其内容包括学生的基本信息和学生的成绩列表。当交易经过排序被打包到区块中并记录到链上,就形成了学生成绩链。每个区块的头部包含前一区块头的Hash值,以及当前区块所有交易的Hash 值,这种机制保证了进入区块中的交易是不能被更改或删除的,达到防篡改的目的。

学生成绩信息提交到系统,除了形成区块上链,同时会写入链上的状态数据库World State 中,它反映了每笔交易的结果。在状态数据库中记录以JSON 结构存储,每名学生分配一个唯一键值,采用:学校编号+姓名+学号的Hash 值作为键(为了测试方便,当前用学生编号代替),其对应的值就是学生基本信息及成绩列表。当前我们实现的原型系统中学生基本信息包括学校名称,编号,学号,毕业类别,毕业时间以及注册时间;成绩列表是以[课程名称:分数]列表形式存储,不同学生的课程列表长度和课程名可以不同。

成绩记录的每次改变,都会更新这个状态数据库的内容,它反映了最新的交易执行的结果,而交易的历史记录则记录在区块链(ledger)中,这个历史记录不可更改,用于事后追溯。

2.3 成绩记录链的初步测试

为了测试方便,先注册了一个管理员身份,用它又注册了一个成员用户身份,通过命令行方式进行了成绩记录上链的测试,和成绩记录查询功能的测试,图3是上链后,查看链上CouchDB 数据库的结果,可以看到上链的学生基本信息及成绩记录。图4 是在命令行下运行查询应用的结果,未来可以将这个结果用Web 应用封装下。

图3 学生成绩记录上链后在CouchDB中查看结果

图4 通过查询脚本查询特定学生的成绩记录

3 数据的访问控制及隐私保护

虽然基于Fabric 构建可信系统,具有防篡改、可追溯的特性,但作为一个可用的高校学生成绩记录系统还需要解决链上交易数据的细粒度访问控制、学生敏感信息的保护以及授权访问等问题。Fabric 中可配置的角色种类较简单,通过配置并不能解决上述用户链上数据的安全访问问题,我们通过多链、身份属性及智能合约的设计完成上述系统需求。

3.1 链上数据的访问控制

Fabric 系统是一个多链系统,通过配置文件及相应的访问控制组件MSP,可以设置系统链的访问权限。而对于用户链上数据的访问权限主要是依赖智能合约或具体应用程序进行控制,对于智能合约的执行、以及读、写账本的权限的设定,需要开发者来设计。我们采用的是一种基于用户身份属性的访问控制方式。

CA 系统是设置访问控制的基础,每个用户(Client)在CA 系统中都注册取得了身份证书。在身份证书中可以设置它的角色、所属组织、以及其名称等,也可以加入更为详细的分类,例如某个部门,赋予某种特定属性等,这是下一步进行定制化访问控制的关键。在高校学生成绩记录系统中用户首先分为三类,一类是高校被授权的教务工作人员,他们是这个系统中可以记账的用户,所以在注册此类用户时设定其属性“Writable”为“True”,意味着他可以提交交易,写入账本;而其他用户的“Writable”设置为“False”;注册普通用户时设定其属性“Readable”为“True”,意味着他只可一次读取一个记录的值;而对于教育主管部门的用户将其属性“Manager”设定为“True”;意味着他可以一次读出多个记录的值,方便其对记录列表进行审计或检查。

实现访问控制的第一步,就是注册用户身份时将上述属性由联盟管理员进行设定,这些用户的身份证书中就含有了这些属性。第二步,在编写智能合约中利用用户身份证书中的属性进行判断和控制,智能合约中关键触发函数invoke 有一个参数:stub shim.ChaincodeStubInterface,它提供了取得用户证书字节码方法stub.GetCreator,然后将它解析成certification 对象,就可以获取证书中定义的相关属性值了,利用这个值进行判断,来区分不同用户的访问权限,以决定是否向具体的账本访问函数(读或写)分发当前这个请求。

将这个访问控制代码放在智能合约中的好处是安全、可信。身份证书是由CA 产生的,其中的信息是不能被篡改的,而访问控制的判断逻辑是写在智能合约中的,智能合约是安装在区块链上的,对其每次的修改都会被自动记录在系统链上(可追溯)。这样的机制保证了这个环节的可信。但从软件实现角度上来讲,当前这种方法不算是一个好的访问控制方法,因为它的规则写在了智能合约(代码)中,灵活性不够,下一步可以研究使用系统链码来配置用户链码的访问控制的方法。

3.2 敏感信息的保护与授权

联盟链允许联盟内部授权用户访问链上数据,但对于敏感信息可能是不适合的,如果系统需要向外提供信息服务,隐私保护问题就更加突显。

存储在区块链上的学生基本信息及成绩信息属于学生的隐私信息,如果链上的成绩信息不经过加密处理,是可以被区块链中其他用户访问的。为了构建一个可信安全的系统,我们采用对称密钥对上链的学生信息进行加密,其中密钥的保存是一个必须解决的问题。我们在同一个系统中创建另一条密钥链,它独立于成绩记录链,学生成绩上链时为每个学生随机产生一个密码串,并使用学生的公钥进行加密保存在本区块链网络中的密钥链中,只有用户的私钥才能访问密钥。这意味着只有学生本人才能读取该加密密钥。教务人员只有一次性写入的权限,当学生需要出具成绩证明时,可以在系统注册并验明身份,得到自己的密码,用它对加密的成绩记录进行解密,就可以得到成绩报告了。而其他用户查询得到的是加密后的信息,隐私信息得以保护。

对于用人单位或其他需要查看学生成绩记录的人员,他们需要取得学生的授权,即学生给出他们的基本信息(组成成绩记录的key)和解密的密钥,他们就可以从该系统中访问得到解密后的成绩报告了。

3.3 成绩记录链的审计

对于高校主管部门,可以定时或在发生投诉或举报时进行审查或审计,主要对以下几个方面进行审查:①通过管理员用户身份对系统链上数据进行检查,用户链码是否被修改过。如果修改过,可以查看修改时间、用户帐号及备案信息,判断是否符合相关审核程序与授权许可。②对特定高校随机抽查学生的成绩记录,看在成绩记录链上是否存在多次改写记录。可以通过相关权限查看账本上的历史记录。③定时在成绩记录链上验证指定区块区间的相邻区块Hash 值是否吻合。即检查当前区块的pre-hash 字段值是否为上一区块的头的hash 值,以及当前区块头的Datahash 是否为本区块所有交易的hash 值等。④读取交易上链的背书策略,审查其是否符合相关规定。

构建一个可信的系统和服务是一件困难的事,区块链技术为我们提供了一些核心支持,例如防篡改、可追溯性等。但在许多应用场景中有不同的要求,例如要求有安全性的保障、隐私保护及高可用性、方便性等,许多要求是相互矛盾的,如何在现有的区块链技术基础上构建出符合现实可用的应用系统,仍是一个挑战。在高校学生成绩记录链的构建过程中,主要解决了智能合约细粒度访问控制、链上敏感信息的保护及授权访问等问题。当前已完成一个原型系统的构建,可以完成成绩上链、查询等功能。下一步就是将加密及授权访问进一步完善并结合前端系统的开发,形成一个可信的、可用的高校学生成绩记录系统。

4 结语

构建一个可信的系统和服务是一件困难的事,区块链技术为我们提供了一些核心支持,例如防篡改、可追溯性等。但在许多应用场景中有不同的要求,例如要求有安全性的保障、隐私保护及高可用性、方便性等,许多要求是相互矛盾的,如何在现有的区块链技术基础上构建出符合现实可用的应用系统,仍是一个挑战。在高校学生成绩记录链的构建过程中,主要解决了智能合约细粒度访问控制、链上敏感信息的保护及授权访问等问题。当前已完成一个原型系统的构建,可以完成成绩上链、查询等功能。下一步就是将加密及授权访问进一步完善并结合前端系统的开发,形成一个可信的、可用的高校学生成绩记录系统。

猜你喜欢
访问控制账本区块
一种跨策略域的林业资源访问控制模型设计
《红楼梦》的数字化述评——兼及区块链的启示
数说:重庆70年“账本”展示
区块链助跑财资管理
丢失的红色账本
大树爷爷的账本
丢失的红色账本
一场区块链引发的全民狂欢
云的访问控制研究
区块链助力企业创新