CN113722666B - 专用集成电路芯片及方法、区块链系统及区块生成方法 - Google Patents
专用集成电路芯片及方法、区块链系统及区块生成方法 Download PDFInfo
- Publication number
- CN113722666B CN113722666B CN202111279375.2A CN202111279375A CN113722666B CN 113722666 B CN113722666 B CN 113722666B CN 202111279375 A CN202111279375 A CN 202111279375A CN 113722666 B CN113722666 B CN 113722666B
- Authority
- CN
- China
- Prior art keywords
- elements
- reassignment
- calculation
- groups
- input
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 104
- 238000004364 calculation method Methods 0.000 claims abstract description 161
- 238000012545 processing Methods 0.000 claims abstract description 78
- 230000006835 compression Effects 0.000 claims abstract description 49
- 238000007906 compression Methods 0.000 claims abstract description 49
- 230000006870 function Effects 0.000 claims description 196
- 238000013507 mapping Methods 0.000 claims description 81
- 230000008569 process Effects 0.000 description 26
- 230000009466 transformation Effects 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 4
- 239000011159 matrix material Substances 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011946 reduction process Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
- 230000003313 weakening effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请提供了一种专用集成电路芯片及方法、区块链系统及区块生成方法;其中,专用集成电路芯片包括:压缩计算单元;压缩计算单元包括:第一并行处理子单元,用于并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第一、第二轮重新赋值;中间变量中的第一元素按照第一规则划分为四组;第二并行处理子单元,用于接收第一并行处理子单元输出的重新赋值后的中间变量,并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第三、第四轮重新赋值;其中,中间变量中的第一元素按照第二规则划分为四组。
Description
技术领域
本文涉及区块链领域,尤其涉及一种专用集成电路芯片及方法、区块链系统及区块生成方法。
背景技术
区块链作为一个共享数据库,存储于其中的数据或信息,具有“不可伪造”、“全程留痕”、“可以追溯”、“公开透明”、“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。Equihash是区块链中一种面向内存的工作证明;一般过程是先构造输入条件,即区块头和各项参数,然后将输入条件转化成“广义生日问题的一般形式”的问题,解析该问题并对获得的解进行难度判断,同时满足算法条件和难度条件则判定求解成功,工作证明完成,产生新的区块;否则调整参数重新运算。
Equihash需要利用Blake2产生两百万个原始数据,根据该原始数据获得上述问题的解;Blake2包括Blake2B和Blake2S;其中Blake2B一次可以产生1个400比特的数据,分为2个200比特的数据;Blake2S一次可以产生1个200比特的数据,分为2个100比特的数据,Equihash大约需要进行一百万次Blake2来获得原始数据以求解,从而完成工作证明,在区块链中产生新的区块。
发明内容
以下是对本申请详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。
本申请提供了一种专用集成电路芯片及方法、区块链系统及区块生成方法,可以提高处理速度。
本申请实施例提供了一种实现Blake2的专用集成电路芯片,包括:压缩计算单元;所述压缩计算单元包括:
第一并行处理子单元,用于并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第一、第二轮重新赋值;其中,中间变量中的十六个第一元素按照第一规则划分为四组;
第二并行处理子单元,用于接收所述第一并行处理子单元输出的重新赋值后的中间变量,并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第三、第四轮重新赋值;其中,中间变量中的十六个第一元素按照第二规则划分为四组。
可选地,所述第一并行处理子单元包括依次连接的:第一函数模块和第二函数模块;
所述第一函数模块包括四个并行进行第一组合计算的第一处理模块,每个第一处理模块各自用于对一组第一元素和输入的一个第二元素进行第一组合计算,并根据第一组合计算的结果对该组第一元素进行重新赋值;
所述第二函数模块包括四个并行进行第二组合计算的第二处理模块,每个第二处理模块各自用于对一组第一元素和输入的一个第二元素进行第二组合计算,并根据第二组合计算的结果对该组第一元素进行重新赋值;
其中,第一、第二函数模块所针对的四组第一元素是根据第一规则对中间变量划分得到的;所述第一、第二函数模块输入的第二元素互不相同。
可选地,所述第二并行处理子单元包括:连接到所述第一并行处理子单元的映射模块、所述第一函数模块、所述第二函数模块、逆映射模块;
所述映射模块用于根据预设的映射关系,分别将不同第一元素的值赋值给该第一元素映射到的第一元素;
所述逆映射模块用于根据所述预设的映射关系,分别将不同第一元素的值赋值给映射到该第一元素的第一元素;
其中,第一、第二函数模块输入的第二元素互不相同,且不同于第一并行处理子单元中第一、第二函数模块输入的第二元素。
可选地,所述映射模块根据预设的映射关系,分别将不同第一元素的值赋值给该第一元素映射到的第一元素包括:
所述映射模块将索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素的值,分别赋值给索引值为0至15的第一元素;
所述逆映射模块根据预设的映射关系,分别将不同第一元素的值赋值给映射到该第一元素的第一元素包括:
所述逆映射模块将索引值为0至15的第一元素的值,分别赋值给索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素。
本申请实施例还提供了一种实现Blake2的方法,应用在上述的实现Blake2的专用集成电路芯片上,所述方法包括:进行预定轮数的压缩计算,每轮压缩计算分别包括如下步骤:
所述第一并行处理子单元并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第一、第二轮重新赋值;其中,中间变量中的十六个第一元素按照第一规则划分为四组;
所述第二并行处理子单元并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第三、第四轮重新赋值;其中,中间变量中的十六个第一元素按照第二规则划分为四组。
可选地,所述第一并行处理子单元包括依次连接的:第一函数模块和第二函数模块;所述并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第一、第二轮重新赋值包括:
将输入参数输入所述第一函数模块,所述输入参数包括中间变量及输入块数据中的四个第二元素;第一函数模块并行的执行四个第一子过程,每个第一子过程各自对一组第一元素和作为输入参数的一个第二元素进行第一组合计算,并根据第一组合计算的结果对该组第一元素进行第一轮重新赋值;
将输入参数输入第二函数模块,所述输入参数包括进行第一轮重新赋值后的中间变量,以及输入块数据中的四个第二元素;第二函数模块并行的执行四个第二子过程,每个第二子过程各自对一组经过第一轮重新赋值后的第一元素和作为输入参数的一个第二元素进行第二组合计算,并根据第二组合计算的结果对该组第一元素进行第二轮重新赋值;
其中,所述第一、第二子过程各自对应的第一元素的组,是根据第一规则对中间变量的十六个第一元素划分得到的;所述第一、第二函数的输入参数中的第二元素不同。
可选地,所述第二并行处理子单元包括:连接到所述第一并行处理子单元的映射模块、所述第一函数模块、所述第二函数模块、逆映射模块;所述并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第三、第四轮重新赋值包括:
所述映射模块根据预设的映射关系,在进行第二轮重新赋值后的中间变量中,分别将不同第一元素的值赋值给该第一元素映射到的第一元素;
将输入参数输入所述第一函数模块,所述输入参数包括所述映射模块赋值后的中间变量,以及输入块数据中的四个第二元素;第一函数模块并行的执行四个第一子过程,每个第一子过程各自对一组经过第二轮重新赋值后的第一元素和作为输入参数的一个第二元素进行第一组合计算,并根据第一组合计算的结果对该组第一元素进行第三轮重新赋值;
将输入参数输入所述第二函数模块,所述输入参数包括进行第三轮重新赋值后的中间变量,以及输入块数据中的四个第二元素;第二函数模块并行的执行四个第二子过程,每个第二子过程各自对一组经过第三轮重新赋值后的第一元素和作为输入参数的一个第二元素进行第二组合计算,并根据第二组合计算的结果对该组第一元素进行第四轮重新赋值;
所述逆映射模块根据所述预设的映射关系,在进行第四轮重新赋值后的中间变量中,分别将不同第一元素的值赋值给映射到该第一元素的第一元素;
其中,所述第一、第二函数的输入参数中的第二元素不同,且和前一次使用所述第一、第二函数时的输入参数中的第二元素不同。
可选地,所述根据预设的映射关系,分别将不同第一元素的值赋值给该第一元素映射到的第一元素包括:
将索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素的值,分别赋值给索引值为0至15的第一元素;
所述根据预设的映射关系,分别将不同第一元素的值赋值给映射到该第一元素的第一元素包括:
将索引值为0至15的第一元素的值,分别赋值给索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素。
本申请实施例还提供了一种区块链系统,包括:多个节点;每个所述节点分别包括:上述的实现Blake2的专用集成电路芯片。
本申请实施例还提供了一种区块链系统中的区块生成方法,包括:
将输入条件转换为待求解的问题;所述输入条件包括:最后一个区块的区块头和预设参数;
按照上述的实现Blake2的方法进行预定次数的Blake2,根据Blake2得到的原始数据对所述问题进行求解;
获得的解满足预设的算法条件和难度条件则判定求解成功,生成新的区块。
与相关技术相比,本申请实施例提供了一种Blake2的实现方案,该方案将Blake2中每轮压缩计算的过程通过并行方式实现,因此相对于传统实现方案,提高了Blake2的计算速度,减小了Blake2的计算时间。由于区块链系统生成新的区块的过程中,Equihash采用Blake2产生原始数据,以便进一步进行求解来完成工作证明,以产生新的区块,而每产生2个解大约需要运行Blake2约一百万次,因此Blake2计算速度的微小提高,就可以大大提高完成工作证明的效率,提高生成新区块的速度,能带来相当可观的收益。
在阅读并理解了附图和详细描述后,可以明白其他方面。
附图说明
附图用来提供对本申请技术方案的理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
图1是本申请实施例提供的实现Blake2的专用集成电路芯片中压缩计算单元的示意图;
图2是本申请实施例提供的实现Blake2的方法中每轮压缩计算的流程图;
图3是本申请实施例的示例的流程图;
图4是本申请实施例提供的区块生成方法的流程图。
具体实施方式
本申请描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
本申请包括并设想了与本领域普通技术人员已知的特征和元件的组合。本申请已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的发明方案。任何实施例的任何特征或元件也可以与来自其它发明方案的特征或元件组合,以形成另一个由权利要求限定的独特的发明方案。因此,应当理解,在本申请中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本申请实施例的精神和范围内。
另外,在本申请中如涉及“第一”、“第二”等的描述仅用于描述中进行区分,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
相关技术中,Blake2包括Blake2B和Blake2S两种版本,其中Blake2B是64位版本,可以生成最高512位的任意长度哈希值;Blake2S是32位版本,可以生成最高256位哈希值。
以Blake2B进行求解的情况为例,Equihash的输入数据包括:区块头108字节(byte),nonce值32字节,一共140字节。每次使用Blake2B在这140字节后面再拼接一个不同的4字节计数器的值,从0到220-1,一共144字节。将这144字节数据分为两块数据,第一块数据为128字节,第二块数据为16字节(包括12字节nonce值和4字节计数器的值);在第二块数据的16字节后面再拼接数字0,直到将第二块数据补齐到128字节。
采用Blake2B进行计算的过程中,先计算第一块数据的h值(h_1st),再对第二块数据进行12轮压缩计算;每一轮压缩计算中,将中间变量v和输入块数据m(即上述第二块数据)利用混合函数G函数进行组合,从而得到新的中间变量v供下一轮使用;利用第一块数据的h值(h_1st)和预设的初始向量iv,来获取第二块数据第一轮压缩计算所需要的v_init,计算方法如下:
v_init[0:7] : = h_1st[0:7];
v_init[8:11] : = iv[0:3];
v_init[12] := iv[4] ^ ( t mod 2**w); //按位异或
v_init[13] := iv[5] ^ ( t >> w);
v_init[14] := ~iv[6]; //按位取反
v_init[15] := iv[7];
其中,“:=”表示赋值,t为偏移量计数,“mod”为取模,“2**w”表示2的w次方,Blake2B中w为64;“>>”为逻辑移位;h值为512bit(8个64bit);v为1024bit(16个64bit)。
最后一轮压缩计算得到的v_out和第一块数据的h值进行计算,输出400bit的数据blake2b_data,该400bit的数据拆成两个200bit的数据,作为本次进行Blake2B的最终结果;计算方法如下:
h_result [0] = h_1st[0] ^ v_out[0] ^ v_out[8];
h_result [1] = h_1st[1] ^ v_out[1] ^ v_out[9];
h_result [2] = h_1st[2] ^ v_out[2] ^ v_out[10];
h_result [3] = h_1st[3] ^ v_out[3] ^ v_out[11];
h_result [4] = h_1st[4] ^ v_out[4] ^ v_out[12];
h_result [5] = h_1st[5] ^ v_out[5] ^ v_out[13];
h_result [6] = h_1st[6] ^ v_out[6] ^ v_out[14];
h_result [7] = h_1st[7] ^ v_out[7] ^ v_out[15];
blake2b_data[399:0] = h_result[399:0];
Blake2B中,每轮压缩计算需要使用8次G函数。
输入块数据m也是一个字向量(word vector),包含16个字(word),Blake2B中每个字为64bit,本文将输入块数据m中的每个字称为m元素(本文中又称为第二元素);16个m元素分别作为8次使用G函数时的输入。
中间变量v是一个字向量(word vector),包含16个字(word),Blake2B中每个字为64bit,本文将中间变量v中的每个字称为v元素(本文中又称为第一元素); 16个v元素v0至v15按照第一规则划分为以下4组,分别作为前4次使用G函数时的输入:
(v0, v4, v8, v12)、(v1, v5, v9, v13)、(v2, v6, v10, v14)、(v3, v7, v11,v15);
前4次使用G函数后,16个v元素被更新,再按照第二规则将更新后的16个v元素分为以下4组,分别作为后4次使用G函数时的输入。
(v0, v5, v10, v15)、(v1, v6, v11, v12)、(v2, v7, v8, v13)、(v3, v4, v9,v14)。
可以看到,划分时采用的规则不同,各组里包含的v元素不同,这样组合计算时参与的v元素就会不同。其中v0是指中间变量v中索引值(index)为0的v元素,或者说第一个v元素;其它v元素以此类推。
可以采用以下代码实现Blake 2B中的12轮压缩计算:
FOR i = 0 TO 11 DO
s[0..15] := SIGMA[i mod 10][0..15]
v := G( v, 0, 4, 8, 12, m[s[ 0]], m[s[ 1]] )
v := G( v, 1, 5, 9, 13, m[s[ 2]], m[s[ 3]] )
v := G( v, 2, 6, 10, 14, m[s[ 4]], m[s[ 5]] )
v := G( v, 3, 7, 11, 15, m[s[ 6]], m[s[ 7]] )
v := G( v, 0, 5, 10, 15, m[s[ 8]], m[s[ 9]] )
v := G( v, 1, 6, 11, 12, m[s[10]], m[s[11]] )
v := G( v, 2, 7, 8, 13, m[s[12]], m[s[13]] )
v := G( v, 3, 4, 9, 14, m[s[14]], m[s[15]] )
END FOR
其中,s为置换矩阵常量,SIGMA是12行(0至11行),16列的常量矩阵,SIGMA中的10、11行分别同0、1行;SIGMA可以为以下形式:
const unit 8_t SIGMA [12] [16] ={
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
{14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3},
{11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4},
{7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8},
{9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13},
{2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9},
{12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11},
{13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10},
{6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5},
{10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
{14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}
};
在12轮压缩计算中,前10轮分别选择SIGMA中的0至9行赋值给s[0..15],第11、12轮分别选择SIGMA中的0、1行赋值给s[0..15];这样在不同轮次的压缩计算中,每次使用G函数时输入的m元素将不同,比如第一轮压缩计算中,i=0,以SIGMA矩阵第一行给s[0..15]赋值,这样本轮中第一次使用G函数时输入的m元素是m0和m1,第二次使用G函数时输入的m元素是m2和m3,以此类推;而第二轮压缩计算中,i=1,以SIGMA矩阵第二行给s[0..15]赋值,这样本轮中第一次使用G函数时输入的m元素是m14和m10,第二次使用G函数时输入的m元素是m4和m8,以此类推。
每次使用G函数,会将输入的一组m元素和一组v元素进行组合,以更新该组的4个v元素。G函数的一次执行过程可以划分成前半段更新的过程和后半段更新的过程,前半段更新使用输入的2个m元素中的一个,和输入的4个v元素进行组合计算,以对这4个v元素重新赋值(即更新这4个v元素);后半段更新使用输入的2个m元素中的另一个,和前半段更新中已重新赋值的4个v元素进行组合,以对这4个v元素再次重新赋值;将再次重新赋值后的4个v元素作为本次G函数的输出。
在一轮压缩计算(使用8次G函数)的过程中,中间变量v的全部16个v元素会各自输入G函数两次,每次输入G函数后均会进行前、后半段2轮更新,即每个v元素在每轮压缩计算中会更新4轮。
前、后半段更新分别包括:对组中第一个v元素与组中第二个v元素、以及输入的第一个m元素进行组合计算,根据组合计算的结果对第一个v元素重新赋值。对于组中后三个v元素,分别根据该v元素与组中第三/第四/第一个v元素的组合计算结果重新赋值。前、后半段更新的不同之处在于:后半段更新是在前半段更新的基础上再次进行组合计算,所采用的v元素均是前半段更新中已经重新赋值的v元素。
G函数可以表示为如下代码:
FUNCTION G ( v[ 0..15 ], a, b, c, d, x, y )
v[a] := (v[a] + v[b] + x) mod 2**w
v[d] := (v[d] ^ v[a] ) >>>R1
v[c] := (v[c] + v[d] + x) mod 2**w
v[b] := (v[b] ^ v[c] ) >>>R2
v[a] := (v[a] + v[b] + y) mod 2**w
v[d] := (v[d] ^ v[a] ) >>>R3
v[c] := (v[c] + v[d] + x) mod 2**w
v[b] := (v[b] ^ v[c] ) >>>R4
RETURN v[ 0..15 ]
END FUNCTION
其中,a、b、c、d、x、y是G函数的输入参数,其中a、b、c、d为index,用于表示输入的v元素,比如a、b、c、d分别是0、4、8、12,表示输入v0、v4、v8和v12;x、y是输入的m元素,比如为m[s[ 0]], m[s[ 1]]。“2**w”表示2的w次方,Blake2B中w为64,组合计算中可以省略;“^”表示异或操作,“>>>”表示循环右移,“>>>”后的R1至R4即右移的位数,在Blake2B中分别是32、16、24、63。
Blake2S和Blake2B的执行过程基本类似,不同之处包括:Blake2S仅执行10轮压缩计算、w为32、一个word为32bit,块的长度为64字节、哈希结果为32字节、(R1, R2, R3, R4)为(16, 12, 8, 7)。
可以看到,Blake2的整个实现过程步骤较多,需要执行10或12轮压缩计算,每一轮压缩计算中需要使用8次G函数,每次G函数中包含8次赋值操作和4次移位操作;考虑到Equihash需要运行约一百万次Blake2,因此这样会造成处理时间较长,当区块链系统中采用Equihash进行工作证明以生成新区块时效率会较低。
本申请实施例提供了一种实现Blake2的专用集成电路芯片,包括:压缩计算单元;压缩计算单元如图1所示,包括:
第一并行处理子单元11,用于并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对四组第一元素进行第一、第二轮重新赋值;其中,中间变量中的十六个第一元素按照第一规则划分为四组;
第二并行处理子单元12,用于接收第一并行处理子单元输出的重新赋值后的中间变量,并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对四组第一元素进行第三、第四轮重新赋值;其中,中间变量中的十六个第一元素按照第二规则划分为四组。
本实施例中,压缩计算单元中采用第一、第二并行处理子单元对中间变量中的四组第一元素进行并行的更新,相对于传统实现方案,提高了Blake2的计算速度,减小了Blake2的计算时间。由于区块链系统生成新的区块的过程中,Equihash采用Blake2产生原始数据,以便进一步进行求解来完成工作证明,以产生新的区块,而每产生2个解大约需要运行Blake2约一百万次,因此Blake2计算速度的微小提高,就可以大大提高完成工作证明的效率,提高生成新区块的速度,能带来相当可观的收益。
本实施例中,第一并行处理子单元11所针对的输入块数据不同于第二并行处理子单元。
本实施例中,按照第一规则划分为的四组第一元素分别是:
索引值为0、4、8、12的第一元素、索引值为1、5、9、13的第一元素、索引值为2、6、10、14的第一元素、索引值为3、7、11、15的第一元素;
按照第二规则划分为的四组第一元素分别是:
索引值为0、5、10、15的第一元素、索引值为1、6、11、12的第一元素、索引值为2、7、8、13的第一元素、索引值为3、4、9、14的第一元素。
一种示例性实施例中,如图1所示,第一并行处理子单元11可以包括依次连接的:第一函数模块111和第二函数模块112;
第一函数模块111包括四个并行进行第一组合计算的第一处理模块,每个第一处理模块各自用于对一组第一元素和输入的一个第二元素进行第一组合计算,并根据第一组合计算的结果对该组第一元素进行重新赋值;
第二函数模块112包括四个并行进行第二组合计算的第二处理模块,每个第二处理模块各自用于对一组第一元素和输入的一个第二元素进行第二组合计算,并根据第二组合计算的结果对该组第一元素进行重新赋值;
其中,第一、第二函数模块所针对的四组第一元素是根据第一规则对中间变量划分得到的;第一、第二函数模块输入的第二元素互不相同。
本实施例的一种可选方案中,如图1所示,第二并行处理子单元12可以包括:连接到第一并行处理子单元11的映射模块121、第一函数模块122、第二函数模块123、逆映射模块124;
映射模块121的输入端可以连接第二函数模块112的输出端,用于根据预设的映射关系,分别将不同第一元素的值赋值给该第一元素映射到的第一元素;
逆映射模块124用于根据所述预设的映射关系,分别将不同第一元素的值赋值给映射到该第一元素的第一元素;逆映射模块124的输出端输出的中间变量,即一轮压缩计算的输出结果。
其中,第一、第二函数模块输入的第二元素互不相同,且不同于第一并行处理子单元11中第一、第二函数模块输入的第二元素。
其中,第一函数模块122和第二函数模块123可以复用第一函数模块111和第二函数模块123;或者,第一并行处理子单元11和第二并行处理子单元12中各自使用不同的第一、第二函数模块。
本可选方案中,一轮压缩计算的过程可以包括:v和m输入第一函数模块111进行第一轮更新,m和第一函数模块111输出的v输入第二函数模块112进行第二轮更新,第二函数模块112输出的v输入映射模块121进行v正变换;m和映射模快输出的v输入第一函数模块122进行第三轮更新;m和第一函数模块122输出的v输入第二函数模块123进行第四轮更新;第二函数模块123输出的v输入逆映射模块124进行v逆变换;以逆映射模块124输出的v作为本轮压缩计算的输出。
可以看到,本可选方案是一种流水线形式的作业方式,每个模块完成自身的处理后,将结果输出到下一个模块;其中第一、第二函数模块进行处理时,采用并行处理的方式,可以各自采用4个第一、第二处理模块进行并行的组合计算。
本可选方案中,映射模块根据预设的映射关系,分别将不同第一元素的值赋值给该第一元素映射到的第一元素可以包括:
映射模块将索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素的值,分别赋值给索引值为0至15的第一元素;
逆映射模块根据预设的映射关系,分别将不同第一元素的值赋值给映射到该第一元素的第一元素可以包括:
逆映射模块将索引值为0至15的第一元素的值,分别赋值给索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素。
本申请实施例提供了一种实现Blake2的专用集成电路芯片,和相关技术的主要区别在于每一轮压缩计算中采用第一、第二并行处理子单元实现对中间变量中的第一元素进行并行的更新;示例性的,第一、第二并行处理子单元中采用了新设计的第一、第二函数模块来并行对4组第一元素进行组合计算及更新。
本申请实施例还提供了一种实现Blake2的方法,包括:进行预定轮数的压缩计算,每轮压缩计算如图2所示,包括步骤S210-S220:
S210、并行的对中间变量v所包含的4组v元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对4组v元素进行第一、第二轮重新赋值;其中,中间变量v中的16个v元素按照第一规则划分为4组;
S220、并行的对中间变量v所包含的4组v元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对4组v元素进行第三、第四轮重新赋值;其中,中间变量v中的16个v元素按照第二规则划分为4组。
本实施例中,在压缩计算的过程中,采用4组v元素并行更新的实现方式,因此加快了每轮压缩计算的处理速度,进而提高了Blake2的处理速度。
本实施例中,步骤S210、S220可以但不限于通过上述实施例提供的ASIC(Application Specific Integrated Circuit,专用集成电路)芯片实现,或者通过运行程序的方式实现。通过ASIC实现时,可采用第一并行处理子单元11进行步骤S210,采用第二并行处理子单元12进行步骤S220。第一、第二并行处理子单元可以并行进行4个处理过程,每个处理过程分别对1组v元素和相应的输入块数据进行组合计算。通过运行程序的方式实现时,可以采用4个处理器核,并行运行4个线程,每个线程对1组v元素和相应的输入块数据进行组合计算。步骤S210、S220中,在进行组合计算时,可以从存储器第一存储区域保存的中间变量v中读取v元素,从存储器第二存储区域中读取输入块数据;对v元素重新赋值后可以将v元素写入第一存储区域。
本实施例中,步骤S210、S220是采用输入块数据中的不同m元素参与组合计算。
本实施例中,对于Blake2B,预定轮数为12轮;对于Blake2S,预定轮数为10轮;实现Blake2B和Blake2S时,组合计算中使用的参数也会相应不同。
本实施例中,实现Blake2的方法在进行预定轮数的压缩计算前还可以包括:先计算第一块数据的h值,并保存在存储器第三存储区域;根据h值得到初始的中间变量v,并保存在第一存储区域。进行预定轮数的压缩计算后还可以包括:采用第一存储区域中保存的中间变量v,和第三存储区域中保存的h值进行计算,得到2个200bit数据,作为Blake2的输出保存在存储器第四存储区域中。
本实施例的一种实施方式中,步骤S210可以包括:
将输入参数输入第一函数模块,输入参数包括中间变量及输入块数据中的4个m元素;第一函数模块并行的执行4个第一子过程,每个第一子过程各自对1组v元素和作为输入参数的1个m元素进行第一组合计算,并根据第一组合计算的结果对该组v元素进行第一轮重新赋值;
将输入参数输入第二函数模块,输入参数包括进行第一轮重新赋值后的中间变量,以及输入块数据中的4个m元素;第二函数模块并行的执行4个第二子过程,每个第二子过程各自对1组经过第三轮重新赋值后的v元素和作为输入参数的1个m元素进行第二组合计算,并根据第二组合计算的结果对该组v元素进行第二轮重新赋值;
其中,4个第一、第二子过程各自对应的v元素的组,是根据第一规则对中间变量v的16个v元素划分得到的;第一、第二函数输入参数中的m元素不同。
本实施方式中,在并行进行4组v元素的更新的基础上,通过先后使用两个函数来完成对按照第一规则划分出的4组v元素的第一、第二轮更新,相较于传统方案中使用4次G函数的做法,可以减少对函数的使用次数,减少读写中间变量v的次数,进一步减少了处理时间。
本实施方式中,第一函数模块和第二函数模块可以各包括4个处理模块,每个第一/第二子过程分别采用1个处理模块实现;本方案相较于传统实现方案可以减少模块数量,从而减小芯片面积,节省资源。
本实施方式的替代方案中,第一、第二函数可以采用程序实现,使用第一、第二函数即调用第一、第二函数;本方案相较于传统实现方案可以减少调用函数的次数。
本实施方式中,输入第一函数、第二函数的m元素不同;第一组合计算和第二组合计算中循环移位的位数不同。
本实施方式的替代方案中,可以使用一个函数来并行的完成4组v元素的第一、第二轮更新,该方案虽然只需要使用一次函数,但每次使用函数需要对16个v元素各自进行两次重新赋值,对存储能力的要求较高,成本因此提高。本实施方式另外的替代方案,也可以先后使用四个函数、或八个函数来实现,每个函数并行的对4组中的一半或一个v元素进行第一或第二轮更新,这样需要多次使用函数且多次读写中间变量v,会导致处理时间变长,弱化了并行处理的优势,特别是如果采用ASIC实现则模块较多,会导致资源增加,芯片面积增加,从而导致成本上升。相比之下,本实施方式中使用两个函数来实现的做法是一个可以兼顾成本和处理时间的解决方案。
本实施方式中,步骤S220可以包括:
映射模块根据预设的映射关系,在进行第二轮重新赋值后的中间变量中,分别将不同v元素的值赋值给该v元素映射到的v元素;
将输入参数输入第一函数模块,输入参数包括进行第二轮重新赋值后的中间变量,以及输入块数据中的4个m元素;第一函数模块并行的执行4个第一子过程,每个第一子过程各自对1组经过第二轮重新赋值后的v元素和作为输入参数的1个m元素进行第一组合计算,并根据第一组合计算的结果对该组v元素进行第三轮的重新赋值;
将输入参数输入第二函数模块,输入参数包括进行第三轮重新赋值后的中间变量,以及输入块数据中的4个m元素;第二函数模块并行的执行4个第二子过程,每个第二子过程各自对1组经过第三轮重新赋值后的v元素和作为输入参数的1个m元素进行第二组合计算,并根据第二组合计算的结果对该组v元素进行第四轮的重新赋值;
逆映射模块根据预设的映射关系,在进行第四轮重新赋值后的中间变量中,分别将不同v元素的值赋值给映射到该v元素的v元素。
本实施方式中,第三、第四轮重新赋值时可以复用第一、第二轮重新赋值时的第一、第二函数模块,或可以使用另外的第一、第二函数模块。
本实施方式中,使用第一函数、第二函数模块时输入的m元素互不相同,且不同于在第一、第二轮重新赋值中使用第一、第二函数时输入的m元素。
本实施方式中,首次或再次使用第一/第二函数时,均可以采用4个处理器核,并行运行4个线程,每个线程分别执行一个第一/第二子过程,执行第一/第二子过程时,从第一存储区域中读出参与组合计算的v元素,并将重新赋值后的v元素写入第一存储区域。
本实施方式中,由于对于v元素的第三、第四轮更新中,每组v元素需要按第二规则划分,而第一、第二子过程对应的v元素组是按第一规则划分的,为了能使用第一、第二函数来实现第三、第四轮更新而无需更改函数,可以先根据预设的映射关系赋值,从而使赋值后按照第一规则划分出的4组中各组所包含的4个v元素的值,和赋值前按照第二规则划分出的4组中各组所包含的4个v元素的值均相同。
比如,按照第一规则划分出的第一组为(v0, v4, v8, v12),按照第二规则划分出的第一组为(v0, v5, v10, v15);根据预设的映射关系,将v5的值赋值给v4,相当于将原先index=5的v元素调整为index=4的v元素;类似的,将v10的值赋值给v8,将v15的值赋值给v12;这样在根据映射关系赋值后,第一个第一/第二子过程提取v0、v4、v8、v12参与组合计算,实际提取到的是根据映射关系赋值前的v0、v5、v10、v15的值,其它组的情况以此类推。可见,这样可以在保持第一、第二函数模块不变的情况下,对按照第二规则划分出的第一组v元素进行组合计算和重新赋值,而无需引入新的函数模块或修改第一、第二函数模块的输入参数。
本实施方式中,在使用第一、第二函数模块进行完v元素的第三、第四轮更新后,再将不同v元素的值赋值给映射到该v元素的v元素,相当于一个还原的过程,一个逆映射的过程。比如v5映射到v4,根据预设的映射关系是将v5的值赋值给v4,然后使用第一、第二函数模块,完成后再将v4的值(即根据映射关系赋值前的v5经过第三、第四轮更新后的值)再重新赋值给v5,等于还原了v5的赋值。
本实施方式中,预设的映射关系可以为:
将index为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的v元素的值,分别赋值给index为0至15的v元素。
这样在还原时相当于是分别将index为0至15的v元素的值,赋值给index为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的v元素。
本实施方式的替代方案中,可以采用第三、第四函数来完成v元素的第三、第四轮更新;第三、第四函数中,4个子过程各自对应的v元素组是根据第二规则对中间变量v划分而来的。但这样要构造更多的函数,较为繁琐。本实施方式的另一种替代方案中,也可以在第一/第二函数的输入参数中指定每个第一/第二子过程各自对应的4个v元素的index,但由于涉及4个子过程以及16个v元素,这样会导致第一、第二函数的输入参数过多。而本实施方式采用先根据映射关系赋值,使用第一、第二函数模块后再逆映射的方式,确保了整个压缩计算过程中只需要用两种函数模块,且输入参数简单,这样可以非常便捷的实现压缩计算过程,避免繁琐的设计。
下面用一个示例说明本申请实施例的实现Blake2的方法。
本示例中,压缩计算以外的实现步骤可以同传统方案;不同之处在于,采用两个新的函数G1和G2来完成压缩计算过程,实现Blake2B;实现Blake2S的情况类似,本文不再赘述。其中,函数G1可采用专用集成电路芯片中的第一函数模块实现,函数G2可采用专用集成电路芯片中的第二函数模块实现。
其中,第一函数G1可以表示成如下形式的代码:
Function G1(v, x1, x2, x3, x4)
Return(v)
End function
一个第一子过程即上述分隔线划分出的4列代码中的1列,4列代码可以看成是表示G1函数中4个并行执行的第一子过程的代码,可以各自用一个第一处理模块实现;每一列代码各自针对一组v元素和相应的输入块数据进行第一组合计算,并更新该组v元素;其中,4组v元素是按照第一规则划分的以下4组:
(v0, v4, v8, v12)、(v1, v5, v9, v13)、(v2, v6, v10, v14)、(v3, v7, v11,v15)。
本示例中,第二函数G2可以表示成如下形式的代码:
Function G2(v, x1, x2, x3, x4)
Return(v)
End function
一个第二子过程即上述分隔线划分出的4列代码中的1列,4列代码可以看成是表示G2函数中4个并行执行的第二子过程的代码,可以各自用一个第二处理模块实现;每一列代码各自针对一组v元素和相应的输入块数据进行第二组合计算,并更新该组v元素;其中,4组v元素是按照第一规则划分的4组。
从上述代码可以看出,第一、第二组合计算的主要区别是循环右移的位数不同。
本示例中,一轮压缩计算过程如图3所示,包括以下步骤301-306:
301、使用G1函数;输入G1函数的4个m元素为输入块数据m中index为s[0]、s[2]、s[4]、s[6]的m元素;即:G1函数的输入参数x1、x2、x3、x4分别是:m[s[0]]、m[s[2]]、m[s[4]]、m[s[6]]。
s[0..15]可以通过SIGMA和压缩计算当前的轮次i得到,比如S[0..15] := SIGMA[i mod 10][0..15]。
302、使用G2函数;输入G2函数的4个m元素为输入块数据m的第s[1]、s[3]、s[5]、s[7]个m元素;即:G2函数的输入参数x1、x2、x3、x4分别是:m[s[1]]、m[s[3]]、m[s[5]]、m[s[7]] 。
本步骤中,输入G2函数的v元素是经过步骤301更新后的v元素。
其中,G2函数针对4组v元素以及4个输入的m元素,并行的进行4个第二子过程;每个第二子过程分别对一组v元素和所输入的一个m元素进行第二组合计算,并根据第二组合计算的结果对该组v元素进行更新。
上述步骤301、302可以看成是对中间变量中的16个v元素分别进行了第一、第二轮更新;其中G1 可以看成是对按照第一规则划分出的4组v元素,并行的进行G函数的前半段更新过程,G2可以看成是对按照第一规则划分出的4组v元素,并行的进行 G函数的后半段更新过程。G1和G2可以共同完成相关技术中一轮压缩计算的前4次G函数使用;可以看出,这样只需要使用2次函数,而且每次函数使用中是并行对4组v元素进行更新,因此提高了第一、第二轮更新的处理速度。
303、对中间变量v进行正变换。
步骤303具体可以包括:根据预设的映射关系,分别将不同v元素的值赋值给该v元素映射到的v元素;比如v5映射到v4,则是将v5的值赋值给v4(即:将index=5的v元素的值,赋值给index=4的v元素;也可以看成是将v5移动到index=4的位置上)。
本步骤中,是将原先index=0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14处的v元素的值,分别赋值给index=0至15的v元素。
正变换前后的变化情况如表1所示。
表1、v正变换
正变换前 | 正变换后 |
v0 | v0 |
v1 | v1 |
v2 | v2 |
v3 | v3 |
v5 | v4 |
v6 | v5 |
v7 | v6 |
v4 | v7 |
v10 | v8 |
v11 | v9 |
v8 | v10 |
v9 | v11 |
v15 | v12 |
v12 | v13 |
v13 | v14 |
v14 | v15 |
304、使用G1函数;输入G1函数的4个m元素为输入块数据m的第s[8]、s[10]、s[12]、s[14]个m元素;即:G1函数的输入参数x1、x2、x3、x4分别是m[s[8]]、m[s[10]]、m[s[12]]、m[s[14]]。
本步骤中,输入G1函数的v元素是经过步骤301、302两轮更新,并且经过步骤303的正变换的v元素。
305、使用G2函数;输入G2函数的4个m元素为输入块数据m的第s[9]、s[11]、s[13]、s[15]个m元素;即:G2函数的输入参数为x1、x2、x3、x4分别是:m[s[9]]、m[s[11]]、m[s[13]]、m[s[15]]。
本步骤中,输入G2函数的v元素是经过步骤301、302两轮更新、并经过步骤303的正变换后再次经过步骤304更新的v元素。
上述步骤304、305可以看成是对中间变量中的16个v元素分别进行了第三、第四轮更新;其中G1 可以看成是对按照第二规则划分出的4组v元素,并行的进行G函数的前半段更新过程,G2可以看成是对按照第二规则划分出的4组v元素,并行的进行 G函数的后半段更新过程。G1和G2可以共同完成相关技术中一轮压缩计算的后4次使用G函数时进行的处理;可以看出,这样只需要使用2次函数,而且每次使用函数是并行对4组v元素进行更新,因此提高了第三、第四轮更新的处理速度。
306、对中间变量v进行逆变换。
步骤306具体可以包括:按照预设的映射关系,分别将不同v元素的值赋值给映射到该v元素的v元素。步骤306可以看成是步骤303的逆操作,是对303中赋值的还原,比如v5映射到v4,步骤303中是将v5的值赋值给v4;步骤306中就是将v4的值赋值给v5(即:将index=4的v元素的值,复制给index=5的v元素,也可以看成是将v4移动到index=5的位置),等于将v5的赋值还原给v5,但注意这里还原给v5的值本身已经不同步骤303,因为经过了步骤304、305两轮重新赋值。
比如步骤303按照表1进行正变换后,在逆变换时是分别将逆变换前的index=0、1、2、3、7、4、5、6、10、11、8、9、13、14、15、12的v元素的值,赋值给逆变换后的index=0至15的v元素;即:将逆变换前的index=0至15的v元素的值,赋值给逆变换后的index=0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14处的v元素。
v逆变换前后的情况如表2所示。
表2、v逆变换
逆变换前 | 逆变换后 |
v0 | v0 |
v1 | v1 |
v2 | v2 |
v3 | v3 |
v7 | v4 |
v4 | v5 |
v5 | v6 |
v6 | v7 |
v10 | v8 |
v11 | v9 |
v8 | v10 |
v9 | v11 |
v13 | v12 |
v14 | v13 |
v15 | v14 |
v12 | v15 |
本示例中,G1、G2中每个第一子过程可以分别包括如下操作:
对组中第一个v元素与组中第二个v元素、以及输入的一个m元素进行组合计算,根据组合计算的结果对组中第一个v元素重新赋值;对于组中后三个v元素,分别根据该v元素与组中第三/第四/第一个v元素的组合计算结果重新赋值。
第一、第二子过程的区别可以在于,组合计算中进行循环移位时的位移量不同。
本示例中,Blake 2B中一轮压缩计算的过程可以用如下代码表示:
FOR i= 0 TO 11 DO
S[0..15] := SIGMA[i mod 10][0..15]
G1(v, m[s[0]], m[s[2]], m[s[4]], m[s[6]] )
G2(v, m[s[1]], m[s[3]], m[s[5]], m[s[7]] )
vc[0..15] := { v0, v1, v2, v3, v5, v6, v7, v4, v10, v11, v8, v9,v15, v12, v13, v14}
v[0..15] := vc[0..15]
G1(v, m[s[8]], m[s[10]], m[s[12]], m[s[14]] );
G2(v, m[s[9]], m[s[11]], m[s[13]], m[s[15]] );
vc[0..15] := { v0, v1, v2, v3, v7, v4, v5, v6, v10, v11, v8, v9, v13,v14, v15, v12}
v[0..15] := vc[0..15]
End FOR
本申请实施例还提供了一种区块链系统,包括:多个节点;
每个所述节点分别包括:上述实施例中实现Blake2的专用集成电路芯片。
本申请实施例还提供了一种区块链系统中的区块生成方法,如图4所示,包括步骤401-403:
401、将输入条件转换为待求解的问题;输入条件包括:最后一个区块的区块头和预设参数;
402、按照上述任一实施例的实现Blake2的方法进行预定次数的Blake2,根据Blake2得到的原始数据对问题进行求解;
403、获得的解满足预设的算法条件和难度条件则判定求解成功,生成新的区块。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
Claims (10)
1.一种实现Blake2的专用集成电路芯片,包括:压缩计算单元;其特征在于,所述压缩计算单元包括:
第一并行处理子单元,用于并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第一、第二轮重新赋值;其中,中间变量中的十六个第一元素按照第一规则划分为四组;
第二并行处理子单元,用于接收所述第一并行处理子单元输出的重新赋值后的中间变量,并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第三、第四轮重新赋值;其中,中间变量中的十六个第一元素按照第二规则划分为四组。
2.如权利要求1所述的专用集成电路芯片,其特征在于,所述第一并行处理子单元包括依次连接的:第一函数模块和第二函数模块;
所述第一函数模块包括四个并行进行第一组合计算的第一处理模块,每个第一处理模块各自用于对一组第一元素和输入的一个第二元素进行第一组合计算,并根据第一组合计算的结果对该组第一元素进行重新赋值;
所述第二函数模块包括四个并行进行第二组合计算的第二处理模块,每个第二处理模块各自用于对一组第一元素和输入的一个第二元素进行第二组合计算,并根据第二组合计算的结果对该组第一元素进行重新赋值;
其中,第一、第二函数模块所针对的四组第一元素是根据第一规则对中间变量划分得到的;所述第一、第二函数模块输入的第二元素互不相同。
3.如权利要求2所述的专用集成电路芯片,其特征在于,所述第二并行处理子单元包括:连接到所述第一并行处理子单元的映射模块、所述第一函数模块、所述第二函数模块、逆映射模块;
所述映射模块用于根据预设的映射关系,分别将不同第一元素的值赋值给该第一元素映射到的第一元素;
所述逆映射模块用于根据所述预设的映射关系,分别将不同第一元素的值赋值给映射到该第一元素的第一元素;
其中,第一、第二函数模块输入的第二元素互不相同,且不同于第一并行处理子单元中第一、第二函数模块输入的第二元素。
4.如权利要求3所述的专用集成电路芯片,其特征在于,所述映射模块根据预设的映射关系,分别将不同第一元素的值赋值给该第一元素映射到的第一元素包括:
所述映射模块将索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素的值,分别赋值给索引值为0至15的第一元素;
所述逆映射模块根据预设的映射关系,分别将不同第一元素的值赋值给映射到该第一元素的第一元素包括:
所述逆映射模块将索引值为0至15的第一元素的值,分别赋值给索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素。
5.一种实现Blake2的方法,其特征在于,所述方法应用在如权利要求1-4中任一项所述的实现Blake2的专用集成电路芯片上,所述方法包括:进行预定轮数的压缩计算,每轮压缩计算分别包括如下步骤:
所述第一并行处理子单元并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第一、第二轮重新赋值;其中,中间变量中的十六个第一元素按照第一规则划分为四组;
所述第二并行处理子单元并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第三、第四轮重新赋值;其中,中间变量中的十六个第一元素按照第二规则划分为四组。
6.如权利要求5所述的实现Blake2的方法,其特征在于,所述第一并行处理子单元包括依次连接的:第一函数模块和第二函数模块;所述并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第一、第二轮重新赋值包括:
将输入参数输入所述第一函数模块,所述输入参数包括中间变量及输入块数据中的四个第二元素;第一函数模块并行的执行四个第一子过程,每个第一子过程各自对一组第一元素和作为输入参数的一个第二元素进行第一组合计算,并根据第一组合计算的结果对该组第一元素进行第一轮重新赋值;
将输入参数输入第二函数模块,所述输入参数包括进行第一轮重新赋值后的中间变量,以及输入块数据中的四个第二元素;第二函数模块并行的执行四个第二子过程,每个第二子过程各自对一组经过第一轮重新赋值后的第一元素和作为输入参数的一个第二元素进行第二组合计算,并根据第二组合计算的结果对该组第一元素进行第二轮重新赋值;
其中,所述第一、第二子过程各自对应的第一元素的组,是根据第一规则对中间变量的十六个第一元素划分得到的;所述第一、第二函数的输入参数中的第二元素不同。
7.如权利要求6所述的实现Blake2的方法,其特征在于,所述第二并行处理子单元包括:连接到所述第一并行处理子单元的映射模块、所述第一函数模块、所述第二函数模块、逆映射模块;所述并行的对中间变量所包含的四组第一元素和相应的输入块数据进行组合计算,并根据组合计算的结果分别对所述四组第一元素进行第三、第四轮重新赋值包括:
所述映射模块根据预设的映射关系,在进行第二轮重新赋值后的中间变量中,分别将不同第一元素的值赋值给该第一元素映射到的第一元素;
将输入参数输入所述第一函数模块,所述输入参数包括所述映射模块赋值后的中间变量,以及输入块数据中的四个第二元素;第一函数模块并行的执行四个第一子过程,每个第一子过程各自对一组经过第二轮重新赋值后的第一元素和作为输入参数的一个第二元素进行第一组合计算,并根据第一组合计算的结果对该组第一元素进行第三轮重新赋值;
将输入参数输入所述第二函数模块,所述输入参数包括进行第三轮重新赋值后的中间变量,以及输入块数据中的四个第二元素;第二函数模块并行的执行四个第二子过程,每个第二子过程各自对一组经过第三轮重新赋值后的第一元素和作为输入参数的一个第二元素进行第二组合计算,并根据第二组合计算的结果对该组第一元素进行第四轮重新赋值;
所述逆映射模块根据所述预设的映射关系,在进行第四轮重新赋值后的中间变量中,分别将不同第一元素的值赋值给映射到该第一元素的第一元素;
其中,所述第一、第二函数的输入参数中的第二元素不同,且和前一次使用所述第一、第二函数时的输入参数中的第二元素不同。
8.如权利要求7所述的实现Blake2的方法,其特征在于,所述映射模块根据预设的映射关系,在进行第二轮重新赋值后的中间变量中,分别将不同第一元素的值赋值给该第一元素映射到的第一元素包括:
所述映射模块在进行第二轮重新赋值后的中间变量中,将索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素的值,分别赋值给索引值为0至15的第一元素;
所述逆映射模块根据预设的映射关系,在进行第四轮重新赋值后的中间变量中,分别将不同第一元素的值赋值给映射到该第一元素的第一元素包括:
所述逆映射模块在进行第四轮重新赋值后的中间变量中,将索引值为0至15的第一元素的值,分别赋值给索引值为0、1、2、3、5、6、7、4、10、11、8、9、15、12、13、14的第一元素。
9.一种区块链系统,包括:多个节点;
其特征在于:每个所述节点分别包括:如权利要求1-4中任一项所述的实现Blake2的专用集成电路芯片。
10.一种区块链系统中的区块生成方法,其特征在于,包括:
将输入条件转换为待求解的问题;所述输入条件包括:最后一个区块的区块头和预设参数;
按照如权利要求5-8中任一项所述的实现Blake2的方法进行预定次数的Blake2,根据Blake2得到的原始数据对所述问题进行求解;
获得的解满足预设的算法条件和难度条件则判定求解成功,生成新的区块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111279375.2A CN113722666B (zh) | 2021-11-01 | 2021-11-01 | 专用集成电路芯片及方法、区块链系统及区块生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111279375.2A CN113722666B (zh) | 2021-11-01 | 2021-11-01 | 专用集成电路芯片及方法、区块链系统及区块生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113722666A CN113722666A (zh) | 2021-11-30 |
CN113722666B true CN113722666B (zh) | 2022-02-22 |
Family
ID=78686225
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111279375.2A Active CN113722666B (zh) | 2021-11-01 | 2021-11-01 | 专用集成电路芯片及方法、区块链系统及区块生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113722666B (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104025502B (zh) * | 2011-12-22 | 2017-07-11 | 英特尔公司 | 用于处理blake安全散列算法的指令处理器、方法以及系统 |
US11349639B2 (en) * | 2018-12-28 | 2022-05-31 | ePIC Blockchain Technologies Inc. | Circuit and method for overcoming memory bottleneck of ASIC-resistant cryptographic algorithms |
CN110890120B (zh) * | 2019-10-21 | 2021-08-31 | 中国科学院计算技术研究所 | 基于阻变存储器的通用区块链应用处理加速方法及系统 |
-
2021
- 2021-11-01 CN CN202111279375.2A patent/CN113722666B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113722666A (zh) | 2021-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11301481B2 (en) | Digital currency mining circuitry having shared processing logic | |
US10560270B2 (en) | Optimal data storage configuration in a blockchain | |
US6088798A (en) | Digital signature method using an elliptic curve, a digital signature system, and a program storage medium having the digital signature method stored therein | |
US20110211688A1 (en) | Data converter, data conversion method and program | |
Hall | On the embedding of a group in a join of given groups | |
CN112015366B (zh) | 数据排序方法、数据排序装置及数据库系统 | |
JP3701969B2 (ja) | 非線形動的換字装置 | |
CN113722666B (zh) | 专用集成电路芯片及方法、区块链系统及区块生成方法 | |
US9043377B2 (en) | Montgomery inverse calculation device and method of calculating montgomery inverse using the same | |
US20240022395A1 (en) | Encryption processing device and encryption processing method | |
CN116318660B (zh) | 一种消息扩展与压缩方法及相关装置 | |
CN114760055B (zh) | 基于梅森素数的秘密分享方法、系统、存储介质及设备 | |
JP5113833B2 (ja) | 中央演算処理装置の演算能力を高めるための暗号方法および暗号装置 | |
De Loera et al. | Weak orientability of matroids and polynomial equations | |
CN113792511B (zh) | 一种高计算准确度、低硬件开销单变量随机电路及其配置方法 | |
TW202024907A (zh) | 資料處理 | |
CN113721888B (zh) | 一种Equihash算法的数据处理方法及装置 | |
US9246681B2 (en) | Use of 32-bit random numbers to produce cipher key stream for 8-bit data stream | |
CN113434299B (zh) | 基于MapReduce框架的编码分布式计算方法 | |
CN111857651B (zh) | 用多比特加法器并行进行多个少比特加法的方法及应用 | |
CN114666011B (zh) | 一种数据处理方法、装置及电子设备 | |
CN107682121B (zh) | 一种编码方法及装置 | |
TWI517073B (zh) | 大量股票排序之群體決策方法 | |
Kaper et al. | The Composite Two-Step. | |
Desmedt¹ et al. | Check for |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240318 Address after: 10 Jialeng Road, Singapore # 09-11 Patentee after: Shenglong (Singapore) Pte. Ltd. Country or region after: Singapore Address before: 1605, floor 16, No. 9, North Fourth Ring West Road, Haidian District, Beijing 100080 Patentee before: SUNLUNE TECHNOLOGY DEVELOPMENT (BEIJING) Co.,Ltd. Country or region before: China |