比特币 ZK 赏金系列:第 2 部分——查找哈希冲突

news2024/11/22 6:59:26

在我们的零知识赏金 (ZKB) 系列的第二部分中,我们将其应用于解决哈希冲突难题。在这样的谜题中,两个不同的输入散列到相同的输出。此类赏金可用于:

  1. 充当煤矿中的金丝雀,给我们一个有价值的提醒。存在冲突是散列函数较弱的标志,因此我们可以尽早升级以减轻损失。

  2. 资助研究以发现哈希函数中的漏洞,特别是对于 MiMC 等新函数。

碰撞攻击

历史

比特币开发者彼得托德于 2013 年最初发布了用于发现各种哈希函数中的冲突的比特币赏金。SHA1 赏金是在 2017 年收集的,在谷歌破解它后不久。

最初的哈希碰撞赏金

这种原始赏金有两个缺点:

  1. 一旦有人广播包含解决方案的收集交易,矿工就可以拦截它,提取解决方案,并将奖励重定向到他们自己。

  2. 该解决方案是公开的,可以被恶意行为者利用。

ZKB 解决了这两个问题,因此只有发现碰撞的赏金收集者才能赎回它,并且只有赏金制定者才能了解解决方案。

实现

与第 1 部分一样,我们只需替换特定于应用程序的电路 C 即可验证两个原像(即散列函数的输入)不同但它们产生相同的散列。我们以 Poseidon 哈希函数为例,一种新的 ZK 友好哈希。其他哈希函数可以使用类似方式。这两个原像作为私有输入传递进来,永远不会公开透露。

template Main() {

    // Private inputs:
    signal input preimage0[16]; 
    signal input preimage1[16];
    signal input db[4];                      // Seller (Bob) private key.
    signal input Qs[2][4];                   // Shared (symmetric) key. Used to encrypt w.
    
    // "Public" inputs that are still passed as private to reduce verifier size on chain:
    signal input Qa[2][4];                   // Buyer (Alice) public key.
    signal input Qb[2][4];                   // Seller (Bob) public key.
    signal input nonce;                      // Needed to encrypt/decrypt xy.
    signal input ew[34];                     // Encrypted solution to puzzle.

    // Public inputs:
    signal input Hpub[2];            // Hash of inputs that are supposed to be public.
                                     // As we use SHA256 in this example, we need two field elements
                                     // to acommodate all possible hash values.

    
     Assert that public inputs hash to Hpub. ///

    ...

     Assert that preimages are a valid solution. //
    // Check preimage0 and preimage1 are differend and that they produce the same hash.
    var diff = 0;
    for (var i = 0; i < 16; i++) {
        diff += preimage0[i] ^ preimage1[i];
    }
    assert(diff != 0);

    component h0 = Poseidon(16);
    component h1 = Poseidon(16);
    for (var i = 0; i < 16; i++) {
        h0.inputs[i] <== preimage0[i];
        h1.inputs[i] <== preimage1[i];
    }
    h0.out === h1.out;

     Assert that (db * Qa) = Qs 

    ...

     Assert that (db * G) = Qb /

    ...

     Assert that encrypting w with Qs produces ew. /

    ...
}

GitHub 上提供了完整的代码和测试,包括验证证明并支付赏金收集者的智能合约。

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

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

相关文章

LCP 06. 拿硬币【向上取整】

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心 知识回顾向上、向下取整 写在最后 Tag 【贪心】【数组】 题目来源 LCP 06. 拿硬币 题目解读 数组 coins 中存放的是一堆堆的力扣币&#xff0c;对于每一堆力扣币&#xff0c;你可以选择拿走一枚或者两枚&#x…

SOCKS5 认证的方法

在进行网络浏览或爬虫等相关工作时&#xff0c;我们经常会遇到需要使用 SOCKS5 代理认证的情况。然而&#xff0c;某些浏览器可能不提供原生支持 SOCKS5 代理认证的选项&#xff0c;给我们带来了一些困扰。本文将为大家介绍几种解决浏览器不支持 SOCKS5 代理认证问题的方法。 …

java图形化工具编写初试

java图形化工具编写初试 前言&#xff1a; 照虎画猫——用WgpSec 说书人师傅的‘用友NC系列检测利用工具’结合本人为数不多的java基础再结合gpt&#xff0c;学习了一下java图形化工具的编写&#xff0c;实现了最基础的漏洞检测功能........用大华的两个漏洞为例&#xff0c;分…

kafka消费/发送消息,消息过大报错解决whose size is larger than the fetch size 1048576

目录 一、kafka消费报错原因二、解决方案1、原因一的解决方案2、原因二的解决方案 一、kafka消费报错原因 问题原因一&#xff1a;个是kafka本身的配置没有调整到上限 问题原因二&#xff1a;就是我们自己写python消费kafka代码的时候没有参数配置没有限制 RecordTooLargeE…

实践分享:vue模块化基本用法

首先还是来看看什么是模块化。 常见的概括&#xff1a;模块化就是把单独的一个功能封装到一个模块&#xff08;文件&#xff09;中&#xff0c;模块之间相互隔离&#xff0c;但是可以通过特定的接口公开内部成员&#xff0c;也可以依赖别的模块&#xff08;方便代码的重用&…

Zotero配合dblp文献库免费一键下载文献及管理教程

