当前位置: 首页 > news >正文

零知识证明中的专业漏洞解析

专业零知识证明漏洞 - Trail of Bits博客

零知识(ZK)证明是近年来备受关注的密码学工具,主要应用于加密货币领域。ZK证明的核心思想是:拥有秘密信息(如加密密钥)的一方可以在不泄露秘密的情况下证明其真实性。加密货币目前利用ZK证明实现匿名性、交易隐私和“roll-up”系统(通过ZK证明批量处理交易以提高区块链效率)。ZK证明还被更广泛地应用,例如允许安全研究人员证明他们知道如何利用软件漏洞而无需透露漏洞信息。

然而,与密码学中的大多数事物一样,很难做到万无一失。本文重点讨论某些专用ZKP代码中的两个漏洞,这些漏洞允许恶意行为者欺骗流行软件接受无效证明,包括对群签名无效输入的“有效性证明”,进而导致无效签名。在使用阈值签名的区块链系统(如ThorChain和Binance)中,攻击者可能因此阻止目标交易完成,造成对整条链或特定参与者的拒绝服务攻击。

离散对数证明背景

一种专用ZK证明是离散对数知识证明。假设Bob向Alice提供RSA模数N = PQ(其中P和Q是只有Bob知道的大素数),Bob想向Alice证明他知道秘密指数x,使得s ≡ tx (mod N)。即x是s关于底数t的离散对数,且他希望在完全不透露x的情况下证明自己知道x。

协议工作流程如下:

  1. Bob和Alice约定安全参数k(正整数,决定协议执行次数,通常设为k=128)。
  2. Bob从ZΦ(N)中随机采样ai(i=1,2,…,k),计算对应值αi = tai (mod N),并将α1,α2,…,αk发送给Alice。
  3. Alice回复随机比特序列c1,c2,…,ck。
  4. Bob计算zi = ai + cix,并将z1,z2,…,zk发送给Alice。
  5. Alice检查是否对所有i=1,2,…,k满足tzi ≡ αisci (mod N)。若所有检查通过,则接受证明;否则拒绝。

工作原理

如果Bob不知道x,他每次有50%概率猜对Alice的ci选择。若任意一次猜测错误,Alice会拒绝证明。当k=128时,Bob成功欺骗的概率极低(约1/2^128)。

在非交互式证明中(如下述代码),双方通过哈希计算挑战值c = Hash(N ∥ s ∥ t ∥ α1 ∥ … ∥ αk),其比特位作为ci值(称为Fiat-Shamir变换)。本文讨论的漏洞不涉及Fiat-Shamir失败。

代码分析

证明结构和验证代码源自Binance的tss-lib库。Proof结构如下:

type Proof struct {Alpha, T [Iterations]*big.Int
}

包含两个大整数数组Alpha和T,分别对应数学描述中的αi和zi值。值得注意的是,该结构未包含模数N或值s和t。

验证函数Verify实现:

func (p *Proof) Verify(h1, h2, N *big.Int) bool {// 详细代码见原文
}

其中h1和h2分别对应t和s。函数首先计算挑战值c,然后对c的每个比特位ci检查:
h1ExpTi ≡ alphaIMulH2ExpCi (mod N)
若任意检查失败则拒绝证明。

漏洞详情

Verify函数未对h1、h2、p.Alpha或p.T进行有效性验证,导致可触发多种边缘情况。特别是涉及对数和指数关系时,零值需要特别注意:对于任何x ≠ 0,0x = 0;对于任何x,0 ∙ x = 0。攻击者可利用这些特性使等式检查始终通过。

第一个不可能事件:基数为0的离散对数

假设Bob创建Proof结构:

  • 所有p.T元素为正(zi > 0)
  • 所有p.Alpha元素为0(αi = 0)

使用参数调用Verify:

  • N为两大素数乘积
  • h1为任意整数(s无约束)
  • h2设为0(t=0)

验证过程会检查tzi ≡ αisci (mod N)。右侧αi=0导致αisci=0;左侧tzi=0zi=0(因zi>0)。验证函数看到0=0即接受证明。但事实上,若s ∉ {0,1},不存在整数x使s ≡ 0x (mod N)成立。

