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)

礦工負責驗證交易內容

並將其打包成塊

區塊的概念

並將新區塊與舊區塊連結在一起

這個動作就是將交易記錄到帳本上 --> 即為挖礦

鍊的概念

但是因為每個礦工拿到的交易不一定相同

帳本的長度也有可能不一樣

所以規定整個網路只會認可最長鍊

也就是最長的帳本

那實際上要怎麼把區塊串起來(挖礦)?

又有什麼用處呢?

實際上是這樣做的

  1. 先將上一個區塊透過Hash函數轉換成一個值
  2. 再來把這個值存入目前的區塊中
  3. 將目前的區塊再存入一個隨機nonce值
  4. 計算當前區塊的Hash值並期望它小於某一個目標值
  5. 若4.失敗則改變nonce的值並重試
  6. 成功

這聽起來又累又麻煩

誰會想做礦工呢?

不過我想大家都知道

挖礦可以賺錢

這正是比特幣用來防止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