Nonce(随机数): 什么是 Nonce?Nonce 是指在特定的密码学、区块链或智能合约场景中仅使用一次的唯一值。在加密领域,Nonce 通常被理解为“number used once”(仅使用一次的数字)的简称。Nonce 可以是简单的交易计数器、挖矿字段、随机值、签名输入、智能合约授权 ID,也可以是用于防止重复操作的序列号。Nonce 的确切含义取决于它出现的场景。在 Ethereum 账户中,Nonce 用于Nonce(随机数): 什么是 Nonce?Nonce 是指在特定的密码学、区块链或智能合约场景中仅使用一次的唯一值。在加密领域,Nonce 通常被理解为“number used once”(仅使用一次的数字)的简称。Nonce 可以是简单的交易计数器、挖矿字段、随机值、签名输入、智能合约授权 ID,也可以是用于防止重复操作的序列号。Nonce 的确切含义取决于它出现的场景。在 Ethereum 账户中,Nonce 用于
什么是 Nonce?
Nonce 是指在特定的密码学、区块链或智能合约场景中仅使用一次的唯一值。在加密领域,Nonce 通常被理解为“number used once”(仅使用一次的数字)的简称。Nonce 可以是简单的交易计数器、挖矿字段、随机值、签名输入、智能合约授权 ID,也可以是用于防止重复操作的序列号。Nonce 的确切含义取决于它出现的场景。在 Ethereum 账户中,Nonce 用于排列交易顺序,并防止同一笔已签名交易被执行多次。在 Bitcoin 区块头中,Nonce 是矿工在寻找有效工作量证明哈希时会不断更改的字段。在代币许可中,Nonce 有助于阻止同一份已签名授权被重复使用。在 ECDSA 签名中,Nonce 可以是每次签名使用的秘密值;如果生成方式不当,可能会泄露私钥。由于同一个词会出现在多种加密系统中,用户应始终确认讨论的是哪一种 Nonce。它们最重要的共同点是唯一性。Nonce 之所以有用,是因为它能让某个操作、哈希尝试、消息、交易或签名区别于其他对象。这种唯一性有助于实现重放保护、排序、挖矿、加密安全、合约安全、钱包易用性和私钥保护。Nonce 要点
- Nonce 是指在特定场景中旨在仅使用一次的值。
- Ethereum 账户使用 Nonce 为交易排序并防止交易重放。
- Bitcoin 矿工会更改区块头中的 Nonce,以寻找符合目标要求的工作量证明哈希。
- 智能合约通常使用 Nonce,防止已签名的许可、投票、申领和元交易被重复使用。
- ERC-2612 permit 使用所有者 Nonce,防止同一代币授权签名被重复使用。
- ERC-4337 智能账户为账户抽象工作流采用了更灵活的 Nonce 模型。
- EIP-155 增加了链 ID 重放保护,与交易 Nonce 配合使用。
- EIP-712 结构化消息仍需要应用层 Nonce 检查,因为类型化数据本身不会自动阻止所有重放攻击。
- ECDSA 签名 Nonce 必须保密且唯一,因为重复使用 Nonce 或采用可预测的 Nonce 模式可能会泄露私钥。
- 除非了解待处理交易和替换机制,否则用户不应手动更改钱包 Nonce。
Nonce 为何对加密货币很重要
Nonce 很重要,因为区块链依赖签名、哈希和确定性规则。任何看到有效数字签名的人都可以将其完整复制。许多节点都可以重新广播一笔交易。如果智能合约不检查已签名消息是否已被使用,就可能再次接受同一条消息。矿工可以尝试许多哈希输入来寻找有效区块。钱包可以从同一地址创建多笔交易,因此必须按有效顺序处理这些交易。Nonce 有助于这些系统避免混乱、重复、重放和不安全的重复使用。没有 Nonce,加密系统将难以区分新操作和被复制的旧操作。用户可能只授权过一次代币支出方,却意外允许同一签名再次使用。跨链桥可能会重复处理同一条跨链消息。交易可能会在另一条链上被重放。签名钱包可能因密码学 Nonce 较弱而泄露私钥。Nonce 虽然只是很小的值,却能保护价值巨大的数字资产。Ethereum 账户 Nonce
Ethereum 账户 Nonce 是与账户关联的计数器。Ethereum 的账户文档说明,账户包含一个 Nonce 字段,并且每个账户中只有一笔使用特定 Nonce 的交易可以执行。
对于外部拥有账户,Nonce 表示该账户发送的交易数量。对于合约账户,Nonce 与该合约账户创建的合约有关。如果某个地址已成功发送 25 笔交易,那么它的下一笔普通交易应使用 Nonce 25。该交易执行后,下一笔交易应使用 Nonce 26。这个简单的计数器可以防止同一笔交易执行两次。它还为同一地址发出的交易设定了顺序。通常,Nonce 为 27 的交易不能先于 Nonce 为 26 的交易处理。因此,一笔卡住的交易可能会阻塞同一钱包后续的交易。Ethereum 交易 Nonce
Ethereum 交易 Nonce 是钱包签名的交易数据的一部分。Ethereum 的交易文档将 Nonce 描述为一个依次递增的计数器,用于指示该账户的交易序号。
交易 Nonce 有助于生成唯一的交易哈希。它还会告知网络该交易在发送方交易序列中的位置。如果同一账户的两笔待处理交易使用相同的 Nonce,它们就会竞争同一个序号。其中只有一笔能够执行。这就是加速或取消 Ethereum 交易的基本原理。用户可以提交一笔使用相同 Nonce、但手续费更高的替换交易。如果网络接受替换交易并优先将其打包,该交易就会占用该 Nonce,并阻止较早提交的交易执行。这种机制很实用,但如果用户不了解待处理队列就手动编辑 Nonce,可能会造成困惑。Bitcoin 挖矿 Nonce
Bitcoin 挖矿 Nonce 与 Ethereum 账户 Nonce 不同。Bitcoin 的区块链参考文档将区块头 Nonce 描述为一个 32 位任意数值,矿工会通过更改它来改变区块头哈希。
矿工会反复对区块头数据进行哈希,同时更改 Nonce 和其他可调整字段。目标是找到一个小于或等于当前目标阈值的哈希。如果矿工测试完所有 32 位 Nonce 值仍未找到有效区块,可以更新时间或更改 coinbase 交易,从而改变 Merkle 根。这样矿工就能尝试更多哈希输入。挖矿 Nonce 不负责为用户交易排序。它也不能防止钱包重放攻击。它是工作量证明搜索变量。因此,“Nonce”在不同区块链和场景中可能有截然不同的含义。工作量证明中的 Nonce
在工作量证明挖矿中,Nonce 有助于矿工生成大量不同的哈希尝试。只要输入稍有变化,密码学哈希函数就会生成截然不同的输出。更改 Nonce 会改变区块头输入。输入改变,哈希也会改变。矿工会不断尝试不同的 Nonce 值,直到某个哈希符合网络的难度目标。在这种场景中,Nonce 并非秘密。区块找到后,任何人都能看到 Nonce 并验证哈希。安全性来自找到有效哈希所需的大量工作,而不是隐藏 Nonce。这与签名 Nonce 不同,后者通常必须保密。挖矿 Nonce 是公开的工作量证明搜索工具。用于重放保护的 Nonce
重放保护是 Nonce 在加密领域最重要的用途之一。重放攻击是指有人复制一项有效的已签名操作并再次提交。Nonce 通过使每项已签名操作只能使用一次来防止这种情况。操作执行后,Nonce 会被消耗、递增或标记为已使用。如果有人再次提交同一项已签名操作,Nonce 检查就会失败。这对交易、代币授权、智能合约申领、治理投票、跨链桥消息、钱包登录和元交易都很重要。有效签名可以证明某个密钥批准了某项内容。有效 Nonce 则可以证明该授权在相应场景中尚未被使用。安全的加密授权需要同时通过这两项检查。重放保护可以将被复制的签名从严重威胁变成会被拒绝的重复操作。Nonce 与 EIP-155 链 ID
EIP-155 通过在已签名的 Ethereum 交易数据中加入链 ID,增加了一层重放保护。EIP-155 规范说明,这项变更使交易可以在一条链上生效,而不能在使用不同链 ID 的另一条链上生效。
这一点很重要,因为许多 EVM 兼容链可能采用相似的地址格式和交易结构。交易 Nonce 可防止同一账户的交易在同一条链上执行两次。链 ID 有助于阻止同一笔已签名交易在另一条链上被重放。这两种机制都很重要。一笔交易在一条链上可能是唯一的,但如果在另一条链上也有效,仍可能造成风险。包含链信息的签名可以降低这种风险。如果链信息对应用层签名很重要,签名也应包含相应的链上下文。如果 Nonce 没有绑定到正确的域,其适用范围仍可能过于宽泛。EIP-712 类型化数据中的 Nonce
EIP-712 是一种签署类型化结构化数据的标准。EIP-712 规范指出,该标准本身不包含重放保护。
这意味着开发者必须在验证签名的应用或智能合约中加入重放保护。类型化消息可以包含 Nonce。合约必须检查该 Nonce。合约还必须在成功执行后将 Nonce 标记为已使用或递增。如果合约验证了签名,却忘记更新 Nonce 状态,同一签名就可能被重复使用。EIP-712 提高了可读性并实现域分离,但不能取代审慎的 Nonce 设计。安全的类型化数据签名应包含 Nonce、截止时间、链 ID、验证合约以及获授权的具体操作。用户应将类型化签名视为实际权限,而不是无害的登录弹窗。ERC-2612 Permit 中的 Nonce
ERC-2612 permit 允许代币所有者通过已签名消息授权支出,而无需直接提交链上授权交易。ERC-2612 标准包含一个 nonces 函数,并说明 Nonce 映射用于重放保护。
Permit 成功后,所有者的 Nonce 会递增。这样,同一份 permit 签名就无法在之后再次使用。ERC-2612 还包含截止时间,使已签名授权可以过期。这一点很重要,因为中继者收到 permit 后可以自行选择何时提交。如果没有截止时间,旧签名的有效期可能超出用户预期。如果没有 Nonce,同一份授权签名可能会被反复提交。Permit Nonce 是免 Gas 授权更安全、更实用的重要原因之一。它们也说明,除了普通账户交易 Nonce 之外,智能合约还需要自己的 Nonce 系统。ERC-4337 账户抽象中的 Nonce
ERC-4337 账户抽象使用 UserOperation,而不是由外部拥有账户发出的普通 Ethereum 交易。ERC-4337 规范将 UserOperation Nonce 定义为防重放参数。
规范还指出,签名必须依赖链 ID 和 EntryPoint 地址,以防止跨链或跨 EntryPoint 重放。ERC-4337 支持半抽象化的 Nonce 模型。Nonce 可以拆分为密钥和序列号。这使智能账户能够使用多个 Nonce 通道。钱包可以为普通交易设置一个通道,为管理或恢复操作设置另一个通道。这比单一的简单递增计数器更加灵活。但对钱包开发者和用户而言,它也更加复杂。账户抽象让 Nonce 设计更强大,同时也提高了对清晰钱包界面的需求。Nonce 通道
Nonce 通道是较大的账户或智能账户设计中的独立 Nonce 序列。Nonce 通道允许不同类别的操作并行进行。例如,钱包可以用一个通道进行日常支出,另一个通道处理恢复操作。游戏钱包可以用一个通道处理频繁的小额操作,另一个通道处理大额资产转移。订阅钱包可以用一个通道处理定期付款,另一个通道处理用户管理的交易。这样做的好处是,一项卡住的操作不会阻塞所有其他操作。风险在于,用户可能不清楚自己授权的是哪个通道。开发者必须确保每个通道仍具备可靠的重放保护。只有在用户需要了解时,钱包才应解释 Nonce 通道。理想的设计应为用户提供灵活性,同时避免暴露令人困惑的技术细节。顺序 Nonce
顺序 Nonce 是一种每次有效操作后递增 1 的计数器。这是普通账户交易最常见的模型。顺序 Nonce 会形成清晰的顺序,因此便于审计。它还可以防止同一账户使用相同 Nonce 的两笔交易同时执行。缺点是,较早提交但仍待处理的交易可能会阻塞后续交易。这可能导致交易卡住。用户可能需要先加速或取消较早的交易,后续交易才能继续处理。顺序 Nonce 可靠、简单且应用广泛。但对于需要同时执行多个独立操作的系统而言,它的灵活性较低。因此,智能合约账户和授权系统有时会采用其他 Nonce 模式。随机 Nonce
随机 Nonce 是通过随机性而非简单计数器生成的唯一值。如果操作不需要严格排序,随机 Nonce 就很有用。智能合约可以存储已使用随机 Nonce 的映射。使用已签名授权时,合约会将该随机 Nonce 标记为已消耗。如果同一授权再次出现,合约就会拒绝。随机 Nonce 可以让多项已签名操作同时存在,而不会互相阻塞。缺点在于存储成本和随机性质量。合约可能需要存储大量已使用的 Nonce。钱包或应用必须避免在同一场景中重复生成相同的随机 Nonce。随机 Nonce 灵活,但必须谨慎追踪。智能合约 Nonce
智能合约 Nonce 是由智能合约定义并存储的任意 Nonce 系统。它可以是每位用户的计数器。它可以是已使用消息 ID 的映射。它可以是空投中的申领索引。它可以是治理中的提案投票状态。它可以是市场中的订单哈希。它可以是跨链桥消息序列号。智能合约需要 Nonce,因为普通账户 Nonce 无法保护每一份链下签名或合约级操作。如果合约接受签名,就必须判断该签名是否已经被使用。良好的智能合约 Nonce 设计既能防止重复执行,又能让用户体验保持易用。钱包登录消息中的 Nonce
即使不发生链上交易,钱包登录消息也经常使用 Nonce。网站可能会要求用户签署一条消息,以证明用户控制某个钱包地址。网站应为此次登录尝试生成新的挑战 Nonce。已签名消息应包含域名、Nonce、签发时间、到期时间和用途。成功登录后,服务器应将该 Nonce 标记为已使用。如果攻击者窃取旧登录签名,已使用的 Nonce 应能阻止重放。如果没有新 Nonce,登录签名就可能像可重复使用的密码一样。这很危险,因为用户通常认为消息签名不如交易重要。钱包登录 Nonce 是账户安全的一部分。良好的登录签名应具有明确对象、时效性、有限权限且易于阅读。ECDSA 签名中的 Nonce
ECDSA 签名会使用一个针对每条消息的秘密值,通常称为 Nonce 或签名 Nonce。这种 Nonce 与账户交易 Nonce 不同。它必须保密,并且每次签名都必须唯一。RFC 6979 定义了一种用于 DSA 和 ECDSA 签名生成的确定性方法,以避免每次签名都依赖新的随机数生成。
NIST 的FIPS 186-5 数字签名标准指出,ECDSA 在生成签名时会使用针对每条消息的秘密数值。
如果 ECDSA Nonce 被重复使用或具有可预测性,攻击者可能能够恢复私钥。关于生产环境区块链活动中 ECDSA Nonce 冲突风险的最新研究,强调了 Nonce 生成不当可能造成灾难性后果。
这是 Nonce 在加密安全领域最严重的含义之一。账户 Nonce 出错可能导致交易失败或卡住。ECDSA 签名 Nonce 出错则可能暴露整个钱包。加密中的 Nonce
某些加密系统也会使用 Nonce。在认证加密中,即使同一密钥用于多条消息,Nonce 也有助于确保加密输出各不相同。RFC 5116 定义了带关联数据的认证加密接口,并讨论了使用 Nonce 的 AEAD 算法。
加密钱包、加密备份、安全消息系统和托管软件可能会在内部使用加密 Nonce。这些加密 Nonce 与区块链交易 Nonce 不同。它们用于保护密码学消息。对于许多加密方案,同一密钥下重复使用 Nonce 可能很危险。用户通常不需要手动管理这些 Nonce。开发者和钱包库必须正确处理它们。安全的加密软件会将 Nonce 生成视为关键安全细节。Nonce 与 Salt
Nonce 和 Salt 的概念有关联,但并不相同。Nonce 通常旨在在协议或签名场景中仅使用一次。Salt 通常是加入哈希、密码处理、承诺或地址计算中的随机或唯一数据,用于使输出彼此不同。在加密领域,Salt 可用于确定性部署合约或派生承诺。Nonce 可用于为交易排序或防止重放。这两种值都可以增加唯一性。它们的区别在于所发挥的安全作用不同。Salt 通常用于防止预计算,或使派生值具有唯一性。Nonce 通常用于防止重复使用,或确保协议操作具有时效性。开发者应清楚命名并记录这些值,以避免安全错误。Nonce 与交易哈希
Nonce 不等于交易哈希。Nonce 是交易或协议消息中包含的输入。交易哈希是通过对已签名交易数据进行哈希运算生成的标识符。更改 Nonce 会改变已签名交易,因此也会改变交易哈希。交易被挖出之前,钱包就可能会使用 Nonce。交易广播或被打包后,区块链浏览器通常会显示交易哈希。Nonce 会告知网络该交易在发送方序列中的位置。交易哈希则有助于用户查找并验证交易记录。两者都很重要,但用途不同。将两者混淆会增加排查交易问题的难度。Nonce 与 Gas
Nonce 不是 Gas。Gas 用于衡量计算工作量和交易执行成本。Nonce 用于标识交易顺序或唯一性。交易可能使用了正确的 Nonce,但 Gas 不足或手续费过低。交易也可能有足够的 Gas,但 Nonce 错误。这两类问题会导致不同的失败结果。Gas 问题可能导致执行失败或打包优先级较低。Nonce 问题可能导致交易被拒绝、替换、延迟,或被较早的待处理交易阻塞。用户经常会在高级钱包工具中看到这两个设置。不应随意编辑其中任何一个设置。Nonce 与合约地址创建
Nonce 也会影响合约地址。在 Ethereum 类系统中,通过传统 create 操作创建的合约,其地址由创建者地址和创建者 Nonce 推导得出。这意味着同一账户会随着 Nonce 变化而创建不同的合约地址。开发者在部署合约、测试部署或预测地址时必须了解这一点。如果预期 Nonce 与账户的实际 Nonce 不同,合约部署脚本就可能失败。待处理交易可能改变部署顺序。手动设置 Nonce 出错可能导致合约部署到意料之外的地址。确定性部署方法可以采用其他机制,但普通部署仍然需要妥善管理 Nonce。重要部署应使用受控的部署脚本,并在公布地址前进行验证。部署地址错误可能使用户困惑并导致集成失效。Nonce 与卡住的交易
交易卡住通常是因为手续费较低的交易一直处于待处理状态。如果该交易使用账户的下一个 Nonce,后续交易就可能被它阻塞。这是因为顺序 Nonce 要求先处理较早的 Nonce 序号。即使后续交易的手续费较高,钱包也可能仍将其显示为待处理。真正的问题可能是较早的一笔低 Nonce 交易。用户通常可以通过提交一笔使用相同 Nonce、但手续费更高的替换交易来加速卡住的交易。用户通常也可以提交一笔使用相同 Nonce、手续费更高且无害的替换交易,以取消卡住的交易。这些操作必须谨慎进行。替换错误的 Nonce 可能会取消或覆盖用户仍想执行的操作。Nonce 排查也是高级钱包设置可能对新手构成风险的原因之一。Nonce 与交易替换
交易替换是使用相同 Nonce 替换一笔待处理交易。替换交易会与原交易竞争同一个 Nonce 序号。如果替换交易被接受并先得到确认,原交易就会因该 Nonce 已被使用而失效。用户想提高一笔缓慢交易的手续费时,这种方式很有用。用户想在待处理交易确认前取消它时,这种方式也很有用。替换交易并不意味着区块链会删除已确认的交易。只有较早的交易仍处于待处理状态时,替换才有效。交易一旦确认,Nonce 就会被消耗。之后用户便不能再用该 Nonce 提交另一笔交易。因此,管理待处理交易时,时机很重要。Nonce 与跨链桥
跨链桥会使用 Nonce 或消息 ID,防止同一条跨链消息被处理多次。跨链桥消息可能代表代币充值、提现、铸造、销毁或合约调用。如果目标链多次接受同一条消息,资产可能会被错误释放或铸造。安全的跨链桥消息应包含源链、目标链、源合约、目标合约、发送方、接收方、金额以及唯一 Nonce 或消息 ID。目标合约应将该消息标记为已处理。如果有人重新提交同一条消息,合约应予以拒绝。由于跨链桥连接不同的共识系统,因此 Nonce 设计尤为重要。跨链桥中的重放失效可能给多条链带来系统性风险。用户应将跨链桥安全与代币本身的安全分开看待。代币本身可能没有问题,但跨链桥消息系统仍可能不安全。Nonce 与治理
治理系统会使用类似 Nonce 的状态,防止投票、委托和提案执行被重复处理。一张选票通常只能根据某个投票权快照或明确规定的投票规则计入一次。除非设计明确允许,否则已签名委托不应永久重复使用。除非合约有意支持重复执行,否则同一提案不应执行两次。治理消息可能需要包含提案 ID、投票者 Nonce、链 ID、截止时间和执行状态检查。如果治理控制金库、升级、手续费、风险参数或跨链连接,这一点尤其重要。重放的治理操作可能比支付失败更危险。它可能改变整个协议的规则。良好的治理合约会将重放保护视为核心安全功能。审慎的投票者会在批准前查看自己签署的操作。Nonce 与空投申领
空投和奖励系统通常使用类似 Nonce 的保护机制,防止重复申领。合约可以记录某个地址是否已经申领。合约可以记录某个 Merkle 申领索引是否已经使用。合约可以使用已签名申领消息,其中包含 Nonce、活动 ID、代币数量、截止时间和接收地址。如果缺少这些保护,一次有效申领就可能被重复使用,直到奖励被领空。良好的申领系统会将申领绑定到正确的用户、活动、链、代币、数量和时间范围。用户应谨慎对待来自陌生网站的申领消息签名请求。如果消息内容具有误导性,申领签名可能授权的不只是无害的奖励申领。Nonce 保护可以阻止重复使用,但无法保证首次操作本身无害。钱包信息的清晰度仍然很重要。Nonce 与 DeFi
DeFi 在许多不易察觉的环节中使用 Nonce。代币许可使用 Nonce 来处理已签名授权。元交易使用 Nonce 处理免 Gas 操作。借贷协议可能会为已签名委托或信贷授权使用 Nonce。去中心化订单系统可能会使用 Nonce 或订单哈希,防止已成交订单被再次成交。期权、金库和结构化产品可能会在链下报价或结算消息中使用 Nonce。清算机器人和交易系统也必须谨慎管理账户 Nonce,因为卡住的交易可能阻塞对时间敏感的操作。在 DeFi 中,Nonce 错误可能很快造成资金损失。过期的授权签名可能带来钱包被盗风险。未更新 Nonce 可能使合约遭受重放攻击。交易 Nonce 错误可能导致一笔原本有利可图的交易失败。Nonce 与 NFT
NFT 系统也会在市场挂单、出价、许可、申领和基于签名的转移中使用 Nonce。卖家可能会签署一笔链下订单来出售 NFT。市场合约必须防止同一份已签名订单被超出允许次数地成交。可以通过订单 Nonce、订单哈希、取消计数器或成交状态映射来实现。如果 NFT 订单在售出或取消后仍可重放,卖家可能会意外失去资产。如果出价签名在条件变化后仍可重放,竞买人可能会买下自己已不想购买的资产。NFT 签名应包含系列合约地址、代币 ID、价格、计价币、买卖双方条件、到期时间、链 ID 和 Nonce。用户不应签署含义模糊的 NFT 挂单消息。必要时,用户还应取消旧挂单。Nonce 安全是市场安全的一部分。Nonce 与私钥安全
Nonce 质量会直接影响签名算法中的私钥安全。这对基于 ECDSA 的系统尤其重要。如果同一个 ECDSA 签名 Nonce 被用于两条不同消息,私钥就可能被恢复。在某些条件下,如果签名 Nonce 遵循可预测模式,攻击者也可能恢复密钥。因此,钱包开发者会依赖经过审查的密码学库。除非经过密码学专家审查,否则用户不应为存有大量资产的钱包编写自定义签名软件。交易 Nonce 错误通常可见且可以修复。签名 Nonce 错误则可能在用户毫不知情的情况下泄露私钥。硬件钱包和成熟的软件库有助于降低这种风险。密码学 Nonce 生成不能走捷径。加密领域常见的 Nonce 类型
- 账户 Nonce 用于为区块链账户发出的交易排序。
- 交易 Nonce 包含在已签名交易数据中,使交易具有唯一性。
- 挖矿 Nonce 由工作量证明矿工调整,用于寻找有效区块哈希。
- Permit Nonce 用于防止同一份已签名代币授权被重复使用。
- 智能合约 Nonce 用于防止合约级授权被重复执行。
- 跨链桥消息 Nonce 用于防止同一条跨链消息被处理两次。
- 登录 Nonce 用于生成新的钱包身份验证挑战。
- 签名 Nonce 是某些数字签名算法中针对每条消息使用的秘密值。
- 加密 Nonce 有助于在同一密钥下生成不同的加密消息。
- Nonce 通道是某些智能账户设计使用的独立 Nonce 序列。
Nonce 的常见错误
一个常见错误是认为所有 Nonce 的含义都相同。另一个错误是在未检查待处理交易的情况下手动编辑交易 Nonce。第三个错误是签署不包含 Nonce 的类型化数据。第四个错误是验证了智能合约签名,却忘记将 Nonce 标记为已使用。第五个错误是使用 Nonce 时未加入链 ID 或验证合约域分离信息。第六个错误是将 EIP-712 视为自动重放保护机制。第七个错误是为随机 Nonce 使用质量较差的随机数。第八个错误是重复使用或泄露 ECDSA 签名 Nonce。第九个错误是认为 Nonce 能阻止网络钓鱼。第十个错误是在合约升级时忘记迁移 Nonce 状态。开发者最佳实践
编写代码前,先明确 Nonce 的用途。需要严格排序时使用顺序 Nonce。需要并行执行相互独立的授权时,使用随机 Nonce 或映射式 Nonce。如果链上下文很重要,应在已签名数据中加入链 ID 和验证合约地址。为链下签名设置截止时间或有效期。成功执行时将 Nonce 标记为已使用。在单元测试和集成测试中测试重放尝试。使用经过审查的密码学库处理签名和加密 Nonce。除非基于经过充分审查的标准,否则避免自定义 ECDSA Nonce 生成方式。清楚记录 Nonce 的行为,便于钱包、索引器、审计人员和用户理解。用户最佳实践
除非了解待处理交易的顺序,否则应让钱包管理普通交易 Nonce。从同一钱包发送多笔新交易前,先检查是否有交易卡住。使用加速或取消功能替换交易时应谨慎。签署代币许可消息前应仔细阅读。批准签名之前,应检查支出方、金额、链、截止时间和应用。不要签署来自可疑域名的钱包登录消息。不要因为消息签名不会立即转移资金,就认为它一定安全。使用可信的钱包软件,避免使用不明签名工具。妥善保护高价值资产对应的硬件钱包和恢复方式。请记住,Nonce 保护可以防止重复使用,但无法让有害签名变得无害。Nonce 何时最重要
当签名可以转移价值或更改重要状态时,Nonce 尤为重要。发送普通区块链交易时,Nonce 很重要。通过 permit 授权代币支出时,Nonce 很重要。签署市场订单时,Nonce 很重要。提交跨链桥消息时,Nonce 很重要。投票或签署治理委托时,Nonce 很重要。申领空投或奖励时,Nonce 很重要。使用钱包签名登录时,Nonce 很重要。生成 ECDSA 签名时,Nonce 很重要。任何可能因重复使用、重放或可预测性而造成财务损失的场景,都需要 Nonce。一句话了解 Nonce
Nonce 是在区块链、密码学或智能合约场景中仅使用一次的唯一值,有助于实现交易排序、工作量证明挖矿、重放保护、安全签名、加密安全和可靠的钱包操作。常见问题
加密领域中的 Nonce 是什么意思?
Nonce 是指在特定加密场景中使用的唯一值,例如交易计数器、挖矿字段、已签名消息 ID 或密码学签名值。什么是 Ethereum Nonce?
Ethereum Nonce 是一个计数器,用于为账户交易排序,并防止同一交易 Nonce 被执行两次。什么是 Bitcoin Nonce?
Bitcoin Nonce 是区块头中的一个字段,矿工会在寻找符合网络目标的工作量证明哈希时更改它。钱包为什么使用 Nonce?
钱包使用 Nonce 来生成有效的交易序列、防止重放、替换待处理交易,并追踪下一笔应执行的交易。我可以手动更改 Nonce 吗?
可以,有些钱包允许手动编辑 Nonce,但用户只有在了解待处理交易和替换规则时才应这样做。两笔交易使用相同的 Nonce 会怎样?
同一发送方的相同 Nonce 只能用于执行一笔交易,因此这些交易会竞争同一个序号。为什么我的交易会因 Nonce 卡住?
如果较早的一笔低 Nonce 交易仍处于待处理状态,后续交易就可能被阻塞。Nonce 如何防止重放攻击?
Nonce 通过让已签名操作只能使用一次来防止重放攻击,并使系统能够在 Nonce 被消耗后拒绝相同的 Nonce。EIP-712 会自动处理 Nonce 吗?
不会。EIP-712 用于构建类型化数据,但开发者仍必须在合约或应用中加入并执行 Nonce 检查。什么是 Permit Nonce?
Permit Nonce 是代币所有者使用的 Nonce,用于阻止同一份已签名代币授权被提交多次。什么是签名 Nonce?
签名 Nonce 是某些签名算法中针对每条消息使用的秘密值,处理不当可能会泄露私钥。Nonce 一定是秘密吗?
不一定。账户 Nonce 和挖矿 Nonce 通常是公开的,而某些密码学签名 Nonce 必须保密。结语
Nonce 是一个简短的词,在加密货币领域却有几种重要含义。它的核心概念是唯一性。这种唯一性有助于加密系统区分不同的交易、消息、签名、哈希尝试或合约操作。在 Ethereum 中,账户 Nonce 为交易排序,并防止同一笔交易被执行两次。在 Bitcoin 挖矿中,区块头 Nonce 为矿工提供了一个可变字段,用于寻找有效的工作量证明哈希。在智能合约中,Nonce 可以阻止已签名许可、申领、投票、订单和跨链桥消息被重放。在账户抽象中,更灵活的 Nonce 模型让智能钱包能够支持并行工作流和高级授权逻辑。在 ECDSA 签名中,Nonce 的质量会决定私钥是否安全,或是否可能被攻击者恢复。这些含义遵循同一原则,但实现机制并不相同。挖矿 Nonce 是公开的,并会被反复尝试。账户 Nonce 是公开且按顺序递增的。合约 Nonce 可以是存储的计数器,也可以是已使用消息映射。Permit Nonce 用于保护已签名授权。签名 Nonce 必须保密,并以安全方式生成。因此,每当出现“Nonce”一词时,都要结合具体场景理解。对用户而言,最实用的 Nonce 经验是:除非确实需要手动操作,否则应让钱包处理普通交易排序。用户应谨慎处理卡住的交易、加速交易、取消尝试和手动 Nonce 设置。用户还应仔细阅读签名请求,因为链下消息可能包含 Nonce,却仍可能授权有害操作。对开发者而言,最重要的 Nonce 经验是明确设计重放保护。每份可能转移价值或更改重要状态的签名,都应包含 Nonce、域信息、适当的截止时间以及清晰的操作详情。合约应检查并正确消耗 Nonce。钱包应使用通俗语言向用户展示其授权的内容。密码学代码应使用经过审查的库和安全的 Nonce 生成方法。开发阶段看似微小的 Nonce 错误,部署后可能造成严重后果。缺少 Nonce 检查可能导致重复申领或重复授权。账户 Nonce 错误可能阻塞交易。较弱的 ECDSA Nonce 可能泄露私钥。缺少链 ID 可能导致跨链重放。跨链桥消息缺少适当的 Nonce 追踪,可能被重复处理。因此,Nonce 安全并非可有可无的技术装饰。它是加密资产得以转移、合约得以执行、矿工得以搜索、钱包得以签名,以及用户确信一次授权只会执行预期操作的重要基础。您可能也喜欢
反恐融资(CTF)
反恐怖主义融资(CTF)是指旨在发现、预防和打击恐怖主义活动资金支持的法律、法规和活动。这包括监控和监管资金流动、在金融机构内部实施合规计划,以及执行旨在遏制恐怖主义融资的国际制裁和法规。 反恐融资在各领域的重要性 反恐融资在包括银行业、科技和国际贸易在内的各个领域都至关重要。在金融领域,强而有力的反恐融资措施可确保银行和其他金融机构不会被恐怖组织利用为其活动提供资金。这不仅有助于维护金融体系的完
2025/12/23 18:42
框架
在专业情境中,「框架」指的是一套结构化的指南、工具或实践,旨在支援专案、应用程式或系统的开发和实施。它提供了一种标准化的方法来解决复杂问题或实现特定目标,通常包含可根据具体需求进行调整和扩展的预先建置元件。 框架的关键特征 框架在软体开发、专案管理和数位行销等各个领域都至关重要。例如,在软体开发中,Angular、React 和 Django 等框架提供了开发人员用来高效建立高品质应用程式的程式库
2025/12/23 18:42
波动性爆发
「波动性爆发」是指金融市场、资产或指数的波动性突然显著增加,通常由不可预见的事件或市场情绪变化所驱动。这种突如其来的增加会导致价格大幅波动和交易量激增,从而影响投资者和交易者的风险和机会。 了解波动性爆发 波动性是衡量特定证券或市场指数收益分散程度的统计指标,显示资产价格在特定期间内的波动幅度。当这种波动超出正常水平时,就会发生波动性爆发,这通常是对意外新闻或经济事件的反应。这些事件可能包括地缘政
2025/12/23 18:42
热门
目前热门备受市场关注的加密货币
最高成交量
按交易量计算交易量最大的加密货币

