一种sha256哈希算法零知识证明电路的合成加速方法及装置
阅读说明:本技术 一种sha256哈希算法零知识证明电路的合成加速方法及装置 (Synthesis acceleration method and device of SHA256 Hash algorithm zero-knowledge proof circuit ) 是由 李星 夏坤贤 张守恒 于 2021-09-13 设计创作,主要内容包括:本发明实施例公开了一种SHA256哈希算法零知识证明电路的合成加速方法及装置,预生成电路变量约束关系表,根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速。利用32位无符号整数算术运算的速度优势,可以将SHA256证明电路合成的时间降低到原来的1/3左右,通过对哈希计算的零知识证明加速可进一步实现对数据安全以及数据一致性的有效验证。(The embodiment of the invention discloses a synthesis acceleration method and a synthesis acceleration device for a SHA256 Hash algorithm zero knowledge proof circuit, wherein a circuit variable constraint relation table is pre-generated, and the synthesis acceleration of the proof circuit is completed by utilizing a 32-bit unsigned integer arithmetic operation output variable array and a constraint vector value according to the circuit variable constraint relation table. By utilizing the speed advantage of 32-bit unsigned integer arithmetic, the synthesis time of the SHA256 proof circuit can be reduced to about 1/3 of the original time, and effective verification on data safety and data consistency can be further realized by zero knowledge proof acceleration of hash calculation.)
技术领域
本发明实施例涉及数据安全技术领域,具体涉及一种SHA256哈希算法零知识证明电路的合成加速方法及装置。
背景技术
SHA256哈希算法是经典的哈希算法,能将任意长度的数据转换成固定长度的数据。SHA256哈希算法具有很强的抗碰撞性,并且不可逆。在数据签名、数据一致性、隐私保护、用户密码保护等方面,SHA哈希算法应用广泛。零知识证明是一种在不泄露数据本身的情况下,证明该数据满足某些性质的密码学技术。在一些场景,除了SHA256哈希计算结果外,可以通过零知识证明生成SHA256哈希计算的证明。比如说隐私保护的场景下,在不透露原始数据的情况下,能证明SHA256哈希计算的结果正确。此外,SHA256哈希计算的证明在区块链行业也有比较好的应用。比如Filecoin项目,通过提供SHA256计算的证明,能不提供原始数据的情况下证明数据的存在性。
SHA256的计算过程可以分成两个部分:1、输入数据扩展,2、64轮数据的迭代计算。每一次迭代的输出是下一次迭代输入,迭代算法本身是固定的。传统SHA256证明电路构造是按照SHA256的计算过程一步步的生成对应的约束。输入扩展会增加一些变量,这些变量的约束关系满足输入扩展算法,接着,针对64轮的迭代运算,每一次迭代都是一个个的约束按照迭代算法依次构建,耗费时间长,不利于数据安全以及数据一致性的有效验证。
发明内容
为此,本发明实施例提供一种SHA256哈希算法零知识证明电路的合成加速方法及装置,通过对哈希计算的零知识证明加速可进一步实现对数据安全以及数据一致性的有效验证。
为了实现上述目的,本发明实施例提供如下技术方案:
根据本发明实施例的第一方面,提出了一种SHA256哈希算法零知识证明电路的合成加速方法,所述方法包括:
预生成电路变量约束关系表;
根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速。
进一步的,预生成电路变量约束关系表,具体包括:
所述变量约束关系表中记录了布尔变量与SHA256计算过程中SHA256中间值的映射关系以及约束向量与变量数组的映射关系,所述SHA256中间值的类型为32位无符号整数。
进一步的,根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速,具体包括:
根据变量与SHA256中间值的映射关系以及输入的SHA256中间值,输出变量数组。
进一步的,根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速,具体包括:
根据所述约束向量与变量数组的映射关系以及并输入获得的所述变量数组,输出约束向量的值。
根据本发明实施例的第二方面,提出了一种SHA256哈希算法零知识证明电路的合成加速装置,所述装置包括:
预运算模块,用于预生成电路变量约束关系表;
参数运算模块,用于根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速。
进一步的,所述预运算模块具体用于:
所述变量约束关系表中记录了布尔变量与SHA256计算过程中SHA256中间值的映射关系以及约束向量与变量数组的映射关系,所述SHA256中间值的类型为32位无符号整数。
进一步的,所述参数运算模块具体用于:
根据变量与SHA256中间值的映射关系以及输入的SHA256中间值,输出变量数组。
进一步的,所述参数运算模块具体还用于:
根据所述约束向量与变量数组的映射关系以及并输入获得的所述变量数组,输出约束向量的值。
根据本发明实施例的第三方面,提出了一种计算机存储介质,所述计算机存储介质中包含一个或多个程序指令,所述一个或多个程序指令用于被一种SHA256哈希算法零知识证明电路的合成加速装置执行如上任一项所述的合成加速方法。
本发明实施例具有如下优点:
本发明实施例提出的一种SHA256哈希算法零知识证明电路的合成加速方法及装置,预生成电路变量约束关系表,根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速。利用32位无符号整数算术运算的速度优势,可以将SHA256证明电路合成的时间降低到原来的1/3左右,通过对哈希计算的零知识证明加速可进一步实现对数据安全以及数据一致性的有效验证。
附图说明
为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。
图1为本发明实施例1提供的一种SHA256哈希算法零知识证明电路的合成加速方法的流程示意图;
图2为SHA256哈希算法零知识证明原理图;
图3为SHA256传统哈希零知识证明电路的合成过程;
图4为本发明实施例1提供的一种SHA256哈希算法零知识证明电路的合成过程;
图5为本发明实施例1提供的一种SHA256哈希算法零知识证明电路的合成加速方法的运算流程图。
具体实施方式
以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
如图1所示,本实施例提出了一种SHA256哈希算法零知识证明电路的合成加速方法,所述方法包括:
S100、预生成电路变量约束关系表;
S200、根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速。
其中,SHA256算法的计算过程由一系列更简单的运算组成,每一个中间运算都有输入、输出。我们将这些中间运算的输入、输出进行编号,这些就是我们所说的“变量”。
进一步的,预生成电路变量约束关系表,具体包括:
所述变量约束关系表中记录了布尔变量与SHA256计算过程中SHA256中间值的映射关系以及约束向量与变量数组的映射关系,所述SHA256中间值的类型为32位无符号整数。
进一步的,根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速,具体包括:
根据变量与SHA256中间值的映射关系以及输入的SHA256中间值,输出变量数组。
进一步的,根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速,具体包括:
根据所述约束向量与变量数组的映射关系以及并输入获得的所述变量数组,输出约束向量的值。
传统sha256电路构造是按照sha256的计算过程一步步的生成对应的约束。输入扩展会增加一些变量,这些变量的约束关系满足输入扩展算法。接着,针对64轮的迭代运算,每一次迭代都是一个个的约束按照迭代算法依次构建,如图2和图3。事实上,这些电路的变量以及约束是存在固定关系(由sha256算法决定)。如果在这些关系已知的情况下,电路约束的构造可以从关系表构造,而不再需要一步步地按照计算构造生成。电路约束的关系表可以提前生成,再具体电路约束生成时直接使用,如图4所示。
在本方法中,将SHA256证明电路合成分成两个阶段:
1、预计算阶段;
2、变量vars与向量的计算。
在我们的场景中(零知识证明技术),逻辑电路的功能,是通过一组多元二次方程来表示的。比如:亦或(XOR),x\xor y=z,我们用x+y-z=(2*x)*y来描述,x,y,z是变量,约束值a,b,c为2*x:a,y:b,x+y-z:c。
具体的,利用对SHA256函数进行的预计算,得到组信息。再利用这信息,如图5所示,将SHA256电路合成分成三步:
1.计算SHA256 words;
2.利用var_map辅助计算SHA256证明电路中的所有boolean变量vars的值;
3.利用r1cs_a_map,r1cs_b_map,r1cs_c_map以及在第步计算出的vars计算得到三组向量。
其中,SHA256计算过程中的中间结果都是长为32-bit的数据,在这里简称为SHA256 words(1word=32-bit data);var_map是预计算出来的一个关系表,记录了“变量的值”与“SHA256中间结果”之间的关系;r1cs_a_map:预计算出来的一个关系表,记录了线性组合关系式a_i=\sum Aij*xj。由于SHA256电路的特殊性,A_ij、xj均为布尔值(0/1)。
1.预计算阶段
在这个阶段,我们要对SHA256函数进行处理。SHA256函数的基本运算单元是32bits,所进行的计算类型可分为以下三种:
移位:循环右移,循环左移
·bit操作:not,and,xor
·整数加法
预计算的结果是输出boolean变量与SHA256 words之间的联系,使得boolean变量的值可以通过SHA256 words计算得到。
·VAR_MAP
var_map:var_idx->(word_idx,bit_idx,is_not),类型声明为int->(int,int,bool)。
如果is_not=true,那么vars[var_idx]=!words[word_idx][bit_idx];
如果is_not=false,那么vars[var_idx]=words[word_idx][bit_idx]。
具体为:遍历var_map这个映射表,根据表中每一行的四元组(var_idx,word_idx,bit_idx,is_not),将vars数组中下标为var_idx的元素的值置为words数组中下标为word_idx的元素的第bit_idx个比特,若is_not=true,则将该位置的值再取反赋值。
·R1CS_MAP
r1cs_a_map:cs_idx->vector<(sign,w,var_idx)>,类型声明为int->(int,int,int)。
a=\sum(-1)^sign 2^w*vars[var_idx]
r1cs_b_map定义与r1cs_a_map类似;
r1cs_c_map定义与r1cs_a_map类似。
具体为:遍历r1cs_a_map这个映射表,根据表中每一行由一个整数cs_idx和一个包含三元组(sign,w,var_idx)的数组组成。首先,计算一个数组arr,它的每一项等于(-1)^sign*2^w*vars[var_idx];然后求和,最后将a数组中下标为cs_idx的元素的值置为上一步计算得到的和。
这三种基本计算的处理是不同的:
·移位:只增加个word,不增加变量,不增加约束向量;
·bit操作:增加个word,且增加32个boolean变量;
以下为通过预计算得到表r1cs_a_map的具体过程:
c=and(a,b)
r1cs_a_map中增加(cs_idx,[(0,0,idx_a)])
r1cs_b_map中增加(cs_idx,[(0,0,idx_b)])
r1cs_c_map中增加(cs_idx,[(0,0,idx_c)])
c=xor(a,b)
r1cs_a_map中增加(cs_idx,[(0,1,idx_a)])
r1cs_b_map中增加(cs_idx,[(0,0,idx_b)])
r1cs_c_map中增加(cs_idx,[(0,0,idx_a),(0,0,idx_b),(1,0,idx_c)]
·整数加法(ret=a1+a2+...+an):增加两个word,且增加至少32个boolean变量,增加至少32个boolean约束,个形式为(\sum a1_bits[i]*2^i+a2_bits[i]*2^i+...+an_bits[i]*2^i)*1=(\sum res[j]*2^j)的约束。
r1cs_a_map中增加(cs_idx,[(0,0,a1_bits[0]),...,(0,31,a1_bits[31]),...,(0,0,an_bits[0]),...,(0,31,an_bits[31])])
r1cs_b_map中增加(cs_idx,[(0,0,0)])
r1cs_c_map中增加(cs_idx,[(0,0,res[0]),...,(0,31,res[31]),...])
2.计算阶段
2.1计算vars
算法输入是
·预计算阶段得到的var_map:int->(int,int,bool)
·SHA256 words
算法步骤是:
1.初始化数组vars=[];
2.遍历var_map的每个key-value项,(var_idx,(word_idx,bit_idx,is_not))b=(words[word_idx]>>(bit_idx))&1;
如果b==0,令bit=false;否则令bit=true;
如果is_not==true,令vars[var_idx]=bit;
否则令vars[var_idx]=!bit.
3.输出数组vars
2.2计算a
算法输入是:
·预计算阶段计算得出的r1cs_a_map:int->vector<(int,int,int)>
·2.1中所计算得出的数组vars
算法流程为:
1.初始化数组a=[];
2.遍历r1cs_a_map的每个key-value项,(cs_idx,vector<(sign,w,var_idx)>)
初始化a[cs_idx]=0;
遍历数组中的每项(sign,w,var_idx)
如果sign==1,令coeff=(1<<w)*vars[var_idx];
否则令coeff=-(1<<w)*vars[var_idx];
a[cs_idx]+=coeff;
3.输出数组a.
2.3计算b
算法输入为:
·预计算阶段计算得出的r1cs_b_map:int->vector<(int,int,int)>
·2.1中所计算得出的数组vars
计算过程与2.2节相同。
2.4计算c
算法输入为:
·预计算阶段计算得出的r1cs_c_map:int->vector<(int,int,int)>
·2.1中所计算得出的数组vars
计算过程与2.2相同。
现有技术中,实现SHA256电路合成(circuit synthesis),变量的值是通过有限域上的加法与乘法进行计算得到,约束向量也是通过有限域算术运算计算得到,本实施例通过提出个新方法来,无需做有限域计算,利用预运算关系表,将有限域上的算术运算转换成32位无符号整数的算术运算,利用32位无符号整数算术运算的速度优势,可以将SHA256电路合成的时间降低到原来的1/3左右。
实施例2
与上述实施例1相对应的,本实施例提出了一种SHA256哈希算法零知识证明电路的合成加速装置,所述装置包括:
预运算模块,用于预生成电路变量约束关系表;
参数运算模块,用于根据所述电路变量约束关系表,利用32位无符号整数算术运算输出变量数组以及约束向量值完成证明电路的合成加速。
进一步的,所述预运算模块具体用于:
所述变量约束关系表中记录了布尔变量与SHA256计算过程中SHA256中间值的映射关系以及约束向量与变量数组的映射关系,所述SHA256中间值的类型为32位无符号整数。
进一步的,所述参数运算模块具体用于:
根据变量与SHA256中间值的映射关系以及输入的SHA256中间值,输出变量数组。
进一步的,所述参数运算模块具体还用于:
根据所述约束向量与变量数组的映射关系以及并输入获得的所述变量数组,输出约束向量的值。
本发明实施例提供的一种SHA256哈希算法零知识证明电路的合成加速装置中各部件所执行的功能均已在上述实施例1中做了详细介绍,因此这里不做过多赘述。
实施例3
与上述实施例相对应的,本实施例提出了一种计算机存储介质,计算机存储介质中包含一个或多个程序指令,一个或多个程序指令用于被一种SHA256哈希算法零知识证明电路的合成加速装置执行如实施例1的方法。
虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。