“Private Key Reuse Detected!“-找回被锁定的资金

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

“Private Key Reuse Detected!“-找回被锁定的资金

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

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

导致出现密钥重用警告的原因主要有两个。第一种情况是当前还有处在Pending状态的交易,第二种情况是在已用地址上仍然存有资金。

首先需要检查是否有处在Pending状态的交易,因为这是在正常交易规则范围内的现象,只需让交易得到确认即可,而且不会给你的资金带来任何风险。如果没有找到处在Pending状态的交易,则有可能是由于在已用地址上仍存有资金的缘故(已被锁定),这就需要使用IOTA官方的命令行钱包(Cli Wallet)来转移这些资金。请注意,这其中包含一定的风险,稍后将详细解释。

内容导读:

1. Pending状态的交易

1.1 查找Pending中的交易

1.2 如何确认Pending状态的交易

2. 转移资金

2.1 首先转移未锁定的资金

2.2 使用Cli钱包转移被锁定的资金

2.3 安装Cli钱包

2.4 发送被锁定的资金

1. Pending状态的交易

当有交易处在Pending状态时,钱包就会阻止你再次发送IOTA。尽管交易在大多数情况下能够很快得到确认,但也有几率会遇到卡在pending状态的时间过长的情况。另一个交易需要选择你的交易作为tip并确认你的交易,这是IOTA Tangle的工作方式。由于tip选择算法的性质,越早的交易被其他交易确认的可能性越小。如果一笔交易有几天甚至几周的历史,那么它很可能就不会再被选中了,有可能会永远pending下去。

所以这就是为什么有时候我们需要采取手动措施来主动推动交易的确认,既大家熟悉的Reattach。

1.1 查找Pending中的交易

首先,需要找到所有带有价值(交易额大于0i)的处在Pending状态的交易。零值交易不需要确认,也不会阻止钱包的转帐,所以我们可以忽略零值交易。

打开钱包的历史记录,查看转账列表。排在最前面的是最近的交易。

“Private Key Reuse Detected!“-找回被锁定的资金

找到标识有pending字样的条目。不幸的是,交易历史也有可能看起来有些混乱,因为你可能会遇到像这样的(同一个交易的)多个条目:

“Private Key Reuse Detected!“-找回被锁定的资金

我们可以看到三笔交易,一笔已经确认,另外两笔交易则是pending中。实际上,历史中的这三个条目是同一个交易包(bundle)的重新附加或副本。如果你点击pending前面带下划线的Show bundle链接,就会显示该交易包的详情窗口。

“Private Key Reuse Detected!“-找回被锁定的资金

在上图所示的交易包详情窗口中,你可以看到一个更准确的状态表示,该状态(红框框出部分)告诉你该交易(通过重新附加后)已经被确认。因此,可以确认该笔交易并不是造成资金锁定的pending交易,我们可以忽略它。

查看全部交易历史,检查所有pending交易的交易包来排查出真正处在pending中的所有交易。

1.2 如何确认一个处在pending状态的交易

如果你找出了一个或者多个pending交易,点击它(们)的Show bundle链接,会出现如下图所示的窗口。

“Private Key Reuse Detected!“-找回被锁定的资金

第一个按钮Rebroadcast很少用到,只有在某些极端情况下才有用,比如你所使用的节点没有将你发送的交易正确的广播给邻居的时候。点击Reattach按钮可以为pending中的交易在tangle的其它位置创建一个交易包的新副本。此操作没有任何风险,不会暴露私钥的任何信息。Reattach后的新交易会获得更高的机会来被其他交易确认。

成功Reattach后,Reattach按钮上的文字会变为Promote,你可以通过Promote来进一步增加交易被确认的机会。这个功能使你的交易更受欢迎,更容易被其它交易选为tip。

“Private Key Reuse Detected!“-找回被锁定的资金

每次点击Promote按钮时,钱包会将你的交易提升5次,意思是交易的权重被提高了,权重越高被确认的几率就越高。

根据经验来看,如果一个交易超过30分钟未确认,就可以进行Reattach,在此期间,也可以无限次的进行Promote。

如果钱包中所有的pending交易都被确认后,你就可以随便进行其它交易了,“Private Key Reuse Detected!”的提示也不会再出现了。如果你没有在钱包内发现pending交易,则可以排除出现警告是存在pending交易导致的。此时,你需要使用Cli钱包来转移你的资金。

2. 转移资金

虽然出现私钥重用警告的种子并没有被破坏,以后还可以继续用,但是为了更方便和安全,建议通过后文讲述的方法将现用种子上的所有资金转入一个新种子。

