『壹』 關於「雙花」你需要知道的
如果小明使用的不是現金,而是數字貨幣呢?
「雙花」問題
「雙花」,即 一筆錢被花了兩次或者兩次以上 ,也叫「雙重支付」。
在數字貨幣系統中,由於數據的可復制性,使得系統可能存在同一筆數字資產因不當操作被重復使用的情況。
1. 51%攻擊
51%攻擊,又被稱為Majority attack。這種攻擊是通過控制網路算力實現雙花。如果攻擊者控制了網路中50%以上的算力,那麼在他控制算力的這段時間,他可以將區塊逆轉,進行反向交易,實現雙花。
比如Bitcoin Gold發生的雙花問題就屬於51%攻擊。 攻擊者控制Bitcoin Gold網路上51%以上的算力,在控制算力的期間,他把一定數量的BTG發給自己在交易所的錢包,這條分支我們命名為分支A。同時,他又把這些BTG發給另一個自己控制的錢包,這條分支我們命名為分支B。
分支A上的交易被確認後,攻擊者立馬賣掉BTG,拿到現金。這時候,分支A成為主鏈。然後,攻擊者在分支B上進行挖礦,由於其控制了51%以上的算力,那麼攻擊者獲得記賬權的概率很大,於是很快,分支B的長度就超過了主鏈,也就是分支A的長度,那麼分支B就會成為主鏈,分支A上的交易就會被回滾(回滾指的是程序或數據處理錯誤,將程序或數據恢復到上一次正確狀態的行為)。
也就是說,分支A恢復到攻擊者發起第一筆交易之前的狀態,攻擊者之前換成現金的那些BTG又回到了自己手裡。當然,這些BTG就是交易所的損失了。最後,攻擊者把這些BTG,發到自己的另一個錢包。就這樣,攻擊者憑借51%以上的算力控制,實現同一筆token的「雙花」。
2. 芬尼攻擊(Finney attack)
「Finney」的名稱來源於Hal Finney,Hal Finney是第一個描述雙花攻擊之0確認(未確認)交易的人。芬尼攻擊主要通過控制區塊的廣播時間來實現雙花,攻擊對象針對的是接受0確認的商家。
假設攻擊者挖到了區塊,在區塊中,包含了一筆交易信息,即地址1向地址2轉了一定數量的token,不過這兩個地址都是攻擊者的。但是攻擊者並不廣播這個區塊,而是立即找到一個商家,用他的地址1,把這些token發給商家的地址3。
發給商家的交易廣播出去後,如果這個商家接受0確認,攻擊者就把他自己之前挖到的區塊廣播出去,這時候發給自己的交易就先於發給商家的交易。對於攻擊者來說,通過控制區塊的廣播時間,就實現了同一筆token的「雙花」。
一般來說,為了節省時間而接受0確認,特別是對於大額交易而言,是非常不安全的,而且對於大額交易而言,多幾次確認,將會降低交易被回滾的風險。
3.種族攻擊 (Race attack)
這種方式主要通過控制礦工費來實現雙花。
比如,攻擊者把一定數量的token發給一個商家,我們命名為分支A。如果商家接受0確認,那麼攻擊者就會再把這筆token發給自己的一個錢包,我們命名為分支B。
不過,攻擊者在發給自己的這筆交易中,加了較高的礦工費,從而大大提高被礦工打包的概率(也可以說間接提高了攻擊成功的概率)。如果攻擊者發給自己的這筆交易被提前打包,這時候這筆交易就先於發給商家的交易,也就是分支B的長度超過分支A的長度,分支A上的交易就會被回滾。對於攻擊者來說,通過控制礦工費,就實現了同一筆token的「雙花」。
4. Vector76攻擊
Vector76攻擊,是種族攻擊和芬尼攻擊的組合,又稱「一次確認攻擊」,也就是交易即便有了一次確認,交易仍然可以回滾。
如果電子錢包滿足以下幾點,Vector76攻擊就容易發生。這幾點即錢包接受一次確認就支付;錢包接受其它節點的直接連接;錢包使用靜態IP地址的節點。
具體攻擊方式如下( 感興趣的可以點此查看 ):
攻擊者控制了兩個全節點,全節點A只是直接連接到電子錢包這個節點,全節點B與一個或多個運行良好的節點相連。
然後攻擊者將同一筆token進行了兩筆交易,一個是發給攻擊者自己在這個錢包(接下來要被攻擊的)上的地址,我們命名為交易1,另一個是發給攻擊者自己的錢包地址,命名為交易2。但是攻擊者給交易1的礦工費,要遠大於交易2的礦工費。攻擊者並沒有把這兩筆交易廣播到網路中去。
然後攻擊者開始在交易1所在的分支上進行挖礦,這條分支我們命名為分支1。攻擊者挖到區塊後,並沒有廣播出去,而是同時做了兩件事:在節點A上發送交易1,在節點B上發送交易2。
由於節點A只連接到電子錢包的節點,所以當電子錢包節點想把交易1傳給其它對等節點時,連接了更多節點的節點B,已經把交易2廣播給了網路中的大部分節點。於是,從概率上來講,交易2就更有可能被網路認定為是有效的,交易1被認定為無效。
交易2被認為有效後,攻擊者立即把自己之前在分支1上挖到的區塊,廣播到網路中。這時候,這個接受一次確認就支付的錢包,會立馬將token支付給攻擊者的錢包賬戶。然後攻擊者立馬賣掉token,拿到現金。
由於分支2連接的更多節點,所以礦工在這個分支上挖出了另一個區塊,也就是分支2的鏈長大於分支1的鏈長。於是,分支1上的交易就會回滾,錢包之前支付給攻擊者的交易信息就會被清除,但是攻擊者早已經取款,實現了雙花。
5. 替代歷史攻擊(Alternative history attack)
如果商家在等待交易確認,alternative history attack就有機會發生,當然,這需要攻擊者有較高的算力,對於攻擊者來說,會有浪費大量電力的風險。
攻擊者把一定數量的token發給一個商家,我們命名為分支A。同時攻擊者又把這筆token發給自己的一個錢包,我們命名為分支B。在商家等待確認的時候,攻擊者在分支B上進行挖礦。
商家在等待了N次確認後,向攻擊者發送了商品。但是如果攻擊者憑借高哈希率,挖到了N個以上的區塊,那麼,分支B的長度就超過分支A,分支A的交易就會被回滾,攻擊者實現雙花。如果攻擊者挖到的區塊數量沒有超過N個,那麼攻擊失敗。
Alternative history attack能夠攻擊成功的可能性在於兩方面,一個是攻擊者的算力在網路中的比例大小,另一個是商家等待的確認次數。 比如,攻擊者控制了網路中10%的算力,如果商家等待了2個確認,那麼攻擊成功的概率低於10%;如果商家等待了4個確認,那麼攻擊成功的概率低於1%;如果商家等待了6個確認,那麼攻擊成功的概率低於0.1%。 由於該攻擊存在的機會成本,所以如果代幣交易金額與塊獎勵金額差不多,才有可能實現博弈。
目前,幾個區塊鏈項目的官方給出的解決方式,主要有如下幾種:
1. 提高確認次數。比如LCC建議將確認次數提高為 100 個。
2. 在共識機制方面改善。比如 LCC表示可能會引入PoS機制。
3. 升級新的演算法。比如Bitcoin Gold表示,正在開發新的 PoW 演算法以替代原有的 Equihash 演算法。
4. 與交易所等合作。比如Bitcoin Gold立即與合作交易所合作,阻斷黑客的套現渠道。
鏈接:https://www.jianshu.com/p/56617e91b12a
鏈接:https://www.jianshu.com/p/0eb023e1d5dd
『貳』 小白如何秒懂區塊鏈中的哈希計算
小白如何秒懂區塊鏈中的哈希計算
當我在區塊鏈的學習過程中,發現有一個詞像幽靈一樣反復出現,「哈希」,英文寫作「HASH」。
那位說「拉稀」同學你給我出去!!
這個「哈希」據說是來源於密碼學的一個函數,嘗試搜一搜,論文出來一堆一堆的,不是橫式就是豎式,不是表格就是圖片,還有一堆看不懂得xyzabc。大哥,我就是想了解一下區塊鏈的基礎知識,給我弄那麼難幹啥呀?!我最長的密碼就是123456,復雜一點的就是654321,最復雜的時候在最後加個a,你給我寫的那麼復雜明顯感覺腦力被榨乾,僅有的腦細胞成批成批的死亡!為了讓和我一樣的小白同學了解這點,我就勉為其難,努力用傻瓜式的語言講解一下哈希計算,不求最准確但求最簡單最易懂。下面我們開始:
# 一、什麼是哈希演算法
## 1、定義:哈希演算法是將任意長度的字元串變換為固定長度的字元串。
從這里可以看出,可以理解為給**「哈希運算」輸入一串數字,它會輸出一串數字**。
如果我們自己定義 「增一演算法」,那麼輸入1,就輸出2;輸入100就輸出101。
如果我我們自己定義「變大寫演算法」,那麼輸入「abc」輸出「ABC」。
呵呵,先別打我啊!這確實就只是一個函數的概念。
## 2、特點:
這個哈希演算法和我的「增一演算法」和「變大寫演算法」相比有什麼特點呢?
1)**確定性,算得快**:咋算結果都一樣,算起來效率高。
2)**不可逆**:就是知道輸出推不出輸入的值。
3)**結果不可測**:就是輸入變一點,結果天翻地覆毫無規律。
總之,這個哈希運算就是個黑箱,是加密的好幫手!你說「11111」,它給你加密成「」,你說「11112」它給你弄成「」。反正輸入和輸出一個天上一個地下,即使輸入相關但兩個輸出毫不相關。
# 二、哈希運算在區塊鏈中的使用
## 1、數據加密
**交易數據是通過哈希運算進行加密,並把相應的哈希值寫入區塊頭**。如下圖所示,一個區塊頭包含了上一個區塊的hash值,還包含下一個區塊的hash值。
1)、**識別區塊數據是否被篡改**:區塊鏈的哈希值能夠唯一而精準地標識一個區塊,區塊鏈中任意節點通過簡單的哈希計算都可以獲得這個區塊的哈希值,計算出的哈希值沒有變化也就意味著區塊鏈中的信息沒有被篡改。
2)、**把各個區塊串聯成區塊鏈**:每個區塊都包含上一個區塊的哈希值和下一個區塊的值,就相當於通過上一個區塊的哈希值掛鉤到上一個區塊尾,通過下一個區塊的哈希值掛鉤到下一個區塊鏈的頭,就自然而然形成一個鏈式結構的區塊鏈。
## 2、加密交易地址及哈希
在上圖的區塊頭中,有一個Merkle root(默克爾根)的哈希值,它是用來做什麼的呢?
首先了解啥叫Merkle root? 它就是個二叉樹結構的根。啥叫二叉樹?啥叫根?看看下面的圖就知道了。一分二,二分四,四分八可以一直分下去就叫二叉樹。根就是最上面的節點就叫 根。
這個根的數據是怎麼來的呢?是把一個區塊中的每筆交易的哈希值得出後,再兩兩哈希值再哈希,再哈希,再哈希,直到最頂層的數值。
這么哈希了半天,搞什麼事情?有啥作用呢?
1)、**快速定位每筆交易**:由於交易在存儲上是線性存儲,定位到某筆交易會需要遍歷,效率低時間慢,通過這樣的二叉樹可以快速定位到想要找的交易。
舉個不恰當的例子:怎麼找到0-100之間的一個任意整數?(假設答案是88)那比較好的一個方法就是問:1、比50大還是小?2、比75大還是小?3、比88大還是小? 僅僅通過幾個問題就可以快速定位到答案。
2)、**核實交易數據是否被篡改**:從交易到每個二叉樹的哈希值,有任何一個數字有變化都會導致Merkle root值的變化。同時,如果有錯誤發生的情況,也可以快速定位錯誤的地方。
## 3、挖礦
在我們的區塊頭中有個參數叫**隨機數Nonce,尋找這個隨機數的過程就叫做「挖礦」**!網路上任何一台機器只要找到一個合適的數字填到自己的這個區塊的Nonce位置,使得區塊頭這6個欄位(80個位元組)的數據的哈希值的哈希值以18個以上的0開頭,誰就找到了「挖到了那個金子」!既然我們沒有辦法事先寫好一個滿足18個0的數字然後反推Nounce,唯一的做法就是從0開始一個一個的嘗試,看結果是不是滿足要求,不滿足就再試下一個,直到找到。
找這個數字是弄啥呢?做這個有什麼作用呢?
1)、**公平的找到計算能力最強的計算機**:這個有點像我這里有個沙子,再告訴你它也那一個沙灘的中的一粒相同,你把相同的那粒找出來一樣。那可行的辦法就是把每一粒都拿起來都比較一下!那麼比較速度最快的那個人是最有可能先早到那個沙子。這就是所謂的「工作量證明pow」,你先找到這個沙子,我就認為你比較的次數最多,乾的工作最多。
2)、**動態調整難度**:比特幣為了保證10分鍾出一個區塊,就會每2016個塊(2周)的時間計算一下找到這個nonce數字的難度,如果這2016個塊平均時間低於10分鍾則調高難度,如高於十分鍾則調低難度。這樣,不管全網的挖礦算力是怎麼變化,都可以保證10分鍾的算出這個隨機數nonce。
# 三、哈希運算有哪些?
說了這么多哈希運算,好像哈希運算就是一種似的,其實不是!作為密碼學中的哈希運算在不斷的發展中衍生出很多流派。我看了」滿頭包」還是覺得內在機理也太復雜了,暫時羅列如下,小白們有印象知道是怎麼回事就好。
從下表中也可以看得出,哈希運算也在不斷的發展中,有著各種各樣的演算法,各種不同的應用也在靈活應用著單個或者多個演算法。比特幣系統中,哈希運算基本都是使用的SHA256演算法,而萊特幣是使用SCRYPT演算法,誇克幣(Quark)達世幣(DASH)是把很多演算法一層層串聯上使用,Heavycoin(HAV)卻又是把一下演算法並聯起來,各取部分混起來使用。以太坊的POW階段使用ETHASH演算法,ZCASH使用EQUIHASH。
需要說明的是,哈希運算的各種演算法都是在不斷升級完善中,而各種幣種使用的演算法也並非一成不變,也在不斷地優化中。
**總結**:哈希運算在區塊鏈的各個項目中都有著廣泛的應用,我們以比特幣為例就能看到在**數據加密、交易數據定位、挖礦等等各個方面都有著極其重要的作用**。而哈希運算作為加密學的一門方向不斷的發展和延伸,身為普通小白的我們,想理解區塊鏈的一些基礎概念,了解到這個層面也已經足夠。
『叄』 最近數字貨幣RCO挺火的,怎麼用普通電腦挖礦RCO
RCO更優Equihash挖礦演算法機制,與比特幣相比,RCO能夠抗ASIC礦機,有力防止算力劇烈的起伏以及其他礦機來挖礦從而實現人人都可用普通電腦輕松參與挖礦,然後提幣至幣易交易所完美變現
『肆』 Z15e 200k礦機功率
z15e礦機功率為1510W。
加密演算法/幣種EquiHash/Zcash。額定算力(KSol/s)200。牆上功耗(Watt)1510±5%。能效比(25°C環境溫度,J/KSol)7.5±5%。
硬體配置:網路連接方式RJ45乙太網10/100M。裸機尺寸(長*寬*高),mm245*132.5*290。外箱尺寸(長*寬*高),mm331*234*391。裸機重量(kg5.9)。整機重量(含包裝,kg)6.6。
『伍』 比特幣礦機是如何通過計算挖幣的
中本聰打造比特幣的時候,希望比特幣是一個去中心化的貨幣,不僅使用、交易如此,挖礦也應該如此。但是事與願違,隨著比特幣等加密貨幣的價值越來越高,挖礦成為了一個產業,競爭越來越激烈,對挖礦算力的追求越來越高,所以從普通電腦挖礦,進化出了ASIC礦機與GPU礦機。
用ASIC礦機挖礦的幣,演算法幾乎都為SHA256,而用GPU挖礦的演算法則不同,例如BTG的演算法是Equihash,BCD的演算法是optimized X13。雖然不是絕對,但可以簡單的認為,SHA256演算法的幣,一般都是用ASIC礦機挖。其他演算法的幣則基本都使用GPU礦機。也有例外,scrypt演算法的萊特幣以前用GPU礦機挖,但後來scrypt演算法也被ASIC晶元攻克,比如螞蟻礦機L3+,就是用來挖萊特幣的ASIC礦機。
ASIC礦機,是指採用ASIC晶元作為算力核心的礦機。其中ASIC是Application Specific Integrated Circuit的縮寫,是一種專門為某種特定用途設計的電子電路(晶元)。有礦機廠專門為計算比特幣的SHA256演算法而設計了ASIC晶元,使用它們的礦機就是ASIC礦機。由於ASIC晶元只為特定計算打造,所以效率可以比CPU這種通用計算晶元要高很多。舉個例子,當前主流的螞蟻礦機S9就是ASIC礦機,使用了189片ASIC晶元,算力達到了13.5TH/s,功耗僅為1350W。作為對比,當前電腦顯卡旗艦GTX1080Ti挖比特幣的算力,就算優化的好基本也不會超過60MH/s。相差了數萬倍,非常懸殊。
而GPU礦機,是指使用GPU顯卡作為算力核心的礦機。諸如以太坊、比特幣鑽石等加密貨幣用的是圖形演算法,所以用顯卡計算的速度會最高。相對於ASIC礦機,GPU礦機更被大眾熟知,因為說白了它就是一台加強了顯卡配置的電腦。
GPU礦機的目的是賺錢,所以要追求功耗比與最大收益,所以選擇要注重性價比,一般中高端定位的顯卡,比如AMD RX560、RX570的功耗比高,是GPU礦機的好選擇。而GTX1080Ti、AMD Vega64這樣旗艦雖然單卡性能最強,但售價與功耗算下來並不劃算。
另外,ASIC礦機也有一些比較奇葩的產品,比如燒貓的USB礦機,是個比U盤略微大一些的東東,功耗也只有2.25W,是目前最小的比特幣礦機。
以上引用挖幣網—「礦機分類介紹」,專業名詞較多,希望對您有幫助,謝謝!
『陸』 z15e參數
版本 Z15e:加密演算法/幣種 EquiHash/Zcash。額定算力(KSol/s) 200。牆上功耗(Watt) 1510±5%。能效比(25°C環境溫度,J/KSol) 7.5±5%。
硬體配置
網路連接方式 RJ45 乙太網 10/100M。裸機尺寸 (長*寬*高),mm 245*132.5*290。外箱尺寸(長*寬*高),mm 331*234*391。裸機重量(kg) 5.9。整機重量(含包裝,kg) 6.6。