Bitcoin
CCNS社長 陳冠廷
CCNS打雜 DC
Bitcoin?
由中本聰發明
去中心化的貨幣
先談談現實的貨幣
爲什麼要把錢存在銀行
把錢存在銀行
我們信任銀行可以幫我們保管存款
銀行可以幫我們確認交易的正確性
如果銀行倒了
交易被管控
去中心化貨幣
點對點交易
Freedom
雖然匿名的特性讓非法交易有機可乘...不過那是題外話
信任
討論以下兩個情境
角色介紹
Alice
Bob
Alice
Bob
收到 10 BTC
我給Bob 10 BTC
Bitcoin Network
Alice
Charlie
收到 10 BTC
???
???
Alice給我 10 BTC
Bitcoin Network
怎麽想都不合理嘛
簽名
數位簽章
要瞭解數位簽章的運作原理
需要先瞭解公開金鑰加密
公開金鑰加密
不過在這之前
Symmetric-key algorithm
對稱金鑰算法
來看看他的運作方式吧?
稍微複雜一點的講法
幫各位簡化一些
那...如果鑰匙被偷了怎麼辦?
當然是開玩笑
回到正題
公開金鑰加密
(a.k.a 非對稱金鑰加密)
大致的產生方法
key generator
困難的數學運算
可以公開
自己保存
plaintext
signature
回到比特幣
如何用數位簽章來證明交易是
由帳戶本人發出的?
先建一對公私鑰 -> 建立帳戶
key generation
一個重要的點是
公鑰 = 比特幣帳戶地址
且公開在網路上
所以當Alice發起一筆交易給Bob時
Alice用私鑰在交易上簽名
網路上的他人用Alice的帳戶地址解密來驗證交易
plaintext
signature
那Charlie的狀況呢?
Charlie不知道Alice的私鑰 只好用自己的 私鑰在交易上簽名
網路上的他人用Alice的帳戶地址解密來驗證交易
plaintext
signature
無法還原!
叭叭!
這樣Charlie就無法透過
僞造交易拿到Alice的錢了
Bitcoin網路架構
因為去中心化的貨幣體系中沒有一個中央銀行來記帳
所以只好每個人都存一份
分散式帳本資料庫
由全世界的人共同維護一本帳本
一致性
不過現實通常不會那麼美好
Double Spending
雙花交易
來想像一個情境
Charlie在發起一筆給Alice的交易時
同時發送了一筆給自己的交易
那會發生什麼事阿...?
Charlie跟Alice買東西
ledger
ledger
ledger
ledger
ledger
Charlie
Alice
Bob
Charlie -> Alice
Charlie -> Charlie
ledger
ledger
ledger
ledger
ledger
Charlie
Alice
Bob
Charlie -> Alice
$10
Charlie -> Alice
$10
Charlie -> Charlie $10
Charlie -> Charlie $10
Charlie -> Charlie $10
收到錢了!
寄送貨物
會造成帳本不一致的情況
說到重點了
那要如何解決呢?
就是利用區塊鍊與PoW的概念
讓我們先休息一下喘口氣
BlockChain
區塊鍊
區塊鍊 = 區塊 + 鍊
由許多筆交易組成
由許多區塊連接而成
先讓各位有個大致的概念
Block1
Block2
Block3
Block4
有一點必須要先瞭解
跟剛剛的帳本模型不同
比特幣的網路中分為兩種角色
一般節點(錢包)
礦工節點
一般節點
使用者下載錢包
並與網路帳本同步
就可以開始對網路廣播交易了
礦工(miner)
礦工負責驗證交易內容
並將其打包成塊
區塊的概念
並將新區塊與舊區塊連結在一起
這個動作就是將交易記錄到帳本上 --> 即為挖礦
鍊的概念
但是因為每個礦工拿到的交易不一定相同
帳本的長度也有可能不一樣
所以規定整個網路只會認可最長鍊
也就是最長的帳本
那實際上要怎麼把區塊串起來(挖礦)?
又有什麼用處呢?
實際上是這樣做的
- 先將上一個區塊透過Hash函數轉換成一個值
- 再來把這個值存入目前的區塊中
- 將目前的區塊再存入一個隨機nonce值
- 計算當前區塊的Hash值並期望它小於某一個目標值
- 若4.失敗則改變nonce的值並重試
- 成功
這聽起來又累又麻煩
誰會想做礦工呢?
不過我想大家都知道
挖礦可以賺錢
這正是比特幣用來防止Double spending的方式
Proof-of-Work
(PoW)
讓我們回頭看看挖礦時到底做了什麼事吧?
例子:防止濫發垃圾郵件
透過要求算力(時間)可以有效的防止一些雙花交易
ledger
Charlie
Charlie -> Alice
Charlie -> Charlie
ledger
ledger
Charlie
Charlie -> Alice
Charlie -> Charlie
ledger
ledger
Charlie -> Alice
Charlie -> Charlie
ledger
ledger
ledger
Charlie -> Alice
Charlie -> Charlie
ledger
ledger
ledger
ledger
ledger
ledger
最後幫各位統整
製作區塊很花時間,所以不好偽造比主鍊更長的惡意區塊鍊來達成雙花交易
Hash function
什麼是Hash function?
根據維基百科:
雜湊函式是一種從任何一種資料中建立小的數字「指紋」的方法。雜湊函式把訊息或資料壓縮成摘要,使得資料量變小,將資料的格式固定下來。
Hash function的種類
- MD5
- SHA-1
- SHA-256
- SHA-512
- Keccak
PoE應用
實做時間
Bitcoin explained
By HexRabbit
Bitcoin explained
- 395