IOTA 不要重複使用已經 spent 的地址 - 數位貨幣

Madame avatar
By Madame
at 2017-11-22T01:17

Table of Contents

一張圖解釋一切:

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: 其實這是有前提的,沒花用前都可以使用,有轉出就不能再次使用。

--

All Comments

Mia avatar
By Mia
at 2017-11-26T21:55
Freda avatar
By Freda
at 2017-12-01T04:06
google說近期量子電腦就要上市了,那rsa要怎麼辦啊!?
Xanthe avatar
By Xanthe
at 2017-12-01T22:22
遇到問題 叉就對惹
Joe avatar
By Joe
at 2017-12-03T04:16
qbit要夠多...可以解2048bit的量子電腦應該還很久
Kelly avatar
By Kelly
at 2017-12-06T12:38
Noah avatar
By Noah
at 2017-12-07T14:17
恩 今天在交易所用IOTA的時候就說要我每交易一次換地址
Eden avatar
By Eden
at 2017-12-12T07:53
Zora avatar
By Zora
at 2017-12-16T23:14
打破的小豬還是可以存錢嗎?只是不安全?
Michael avatar
By Michael
at 2017-12-19T03:38
其實比特幣也有類似的重複使用地址安全性會降低的問題
發出交易的地址公鑰會暴露出來,沒發出連公鑰都沒有
Elvira avatar
By Elvira
at 2017-12-23T14:07
我的意思是假如真的有破解ECDSA的演算法出現的話
Kumar avatar
By Kumar
at 2017-12-27T14:15
比特幣的只有從某個地址發出交易的時候
Callum avatar
By Callum
at 2017-12-29T22:34
他才需要放出自己的public key讓完整節點去確認交易
是否有效
但假如純粹接收,並不需要放出接收地址的public key
Tracy avatar
By Tracy
at 2018-01-02T22:40
實際上接收地址只要符合hash驗證的規則就是合法的
因此假如真的有破解ECDSA的演算法出現時
Frederic avatar
By Frederic
at 2018-01-04T13:29
他仍然是無法破解那種純粹接收的比特幣地址
因為連public key都沒有,除非連hash一起破解
Catherine avatar
By Catherine
at 2018-01-05T22:29
我乙太也要進化成Quantum resistant了
https://goo.gl/AU65NQ
Odelette avatar
By Odelette
at 2018-01-08T08:35
長知識
Annie avatar
By Annie
at 2018-01-13T03:55
感謝解說

原來把ETH存在MEW還可以賺利息...

Vanessa avatar
By Vanessa
at 2017-11-22T00:20
我是用Trezor+MyEtherWallet的方式存ETH 今天把BTG換成ETH時忽然發現我的ETH地址怎麼有TOKEN 還有五種TOKEN,加一加總價值竟然快台幣6000 最值錢的是OMG 我找了一下才看到一篇文章 https://goo.gl/DJaFsS 只要在MEW存超過0.1ETH就會 ...

加密貨幣簽帳卡是不是普遍找不到新發卡商

Lucy avatar
By Lucy
at 2017-11-21T22:20
小弟手上有wirexandamp;tenx兩家的卡 但是... 目前都因為wave crest的my choice卡被visa查水錶所以被停掉惹 wirex是說 我們已經在最後測試的階段 在未來幾周就可以推出新的 支援pay wave的卡了 但是已經等了一個月以上 一點動靜都沒有 blog上 永遠都是些 發 ...

Genesis Mining彼特幣算力準備預購

Sarah avatar
By Sarah
at 2017-11-21T21:28
已經可以購買了 剛剛官網已經出現選項了 不過這次是2018/03/15開挖 不過合約仍是永久的 如果之前沒跟到的可以這次去買唷 --------------------------------- 比特幣期貨挖礦合約價格如下: 1) 1,000 GH/S至4,900 GH/S 價格:17.9 USD / 100 ...

Genesis Mining彼特幣算力準備預購

Zenobia avatar
By Zenobia
at 2017-11-21T14:58
Genesis Mining比特幣算力今明兩天又要準備預購拉,為什麼要買雲端算力呢? 第一、電費成本便宜 S9 13.5T(耗電1350W)每天耗費32.4度電,以一度電4.5元來說每日電費為145.8元。 Genesis Mining比幣算力,維護費為USD 0.00028 每GH/s每天,13.5 ...

Tether被駭走 $30,950,010 USDT

Vanessa avatar
By Vanessa
at 2017-11-21T13:26
新聞來源連結: https://tether.to/tether-critical-announcement/ 新聞本文: 昨日我們發現一部分在Tether儲備錢包中的資金,被惡意的外部攻擊者移出。 $30,950,010 USDT 在2017年11月19日被傳送到一個未被授權的地址。 我們將採取任何 ...