码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 零知识证明以及其在 BSV 区块链中的应用简介


    在通过一个例子介绍了零知识证明 (ZKP) 之后,我们展示了如何将它用作一个强大的工具来增加隐私并进一步开发许多构建在上面的应用程序。

    零知识证明

    零知识证明允许声称知道秘密的一方(即证明者)说服另一方(即验证者)该声明是有效的,同时不泄露秘密。

    Waldo 在哪裡?

    寻找 Waldo 是一款游戏,您必须在与他相似的人海中找到 Waldo。

    在这里插入图片描述

    Peggy(证明者)告诉 Victor(验证者)她知道 Waldo 在场景中的位置,但她不想向他展示他的确切位置。那么,她如何向他证明她找到了 Waldo 而不显示他的确切位置?

    Peggy 找到了一大块硬纸板,在中间挖了一个 Waldo 形状的洞。

    在这里插入图片描述

    然后,她将 Waldo 的位置(在一张纸上)用胶带粘在纸板的背面,这样 Waldo 就在占据中心的 Waldo 形状的洞。当 Peggy 用胶带粘好纸板时,Victor 应该站在纸板前。

    在这里插入图片描述

    当 Victor 从洞里看到 Waldo 时,他确信 Peggy 的说法是有效的,但他不知道 Waldo 的确切位置

    在这里插入图片描述

    在 BSV 区块链中的应用

    由于零知识证明的隐藏特性,它可以在需要隐私的许多情况下使用。更重要的是,它也可以作为构建更复杂协议的基础,如下所示。

    通过加密和交换的托管1

    Alice 想用比特币支付 Bob 购买商品。Alice 和 Bob 分别生成随机私钥 a/b, 对应公钥 A/B。Alice 在托管人的公钥 E 下加密她的私钥 a 并将密文 c = Enc(a, E) 发送给 Bob。她还向 Bob 发送了一个零知识证明,证明 c 确实是 a 通过 E 加密的。反之亦然,Bob 做同样的事情。

    1. 然后,Alice 将资金发送到共享公钥 S = A+B,以支付商品。在没有争议的情况下,Alice 发送 a 给 Bob,Bob 可以转移资金。
    2. 在存在争议的情况下,托管人会选择获胜者。如果获胜者是 Bob,他将 c 发送到托管。托管人解密 c 以获得 a 并将其发送回 Bob,后者可以赎回资金。同样,如果 Alice 是赢家,她可以拿走这笔资金。

    与传统的 2-of-3 多重签名托管相比,有几个优点:

    1. 资金被锁定在一个普通的比特币 P2PKH 地址中。只有相关方知道涉及托管,从而增加隐私。
    2. 在没有争议的情况下,托管人不必参与存款或取款,从而有可能降低其运营成本。

    我们已经实现了完整的协议,下面列出了代码的零知识证明部分。

    
    const encryptionResultA = ve.encrypt(ucPubKeyEscrow, privKeyA.toBuffer());
    
    const proofA = ve.prove(ucPubKeyEscrow, encryptionResultA);
    // zero knowledge proof: Bob can verify if encryptionResultA is encrypted privKeyA (without knowing it) 
    // with ucPubKeyEscrow, whose corresponding public key is ucPubKeyA
    const isVerifiedA = ve.verify(proofA, ucPubKeyEscrow, ucPubKeyA, encryptionResultA.ciphertexts);
    assert(isVerifiedA);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    gist escrow_zkp.js

    脚注


    [1]: Escrow Protocols for Cryptocurrencies: How to Buy Physical Goods Using Bitcoin. Steven Goldfeder, 2017

  • 相关阅读:
    java-php-python-ssm校园绿化管理系统计算机毕业设计
    数据结构与算法之字典: Leetcode 76. 最小覆盖子串 (Typescript版)
    2023年【广东省安全员C证第四批(专职安全生产管理人员)】报名考试及广东省安全员C证第四批(专职安全生产管理人员)最新解析
    继认证后弄清Spring Security实现授权
    Python高级进阶(1)----深入理解Python迭代器与生成器
    格雷希尔GripSeal密封测试接头更换密封圈时需要注意些什么
    JavaWeb_第3章_HTTP&Tomcat&Servlet
    使用docker部署mysql8.0+zabbix5.0
    远程运维用什么软件?可以保障更安全?
    【瑞吉外卖】day10:缓存验证码、菜品、套餐信息以及推送到gitee
  • 原文地址:https://blog.csdn.net/freedomhero/article/details/125598868
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号