可以將區塊鏈看作一本記錄所有交易的公開總帳簿(列表),比特幣網路中的每個參與者都把它看作一本所有權的權威記錄。
比特幣沒有中心機構,幾乎所有的完整節點都有一份公共總帳的備份,這份總帳可以被視為認證過的記錄。
至今為止,在主幹區塊鏈上,沒有發生一起成功的攻擊,一次都沒有。
通過創造出新區塊,比特幣以一個確定的但不斷減慢的速率被鑄造出來。大約每十分鍾產生一個新區塊,每一個新區塊都伴隨著一定數量從無到有的全新比特幣。每開采210,000個塊,大約耗時4年,貨幣發行速率降低50%。
在2016年的某個時刻,在第420,000個區塊被「挖掘」出來之後降低到12.5比特幣/區塊。在第13,230,000個區塊(大概在2137年被挖出)之前,新幣的發行速度會以指數形式進行64次「二等分」。到那時每區塊發行比特幣數量變為比特幣的最小貨幣單位——1聰。最終,在經過1,344萬個區塊之後,所有的共20,999,999.9769億聰比特幣將全部發行完畢。換句話說, 到2140年左右,會存在接近2,100萬比特幣。在那之後,新的區塊不再包含比特幣獎勵,礦工的收益全部來自交易費。
在收到交易後,每一個節點都會在全網廣播前對這些交易進行校驗,並以接收時的相應順序,為有效的新交易建立一個池(交易池)。
每一個節點在校驗每一筆交易時,都需要對照一個長長的標准列表:
交易的語法和數據結構必須正確。
輸入與輸出列表都不能為空。
交易的位元組大小是小於MAX_BLOCK_SIZE的。
每一個輸出值,以及總量,必須在規定值的范圍內 (小於2,100萬個幣,大於0)。
沒有哈希等於0,N等於-1的輸入(coinbase交易不應當被中繼)。
nLockTime是小於或等於INT_MAX的。
交易的位元組大小是大於或等於100的。
交易中的簽名數量應小於簽名操作數量上限。
解鎖腳本(Sig)只能夠將數字壓入棧中,並且鎖定腳本(Pubkey)必須要符合isStandard的格式 (該格式將會拒絕非標准交易)。
池中或位於主分支區塊中的一個匹配交易必須是存在的。
對於每一個輸入,如果引用的輸出存在於池中任何的交易,該交易將被拒絕。
對於每一個輸入,在主分支和交易池中尋找引用的輸出交易。如果輸出交易缺少任何一個輸入,該交易將成為一個孤立的交易。如果與其匹配的交易還沒有出現在池中,那麼將被加入到孤立交易池中。
對於每一個輸入,如果引用的輸出交易是一個coinbase輸出,該輸入必須至少獲得COINBASE_MATURITY (100)個確認。
對於每一個輸入,引用的輸出是必須存在的,並且沒有被花費。
使用引用的輸出交易獲得輸入值,並檢查每一個輸入值和總值是否在規定值的范圍內 (小於2100萬個幣,大於0)。
如果輸入值的總和小於輸出值的總和,交易將被中止。
如果交易費用太低以至於無法進入一個空的區塊,交易將被拒絕。
每一個輸入的解鎖腳本必須依據相應輸出的鎖定腳本來驗證。
以下挖礦節點取名為 A挖礦節點
挖礦節點時刻監聽著傳播到比特幣網路的新區塊。而這些新加入的區塊對挖礦節點有著特殊的意義。礦工間的競爭以新區塊的傳播而結束,如同宣布誰是最後的贏家。對於礦工們來說,獲得一個新區塊意味著某個參與者贏了,而他們則輸了這場競爭。然而,一輪競爭的結束也代表著下一輪競爭的開始。
驗證交易後,比特幣節點會將這些交易添加到自己的內存池中。內存池也稱作交易池,用來暫存尚未被加入到區塊的交易記錄。
A節點需要為內存池中的每筆交易分配一個優先順序,並選擇較高優先順序的交易記錄來構建候選區塊。
一個交易想要成為「較高優先順序」,需滿足的條件:優先值大於57,600,000,這個值的生成依賴於3個參數:一個比特幣(即1億聰),年齡為一天(144個區塊),交易的大小為250個位元組:
High Priority > 100,000,000 satoshis * 144 blocks / 250 bytes = 57,600,000
區塊中用來存儲交易的前50K位元組是保留給較高優先順序交易的。 節點在填充這50K位元組的時候,會優先考慮這些最高優先順序的交易,不管它們是否包含了礦工費。這種機制使得高優先順序交易即便是零礦工費,也可以優先被處理。
然後,A挖礦節點會選出那些包含最小礦工費的交易,並按照「每千位元組礦工費」進行排序,優先選擇礦工費高的交易來填充剩下的區塊。
如區塊中仍有剩餘空間,A挖礦節點可以選擇那些不含礦工費的交易。有些礦工會竭盡全力將那些不含礦工費的交易整合到區塊中,而其他礦工也許會選擇忽略這些交易。
在區塊被填滿後,內存池中的剩餘交易會成為下一個區塊的候選交易。因為這些交易還留在內存池中,所以隨著新的區塊被加到鏈上,這些交易輸入時所引用UTXO的深度(即交易「塊齡」)也會隨著變大。由於交易的優先值取決於它交易輸入的「塊齡」,所以這個交易的優先值也就隨之增長了。最後,一個零礦工費交易的優先值就有可能會滿足高優先順序的門檻,被免費地打包進區塊。
UTXO(Unspent Transaction Output) : 每筆交易都有若干交易輸入,也就是資金來源,也都有若干筆交易輸出,也就是資金去向。一般來說,每一筆交易都要花費(spend)一筆輸入,產生一筆輸出,而其所產生的輸出,就是「未花費過的交易輸出」,也就是 UTXO。
塊齡:UTXO的「塊齡」是自該UTXO被記錄到區塊鏈為止所經歷過的區塊數,即這個UTXO在區塊鏈中的深度。
區塊中的第一筆交易是筆特殊交易,稱為創幣交易或者coinbase交易。這個交易是由挖礦節點構造並用來獎勵礦工們所做的貢獻的。假設此時一個區塊的獎勵是25比特幣,A挖礦的節點會創建「向A的地址支付25.1個比特幣(包含礦工費0.1個比特幣)」這樣一個交易,把生成交易的獎勵發送到自己的錢包。A挖出區塊獲得的獎勵金額是coinbase獎勵(25個全新的比特幣)和區塊中全部交易礦工費的總和。
A節點已經構建了一個候選區塊,那麼就輪到A的礦機對這個新區塊進行「挖掘」,求解工作量證明演算法以使這個區塊有效。比特幣挖礦過程使用的是SHA256哈希函數。
用最簡單的術語來說, 挖礦節點不斷重復進行嘗試,直到它找到的隨機調整數使得產生的哈希值低於某個特定的目標。 哈希函數的結果無法提前得知,也沒有能得到一個特定哈希值的模式。舉個例子,你一個人在屋裡打檯球,白球從A點到達B點,但是一個人推門進來看到白球在B點,卻無論如何是不知道如何從A到B的。哈希函數的這個特性意味著:得到哈希值的唯一方法是不斷的嘗試,每次隨機修改輸入,直到出現適當的哈希值。
需要以下參數
• block的版本 version
• 上一個block的hash值: prev_hash
• 需要寫入的交易記錄的hash樹的值: merkle_root
• 更新時間: ntime
• 當前難度: nbits
挖礦的過程就是找到x使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式的x的范圍是0~2^32, TARGET可以根據當前難度求出的。
簡單打個比方,想像人們不斷扔一對色子以得到小於一個特定點數的游戲。第一局,目標是12。只要你不扔出兩個6,你就會贏。然後下一局目標為11。玩家只能扔10或更小的點數才能贏,不過也很簡單。假如幾局之後目標降低為了5。現在有一半機率以上扔出來的色子加起來點數會超過5,因此無效。隨著目標越來越小,要想贏的話,扔色子的次數會指數級的上升。最終當目標為2時(最小可能點數),只有一個人平均扔36次或2%扔的次數中,他才能贏。
如前所述,目標決定了難度,進而影響求解工作量證明演算法所需要的時間。那麼問題來了:為什麼這個難度值是可調整的?由誰來調整?如何調整?
比特幣的區塊平均每10分鍾生成一個。這就是比特幣的心跳,是貨幣發行速率和交易達成速度的基礎。不僅是在短期內,而是在幾十年內它都必須要保持恆定。在此期間,計算機性能將飛速提升。此外,參與挖礦的人和計算機也會不斷變化。為了能讓新區塊的保持10分鍾一個的產生速率,挖礦的難度必須根據這些變化進行調整。事實上,難度是一個動態的參數,會定期調整以達到每10分鍾一個新區塊的目標。簡單地說,難度被設定在,無論挖礦能力如何,新區塊產生速率都保持在10分鍾一個。
那麼,在一個完全去中心化的網路中,這樣的調整是如何做到的呢?難度的調整是在每個完整節點中獨立自動發生的。每2,016個區塊(2周產生的區塊)中的所有節點都會調整難度。難度的調整公式是由最新2,016個區塊的花費時長與20,160分鍾(兩周,即這些區塊以10分鍾一個速率所期望花費的時長)比較得出的。難度是根據實際時長與期望時長的比值進行相應調整的(或變難或變易)。簡單來說,如果網路發現區塊產生速率比10分鍾要快時會增加難度。如果發現比10分鍾慢時則降低難度。
為了防止難度的變化過快,每個周期的調整幅度必須小於一個因子(值為4)。如果要調整的幅度大於4倍,則按4倍調整。由於在下一個2,016區塊的周期不平衡的情況會繼續存在,所以進一步的難度調整會在下一周期進行。因此平衡哈希計算能力和難度的巨大差異有可能需要花費幾個2,016區塊周期才會完成。
舉個例子,當前A節點在挖277,316個區塊,A挖礦節點一旦完成計算,立刻將這個區塊發給它的所有相鄰節點。這些節點在接收並驗證這個新區塊後,也會繼續傳播此區塊。當這個新區塊在網路中擴散時,每個節點都會將它作為第277,316個區塊(父區塊為277,315)加到自身節點的區塊鏈副本中。當挖礦節點收到並驗證了這個新區塊後,它們會放棄之前對構建這個相同高度區塊的計算,並立即開始計算區塊鏈中下一個區塊的工作。
比特幣共識機制的第三步是通過網路中的每個節點獨立校驗每個新區塊。當新區塊在網路中傳播時,每一個節點在將它轉發到其節點之前,會進行一系列的測試去驗證它。這確保了只有有效的區塊會在網路中傳播。
每一個節點對每一個新區塊的獨立校驗,確保了礦工無法欺詐。在前面的章節中,我們看到了礦工們如何去記錄一筆交易,以獲得在此區塊中創造的新比特幣和交易費。為什麼礦工不為他們自己記錄一筆交易去獲得數以千計的比特幣?這是因為每一個節點根據相同的規則對區塊進行校驗。一個無效的coinbase交易將使整個區塊無效,這將導致該區塊被拒絕,因此,該交易就不會成為總賬的一部分。
比特幣去中心化的共識機制的最後一步是將區塊集合至有最大工作量證明的鏈中。一旦一個節點驗證了一個新的區塊,它將嘗試將新的區塊連接到到現存的區塊鏈,將它們組裝起來。
節點維護三種區塊:
· 第一種是連接到主鏈上的,
· 第二種是從主鏈上產生分支的(備用鏈),
· 第三種是在已知鏈中沒有找到已知父區塊的。
有時候,新區塊所延長的區塊鏈並不是主鏈,這一點我們將在下面「 區塊鏈分叉」中看到。
如果節點收到了一個有效的區塊,而在現有的區塊鏈中卻未找到它的父區塊,那麼這個區塊被認為是「孤塊」。孤塊會被保存在孤塊池中,直到它們的父區塊被節點收到。一旦收到了父區塊並且將其連接到現有區塊鏈上,節點就會將孤塊從孤塊池中取出,並且連接到它的父區塊,讓它作為區塊鏈的一部分。當兩個區塊在很短的時間間隔內被挖出來,節點有可能會以相反的順序接收到它們,這個時候孤塊現象就會出現。
選擇了最大難度的區塊鏈後,所有的節點最終在全網范圍內達成共識。隨著更多的工作量證明被添加到鏈中,鏈的暫時性差異最終會得到解決。挖礦節點通過「投票」來選擇它們想要延長的區塊鏈,當它們挖出一個新塊並且延長了一個鏈,新塊本身就代表它們的投票。
因為區塊鏈是去中心化的數據結構,所以不同副本之間不能總是保持一致。區塊有可能在不同時間到達不同節點,導致節點有不同的區塊鏈視角。解決的辦法是, 每一個節點總是選擇並嘗試延長代表累計了最大工作量證明的區塊鏈,也就是最長的或最大累計難度的鏈。
當有兩個候選區塊同時想要延長最長區塊鏈時,分叉事件就會發生。正常情況下,分叉發生在兩名礦工在較短的時間內,各自都算得了工作量證明解的時候。兩個礦工在各自的候選區塊一發現解,便立即傳播自己的「獲勝」區塊到網路中,先是傳播給鄰近的節點而後傳播到整個網路。每個收到有效區塊的節點都會將其並入並延長區塊鏈。如果該節點在隨後又收到了另一個候選區塊,而這個區塊又擁有同樣父區塊,那麼節點會將這個區塊連接到候選鏈上。其結果是,一些節點收到了一個候選區塊,而另一些節點收到了另一個候選區塊,這時兩個不同版本的區塊鏈就出現了。
分叉之前
分叉開始
我們看到兩個礦工幾乎同時挖到了兩個不同的區塊。為了便於跟蹤這個分叉事件,我們設定有一個被標記為紅色的、來自加拿大的區塊,還有一個被標記為綠色的、來自澳大利亞的區塊。
假設有這樣一種情況,一個在加拿大的礦工發現了「紅色」區塊的工作量證明解,在「藍色」的父區塊上延長了塊鏈。幾乎同一時刻,一個澳大利亞的礦工找到了「綠色」區塊的解,也延長了「藍色」區塊。那麼現在我們就有了兩個區塊:一個是源於加拿大的「紅色」區塊;另一個是源於澳大利亞的「綠色」。這兩個區塊都是有效的,均包含有效的工作量證明解並延長同一個父區塊。這個兩個區塊可能包含了幾乎相同的交易,只是在交易的排序上有些許不同。
比特幣網路中鄰近(網路拓撲上的鄰近,而非地理上的)加拿大的節點會首先收到「紅色」區塊,並建立一個最大累計難度的區塊,「紅色」區塊為這個鏈的最後一個區塊(藍色-紅色),同時忽略晚一些到達的「綠色」區塊。相比之下,離澳大利亞更近的節點會判定「綠色」區塊勝出,並以它為最後一個區塊來延長區塊鏈(藍色-綠色),忽略晚幾秒到達的「紅色」區塊。那些首先收到「紅色」區塊的節點,會即刻以這個區塊為父區塊來產生新的候選區塊,並嘗試尋找這個候選區塊的工作量證明解。同樣地,接受「綠色」區塊的節點會以這個區塊為鏈的頂點開始生成新塊,延長這個鏈。
分叉問題幾乎總是在一個區塊內就被解決了。網路中的一部分算力專注於「紅色」區塊為父區塊,在其之上建立新的區塊;另一部分算力則專注在「綠色」區塊上。即便算力在這兩個陣營中平均分配,也總有一個陣營搶在另一個陣營前發現工作量證明解並將其傳播出去。在這個例子中我們可以打個比方,假如工作在「綠色」區塊上的礦工找到了一個「粉色」區塊延長了區塊鏈(藍色-綠色-粉色),他們會立刻傳播這個新區塊,整個網路會都會認為這個區塊是有效的,如上圖所示。
所有在上一輪選擇「綠色」區塊為勝出者的節點會直接將這條鏈延長一個區塊。然而,那些選擇「紅色」區塊為勝出者的節點現在會看到兩個鏈: 「藍色-綠色-粉色」和「藍色-紅色」。 如上圖所示,這些節點會根據結果將 「藍色-綠色-粉色」 這條鏈設置為主鏈,將 「藍色-紅色」 這條鏈設置為備用鏈。 這些節點接納了新的更長的鏈,被迫改變了原有對區塊鏈的觀點,這就叫做鏈的重新共識 。因為「紅」區塊做為父區塊已經不在最長鏈上,導致了他們的候選區塊已經成為了「孤塊」,所以現在任何原本想要在「藍色-紅色」鏈上延長區塊鏈的礦工都會停下來。全網將 「藍色-綠色-粉色」 這條鏈識別為主鏈,「粉色」區塊為這條鏈的最後一個區塊。全部礦工立刻將他們產生的候選區塊的父區塊切換為「粉色」,來延長「藍色-綠色-粉色」這條鏈。
從理論上來說,兩個區塊的分叉是有可能的,這種情況發生在因先前分叉而相互對立起來的礦工,又幾乎同時發現了兩個不同區塊的解。然而,這種情況發生的幾率是很低的。單區塊分叉每周都會發生,而雙塊分叉則非常罕見。
比特幣將區塊間隔設計為10分鍾,是在更快速的交易確認和更低的分叉概率間作出的妥協。更短的區塊產生間隔會讓交易清算更快地完成,也會導致更加頻繁地區塊鏈分叉。與之相對地,更長的間隔會減少分叉數量,卻會導致更長的清算時間。
⑵ 比特幣之挖礦與共識(二)
比特幣共識機制的第三步是通過網路中的每個節點獨立校驗每個新區塊。當新區塊在網路中傳播時,每一個節點在將它 轉發到其節點之前,會進行一系列的測試去驗證它。這確保了只有有效的區塊會在網路中傳播。
獨立校驗還確保了誠實 的礦工生成的區塊可以被納入到區塊鏈中,從而獲得獎勵。行為不誠實的礦工所產生的區塊將被拒絕,這不但使他們失 去了獎勵,而且也浪費了本來可以去尋找工作量證明解的機會,因而導致其電費虧損。
當一個節點接收到一個新的區塊,它將對照一個長長的標准清單對該區塊進行驗證,若沒有通過驗證,這個區塊將被拒 絕。這些標准可以在比特幣核心客戶端的CheckBlock函數和CheckBlockHead函數中獲得
它包括:
為什麼礦工不為他們自己記錄一筆交易去獲得數以千計的比特幣?
這 是因為每一個節點根據相同的規則對區塊進行校驗。一個無效的coinbase交易將使整個區塊無效,這將導致該區塊被拒 絕,因此,該交易就不會成為總賬的一部分。礦工們必須構建一個完美的區塊,基於所有節點共享的規則,並且根據正 確工作量證明的解決方案進行挖礦,他們要花費大量的電力挖礦才能做到這一點。如果他們作弊,所有的電力和努力都 會浪費。這就是為什麼獨立校驗是去中心化共識的重要組成部分。
比特幣去中心化的共識機制的最後一步是將區塊集合至有最大工作量證明的鏈中。一旦一個節點驗證了一個新的區塊, 它將嘗試將新的區塊連接到到現存的區塊鏈,將它們組裝起來。
節點維護三種區塊:第一種是連接到主鏈上的,第二種是從主鏈上產生分支的(備用鏈),最後一種是在已知鏈中沒有 找到已知父區塊的。在驗證過程中,一旦發現有不符合標準的地方,驗證就會失敗,這樣區塊會被節點拒絕,所以也不 會加入到任何一條鏈中。
任何時候,主鏈都是累計了最多難度的區塊鏈。在一般情況下,主鏈也是包含最多區塊的那個鏈,除非有兩個等長的鏈 並且其中一個有更多的工作量證明。主鏈也會有一些分支,這些分支中的區塊與主鏈上的區塊互為「兄弟」區塊。這些區 塊是有效的,但不是主鏈的一部分。 保留這些分支的目的是如果在未來的某個時刻它們中的一個延長了並在難度值上超 過了主鏈,那麼後續的區塊就會引用它們。
如果節點收到了一個有效的區塊,而在現有的區塊鏈中卻未找到它的父區塊,那麼這個區塊被認為是「孤塊」。孤塊會被 保存在孤塊池中,直到它們的父區塊被節點收到。一旦收到了父區塊並且將其連接到現有區塊鏈上,節點就會將孤塊從 孤塊池中取出,並且連接到它的父區塊,讓它作為區塊鏈的一部分。當兩個區塊在很短的時間間隔內被挖出來,節點有 可能會以相反的順序接收到它們,這個時候孤塊現象就會出現。
選擇了最大難度的區塊鏈後,所有的節點最終在全網范圍內達成共識。隨著更多的工作量證明被添加到鏈中,鏈的暫時性差異最終會得到解決。挖礦節點通過「投票」來選擇它們想要延長的區塊鏈,當它們挖出一個新塊並且延長了一個鏈, 新塊本身就代表它們的投票。
因為區塊鏈是去中心化的數據結構,所以不同副本之間不能總是保持一致。區塊有可能在不同時間到達不同節點,導致節點有不同的區塊鏈全貌。
解決的辦法是,每一個節點總是選擇並嘗試延長代表累計了最大工作量證明的區塊鏈,也就 是最長的或最大累計工作的鏈(greatest cumulative work chain)。節點通過累加鏈上的每個區塊的工作量,得到建立這個鏈所要付出的工作量證明的總量。只要所有的節點選擇最長累計工作的區塊鏈,整個比特幣網路最終會收斂到一致的狀態。分叉即在不同區塊鏈間發生的臨時差異,當更多的區塊添加到了某個分叉中,這個問題便會迎刃而解。
提示由於全球網路中的傳輸延遲,本節中描述的區塊鏈分叉自動會發生。
然而,倒三角形的區塊不會被丟棄。它被鏈接到星形鏈的父區塊,並形成備用鏈。雖然節點X認為自己已經正確選擇了獲勝鏈,但是它還會保存「丟失」鏈,使得「丟失」鏈如果可能最終「獲勝」,它還具有重新打包的所需的信息。
這是一個鏈的重新共識,因為這些節點被迫修改他們對塊鏈的立場,把自己納入更長的鏈。任何從事延伸星形-倒三角形的礦工現在都將停止這項工作,因為他們的候選人是「孤兒」,因為他們的父母「倒三角形」不再是最長的連鎖。
「倒三角形」內的交易重新插入到內存池中用來包含在下一個塊中,因為它們所在的塊不再位於主鏈中。
整個網路重新回到單一鏈狀態,星形-三角形-菱形,「菱形」成為鏈中的最後一個塊。所有礦工立即開始研究以「菱形」為父區塊的候選塊,以擴展這條星形-三角形-菱形鏈。
從理論上來說,兩個區塊的分叉是有可能的,這種情況發生在因先前分叉而相互對立起來的礦工,又幾乎同時發現了兩個不同區塊的解。
然而,這種情況發生的幾率是很低的。單區塊分叉每周都會發生,而雙塊分叉則非常罕見。比特幣將區塊間隔設計為10分鍾,是在更快速的交易確認和更低的分叉概率間作出的妥協。更短的區塊產生間隔會讓交易清算更快地完成,也會導致更加頻繁地區塊鏈分叉。與之相對地,更長的間隔會減少分叉數量,卻會導致更長的清算時間。
2012年以來,比特幣挖礦發展出一個解決區塊頭基本結構限制的方案。在比特幣的早期,礦工可以通過遍歷隨機數 (Nonce)獲得符合要求的hash來挖出一個塊。
難度增長後,礦工經常在嘗試了40億個值後仍然沒有出塊。然而,這很容 易通過讀取塊的時間戳並計算經過的時間來解決。因為時間戳是區塊頭的一部分,它的變化可以讓礦工用不同的隨機值 再次遍歷。當挖礦硬體的速度達到了4GH/秒,這種方法變得越來越困難,因為隨機數的取值在一秒內就被用盡了。
當出現ASIC礦機並很快達到了TH/秒的hash速率後,挖礦軟體為了找到有效的塊, 需要更多的空間來儲存nonce值 。可以把時間戳延後一點,但將來如果把它移動得太遠,會導致區塊變為無效。
區塊頭需要信息來源的一個新的「變革」。解決方案是使用coinbase交易作為額外的隨機值來源,因為coinbase腳本可以儲存2-100位元組的數據,礦工們開始使用這個空間作為額外隨機值的來源,允許他們去探索一個大得多的區塊頭值范圍來找到有效的塊。這個coinbase交易包含在merkle樹中,這意味著任何coinbase腳本的變化將導致Merkle根的變化。
8個位元組的額外隨機數,加上4個位元組的「標准」隨機數,允許礦工每秒嘗試2^96(8後面跟28個零)種可能性而無需修改時間戳。如果未來礦工穿過了以上所有的可能性,他們還可以通過修改時間戳來解決。同樣,coinbase腳本中也有更多額外的空間可以為將來隨機數的擴展做准備。
比特幣的共識機制指的是,被礦工(或礦池)試圖使用自己的算力實行欺騙或破壞的難度很大,至少理論上是這樣。就像我們前面講的,比特幣的共識機制依賴於這樣一個前提,那就是絕大多數的礦工,出於自己利益最大化的考慮,都會 通過誠實地挖礦來維持整個比特幣系統。然而,當一個或者一群擁有了整個系統中大量算力的礦工出現之後,他們就可以通過攻擊比特幣的共識機制來達到破壞比特幣網路的安全性和可靠性的目的。
值得注意的是,共識攻擊只能影響整個區塊鏈未來的共識,或者說,最多能影響不久的過去幾個區塊的共識(最多影響過去10個塊)。而且隨著時間的推移,整個比特幣塊鏈被篡改的可能性越來越低。
理論上,一個區塊鏈分叉可以變得很長,但實際上,要想實現一個非常長的區塊鏈分叉需要的算力非常非常大,隨著整個比特幣區塊鏈逐漸增長,過去的區塊基本可以認為是無法被分叉篡改的。
同時,共識攻擊也不會影響用戶的私鑰以及加密演算法(ECDSA)。
共識攻擊也 不能從其他的錢包那裡偷到比特幣、不簽名地支付比特幣、重新分配比特幣、改變過去的交易或者改變比特幣持有紀錄。共識攻擊能夠造成的唯一影響是影響最近的區塊(最多10個)並且通過拒絕服務來影響未來區塊的生成。
共識攻擊的一個典型場景就是「51%攻擊」。想像這么一個場景,一群礦工控制了整個比特幣網路51%的算力,他們聯合起來打算攻擊整個比特幣系統。由於這群礦工可以生成絕大多數的塊,他們就可以通過故意製造塊鏈分叉來實現「雙重支 付」或者通過拒絕服務的方式來阻止特定的交易或者攻擊特定的錢包地址。
區塊鏈分叉/雙重支付攻擊指的是攻擊者通過 不承認最近的某個交易,並在這個交易之前重構新的塊,從而生成新的分叉,繼而實現雙重支付。有了充足算力的保證,一個攻擊者可以一次性篡改最近的6個或者更多的區塊,從而使得這些區塊包含的本應無法篡改的交易消失。
值得注意的是,雙重支付只能在攻擊者擁有的錢包所發生的交易上進行,因為只有錢包的擁有者才能生成一個合法的簽名用於雙重支付交易。攻擊者在自己的交易上進行雙重支付攻擊,如果可以通過使交易無效而實現對於不可逆轉的購買行為不予付款, 這種攻擊就是有利可圖的。
攻擊者Mallory在Carol的畫廊買了描繪偉大的中本聰的三聯組畫(The Great Fire),Mallory通過轉賬價值25萬美金的比特幣 與Carol進行交易。在等到一個而不是六個交易確認之後,Carol放心地將這幅組畫包好,交給了Mallory。這時,Mallory 的一個同夥,一個擁有大量算力的礦池的人Paul,在這筆交易寫進區塊鏈的時候,開始了51%攻擊。
首先,Paul利用自己礦池的算力重新計算包含這筆交易的塊,並且在新塊里將原來的交易替換成了另外一筆交易(比如直接轉給了Mallory 的另一個錢包而不是Carol的),從而實現了「雙重支付」。這筆「雙重支付」交易使用了跟原有交易一致的UTXO,但收款人被替換成了Mallory的錢包地址。
然後,Paul利用礦池在偽造的塊的基礎上,又計算出一個更新的塊,這樣,包含這 筆「雙重支付」交易的塊鏈比原有的塊鏈高出了一個塊。到此,高度更高的分叉區塊鏈取代了原有的區塊鏈,「雙重支付」交 易取代了原來給Carol的交易,Carol既沒有收到價值25萬美金的比特幣,原本擁有的三幅價值連城的畫也被Mallory白白 拿走了。
在整個過程中,Paul礦池裡的其他礦工可能自始至終都沒有覺察到這筆「雙重支付」交易有什麼異樣,因為挖礦程序都是自動在運行,並且不會時時監控每一個區塊中的每一筆交易。
為了避免這類攻擊,售賣大宗商品的商家應該在交易得到全網的6個確認之後再交付商品。或者,商家應該使用第三方 的多方簽名的賬戶進行交易,並且也要等到交易賬戶獲得全網多個確認之後再交付商品。一條交易的確認數越多,越難 被攻擊者通過51%攻擊篡改。
對於大宗商品的交易,即使在付款24小時之後再發貨,對買賣雙方來說使用比特幣支付也 是方便並且有效率的。而24小時之後,這筆交易的全網確認數將達到至少144個(能有效降低被51%攻擊的可能性)。
需要注意的是,51%攻擊並不是像它的命名里說的那樣,攻擊者需要至少51%的算力才能發起,實際上,即使其擁有不 到51%的系統算力,依然可以嘗試發起這種攻擊。之所以命名為51%攻擊,只是因為在攻擊者的算力達到51%這個閾值 的時候,其發起的攻擊嘗試幾乎肯定會成功。
本質上來看,共識攻擊,就像是系統中所有礦工的算力被分成了兩組,一 組為誠實算力,一組為攻擊者算力,兩組人都在爭先恐後地計算塊鏈上的新塊,只是攻擊者算力算出來的是精心構造 的、包含或者剔除了某些交易的塊。因此,攻擊者擁有的算力越少,在這場決逐中獲勝的可能性就越小。
從另一個角度 講,一個攻擊者擁有的算力越多,其故意創造的分叉塊鏈就可能越長,可能被篡改的最近的塊或者或者受其控制的未來 的塊就會越多。一些安全研究組織利用統計模型得出的結論是,算力達到全網的30%就足以發動51%攻擊了。全網算力的急劇增長已經使得比特幣系統不再可能被某一個礦工攻擊,因為一個礦工已經不可能占據全網哪怕的1%算 力。
待補充
待補充
⑶ 比特幣價值將歸零谷歌計劃2029年前量子計算商用化
(思進註: 1994年,數學家Peter Shor公布了一種量子演算法,該演算法可以打破最常見的非對稱密碼演算法的安全性假設。這意味著擁有足夠大量子計算機的任何人,都可以使用此演算法通過公鑰反算出私鑰,從而偽造任何數字簽名。這是否意味著比特幣將會被量子計算機crack down…… 事實上,中心化的密鑰體系PKI,確實會有這個風險,因為大多數應用是CA+10的6次方。海量反編譯,是可以推算出中心密碼本的!也就是說,偽造PKI數字簽名是有可能的, 拭目以待吧……再轉發下文,和大家分享……)
谷歌計劃2029年前量子計算商用化,比特幣價值將歸零?
作者 | 新浪 財經
來源 | 華爾街見聞
量子計算何以對比特幣構成威脅?
在解釋這個問題前,需要先了解以下幾個知識點。
經典計算機採用二進制,用0和1構建了底層代碼的一切。量子計算機可以同時儲存和表示0和1疊加態。比特幣挖礦基於計算一種名為SHA-256的哈希函數(一種函數演算法,把任意一個字元串輸入SHA-256函數,都會輸出一個256位的二進制數)的正確值。每一個比特幣用戶在注冊的時候,系統都會生成一個隨機數,再對這個隨機數進行SHA256再進行hash160,產生一個叫做私鑰的字元串。作為數字簽名。私鑰可以對一串字元進行加密。而公鑰可以把私鑰加密之後的數據進行和解密。加密和解密的鑰匙不一樣的這種加密方式,稱之為非對稱加密。通過公鑰反算不出私鑰。如果私鑰遺失,那麼擁有者的比特幣就無法取出。
基於上述原因,由於SHA-256的正確值十分難計算,數量有限的比特幣才會變得極為稀缺和珍貴。同時由於經典計算機無法通過公鑰反算出私鑰,私人擁有的比特幣才無法被他人獲得。
但在1994年,數學家Peter Shor公布了一種量子演算法,該演算法可以打破最常見的非對稱密碼演算法的安全性假設。這意味著擁有足夠大量子計算機的任何人,都可以使用此演算法通過公鑰反算出私鑰,從而偽造任何數字簽名。
故而,在量子計算面前,比特幣的挖礦將變得輕而易舉,通過公鑰也能反算出私鑰。這令比特幣變得不再稀缺,也不再安全。
同時意味著比特幣的共識將產生崩塌,比特幣的價值也將趨零。
關於量子力學,廣為人知的還有光的波粒二象性、觀測者效應,和一個著名的思想試驗——薛定諤的貓。
量子世界是如此不合常理,以至於它曾令說出「上帝不會擲骰子「愛因斯坦,都感到困惑不解。
無論如何,量子計算機的出現,對經典計算機形成了巨大挑戰。而隨著量子計算研究進程的遞進,比特幣的破解,或許在2029年前就將成為可能。
谷歌的量子計算進程如何?
早在2019年,谷歌發表在《自然》雜志上的論文稱,其開發的54比特(其中53個量子比特可用)超導量子晶元「Sycamore」,對53比特、20深度的電路采樣一百萬次僅需200秒,最強的經典超級計算機Summit要得到類似的結果,則需要一萬年。基於這一突破,谷歌宣稱實現了「量子霸權「。
而近日在 Google I/O 大會上,領導谷歌 Quantum AI(量子 人工智慧)團隊的的科學家Hartmut Neven表示,谷歌計劃在2029年前建造數十億美元的量子計算機並將其正式商用。
谷歌的目標是建造有著100萬個量子比特的計算機。不過,谷歌同時表示,首先需要減少量子比特產生的錯誤,然後才能考慮將1000個量子比特一起構建為一個邏輯量子比特。這將為「量子晶體管」打下基礎,「量子晶體管」是未來量子計算機的基礎。目前谷歌的量子計算機只有不到100個量子比特。但要知道,互聯網誕生至今不過52年,第一台通用計算機誕生至今不過75年.
谷歌目前正在加利福尼亞州擴建一個新園區,用以專注於量子計算方面的研究工作,擴建工程將於2020年底正式完工。
在量子計算領域大舉投資和押注的公司,除了谷歌,還有IBM、D-Wave Systems、霍尼韋爾(Honeywell)。
IBM Research總監Dario Gil曾表示,2023年將是量子計算大面積使用的轉折點,屆時將能通過軟體實時查看和更新量子計算的狀態,而不再是通過以往的硬體調整。
高德納咨詢公司 (Gartner)副總裁Chirag Dekate表示,過去五年中,量子計算的創新速度超過了此前的30年,他還預計到2025年,將有近40%的大公司制定量子計算計劃。
關於對抗量子計算,目前已出現量子密碼學的相關研究。一個名為The Open Quantum Safe (OQS)的開源項目已於2016年啟動,目標為開發抗量子的密碼形式。
⑷ 為什麼挖比特幣靠顯卡而不是cpu
1、 CPU 主要為串列指令而優化,而GPU則是為大規模並行運算而優化。
2 、現代的多核 CPU 針對的是指令集並行(ILP)和任務並行(TLP),而 GPU 則是數據並行(DLP)。
3 、GPU 往往擁有更大帶寬的 Memory,也就是所謂的顯存,因此在大吞吐量的應用中也會有很好的性能。
4、CPU是通用運算簡單說就是無腦算、暴力算不管是100個小朋友分蘋果還是模擬地球都能分解成 1+1=2這類最基本的給暴力算出來。GPU 就是專門來處理高階數學演算法的,比如算出、光源、物體、視點、陰影的相對位置,這就要三角函數給堆出來。而比特幣挖掘器採用的是SHA-256,這是由美國國家安全局發明的一種安全散列函數,一般用於密碼加密與解密。這種演算法會進行大量32位整數循環右移運算(Right-Rotate),很適合擅長大規模並發計算,破解密碼的 GPU來運算。
⑸ 天天說挖礦,比特幣挖礦流程概述。
通俗易懂的大概流程
如果你之前對挖礦根本沒有了解,這段介紹就適合你閱讀,進入狀態後再進行更深層次的學習。
其實通俗來講原理很簡單,比特幣作為一種點對點的電子貨幣體系,挖礦的過程就是一個紀錄數據的過程,因為整個系統是開放的,人人可參與的,所以人人都可以進行挖礦,雖然理論上人人都可以參與,但無利不起早沒有人會平白無故的參與到網路的建設中,中本聰就利用Hash函數設計了一種激勵和競爭方式。
大家都進行數據的處理工作,誰處理的又快又准確,誰就獲得記賬權,同時獲得該區塊的獎勵。既有獎勵又有競爭才使得比特幣網路得以正常運轉。
想要競爭成功就要經歷幾個基本的流程。
一、首先你要將沒有被記錄的交易信息檢查並歸集到一個數據塊中。
二、數據塊打包好後,進行哈希運算,算出哈希值,哈希值這個概念在昨天文章中已經詳細的介紹過。
三、算出哈希值後進行全網廣播,其他礦工接收到後進行驗證,驗證沒有問題就會將這一個數據塊連接到整個區塊鏈上,就可以獲得這個區塊的獎勵了。
大致過程了解後就可以開始詳細的了解整個過程了。
開始挖礦前的准備工作
這里所說的准備,可不是讓你准備買礦機或者給礦機通電,說的是在進行POW工作量證明之前記賬節點所作的准備工作。也就是前面流程的第一步的具體解釋。
想要收集齊全交易信息,第一步就是收集廣播中還沒有被記錄賬本的原始交易信息。收集完成後就要自己先進行驗證,主要驗證兩個方面,1.每個交易信息中的付款地址有沒有足夠付款的余額。2.驗證交易是否有正確的簽名。這兩項必不可少,通俗一點就是你給別人打錢銀行需要確認的就是兩點,你賬號里到底有沒有那麼多錢,是不是你本人或本人同意的行為。
這兩項驗證完後就可以將驗證好的數據進行打包,打包完成後當然沒有完,因為還有對於礦工來說最最重要的 一 步,添加一個獎勵交易,寫一個給自己地址增加6.25枚比特幣的交易。
如果你競爭成功,那麼你的賬戶地址內就會增加6.25枚比特幣,在這里也順便提一下減半,最開始一個區塊的記賬獎勵是50個比特幣,比特幣大概每4年獎勵就進行減半,前一段時間的減半過後比特幣一個區塊的獎勵已經變成了6.25枚。
值得一提的是前兩次減半後都伴隨著牛市的來臨,現在第三次減半已過,在之後會有什麼樣的變化呢?
准備工作完成後就要正式的爭奪了
因為10分鍾左右就一個記賬的名額,在這個階段全世界的礦工,都進行著一場沒有硝煙的戰爭。
那這場仗怎麼打呢?其實就是計算Hash函數,礦工算力的比拼,所以說在比特幣網路哪裡都離不開Hash函數。為了保證在10分鍾只有一個人能夠成功,這個哈希函數的難度必須適當。直接哈希難度過低,所以規定Hash出的結果必須以若干個0構成。
可能直接這么說開頭若干個0還沒有什麼難度概念,那就簡單分析一下,進行這樣的計算有多難 , 也就順便可以解釋為什麼單打獨斗的礦工已經不吃香了。
Hash值跟平常我們設置的密碼要求相似,是由數字、字母組成,其中字母區分大小寫。也就是說每一位都有62種可能,哈希運算本質就是試錯,相當於給你一個不限出錯次數的手機讓你開鎖一樣 。 而比特幣的哈希值是以18個0開頭的,理論上需要進行62的18次方,這個數字在普通計算器上都是以科學計數法顯示的,結果為1.832527122*10的32次方。
指數爆炸式的運算次數增長保證了其挖礦的難度。同時也因為難度大帶來了一些爭議,有人就會說耗費那麼大卻不產生價值,之前挖礦還在一份意見徵集稿中放到了落後產能里。可以說對於挖礦行業的爭議是一直存在的。
最後一步驗證
找到哈希值後,進行廣播打包區塊,網路節點就會進行驗證。
情況無非就是兩種,一種是驗證通過,那麼表明這個區塊成功挖出,其他礦工就不再競爭,選擇接受這個區塊,將這個區塊進行記錄,挖出這個區塊的礦工就獲得了該區塊的獎勵,並且進入下一個區塊的競爭。
另外一種就是不通過,那麼前面的那些工作都白費了,投入的成本就沒有辦法收回,所以礦工們都自覺的遵守著打包和驗證的規則,因為作惡成本較高,也就維護了比特幣網路的安全。
相信你讀完文章已經大致了解了比特幣挖礦的整個流程,不過挖礦實際操作起來又是另一個概念了,其中什麼時候適合進場挖礦、入手什麼樣的礦機進行挖礦、通過什麼樣的方式參與挖礦都是有一定學問的。
挖礦有風險投資需謹慎呀,搞懂再行動,沒搞懂之前就要多學習。
⑹ 鎸栫熆綆楀姏濡備綍璁$畻
甯佹槸濡備綍鈥滄寲鈥濆嚭鏉ョ殑
奼瀵塊槼琛ㄧず錛岃繎騫存潵錛屾瘮鐗瑰竵鍥犲叾楂樺埄娑︼紝鍚稿紩鐫瓚婃潵瓚婂氱殑鈥滅熆宸モ濆幓鈥滄寲鐭庫濄傝屸滄寲鐭庫濋渶瑕佷嬌鐢ㄨ$畻鏈轟綔涓衡滅熆鏈衡濇潵鎵ц岀壒瀹氱畻娉曡繘琛岃$畻錛屽苟絝炰簤鍖哄潡鎾鎶ユ潈銆傝幏寰楁挱鎶ユ潈鐨勭熆宸ュ彲浠ヨ幏寰楁瘮鐗瑰竵浣滀負濂栧姳銆傚湪璁$畻鐨勮繃紼嬩腑錛屾瘮鐗瑰竵鍏ㄧ綉浼氭秷鑰楀ぇ閲忕殑鐢靛姏鑳芥簮鍜岀畻鍔涖
姝︽眽澶у︾數鍣ㄥ﹂櫌鏁欐巿寮犱繆鎸囧嚭錛屾瘮鐗瑰竵鐨勭畻娉曟槸奼傝В鍝堝笇鍑芥暟錛屽氨鏄浣犵粰涓涓蹭唬鐮侊紝瀹冧細鐢熸垚鍙︿竴涓查殢鏈轟唬鐮併備簰鑱旂綉涓鐨勬墍鏈夎$畻鏈洪兘鍙浠ュ幓瀵繪壘姝や唬鐮侊紝璋佹壘鍒版や唬鐮侊紝灝變細浜х敓涓涓鍖哄潡錛岄殢鍗沖緱鍒頒竴涓姣旂壒甯侊紝榪欎釜榪囩▼灝辨槸浜轟滑甯歌寸殑鈥滄寲鐭庫濄
鈥滄瘮鐗瑰竵緗戠粶姣10鍒嗛挓浼氫駭鐢熶竴閬撴暟瀛﹂棶棰橈紝浜ょ粰鍙備笌澶勭悊鍖哄潡鐨勮$畻鏈(鍗斥樼熆鏈衡)鏉ユ眰瑙c傛渶鏃╄В鍑虹瓟妗堢殑鈥樼熆鏈衡欏皢鑾峰緱涓瀹氭暟閲忕殑姣旂壒甯佷綔涓哄栧姳銆傗濆紶淇婁婦渚嬭達紝1鍙扮數鑴戝拰100鍙扮數鑴戝垎鍒鈥滄寲鐭庫濓紝鍓嶈呬竴嬈$畻涓涓闅忔満浠g爜錛屽悗鑰呬竴嬈$畻100涓闅忔満浠g爜錛岄偅鑲瀹氭槸騫惰岀殑閲忚秺澶氭寲鍒扮殑姣旂壒甯佽秺澶氥傛姇鏈鴻呬負浜嗗埄鐩婏紝灝變細璐涔板ぇ閲忕殑鐭挎満榪涜屽ぇ瑙勬ā鐨勨滄寲鐭庫濓紝鑷鐒朵細浜х敓鑳芥簮鐨勫法澶ф氮璐廣
鍏跺疄涓嶅厜涓鍥斤紝姣旂壒甯佺殑楂樿楄兘鐗規у凡緇忓紩璧蜂笘鐣屽悇鍥界殑娉ㄦ剰銆傛ф床澶琛岀О錛屽姞瀵嗚祫浜р滆繃楂樼殑紕寵凍榪逛護浜烘媴蹇р濄傛瘮灝斅風洊鑼ㄦゅ墠鍦ㄨ闊崇ぞ浜ゅ鉤鍙癈lubhouse鍋氬㈡椂琛ㄧず錛屾瘮鐗瑰竵鍦ㄦ瘡絎斾氦鏄撹繃紼嬩腑娑堣楃殑鐢甸噺錛岃秴榪囦漢綾誨凡鐭ョ殑浠諱綍涓縐嶆敮浠樻柟寮忋
鈥滄寲鐭庫濆獎鍝嶁滅⒊涓鍜屸濈殑瀹炵幇
鍥介檯鑳芥簮緗(IEA)鏁版嵁鏄劇ず錛2019騫存瘮鐗瑰竵鈥滄寲鐭庫濇秷鑰50鑷70鍏嗙摝鏃訛紝澶ц嚧鐩稿綋浜庡傜憺澹鑸浣撻噺鍥藉剁殑娑堣楅噺(姣忓勾娑堣63澶鐡︽椂)銆侰ambridge Bitcoin Electricity Consumption Index(鍓戞ˉ姣旂壒甯佺數鍔涙秷璐規寚鏁)瀹炴椂鏁版嵁鍒欐洿浣誇漢蹇у績錛屾埅鑷沖寳浜鏃墮棿5鏈17鏃ワ紝姣旂壒甯佹昏兘婧愭秷鑰43.89-482.43鍏嗙摝鏃(TWh)涔嬮棿錛屽潎緇熻$害涓140.25鍏嗙摝鏃訛紝榪欎釜鏁板瓧瓚呰繃浜嗙憺鍏2019騫村叏騫寸殑鑰楃數閲(131.8澶鐡︽椂)銆
奼瀵塊槼鐮旂┒鍥㈤槦鍒╃敤姣旂壒甯佸尯鍧楅摼紕蟲帓鏀炬ā鍨嬶紝榪借釜浜嗕腑鍥芥瘮鐗瑰竵鍖哄潡閾捐繍钀ョ殑紕蟲帓鏀炬祦閲忋傛牴鎹褰撳墠鐨勬瘮鐗瑰竵鈥滄寲鐭庫濇疆嫻侊紝浠栦滑棰勬祴姣旂壒甯佸尯鍧楅摼榪愯惀鐨勮兘鑰椾細鍦2024騫磋揪鍒扮害297涓囦嚎鐡︽椂鐨勫嘲鍊礆紝騫跺皢浜х敓綰1.305浜垮叕鍚ㄧ殑紕蟲帓鏀俱傝繖涓鏁板艱秴榪囦簡鎹峰厠銆佸崱濉斿皵絳夊浗鐨勫叏騫存俯瀹ゆ皵浣撴帓鏀炬婚噺銆
鈥滄瘮鐗瑰竵鏄鈥橀珮紕斥欎駭涓氥傝繖涓庢垜鍥藉姏浜2030騫村墠瀹炵幇紕寵揪宄般2060騫村墠瀹炵幇紕充腑鍜岃繖涓鐩鏍囨樉鐒舵牸鏍間笉鍏ャ傗濇豹瀵塊槼琛ㄧず錛屽幓騫村湪涓鍥解樻寲鐭庫欎駭鐢熶簡6900涓囧惃浜屾哀鍖栫⒊錛屽崰鍏ㄧ悆浜屾哀鍖栫⒊鎺掓斁閲忕殑1%銆
鎵撳嚮鈥滄寲鐭庫濊屼負錛屼腑鍥藉湪琛屽姩
鏄劇劧錛屼竴浜涘湴鏂瑰凡緇忔敞鎰忓埌鈥滄寲鐭庫濈粰褰撳湴鐜澧冨拰鐢熸佸甫鏉ョ殑涓ラ噸鐮村潖錛屽紑濮嬪氭帾騫朵婦鍏ㄩ潰娓呯悊鍏沖仠鉶氭嫙鈥滄寲鐭庫濋」鐩銆
鍐呰挋鍙よ嚜娌誨尯緇т粖騫3鏈10鏃ユ槑紜鈥滃叏闈㈡竻鐞嗗叧鍋滆櫄鎷熻揣甯佹寲鐭塊」鐩錛2021騫4鏈堝簳鍓嶅叏閮ㄩ鍑衡濅箣鍚庯紝5鏈18鏃ヨ嚜娌誨尯鑳借楀弻鎺у簲鎬ユ寚鎸ラ儴鍔炲叕瀹ゅ彂甯冦婂叧浜庤劇珛鉶氭嫙璐у竵鈥滄寲鐭庫濅紒涓氫婦鎶ュ鉤鍙扮殑鍏鍛娿嬶紝鍏ㄩ潰鍙楃悊鍏充簬鉶氭嫙璐у竵鈥滄寲鐭庫濅紒涓氶棶棰樹俊璁誇婦鎶ャ5鏈25鏃ワ紝鑷娌誨尯鍙戞敼濮斿張璧瘋崏浜嗐婂唴钂欏彜鑷娌誨尯鍙戝睍鍜屾敼闈╁斿憳浼氬叧浜庡潥鍐蟲墦鍑繪儵鎴掕櫄鎷熻揣甯佲滄寲鐭庫濊屼負鍏欏規帾鏂(寰佹眰鎰忚佺)銆嬶紝鍖呮嫭瀵瑰瓨鍦ㄨ櫄鎷熻揣甯佲滄寲鐭庫濊屼負鐨勭浉鍏充紒涓氬強鏈夊叧浜哄憳錛屾寜鏈夊叧瑙勫畾綰沖叆澶變俊榛戝悕鍗曠瓑銆
姝ゅ栵紝閽堝硅繎鏈熻櫄鎷熻揣甯佷氦鏄撶倰浣滄椿鍔ㄦ湁鎵鍙嶅脊鐨勭幇璞★紝涓鍥戒簰鑱旂綉閲戣瀺鍗忎細絳夌浉鍏沖崗浼氳仈鍚堝彂甯冨叕鍛婏紝寮灞曟硶瀹氳揣甯佷笌鉶氭嫙璐у竵鍏戞崲鍙婅櫄鎷熻揣甯佷箣闂寸殑鍏戞崲涓氬姟錛岃繚鍙嶆湁鍏蟲硶寰嬫硶瑙勫苟娑夊珜鐘緗銆5鏈21鏃ワ紝鍥藉姟闄㈤噾鋙嶅斿彫寮鐨勭浜斿嶮涓嬈′細璁鏄庣『鎻愬嚭錛屾墦鍑繪瘮鐗瑰竵鈥滄寲鐭庫濆拰浜ゆ槗琛屼負銆
涓鍥界ぞ浼氱戝﹂櫌娉曞︾爺絀舵墍鍓鐮旂┒鍛樿檔紓婂緩璁錛屼竴鏂歸潰錛屽湴鏂規斂搴滃彲閫氳繃鎺у埗鐢ㄧ數銆佹彁楂樼◣鏀躲侀檺鍒剁敤鍦扮瓑鎵嬫墊帹鍔ㄥ瓨閲忊滄寲鐭庫濅紒涓氬敖蹇閫鍑猴紱鍙︿竴鏂歸潰錛屽姞澶у硅櫄鎷熻揣甯侀潪娉曚氦鏄撴椿鍔ㄧ殑鎵撳嚮鍔涘害錛屾彁楂橀潪娉曞弬涓庤櫄鎷熻揣甯佷氦鏄撱佺倰浣滄垨涓轟箣鎻愪緵鏀鎸佹湇鍔$殑鏈烘瀯銆佸鉤鍙扮殑榪濇硶鎴愭湰錛屽炲姞鐩戠$殑濞佹厬鍔涖傚悓鏃訛紝搴旇繘涓姝ョ戶緇鎺ㄥ姩鉶氭嫙璐у竵鐐掍綔鐨勯庨櫓鎻愮ず涓庨庨櫓闃茶寖瀹d紶宸ヤ綔銆
鈥滃洓闂姣旂壒甯佲濅箣涓錛氱洃綆′負浣曟帴韙佃岃嚦 鐐掑竵椋庨櫓鏈夊氬ぇ錛
⑺ 區塊鏈技術
背景:比特幣誕生之後,發現該技術很先進,才發現了區塊鏈技術。比特幣和區塊鏈技術同時被發現。
1.1 比特幣誕生的目的:
①貨幣交易就有記錄,即賬本;
②中心化機構記賬弊端——可篡改;易超發
比特幣解決第一個問題:防篡改——hash函數
1.2 hash函數(加密方式)
①作用:將任意長度的字元串,轉換成固定長度(sha256)的輸出。輸出也被稱為hash值。
②特點:很難找到兩個不同的x和y,使得h(x)=h(y)。
③應用:md5文件加密
1.3 區塊鏈
①定義
區塊:將總賬本拆分成區塊存儲
區塊鏈:在每個區塊上,增加區塊頭。其中記錄父區塊的hash值。通過每個區塊存儲父區塊的hash值,將所有的區塊按照順序連接起來,形成區塊鏈。
②區塊鏈如何防止交易記錄被篡改
形成區塊鏈後,篡改任一交易,會導致該交易區塊hash值和其子區塊中不同,發現篡改。
即使繼續篡改子區塊頭中hash值,會導致子區塊hash值和孫區塊中不同,發現篡改。
1.4 區塊鏈本質
①比特幣和區塊鏈本質:一個人人可見的大賬本,只記錄交易。
②核心技術:通過密碼學hash函數+數據結構,保證賬本記錄不可篡改。
③核心功能:創造信任。法幣依靠政府公信力,比特幣依靠技術。
1.5如何交易
①進行交易,需要有賬號和密碼,對應公鑰和私鑰
私鑰:一串256位的二進制數字,獲取不需要申請,甚至不需要電腦,自己拋硬幣256次就生成了私鑰
地址由私鑰轉化而成。地址不能反推私鑰。
地址即身份,代表了在比特幣世界的ID。
一個地址產生之後,只有進入區塊鏈賬本,才能被大家知道。
②數字簽名技術
簽名函數sign(張三的私鑰,轉賬信息:張三轉10元給李四) = 本次轉賬簽名
驗證韓式verify(張三的地址,轉賬信息:張三轉10元給李四,本次轉賬簽名) = True
張三通過簽名函數sign(),使用自己的私鑰對本次交易進行簽名。
任何人可以通過驗證韓式vertify(),來驗證此次簽名是否有由持有張三私鑰的張三本人發出。是返回true,反之為false。
sign()和verify()由密碼學保證不被破解。·
③完成交易
張三將轉賬信息和簽名在全網供內部。在賬戶有餘額的前提下,驗證簽名是true後,即會記錄到區塊鏈賬本中。一旦記錄,張三的賬戶減少10元,李四增加10元。
支持一對一,一對多,多對已,多對多的交易方式。
比特幣世界中,私鑰就是一切!!!
1.6中心化記賬
①中心化記賬優點:
a.不管哪個中心記賬,都不用太擔心
b.中心化記賬,效率高
②中心化記賬缺點:
a 拒絕服務攻擊
b 厭倦後停止服務
c 中心機構易被攻擊。比如破壞伺服器、網路,監守自盜、法律終止、政府幹預等
歷史 上所有有中心化機構的機密貨幣嘗試都失敗了。
比特幣解決第二個問題:如何去中心化
1.7 去中心化記賬
①去中心化:人人都可以記賬。每個人都可以保留完整的賬本。
任何人都可以下載開源程序,參與P2P網路,監聽全世界發送的交易,成為記賬節點,參與記賬。
②去中心化記賬流程
某人發起一筆交易後,向全網廣播。
每個記賬節點,持續監聽、持續全網交易。收到一筆新交易,驗證准確性後,將其放入交易池並繼續向其它節點傳播。
因為網路傳播,同一時間不同記賬節點的交一次不一定相同。
每隔10分鍾,從所有記賬節點當中,按照某種方式抽取1名,將其交易池作為下一個區塊,並向全網廣播。
其它節點根據最新的區塊中的交易,刪除自己交易池中已經被記錄的交易,繼續記賬,等待下一次被選中。
③去中心化記賬特點
每隔10分鍾產生一個區塊,但不是所有在這10分鍾之內的交易都能記錄。
獲得記賬權的記賬節點,將得到50個比特幣的獎勵。每21萬個區塊(約4年)後,獎勵減半。總量約2100萬枚,預計2040年開采完。
記錄一個區塊的獎勵,也是比特幣唯一的發行方式。
④如何分配記賬權:POW(proof of work) 方式
記賬幾點通過計算一下數學題,來爭奪記賬權。
找到某隨即數,使得一下不等式成立:
除了從0開始遍歷隨機數碰運氣之外,沒有其它解法,解題的過程,又叫做挖礦。
誰先解對,誰就得到記賬權。
某記賬節點率先找到解,即向全網公布。其他節點驗證無誤之後,在新區塊之後重新開始新一輪的計算。這個方式被稱為POW。
⑤難度調整
每個區塊產生的時間並不是正好10分鍾
隨著比特幣發展,全網算力不算提升。
為了應對算力的變化,每隔2016個區塊(大約2周),會加大或者減少難度,使得每個區塊產生的平均時間是10分鍾。
#歐易OKEx# #比特幣[超話]# #數字貨幣#
⑻ 什麼是哈希
散列是指從可變大小的輸入生成固定大小的輸出的過程。這是通過使用稱為散列函數(作為散列演算法實現)的數學公式來完成的。
盡管並非所有哈希函數都涉及密碼學的使用 ,但所謂的密碼哈希函數是加密貨幣的核心。多虧了它們,區塊鏈和其他分布式系統能夠實現顯著水平的 數據完整性和安全性。
傳統和加密散列函數都是確定性的。確定性意味著只要輸入不變,散列演算法將始終產生相同的輸出(也稱為摘要或散列)。
通常,加密貨幣的散列演算法被設計為單向函數,這意味著如果沒有大量的計算時間和資源,它們就無法輕易恢復。換句話說,從輸入創建輸出非常容易,但在相反的方向(僅從輸出生成輸入)相對困難。一般來說,越難找到輸入,哈希演算法被認為越安全。
不同的散列函數將產生不同大小的輸出,但每種散列演算法可能的輸出大小始終是恆定的。例如,SHA-256 演算法只能生成 256 位的輸出,而 SHA-1 將始終生成 160 位的摘要。
為了說明這一點,讓我們通過 SHA-256 哈希演算法(比特幣中使用的演算法)運行「Bitcoin」和「bitcoin」這兩個詞。
請注意,微小的更改(第一個字母的大小寫)會導致完全不同的哈希值。但由於我們使用 SHA-256,輸出將始終具有 256 位(或 64 個字元)的固定大小 - 無論輸入大小如何。此外,無論我們通過演算法運行這兩個單詞多少次,兩個輸出都將保持不變。
相反,如果我們通過 SHA-1 哈希演算法運行相同的輸入,我們將得到以下結果:
值得注意的是,首字母縮略詞 SHA 代表安全哈希演算法。它指的是一組加密哈希函數,包括 SHA-0 和 SHA-1 演算法以及 SHA-2 和 SHA-3 組。SHA-256 是 SHA-2 組的一部分,還有 SHA-512 和其他變體。目前,只有 SHA-2 和 SHA-3 組被認為是安全的。
傳統的哈希函數具有廣泛的用例,包括資料庫查找、大文件分析和數據管理。另一方面,加密散列函數廣泛用於信息安全應用,例如消息認證和數字指紋。就比特幣而言,加密哈希函數是挖礦過程的重要組成部分, 也在新地址和密鑰的生成中發揮作用。
散列的真正威力在於處理大量信息時。例如,可以通過哈希函數運行一個大文件或數據集,然後使用其輸出來快速驗證數據的准確性和完整性。由於散列函數的確定性,這是可能的:輸入將始終產生簡化的、壓縮的輸出(散列)。這種技術消除了存儲和「記住」大量數據的需要。
散列在區塊鏈技術的背景下特別有用。比特幣區塊鏈有幾個涉及散列的操作,其中大部分在挖掘過程中。事實上,幾乎所有的加密貨幣協議都依賴散列來將交易組鏈接和壓縮成塊,並在每個塊之間產生加密鏈接,從而有效地創建區塊鏈。
同樣,部署密碼技術的散列函數可以定義為密碼散列函數。一般來說,破解密碼哈希函數需要無數次的蠻力嘗試。對於「還原」加密哈希函數的人來說,他們需要通過反復試驗來猜測輸入是什麼,直到產生相應的輸出。然而,也有可能不同的輸入產生完全相同的輸出,在這種情況下會發生「沖突」。
從技術上講,加密哈希函數需要遵循三個屬性才能被視為有效安全。我們可以將這些描述為抗碰撞性、抗原像性和抗二次原像性。
在討論每個屬性之前,讓我們用三個簡短的句子總結它們的邏輯。
如前所述,當不同的輸入產生完全相同的散列時,就會發生沖突。因此,哈希函數被認為是抗沖突的,直到有人發現沖突為止。請注意,任何散列函數都將始終存在沖突,因為可能的輸入是無限的,而可能的輸出是有限的。
換句話說,當發現碰撞的可能性非常低以至於需要數百萬年的計算時,哈希函數是抗碰撞的。因此,盡管沒有無沖突的哈希函數,但其 中一些函數足夠強大,可以被視為具有抵抗力(例如,SHA-256)。
在各種 SHA 演算法中,SHA-0 和 SHA-1 組不再安全,因為已經發現沖突。目前,SHA-2 和 SHA-3組被認為是抗沖突的。
原像電阻的特性與單向函數的概念有關。當有人找到生成特定輸出的輸入的可能性非常低時,哈希函數被認為是抗原像的。
請注意,此屬性與前一個屬性不同,因為攻擊者會試圖通過查看給定的輸出來猜測輸入是什麼。另一方面,當有人發現產生相同輸出的兩個不同輸入時,就會發生沖突,但使用哪個輸入並不重要。
原像抗性的特性對於保護數據很有價值,因為消息的簡單散列可以證明其真實性,而無需披露信息。在實踐中,許多服務提供商和 Web 應用程序存儲和使用從密碼生成的哈希值,而不是明文密碼。
為簡化起見,我們可以說第二原像電阻介於其他兩個屬性之間。當有人能夠找到一個特定的輸入,該輸入生成與他們已經知道的另一個輸入相同的輸出時,就會發生二次原像攻擊。
換句話說,第二原像攻擊涉及尋找碰撞,但不是搜索生成相同散列的兩個隨機輸入,而是搜索生成由另一個特定輸入生成的相同散列的輸入。
因此,任何抗碰撞的哈希函數也能抗第二原像攻擊,因為後者總是意味著碰撞。然而,人們仍然可以對抗碰撞函數執行原像攻擊,因為它意味著從單個輸出中找到單個輸入。
比特幣挖礦有很多步驟 涉及哈希函數,例如檢查余額、鏈接交易輸入和輸出,以及對區塊內的交易進行哈希處理以形成 默克爾樹。但比特幣區塊鏈安全的主要原因之一 是礦工需要執行無數的散列操作,以便最終為下一個區塊找到有效的解決方案。
具體來說,礦工在為其候選塊創建哈希值時必須嘗試幾種不同的輸入。本質上,如果他們生成以一定數量的零開頭的輸出哈希,他們將只能驗證他們的塊。零的數量決定了挖礦難度,它根據網路的哈希率而變化。
在這種情況下,哈希率表示在比特幣挖礦中投入了多少計算機能力。如果網路的哈希率增加,比特幣協議會自動調整挖礦難度,使挖出一個區塊所需的平均時間保持在接近 10 分鍾。相反,如果幾個礦工決定停止挖礦,導致算力大幅下降,則會調整挖礦難度,使其更容易挖礦(直到平均出塊時間回到10分鍾)。
請注意,礦工不必發現沖突,因為他們可以生成多個散列作為有效輸出(從一定數量的零開始)。所以對於某個區塊有幾種可能的解決方案,礦工只需要找到其中一種——根據挖礦難度確定的閾值。
由於比特幣挖礦是一項成本密集型任務,礦工沒有理由欺騙系統,因為這會導致重大的經濟損失。加入區塊鏈的礦工越多,它就變得越大越強大。(國內禁止參與挖礦)
毫無疑問,哈希函數是計算機科學中必不可少的工具,尤其是在處理大量數據時。當與密碼學結合時,散列演算法可以非常通用,以多種不同的方式提供安全性和身份驗證。因此,加密哈希函數對幾乎所有加密貨幣網路都至關重要,因此了解它們的屬性和工作機制對於任何對區塊鏈技術感興趣的人肯定會有所幫助。