使用 zk-SNARKs 的可编程零知识证明:第 3 部分

这篇具有很好参考价值的文章主要介绍了使用 zk-SNARKs 的可编程零知识证明:第 3 部分。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前,我们已经展示了如何使用称为零知识密钥声明证明 (ZKKSP) 的技术为以下声明构建零知识证明 (ZKP)。

零知识证明 公私钥,零知识证明,区块链
基本上,它证明了不仅证明者知道给定公钥的密钥,而且还证明知道给定摘要的秘密哈希,而不会泄露秘密。

零知识证明 公私钥,零知识证明,区块链

图片来自 CoinGeek

虽然 ZKKSP 有效,但它有一个严重的限制:它只适用于一种特定形式的声明,即秘密是给定公钥的私钥,也是给定哈希的原像。

目前尚不清楚如何将其扩展为稍作修改的声明,例如,除了作为私钥和原像之外,私钥也是偶数。此外,提出它需要密码学的专利级知识,例如 ∑ 协议和承诺方案。

使用 zkSNARKs 的 ZKKSP

我们通过利用 zkSNARKs 的可编程性来重新实现 ZKKSP。我们简单地将第 2 部分中使用的椭圆曲线点乘法和散列库结合起来。生成的 Circom 代码如下所示:

// library circuits from https://github.com/0xPARC/circom-ecdsa
include "lib-circom-ecdsa/ecdsa.circom";
include "../node_modules/circomlib/circuits/sha256/sha256.circom";
include "../node_modules/circomlib/circuits/bitify.circom";

// `n`: chunk length in bits for a private key
// `k`: chunk count for a private key
template Main(n, k) {
  // n * k == 256
  assert(n * k >= 256);
  assert(n * (k-1) < 256);

  // little-endian
  signal private input privkey[k];
  signal public input pubkey[2][k];

  signal public output privkeyHash[k];

  // get pubkey from privkey
  component privToPub = ECDSAPrivToPub(n, k);
  for (var i = 0; i < k; i++) {
    privToPub.privkey[i] <== privkey[i];
  }

  // verify input pubkey
  signal pub_x_diff[k];
  signal pub_y_diff[k];
  for (var i = 0; i < k; i++) {
    pub_x_diff[i] <-- privToPub.pubkey[0][i] - pubkey[0][i];
    pub_x_diff[i] === 0;
    pub_y_diff[i] <-- privToPub.pubkey[1][i] - pubkey[1][i];
    pub_y_diff[i] === 0;
  }

  // calculate sha256 of privkey
  component sha256 = Sha256(256);
  for (var i = 0; i < k; i++) {
    for (var j =0; j < n; j++) {
      // change privkey to big-endian as sha256 input
      sha256.in[i * n + j] <-- (privkey[k-1-i] >> (n-1-j)) & 1;
    }
  }

  // set output
  component b2n[k];
  for (var i = 0; i < k; i++) {
    b2n[i] = Bits2Num(n);
    for(var j = 0; j < n; j++) {
      // `b2n` input is little-endian in bits, `sha256` out is big-endian in bits
      b2n[i].in[n-1-j] <== sha256.out[i * n + j];
    }
    privkeyHash[i] <== b2n[i].out;
  }

}

component main {public [pubkey]} = Main(64, 4);
key_stmt.circom

和以前一样,我们在第 15 行使用 ECDSAPrivToPub 从第 14 行的私钥派生出一个公钥(注意它被声明为私有)。然后我们使用第 3 行导入的 sha256 库中的 Sha256 对相同的私钥进行哈希处理,以确保结果与第 17 行的给定哈希匹配。我们刚刚“编程” 实现了 ZKKSP,不需要高级密码学的先验知识。此外,由于 zkSNARKs 的可组合性,我们可以轻松地对其进行扩展以添加对秘密的约束,例如,秘密是偶数。

可以在这里找到一个测试。文章来源地址https://www.toymoban.com/news/detail-786260.html

