具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
首先对于本说明书实施例中所涉及的块链式账本进行说明。在中心化的数据库服务提供方,块链式的账本通过如下方式生成,如图1所示,图1为本说明书实施例所提供的一种生成块链式账本的流程示意图,包括:
S101,接收待存储的数据记录,确定各数据记录的哈希值。
如前所述,此处的待存储的数据记录,可以是客户端个人用户的各种消费记录,也可以是应用服务器基于用户的指令,在执行业务逻辑时产生的业务结果、中间状态以及操作记录等等。具体的业务场景可以包括消费记录、审计日志、供应链条、政府监管记录、医疗记录、法院卷宗等等。
S103,当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块。
所述预设的成块条件包括:待存储的数据记录数量达到数量阈值,例如,每接收到一千条数据记录时,生成一个新数据块,将一千条数据记录写入块中;或者,距离上一次成块时刻的时间间隔达到时间阈值,例如,每隔5分钟,生成一个新数据块,将在这5分钟内接收到的数据记录写入块中。
此处的N指的是数据块的序号,换言之,在本说明书实施例中,数据块是以块链的形式,基于成块时间的顺序先后排列,具有很强的时序特征。其中,数据块的块高基于成块时间的先后顺序单调递增。块高可以是序号,此时第N个数据块的块高即为N;块高也可以其它方式生成。
当N=1时,即此时的数据块为为初始数据块。初始数据块的哈希值和块高基于预设方式给定。例如,初始数据块中不包含数据记录,哈希值则为任一给定的哈希值,块高blknum=0;又例如,初始数据块的生成触发条件与其它数据块的触发条件一致,但是初始数据块的哈希值由对初始数据块中的所有内容取哈希确定。
当N>1时,由于前一数据块的内容和哈希值已经确定,则此时,可以基于前一数据块(即第N-1个数据块)的哈希值生成当前数据块(第N个数据块)的哈希值,例如,一种可行的方式为,确定每一条将要写入第N个块中的数据记录的哈希值,按照在块中的排列顺序,生成一个默克尔树,将默克尔树的根哈希值和前一数据块的哈希值拼接在一起,再次采用哈希算法,生成当前块的哈希值。又例如,还可以按照块中数据记录的顺序进行拼接并取哈希得到整体数据记录的哈希值,拼接前一数据块的哈希值和整体数据记录的哈希值,并对拼接得到的字串进行哈希运算,生成数据块的哈希值。
用户在上传数据成功后,即可以得到对应的数据记录的哈希值以及所处的数据块的哈希值,并保存,并且可以基于该哈希值发起完整性验证。具体的验证方式包括重新计算数据记录自身的哈希值以及所处的数据块的哈希值,与本地所保存的进行对比。
上述方式生成的数据块,可以包括块头和块体两个部分。块体中可以用于存储数据记录的明文,或者数据记录的哈希值等等;块头中可以用于存储有关本数据块的元数据,例如,账本的版本号,前一数据块的哈希值,自身数据块中的数据记录所组成的默克尔树的根哈希值,自身数据块的哈希值,用于记录数据记录的被操作状态的状态数组等等。如图2所示,图2为本说明书实施例所提供的一种数据块的块头的示意图。
通过前述的数据块的生成方式,每一个数据块通过哈希值确定,数据块的哈希值由数据块中的数据记录的内容、顺序以及前一数据块的哈希值决定。用户可以随时基于数据块的哈希值发起完整性验证,对于数据块中任何内容(包括对于数据块中数据记录内容或者顺序的修改)的修改都会造成在验证时计算得到的数据块的哈希值和数据块生成时的哈希值不一致,而导致验证失败,从而实现了中心化下的不可篡改。
完整性验证包括对于一个数据块的完整性验证,即,根据数据块中数据记录的哈希值重新组成默克尔树,计算默克尔树的根哈希值,并且根据默克尔树的根哈希值与前一数据块的哈希值重新计算该数据块的哈希值,与事先保存的数据块的哈希值进行一致性对比。
完整性验证还可以包括对于若干连续数据块的完整性验证,即根据数据块的块头中所保存的默克尔树的根哈希值与前一数据块的哈希值重新计算该数据块的哈希值,并与事先保存的数据块的哈希值进行对比。
前述的块链式账本可以应用于多种场景中,例如,各政府部门/机构的项目管理、各级地方法院的案卷追踪等等。在实际应用中,一个账本可以有一个或者多个具有管理员权限的用户。例如,一个账本用于记录多个机构共同合作的项目信息,各机构分别可以是管理员。同时,处于实际需要,可能需要发生管理员权限移交的情形。例如,法院查封账本,各机构的管理员权限需要移交至法院方;或者,上级机构接管整个项目,账本的管理员权限需要向上移交,等等。
基于此,本说明书实施例提供一种在块链式账本中进行权限移交的方案。如图3所示,图3是本说明书实施例提供的一种块链式账本中的权限移交方法的流程示意图,应用于块链式账本存储数据的数据库服务端中,该流程具体包括如下步骤:
S301,接收账本中的任一当前管理员所发送的权限移交指令,所述指令中包含有当前管理员标识和目标管理员标识。
具体而言,任一当前管理员可以发起权限移交指令。例如,用户A发起如下权限移交指令transfer_admin(from{A,B,C},to{D,E}),其中,{A,B,C}即为包含当前管理员标识的集合,{D,E}即为包含有目标管理员标识的集合。换言之,在本说明书实施例中,指令中的当前管理员标识和目标管理员标识均可以是一个或者多个,从而可以发起一对一、一对多、多对一、或者多对多的权限转移。
S303,根据所述当前管理员标识确定对应的一个或者多个当前管理员,转发所述权限移交指令至所述对应的当前管理员。
数据库服务端可以根据目标管理员标识进行转发,续前例,即为将权限移交指令转发至A、B和C。
A、B和C在接收到权限移交指令后,首先需要对该指令进行确认,生成确认消息,并对确认消息之后进行数字签名。具体而言,即为使用自身的私钥对接确认消息进行加密,生成包含有确认消息和自身私钥数字签名的加密数据,并返回加密数据至数据库服务端。
S305,接收当前管理员所返回的对于所述权限移交指令的数字签名,并验证。
数据库服务端接收到任一当前管理员(例如,B)所返回的加密数据,即可以使用对应的B的公钥(公钥对应于私钥,且是公开可得)对加密数据进行解密验证,得到相应的确认消息。如果解密加密数据失败,则表明该加密数据不是由当前管理员B所发出的,即验证失败。使用公钥解密加密数据得到确认消息,则表明验证成功。
S307,在当前管理员的数字签名均通过验证后,变更所述目标管理员标识所对应的用户的权限为管理员权限。
在A、B和C的所返回的包含数字签名的加密数据均验证成功之后,则说明所有管理员均已经同意了本次权限迁移,因此,变更所述目标管理员标识所对应的用户(或称目标用户)的权限为管理员权限。例如,将目标用户的权限值修改为超过管理员权限值,或者将目标用户的角色变更至管理员群组。
通过本说明书实施例中所提供的方案,任一当前管理员可以发起管理权限的移交指令,数据库服务端对权限移交指令进行转发至当前的管理员,在所有的管理员对权限移交指令进行了数字签名之后,数据库服务端创建新的具有管理权限的用户,实现管理权限在账本中的迁移,而不太会影响到账本本身的使用,也无需再重新创建一份新的账本。
在一种实施方式中,权限移交指令中还可以包含有当前管理员的目标权限参数,例如,transfer_admin(from A,to D,W1),其中的“W1”即为目标权限参数,在这种实施方式下,在当前管理员的数字签名均通过验证后,数据库服务端首先将D变更为管理员权限,同时将A的权限变更为“W1”。需要说明的是,此处的目标权限参数可以是某个具体的权重值,例如“50”,也可以是某个用户组,例如“guest”。
进一步地,在一种实施方式中,目标权限参数还可以缺省,例如,transfer_admin(from A,to D),在这种实施方式下,在当前管理员的数字签名均通过验证后,数据库服务端首先将D变更为管理员权限,同时将会对A的权限进行缺省下的默认变更,缺省下的默认变更方式可以基于用户设置预先写入配置文件即可。例如,默认变更可以是将A的用户权限将至某个特定的级别,例如“gue st”,或者,默认变更可以是将A的账号直接删除,等等。通过这种方式,可以根据实际需要进一步的对于当前管理员在账本移交后的权限进行便利的管理。
在一种实施方式中,还可以将当前管理员所发起的权限移交指令,以及,发起方(发送权限移交指令的当前管理员标识),进行相应的合并,生成包含有权限移交指令和发起方的数据记录,并且,将该数据记录写入块链式账本中。进一步地,还可以生成包含当前管理员所返回的包含有数字签名的确认消息、权限移交指令、发起方以及时间戳的数据记录,并且将该数据记录写入块链式账本中。如前所述,写入块链式账本中的数据是难以篡改并且可以随时验证的。
例如,在一种实际应用中,多方机构合作开发一个项目,并创建了一个用于记录该项目的多方业务信息、账目流水,当法院需要查封该账目是,各机构统一封账,并转移管理员权限至法院,同时,生成包含各机构所返回的包含有数字签名的确认消息、权限移交指令、指令发起方以及时间戳的数据记录,并且将该数据记录写入块链式账本中,通过该方式,可以形成权限移交的有效证据,有利于日后查证。
对应的,本说明书实施例还提供一种块链式账本中的权限移交装置,应用于块链式账本存储数据的数据库服务端中,如图4所示,图4是本说明书实施例提供的一种块链式账本中的权限移交装置的结构示意图,包括:
接收模块401,接收账本中的任一当前管理员所发送的权限移交指令,所述指令中包含有当前管理员标识和目标管理员标识;
转发模块403,根据所述当前管理员标识确定对应的一个或者多个当前管理员,转发所述权限移交指令至所述对应的当前管理员,以便当前管理员对所述权限移交指令进行数字签名;
验证模块405,接收当前管理员所返回的对于所述权限移交指令的数字签名,并验证;
权限变更模块407,在当前管理员的数字签名均通过验证后,变更所述目标管理员标识所对应的用户的权限为管理员权限。
进一步地,在所述装置中,所述指令中还包含有当前管理员的目标权限参数;相应的,在当前管理员的数字签名均通过验证后,所述权限变更模块407,还用于,将所述当前管理员的权限变更为由所述目标权限参数所确定的权限。
进一步地,所述装置还包括写入模块409,生成包含所述权限移交指令和发送权限移交指令的当前管理员标识的数据记录;将所述数据记录写入所述块链式账本。
进一步地,所述装置还包括数据块生成模块411,接收待存储的数据记录,确定各数据记录的哈希值;当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
进一步地,所述预设的成块条件包括:待存储的数据记录数量达到数量阈值;或者,距离上一次成块时刻的时间间隔达到时间阈值。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图3所示的块链式账本中的权限移交方法。
图5示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图3所示的块链式账本中的权限移交方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。