刘 越,卢清华,张卫山
(中国石油大学(华东) 计算机科学与技术学院,青岛 266580)
在高速发展的电子信息化社会中,微认证为个人或机构提供了一种正式与非正式学习及成果的证明方式.例如,学生在经过短期特定课程学习之后,学校会颁发微认证.学生收到微认证后,可向他人出示该微认证,以证明自己拥有特定知识或能力.由于微认证中含有关于个人或机构身份证明的信息,因此常常被应用于身份管理领域当中.但是由于中心化的系统架构,当前的微认证信息全部集中于微认证管理服务提供者(如学校)的数据库中,而微认证对象并不能完全确保微认证信息的安全,以及知晓其微认证信息具体的使用情况;同时,微认证的验证者也难以确信微认证的有效性与权威性,无法保证其没有被篡改.此外,各个微认证系统的不一致标准在微认证的验证过程中也可能会降低验证效率.因此,微认证的验证周期可能长达数天或数周.
随着区块链与智能合约技术的诞生与发展,许多企业和政府部门目前正在探索区块链在各个领域的应用,例如:供应链、智慧医疗、与能源供应等[1,2],而身份管理也一向被认为是区块链技术的重要发展应用领域[3].区块链提供了一种不可篡改的共享数据存储结构,只允许添加事务信息,但是无法对区块链上已存在的事务信息进行更新或删除,以此来防止对数据的篡改.目前,对于如何应用区块链搭建微认证系统,仍缺乏一个系统、整体的观念.本研究旨在将区块链技术的分布式结构引入现有的微认证系统中,以区块链生态系统为基础,利用区块链的透明性与不可篡改性,将微认证信息存于链上,提高微认证的验证效率与数据安全.
微认证是教育成就的电子化表示,类似于技能培训所获得的徽章和奖牌,微认证代表个人完成了颁发认证的组织所要求的培训或课程.因此,微认证可以充当一种工具,向同事、雇主或者潜在雇主展示对特定知识的掌握.
传统微认证生命周期如图1所示.当个人或机构完成了微认证颁发机构所指定的学习任务后,根据课程注册及成绩信息,微认证机构生成并向完成目标的学员发布微认证.获得微认证后,个人可在需要时(如应聘过程中)展示微认证,而被展示者通过验证微认证的真伪,以作为展示者的专业知识或能力的证明.
图1 微认证生命周期示意图
目前,微认证在国内仍处于初期发展阶段,如对微认证的基本框架与认证流程进行探讨[4];对基于微认证的教师信息技术应用能力实践路径进行设计[5]等.而国外已经将微认证模式应用在许多教育机构当中,研究者也对微认证的实践模式进行了一定的总结[6].然而,目前的微认证系统都采用了中心化的架构,将数据存储于传统数据库中,容易受到攻击形成单点故障,造成微认证欺诈的后果(即微认证数据被篡改,验证者无法确信微认证真伪性).因此,本研究将在现有的微认证系统架构中引入去中心化的区块链技术,以提高系统安全性.
区块链技术概念源自中本聪所提出的数字货币“比特币”[7],作为其底层支撑技术,区块链提供了分布式账本结构与智能合约计算平台[8].区块链结构如图2所示,每一个区块中包含了上一个区块的哈希值,从而连接形成一个链表.同时,每一个区块也存储着事务,每项事务都代表着区块链上数据的变化.区块链网络中每一个参与者都会保存有一份完整的区块链副本,因此,攻击、篡改已有的事务需要庞大的计算能力,几乎不可能发生.区块链中的共识机制决定了其不需要第三方参与者的介入,参与者对数据状态的改变达到共识,以建立信任关系.
图2 区块链结构示意图
智能合约是部署、发布、运行在区块链上的程序,为其提供了强大的计算能力[9].智能合约中可以定义触发器、条件等业务逻辑,以支持复杂的事务处理[10].目前以太坊虚拟机环境下的区块链平台支持使用一种图灵完全的编程语言Solidity,来编写智能合约.
当前全球有许多企业、机构都在研究基于区块链的应用程序.微软、IBM、亚马逊等公司将云服务与区块链结合起来,向用户提供方便快捷的私有区块链搭建服务.在学术研究中,有针对以区块链替代传统中心化数据库的利弊权衡分析[11],将设计模式应用到智能合约开发中[12-14],还有将区块链引进各个行业系统中的初步试探[15-17].本研究将区块链引入微认证系统的构建中,以解决当前微认证系统依靠中心化管理模式的弊端,提高验证的安全性与可靠性.
本研究将提出一个基于区块链的微认证系统架构,架构中包含了可重用的微认证相关服务.目标架构的需求如下:
(1)微认证提供者在日常工作中可记录微认证对象的信息;
(2)微认证提供者根据记录信息生成微证明;
(3)向微认证验证者提供便捷、有效的微证明验证方式;
(4)系统架构应保证数据隐私性、完整性;
(5)确保系统底层架构的可用性.
如图3所示,系统架构采用3 层结构:用户界面层、服务层、与基础设施层.其中,服务层包括:部署服务、账户管理服务、数据管理服务、与微认证管理服务;基础设施层包括:传统数据库和区块链网络(及运行在区块链上的智能合约).系统的目标用户包括:微认证提供者(如,学校)、微认证对象(如,学生)、与微认证验证者.
图3 基于区块链的微认证系统架构示意图
2.2.1 服务层设计
部署服务包含了区块链部署与智能合约部署.本研究中所采用的区块链平台为以太坊,用户可通过输入参数(如,区块生成难度,个人IP 地址等)自定义私有或联盟区块链网络进行部署.当区块链部署完毕后,用户即可以监控、查看区块链运行情况,并部署所开发的智能合约.
账户管理服务包括账户注册服务、密钥生成服务、与密钥分割/重塑服务.在本研究中,区块链上的账户取代了传统数据库中所记录的账户密码.用户可通过账户注册服务,设置密码,由底层区块链生成相对应的账户.同时,用户可选择生成非对称密钥,以便于对数据进行加解密操作.所生成的公钥将存储于智能合约中,与用户的区块链账户对应,便于其他用户进行查询.通过密钥分割与重塑服务,用户可将私钥(或密码)进行分割,在丢失、遗忘密钥或密码后,通过分割碎片进行重塑,便能够重新控制相关的加解密公钥或者区块链账户.
通过数据管理服务,微认证提供者可在日常工作中管理微认证对象的信息(如,学生的课程成绩),并同时将其存储在链下数据库与链上智能合约中.
微认证管理服务包括微认证生成服务、微认证验证服务、与微认证撤销服务.微认证提供者根据数据库中所记录的数据,生成JSON 格式的电子微认证.微认证中包括:提供者与认证对象的区块链账号、微认证识别号、生成日期、与证明内容.在微认证验证阶段,验证者可使用微认证验证服务以校验一个微认证的真伪性.通过系统提供的在线验证通道,验证者可输入所收到的微认证,系统后台将自动识别微认证识别号与提供者区块链账号以进行验证,并返回验证结果.若微认证对象不再需要此电子证明,或提供者发现微认证对象不符合证明内容,提供者可撤销该微认证,则后续不再支持验证者对该微认证进行验证.需要注意,微认证可通过各种方式(如邮件)在3 种用户之间进行传输,不包含在本研究范围内.
2.2.2 传统数据库设计
本研究采用传统数据库存储3 类数据.第1 类数据是所部署的智能合约信息,在进行调用时需要合约地址与二进制接口,因此将此类智能合约相关信息存储以便于查看和管理.第2 类数据是智能合约模板,本研究将设计、总结适用于智能合约的设计模式,并应用在微认证系统中,将其开发为合约模板,把源码存储于数据库中,方便用户在部署智能合约时能够进行选择与应用.第3 类数据是微认证对象数据,将微认证对象学习或考核过程中的原始数据记录下来存储于数据库中,用于后续生成微认证.
2.2.3 区块链与智能合约设计
区块链为微认证系统提供了底层去中心化基础设施与智能合约运行环境,微认证提供者与对象通过区块链账户在系统中进行业务流程交互.本研究中,区块链上主要应部署4 类智能合约.
例2: (非选择题第32题)果蝇体细胞有4对染色体,其中2、 3、 4号为常染色体,抑制控制长翅/残翅性状的基因位于2号染色体上,控制灰体/黑檀体性状的基因位于3号染色体上,某小组用一只无眼灰体长翅雌果蝇与一只有眼灰体长翅雄果蝇杂交,杂交子代的表现型及其比例如下:
(1)公钥注册表合约,用户可将区块链账户与公钥作为键值对上传至注册表中,在微认证验证过程中,系统即通过微认证提供者的区块链账户查询到对应公钥进行验证序列的解密.
(2)微认证提供者注册表,在微认证系统中,将能够开具微认证的工作人员的区块链账户存储在注册表中,任意用户可输入一个区块链账户以查询其是否为有效工作人员.只有有效工作人员才能向微认证对象生成能够进行有效验证的微认证.
(3)微认证对象数据合约,用于记录微认证对象的数据(加密或哈希形式).微认证对象数据合约继承了访问控制合约模板以应用相关机制,规定只有该合约数据所覆盖的微认证对象可查询数据以进行数据完整性校验.
(4)微认证注册表,用于存储微认证验证信息.微认证注册表也应用了访问控制机制,即只有微认证提供者注册表中的区块链账户可以上传微认证验证信息,以防止认证作假欺诈.
本研究中涉及了区块链部署、区块链账户管理、链上链下数据存储、智能合约设计、与加解密技术方面的知识,并将在本节中进行进一步的分析与探讨.
在进行区块链部署时,系统后台脚本通过用户所输入的参数实现自动化部署与配置区块链客户端的任务.智能合约的部署支持用户选择上传智能合约文件,系统后台将自动编译并部署智能合约.部署成功后,该智能合约的链上地址与应用系统二进制接口将存储于数据库中,以方便调用.
在链上智能合约设计的过程中,确定合约中方法的权限控制是一个难点.在智能合约进行编译与部署前,以存储在数据库中的访问控制合约模板作为父类,使目标合约继承该父类合约,以获得访问控制机制.图4展示了访问控制合约主要代码.合约所有者默认为微认证提供者区块链账号,在合约部署时被自动记录;同时,部署合约时即可定义能够访问合约的区块链账号[14].合约所有者能够更换访问控制的区块链账号以提高可扩展性,如只有特定微认证对象能够访问存储了自身数据的合约进行数据完整性校验.“modifier”部分用于检测当前访问合约的是否为所定义的区块链账户,若是,“_;”部分则为运行子类合约目标访问控制的代码.
图4 访问控制合约主要代码
由于目前区块链平台中并不支持找回或更改密码操作,本研究出于去中心化的安全考量,系统架构中也不支持将账户与密码存储于数据库中.用户可通过分割与重塑区块链密码或加密密钥,决定分割数量与重塑的阈值,将所输入的密码/密钥分割成不同的部分,并自行选择保存方式.若用户忘记密码/密钥,则可输入大于或等于阈值数量的密码碎片,系统后台将通过所输入的碎片重塑出完整的密码/密钥[18].
由于链上数据的透明性与冗余性,链上链下数据需要进行差异化处理[19].本研究中采用将大型原始数据存储在数据库中,并将原始数据进行区分,每一部分通过加密,或者进行哈希计算,将密文或哈希值存储于链上.用户可通过对链上数据进行解密查看数据,或者将链下原始数据与链上哈希值进行对比,确保数据的完整性.
目标系统架构应向验证者提供快速、高效、可靠的微认证验证服务,避免过于繁复的验证手段.在本架构设计中,微认证生成时,相关验证信息将存储于链上智能合约中,包括:提供者与证明对象的区块链账号、微认证识别号、与微认证验证序列.微认证验证序列是通过将微认证进行哈希计算后,再由提供者私钥进行加密生成的.微认证的验证过程如图5所示,系统通过智能合约获取提供者公钥与链上微认证验证序列.将微认证验证序列进行解密后所得的哈希值,与用户所输入的微认证进行哈希计算后相对比,进行双重验证,已确保该微认证的有效性、权威性、与完整性.
图5 微认证验证流程示意图
与传统微认证系统架构设计相比,本文方法主要在3 个方面进行了设计创新.
(1)区块链账户取代传统账户功能
传统微认证系统将用户的账户与密码存储于数据库中,在登录等操作时将当前用户身份与数据库内记录进行对比.本文方法以链上账户取代传统账户,系统不存储用户密钥或密码,避免了黑客攻击窃取用户账户资料的风险.同时,链上账户与智能合约可进行交互,实现合约内的权限管理机制.
(2)链上链下数据差异化处理
传统微认证系统架构只使用了数据库进行数据存储,易遭受攻击,形成“单点故障”.本文方法将原始数据存于链下数据库,哈希或加密后的数据存于链上,通过链上链下数据对比,确保了数据的一致性.同时,区块链的透明性与不可篡改性能够对微认证提供者的操作进行记录并回溯,对系统内部人员的行为进行约束.
(3)多节点分布式架构
底层区块链生态为本文方法提供了多节点的分布式架构.相比于传统微认证系统部署运行在单一服务器上,本文方法中涉及的所有目标用户均可选择在本地部署区块链节点,提高了系统的可扩展性.
本研究中基于区块链的微认证系统原型使用JavaScript 语言进行开发,通过Tomcat 进行部署.为实现区块链部署服务,所需要的部署文件通过安全外壳协议 (SSH)进行传输,包括部署脚本文件与创始区块文件.系统原型采用MySQL 作为传统数据库,以太坊作为底层区块链网络.链上智能合约通过Solidity 语言进行开发,并由Web3 应用程序接口进行部署.
本研究将系统原型部署在阿里云服务器上(2 vCPUs,8 GB RAM,20 GB Disk)进行性能测试.实验第一部分为分别运行微认证生成服务与验证服务各一个小时,记录了运行时间内微认证服务吞吐量的变化.实验第二部分为分别运行1000 次微认证生成服务与验证服务,记录了运行时间总和.
图6展示了微认证生成服务与验证服务的吞吐量变化.在实验过程中,微认证生成服务吞吐量稳定地保持在10 tps (每秒事务数)左右,而微认证验证服务吞吐量有些许波动,大部分时间保持在200 tps 左右,最高不超过250 tps.图7与图8分别展示了运行1000 次微认证生成服务与微认证验证服务所需总时间.生成1000 个微认证超过19 000 s,包含了生成时间以及将相关验证信息上传至区块链的时间.
由于区块链中每个区块所能包含的事务数量有限,同时,以太坊中的“工作量证明”共识机制(POW)[20]导致了其存在区块间隔(将近12 s 生成一个区块),因此上传微认证信息需要耗费一定时间.相较之下,微认证的验证则有更快的速度,验证1000 个微认证共需不到100 s.虽然微认证验证服务包括从智能合约中获取信息,但由于其不改变链上数据的状态,此类查询操作并不需要通过共识机制被包含进区块中,能够运行得更加有效率.因此,微认证验证服务的吞吐量比生成服务高出许多.
图6 微认证服务吞吐量变化
图7 微认证生成服务运行时间
图8 微认证验证服务运行时间
实验数据表明,基于区块链的微认证系统基本达到了预期性能.为进一步提高性能表现和可伸缩性,在后续研究中将使用其他区块链平台(如,Parity、Hyperledger Fabric 等)进行系统开发.同时,未来研究也将尝试汇集多个微认证一并哈希打包在一条事务内进行上传[21],通过减少链上事务数量的方法以达到更高效的性能表现.
本文系统架构拟达到的隐私安全保护为:系统架构应保证数据隐私性、完整性;同时系统底层架构的可用性应得到保障.
通过将区块链引入微认证系统,改善了现有的中心化架构,同时提高了微认证的安全性.微认证对象可自主选择目标微认证验证者(如毕业生应聘时可将微认证附于简历中),即未授权者不能够获取证明,从而防止微认证对象身份信息的泄露.同时,若微认证有被不恰当使用的现象发生,微认证对象可向提供者提出申请,撤销该证明并进行重新生成与颁发.
本研究中通过将原始数据存储于链下数据库,加密或哈希数据存储于链上的方式,微认证验证过程中也使用了数据解密与哈希对比两个步骤,提供了对数据一致性的保护.区块链网络需要运行在多个主机节点之间,每个节点都存有完整的区块副本.因此,若出现攻击者对其中的节点进行攻击,试图篡改数据,系统也能够很快地通过其余节点进行恢复.同时,区块链将记录微认证对象数据与微认证验证信息的上传,因此,任何违规的行为(如,制作虚假微认证)都可以追溯到具体的区块链账户,并进行相应处罚.
本文介绍了一种基于区块链的微认证系统架构,为现有的微认证系统提供了一种改进方案,并分析了引入区块链技术后系统的性能与安全性.试验表明,由于区块链自身性能限制,上传数据至区块链的过程需要耗费一定时间,但验证微认证的过程具有很高的效率.同时,微认证对象能够更好地掌握微认证的使用情况,通过区块链数据的透明性与不可篡改性,微认证欺诈现象也能够得到有效缓解.本文系统架构只是初步研究,还有很大的改进空间,下一步的工作是优化系统架构,并进一步研究基于区块链的自主身份管理领域.