Fw: [技術] Bitcoin運作基本原理

看板DigiCurrency作者 (葡萄糖)時間8年前 (2015/12/24 16:52), 8年前編輯推噓4(401)
留言5則, 3人參與, 4年前最新討論串1/1
※ [本文轉錄自 Soft_Job 看板 #1IbUyXNc ] 作者: StubbornLin (鍵盤創業家) 看板: Soft_Job 標題: [技術] Bitcoin運作基本原理 時間: Wed Nov 27 21:09:36 2013 Bitcoin講了這麼多,很多人認為不安全什麼的 但其實可能不太瞭解它是怎麼運作的 正好我有研究一點點過,就嘴砲寫一篇解釋一下部份的運作原理 首先可以參考這篇 http://yowureport.com/?p=5358 他大略的方式解釋得蠻清楚的,只是技術細節沒寫清楚 細節呢,Bitcoin有一種最基本的資料結構單位叫做Block https://en.bitcoin.it/wiki/Blocks 它大略含了這些資訊,例如像這樣 - 隨機值 (Random nonce) - 難度值 - 上一個Block的hash值 - 礦工獎勵: - 簽屬 10 BTC 給 Marry - 簽屬 15 BTC 給 Julia - 合法的交易資料: - 交易1 John 簽屬 5 BTC 給 Tom - 交易2 Tom 簽屬 0.5 BTC 給 Jimmy ... 實際的Block都是透過P2P交換 所以是完全公開的 可以到這個網站看看 http://blockexplorer.com/ 每隔不多久就會又有新的Block被產生 我們隨便挑一個出來看 http://goo.gl/RF9yrD Transactions 那裡就是收錄合法的交易資料,可以看見第一行 Generation: 25 + 0.59209676 total fees 這個就是礦工獎勵,剩下的就是合法的交易資料 所以簡單來說這就是一本帳冊,礦工就是造出這本帳冊的人 他可以簽屬25BTC + 所有交易費用的總合 給他指定的人 進入重點,所以帳冊要怎樣造,好像這樣聽起來隨便都可以造 但其實不是,一個合法的Block,要在P2P網路上被所有的節點認可 必需符合一條件,簡單的來說,就是整個Block產生出來的Sha256值 要小於難度值 SHA256(Block data + Random nonce) < 難度值 SHA256算出來的長度就是256bits,也就是32Bytes長 這是一個很長的數字範圍,難度值並不是一個很長的數字 而雜湊函數算出來的數值一般都視為亂數且無法預測的數值 因此,產生合法的一個Block唯一的方法,就是大量代入不一樣的Rnadom nonce 暴力一直去試,直到產生一個Block的SHA256 Hash值小於難度值 這樣的一個block才會被P2P上的所有節點認可 當你產生這樣一個block其實我們就叫做挖到礦了 那個難度值會自動 每週依照上週的平均產出速率 去調出一個當初就設計好的速度,因此當越多人挖 這個值會自動調整出一個更難挖的 更小的難度值來 這裡講到的獎勵金25BTC其實也會隨著時間變動 它設計隨著時間 越到後面挖礦的BTC獎金越少 最初其實是 50BTC的 只是時間到了現在變25了 它來控制發行總量 當然到最後會沒有獎勵 但透過收集交易費用 最後還是有人願意挖 而每個block都有一個往上一個block的hash值 所以整個形成一個往前audit的hash chain 有時會出現短時間內出現兩個合法的block來自同一個parent的情況 就是產生分支 (branch) 這時會看哪個chain花的運算資源最多 那個才會被承認 這樣一來要惡搞就很困難 而交易是透過非對稱加密,每個戶頭都是一把公鑰 透過每個人私鑰去數位簽章 就可以把你有的BTC簽給收款人的公鑰 接著把簽章的資料廣播到P2P網路 最終被某個礦工收錄在block裡 如此一來整個P2P網路就認可你有那筆錢 嗯? 你說 那好 我身為礦工 挖到礦的獎勵規訂是25而已 但我偏要把它設成999999 不行嗎? 當然可以 只是那個block因為不符規則會被視為無效的 嗯? 你說 那當我挖到礦時造假的交易收錄在block裡 我明明一毛錢都沒有 卻轉帳給我另一個戶頭 9999999 BTC 沒用 你沒足夠的餘額去簽那轉帳 一樣被視為無效的block丟掉 嗯? 你說 那我如果當個惡搞礦工 專門產生不收錄交易的block讓交易無法進行呢? 沒用 你得和全世界貪婪的礦工們競爭 他們用的可都是ASIC等級的設備在挖的 嗯? 你說那我如果挖到礦了 把難度值惡搞一下 變超簡單呢? 沒用 難度值如果不照原先設計好的規則變動 你這個block一樣被視為無效 嗯? 你說你造一個惡搞的block廣播出去呢? 沒有用 見到你這不合格的block的節點就會直接忽視 當垃圾丟掉 嗯? 那你說 好 假設我有100BTC 我在短時間內簽兩筆100BTC分別給不同人呢? 喔... 這就有可能有效了 如果收到的人只驗數位簽章 不等一下子 讓有礦工收錄的話 他可能就真的以為收到這筆錢了 但等過一陣子之後 第一筆交易被收錄 第二筆就會被視為無效的丟掉 因為有這種可能 所以其實只要等五到十分鐘 確認有被收錄 這攻擊就無效了 挖礦這整個遊戲就像是在丟骰子一樣 全球一起參賽 看誰先骰出小於指定數值的骰 大約每五分鐘開出一輪 開出一個hash值就是丟一次骰子 看誰丟骰子的速度快 現在職業礦工都是靠 ASIC特制硬體在挖的 你CPU、丟一次、十次 他可能已經丟一千次一萬次了 所以現在難度已經非常高 在有利可圖的情況下 經過三年的時間全球的礦工瘋狂挖的情況下 還能正常運轉 其實就表示要攻破或惡搞是非常有難度的 至少就理論和三年實戰看來 至今是非常可靠的 寫得有點亂 有空的話再聊其它細節 有想到什麼可能的攻擊手法可以討論看看 或許我可以回答得上 那至於信不信有沒有那個價值 是不是騙局就免了 談技術就好 反正我認為信的人信 不信的人還是不信囉 科科 -- 台灣軟體產業的失落十年 - http://lost-ten-years.victorlin.me 一本講述台灣軟體產業落後國外十年的各種弊病與解決方法的電子書 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.142.115.161 ※ 編輯: StubbornLin 來自: 220.142.115.161 (11/27 21:10)

11/27 21:51, , 1F
現在進去只是抬轎而已...
11/27 21:51, 1F

11/27 21:59, , 2F
這種東西其實很難講 在100美元時也有人認為太高
11/27 21:59, 2F

11/27 22:00, , 3F
但現在快接近1000了 以前荷蘭也有鬱金香被炒作到瘋掉
11/27 22:00, 3F

11/27 22:00, , 4F
的狀況 但後來崩盤了 我是認為Bitcoin也有很大機會
11/27 22:00, 4F

11/27 22:00, , 5F
會崩盤 但是不像花 崩了就沒了 它的可交易特性還在
11/27 22:00, 5F

11/27 22:01, , 6F
還是多少有人會用 只要有服務商 像Mega Wordpress
11/27 22:01, 6F

11/27 22:01, , 7F
這些肯收Bitcoin來賣服務 或商品 它還是有一定的
11/27 22:01, 7F

11/27 22:01, , 8F
夠買力
11/27 22:01, 8F

11/27 22:06, , 9F
節點是怎麼確認帳戶餘額的? 用歷史交易算出來的嗎?
11/27 22:06, 9F
對 client要知道一個帳戶餘額剩多少 它會去確認以前所有的交易記錄 看加加減減之後剩多少

11/27 22:19, , 10F
我記得上次看到有人用FPGA作了電路來挖...
11/27 22:19, 10F
外面有很多在做專門的晶片和礦機在賣了

11/27 22:27, , 11F
何必要假造? 直接再弄個Xcoin來炒作就行了...
11/27 22:27, 11F
可以阿 只是做一個新coin 就好像你自己宣佈獨立一個國家 印自己的鈔票一樣 可以這樣做 也有很多人這樣做 但難處在於要拉到夠多人玩你的國王遊戲 不然會變成自己一個人爽而已 Bitcoin的coin之所以最有價值是因為它最多人玩 流通性最好 ※ 編輯: StubbornLin 來自: 220.142.115.161 (11/27 22:35)

11/27 22:42, , 12F
bitcoin發明者說這玩意只是構想,火成這樣他也嚇到
11/27 22:42, 12F

11/27 23:20, , 13F
要看懂這個生態體系還真是不太容易 :)
11/27 23:20, 13F