修复方案:验证h2和p.Alpha所有元素非零。最佳实践应包括检查所有密码学值(例如确保椭圆曲线点位于曲线上,整数在适当区间内并满足乘法性质)。具体到此证明,应验证h1、h2、p.Alpha非零、与N互质且在区间[1,N)内,同时对N进行基本检查(如位长检查)。

离散对数加密证明

在某些阈值签名协议中,签名过程的一个步骤需要同时证明关于Bob知道的秘密整数x的两件事:

  1. X = Rx,其中X和R在阶为q的群G中(通常为某模数的乘法整数群或椭圆曲线群)
  2. 密文c = PaillierEncN(x,r)(随机值r ∈ Z⋆N,Bob公钥N),即c = (N + 1)xrN (mod N2)

证明c与X的离散对数之间的一致性可确保Bob对椭圆曲线签名的贡献值与协议早期阶段贡献的值相同,防止Bob提交导致无效签名的虚假X值。

代码实现

以下代码取自kryptology库的Paillier离散对数证明实现,用于计算v̂:

func (p PdlProof) vHatConstruct(pv *PdlVerifyParams) (*big.Int, error) {// 代码细节见原文
}

验证函数Verify使用vHatConstruct计算上述v̂值。在有效证明中一切正常。

漏洞详情

在无效证明中,Bob可设置v = s = 0。此时c值无关紧要:Alice最终检查v̂ = 0N ∙ (N+1)s1 ∙ c−e = 0 = v,并接受结果。

第二个不可能事件:任意密文

通过利用v̂ = s = 0问题,Bob可证明他知道x满足X = Rx,同时向Alice“证明”任何c ≠ 0的值都是x的有效密文。Bob甚至不需要知道N的因子分解——再次“证明”了不可能之事!

此伪造具有实际安全影响:能够伪造此证明允许Bob破坏阈值签名协议而不被检测。在某些系统中,这可能用于阻止有效交易执行。

修复方案:通过更好的输入验证防止此问题。基本验证应包括检查z和s在Z*N中(即gcd(z,N)=gcd(s,N)=1,强制z≠0且s≠0),同时确保s1≠0和s2≠0。

风险与披露

风险

这些漏洞存在于实现GG20阈值签名方案的代码库中。若攻击者利用密文可塑性漏洞,可“证明”群签名无效输入的有效性,导致无效签名。若区块链依赖阈值签名,攻击者可能因此阻止目标交易完成。

披露

已向Binance报告tss-lib问题并迅速修复。同时联系了多个依赖tss-lib(或其分支)的项目,包括已修复代码的ThorChain(Joltify和SwipeChain直接依赖ThorChain分支)。Keep Networks维护自己的tss-lib分支并集成了修复。

kryptology问题已向Coinbase报告,该GitHub项目已被归档,未发现当前项目依赖该库的阈值签名实现。

经验教训

最终,这是源于可理解的数据验证疏忽的密码学失败。使用另一方提供的值前,应始终检查所有适用约束——甚至从这些值计算出的结果也应检查所有约束。

但查看这些ZK证明的数学描述或伪代码时,这些约束在哪里明确说明?这些文档从数学而非具体实现角度描述算法。例如步骤β←$ZN,后跟v = (N+1)αβN (mod N2)。数学上理解v在ZN2中故v≠0,但编程层面没有明确指示需要检查v的约束。

Trail of Bits在zkdocs.com维护ZK证明系统资源指南,此类问题是我们提供该指南的主要动机之一——将数学和理论描述转化为软件是困难的过程。诚然,我们自己的描述本可以更清晰地解释这些检查,希望在未来的版本中修复。

Trail of Bits喜欢向审计员和密码学家提供的一条建议是:警惕两个特殊值0和1(及其类似值,如无穷远点)。与0相关的漏洞过去曾造成问题(例如此处和此处)。本例中,未检查0导致两个独立漏洞,允许攻击者在阈值签名方案中将诚实方引入歧途。

(原文包含社交媒体分享链接及博客页脚信息,此处按准则省略非技术内容)
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

相关文章:

零知识证明中的专业漏洞解析

本文深入分析离散对数证明和加密证明中的关键漏洞,揭示攻击者如何通过输入验证缺失伪造不可能证明,影响区块链阈值签名安全,涵盖技术细节和修复方案。专业零知识证明漏洞 - Trail of Bits博客 零知识(ZK)证明是近年来备受关注的密码学工具,主要应用于加密货币领域。ZK证明…...

