基于国密算法的零知识证明系统的制作方法

摘要: 本发明涉及密码学与零知识证明,具体涉及一种基于国密算法的零知识证明系统,尤其涉及依据国家标准将sm3密码杂凑算法与sm2数字签名验签算法完整算术化、电路化并在s...
基于国密算法的零知识证明系统的制作方法

本发明涉及密码学与零知识证明,具体涉及一种基于国密算法的零知识证明系统,尤其涉及依据国家标准将 sm3 密码杂凑算法与 sm2 数字签名验签算法完整算术化、电路化并在 stark 框架下实现零知识证明的方法与系统。

背景技术:

1、零知识证明技术允许证明方向验证方证明某一论断的正确性而不泄露论断背后的秘密信息,是隐私计算、数据可信流转、区块链、数字身份等领域的基础性密码技术。stark(可扩展透明知识论证,scalable transparent argument of knowledge)类论证系统无需可信设置,其证明规模与验证开销随计算规模近对数增长,适合证明复杂计算的正确执行(参见:ben-sasson 等,"scalable, transparent, and post-quantum securecomputational integrity",iacr eprint 2018/046)。

2、现有零知识证明系统的电路化对象主要集中于国际通用密码算法,例如 sha 系列杂凑算法、nist 标准椭圆曲线等。而对于我国商用密码体系中的 sm3 密码杂凑算法(gb/t 32905-2016《信息安全技术 sm3密码杂凑算法》)与 sm2 数字签名算法(gb/t 32918《信息安全技术 sm2椭圆曲线公钥密码算法》系列标准,包含第1至第5部分),现有技术存在如下长期未解决的难题:

3、(1)sm3 算法的压缩函数混合了循环移位、异或、模加、布尔函数等多种运算,其中循环移位与异或在素数域上的直接算术化代价极高,若采用查表方式电路化则约束语义与国标条文脱节,且需引入查找表论证组件,证明规模显著膨胀;

4、(2)sm2 算法涉及 256 位大整数素域运算与椭圆曲线点运算,大整数模乘在素数域内无法直接表达(中间乘积超出域模数),现有技术或采用比特分解导致电路行数膨胀,或采用未经完备性论证的近似约束,存在"欠约束"(under-constrained)安全风险,即约束条件与真实算法悄然偏离而无法被发现;

5、(3)现有技术中缺乏"电路约束与国家标准条文逐条对应"的可审计映射机制,难以满足商用密码合规审查对算法实现可追溯、可验证的要求;

6、(4)现有技术中证明生成端的配置参数(如安全强度参数)往往存在默认值,一旦被误用会静默产出低安全强度的证明,且验证端信任客户端传入的参数,存在"客户端谎报参数"的攻击面。

7、因此,如何在零知识证明体系中完整、忠实、可审计地实现国密 sm3、sm2 算法,并工程化地保证证明的生成与验证两端在安全参数上严格一致、不可被降级利用,是本领域亟待解决的技术问题。

技术实现思路

1、针对现有技术的上述缺陷,本发明提供一种基于国密算法的零知识证明系统,其要解决的技术问题是:将国密 sm3、sm2 算法依据国家标准逐条算术化为电路约束并在stark框架下实现,保证电路约束与国家标准的忠实对应与可审计性,同时通过金标准双轨校验、前置合规拦截与验证端安全参数下限强制,杜绝欠约束电路与参数降级攻击。

2、为解决上述技术问题,本发明提供一种基于国密算法的零知识证明方法,包括以下步骤:

3、接收业务输入数据,所述业务输入数据至少包含待证明消息、签名数据与公钥数据中的一种;

4、以国密算法的原生实现作为金标准,对所述业务输入数据进行预计算并生成见证数据,同时对所述业务输入数据进行合规性前置校验;所述国密算法包括依据国家标准gb/t 32905-2016《信息安全技术 sm3密码杂凑算法》 实现的 sm3 密码杂凑算法与依据国家标准 gb/t 32918《信息安全技术 sm2椭圆曲线公钥密码算法》系列标准(包含第1至第5部分) 实现的 sm2 数字签名验签算法;所述合规性前置校验未通过时拒绝进入证明生成流程;

5、依据国标条文将国密算法的运算过程逐条算术化为电路约束,包括:将 sm3 杂凑算法的消息填充、消息扩展、压缩函数及 merkle-damgård 链式结构编译为第一电路约束组,将 sm2 验签过程的素域运算、椭圆曲线点运算、双标量乘运算及验签等式编译为第二电路约束组;

6、基于所述见证数据生成满足所述电路约束的见证轨迹,所述见证轨迹的求值结果与所述金标准的计算结果逐位一致;

7、基于所述见证轨迹与所述电路约束,在stark框架下生成零知识证明,并将所述零知识证明与验证上下文封装为自描述证明包;

8、验证端解析所述自描述证明包,依据所述证明包内携带的验证上下文重建验证配置,强制校验安全参数不低于预设下限后,对所述零知识证明执行验证。

9、进一步地,所述第一电路约束组中,sm3 压缩函数的状态量、消息窗口及中间量采用布尔位表示与低位分解表示混合的列布局,其中异或、循环移位类位运算在位级直接约束,模加运算切换至低位分解表示并设置显式进位列约束;每个消息块对应与轮数一致的预设行数轨迹行,跨行递推约束消息扩展的滑动窗口,且轨迹补齐至 2 的幂所引入的填充行通过活跃列门控约束使其不参与杂凑语义;末活跃行的压缩结果被约束为等于多个公开低位分解值,所述多个公开值即sm3杂凑值本身。

