密码学承诺之原理和应用 - sigma承诺

news/2024/9/27 23:26:58

微信公众号:密码应用技术实战
博客园首页:https://www.cnblogs.com/informatics/
GIT地址:https://github.com/warm3snow

简介

在上一篇文章《密码学承诺之原理和应用 - 概览》中,我们详细介绍了常见的密码学承诺原理,本节我们将重点介绍Sigma承诺的实现和应用。

Sigma承诺

Sigma承诺是一种特殊的承诺方案,允许发送方向接收方证明自己拥有某个明文,而不透露明文的具体内容。零知识证明承诺方案根据在证明阶段是否交互可以分为:

  • 交互式零知识证明承诺:发送方和接收方之间需要交互,发送方向接收方发送证明,接收方验证证明。
  • 非交互式零知识证明承诺:发送方可以在不与接收方交互的情况下生成证明,接收方可以验证证明。

本篇文章我们主要针对非交互式Sigma承诺进行详细介绍。

Sigma承诺的构造

非交互式Sigma承诺的构造基于Fiat-Shamir heuristic,具体流程如下:

image

  • [01] 计算承诺:Sender选取随机数\(r\),并生成承诺\(C = r.G\);
  • [02] 计算挑战:Sender计算挑战\(e = H(Q, C)\),并计算证明\(z = r + e.m\);
  • [03] 发送(e, z):Sender发送挑战\(e\)和证明\(z\)给Receiver;
  • [04] 验证:Receiver计算\(A = z.G - e.Q\),并验证\(e == H(Q, A)\)

值得注意的是,Sigma承诺方案与ECDSA签名方案很像,实际上数字签名方案就是一种Sigma承诺方案变体。

Sigma承诺证明

正确性证明

\[z.G = (r + e.m).G = r.G + e.m.G = C + e.Q \]

\[A = z.G - e.Q = C \]

\[H(Q, A) = H(Q, C) = e \]

因此接收方收到的\((e,z)\)满足验证验证等式,因此按照Sigma承诺协议流程,验证方Receiver可以正确验证

隐藏性证明

非严格证明,由于Receiver仅知道\((e,z,G,Q)\),根据离散对数问题的困难性假设,Receiver无法计算出\(m\)的值,保证了承诺的隐藏性。

绑定性证明

假设Receiver可以找到不同的\((r_1, m_1)\),使得\(e_1 = H(Q, A_1)\),则有:

\[A_1 = z_1.G - e_1.Q_1 = r_1.G + e_1.Q_1 - e_1.Q_1 = r_1.G = C_1 \]

\[e_1 = H(Q, A_1) = H(Q, C_1) \]

而实际上根据\(e_1\)的计算公式,\(e_1 = H(Q_1, C_1)\), 因此根据假设

\[e_1 = H(Q_1, C_1) = H(Q, C_1) \]

根据哈希函数的性质,发送者很难找到不同的哈希原象满足上述等式,因此与假设矛盾,因此Sigma承诺具有绑定性。

零知识性证明

非严格证明,由于Receiver仅知道\((Q, C, e, z)\),并且基于该已知信息,无法计算出\(m\)\(r\)的值,保证了承诺的零知识性

Sigma承诺实现

以下测试工具基于golang实现,读者可以通过git clone下载代码并进行编译,或者通过go install进行安装。

gossl命令行工具

  1. 直接安装
➜  gossl git:(master) go install github.com/warm3snow/gossl@latest
go: downloading github.com/warm3snow/gossl v0.0.0-20240926033959-072365c6c49c
  1. 下载代码并编译安装
➜  git clone https://github.com/warm3snow/gossl.git➜  cd gossl && go install
  1. 查看帮助信息
➜  gossl git:(master) gossl -h
gossl is a crypto command-line tool like openssl.Usage:gossl [command]Available Commands:asym        asymmetric cryptographycommitment  cryptographic commitmentcompletion  Generate the autocompletion script for the specified shelldgst        digest or hash cryptographyhelp        Help about any commandkdf         key derivation functionreq         certificate requestsym         symmetric cryptographytls         transport layer security(ssl/tls)x509        x509 certificateFlags:-a, --algo string     Specify the supported algorithm--config string   config file (default is $HOME/.gossl.yaml)-h, --help            help for gossl-i, --in string       The input file-o, --out string      The output file-t, --toggle          Help message for toggle-v, --verbose         verbose outputUse "gossl [command] --help" for more information about a command.