2025.9.16日软件工程学习日志

今日设计了测试项目的html页面 `科技成果信息填报系统* { box-sizing: border-box; margin: 0; padding: 0; font-family: "Microsoft YaHei", sans-serif } body { background-color: rgba(245, 247, 250, 1); color: rgba(51, 51, 51, 1); line-height: 1.6; paddi…...

2025ccpc南昌邀请赛感想+补题

比赛前去了81纪念馆和滕王阁,必须说江西的风景还是不错的,不过可惜的是作为一个江西人没有吃到足够辣的江西菜 赛前一晚做梦梦到比赛打炸了,然后还有另一个比赛也忘记打了,回去被同学鞭尸给我吓醒了,谁懂醒来还在酒店床上的救赎感 还好梦是反的,最后7题拿下第一个金牌,可…...

img标签如何去除边框?

原文版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/qq_41964720/article/details/131397016 原文作者:grapelet_kmw于 2023-06-26 14:41:12 发布—————————————————————…...

25.9.16 java se大致了解后开始学习MySQL

今天把java se基础内容看完了,有些内容现在单独看是很脱节的,先了解个大概,后面用到了再加深理解。 把mysql和datagrip配置了一下,看了mysql的基础、事务,索引刚看完B+树(从八股上看索引是重点)。 明天计划把mysql的大部分内容看完,主要剩下的重点是 SQL优化、锁、Inno…...

C++ + OpenCV + Tesseract 实现英文数字验证码识别

本文展示如何用 C++ 结合 OpenCV 做图像预处理,再调用 Tesseract OCR 识别验证码。适用于希望在高性能后端或本地服务里集成 OCR 的场景。方案包含: 环境与依赖安装 图像预处理(灰度、二值化、形态学去噪、放大) 使用 Tesseract API 调用(设定白名单、PSM) 完整 C++ 示例…...

Hadoop伪分布式hbase学习

Hadoop全方位学习指南:从核心概念到生态系统 引言:为什么需要Hadoop? 在当今大数据时代,我们面临着前所未有的数据挑战——数据量巨大(Volume)、数据类型繁多(Variety)、处理速度要求快(Velocity)。传统的单机系统在存储和处理如此规模的数据时已力不从心。 Hadoop应…...

Redis源码学习 -- 基本数据结构 -- Quicklist - -蓝蜗牛

1. 什么是 Quicklist? Quicklist​​是Redis自主研发的一种双向表数据结构,是List的底层数据结构之一。设计的核心思想是在时间和空间之间取一个平衡点。 2. Quicklist vs 普通链表 vs Listpack List系列命令的设计目标:两端操作O(1),随机操作O(n)。普通链表存在的问题? 普…...

动态修改线程池参数

import java.util.concurrent.BlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** 动态线程池*/ public class DynamicThreadPool extends ThreadPoolExecutor {private …...

力扣70题 爬楼梯

1.确定dp数组以及下标的含义 dp[i]:爬到第i层楼梯,有dp[i]种方法 2.确定递推公式 dp[i]=dp[i-1]+dp[i-2] 3.dp数组如何初始化 dp[1]=1,dp[2]=2 4.确定遍历顺序 从前向后遍历的 5.举例推导dp数组 class Solution { public:int climbStairs(int n) {if (n <= 1) return n; /…...

PHP(Laravel)+ ImageMagick + Tesseract 实现验证码识别

一、概述与适用场景 本文演示如何在 PHP 服务端用 ImageMagick 做图像预处理,再调用系统安装的 Tesseract 做 OCR,最后用 Laravel 封装为 REST API。适合把验证码识别功能接入测试工具、后台自动化流程或内部管理平台。 优点: PHP 技术栈贴合多数 Web 后端; ImageMagick 提…...

表格识别技术:“唤醒”沉睡在纸质文档中的海量结构化数据

在日常工作和生活中,我们无处不在与表格打交道。从财务报表、发票收据,到科研论文中的数据表、医疗报告,表格以其清晰、结构化的方式,承载着大量关键信息。然而,当这些表格以纸质或图片等非结构化形式存在时,如何高效、准确地将它们转换为可编辑、可分析的数据,便成了一…...

【大三下】资料,仅内部学习使用

参考&推荐资料: 1.小金学长资料(微信公众号“小金同学HEI”) 2.朝阳医院22级课件 免责声明: 1.仅个人编写,可能出错,欢迎补充及捉虫 (作者只是勉强前十的本科生,比不了其它资料的作者) 2.仅供学习交流使用 3.若有条件请观看推荐资料或其它资料 4.该文档无任何医学…...

fastboot工具的常见命令

Fastboot是一个在Android开发环境中常用的工具,它是一个诊断工具,用于修改Android手机的固件。fastboot devices:显示当前连接到计算机的设备。此命令用于检查设备是否成功进入fastboot模式并通过USB正确连接到计算机。 fastboot oem unlock:解锁设备的 bootloader。这是在…...

《软件需求最佳实践》阅读笔记一

这本书主要从软件需求实践中出现的主要问题和困难入手,指出了改造的主要方法,然后逐一说明了需求定义、需求捕获、需求分析与建模、编写规约、需求验证等需求开发活动的任务、要点和具体手段。还对包括需求基线、变更管理、需求跟踪在内的需求管理活动的操作要点进行了阐述。…...

挖掘PDF生成器中的SSRF漏洞:从发现到利用

本文详细介绍了如何在PDF生成器中寻找和利用服务器端请求伪造(SSRF)漏洞,涵盖HTML注入、远程服务器访问、JavaScript执行等技术细节,并提供了针对云环境(如AWS IMDS)的具体攻击方法和实战技巧。挖掘PDF生成器中的SSRF漏洞 如果你在网站上看到以下功能之一,很可能遇到了服…...

做题记录 2

F. Shift and Revers 题意 给定 \(a_i\) ,操作有让 \(a_n\) 移到第一位和翻转整个序列,问最小操作数使得 \(a_i\) 从小到大排序。 做法 (不)容易发现可以正反都做一次取 min。 P6617 查找 Search 一道有点折磨的分讨题 理不清思路容易WA 给定 \(n\) 个垃圾桶,你需要维护一个…...

计数原理与排列组合

加法原理:做一件事情,有 \(n\) 类办法,第 \(1\) 类办法有 \(m_1\) 种方法,第 \(2\) 类办法有 \(m_2\) 种方法,第 \(n\) 类办法有 \(m_n\) 种方法,则完成这件事情的办法有 \(m_1+m_2+\cdots+m_n\) 种。 加法原理属于分类计数原理,分类需要包含所有情况,类与类之间不会产…...

9.16动态用例设计方法 笔记

...

深入解析:ESP32三种主流的开发环境

深入解析:ESP32三种主流的开发环境pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; …...

js

js...

9.16电商状态迁移图

...

c# ConcurrentDictionary

using System.Collections.Concurrent;internal class Program {static void Main(string[] args){ConcurrentDictionary<string, RedisConnection> redisConnectionDic = new ConcurrentDictionary<string, RedisConnection>();int redisConn =10;//会多次创建//P…...

核桃OJ【S组 第二轮】信息学竞赛10w选手模拟考

赤石,爽!核桃OJ【S组 第二轮】信息学竞赛10w选手模拟考 什么糖丸的名字 还是pvz专场。 植物部队哈基米 哦哦哦,感觉就不难,无非是一个连续段成环和特殊植物两种,复杂度能过。哈哈哈,预处理跑2s,太帅了吧!卡常!最后跑1.5s,过了。可是你大样例只有一个不满的,这是什么…...

第一次个人编程作业

第一次个人编程作业 作业GitHub链接https://github.com/useful-Tree/3123004757/tree/main 一、PSP表格(预估与实际耗时)PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 15 20 Estimate估计任务所需时间 15 20Development 开发 …...

【初赛】软件系统 - Slayer

软件系统 (主要是之前做到了几次 全错 来记一下 系统软件 操作系统、Windows、dos、unix、各种计算机语言处理程序、机器语言、汇编语言、高级语言、数据库管理系统、支持软件 应用软件 程序库、软件包、套装软件、用户程序 常见:字处理软件、电子制表软件、计算机辅助设计软…...

漏洞详解--XXE 从入门到精通!

一、漏洞原理 1.1 核心 XXE(XML External Entity injection),名为XML外部实体注入。其核心在于XML解析器默认允许外部实体/DTD,攻击者通过构造特殊的XML使其包含恶意外部实体。外部实体可以为服务器敏感文件,也可以为网络请求等,之后利用方式类似于文件包含和SSRF,有时甚…...

数学分析习题课 note

ohno,这很难第一讲:实数系 我们可以定义有序域 \(F\) 。一些有序域 \((F,+,\cdot,\le )\) 满足以下所谓连续公理: 连续公理 阿基米德公理:\(\forall x,y\in F,x>0,\exists n\in N^{+}\) 使得 \(nx>y\) 完备公理:若存在代数结构 \((F,+,\cdot,\le )\) 满足 \(F\subse…...

总结-CDQ 分治

关于 CDQ 分治 CDQ 分治是一种思想而不是具体的算法,并且必须离线处理,用于维护具有偏序限制的问题。 偏序可以理解为大小关系。 经典三维偏序 CDQ 分治的经典应用。 给定每个元素,每个元素都有三个属性 \((x,y,z)\),要求统计所有满足三个偏序条件时的价值。 标准方法:sor…...

【初赛】计算机语言 - Slayer

计算机语言 编译性语言 c c++ pascal 解释性预言 py java JavaScript ruby PHP...

深入浅出RocketMQ客户端编程

深入理解RocketMQ:从架构到实战的全方位指南 在当今分布式系统日益普及的时代,消息队列已成为支撑高并发、高可靠业务的核心组件。RocketMQ作为阿里巴巴开源的高性能消息中间件,凭借其卓越的性能和稳定性,在电商、金融等高要求场景中得到了广泛应用。今天,让我们一起深入探…...

Win10玩LOL弹窗

将红框内关闭关闭后,可以按win+g快捷键,如果不弹出那个窗口,在LOL里面应该也不会弹出...

溢出存储变量

这个 negative(i) 表示的就是 (-i) 这个数(其中 i>=0),在二进制下的编码。 这个编码满足 \(i+negative(i)=2^k\),可是由于我们二进制下只有 \(k\) 位,最高位是 \(2^{k-1}\),所以那个 \(1\) 会被丢掉,所以加起来结果为 \(0\)。 那如何确定一个数被存储为多少,因为前面…...

retrieving repo key for OS unencrypted from

在服务器上安装mkfontscale工具时,下载成功但是再安装过程中一直提示: retrieving repo key for OS unencrypted from http://repo.openeuler.org/openEuler-22.03-LTS-SP3/OS/x86_64/RPM-GPG-KEY-openEuler。 手动下载RPM-GPG-KEY-openEuler文件,将其上传到服务器/etc/yum.…...

3. Explain详解与索引最佳实践

3.1 Explain使用与详解id select_type table partitions type possible_keys key key_len ref rows filtered Extra1 SIMPLE user NULL ref idx_name_age_dpt idx_name_age_dpt 1023 const 1 100.0 NULL中 重要 中 低 重要 重要 重要 重要一般 一般 一般通过EXPLAIN或DESC命令获…...

软工个人项目作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477这个作业的目标 制作论文查重工具论文查重工具项目文档 项目概述 本项目是一…...

异地办公文件同步,多台设备如何无缝同步最新教程

如何实现异地电脑文件同步?本文对比了坚果云与Syncthing等复杂技术方案。讲解如何使用坚果云,无需繁琐配置,即可在Windows/Mac等多设备间实现文件自动、实时同步。是解决远程办公和多设备管理难题的简单、高效选择。异地电脑文件同步?告别复杂技术,一招搞定! 身处不同城市…...

CSP-S模拟22

前言: 哈哈哈,又是一场爆零的模拟赛~~ \(T1:\) 木棍 思路: 机房出现了两种思路: 第一种:我们不难发现,一共就只有五种情况\({334}{2233}{2224}{244}{22222}\)...

详细介绍:【系统分析师】2025年上半年真题:论文及解题思路

详细介绍:【系统分析师】2025年上半年真题:论文及解题思路pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New",…...

实战有效的Web时序攻击技术剖析

本文深入探讨了Web时序攻击的实际应用,包括参数发现、服务器端注入和反向代理配置错误检测,通过真实案例展示了高精度时序分析技术在安全测试中的突破性进展。倾听低语:实际有效的Web时序攻击 | PortSwigger研究 James Kettle 研究总监 @albinowax 发布时间:2024年8月7日 1…...

22222222 - idle

//为什么要攀登?因为山就在那里。 #include<bits/stdc++.h> #define mrx 0x7f7f7f7f7f7f7f7f //#define int long long using namespace std; inline int read(){int num=0,flag=1;char ch=getchar();while(ch<0||ch>9){if(ch==-) flag=-1;ch=getchar();}while(ch…...

表格如何设置多人在线编辑?坚果云实时编辑,告别版本冲突!

还在为Excel表格多人协作的版本混乱、数据冲突而烦恼吗?本文深入对比坚果云、在线Office等三大解决方案,并提供坚果云实战教程。教你如何利用其强大的实时同步、版本管理和权限控制功能,彻底告别协作难题,实现高效、安全的团队文件管理。告别表格协作难题:三大高效解决方案…...

白嫖党狂喜!爆肝一下午搞定 URL 转 HTML 幻灯片神器,ISlide 9900 资源点从此是路人

原文:白嫖党狂喜!爆肝一下午搞定 URL 转 HTML 幻灯片神器,ISlide 9900 资源点从此是路人家人们谁懂啊!之前分享的 ISlide 插件做 PPT 一次要耗 9900 个资源点【从 url 到 PPT 一键生成:Coze 工作流,颠覆你的内容创作方式!】,作为资深白嫖党看着资源点的大量消耗实在心疼…...

继承

1.概述 子类和父类的区分需要根据实际情况,不能随便使用 2.子类只能继承一个父类,(单继承),但是可以多级继承 所有类都简介或直接继承Object类(java虚拟机自动生成) 3继承的内容 成员变量 继承的private内容可以被继承但是不能直接使用,需要用get()方法 继承中成员变量的访问特…...

我们究竟在用钱交换什么?

钱,藏着哪些我们没说透的用途?"穷人用健康换钱,富人用钱买健康",而最残忍的是,后者永远买不完 这个世界上,钱不是万能的,但有钱的确能解决99%的问题,包括给我们带来自尊和底气!中国有句老话:和气生财,我认为,和气不一定生财,但有钱确实能为家庭带来一…...

jupyterLab如何使用

好的,JupyterLab 是一个非常强大的交互式开发环境(IDE)。下面我将从安装、启动、核心功能到高级技巧,为你提供一个完整的入门指南。一、安装 JupyterLab 首先,你需要安装 JupyterLab。强烈建议在虚拟环境中安装,以避免包冲突。 1. 使用 pip 安装(最常用) # 1. 创建并激…...

HyperWorks许可监控

在当今竞争激烈的工程设计和仿真领域,资源的高效利用至关重要。HyperWorks作为一款业界领先的工程仿真软件,其许可监控功能为用户提供了强大的资源管理和优化工具。本文将向您介绍HyperWorks许可监控的重要性以及如何利用它确保您的资源得到充分利用。 什么是HyperWorks许可监…...

C++拷贝构造函数详解:从浅拷贝到深拷贝

什么是拷贝构造函数? 拷贝构造函数是C++中的一种特殊构造函数,用于创建一个新对象作为现有对象的副本。当我们使用一个对象来初始化同类型的另一个对象时,拷贝构造函数就会被调用。 基本语法 class MyClass { public:// 拷贝构造函数MyClass(const MyClass& other) {// …...

K8S探针

https://blog.csdn.net/weixin_28820113/article/details/148380309 HTTP探测实战(最常用) 向容器发送 HTTP 请求,若返回状态码为 200-399,则表示检查成功[root@master ~/probe]# cat readiness.yaml kind: Pod apiVersion: v1 metadata:name: nginxlabels:app: nginx spec…...

模拟赛

波波牛的惩罚 我们先处理出每个数可能影响的数,可以用链式前向星或 vector 我们维护一个队列,在最开始的时候放入最小值。 每次取出一个数,然后遍历所有可以影响的数,并把影响成功的数放进队列。 在最后判一下是否相同即可。 复杂度 \(O(n)\)。点击展开代码 #include<bi…...