到了这里,关于使用 zk-SNARKs 的可编程零知识证明:第 3 部分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UnityShader——03图形硬件简史与可编程管线

    GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”,在现代计算机系统中的作用变得越来越重要 20世纪六七十年代,受硬件条件的限制,图形显示器只是计算机输出的一种工具,限于硬件发展水平。人们只是纯粹从软件实现的角度来考虑图形用户界面的规范问题,此

    2024年02月19日
    浏览(43)
  • 西电微机原理实验四 可编程并行接口实验

       1. 了解可编程并行接口8255的内部结构。   2. 掌握工作方式、初始化编程及应用。    1. 流水灯实验:利用8255的A口循环点亮发光二极管。   2. 在完成(1)基础上,增加通过读取开关控制流水灯的循环方向和循环方式。    8255是一个通用可编程并行接口电路。它具

    2024年02月05日
    浏览(59)
  • 可编程逻辑器件之数码管显示实验

    一、实验目标 能够熟练的进行可编程逻辑器件开发,能够通过具体工程需求进行需求分析、模块划分、代码编写、功能仿真、综合分析、板级验证,能够独立正确的进行实验操作,培养学生的工程实践研究能力和动手实践能力,具备借助可编程逻辑器件开发平台和仿真工具科

    2024年02月02日
    浏览(133)
  • 什么是 FPGA(现场可编程门阵列)?

    现场编程门阵列是一种由半导体材料制成的集成电路,用户购买后可以重新编程或配置,而不是单独由原始设备制造商(OEM)进行。 现场可编程门阵列 (FPGA) 是一种半导体器件,由与可编程互连相结合的可配置逻辑块 (CLB) 网格构成。制造完成后,FPGA 可以重新编程以满足特定

    2024年02月19日
    浏览(50)
  • SG-8201CJA(汽车可编程晶体振荡器)

    nbsp; nbsp; nbsp; nbsp; nbsp;爱普生的SG-8021CJA是一款符合AEC-Q100标准的晶体振荡器,专为要求苛刻的汽车/ADAS应用(如激光雷达和相机ECU)而设计。它采用爱普生的内部低噪声小数NPLL,输出nbsp;频率高达170MHz,相位抖动小于1/25,稳定性比之前的产品SG-8101CGA高出约2倍。此外,2.0*1.6m

    2024年02月21日
    浏览(49)
  • 零知识证明:STARKs vs SNARKs

    纵观历史,总是有类似的技术在同一时间上市,它们寻求相似的结果,但以不同的方式解决问题。当这种市场现象发生时,我们应该尝试客观地评估每项技术。 由于 STARK 阵营和 SNARK 阵营都对各自的技术充满热情,我们认为对这两种技术进行客观比较会很有趣。 零知识证明的

    2024年01月22日
    浏览(39)
  • 可编程网关:如何助力智慧工厂实现智能化管理

    一个具体的实际案例,详细说明可编程网关在某汽车零部件智慧工厂中的应用细节: 案例背景: 某大型汽车零部件制造企业,致力于提升生产效率、降低运营成本、确保产品质量,决定对其传统工厂进行全面数字化改造,构建智慧工厂。其中,可编程网关作为关键组件,被

    2024年04月08日
    浏览(48)
  • 可编程交易区块为DeFi机器人提供强大动力

    对于选择基金投资的人来说,一个基本指导原则就是寻找那些管理费最低的基金。资本应该是在运转,而不是用于支付费用。同样,Mysten Lab的Capy交易机器人利用可编程交易区块(Programmable Transaction Blocks ,PTBs)将资本集中用于交易,而不是gas费,并且能够执行复杂的输入策

    2024年02月07日
    浏览(54)
  • FPGA的可编程逻辑单元(LUT和寄存器)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 1.根据PLD器件单片集成度的高低,可将PLD分为低密度可编程逻辑器件和高密度可编程逻辑器件。 2.按器件结构类型划分      

    2024年02月19日
    浏览(53)
  • SG-9101CGA(汽车+125°C可编程晶体振荡器)

    nbsp; nbsp; nbsp; nbsp;SG-9101CGA是用于汽车CMOS输出的可编程晶体振荡器,彩用2.5 x 2.0 (mm)封装,0.67 MHz至170 MHz频率范围、工作温度范围为-40℃~+125℃,符合车规级晶振,无铅,绿色环保,满足汽车工业标准,电源电压范围为1.62 V ~ 3.63 V,具有低功耗特性。广泛应用于汽车多媒体、车

    2024年01月22日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包