11/28 00:45, , 14F
非對稱加密? 公鑰 私鑰 由誰發行? 誰來保證不重覆?
11/28 00:45, 14F

11/28 00:46, , 15F
Bitcoin用哪套CRYPT LIB, OPENSSL.
11/28 00:46, 15F

11/28 00:49, , 16F
因為它最多人玩 流通性最好 -->rats company
11/28 00:49, 16F

11/28 00:57, , 17F
11/28 00:57, 17F

11/28 03:42, , 18F
推~
11/28 03:42, 18F

11/28 08:25, , 19F
推V大~~
11/28 08:25, 19F

11/28 09:57, , 20F
消耗電力的遊戲 :)
11/28 09:57, 20F

11/28 10:24, , 21F
這種機制比銀行還要有公信力,看看台灣的銀行一堆超貸
11/28 10:24, 21F

11/28 10:43, , 22F
如果因為多人玩就算老鼠會的話不如說 GPL 也是老鼠會算了 XD
11/28 10:43, 22F

11/28 10:56, , 23F
再問個問題 交易要經過六次確認才能成立 要花一個小時確認
11/28 10:56, 23F

11/28 10:57, , 24F
所以bitcoin沒辦法現在買進100後立刻賣出這筆100囉?
11/28 10:57, 24F
對 其實主要是因為時間太短的話怕有風險 例如分支 (branch) 或重覆花費 你的 transaction 資料要廣播到整個p2p網路上需要一點時間 因此一般還是等一陣子 他好像是推薦6個block以後算是非常安全了 一個block被收錄之後 有越多個block產生就越安全