Zotero配合dblp文献库免费一键下载文献及管理教程 1 dblp计算机科学文献库2 文献导入到Zotero教程参考&#xff1a; 在这里&#xff0c;相信大家都已经知道Zotero这个强大的文献管理软件了&#xff0c;它可以多端同步&#xff0c;自动下载文献&#xff0c;自定义标签&#xff0…

数据结构——排序算法——归并排序

将两个有序数组合并为一个有序数组 在第二个列表向第一个列表逐个插入的过程中&#xff0c;由于第二个列表已经有序&#xff0c;所以后续插入的元素一定不会在前面插入的元素之前。在逐个插入的过程中&#xff0c;每次插入时&#xff0c;只需要从上次插入的位置开始&#xff0…

Pytorch从零开始实战04

Pytorch从零开始实战——猴痘病识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——猴痘病识别环境准备数据集模型选择模型训练数据可视化其他模型图片预测 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytor…

mysql用事务实现更新数据

前言&#xff1a;在手动批量更新正式环境数据库时&#xff0c;建议使用事物进行更新&#xff0c;避免更错数据&#xff0c;造成不必要的麻烦。 现表中有三条数据&#xff0c;使用事物批量将name字段为mgx&#xff0c;phone字段为17837107346&#xff0c;所有数据中的address字段…

华为云云耀云服务器L实例评测|服务器反挖矿防护指南

前言 本文为华为云云耀云服务器L实例测评文章&#xff0c;测评内容是 云耀云服务器L实例 反挖矿防护指南 系统配置&#xff1a;2核2G 3M CentOS7.9 之前的文章中『一文教你如何防御数据库恶意攻击』&#xff0c;我们讲到黑客如何通过攻击数据库来获取权限&#xff0c;以及我们…

别再纠结线程池池大小、线程数量了,哪有什么固定公式 | 京东云技术团队

可能很多人都看到过一个线程数设置的理论&#xff1a; CPU 密集型的程序 - 核心数 1 I/O 密集型的程序 - 核心数 * 2 不会吧&#xff0c;不会吧&#xff0c;真的有人按照这个理论规划线程数&#xff1f; 线程数和CPU利用率的小测试 抛开一些操作系统&#xff0c;计算机原…

C++数据结构X篇_14_二叉树的递归遍历(先序遍历、中序遍历、后续遍历方法介绍;举例;代码实现)

我们知道数据的存储结构分为线性与非线性。线性就是1对1的结构&#xff0c;像栈与队列都属于线性结构。那什么是非线性的结构呢&#xff1f; 非线性即1对n的结构这更符合常规情况&#xff0c;线性结构本质上属于非线性结构中的一种特殊形式&#xff0c;像树就属于非线性结构。但…

iOS 17 Simulator Failed with HTTP status 400:bad request

升级 xcode 15 要 ios17 的 sdk 才能运行&#xff0c;但是更新这个 sdk 400 错误了 解决方案&#xff1a; 直接去官网下载开发者后台下载dmg文件&#xff0c;使用命令行快速安装即可 https://developer.apple.com/documentation/xcode/installing-additional-simulator-runti…

Anaconda和Pycharm详细安装 配置教程

Anaconda&#xff1a;是一个开源的Python发行版本&#xff0c;其中包含了conda、Python等180多个科学包及其依赖项。【Anaconda下载】 PyCharm&#xff1a;PyCharm是一种Python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。【PyCharm下载】…

功能强大的PostgreSQL没有MySQL流行的10个原因,你知道几个?

以下内容是根据玖章算术CEO叶正盛在「3306π 数据库朋友圈」技术演讲整理。文末附完整的PPT下载链接&#xff01; MySQL与PostgreSQL都是非常优秀并且非常成功的数据库&#xff0c;PostgreSQL的功能比MySQL强大&#xff0c;但是依然没有MySQL流行&#xff0c;作者从产品功能、…

Vue3中的computed函数详解

计算属性是Vue中常用的一种方式&#xff0c;主要用于在模板中放置逻辑计算&#xff0c;方便开发者进行数据操作和展示。在Vue3中&#xff0c;计算属性依然是非常重要的一种功能&#xff0c;而computed函数则更加的方便计算属性的使用。本文将对Vue3中的computed函数进行详细的介…

terraform简单的开始-vpc cvm创建

从网络开始 从创建VPC开始 复用前面的main.tf的代码&#xff1a; terraform {required_providers {tencentcloud {source "tencentcloudstack/tencentcloud"version "1.81.25"}} } variable "region" {description "腾讯云地域"…

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(二)

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(二) 上一次和大家分享了组态相关的重要内容,具体可以参考以下链接中的内容: 西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一) 本次继续和大家分享关于安全PLC基础编程的相关内容: 如下图所示,在左侧的…

开通经营收款码要手续费吗

我们都知道&#xff0c;目前市场上的支付宝或者微信商户收款&#xff0c;无论是线上收款还是实体店收款&#xff0c;一般都采用0.6%的收款费率&#xff0c;1万元就是60元。 其实这不低的。 大多数线下实体店商家可能使用的聚合支付码可能是0.38%&#xff0c;1万元是38。 虽然不…

21天学会C++:Day12----初始化列表

CSDN的uu们&#xff0c;大家好。这里是C入门的第十一讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 初始化列表 1.1 引入 1.2 初始化列表 1.3 初始化列表的注意事项 1.…