10、进一步地,所述第二电路约束组按自底向上的芯片化方式编译,包括:将 sm2 素域上的模乘、模加、模减运算编译为单行域运算电路,模乘采用字节低位分解卷积并以有符号进位偏移编码防止素数域回绕,同时以商见证与余数见证约束模归约的完备性;将jacobian坐标下的点倍与点加运算编译为单行全展开的点运算电路;将 sm2 验签中的双标量乘 [s]g+[t]pa 编译为按位扫描的标量乘链电路,其中 g 为基点、pa 为公钥点、s 与t 为验签标量,并以偏移点技术消除无穷远点分支,使每行执行倍点与按位选择加点,标量乘链的末端输出经仿射归一化电路还原出 x 坐标;将验签等式编译为包含标量区间检查、t 值非零检查与验签等式成立检查的验签等式电路。

11、进一步地,所述合规性前置校验为:在生成证明之前,以所述金标准对所述签名数据执行完整验签,验签不通过时直接终止并返回失败,使无效签名不进入任何电路求值流程。

12、进一步地,所述 stark 框架下生成零知识证明包括:将所述电路约束与所述见证轨迹提交至 stark 证明系统,所述 stark 证明系统以小特征素数域及所述素数域的四次代数扩张挑战域承载算术化,以算术化友好杂凑构造承诺与挑战,经低度扩展、多项式承诺与 fiat-shamir 变换生成证明;所述电路约束、所述见证轨迹与所述 stark 证明系统的配置互相解耦,配置更换不触及电路层。

13、进一步地,所述自描述证明包至少包含:证明数据、公开输入、消息长度、版本标识、时间戳与配置版本号;所述验证端仅依据所述配置版本号重建验证配置,对未知配置版本号回退至生产默认配置并告警;所述配置版本号对应的安全参数满足预配置的强制下限,所述强制下限包括查询数下限、证明工作量下限与低度扩展倍数下限。

14、进一步地,所述 sm2 验签的零知识证明采用组合式证明与显式绑定:以标量乘链电路生成第一子证明,以仿射归一化电路生成第二子证明,以验签等式电路生成第三子证明;将第一子证明、第二子证明与第三子证明的公开值在电路外执行等值绑定检查,所述绑定检查包括标量一致性绑定、基点绑定、点值传递一致性绑定与 x 坐标闭环绑定,全部绑定检查通过后,将三个子证明及其绑定结果封装为合取等价于国家标准验签算法全文的组合证明包。

15、进一步地,还包括金标准双轨对拍校验:在证明生成阶段对每一组所述电路约束执行完备性校验,所述完备性校验为对所述电路约束的约束条件施加负面篡改后所述见证轨迹被拒绝求值的校验,且所述见证轨迹的求值结果与所述金标准的计算结果逐位一致,使每条电路约束均具备正面一致性证据与负面篡改拒绝证据。

16、进一步地,所述验证配置的生成侧不提供默认配置,所述配置的安全参数须由调用方显式指定;所述验证端对所述证明包内重建的配置强制校验安全参数下限,使低于下限的配置无法通过验证。

17、本发明还提供一种基于国密算法的零知识证明系统,包括:输入校验模块,用于接收并校验业务输入数据;金标准计算模块,用于以国密算法的原生实现作为金标准预计算见证数据并执行合规性前置校验;电路化模块,用于依据国标条文将国密算法的运算过程逐条算术化为第一电路约束组与第二电路约束组;见证轨迹生成模块,用于生成与金标准计算结果逐位一致的见证轨迹;证明生成模块,用于在 stark 框架下生成零知识证明并封装为自描述证明包;验证模块,用于依据证明包内携带的验证上下文重建验证配置、强制校验安全参数下限并执行验证。

18、与现有技术相比,本发明具有如下有益效果:

19、(1)首次实现国密 sm3、sm2 算法在零知识证明体系中的完整电路化:sm3 的消息填充、消息扩展、压缩函数与 merkle-damgård 链式结构,sm2 的素域运算、点运算、双标量乘与验签等式均被编译为电路约束,电路约束与国家标准条文逐条对应,形成可审计的"约束—条文"映射,满足商用密码合规审查对算法实现可追溯、可验证的要求;

20、(2)通过金标准双轨制消除欠约束风险:原生实现作为对拍金标准,见证轨迹求值结果与金标准逐位一致,且每条电路约束均配负面篡改测试,将"电路约束与真实算法悄然偏离"这一零知识证明工程中最凶险的风险转化为可机械验证的等式,安全审计攻击面被切割为"电路自身正确"与"绑定关系完备"两个独立可验证命题;

21、(3)通过合规性前置校验实现"绝不为假命题产出证明":无效签名在进入任何电路求值之前即被原生验签拦截并拒绝,杜绝了为无效数据生成证明的计算浪费与语义污染;

22、(4)通过自描述证明包与版本化配置实现生成/验证两端的单一契约:验证端只认证明包内携带的配置版本号重建配置,消除"客户端谎报参数"攻击面;生成侧配置无默认值、验证端强制安全参数下限,从编译期与运行期两级杜绝低安全强度证明的静默产出;

23、(5)通过组合式证明与显式绑定实现验签全链路的电路化等价:以多张专用电路加公开值绑定检查替代难以审计的巨型电路,每个子电路可独立测试、独立审计、独立复用,合取后的证明命题恰好等价于国家标准验签算法全文。