首先,通过安全的方法创建一个新种子(不要使用任何在线种子生成器)。如果你不知道如何安全的生成种子,请参考:IOTA视频教程-3:IOTA种子

将新种子保存到安全的地方,使用新种子登录钱包并生成一个新的接收地址,将该地址复制保存到一个记事本中以备随时取用,这个地址将接收旧种子里的所有资金。

2.1 先将未锁定的资金转移

通过了解GUI钱包和Trinity的工作方式,你会发现并不是所有的资金都被锁定了。只有受影响地址上的资金才真正的需要使用Cli钱包来进行转移。剩余的正常资金可以使用官方的GUI钱包或Trinity来转移。

为了首先转移未受影响的资金,你需要先知道这部分资金的确切数额。如果你已经确定了被锁资金所在的地址,就可以知道该地址上有多少资金(可通过thetangle.org查询),然后从钱包总余额中减去这部分资金(如果有多个被锁资金的地址,就需要减去多次),得出的结果就是未被锁定的资金余额,然后发起新交易把这些正常资金转移到“2.转移资金”章节中新种子的新地址上。

如果你不知道哪些地址上的资金是被锁定的,以及共有多少资金受到影响,而且你不懂得怎么使用tangle浏览器来查找罪魁祸首,你可以使用以下步骤来清理你的钱包。这可能很耗时,因为你必须为每个地址执行两次交易,但如果你拥有相当多的资金,仍然建议你这样做。

在旧钱包中发送1i(注意单位,不是Ki或Mi)到新钱包的接收地址。如果钱包接受转账且没有再次显示密钥重用警告,则说明旧钱包上至少有一个地址有正常资金。

然后在旧钱包的历史记录中找到这个1i传出交易并点击Show Bundle。

“Private Key Reuse Detected!“-找回被锁定的资金

在上图中你会看到这个1i交易的bundle详情。有个“-1000i”的交易,这个说明了之前有个正常地址上面有1000i,现在他被转出了1i,剩余的999i则被转移到了钱包中另一个新地址上。现在我们知道了还有999i的正常资金,我们就可以发起新交易把这999i正常资金转移到新种子上面。注意:先确保前面的1i交易已经确认,才能发起999i的交易。

重复上述步骤(从发送1i交易开始),直到显示密钥重用警告,这样就完成了全部正常资金的转移,现在旧钱包种子上只有那些被锁定的资金了。

2.2 使用Cli钱包来转移被锁定的资金

IOTA命令行钱包(Cli wallet)是一个简单的钱包软件,没有GUI钱包的图形用户界面,完全通过命令行控制。我们将使用它来转移被锁资金,因为与其他钱包(GUI钱包,Trinity)相比,它不会检测并阻止地址的私钥重用。

理解其他钱包中的密钥重用警告是有原因的,这很重要。当使用一个地址多次发送交易时,这些资金就可能面临被窃取的风险。每个从该地址发出的交易都会随机地公布这个特定地址50%的私钥。这个特定地址上每多发送一笔交易,被盗窃风险就会随之增加。如果这个地址以前只使用过一次,则风险相当低。但如果它被使用了3次甚至更多,心怀恶意的人则很容易获得权限来操控这个地址上的资金。

必须指出的是,即使存在上述情况,也仅仅是该特定地址上的资金面临风险,你的种子并没有暴露,种子中其它地址上的资金也没有被盗风险。请记住这一切,因为我不能对可能发生的任何损失负责。如果你对此过程的任何方面感到不解,请加入IOTA Discord并在#help频道中说明你的情况以寻求其他解决方案。

2.3 安装Cli钱包

为了安装并运行IOTA Cli钱包,我们首先必须安装Node.js。Node.js是一个运行JavaScript代码的开源运行时环境。

进入Node.js官方网站,下载与你的操作系统匹配的安装程序,建议选择长期支持版本(LTS)。安装完成后,就可以打开操作系统的命令行界面了。在Windows下,可以进入开始菜单,输入cmd并按Enter键。在Mac OS X上,使用Spotlight搜索来查找终端并启动它。

进入命令行界面后,我们可以使用npm来安装Cli钱包,npm已经在安装Node.js时一并安装了,通过输入以下内容来直接下载并安装IOTA Cli钱包:

npm install -g iota-cli-app

输入后按Enter键并等待安装完成。

附:IOTA官方Cli钱包说明:https://github.com/iotaledger/cli-app

2.4 发送被锁定的资金

