一种通信群组的建立方法、系统、装置及设备
技术领域
本说明书实施例涉及信息技术领域,尤其涉及一种通信群组的建立方法、系统、装置及设备。
背景技术
在当前,通信通常都是中心化的群组通信。中心化通信存在多个方面的问题,例如如果中心化系统中的通信中心失效,比如宕机或者被攻击,又或者资源紧张而无法及时响应,整个系统就变得不可用;以及还存在隐私保护问题。或者存在数据被篡改或者丢失的风险。
基于此,需要一种去中心化的通信方案。
发明内容
本申请实施例的目的是提供一种基于区块链的去中心化的的通信方案。
为解决上述技术问题,本申请实施例是这样实现的:
一方面,本说明书实施例提供一种通信群组的建立方法,所述方法包括:
发起节点生成包含多个节点的群组创建指令;
所述发起节点生成包含所述群组创建指令的交易,广播所述交易至所述区块链系统中,以便所述区块链系统对所述交易进行共识,并在共识通过之后将所述交易写入区块链系统中;
所述区块链系统中的任一节点获取包含所述群组创建指令的交易,基于预先部署的智能合约确定群组标识,将所述群组标识写入所述智能合约所对应的合约账户的存储区域;
所述多个节点中的任一节点,确认是否执行所述群组创建指令;
当所述多个节点中的任一节点不同意执行所述群组创建指令时,所述区块链系统中的任一节点基于所述智能合约从所述合约账户的存储区域中删除所述群组标识,并终止创建群组;
当所述多个节点中的任一节点均同意执行所述群组创建指令时,获取每个节点对于所述群组创建指令的私钥签名,基于所述智能合约将所述私钥签名写入所述合约账户的存储区域,创建与所述群组标识一一对应的通信群组,用于所述多个节点间进行通信。
另一方面,本说明书实施例还提供一种通信群组的建立方法,应用于区块链系统的节点中,所述方法包括:
获取包含所述群组创建指令的交易,其中,所述群组创建指令中包含了所述节点;
基于预先部署的智能合约确定群组标识,将所述群组标识写入所述智能合约所对应的合约账户的存储区域;
确认所述多个节点中的任一节点,是否执行所述群组创建指令;
当所述多个节点中任一节点不同意执行所述群组创建指令时,基于所述智能合约从所述合约账户的存储区域中删除所述群组标识,并终止创建群组;
当所述多个节点中任一节点均同意执行所述群组创建指令时,获取每个节点对于所述群组创建指令的私钥签名,基于所述智能合约将所述私钥签名写入所述合约账户的存储区域,创建与所述群组标识一一对应的通信群组,用于所述多个节点间进行通信。
与一方面对应的,本说明书实施例还提供一种通信群组的建立系统,在所述系统中,
发起节点生成包含多个节点的群组创建指令;
所述发起节点生成包含所述群组创建指令的交易,广播所述交易至所述区块链系统中,以便所述区块链系统对所述交易进行共识,并在共识通过之后将所述交易写入区块链系统中;
所述区块链系统中的任一节点获取包含所述群组创建指令的交易,基于预先部署的智能合约确定群组标识,将所述群组标识写入所述智能合约所对应的合约账户的存储区域;
所述多个节点中的任一节点,确认是否执行所述群组创建指令;
当所述多个节点中的任一节点不同意执行所述群组创建指令时,所述区块链系统中的任一节点基于所述智能合约从所述合约账户的存储区域中删除所述群组标识,并终止创建群组;
当所述多个节点中的任一节点均同意执行所述群组创建指令时,获取每个节点对于所述群组创建指令的私钥签名,基于所述智能合约将所述私钥签名写入所述合约账户的存储区域,创建与所述群组标识一一对应的通信群组,用于所述多个节点间进行通信。
与另一方面对应的,本说明书实施例还提供一种通信群组的建立装置,应用于区块链系统的节点中,所述方法包括:
获取模块,获取包含所述群组创建指令的交易,其中,所述群组创建指令中包含了所述节点;
写入模块,基于预先部署的智能合约确定群组标识,将所述群组标识写入所述智能合约所对应的合约账户的存储区域;
确认模块,确认所述多个节点中的任一节点,是否执行所述群组创建指令;
删除模块,当所述多个节点中任一节点不同意执行所述群组创建指令时,基于所述智能合约从所述合约账户的存储区域中删除所述群组标识,并终止创建群组;
创建模块,当所述多个节点中任一节点均同意执行所述群组创建指令时,获取每个节点对于所述群组创建指令的私钥签名,基于所述智能合约将所述私钥签名写入所述合约账户的存储区域,创建与所述群组标识一一对应的通信群组,用于所述多个节点间进行通信。
通过本说明书实施例所提供的方案,区块链网络中任意节点均可以作为一个新群组的发起方,发起创建通信群组,同时区块链中的任一节点都可以基于预先部署的智能合约对于通信群组创建过程中的状态进行共识和存储,从而可以创建得到分布式系统下的通信群组,进而实现去中心化的通信。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本说明书实施例所提供的一种通信群组的建立方法的流程示意;
图2为本说明书实施例所提供的一种区块链系统中世界状态的示意图;
图3为本说明书实施例所提供的另一种通信群组的建立方法的流程示意图;
图4为本说明书实施例所提供的一种通信群组的建立装置的结构示意图;
图5是用于配置本说明书实施例方法的一种设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
在当前,多方交互的过程中基本采用传统的中心化群组通信,中心化的通信过程中存在诸如依赖中心单点的问题、隐私泄漏问题以及数据被篡改或者丢失的风险。基于此,本说明书实施例提供一种分布式的去中心化的通信方案。
如图1所示,图1为本说明书实施例所提供的一种通信群组的建立方法的流程示意图,应用于区块链系统中,所述方法包括:
S101,发起节点生成包含多个节点的群组创建指令。
发起节点可以是区块链系统中的任一节点,发起节点可以经由区块链客户端发起创建新群组的指令。
群组创建指令的基础报文中至少应当包含需要加入群组的多个成员节点,例如节点A和节点B。当然,在群组创建指令中还可以包含其它的一些辅助信息,例如,群组名称group_name,允许群组人数上限max_num等等。
需要说明的是,在群组创建指令中所包含的多个节点,可以包括发起节点自身,也可以不包括发起节点。例如,节点A发起包含节点B和节点C的群组创建指令。
S103,所述发起节点生成包含所述群组创建指令的交易,广播所述交易至所述区块链系统中,以便所述区块链系统对所述交易进行共识,并在共识通过之后将所述交易写入区块链系统中。
在一种实施方式中,发起节点可以生成包含所述群组创建指令的明文的交易。
在另一种实施方式中,发起节点可以采用自身的私钥对于群组创建指令进行签名,成对所述群组创建指令的数字签名,并且生成包含所述群组创建指令和所述数字签名的交易并广播。此处的私钥指的是发起节点在区块链系统中所使用的私钥。
进一步地,发起节点还可以对于包含所述群组创建指令和所述数字签名的交易再次进行数字签名并进行广播。
区块链中的任一节点收到该交易后即可以使用发起节点的公钥对其中的数字签名进行验证,在验证通过之后即进行共识,并在共识通过之后写入区块链系统。
S105,所述区块链系统中的任一节点获取包含所述群组创建指令的交易,基于预先部署的智能合约确定群组标识,将所述群组标识写入所述智能合约所对应的合约账户的存储区域。
在所述区块链系统中已经预先部署了智能合约。所述智能合约的功能包括:响应所述包含群组创建指令的交易,并预先分配出通信群组的群组标识。
群组标识的确定方式可以预先在智能合约中定义,例如,以自然数序列作为群组标识,每有一个包含群组创建指令的交易,群组标识加1。
需要说明的是,在区块链系统中,每一个智能合约均存在一个对应的合约账户。以以太坊的合约账户为例,每个合约账户中包含有描述账户状态的多个属性,例如包括:
序号nonce,如果账户是一个合约账户,nonce代表此账户创建的合约序号;
持币数量balance,包含了该账户当下可花费的以太币的数量
存储树哈希值storageRoot,即存储区域的哈希值。存储区域即为智能合约在运行中,产生的数据的存储地。在合约的生命周期里,该区域的内容被合约代码不断写入、读取。存储区存放于以太坊网络节点的硬盘上。存储区的内容通过散列函数得出校验哈希值,该值即为存储区的哈希值。
代码区哈希值codeHash,代码区的内容通过散列函数得出校验哈希值,该值即为代码区的哈希值。
那么对于区块链系统中的每个节点而言,一个智能合约在运行过程中将会产生一个结果(例如再本说明书实施例中,生成对应本次交易的群组标识)。容易理解,由于智能合约是部署在每个节点上,从而每个节点都会产生相应的一个结果,而区块链系统则需要对于该结果进行共识,如果共识通过,则每个节点将该共识结果写入所述智能合约所对应的合约账户的存储区域(即写入storage区域),显然,写入storage区域将会改变该合约账户的存储树的哈希值。
同时,在区块链系统中,每个节点还会还对应一个账户状态,而账户状态的集合组成了世界状态。账户状态与账户中所包含的多个属性所决定,例如可以对属性串联的哈希值来作为账户状态。如图2所示,图2为本说明书实施例所提供的一种区块链系统中世界状态的示意图。由于每个账户(包括智能合约所对应的合约账户)都处在树的叶子节点上,树的组织则按照排列顺序进行串联哈希,最终层层哈希得出世界状态。
当更改某单一账户(例如,合约账户中的存储树哈希值哈改变导致了合约账户的哈希值改变)时,则会引发它所在分支的上层哈希值的更改,直到影响到根节点的哈希值,由各账户的状态哈希所构成的树称为状态树(stateRoot),状态树的根哈希即可以表征为世界状态(即综合了所有账户状态的信息),世界状态将存入区块链系统中区块头部。世界状态随着区块链的前进而不断变化,状态树的值也不断变更。
换言之,将所述群组标识写入所述智能合约所对应的合约账户的存储区域,意味着,将所述群组标识写入了区块链的世界状态,并且存储在了区块链的某些块头中,从而形成了不可抵赖的证据。
S107,所述多个节点中的任一节点,确认是否执行所述群组创建指令。
所述多个节点即为前述群组创建指令中所包含的多个节点。此时,它们也已经获取得到了包含所述群组创建指令的交易,并且可以解析得到其中所包含的群组创建指令。从而,可以根据实际需来确认是否执行所述群组创建指令。
具体而言,有两种情形:
S109a,至少一个节点不同意创建群组。即当所述多个节点中的任一节点不同意执行所述群组创建指令时,所述区块链系统中的任一节点基于所述智能合约从所述合约账户的存储区域中删除所述群组标识,并终止创建群组。
同样的,如前所述,此处在合约账户的存储区域中删除所述群组标识同样会改变所述存储树哈希值,并且导致区块链的世界状态改变,并且这种取消群组创建的信息同样以世界状态的形式写入了区块链系统中。
S109b,所述多个节点均同意执行所述群组创建指令。即当所述多个节点中的任一节点均同意执行所述群组创建指令时。此时,所述多个节点中的任一节点均需要对于所述群组创建指令进行私钥签名。从而区块链系统中的每个节点可以基于所述智能合约获取每个节点对于所述群组创建指令的数字签名,并且将多个节点的多个数字签名作为一个整体写入合约账户的存储区域,即写入世界状态。
将通信群组中的每个成员节点对于群组创建指令的数字签名写入了世界状态,即意味着每个成员节点均同意了创建该群组,因此,即可以在区块链系统中创建与所述群组标识一一对应的通信群组,用于所述多个节点间进行通信。显然,这种方式所得到的通信群组是不存在中心节点的,是一个完全的分布式的通信群组。
在一种实施方式中,在群组已经成立之后,智能合约中还可以预先定义密钥生成功能,从而可以生成一个与所述通信群组对应的的密钥。即该密钥只可以在该通信群内使用。具体而言,该密钥可以是对称加密或者非对称加密的,即采用单钥密码系统的加密方法,该密钥可以同时用作信息的加密和解密。
生成得到的密钥是通用该群组的节点内,并且不可适用于其它群组的通信中。换言之,只有该群组内的节点可以获取得到与该群组对应的密钥。显然,密钥不能与节点在区块链系统内所使用的私钥和公钥相同。
并且,智能合约可以调用通信群组内每个成员节点的公钥(在区块链系统内,公钥通常都是已经公开的),对所述密钥进行加密,从而生成包含了加密后的密钥的交易,并广播至所述区块链系统中,以便所述区块链系统对所述交易进行共识,并在共识通过之后将所述交易写入区块链系统中。
需要说明的是,由于每个成员节点的公钥不同,那么实际上对于通信群组内的每一个成员,都会生成一份对应的交易。换言之,生成的包含了加密后的密钥的交易,与群组内的成员是一一对应的。
进而,群组内的每个成员都可以获取得到前述包含了加密后的密钥的交易,其中就存在一份是使用了自己的公钥所加密的,从而可以使用自己的私钥来解密并获取得到用于群内通信的密钥。
显然,区块链系统中其它不在群组内的其它节点也可以获取得到这些包含了加密后的密钥的交易,但是它们都无法对加密后的密钥进行解密,从而,无法获取得到该密钥。
在群组内的每个节点都获取得到了该密钥之后,群内的成员节点既可以基于该密钥进行群组内的通信。具体而言,所述通信群组中的任一节点,在进行组内通信时,不再通过中心化的某个节点,而是采用群组所对应的密钥加密通信信息,生成包含加密后的通信信息的交易,并广播至所述区块链系统中,以便所述区块链系统对所述交易进行共识,并在共识通过之后将所述交易写入区块链系统中;
而通信群组中的任一其它节点,后可以从区块链系统中获取包含加密后的通信信息的交易,采用群组内公用的密钥解密所述加密后的通信信息,得到所述通信信息。而其它非群组内的节点即使得到了取包含加密后的通信信息的交易,由于没有群内公用的密钥,因此也无法解密获取得到通信信息,从而实现了群组节点间的分布式的通信。
通过本说明书实施例所提供的方案,区块链网络中任意节点均可以作为一个新群组的发起方,发起创建通信群组,同时区块链中的任一节点都可以基于预先部署的智能合约对于通信群组创建过程中的状态进行共识和存储,从而可以创建得到分布式系统下的通信群组,进而实现去中心化的通信。并且,在通信的过程中,每条通信信息都是保存在区块链系统中,避免了中心化可能存在的信息被篡改;同时在通信中采用了组内密钥进行加密,还避免了通信信息的泄露。
另一方面,本说明书实施例还提供另一种通信群组的建立方法,如图3所示,图3为本说明书实施例所提供的另一种通信群组的建立方法的流程示意图,应用于区块链系统的节点中,所述方法包括:
S301,获取包含所述群组创建指令的交易,其中,所述群组创建指令中包含了所述节点;即该节点是待创立的通信群组中的成员节点的一员。显然,在这之前已经有发起节点将包含群组创建指令的交易在区块链系统中进行了广播并上链
S303,基于预先部署的智能合约确定群组标识,将所述群组标识写入所述智能合约所对应的合约账户的存储区域;
S305,确认所述多个节点中的任一节点,是否执行所述群组创建指令;
S307a,当所述多个节点中任一节点不同意执行所述群组创建指令时,基于所述智能合约从所述合约账户的存储区域中删除所述群组标识,并终止创建群组;
S307b,当所述多个节点中任一节点均同意执行所述群组创建指令时,获取每个节点对于所述群组创建指令的私钥签名,基于所述智能合约将所述私钥签名写入所述合约账户的存储区域,创建与所述群组标识一一对应的通信群组,用于所述多个节点间进行通信。
与一方面对应的,本说明书实施例还包括一种通信群组的建立系统,在所述系统中,
发起节点生成包含多个节点的群组创建指令;
所述发起节点生成包含所述群组创建指令的交易,广播所述交易至所述区块链系统中,以便所述区块链系统对所述交易进行共识,并在共识通过之后将所述交易写入区块链系统中;
所述区块链系统中的任一节点获取包含所述群组创建指令的交易,基于预先部署的智能合约确定群组标识,将所述群组标识写入所述智能合约所对应的合约账户的存储区域;
所述多个节点中的任一节点,确认是否执行所述群组创建指令;
当所述多个节点中的任一节点不同意执行所述群组创建指令时,所述区块链系统中的任一节点基于所述智能合约从所述合约账户的存储区域中删除所述群组标识,并终止创建群组;
当所述多个节点中的任一节点均同意执行所述群组创建指令时,获取每个节点对于所述群组创建指令的私钥签名,基于所述智能合约将所述私钥签名写入所述合约账户的存储区域,创建与所述群组标识一一对应的通信群组,用于所述多个节点间进行通信。
与另一方面对应的,本说明书实施例还提供一种通信群组的建立装置,应用于区块链系统的节点中,如图4所示,图4为本说明书实施例所提供的一种通信群组的建立装置的结构示意图,所述装置包括:
获取模块401,获取包含所述群组创建指令的交易,其中,所述群组创建指令中包含了所述节点;
写入模块403,基于预先部署的智能合约确定群组标识,将所述群组标识写入所述智能合约所对应的合约账户的存储区域;
确认模块405,确认所述多个节点中的任一节点,是否执行所述群组创建指令;
删除模块407,当所述多个节点中任一节点不同意执行所述群组创建指令时,基于所述智能合约从所述合约账户的存储区域中删除所述群组标识,并终止创建群组;
创建模块409,当所述多个节点中任一节点均同意执行所述群组创建指令时,获取每个节点对于所述群组创建指令的私钥签名,基于所述智能合约将所述私钥签名写入所述合约账户的存储区域,创建与所述群组标识一一对应的通信群组,用于所述多个节点间进行通信。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图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、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。