<cite id="1ndtl"></cite>
<ruby id="1ndtl"></ruby>
<strike id="1ndtl"></strike>
<span id="1ndtl"><dl id="1ndtl"></dl></span><span id="1ndtl"><dl id="1ndtl"></dl></span>
<strike id="1ndtl"></strike>
<strike id="1ndtl"><dl id="1ndtl"><del id="1ndtl"></del></dl></strike>
<span id="1ndtl"></span>
<span id="1ndtl"><dl id="1ndtl"></dl></span>
<strike id="1ndtl"></strike>
<strike id="1ndtl"></strike><span id="1ndtl"><dl id="1ndtl"></dl></span>
<strike id="1ndtl"></strike><strike id="1ndtl"></strike>
<strike id="1ndtl"></strike>
<span id="1ndtl"></span>
<span id="1ndtl"><dl id="1ndtl"></dl></span>
<th id="1ndtl"><noframes id="1ndtl"><span id="1ndtl"><video id="1ndtl"><strike id="1ndtl"></strike></video></span> <strike id="1ndtl"></strike>
<strike id="1ndtl"></strike>
<span id="1ndtl"><dl id="1ndtl"></dl></span>
  1. 首頁
  2. 以太坊asic礦機(ProgPoW算法被曝漏洞,以太坊ASIC挖礦已不可阻擋?)

以太坊asic礦機(ProgPoW算法被曝漏洞,以太坊ASIC挖礦已不可阻擋?)

免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表火星財經官方立場。

小編:記得關注哦

來源:巴比特

對于近期備受爭議的ProgPoW算法,獨立開發者kikx在今日披露了該算法存在的一個漏洞,這使其無法真正實現抗ASIC的目標,kikx還補充表示,這一漏洞是新發現的,并且不會對以太坊當前使用的Ethash算法造成威脅。

對此,以太坊研發人員Philippe Castonguay評論稱:

“看起來ProgPoW的當前實現,可能并沒有那么抗ASIC,基本上,ProgPoW哈希函數使用了一個64位種子,ASIC可以“輕松”地強制執行,而不是像預期的那樣進行挖礦。這需要更多的關注來正式確認。”

此后,以太坊硬分叉協調員James Hancock對這一漏洞的存在進行了確認,隨后表示了感謝。

那這一漏洞到底是腫么一回事呢?

我們來看看kikx披露的細節吧:

ProgPoW的設計漏洞

ProgPow存在一個設計缺陷:

64位seed太小了,這允許ASIC無需存儲訪問即可計算哈希。

初步實現

感謝chfast提供了可讀的實現!

ProgPoW 哈希函數被定義為:

result hash(const epoch_context& context, int block_number, const hash256& header_hash,uint64_t nonce) noexcept{const uint64_t seed = keccak_progpow_64(header_hash, nonce);const hash256 mix_hash = hash_mix(context, block_number, seed, calculate_dataset_item_2048);const hash256 final_hash = keccak_progpow_256(header_hash, seed, mix_hash);return {final_hash, mix_hash};}

ASIC友好計算

假設給出了一個區塊頭block_header以及一個區塊數block_number

然后,執行以下3個步驟:

seed固定為任何64位值,然后計算mix_hash = hash_mix(block_number, seed)

搜索extra_nonce,以便header_hash滿足難度條件;

搜索nonce,以便keccak_progpow_64(header_hash, nonce) == seed

第一步,為固定seedblock_number計算mix_hash。由于mix_hash被設計為seedblock_number的函數,所以我們得到一個有效的三元組(seed,mix_hash,block_number)。現在,我們的目標是找到滿足以下兩個條件的header_hashnonce

(A) keccak_progpow_64(header_hash, nonce) == seed

(B) keccak_progpow_256(header_hash, seed, mix_hash) ;

記住,我們可以通過修改額外的隨機數(在以太坊中使用ExtraData)來生成任意數量的header哈希。因此,條件(B)很容易在步驟2中完成。現在,我們有一個固定的(header_hash, seed, mix_hash, block_number),但nonce是自由的。 最后,步驟3掃描nonce以查找條件(A)。由于seed只有64位長度,所以條件(A)僅提供64位安全性,并且可以由ASIC執行步驟3。

計算成本

有四個函數,keccak_1600keccak_progpow_64hash_mix以及keccak_progpow_256。成本的計算,可通過計算所需函數的調用來實現,這取決于網絡難度D

在正常的哈希計算中,需要一個keccak_1600調用,才能從block_header計算出header_hash,并針對每個nonce值依次調用其他函數。

而在ASIC哈希計算中,在步驟1中需要一個hash_mix調用,在步驟2中則要調用keccak_1600keccak_progpow_256,在步驟3中將調用keccak_progpow_64

由于hash_mix在我們的ASIC計算中僅被調用一次,因此我們可以使用主機CPU來計算hash_mix。而其它函數都是keccak哈希函數,不需要memory存儲,并且可以在ASIC上輕松計算。

我們需要比較keccak_progpow_64row中的D2^64。簡單地說,更大的D會使ASIC更有利可圖。估計閾值門檻是困難的,但我認為目前的難度 (> 2^50)是足夠大的。

Demo

演示位于此存儲庫中。

$ git clone https://github.com/kik/progpow-exploit.git$ cd progpow-exploit$ mkdir build$ cd build$ cmake ..$ make$ ./test/ethash-test --gtest_filter=asic.search

在此演示中,seed被截斷為24位寬度,以便在CPU上運行。參見代碼。

測試代碼是簡單的。

這里定義了search_asic

由于這一漏洞的存在,以太坊礦機商們是不是可以松一口氣了?

相關文章
美女网站色