Sigma承诺命令

  1. gossl支持的承诺算法列表
➜  gossl git:(master) gossl commitment list
Supported commitment algorithm list:
hash
elgamal
pedersen
pedersen_ecc
pedersen_ecc_nizk
sigma

注:gossl中实现的sigma承诺,默认基于椭圆曲线P256实现,当前不支持通过命令行参数指定其他椭圆曲线。

  1. 生成sigma承诺
➜  gossl git:(master) ✗ gossl commitment commit -a sigma --in-text "hello gossl"
Common Params:g: 48439561293906451759052585252797914202762949526041747995844080717082404635286||36134250956749795798585127919587881956611106672985015071877198253568414405109
Commitments:C: 35978963384416087345885958360294044241038648430056878001124120173772932479707||45314833754090600280947663597071793076156457817915037099266616032681954892305
Openings:e: 034f8b5f22ceef281f70c4a119f4928959c5797b0b9b7897d154b10e2c48057adb021605d348c14ebc17df4cc59b85bed3232e15b3dc89cd5e9b7d856bdefa8c3b47z: 0159a0679877a454c1d70c1e6865e969ef197abbe5e608cf5c29f0994b6aa09e372dc23a1801f98531b5ac5f4a102da24f4a576b6ea02627bb15fbc15dace2ccc04e5805d25310bcd63e7283b7
  1. 验证sigma承诺
➜  gossl git:(master) ✗ go run main.go commitment verify -a sigma \
> --g "48439561293906451759052585252797914202762949526041747995844080717082404635286||36134250956749795798585127919587881956611106672985015071877198253568414405109" \
> --C "35978963384416087345885958360294044241038648430056878001124120173772932479707||45314833754090600280947663597071793076156457817915037099266616032681954892305" \
> --x "034f8b5f22ceef281f70c4a119f4928959c5797b0b9b7897d154b10e2c48057adb021605d348c14ebc17df4cc59b85bed3232e15b3dc89cd5e9b7d856bdefa8c3b47" \
> --y "0159a0679877a454c1d70c1e6865e969ef197abbe5e608cf5c29f0994b6aa09e372dc23a1801f98531b5ac5f4a102da24f4a576b6ea02627bb15fbc15dace2ccc04e5805d25310bcd63e7283b7"commitment is verified successfully

Sigma承诺go测试代码

除了使用gossl命令行工具,读者也可以通过以下go test代码进行测试。

// 切换到gossl的commitment目录
➜  cd gossl/crypto/commitment
➜  commitment git:(master) ll
total 64
-rw-r--r--  1 hxy  staff   1.1K  9 26 10:36 CommitPoint.go
-rw-r--r--  1 hxy  staff   1.8K  9 26 18:01 commitment_test.go
-rw-r--r--  1 hxy  staff   1.6K  9 26 17:57 elgamal_commit.go
-rw-r--r--  1 hxy  staff   883B  9 24 15:48 hash_commit.go
-rw-r--r--  1 hxy  staff   1.5K  9 26 10:26 pedersen_commit.go
-rw-r--r--  1 hxy  staff   1.9K  9 26 17:57 pedersen_ecc_commit.go
-rw-r--r--  1 hxy  staff   3.0K  9 26 17:57 pedersen_ecc_nizk_commit.go
-rw-r--r--  1 hxy  staff   2.3K  9 26 18:12 sigma_ecc_nizk.go// 运行测试代码
➜  commitment git:(master) go test -v -test.run=TestNewSigmaEccNIZKCommitment=== RUN   TestNewSigmaEccNIZKCommitment
Common Params: 
g: 48439561293906451759052585252797914202762949526041747995844080717082404635286||36134250956749795798585127919587881956611106672985015071877198253568414405109
C: 47040828788287341591092510479443289727519436241786337638489071419327823770936||36818224871262709989945065869868031409225044161759246549601573301209070696557
e: 0368002a62bfdeca7fe138b4efa81193744d3c110aaf3a2f676f6eb51b22cc7538031322ed2b4b02627d85491234c391cfbc33ad7371113a89c16eb647e2c0dcdc09
z: 0163998a9a42f3d225988fdfa521bd794ca7c1c4346a6b8308d399cd740a44a4f0b424b87dc94d75bc8f5045a3180e5a57d55596e98e25f3421ddbebcdff76c091ee7e3ceda107
Verify: true
--- PASS: TestNewSigmaEccNIZKCommitment (0.00s)
PASS

