铜锁 Bulletproofs Range 使用教程

图片

文|王祖熙(花名:金九)

蚂蚁集团开发工程师
负责国产化密码库 Tongsuo 的开发和维护专注于密码学、高性能网络、网络安全等领域

本文 5316 字 阅读 12 分钟

背景

在许多应用场景中,当需要证明一个值满足特定的范围条件、又不希望透露该值的具体大小时,传统的证明方法可能需要暴露更多的信息。而范围证明可以提供一种更高效、更隐私保护的方式来实现这一目标。

Bulletproofs Range Proof (范围证明) 就是这样一种高效的范围证明技术,Range Proof 也是 Bulletproofs 算法的一个重要应用,用于证明一个值位于指定的范围内:[0,2n-1] (n 为指数,是 Range Proof 的重要参数)

在加密货币交易中,范围证明可以用于证明交易金额在特定范围内,以确保交易的合法性和保护用户隐私,这可以防止恶意用户创建无效的交易或泄露敏感的交易金额信息。而 Bulletproofs 具有 Proof 较小的特点,可以大大减小交易成本。以下是一些使用 Bulletproofs 的区块链项目:

  • Monero:Monero (门罗币) 是一种基于隐私的加密货币,它使用了 Bulletproofs 技术来实现交易的隐私和匿名性。Bulletproofs 可以帮助减小 Monero 交易的大小,提高交易的效率,并保护用户的隐私。

  • Grin:Grin 是一种基于 MimbleWimble 协议的加密货币,它使用了 Bulletproofs 技术来实现交易的隐私和可扩展性。Bulletproofs 在 Grin 中被用于构建零知识证明,以验证交易的有效性和保护用户的隐私。

  • Zcoin:Zcoin 是一种基于零知识证明的隐私加密货币,它使用了 Bulletproofs 技术来改进其零知识证明方案。Bulletproofs 可以帮助 Zcoin 实现更高效和更紧凑的证明,提高隐私保护的性能。

Bulletproofs 的零知识证明和范围证明特性使其成为提高区块链隐私和性能的有力工具,因此在隐私保护和可扩展性方面具有广泛的应用潜力。

命令行

公共参数 (-ppgen/-pp)

生成公共参数
$ tongsuo bulletproofs -ppgen -out ./pp.pem -curve_name sm2 -gens_capacity 16 -party_capacity 4

参数说明:

  • 其中 bulletproofstongsuo 的子命令:bulletproofs 功能,不再赘述
  • -ppgen:是 bulletproofs 的子命令,指公共参数的生成,pppub_param 的缩写,gengenerate 的缩写
  • -out:输出文件路径
  • -curve_name:椭圆曲线名称
  • -gens_capacity:椭圆曲线点生成器的容量,对于 Range Proof 来说,该数是 Range 的比特位数。这里是 16 位,也就是证明的范围为:[0,216-1],即[0,65535]
  • -party_capacity:可以生成聚合证明的最大参与方数量,仅对 Range Proof 有效,也就是批量范围证明的最大个数。这里是 4,也就是最多只能批量证明或验证 4 个数

文本显示公共参数

-pp 是用来显示公共参数的子命令。

$ tongsuo bulletproofs -pp -in ./pp.pem -text -noout
Bulletproofs Public Parameter:
curve: SM2 (1172)
gens_capacity: 16
party_capacity: 4
G[n]:
    [0]: 02:b2:83:7e:13:99:e9:d7:93:57:8d:11:4a:e7:f1:01:66:0b:b2:7b:d9:2e:a4:c7:8a:bf:a6:10:89:0c:c6:93:e9
    [1]: 02:7e:44:85:96:15:53:db:f2:72:66:c5:af:b6:4d:d2:1b:f0:b7:aa:3a:f2:3a:14:fd:99:2c:e0:5d:56:26:2e:fb
    [2]: 02:81:57:f9:d5:38:f2:11:16:f4:a1:45:60:8e:50:da:31:2d:6a:c8:fa:19:d3:36:90:66:01:14:2c:14:53:0b:f0
    [3]: 03:20:46:61:ea:ff:68:49:a3:e3:d9:d5:3b:6a:a0:22:c4:78:47:c1:d0:1b:08:d7:42:8b:c9:19:d1:a8:f5:e5:18
    # 太长了,中间省略了 #
    [60]: 03:a7:b9:80:6f:ff:7d:30:6e:86:9d:d4:e0:cd:52:ee:cc:10:7e:0d:0e:6e:26:25:ae:bb:5d:48:b3:43:c0:4a:a0
    [61]: 03:4a:b8:07:7f:44:49:b2:0e:b9:26:4e:56:97:76:89:57:22:e7:34:3d:c2:e1:d9:57:a3:73:0d:dd:49:79:19:f0
    [62]: 03:9f:24:5c:30:a8:6d:08:75:8a:4c:79:04:f0:e5:41:b7:3d:41:84:71:51:77:8e:41:36:4a:9b:b6:24:bb:26:73
    [63]: 03:97:c7:a6:45:70:19:a2:ae:ff:52:fa:1c:c7:f2:e6:a0:dd:91:fd:e8:97:d8:c2:9b:4e:41:a4:9c:17:73:63:8b
H[n]:
    [0]: 03:0a:b0:b0:4c:09:7f:ec:e2:a8:41:c0:fc:75:ad:f3:02:cf:af:6a:77:a7:96:35:d8:ce:8b:6a:4b:02:a3:8c:49
    [1]: 02:5e:1d:90:be:23:90:a9:a6:02:b2:9f:b2:07:70:eb:f5:d3:0d:93:65:bd:ac:60:21:50:cc:d2:05:29:29:9d:5d
    [2]: 03:3c:d3:ef:45:77:e1:0d:e4:51:6e:73:ae:61:04:fc:6a:8d:f1:69:a6:9e:ca:d8:c4:bb:63:4c:37:c6:30:c9:05
    [3]: 03:b1:1d:fb:e0:f3:1f:33:a1:12:cf:58:0b:2c:a4:13:68:7f:42:57:98:f4:3d:0f:0c:88:98:f7:31:0e:e7:35:27
    # 太长了,中间省略了 #
    [60]: 02:bc:b6:19:81:7e:53:21:f0:b9:00:fe:b2:77:47:4c:e5:d8:f4:57:43:d0:5a:52:ba:78:59:6c:e6:00:78:23:04
    [61]: 03:cd:c2:e8:fc:27:0b:2c:af:6b:39:d7:c0:7b:2a:58:61:dd:36:8e:72:3d:6c:c1:1f:b0:12:3e:9d:78:c3:7b:cd
    [62]: 03:27:53:ec:07:b8:05:fe:24:5f:77:1d:62:c1:32:8f:75:8b:1e:bc:4f:92:ca:02:c1:ef:26:73:b3:c7:41:83:32
    [63]: 02:f0:7c:60:03:68:41:08:27:6b:d8:0b:f1:37:ba:0f:68:ac:33:f9:2b:4d:b6:74:d7:21:9f:7b:73:4c:8c:2e:90
U: 03:34:aa:13:0f:76:92:8d:33:1f:62:00:70:ff:04:86:08:9c:c7:3b:77:66:af:77:59:ce:d9:69:66:86:60:db:24
H: 02:e5:21:75:20:47:fb:c2:76:c2:86:3c:10:e0:4c:1e:72:66:26:7b:3d:5d:ac:5b:a0:de:ab:11:d3:56:bd:fc:f1

如上结果所示,G[n]H[n] 就是随机生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值