iota 币产生私钥的方法
Linux
cat /dev/urandom |tr -dc A-Z9|head -c${1:-81}
Mac
cat /dev/urandom |LC_ALL=C tr -dc 'A-Z9' | fold -w 81 | head -n 1
安全使用IOTA钱包的最佳实践
IOTA 是为物联网(IoT)设备而设计的协议。这些设备可以非常流畅地遵循任何规则来严格、择优和安全地使用这一协议。可悲的是,人们不善于遵守规则 – 即使他们了解所有的这些规则 – 他们也常常不知道某些行为造成的后果。所以我决定写一篇关于最佳实践的文章,并解释其原理。
以下是这些规则:
规则1:绝不重复使用同一地址。绝不。没有例外。
规则2:始终附加一个新的接收地址到缠结中。
规则3:始终等待一个交易被确认之后再发送其他交易。
以下是其原因:
所有规则都与多次花费相关,即对同一个地址存在多次花费。这里关键的问题是IOTA使用了一次性的签名。对于每个地址,在花费发生之后,该地址不应该被继续使用。这是因为在对外发送IOTA后,这个地址对应的私钥将有一个随机的50%被暴露。这本身并不是问题,在任何单笔花费后收到的IOTA仍然是相当安全的,因为破解另外50%的密钥仍然是一项艰巨的任务。(译者添加:请注意,目前已经有IOTA被偷窃的案例发生,就是因为这个用户向已经花费过的地址继续存入IOTA,从而私钥被暴力破解)
但是当你使用上面相同的地址进行第二次花费后,该地址对应的私钥将又有一个随机的50%被暴露。理论上来说,统计数据将会告诉你,现在75%的密钥已经被暴露,但是理论和实际有所不同。实际中,你可能会非常不幸,因为它是一个“随机的”50%,如果这两个50%中只有10%的部分重叠,那么你私钥的90%已经被暴露了!这时,你的私钥就会非常容易被窃取并被破坏。
所以,简单来说,2次及以上的对同一地址的花费是非常糟糕的!
现在我们来看一看什么样的情况会终结一个多重花费,以及为什么这些规则是好的:
规则1:绝不重复使用同一地址。绝不。没有例外。
我将很快能听到有些人说:“但是你可以使用同一地址多次接收IOTA!”。从技术角度讲,这是正确的,因为loT设备将会自始至终这么做。但IoT设备的优点在于它们知道交互各方将要做什么以及什么时候该做什么。因此,它们可以安全地做这些事情。这里有一个例子可以展示为什么在同一地址上进行多次花费是一个坏主意:
比方说,我有一个交易是从交易所取出X个IOTA到我的钱包地址A。整个交易过程需要一些时间,但是最终这X个IOTA被提取了地址A中。
由于这次的成功操作,我决定提取Y个IOTA并放入相同地址A中。毕竟,我可以向同一地址发送多次,对吗?所以,我开始向交易所提交提取IOTA订单,交易所也开始处理我的订单。请注意,这次提币操作有时可能需要数小时或者数天时间。
与此同时,我在和朋友讨论IOTA,
并且告诉他我想转给他一些(比如Z个)IOTA。于是,他安装了IOTA钱包,并给了我一个接收地址B。我从自己的钱包里转出Z个IOTA到地址B。钱包顺利地执行命令,从地址A中转出Z个IOTA到地址B。并且,为了使地址A免于多重花费,钱包把剩余的X-Z个IOTA转入一个新生成的地址C中。
到目前为止,似乎一切看起来都顺利。但是有一个问题:交易所还没有处理我的提币请求。当交易所最终处理到我的这个请求的时候,就像我说的那样,Y个IOTA将会发送到地址A,但这个地址之前已经有一个花费了。哎呀!
为避免以上情况,我们应该生成一个新地址D,并使用该地址代替地址A作为第二次提币的地址。所以,永远不要重复使用一个地址,甚至接收的时候也不要使用已经用过的地址 。
规则2:始终附加一个新的接收地址到缠结中。
我将很快就会听到有些人说:“你没“必要”真的去这么做!“是的,从技术角度讲,这是正确的。将IOTA发送到一个没有附加到缠结的地址是完全正确的,而且这些IOTA也会被很好的传输到这个地址。同样,loT设备也一直是这么做的,但是它们也跟踪它们给出的地址。
但是,IOTA钱包做法则有所不同。因为可以将钱包安装在不同的设备上,并且使用相同的种子登陆两个钱包,所以,开发人员直接从缠结中获取钱包的状态。这样一来,两个钱包都会收到同样的回复。否则,就会造成一个钱包可以追踪一些重要的地址,而另一个则不了解这些。很漂亮的解决方案。
但是这种方法将会带来隐藏的花销。为了理解这一点,我们需要看一看钱包是如何决定哪些地址是已经被使用过了。事实上,钱包是通过向它连接到的节点查询来获得包含该地址的交易列表。如果没有交易产生,那么就可以认为该地址尚未被使用。
通过把一个地址附加到缠结,你显示地创建了一个零值转移交易到这个地址。现在,钱包可以在缠结中找到这次交易记录,并得知该地址已经被使用。是的,一旦有人向该地址发送IOTA,钱包可以在缠结中找到该交易,并再次得知该地址已经被使用。所以,我们不需要明确地将这次交易附加到缠结中,对吗?不不不,大错特错!
假设我的地址A中有X个IOTA。我决定从交易所取出Y个IOTA并存入地址B。这是按照规则1的要求做的:使用不同的地址。我不打算明确的将地址B附加到缠结上,因为我之前被告知这么做不是绝对必要的。因此,我将提币请求加入订单,之后交易所开始处理我的订单。请注意,这个订单处理也要花费一些时间。
为了传播我的喜悦之情,我决定再向我的朋友发送Z个IOTA。我发起了转账操作,这次钱包可以从地址A中向我的朋友发送Z个IOTA。然后钱包想要把剩余的X-Z个IOTA发送到一个新的接收地址。所以,钱包向缠结查询哪个地址尚未被使用。哈哈,地址B还没有被使用。于是,钱包就愉快地把剩余的IOTA发送到地址B去。老天,现在我们处于与规定1相悖的情况中了。
因此,如果我们现在决定向另一个朋友发送另一笔IOTA,最终的结果是,在交易所将IOTA提取到地址B完成之前,我们将花费地址B中的IOTA。这将使我们必然再次发生多次花费。
我们把地址B附加到缠结就可以轻松避免这种情况。这时,钱包将会知道地址B已经被使用,并且将剩余IOTA发送到新地址C。
这个例子告诉我们:总是附加一个新的接收地址到缠结中。
规则3:始终等待一个交易被确认之后再发送其他交易。
我可能很快听到有人说:“但是钱包会帮我避免多重花费!”从技术角度讲,这是正确的。钱包会在花费IOTA之前检查,对于某个地址,如果发现有一个确认的花费,钱包不会允许第二次花费。但是考虑以下情况:
我在地址A中有X个IOTA。
现在我决定向交易所发送Y个IOTA,这将产生从地址A花费Y个IOTA的交易#1。现在我又决定在交易#1得到确认之前向我的朋友发送Z个IOTA。由于钱包仍然在地址A中看到X个IOTA,它将很顺利地生成从地址A中花费Z个IOTA的交易#2
。糟糕!同一地址产生了两次花费.
这种情况的解决办法就是在交易#1被确认后再发送交易#2.
这个例子表明:始终等待一个交易被确认之后再发送其他的请求。
请注意,因为你不知道钱包从哪个地址提取IOTA,然后又把余额发送到何处,所以,许多类似的情况也许会更为混乱。
另外请注意,对于每一条规则,我只是提供了一个例子用来说明可能出错的地方。当快照发生的时候,情况将会更加混乱。但这需要其它文章来说明,非本文讨论之列。
原文
https://forum.helloiota.com/1973/Best-practices-for-using-the-IOTA-wallets-safely
iota 币产生私钥的方法的更多相关文章
- 在一个机器上获取大量PublicKey后的私钥恢复方法
渗透测试过程中,有时候会在某个未授权访问漏洞中获取authorized_keys文件,里面有大量账户用于免密登录的PublicKey,这个时候如何进行下一步渗透? 可以考虑rsa碰撞的方式,找到公用p ...
- 生成 RSA 公钥和私钥的方法
在使用 RSA 加密算法时,需要使用到一对 公钥 和 私钥,生成 公钥 和 私钥 需要借助 openssl 这款工具,下载这款工具的地址如下: http://slproweb.com/products ...
- 列出本机JCE提供者,支持消息摘要算法,支持公钥私钥算法
import java.security.Provider; import java.security.Security; public class TestBouncyCastle { public ...
- 基于私钥加密公钥解密的RSA算法C#实现
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...
- RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...
- 是否可能两个ETH私钥对应同一个地址
原提问在这里. 笔者在使用到neon-js中的私钥生成方法时发现其使用了getRandomValues方法来生成64字符长度的私钥,进而考虑到其随机性,若是调用足够多次,依然有可能生成两个完全一样的私 ...
- [转]简单科普私钥、地址、助记词、Keystore的区别
本文转自:https://www.jianshu.com/p/d0a4a44685d3 很多人保管不好自己的虚拟财产,发生丢币的情况,很多都是因为不清楚私钥的概念. 私钥(Private Key) 比 ...
- git获取公钥和私钥以及常用的命令
Git简单生成公钥和私钥的方法 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name “用户名” git conf ...
- Go iota 原理和源码剖析
iota 是 Go 语言的一个保留字,用作常量计数器.由于 iota 具有自增特性,所以可以简化数字增长的常量定义. iota 是一个具有魔法的关键字,往往令初学者难以理解其原理和使用方法. 本文会从 ...
随机推荐
- 开机出现checking file system on C怎么办
开机出现checking file system on C怎么办 | 浏览:16126 | 更新:2018-02-04 13:51 | 标签:开机 百度经验:jingyan.baidu.com 开机出 ...
- 【cs229-Lecture10】特征选择
本节课要点: VC维: 模型选择算法 特征选择 vc维:个人还是不太理解.个人的感觉就是为核函数做理论依据,低维线性不可分时,映射到高维就可分,那么映射到多高呢?我把可分理解为“打散”. 参考的资料: ...
- ubuntu14.04 LTS Python IDE专用编辑器PyCharm开发环境搭建
https://www.zhihu.com/question/20381207 有哪些值得推荐的 Python 开发工具? 一 PyCharm下载 官网下载地址:https://www.jetbr ...
- c实现的list
// clist.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"#include <stdio.h>#include <ma ...
- javascript 闭包学习
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...
- 浅谈P2P、P2C 、O2O 、B2C、B2B、 C2C的区别
相信有很多人对P2P.P2C .O2O .B2C.B2B. C2C不是很熟悉,甚至是云里雾里,每天看着这些常见又陌生的名词,如果有人跟你说 让你解释它的含义,金融的小伙伴们是不是瞬间石化了,尤其是做淘 ...
- 熟悉使用ConfigParser库读写配置文件
Python的配置文件 配置文件 setting.ini文件是一个纯文本 [DataBase1] username = admin passwors = root [DataBase2] hostna ...
- jquery.fn.extend与jquery.extend用法与区别
jQuery为开发插件提拱了两个方法,分别是: 代码如下 复制代码 jQuery.fn.extend(object); 和 jQuery.extend(object); jQuery.exte ...
- 安装pod
1.ruby升级最新 sudo gem update -n /usr/local/bin --system 2. $ gem sources *** CURRENT SOURCES *** https ...
- "will you marry me" vs "would you marry me"
will you marry me 表示我现在问你,能不能嫁给我,我现在就需要答案. 如果回答是yes,那么对方就算是同意嫁给你了. would you marry me 表示你能不能考虑嫁给我. w ...