“Private Key Reuse Detected!“-详解私钥重用警告

在某些情况下,IOTA GUI钱包会显示一个如下图所示的警告:Private Key Reuse Detected (检测到私钥重用)!

“Private Key Reuse Detected!“-详解私钥重用警告

这意味着,钱包检测到你正在发起一笔新交易,但这次交易可能会使你的资金面临风险,所以钱包阻止了这次交易。实际上,这意味着有资金已经被锁定了。

文章共分两部分:第一部分(本文),将讲解这个错误提示的含义以及是什么原因导致出现这种情况的。第二部分,将介绍使被锁定资金再次可用的一切手段:Private Key Reuse Detected!-找回被锁定的资金

内容导读

1. 密钥重用警告是什么意思?

2. 为什么会出现这种情况?

2.1 地址上有交易处在pending状态时再次发送交易

2.2 使用已有过转出交易的地址来接收资金

2.3 之前有交易是在未正确同步的节点上进行的

1. 密钥重用警告是什么意思?

当使用IOTA发送交易时,通过在交易中添加签名来证明你是资金的真正拥有者。签名是使用量子证明的温特尼茨一次性签名算法(W-OTS)生成的,该算法的一个副作用是它会暴露地址的50%的私钥。但是,没有理由担心,即使有50%的关键信息暴露出来,除真正所有者以外的其他人也无法获得你的资金。但是,如果再次在同一地址上发起交易并签名时,又会有50%的密钥被暴露出来。每多签名一次,暴露的密钥信息就越多,攻击者根据已发布部分的随机重叠进行暴力破解的可能性就会越高。

由于上述原因,IOTA中的一个地址仅可用于发送一次交易。该地址上的剩余资金将被钱包自动转移到种子的一个新地址上。

“Private Key Reuse Detected!“-详解私钥重用警告

上图描述了一个简单的IOTA交易过程。Bob在他的种子的第一个地址上有100个IOTA。当他将这个地址上的10 i发送给Alice时,钱包会自动的在同一个交易bundle中将剩余的90个IOTA发送到种子的另一个新地址上。第一个地址上的所有资金通过这种方式被清空,并且在交易进入tagnle后该地址会立即被视为已使用。

如果旧地址上的剩余资金总是会在交易时被清空并转移到新地址,但是为什么还是会看到密钥重用的警告呢?

2. 为什么会出现这种情况?

如果你看到密钥重用警告,这意味着在一个已经有转出交易的地址上仍有资金,这笔转出交易是否已确认或仍在待验证中并不重要。从同一个地址再次发送交易会使你的资金面临风险,因此钱包会阻止你这样做。

只使用官方钱包并遵循一些简单的基本规则的话,不会出现这种情况,但有些极端情况仍然有可能会成功地造成资金被锁定。

  1. 地址上有交易处在pending状态时再次发送交易
  2. 使用已有过转出交易的地址来接收资金
  3. 之前的交易是在未正确同步的节点上进行的

2.1 地址上有交易处在pending状态时再次发送交易

一旦交易被发送到tangle,它就会进入pending状态,直到被确认。在此期间,资金仍是保留在发送地址上的,在钱包中可以看到有一笔转出交易。但是,包含该发送地址50%私钥的签名已经发布了。

“Private Key Reuse Detected!“-详解私钥重用警告

如果在该地址上仍有处于pending状态的交易时尝试发送另一个交易,则你的钱包可能不得不再次使用同一个地址进行发送。但如前所述,从单个地址发送两次交易意味着再次使用该地址的私钥,这样钱包就会显示密钥重用警告。

大部分私钥重用警告是由于这个原因导致的,所以在发出另一笔交易之前,请务必确认所有(转出和转入)的交易都已被确认。

2.2 使用已有过转出交易的地址来接收资金

造成资金被锁定的另一种常见情况是使用已有过转出交易的地址来接收IOTA。正如官方多次重申的那样,绝不应该向已有过转出交易的地址发送资金或者使用已有过转出交易的地址来接收资金。通过使用官方钱包,几乎不可能会发生此情况,因为钱包检测到上述情况时,会发出一个警告并阻止交易被发送。

但是,如果发送方使用不同寻常的方式来转移iota,仍然有可能通过底层iota协议成功进行。例如,如果你从交易所提取资金并使用已经有转出交易的种子地址来接收,那么交易所仍然可能会成功向该地址发送IOTA。

不幸的是,当前的GUI钱包并不能真正帮助你找到受影响的地址,并且错误消息/警告与pending交易的警告信息相同(因为它们在技术上是出于相同的原因)。

从这样的地址中找回资金只有两种方式。一个是使用一个没有阻止密钥重用功能的钱包来转移资金,这会带来一些风险,将在第二部分详细介绍。如果你已经知道这是你的问题,你可以阅读文章第二部分的“将资金移至新种子”章节。

如果不考虑后果,那么可以用第二种方法来移动资金,即重放一个旧的传出交易,这在需要转移大额资金时特别有用的,因为它不需要再次签名。但是,只有在某些条件下,这仅仅是有可能的,并在特定条件下才推荐这样做,本文不对此进行详细介绍。如果你有大量的资金被锁定在一个已用地址上,并且不希望增加任何风险,则应考虑重放方案,并在iota Discord的#help频道中寻求帮助。

2.3 之前有交易是在未正确同步的节点上进行的

导致出现此种情况的第三种原因可能是使用了一个不健康的节点。当向tangle发送交易时,应始终确保你所使用的节点已完全同步。在官方的GUI钱包中,可以通过左下角的两个里程碑数字来了解当前所选节点是否已完全同步。如果两个数字相同并不时的变化(大约每1-2分钟变化一次),则你所选的节点是正确同步的。

“Private Key Reuse Detected!“-详解私钥重用警告

如果一个节点没有完全同步,则意味着该节点并未包含tangle上所有的交易信息,即它的数据不是最新的。当使用未完全同步的节点发送交易时,钱包可能会尝试从已经用过的地址或已收到更多资金的地址发送资金。第一种情况可能会导致一个永远不会确认的交易,第二种情况会导致发送地址中仍有残留资金。在这两种情况下,最终都会导致资金被锁定,再次尝试交易时就会出现“Private Key Reuse Detected!”的警告。这是一个更为复杂和不太常见的导致资金被锁定的原因。对于这种情况,我们需要使用官方的命令行钱包(cli钱包)来解锁资金。

文章的后半部分将帮助你找出真正出错的地方,并最终帮助你解决问题。

有什么问题或意见? 可以在Iota Discord上联系文章作者(HBMY289)。特别感谢Discord用户olaz preton和berdiin帮助校对本文。

 

原文链接:https://medium.com/coinmonks/private-key-reuse-detected-what-it-means-and-how-to-unblock-your-funds-383eeb8ca036

inhuman

专栏作者:inhuman

个人简介:我共发表了 189 篇文章,总计被阅读了251,773 次,共获得了 1,787 个赞。

作者邮箱 作者主页 Ta的文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注