[闲聊] IOTA 不要重复使用已经 spent 的地址

楼主: grapherd (GrD)   2017-11-22 01:17:40
一张图解释一切:
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: 其实这是有前提的,没花用前都可以使用,有转出就不能再次使用。
作者: john801110 (SQUARE)   2017-11-22 01:21:00
作者: jixian (litMager)   2017-11-22 01:23:00
google说近期量子电脑就要上市了,那rsa要怎么办啊!?
作者: goldflower (金色小黄花)   2017-11-22 01:25:00
遇到问题 叉就对惹
作者: tcn1john (momo)   2017-11-22 01:26:00
qbit要够多...可以解2048bit的量子电脑应该还很久
作者: Heta (a half H)   2017-11-22 01:35:00
作者: alen84204 (Dana)   2017-11-22 01:37:00
恩 今天在交易所用IOTA的时候就说要我每交易一次换地址
作者: hivabe (yaguchi)   2017-11-22 09:54:00
作者: buffalobill (水牛比尔)   2017-11-22 10:56:00
打破的小猪还是可以存钱吗?只是不安全?
作者: DarkerDuck (達克鴨)   2017-11-22 13:44:00
其实比特币也有类似的重复使用地址安全性会降低的问题发出交易的地址公钥会暴露出来,没发出连公钥都没有我的意思是假如真的有破解ECDSA的算法出现的话比特币的只有从某个地址发出交易的时候他才需要放出自己的public key让完整节点去确认交易是否有效但假如纯粹接收,并不需要放出接收地址的public key实际上接收地址只要符合hash验证的规则就是合法的因此假如真的有破解ECDSA的算法出现时他仍然是无法破解那种纯粹接收的比特币地址因为连public key都没有,除非连hash一起破解
作者: tcn1john (momo)   2017-11-22 21:58:00
我乙太也要进化成Quantum resistant了https://goo.gl/AU65NQ
作者: vvind (wind)   2017-11-23 16:43:00
长知识
作者: onthesea (i am telegrammed)   2017-11-29 13:55:00
感谢解说

Links booklink

Contact Us: admin [ a t ] ucptt.com