使用以下命令启动Cli钱包:

iota-cli

运行后的样子如下图所示:

“Private Key Reuse Detected!“-找回被锁定的资金

默认情况下,Cli钱包会尝试连接本地计算机上运行的节点。如果你没有在本地搭建节点,则可以输入一个受信任的公共节点。本文中,作者使用的是由IOTA基金会成员(Ralf Rottmann)运行的节点之一:nodes.iota.fm:80。当然,你可以选择使用这个节点,如果这个节点连接不上的话,也可以使用其它的节点,推荐:https://field.carriota.com:443和https://nodes.thetangle.org:443,更多节点列表请参见:https://iota.dance/

通过输入以下命令将钱包连接到自定义节点:

node https://field.carriota.com:443

一段时间后,钱包会连接到节点,在节点名称后面有个绿色的“”号则说明已经正确的建立了连接。

“Private Key Reuse Detected!“-找回被锁定的资金

现在输入你的种子:

seed YOURSEED

将上面命令中“YOURSEED”替换为你自己的种子,然后按Enter键。如果你想从剪贴板粘贴种子,可以先在seed后面打个空格,然后点击鼠标右键,在弹出的菜单中选择粘贴 ,在OS X上使用Shift+Command+V。

“Private Key Reuse Detected!“-找回被锁定的资金

当出现“Would you like to save this seed for autocomplete?”提示时,请选择No(键入N并按Enter键)。

进入种子后,钱包将自动在后台检索完整的账户数据。Cli钱包可能会花费较长的一段时间来检查所有地址,取决于你已经使用的地址数量。完成后,它会通知你,并显示可用的余额(在本文示例中的余额是1.2Mi或1200Ki)。

“Private Key Reuse Detected!“-找回被锁定的资金

如果未显示余额,可以使用balance命令来请求接收余额信息。

balance

“Private Key Reuse Detected!“-找回被锁定的资金

建议你首先根据“2.1 先将未锁定的资金转移”中的步骤来转移未锁定资金,这样此时你应该看到余额与被锁定地址上的资金是匹配的。

当用Cli钱包发送资金时,你需要使用i来作为数量单位,即IOTA的最小单位,而不是Ki,Mi或Gi。这意味着如果你在余额后面看到的单位是K,M或G等,则需要先将其转换为i。 1.2 Mi显示为1200 Ki,计算后1200 Ki等于1200000 i。如果你不太了解IOTA的单位,可以参考下面的图片或者使用“IOTA单位转换器”转换一下。

现在万事俱备,只差发出最终转帐命令了。请记住,从转帐交易发布的那一刻起,你的资金就处于风险之中了,直到交易得到确认。即使这只是一个很小的风险,你在内心深处也会祈祷这个新交易能够尽快的确认。

最后输入下面的命令来从资金被锁定的地址发送iota到新种子的新接收地址上,一定要在点击Enter之前仔细检查一番:

transfer ADDRESS amount

将“ADDRESS”替换为新种子上的新接收地址,将“amount”替换为想要转移的IOTA数量。定义数量时不要包含任何单位。例如转移本文中的示例金额1.2 Mi(1200000i):

transfer HBMYPAZXKHMGUVHZGEATCWCVUXLMSGZQFVLGJNYJMBWEFAUAHMHDXWKBANJDSDZHPVOOVFZVWSHAKFJODRJWNMPPXW 1200000

钱包会检查地址的有效性,所以如果你输入的内容在某处包含一个错误,由于校验和无效,它将被检测到。错误提示信息如下图所示:

“Private Key Reuse Detected!“-找回被锁定的资金

如果你看到下图中的错误提示信息:

“Private Key Reuse Detected!“-找回被锁定的资金

表明你可能在金额后输入了单位(i,Ki等)。确保只写上要转移的IOTA数量,不要写上单位。不要写上单位。不要写上单位。

如果转账命令正确,按下Enter后,钱包就开始创建交易包并将其发送到Tangle上。此过程可能需要几分钟的时间。完成后显示的内容如下图所示:“Private Key Reuse Detected!“-找回被锁定的资金

 

现在是Promote这个新交易的时候了,这可以帮助加快确认。可能需要1到几分钟的时间这个交易才会在GUI钱包的历史记录中显示,显示后就能进行Promote了。

交易被确认后,这些被锁定的资金就安全地到达了新的种子上。

 

原文链接:https://medium.com/coinmonks/private-key-reuse-detected-how-to-unblock-your-funds-3d75d182bbf7

inhuman

专栏作者:inhuman

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

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

发表评论

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