作者grapherd (NULL)
看板DigiCurrency
标题[闲聊] IOTA 不要重复使用已经 spent 的地址
时间Wed Nov 22 01:17:40 2017
一张图解释一切:
https://i.imgur.com/3oejD6v.jpg
每个人都有一个 Seed,透过这个 seed,我们可以产出很多的地址:
IOTA(seed).generate_address(index=0) -> YVXKJLKAJLAJ9KA....
IOTA(seed).generate_address(index=1) -> UVMQMZOQL9LKJ9G....
每个地址都可以接收或是转帐出去。
今天如果你要发起一笔交易,假设 10 IOTA 好了,
你的各个地址所拥有的 IOTA 如下:
index 0: 5 IOTA
index 1: 3 IOTA
index 2: 5 IOTA
index 3: 0 IOTA
发起交易的时候,程式会先从你的 seed 中产出一个段落的地址,
例如说 index 0 ~ 10 的地址。接者把这些地址丢去 node 查询余额。
知道余额後,程式会依序走过这些余额,并且把对应的地址存起来等等使用。
收集好之後,像这次例子的地址,会用到这些:
index 0
index 1
index 2
总和 13 IOTA,多出来的 3 IOTA 就会从 index 2 的地址转到下一个可用地址中。
也就是 Bundle,不过这边不具体讲 bundle 如何,总之交易看起来就像这样:
index 0 + index 1 + index 2 -> target address
index 2 (余额) -> index 3
取得上面的 bundle 後,IOTA 会进行签署的步骤。
这里就是为什麽不能够重复使用已经 spent 出去的地址的原因。
因为 IOTA 使用的是一种叫做 Winternitz One-Time Signatures (WOTS) 的签署方式,
为什麽要采用什麽鬼 WOTS 来签署,而不是传统的 RSA 之类的方式呢?
因为,据信,当量子电脑出现的时候,RSA 这种形态的加密方式 hen 容易就会被破解,
而 One-Time Signatures 可以抵御量子电脑的攻击。
在 IOTA 里面要如何透过 seed 产生出签署的 key 呢?
大概就是这样:
k = iota.crypto.signing.KeyGenerator(seed)
for addr in addrs:
priv_key = k.get_key_for(addr)
priv_key.sign_input_transactions(bundle, addr.index)
key 是透过地址去产生出来的!
key 是透过地址去产生出来的!
key 是透过地址去产生出来的! (hen 重要)
不过有一好就会有差的地方。如他的名字所言,每个 key 只能够签署一次,签署多次的话
会让这个签署被破解的机率提高。
回到最上面的小猪图,经过前面的解释你应该就可以看懂小猪图了。
你可以无限次数的把 IOTA 放入小猪 (地址) 当中,
但是当你把 IOTA 移出小猪的时候,你就会打破他,
也因此,你就不应该在使用这个小猪了。
但是,解释起来太麻烦,所以直接跟各位说,
地址用过就不要在使用。
TL;DR: 其实这是有前提的,没花用前都可以使用,有转出就不能再次使用。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.63.78
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DigiCurrency/M.1511284663.A.8AE.html
1F:推 john801110: 推11/22 01:21
2F:推 jixian: google说近期量子电脑就要上市了,那rsa要怎麽办啊!?11/22 01:23
3F:推 goldflower: 遇到问题 叉就对惹11/22 01:25
4F:→ tcn1john: qbit要够多...可以解2048bit的量子电脑应该还很久11/22 01:26
5F:推 Heta: 推11/22 01:35
6F:推 alen84204: 恩 今天在交易所用IOTA的时候就说要我每交易一次换地址11/22 01:37
7F:推 hivabe: 推11/22 09:54
8F:→ buffalobill: 打破的小猪还是可以存钱吗?只是不安全?11/22 10:56
可以啊,只是不安全。
转出的时候会再次签名,签越多次安全性越低。
※ 编辑: grapherd (114.137.70.193), 11/22/2017 12:09:27
9F:推 DarkerDuck: 其实比特币也有类似的重复使用地址安全性会降低的问题 11/22 13:44
10F:→ DarkerDuck: 发出交易的地址公钥会暴露出来,没发出连公钥都没有 11/22 13:44
Bitcon 是使用 ECDSA 来签署,也就是椭圆曲线加密法,是一种非对称式加密,其 public key 本来就会公开。
非对称式加密无法从 public key 推导出 private key,而且 ECC 是目前地表最强的非对称加密演算法,
因此公开 Bitcoin address 然後重复使用没啥大问题,前提是你的 private key 都保存的很好的话。
IOTA 的话,因为使用 Winternitz One-time signature,先天的 scheme 迫使一组 private key 只能使用一次。
用越多次风险越高。至於怎麽样的风险....我还在研究XD
※ 编辑: grapherd (140.113.63.78), 11/22/2017 15:37:02
11F:→ DarkerDuck: 我的意思是假如真的有破解ECDSA的演算法出现的话 11/22 15:42
12F:→ DarkerDuck: 比特币的只有从某个地址发出交易的时候 11/22 15:43
13F:→ DarkerDuck: 他才需要放出自己的public key让完整节点去确认交易 11/22 15:44
14F:→ DarkerDuck: 是否有效 11/22 15:44
15F:→ DarkerDuck: 但假如纯粹接收,并不需要放出接收地址的public key 11/22 15:44
16F:→ DarkerDuck: 实际上接收地址只要符合hash验证的规则就是合法的 11/22 15:45
17F:→ DarkerDuck: 因此假如真的有破解ECDSA的演算法出现时 11/22 15:45
18F:→ DarkerDuck: 他仍然是无法破解那种纯粹接收的比特币地址 11/22 15:46
19F:→ DarkerDuck: 因为连public key都没有,除非连hash一起破解 11/22 15:46
理解。
※ 编辑: grapherd (140.113.63.78), 11/22/2017 16:36:44
20F:推 tcn1john: 我乙太也要进化成Quantum resistant了 11/22 21:58
22F:推 vvind: 长知识 11/23 16:43
23F:推 onthesea: 感谢解说 11/29 13:55