11/28 12:18, , 25F
回Assyla, 你可以去問問現在各法人和機構相信哪套
11/28 12:18, 25F
※ 編輯: StubbornLin 來自: 42.70.198.64 (11/28 12:31)

11/28 15:58, , 26F
私鑰在你自己的電腦上產生 你的地址其實就是
11/28 15:58, 26F

11/28 15:58, , 27F
由私鑰產生的公鑰的hash
11/28 15:58, 27F

11/28 16:00, , 28F
當你要收到比特幣要花錢時 需要用你的私鑰來透過ECDSA簽名
11/28 16:00, 28F

11/28 16:03, , 29F
比特幣的鑰匙有256位元 要能破解不太可能
11/28 16:03, 29F

11/28 16:04, , 30F
要盜用也不是hash collision而是second image attack
11/28 16:04, 30F

11/28 16:05, , 31F
ECDSA目前的電腦不可能逆向 除非等量子電腦出來
11/28 16:05, 31F

11/28 16:06, , 32F
用秀爾演算法的變種可以把key space減半
11/28 16:06, 32F

11/28 16:06, , 33F
不過到那時現有的加密都會被破解 大家一起死XD
11/28 16:06, 33F

11/28 16:07, , 34F
當然也有不怕量子電腦的加密法 不過太耗資源了
11/28 16:07, 34F
還有 76 則推文
11/29 14:02, , 111F
不知道你在不爽什麼 你問的問題網路上都有
11/29 14:02, 111F

11/29 14:02, , 112F
一直在那邊質疑質疑 是那麼不爽比特幣?
11/29 14:02, 112F

11/29 14:03, , 113F
我講的什麼故事@@
11/29 14:03, 113F

11/29 14:04, , 114F
不知你在爽什麼, 你講的東西, 書上都有, 但跟實作無關
11/29 14:04, 114F

11/29 14:04, , 115F
crypto lib的故事.
11/29 14:04, 115F

11/29 14:04, , 116F
這我同意阿比特幣客戶端那麼多 lib當然也不是只有一個
11/29 14:04, 116F

11/29 14:04, , 117F
所以lib有漏洞被盜幣也是有可能的阿
11/29 14:04, 117F

