iota 币的官网是 iota.org,   iota 的官网推荐的钱包地址是: https://github.com/iotaledger/wallet   
iota 币产生私钥是没有什么特殊的要求,唯一要求就是只能是大写字母与数字9且总共不多余81个字符即可,虽然可以少于81个字符,但不建议这么做,以下是产生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 币产生私钥的方法的更多相关文章

  1. 在一个机器上获取大量PublicKey后的私钥恢复方法

    渗透测试过程中,有时候会在某个未授权访问漏洞中获取authorized_keys文件,里面有大量账户用于免密登录的PublicKey,这个时候如何进行下一步渗透? 可以考虑rsa碰撞的方式,找到公用p ...

  2. 生成 RSA 公钥和私钥的方法

    在使用 RSA 加密算法时,需要使用到一对 公钥 和 私钥,生成 公钥 和 私钥 需要借助 openssl 这款工具,下载这款工具的地址如下: http://slproweb.com/products ...

  3. 列出本机JCE提供者,支持消息摘要算法,支持公钥私钥算法

    import java.security.Provider; import java.security.Security; public class TestBouncyCastle { public ...

  4. 基于私钥加密公钥解密的RSA算法C#实现

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  5. RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  6. 是否可能两个ETH私钥对应同一个地址

    原提问在这里. 笔者在使用到neon-js中的私钥生成方法时发现其使用了getRandomValues方法来生成64字符长度的私钥,进而考虑到其随机性,若是调用足够多次,依然有可能生成两个完全一样的私 ...

  7. [转]简单科普私钥、地址、助记词、Keystore的区别

    本文转自:https://www.jianshu.com/p/d0a4a44685d3 很多人保管不好自己的虚拟财产,发生丢币的情况,很多都是因为不清楚私钥的概念. 私钥(Private Key) 比 ...

  8. git获取公钥和私钥以及常用的命令

    Git简单生成公钥和私钥的方法 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name “用户名” git conf ...

  9. Go iota 原理和源码剖析

    iota 是 Go 语言的一个保留字,用作常量计数器.由于 iota 具有自增特性,所以可以简化数字增长的常量定义. iota 是一个具有魔法的关键字,往往令初学者难以理解其原理和使用方法. 本文会从 ...

随机推荐

  1. No.1 PyQt学习

    由于项目的原因,要学PyQt了.以下是第一天的学习成果 # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore class ...

  2. JS基础---->javascript的基础(二)

    记载javascript的一些基础的知识.我们在春风秋雨中无话不说,又在春去秋来中失去了联系. js中string类型 一.字符方法:charAt() 和 charCodeAt() var strin ...

  3. Elasticsearch学习之深入搜索二 --- 搜索底层原理剖析

    1. 普通match如何转换为term+should { "match": { "title": "java elasticsearch"} ...

  4. 题目1091:棋盘游戏(DFS)

    题目链接:http://ac.jobdu.com/problem.php?pid=1091 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  5. 你可能不知道的shell、bash二三事(Centos 7)

    个人.bashrc: ~/.bashrc: # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp ...

  6. CF510B Fox And Two Dots(搜索图形环)

    B. Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. Visual Studio 2015打开ASP.NET MVC的View提示"Object reference not set to an instance of an object"错误的解决方案

    使用Visual Studio 2013打开没有问题,但Visual Studio 2015打开cshtml就会提示"Object reference not set to an insta ...

  8. 笨鸟就要勤奋&专注

    最近两天在找工作的过程中颇受打击,两家高大上的公司看起来就是要收集世界上最聪明的人~,在参加G家的online test之前还天真的认为一不小心通过了怎么办呢?考完试之后才发现真的是想多了,关于题目看 ...

  9. Docker Compose 版本过高(Docker版本不匹配),降低docker-compose版本

    通过docker-compose启动容器,报错: ERROR: The Docker Engine version is less than the minimum required by Compo ...

  10. Android加载asset的db

    extends:http://blog.csdn.net/lihenair/article/details/21232887 项目需要将预先处理的db文件加载到数据库中,然后读取其中的信息并显示 加载 ...