APP下载

基于区块链的投票系统设计*

2018-07-26郄九玲

通信技术 2018年7期
关键词:链式应用层哈希

郄九玲,胡 浩

(南京邮电大学,江苏 南京 210003)

0 引 言

没有调查就没有发言权。投票调查在生活中扮演着重要角色。但是,现有的线上投票系统依然存在一些不容忽视的问题。比如,系统管理者可能会为了利益而恶意修改数据;系统可能遭受黑客的攻击。现有线上投票系统的公正性和安全性,完全依赖网站本身的安全和信誉度。而区块链具有去中心化、数据不可篡改、安全可信的特点,数据一旦存入区块链,就无法篡改。区块链是不可篡改、真实可信的数据库,因此区块链技术是保证投票系统公正性和安全性的最佳方案。

1 认识区块链

狭义来讲,区块链[1]是一种按照时间顺序将数据区块以链式结构组合成特定数据结构,并以密码学方式保证不可篡改和不可伪造的去中心化共享账本,能够安全存储有先后关系的、能在系统内验证的数据。

广义上的区块链[2]是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码(智能合约)来编程和操作数据的,一种全新的去中心化基础架构与分布式计算范式。

区块链是不可篡改和不可伪造的去中心化共享账本,具有去中心化、去信任化、安全可信等特点[3]。

(1)去中心化。区块链网络中的所有节点共同提供服务,参与网络中数据的验证、记账、存储、维护和传输等过程。网络中不存在拥有特殊权利的中心节点,从而形成去中心化的分布式系统。

(2)去信任化。区块链网络中的信任由数学算法来背书。区块链网络中的节点互相交换数据时,不需要了解对方的可信度,通过数学算法建立信任。网络中的数据可验证,各节点欺骗不了其他节点。区块链系统运行公开透明,数据可查[4]。

(3)安全可信。区块链通过数字签名技术、基于时间戳的链式结构和分布式系统共识算法聚合的强大算力,保证区块链数据的安全可信,不可篡改。区块链以分布式存储数据,每个节点都存储网络中生成的数据,相当于数据有了很多备份。P2P网络中的各个节点存储着完全相同的数据,除非攻击者控制P2P网络中超过一定比例(比特币为51%,数学证明不可行)的节点[5],否则任何单个节点恶意修改数据,都不会影响整个网络数据的正确性。

2 系统需求分析和架构设计

2.1 需求分析

2.1.1 研究目标

为了满足个人、企业、机构及政府的意见调研需求,需设计一个公平、公正、透明的投票系统。投票系统有如下三个分指标:

(1)确保投票数据不能被篡改;

(2)投票数据可追溯、可验证;

(3)匿名投票,保证投票人隐私。

2.1.2 系统功能分析

系统用户可以在主页浏览自己感兴趣的投票调查、参与投票,并在投票记录页面查看投票记录。如果用户有调查的需求,也可以发起一个投票调查,设置投票选项。系统具有注册登录、投票、新建投票、查询票数和查询记录等功能。系统设计要紧密结合区块链的特点,充分发挥区块链的优势,构建去中心化、数据不可篡改的投票系统[6]。

2.2 系统架构设计

为了满足系统公平、工作和透明的需求,设计采用区块链技术实现投票系统。区块链是不可篡改、真实可信的数据库,本次设计将区块链数据(投票数据)存入区块链中,普通数据(如用户名,密码等)存入本地数据库。系统架构如图1所示,主要包括应用层和区块链层。应用层采用B/S架构,Web应用层主要实现系统功能(注册登录、投票等)。区块链层可细分为网络层和存储层,其将投票数据发送到区块链网络中,并实现数据在区块链中的分布式存取。

图1 系统架构

Web应用层实现系统功能,如注册登录、投票、新建投票及查询票数等功能。普通数据(如用户名,密码等)直接存入数据库,区块链数据(投票记录)存入区块链。当访问普通数据时,需要进行数据库设计,编写sql语句。当访问区块链数据时,需要调用底层区块链接口,实现数据在区块链中的存取。系统中区块链数据存储流程,如图2所示。