总结

本文详绍了Sigma承诺的构造和证明过程,以及通过gossl工具实现了sigma承诺的生成和验证。Sigma承诺是一种非交互式零知识证明方案,具有隐藏性、绑定性和零知识性等特性,广泛应用于数字签名,匿名交易等场景。
通过本文的介绍,希望读者对Sigma承诺有更深入的了解,为后续的密码学应用提供参考。

参考文献

-【1】Zero-Knowledge Proofs: An illustrated primer
-【2】Sigma Protocol
-【3】gossl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

MiniMax、商汤科技、面壁智能、西湖心辰、声网都来了!RTE 大会「实时互动和大模型」专场开启报名

当大模型进化到 实时多模态 ,将诞生什么样的新场景和玩法?Voice AI 实现 human-like 的最后一步是什么?AI 视频爆炸增长,新一代编解码技术 将面临何种挑战?所有 AI Infra 都在探寻规格和性能的最佳平衡,如何构建高可用的云边端协同架构?AI 加持下,空间计算和新硬件 也迎…

企业级反向代理 HAProxy

企业级反向代理 HAProxy haproxy只做代理,不提供其他功能。可以做四层,七层代理。有些公司会用haproxy做四层代理, haproxy比lvs好在功能更强大2 HAProxy 简介 企业版(收费) 社区版社区版网站:http://www.haproxy.org/ github:https://github.com/haproxy #选偶数版本,长…

题解:P4288 [SHOI2014] 信号增幅仪

很好一题目,使我的最小圆覆盖旋转。 先假设 \(p = 1\)。这是最简单的情况。这个时候我们就得到了一个裸的最小圆覆盖。 当 \(p \not= 1\),但是 \(a = 0\) 的时候。圆就变成了对称轴与坐标轴平行的椭圆,运用高中知识仿射一下,又回到了最小圆覆盖。 在一般的情况下,我们先通…

python打包whl文件

在python中,使用setuptools库创建wheel包 确保已安装wheel和setuptools# 使用pip list 查看已经安装的包 pip list如果没有,就用下面的命令安装pip install wheel setuptools在当前路径创建一个aaa的文件夹 在aaa里创建一个__init__.py的文件,内容如下class test_class(obj…

idea启动 main 函数时,报 Command line is too long Shorten command xxx

idea启动 main 函数时,报 Command line is too long Shorten command xxx 一、解决办法找到 .idea 下面的 workspace.xml 找到以下属性 PropertiesComponent,添加 dynamic.classpath 属性<property name="dynamic.classpath" value="true" />结果…

信息学奥赛复赛复习04-CSP-J2019-04-加工零件-位运算、整数映射0或1、结构体、初始化列表构造、动态数组、二维动态数组、队列、宽度优先搜索

PDF文档公众号回复关键字:202409261 2019 CSP-J 题目4 加工零件 [题目描述] 凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有 n位工人,工人们从 1∼n 编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送…

人工智能下的GIS发展趋势

地理信息系统(GIS)与人工智能(AI)的结合正在开启智能地理信息时代的新篇章。随着AI技术的不断进步,GIS的应用前景变得更加广泛和深入,不仅在提高工作效率、提升分析精度方面展现出巨大潜力,还在促进资源共享、推动跨行业和跨领域协同发展方面发挥着重要作用。 数据采集与…

Flink-Yarn模式修改Task Slot的数量

1.修改 Flink 配置文件 (flink-conf.yaml) Flink 中的 TaskManager 是根据 slots 来分配任务的,默认情况下,一个 TaskManager 可以有多个 slots。你可以通过调整 flink-conf.yaml 中的以下配置来控制每个 TaskManager 的 slot 数量: taskmanager.numberOfTaskSlots: <num…