[閒聊] IOTA 不要重複使用已經 spent 的地址

看板 DigiCurrency
作者 grapherd (NULL)
時間 2017-11-22 01:17:40
留言 23則留言 (10推 0噓 13→)

一張圖解釋一切: 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: 其實這是有前提的,沒花用前都可以使用,有轉出就不能再次使用。 -- 可以啊,只是不安全。 轉出的時候會再次簽名,簽越多次安全性越低。 Bitcon 是使用 ECDSA 來簽署,也就是橢圓曲線加密法,是一種非對稱式加密,其 public key 本來就會公開。 非對稱式加密無法從 public key 推導出 private key,而且 ECC 是目前地表最強的非對稱加密演算法, 因此公開 Bitcoin address 然後重複使用沒啥大問題,前提是你的 private key 都保存的很好的話。 IOTA 的話,因為使用 Winternitz One-time signature,先天的 scheme 迫使一組 private key 只能使用一次。 用越多次風險越高。至於怎麼樣的風險....我還在研究XD 理解。
※ 批踢踢實業坊(ptt.cc), 來自: 140.113.63.78
※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1511284663.A.8AE.html

john801110: 推11/22 01:21

jixian: google說近期量子電腦就要上市了,那rsa要怎麼辦啊!?11/22 01:23

goldflower: 遇到問題 叉就對惹11/22 01:25

tcn1john: qbit要夠多...可以解2048bit的量子電腦應該還很久11/22 01:26

Heta: 推11/22 01:35

alen84204: 恩 今天在交易所用IOTA的時候就說要我每交易一次換地址11/22 01:37

hivabe: 推11/22 09:54

buffalobill: 打破的小豬還是可以存錢嗎?只是不安全?11/22 10:56

DarkerDuck: 其實比特幣也有類似的重複使用地址安全性會降低的問題 11/22 13:44

DarkerDuck: 發出交易的地址公鑰會暴露出來,沒發出連公鑰都沒有 11/22 13:44

DarkerDuck: 我的意思是假如真的有破解ECDSA的演算法出現的話 11/22 15:42

DarkerDuck: 比特幣的只有從某個地址發出交易的時候 11/22 15:43

DarkerDuck: 他才需要放出自己的public key讓完整節點去確認交易 11/22 15:44

DarkerDuck: 是否有效 11/22 15:44

DarkerDuck: 但假如純粹接收,並不需要放出接收地址的public key 11/22 15:44

DarkerDuck: 實際上接收地址只要符合hash驗證的規則就是合法的 11/22 15:45

DarkerDuck: 因此假如真的有破解ECDSA的演算法出現時 11/22 15:45

DarkerDuck: 他仍然是無法破解那種純粹接收的比特幣地址 11/22 15:46

DarkerDuck: 因為連public key都沒有,除非連hash一起破解 11/22 15:46

tcn1john: 我乙太也要進化成Quantum resistant了 11/22 21:58

tcn1john: https://goo.gl/AU65NQ 11/22 21:58

vvind: 長知識 11/23 16:43

onthesea: 感謝解說 11/29 13:55

您可能感興趣