11/29 14:05, , 118F
我非常同意 實作的問題
11/29 14:05, 118F

11/29 14:06, , 119F
http://tinyurl.com/mxfxnox android bitcoin hack的故事
11/29 14:06, 119F

11/29 14:07, , 120F
甚至可以說如果亂數產生用的晶片被動手腳有後門
11/29 14:07, 120F

11/29 14:07, , 121F
那光是靠軟體lib也沒辦法
11/29 14:07, 121F

11/29 14:09, , 122F

11/29 14:10, , 123F
現在離線錢包有人還去買16面骰子來製造亂數咧
11/29 14:10, 123F

11/29 14:11, , 124F
那你說假如骰子被灌鉛怎麼辦?
11/29 14:11, 124F

11/29 14:12, , 125F
我想說的是你要的東西網路上都有 可以自己去找答案 @@
11/29 14:12, 125F

11/29 14:40, , 126F
哪所以, 你在DEFENSE 什麼呢?
11/29 14:40, 126F

11/29 14:52, , 127F
沒什麼 我覺得你說的都是聰明人會有的疑問
11/29 14:52, 127F

11/29 16:14, , 128F
您還是沒說自然人那來的SHA2048呢?
11/29 16:14, 128F

11/29 16:20, , 129F
他搞錯了吧 2048位元的是RSA Key
11/29 16:20, 129F

11/29 16:21, , 130F
SHA 則是升級成跟比特幣一樣的SHA-2家族
11/29 16:21, 130F

11/29 16:38, , 131F
PriusC 講對, 我搞錯了, 但你還是回我哪來講RSA 了呢?
11/29 16:38, 131F

11/29 16:39, , 132F
快找出來吧.
11/29 16:39, 132F

11/29 16:40, , 133F
另外, ECC 在2013 年, 就出事出了兩次了, 也沒多神而已
11/29 16:40, 133F

11/30 11:17, , 134F
科~從一開始我們就一直在說你把RSA和SHA搞錯了啊...你提2048
11/30 11:17, 134F

11/30 11:18, , 135F
不就是在提RSA嗎?科科~連SHA和RSA都搞不清楚會多聰明?!
11/30 11:18, 135F

11/30 11:18, , 136F
一早承認自己搞錯道個歉不就沒事了嗎?搞錯還能態度那麼嗆的
11/30 11:18, 136F

11/30 11:18, , 137F
真是頗少見啊...哈哈哈哈
11/30 11:18, 137F

11/30 13:47, , 138F
還想將這兩件事連在一起, 如果你找不出來我提過RSA
11/30 13:47, 138F

11/30 13:48, , 139F
你要道個歉? 哈哈哈.....呢
11/30 13:48, 139F

11/30 13:54, , 140F
我搞錯的是升級的是RSA, 不是SHA, 但你鬼扯的, 是我將
11/30 13:54, 140F

11/30 13:55, , 141F
HASH 和CRYPT 的用途搞混, 現在還想在扯這件事.
11/30 13:55, 141F

11/30 13:55, , 142F
聰明的人, 一直扯呢.
11/30 13:55, 142F

11/30 13:56, , 143F
還有哪一次砲完就溜的, 你還未回呢.
11/30 13:56, 143F

11/30 13:57, , 144F
你再繼續轉吧.
11/30 13:57, 144F
※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: a07051226 (120.105.85.99), 12/24/2015 16:52:22 舊文章,不過覺得能幫助了解Bitcoin就轉過來了 不合規定再通知我刪除 ※ 編輯: a07051226 (120.105.85.99), 12/24/2015 16:53:43

12/24 16:54, , 145F
推一個,我會自己在寫一份
12/24 16:54, 145F

12/24 16:55, , 146F
我會一份比較沒那麼學術,讓不是資工專業也能大致了解
12/24 16:55, 146F

12/24 16:56, , 147F
^寫
12/24 16:56, 147F

12/24 18:28, , 148F
達克鴨大一個戰神XDD
12/24 18:28, 148F

07/17 07:28, 4年前 , 149F
一早起來就驚見9字頭 先買一點壓壓驚
07/17 07:28, 149F
文章代碼(AID): #1MUx97mv (DigiCurrency)