主页 > imtoken钱包苹果 > ProgPoW算法曝光漏洞,以太坊ASIC挖矿势不可挡?

ProgPoW算法曝光漏洞,以太坊ASIC挖矿势不可挡?

imtoken钱包苹果 2023-11-13 05:08:16

sitebtc798.com 以太坊手机挖矿app_以太坊 挖矿 划算_以太坊可以用手机挖矿吗

针对近期备受争议的ProgPoW算法,独立开发商kikx今日披露了该算法存在的漏洞,使其无法真正达到抗ASIC的目的。 Kikx 还补充说,这个漏洞是新发现的,不会对以太坊目前使用的 Ethash 算法构成威胁。

对此,以太坊开发者 Philippe Castonguay 评论道:

“看起来 ProgPoW 的当前实施,可能不是 ASIC 抗性,基本上 ProgPoW 哈希函数使用 64 位种子,ASIC 可以‘轻松’强制执行,而不是按预期进行挖掘。这需要更多地关注正式确认。”

此后,以太坊硬分叉协调员James Hancock确认了该漏洞的存在,并表示感谢。

sitebtc798.com 以太坊手机挖矿app_以太坊可以用手机挖矿吗_以太坊 挖矿 划算

那么这个漏洞到底是怎么回事呢?

我们来看看kikx披露的细节:

ProgPoW 的设计缺陷

以太坊可以用手机挖矿吗_以太坊 挖矿 划算_sitebtc798.com 以太坊手机挖矿app

ProgPow 有一个设计缺陷:

64 位种子太小以太坊可以用手机挖矿吗,允许 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);

sitebtc798.com 以太坊手机挖矿app_以太坊可以用手机挖矿吗_以太坊 挖矿 划算

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 个步骤:

以太坊可以用手机挖矿吗_以太坊 挖矿 划算_sitebtc798.com 以太坊手机挖矿app

固定seed为任意64位值,然后计算mix_hash = hash_mix(block_number, seed); 搜索 extra_nonce,使 header_hash 满足难度条件; 搜索 nonce 以便 keccak_progpow_64(header_hash, nonce) == seed;

第一步,为固定的seed和block_number计算mix_hash。 由于 mix_hash 被设计为 seed 和 block_number 的函数,我们得到一个有效的三元组(seed、mix_hash、block_number)。 现在,我们的目标是找到满足以下两个条件的 header_hash 和 nonce:

(A) keccak_progpow_64(header_hash, nonce) == 种子; (B) keccak_progpow_256(header_hash, seed, mix_hash);

请记住,我们可以通过修改额外的随机数(在以太坊中使用 ExtraData)来生成任意数量的标头哈希。 因此,条件 (B) 在步骤 2 中很容易完成。现在,我们有一个固定的 (header_hash, seed, mix_hash, block_number),但是 nonce 是免费的。 最后,第 3 步扫描随机数以查找条件 (A)。 由于种子只有 64 位长,条件 (A) 仅提供 64 位安全性,步骤 3 可以由 ASIC 执行。

计算成本

有四个函数,keccak_1600、keccak_progpow_64、hash_mix和keccak_progpow_256。 成本的计算可以通过计算所需功能的调用来实现,这取决于网络的难度D。

以太坊可以用手机挖矿吗_sitebtc798.com 以太坊手机挖矿app_以太坊 挖矿 划算

在正常的哈希计算中,需要调用 keccak_1600 从 block_header 计算出 header_hash,并依次为每个 nonce 值调用其他函数。

以太坊 挖矿 划算_sitebtc798.com 以太坊手机挖矿app_以太坊可以用手机挖矿吗

在ASIC哈希计算中,第一步需要调用hash_mix,第二步调用keccak_1600和keccak_progpow_256,第三步调用keccak_progpow_64。

由于hash_mix在我们的ASIC计算中只调用了一次,所以我们可以使用host CPU来计算hash_mix。 其他函数是keccak哈希函数,不需要内存存储,可以很容易地在ASIC上计算。

我们需要将 keccak_progpow_64row 中的 D 与 2^64 进行比较。 简而言之,更大的 D 将使 ASIC 更有利可图。 估计threshold阈值很难,但是我觉得目前的难度(>2^50)已经足够大了。

演示

演示在此存储库中。

$ git clone https://github.com/kik/progpow-exploit.git
$ cd progpow-exploit
$ mkdir build

以太坊 挖矿 划算_sitebtc798.com 以太坊手机挖矿app_以太坊可以用手机挖矿吗

$ cd build $ cmake .. $ make $ ./test/ethash-test --gtest_filter=asic.search

在此演示中,种子被截断为 24 位宽以便在 CPU 上运行。 见代码。

测试代码很简单。

search_asic 在这里定义

由于这个漏洞的存在以太坊可以用手机挖矿吗,以太坊矿工是不是可以松一口气了?