杜撰

定义

nonce(仅使用一次的数字)是指在一次搜索过程中只使用一次的数字。 加密 通信以防止重放攻击并确保消息新鲜度。 

在比特币挖矿中,nonce 是一个 32 位数字,矿工每秒递增数十亿次,试图找到低于目标难度的哈希输出——这就是“工作量证明”计算。 

在以太坊交易中,nonce 是每个账户的顺序交易计数器:来自地址的每笔新交易都必须使用下一个 nonce(从 0 开始),以确保交易按顺序处理并防止双重支付重放攻击。 

如果跳过了交易的 nonce,则来自该地址的所有后续交易都将停滞,直到填补该空缺为止。

两种语境下的随机事件

上下文 1:比特币挖矿(工作量证明)

目标:找到一个难度低于目标值的哈希值。过程:矿工尝试不同的随机数:随机数 = 0:哈希值(区块头 + 0) = 0xaf2b…(难度过高)随机数 = 1:哈希值(区块头 + 1) = 0xce4a…(难度过高)随机数 = 2:哈希值(区块头 + 2) = 0xb91c…(难度过高)… 随机数 = 3,847,291,023:哈希值 = 0x0000000000a3b…(难度低于目标值!)→ 找到区块!有效 工作证明.

现代ASIC矿机每秒消耗约4亿个随机数。如果32位范围内没有有效的随机数:修改时间戳或Coinbase交易记录 → 重新开始随机数搜索。

上下文 2:以太坊账户随机数(交易计数器)

Alice 发送交易:交易 1:Nonce = 0(Alice 地址发出的第一笔交易)交易 2:Nonce = 1 交易 3:Nonce = 2 交易 4:Nonce = 3

问题: 交易 3 卡住(手续费过低):交易 3 处于待处理状态 → 交易 4 无法处理(随机数缺失) 解决方法:提高交易手续费重新发送交易 3 → 交易 3 确认 → 交易 4 确认

重放保护:如果 TX 3 在主网上得到确认 → 同一笔交易无法在测试网上重放(不同的链 ID 使得 nonce + 签名对每条链都是唯一的)

加密系统中的随机数

系统 临时用途 范围
比特币矿业 改变输入以找到有效的 PoW 哈希 0 到 2^32 (~4B)
以太坊账户 每个地址的顺序发送计数器 0 到 2^64 – 1(约 18.4 万亿亿)
加密协议 防止签名中的重放攻击 随机或顺序
SSL / TLS 确保会话唯一性 每场随机

常见问题解答

问:为什么以太坊使用顺序 nonce 而不是随机 nonce?

顺序随机数(0、1、2、3……)强制执行交易顺序:您不能重复花费同一笔资金,并且交易按提交顺序执行。随机随机数无法如此有效地防止重放攻击,并且需要额外的机制来检测重复交易。顺序随机数还便于识别“卡住”的交易:如果随机数 5 处于待处理状态,而随机数 6 已提交,则随机数 6 将等待随机数 5 确认后再执行。

问:如何修复卡住的以太坊交易?

如果交易因 nonce 待处理而卡住,您必须:(1) 加速交易——使用更高的 gas 费用重新发送相同的 nonce(MetaMask 有“加速交易”按钮),或者 (2) 取消交易——使用更高的 gas 费用向自己发送 0 ETH,使用相同的 nonce,这将替换卡住的交易。一旦卡住的 nonce 问题解决,后续使用更高 nonce 的交易将会正常处理。

问:密码学中的“随机数重用攻击”是什么?

在加密签名方案中,对同一私钥重复使用随机数(nonce)可能会导致私钥在数学上泄露。PlayStation 3 黑客攻击(fail0verflow,2010)利用了索尼在 ECDSA 签名中使用的恒定随机数,仅通过两次签名即可提取私钥。比特币的 ECDSA 签名使用确定性随机数(RFC 6979)正是为了防止此类漏洞。

UPay小贴士: 如果你的 MetaMask 如果交易长时间处于“待处理”状态,请在 Etherscan 上查看您当前的 nonce 值(您的地址 → 交易 → 查找待处理交易的 nonce 值)。在 MetaMask 设置中启用“高级 Gas 控制”,然后使用相同的 nonce 值但更高的 gas 价格重新发送交易。这将“替换”内存池中的旧交易。切勿手动设置高于当前待处理 nonce 值的 nonce 值——否则会造成 nonce 值空缺,阻塞所有后续交易,直到该空缺被填补。

免责声明:本内容仅供教育用途,不构成财务建议。

优付 — 打造加密货币百科全书

新闻