3,區塊鏈加密(react+區塊鏈實戰)
- 3.1 哈希
- 3.2 pow-pos-dpos
- 3.3非對稱加密
- (1)對稱加密AES
- (2)非對稱加密RSA
- 3.4 拜占庭將軍
- 3.5 P2P網絡
- 3.6 區塊鏈
3.1 哈希
密碼學,區塊鏈的技術名詞
Hash woniu
將其變為hash值
數據指紋
可以將任意長度的數據轉換成固定長度的數據
每次對woniu進行哈希得到的值是相同的
逆向困難,即下方的字符串無法逆向回到woniu
輸入改變一點,整個哈希會發生非常大的變化
輸入敏感
輸入碰撞
要想找到某個字符的hash也是該字符否hash幾乎是不可能的
3.2 pow-pos-dpos
上節課講到了哈希
數據校驗的應用,如發表一些信息或者軟件,信息會被篡改,操作系統數據會被篡改,
在官網上放著哈希,看下周軟件是否哈希和官網一樣判斷是否被篡改
共識,中心化無共識,只有中心說了算
無中心服務器時,如何讓各個人達成一致
共識機制
1,POW工作量證明(全網隨機出一道數學題,大家一起做,做出來,課賣100元,結果驗證很很簡單,比較原始,計算消耗能源大)
2,POS權益證明:不是誰干的活多誰轉的多,類似公司,誰的權益大誰賺的多,如以太坊,誰的幣多,誰擁有的時間越長,誰就獲得
3,DPOS代理權益證明,全網廣播證明太難,類似人大代表,只需要一部分代表同意即可,如EOS,定期精選EOS,可能會賄賂選節點,這個超級節點的權利
3.3非對稱加密
現代科技與密碼學分不開
有些人會篡改一些信息
如支付、交流、軍事等
需要加密保護信息
最早字母表
(1)對稱加密AES
只有一個秘鑰,私鑰
私鑰會共享
發送邏輯,發送者私鑰加密信息,發送密文, 接收方就用相同的私鑰解密
此時私鑰是相同的,計算效率比較高,前提是需要私鑰共享
(2)非對稱加密RSA
蝸牛 私鑰加密信息(私鑰簽名)+公鑰
小明這:收到信息+加密后的簽名+公鑰(公鑰可以公開,只用來校驗,公鑰可以使用私鑰計算得到) 通過公鑰驗證信息是否合法(只要證明信息合法,則信息明文也就無所謂了)
此時在傳遞需要認證的消息時,就不用事先共享私鑰了,避免風險
這樣信息可以證明其正確的,確實由蝸牛發出來的,第二個自己想抵賴也無法抵賴
在此里面也繼承了非對稱加密的代碼,用來測試
公鑰可以根據私鑰計算得到,不可逆
私鑰就是一個隨機字符串
1,使用私鑰計算公鑰如下(getpub方法,woniu為私鑰,計算的公鑰如下)
2,對某個信息使用私鑰進行簽名(sign方法,信息-imoocisgood,私鑰woniu,得到簽名的信息如下)
3,發送消息將“imoocisgood”+簽名的信息+公鑰三個信息一起發送出去,接收方會接到這三個信息進行校驗
4,Verify
區塊鏈中每筆交易的模型
從誰轉給誰,轉了多少錢,會拼接成字符串,使用私鑰加密,對方使用公鑰驗證解密,偷懶公鑰直接使用adress地址,就不用再私發公鑰了
本地是隨機字符串生成了私鑰,再使用私鑰生成公鑰
本地PUB方法得到本地的公鑰,PRV得到本地的私鑰
在挖礦,查詢余額,轉賬時使用的都是pub公鑰
Mine挖礦
Balance查詢余額
3.4 拜占庭將軍
當一些節點被黑,發出了錯誤的信息這怎么解決
拜占庭將軍想要在某個時間一起進攻,這種情況就要考慮有些將軍叛變,有些命令被篡改
怎么保證只要忠誠的將軍收到命令后執行此命令,若有反叛,防止篡改
問題有很多解答
這有容錯的機制
分布式系統肯定有的被黑,有的被掛,POW怎么保證
等等
多個將軍的系統,無論叛軍怎么做,都保證忠誠的將軍最后發起進攻
這里就不多介紹了
3.5 P2P網絡
點對點的系統
若在電腦下載一個比特幣的軟件,打開后就成為了一個比特幣的節點,但是并沒有一個公網IP,但別的網絡如何和你進行通信
這就使用了P2P的網絡系統
P2P、電驢等P2P的,最早出現原因,將某個電影放在服務器,如果好多成千上百人來訪問服務器,服務器的帶寬是扛不住的,就使用了點對點的系統,來我這告訴你別的節點文件在哪,去找其下載,這就減輕了中心服務器的壓力
有啟動節點
像以太坊的完全去中心化的,使用了DHT的kademlia的網絡
自己實現的
我們的電腦沒有公網ip,只有本地192.168的
我們訪問外網的時候,網關會臨時給一個公網端口,通過這個端口與外網進行交互
P2P交互邏輯,還是要UDP實現一個簡單的P2P網絡
加入節點時都會更新本地區塊鏈
當加入新的節點會和所有的節點打個招呼
PEER方法,得到節點信息
機器之間通過中心服務器,網關鍵加入白名單,為了方便后續的交流溝通
3.6 區塊鏈
分布式,系統在多個節點上
地址區塊
地址就是公鑰,區塊包含什么信息
Detail 44查看某個區塊
Index
Previoushash 上一個哈希值
Timestamp 時間戳
Nonce 隨機數的難度值
Hash hash的前5個人是0,前面的0越多難度越大
Data 轉賬信息,這里是只有挖礦的信息故只有一條轉賬
這就是一個區塊的詳情
該內置了一個方法update可以用來篡改某個區塊的信息,將某個區塊的轉賬金額加1
這里對第40個區塊進行篡改
輸入bc方法,可以查看完整的區塊鏈,如下找到第40個區塊,數據已經被改了
這里的valid方法校驗整個區塊是否合法
每個區塊都有previoushash及hash,而hash是由index,data,previoushash等等得到
使用方法mineblock 40修復第40個的區塊,此處的修復是將不合法的第40個區塊變為合法,但第41個就不合法了,需要一個個向后修復
雖然修復了第40個區塊,但41就不合法了,越是前面的區塊越不容易修復
篡改很難幾乎不可能的任務
智能合約,現在的大部分的去中心話的應用都是部署在以太坊上的智能合約,后面會有章節專門介紹,轉賬信息由誰轉給誰
后面也會有章節專門介紹,現在比特幣只是誰轉給誰幾個幣等,智能做幣
而以太坊有圖靈完畢的虛擬機,智能合約就是一定地址,一定的代碼,在符合條件的時候執行此代碼,代碼中可以抽獎、預測、游戲等,存在鏈上,完全去中心化,不受人為干預的
后面會介紹實戰開發
錢包
既然幣,存儲各類數字貨幣的錢包
所能掌握的就是私鑰,會將私鑰放在腦子、放在紙上、放在電腦中這些就是錢包,放到腦子記不住,就需要一個錢包來管理
數字貨幣就不詳解了
比特幣使用merkle樹來計算hash
下一章就是nodejs區塊鏈實戰