应用层获取区块链数据后,用私钥对数据进行签名,将数据封装好后发送到区块链网络中。区块链网络中的节点校验数据有效性,将有效数据存入数据池中,丢弃无效数据。节点的数据池满了,通过某种共识机制决定由哪个节点取得记账权,即按照一定的结构(如加入时间戳)将这些有效数据打包成一个区块,并以链式结构存储到区块链中。取得记账权的节点向全网广播本区块,其他节点验证区块的有效性。若有效,则将区块存到区块链中;否则,丢弃[7]。

图2 区块链数据存储流程

区块链网络层。网络层实现网络的构建,并加以验证机制和共识机制,保证数据的安全性和一致性。区块链节点网络是一个P2P网络。区块链网络中的所有节点共同参与网络中数据的验证、记账、存储、维护和传输等过程。

区块链存储层。存储层将数据以首尾相连、基于时间戳的链式数据结构存储。区块一旦经过节点验证保存到区块链中,将无法改动。通过“区块十链式结构”,区块链可以及时发现任一数据的篡改。区块链提供了一个有时序、可查的记录,可以看做是不可篡改、真实可信的数据库。

3 区块链层设计

为了达到区块链去中心化、数据不可篡改、安全可信的要求,区块链层将利用P2P网络构建分布式数据库,运用数字签名算法及加密技术保证数据的不可篡改、共识算法来保证网络中数据的一致性,并运用时间戳技术将数据区块以首尾相连的链式结构保存。如图3所示,区块链层分为网络层和存储层。网络层实现网络的构建,并加以验证机制和共识机制保证数据的安全性和一致性,设计重点是构建P2P网络,实现验证机制和共识机制。存储层封装数据区块,将数据区块以首尾相连的链式保存,设计重点是运用时间戳、哈希函数、Merkle树和非对称加密等技术,构建数据区块结构,实现区块的链式存储。

图3 区块链层

3.1 区块链网络层设计

3.1.1 节点P2P网络构建

P2P网络具有去中心化、可扩展性、分散性和健壮性等优点,可以将参与数据校验和记账的节点组织起来,使系统可以在去中心化的情况下稳定运行。P2P网络中不存在中心节点,节点之间通过扁平式拓扑结构互联互通。每个节点具有相同的功能,提供网络服务。每个节点具有发现新节点、同步区块、应用层网络路由、验证区块数据和传播区块数据等功能。

构建P2P网络是区块链层的初始化过程。如果一个新节点首次加入P2P网络,需要网络中其他节点的IP地址。DNS seed可以提供P2P网络上节点IP地址的DNS服务器,有助于发现节点。因此,采用DNS seed方式加入P2P网络,采用TCP协议,使用8333端口。

加入过程如下:

(1)连接种子节点;

(2)接收节点IP地址列表;

(3)连接列表中的节点;

(4)当建立一个或多个连接后,节点向其相邻节点发送自身IP地址。相邻节点将转发IP地址,使更多节点接收IP地址,保证连接更稳定。

3.1.2 数据验证机制

验证机制保证数据的不可篡改。P2P网络中的每个节点不断接收数据,节点接收数据后会在第一时间验证数据的有效性。节点会验证数据结构、数字签名等,只有满足所有条件的数据才有效。如果数据无效,则丢弃。如果数据有效,则将有效数据数存入数据池。获得记账权的节点会向全网广播区块,其他节点会验证区块的有效性,包括区块头中的随机数、时间戳和区块体中的数据。若区块有效,则存入区块链;否则,丢弃。

本次设计采用椭圆曲线数字签名算法(ECDSA),私钥是d,公钥是(E,P,n,Q)。

生成签名过程如下:

(1)选择一个随机整数k,介于[1,n-1];

(2) 计 算 kp=(x1,y2)以 及 r=x1mod n。 如 果r=0,则跳到步骤(1);否则,执行步骤(3)。

(3)计算 s=k-1{h(m)+dr}mod n(其中 h(·)是哈希算法)。若s=0,则跳到步骤(1);否则,执行步骤(4);

(4)签名信息m是(r,s)。

签名验证过程如下:

(1)获取公钥(E,P,n,Q);

(2)验证r和s是否为整数,且介于区间[1,n-1];

(3)计算w=s-1mod n以及h(m);

(4)计算u1=h(m)wmodn以及u2=rwmodn;

(5)计算u1P+u2Q=(x0,y0)以及v=x0modn;

(6)当且仅当v=r,签名验证正确。

3.1.3 共识机制

