區塊鏈入門
===
https://hackmd.io/p/ryBUHHXff#/
----
<img src="https://i.imgur.com/7px5IND.png" style="width:200px;height:200px;border-radius:50%"/>
### [李家安](https://www.facebook.com/calee0219)
##### 交大資工 大三
calee@cs.nctu.edu.tw
- NCTU CSCC TA
- 網路安全策進會
---
## Outline
- 區塊鏈簡史
- 拜占庭問題
- hash & Crypto
- 數位簽章
- 簡介橢圓曲線
- 區塊鏈細節
- ethereum / bitcoin
---
## 區塊鏈簡史
----
### $$
- What is money
- Why need money
- How to define money
- Who can create money
----
### 區塊鏈是
* 自治
* 可追溯
* 數字貨幣
* 分散式賬本
* 分佈式的點對點(P2P)網路系統。
* 沒有中央服務器
* 所有節點共同維護帳本
* 透過<span style="color:red">**挖礦**</span>來獲取比特幣。
----
### 比特幣是要解決什麼問題 ?
* 雙重支付 (雙花)
* 不可竄改
* 錢的真實性,非偽造 - 利用基於密碼學的<span style="color:green">**數位簽章**</span>
* 以往<span style="color:red">**中心化銀行**</span>的存在,容易遭受駭客攻擊
* 分佈式計算的難題 - 拜占庭將軍問題
----
![](https://i.imgur.com/dE9hN1g.png =600x400)
----
### Time line
- 1983 [ecash](http://www.hit.bme.hu/~buttyan/courses/BMEVIHIM219/2009/Chaum.BlindSigForPayment.1982.PDF),首個匿名化的數字加密貨幣,非分散式
- 1997 [Hashcash](http://en.wikipedia.org/wiki/Hashcash),解決郵件系統中 DoS 攻擊問題,首次提出 PoW
- 1998 [B-money](http://www.weidai.com/bmoney.txt),將 PoW 引入數字貨幣生成過程中,首個面向去中心化設計的數字貨幣,未能實現
- 2008/10/31 [Bitcoin](https://bitcoin.org/zh_TW/): 化名 Satoshi Nakamoto (中本聪),提出: A Peer-to-Peer Electronic Cash System
- 2009 Bitcoin 公開代碼,1/3 正式生成[創世區塊](https://blockchain.info/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f)
----
- 2009/10/31: 第一個區塊鏈交易所出現
- 2010/5/22: 第一比實體 Bitcoin 交易,用 10,000 BTC 買一塊 pizza
- 2011/2/9: 1 BTC = 1 USD
- 2013/11/28: 1 BTC = 1000 USD
- 2013/12: Ethereum 白皮書
- 2014/4/18: [XMR 誕生](https://moneroblocks.info/search/1)
- 2015/7/30: Ethereum [創世區塊](https://etherscan.io/block/0)
- 2016/10/28: [z-cash 上線](https://explorer.zcha.in/blocks/00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08)
----
- 2017/4/1: 日本宣布 bitcoin 為合法貨幣
- 2017/5/4: 1 BTC = 1,500 USD
- 2017/8/2: Bitcoin 硬分叉,Core / Cash
- 2017/7: Ethereum DOA 事件硬分叉,ETH / ETC
- 2017/9/2: 1 BTC = 5,000 USD
- 2017/9/15: 中國封殺 bitcoin,關閉所有中國交易所
- 2017/12/1: 1 BTC = 10,000 USD
----
![Bitcoin 走勢](https://i.imgur.com/9ihQrjC.png)
---
## [拜占庭問題](https://yeasy.gitbooks.io/blockchain_guide/content/distribute_system/bft.html)
----
### 中國將軍問題
- 在戰場上,有兩個將軍用通訊的方式,要討論該進攻還是撤退,訊息是透過信使傳遞,中皆有可能迷路、掉包、被假造,該如何約定一個協定,可以確保就算遇到這樣的問題,還是可以達成協定
----
### 拜占庭(將軍)問題
- 假設有**一組**將軍,各自統領著拜占庭軍隊的一部分,包圍了一個敵軍城市。將軍之間只能靠信使進行通訊。但為了攻占這個城市,他們必須就作戰計劃達成一致。 問題在於,一個或多個將軍已可能發生叛變,並試圖誤傳信息以破壞作戰計劃。
- 因此問題是:如何讓忠誠的將軍,達成行動一致性;以及,這支軍隊可存在多少已叛變的將軍而仍可正常地統一作戰?
----
### 拜占庭(將軍)問題
- 拜占庭問題之所以難解,在於任何時候系統中都可能存在多個提案
- 比特幣的區塊鍊網絡在設計時提出了創新的 PoW(Proof of Work) 算法思路。一個是限制一段時間內整個網絡中出現提案的個數(增加提案成本),另外一個是放寬對最終一致性確認的需求,約定好大家都確認並沿著已知最長的鏈進行拓寬。系統的最終確認是概率意義上的存在。這樣,即便有人試圖惡意破壞,也會付出很大的經濟代價(付出超過系統一半的算力)。
----
#### PoW
- 制一段時間內整個網絡中出現提案的個數(增加提案成本),另外一個是放寬對最終一致性確認的需求,約定好大家都確認並沿著已知最長的鏈進行拓寬。系統的最終確認是概率意義上的存在。這樣,即便有人試圖惡意破壞,也會付出很大的經濟代價(付出超過系統一半的算力)。
- 用經濟利益避免節點作惡
---
## Hash & Crypto
----
### hash function (雜湊)
- 單方向的 function (不可回推)
- hash 結果不同,原來的元素一定不同
- collision (碰撞)
- ex. mod 2, mod 10, mod 7
- 常見有:md5, sha-256, sha-512, sha-3, ...
- 應用:checksum、MAC、hash table、資料壓縮
- http://temp.crypo.com/index.htm
----
![](https://upload.wikimedia.org/wikipedia/commons/d/da/Hash_function.svg)
----
### 密碼 (crypto)
- crypto != hash,要可以還原
- 對稱式加密
- 非對稱式加密
----
#### 對稱式
- 加密與解密用同一把 key
- 速度比較快
- ex. 凱薩加密
----
#### 非對稱式
- 加密與解密用不同把 key
- (RSA) 有任一把 key \(p\) 都無法推出另一把 key (q)
- (ECC) 公鑰無法推出私鑰
- 用一把 key \(p\) 可以,也只可以,由另一把 key (q) 解密
- 定一其中一個是 public key,送給全世界,另一個是 private key 自己保管
- ex. RSA, ECC
----
### 數位簽章
- public key 加密,private key 簽章
- 簽名時,文件與私鑰簽章一起送出
- 驗證時,用公鑰還原簽章,看看還原解果是否與文件相符合
- ![](http://www.tsnien.idv.tw/Security_WebBook/Security_%E6%8F%92%E5%9C%96/%E5%9C%96%207-1.png)
----
### 橢圓曲線 ECC
- 公鑰 = 私鑰 * G
- G: 生成點,bitcoin 的生成點是固定的
- secp256k1 標準的橢圓曲線
- $y^2=(x^3+7)$ over $F_p$
- $y^2\mod p = (x^3+7)\mod p$
- $p = 2^{256}-2^{32}-2^9-2^8-2^7-2^6-2^4-1$
- 無窮點對 (0)
- 加法定義$P_1=P_2+P_3$
- $K=k*G$
----
![](https://i.imgur.com/nT8sxsu.png =650x)
---
## 區塊鏈細節
----
### 私鑰、公鑰、地址、錢包
- 交易雙方、礦工 需要 (才能收錢啊 XDD)
- 錢包是內涵 私鑰、公鑰、地址 的應用程序 (非必要)
- Base58Check
----
### 挖礦是什麼 ?
* HASH(要存的value+要猜的nounce),要符合條件
* 解決數學上的難題(SHA-256),以太幣為 SHA-3
* 同時驗證交易
* 由系統給予挖礦者比特幣當作獎勵
* 動態調整難度
* 平均每10分鐘會有新的區塊出現 ,以太幣大約15秒
----
### POW (Proof Of Work) 工作量證明
* 共識決演算法
* 非中本聰首創
* 決定區塊鍊產生分叉(fork),要跟隨哪條鏈。
----
### Transcation (Tx 交易)
* 分成輸入和輸出
* 每筆的輸入都是之前的輸出
* 可以有多個輸入和多個輸出。
* 通常輸入的總和會大於輸出,中間的差額為給礦工的手續費。
* 通常越高手續費的交易會越快被驗證
* 沒辦法退款 ,只可以進行反向交易
* <span style="color:red">支出者</span>用<span style="color:red">私鑰</span>對輸入進行數位簽章
* 支出者用<span style="color:red">接受者</span>的<span style="color:red">公鑰</span>包裝輸出
----
### Transcation Example
![](https://i.imgur.com/geUD8Eu.png =600x400)
----
![](https://i.imgur.com/JJAayIb.jpg =600x400)
----
![](https://i.imgur.com/l2ig9sB.png =600x400)
----
![](https://i.imgur.com/FlrEoSg.png =600x400)
----
![](https://i.imgur.com/Mfa6jqn.png =600x400)
----
![](https://i.imgur.com/JDr5zTc.png =600x400)
----
### 如何避免被竄改
* 每個區塊都會跟前一個區塊有關,行成一條鍊。
* 因此更改一個區塊,之後的區塊也要跟著修改
* 交易被收入區塊,過了60分鐘通常就會認為已經無法竄改,即6個區塊的時間。
----
### 交易竄改和深度的關係
#### 越<span style="color:red">深</span>的區塊越難竄改
![](https://i.imgur.com/ddlIwXx.png =600x400)
如果改277316 , 277317 和277318 都要有對應的修改。
----
![](https://i.imgur.com/LPRRQgB.png)
----
### 隱密性
每筆的交易都是<span style="color:red">公開</span>,且網路上有多份相同的帳本,這樣何來的隱密性呢?
* 一個人可以持有多個公開地址。
* 只要別把錢換成現實貨幣,沒人可以知道這個地址是誰所擁有的。
* 因此近年勒索軟體又開始復甦,也是因為比特幣(或模仿幣)。
---
### 區塊鏈的更多應用
- bitcoin script
- ethereum smart contract
- ICO
- telegram / Steemit
- 詐欺 (X
- ...
---
## 挖礦
----
### 需要
- 挖況軟體 (nicehash, geth, xmr-stack, RDD)
- 地址
- 硬體 (PC, 顯卡, cpu)
----
### 礦池
- http://minexmr.com/
- https://zcash.flypool.org
- https://whl-tw.gpumine.org/
- https://eth-tw.gpumine.org/
----
### 節點
![](https://i.imgur.com/FKrwpvB.png =400x)
----
### 買幣(投資)
- 認識的人
- [Maicoin](https://www.maicoin.com/)
- [BitoEX](https://www.bitoex.com)
- [Bitexc](https://www.bitexc.com/)
- ...
----
### 資訊
- [BLOCKCHAIN](https://blockchain.info/)
- [Etherscan](https://etherscan.io/)
- XXX explorer
---
## 參考資料
- wiki
- mastering in bitcoin
- [Merkle Tree](https://www.cnblogs.com/fengzhiwu/p/5524324.html)
- 比特币开发者指南
- 区块链技术指南
- 區塊鏈開發指南
- [理解區塊鏈,不能不知道密碼學](https://www.hbrtaiwan.com/article_content_AR0007296.html)
- [區塊鏈如何運作](https://medium.com/@benzwjian/%E5%8D%80%E5%A1%8A%E9%8F%88%E5%A6%82%E4%BD%95%E9%81%8B%E4%BD%9C-b7c8d4131a0e)
- 國網中心 葉羅堯 博士
- [其他資源](https://hackmd.io/c/HyecE78AZW/https%3A%2F%2Fhackmd.io%2FGYJg7AHAhsCMCmBaAnCCATRAWEAGArIlLurogGwJgDMI8E1ywuQA)
{"metaMigratedAt":"2023-06-14T15:12:44.638Z","metaMigratedFrom":"YAML","title":"區塊鏈入門","breaks":true,"lang":"zh-tw","dir":"ltr","robots":"index, follow","GA":"UA-100433652-1","disqus":"calee","contributors":"[]"}