共识机制为区块链中数据的一致性提供保障,是区块链能够维持运行的关键所在。区块链中的共识机制具体表现在,当节点收集到一定数量的有效数据时,有多个节点将数据打包成区块,在节点可能被攻击的情况下,系统如何对记账权归属哪个节点达成共识,使区块链能够稳定可靠地运行。性能良好的共识算法能够选择合适的节点,该节点将自己打包好的区块数据广播到全网,经其他节点验证有效性后,该区块方可存入区块链中。

工作量证明机制(Proof of work,Pow)算法简单,容易实现,容错性好(允许全网50%节点被攻击)。本次设计采用工作量证明机制,在节点将数据打包成区块前,需要找出一个随机数,使区块头各元素的哈希值不大于目标哈希值(由特定的算法产生目标哈希),提高打包区块的门槛。第一个找到满足条件随机数的节点将获得本区块的记账权并向全网广播,经大部分节点验证有效性后存入区块链。计算能力越强的节点,最先找到满足条件随机数的概率越大。

3.2 区块链存储层设计

3.2.1 数据区块

为了实现数据基于时间戳的链式结构存储,并能够快速验证数据的有效性,数据区块采用如图4所示的结构,每个数据区块分为区块头(Header)和区块体(Body)。区块头中包含版本号(Version)、前一区块哈希值(Prey-block)、时间戳(Timestamp)、随机数(Nonce)、本区块目标哈希值(Bits)和Merkle根(Merkle-root)。区块创建过程中生成的有效数据和对应数量则保存在区块体中。有效数据通过Merkle树的哈希产生唯一的Merkles根,存入区块头。

图4 数据区块采用的结构

3.2.2 链式结构

为了能够提供区块链数据的追溯和验证功能,可以将区块以链式结构存储。当前区块包含前一区块的哈希值,如果节点不知道前一个区块的哈希值,就能生成新的区块。通过区块哈希值将区块链中的所有数据区块串成一条链,区块链中始终保存着最长的一条链(主链),即从创世块到最新生成的区块。当新的区块存入区块链中,将会链接在主链后面。

区块链将数据区块以链式结构存储在区块链上,数据区块中带有时间戳,因此增加了数据的时间维度,可以方便地追溯和验证数据。通过前一区块哈希值,可以定位前一区块并验证前一区块是否修改。通过“区块十链式结构”,区块链可以及时发现任一数据的篡改。区块链提供了一个有时序、可查的记录,可以看做是不可篡改、真实可信的数据库。

4 Web应用层设计

应用层采用B/S架构,根据系统功能分析,设计完成注册登录模块、主页模块、投票模块、新建投票模块、投票结果查询模块和投票历史查询模块。Web应用层将采用Spring+Spring Boot+Mybits的框架开发,数据库为mysql。

应用层采用MVC(Model View Controller)设计模式,分为视图层、业务逻辑层和数据访问层,如图5所示。为了实现投票结果不可篡改的特点,投票数据是存储在区块链中的。每一次投票都会生成一个投票数据,如图6所示。投票数据主要包括版本号、输入、输出和时间。输入中有投票者的公钥和私钥生成的数字签名等信息,输出中有选项对应的区块链地址。

图5 应用层的MVC设计模式

图6 投票数据

5 结 语

区块链具有去中心化、数据不可篡改、安全可信的特点,数据一旦存入区块链,就无法篡改。在分析系统需求和数据存储特点的基础上,将系统分为应用层和区块链层,重点设计了区块链网络层中P2P网络的组网方式、数据区块的验证机制、保证数据一致性的共识机制,并运用时间戳、Merkle树、非对称加密等技术来设计数据区块,然后利用链式结构存储数据区块。在此基础上将区块链技术应用于投票场景,实现了一个数据安全的投票系统,保证了其投票结果的公平、公正和可信。

猜你喜欢

链式应用层哈希
学步期焦虑影响5岁幼儿创造力:一般认知和掌握动机的链式中介作用*
基于特征选择的局部敏感哈希位选择算法
家庭—医院链式管理在婴幼儿湿疹患儿中的应用价值
哈希值处理 功能全面更易用
文件哈希值处理一条龙
线性表成组链式存储结构研究
基于分级保护的OA系统应用层访问控制研究
物联网技术在信息机房制冷系统中的应用
巧用哈希数值传递文件
上海全链式布局电影产业显成效