主页 > imtoken转账需要验证码 > 什么是哈希现金

什么是哈希现金

imtoken转账需要验证码 2023-01-17 10:27:11

比特币以哈希现金(hashcash)和工作量证明(Proof_of_work)功能作为挖矿核心。 无论是 CPU、GPU、FPGA 还是 ASIC,所有比特币矿工都努力创建 hashcash 工作量证明,以证明区块链开发中的投票权并验证区块链交易日志。

与许多加密算法一样比特币混淆器,hashcash 使用哈希函数作为构建块,就像 HMAC 或 RSA 签名定义在可插入哈希函数上一样(通常用算法哈希的命名约定表示:HMAC-SHA1、HMAC-MD5、HMAC-SHA256、RSA- SHA1等),hashcash可以使用不同的函数进行实例化,hashcash-SHA1(原始),hashcash-SHA256^2(比特币),hashcash-Scrypt(iter=1)。

什么是哈希现金(HashCash)插图

OKX(OKX)——数字货币兑换

注册领取最高¥60,000元数码盲盒,享20%手续费减免

什么是哈希现金(HashCash)插图2

点击注册

什么是哈希现金(HashCash)插图4

历史

比特币现金和比特币区别_比特币混淆器_比特币区块和比特币的区别

Hashcash 的工作量证明功能由 Adam Back 于 1997 年发明,并被提议用于反 DoS 用途,包括防止:匿名重新发送和 mail2news 网关滥用、在 nymserver(受信任的假名重邮服务器)和常规电子邮件上抢占 nym 名称。 反垃圾邮件和一般网络滥用限制。 在比特币之前,SpamAssasin使用的是hashcash,微软(以“email postmark”为名)在hotmail、Exchange、Outlook等中以不兼容的格式,通过i2p匿名网络、mixmaster匿名转发器组件等系统使用hashcash。 Hal Finney 的比特币前身 RPOW 也使用 Hashcash 来开采硬币。 Dai Wei 的 B-Money 提案和 Nick Szabo 在比特币先驱 hashcash 挖矿背景下的类似 Bit Gold 提案。

哈希函数选择

在最初的 1997 算法中,hashcash 使用 SHA1,因为那是当时的事实,而 NIST 当时建议哈希比特币混淆器,而以前的事实哈希 MD5 最近开始显示出弱点。 2008/2009 指定/发布的比特币使用 SHA256。 事实上,没有充分的理由说明 SHA1 也不起作用,hashcash 仅依赖哈希部分原像抗性属性(最安全的是哈希大小,SHA1 是 160 位),而不是生日碰撞强度(最安全的是 80 位),所以 SHA1 哈希值足够大。 无论如何,比特币是为 128 位安全性而构建的,因为使用了 256 位 ECDSA,它也提供 128 位安全性。 SHA256 仍然是正确且更保守的选择,因为即使是 SHA1 也开始显示出一些弱点,尽管只是在生日碰撞中,而不是在第二个原始图像中。

密码分析风险

切换到 hashcash-SHA3 的一个实际问题是它会使所有现有的 ASIC 挖掘硬件变得无用,因此除非您面临安全风险,否则不太可能进行此更改。 没有迹象表明 SHA1 或 SHA256 或 SHA256^2 容易受到原像攻击,因此缺乏新的密码分析技术,因此缺乏动力。 此外,即使 SHA256^2 由于密码分析攻击变得更容易,并且矿工开始使用新的算法方法,这也不一定重要,因为难度会适应它。 不过,一个可能的副作用是它会引入更多内存或预计算权衡,这可能会使 ASIC 损失利润,或者使那些拥有大量资源来进行预计算工作的人受益。 预计算优势可能足以激励用 SHA3 代替散列。 在任何情况下,如果在 SHA256 上发现任何影响密码分析攻击的原图像,都是猜测。

哈希函数

hashcash算法比较容易理解。 这个想法建立在加密散列的安全属性之上,这些安全属性被设计成难以逆转(所谓的单向或原像抵抗属性)。 您可以很容易地从 x 计算 yy = H(x),但是很难仅给定 y 来找到 x。 一个全hash inversion有一个已知的计算上不可行的蛮力运行时间为O(2^k),其中k是hash大小,eg SHA256,k = 256,如果找到原图,那么任何人都可以很验证通过计算哈希来高效地进行计算,因此在完整图像之前挖掘(计算上不可行)和验证(单个哈希调用)之间存在巨大的不对称性。

比特币现金和比特币区别_比特币混淆器_比特币区块和比特币的区别

第二哈希原像意味着给定哈希 y 的原像 x,其中 y = H(x),任务是找到哈希 y 的另一个原像:x',以便 y = H(x')。 这不要与生日碰撞混淆,它是找到两个值 x, x' 使得 H(x) = H(x'),这可以用低得多的工作 O(sqrt(2^k) ). = O(2^(k/2)) 因为你可以通过计算许多 H(x) 值并存储它们来继续前进,直到找到匹配对。 它需要大量内存,但存在内存时间折衷。

Version 0 of the hashcash protocol (1997) used a partial second pre-image, but later version 1 (2002) used a partial pre-image of a rather chosen string rather than the number of pi or an arbitrary 0^k (ie All 0 个字符串)是为了方便起见,所以工作是找到满足 H(x)=0 的 x。 验证只需要一次哈希调用也很公平,而第二个部分原像需要两次哈希调用。 (此优化由 Hal Finney 提出,并由 Thomas Boschloo 独立提出)。 为了简化事情,部分原像的定义是找到 x 使得 H(x)/2^(nk) = 0 其中 / 是除法运算的整数商,n 是散列输出的大小(n = SHA256 为 256 位),k 是工作因子,即哈希输出的前 k 位为 0。因此,例如,k = 20 平均需要一百万次尝试。

添加用途

如果来自 y = H(x) 的部分原像 x 是随机的,它只是无目的的断开连接的工作证明,每个人都可以看到你做了工作,但他们不知道为什么,所以用户可以为不同的服务重用相同的工作。 为了将工作量证明绑定到服务或目的,哈希必须包含 s(服务字符串),以便工作量变为 H(s,c)/2^(nk)=0。 矿工改变计数器 c 直到它为真。 服务字符串可以是网络服务器域名、收件人电子邮件地址或比特币中比特币区块链分类账的一部分。

另一个问题是,如果多人使用相同的服务字符串进行挖矿,他们不能以相同的 x 开头,否则他们可能会以相同的证明结束,并且任何查看它的人都不会尊重相同的 x 的重复副本作品可以在没有作品的情况下被复制,所以谁先来就会得到奖励,而其他人会发现他们的作品被拒绝了。 为了避免以这种方式浪费工作的风险,需要有一个随机的起点,因此工作变得容易找到 H(s,x,c)/2^(nk) = 0,其中 x 是随机的(例如128位)使得两个用户在统计上不可能恶意或意外地从同一个点开始),c是一个变化的计数器,s是服务字符串。

这就是哈希现金版本 1 和比特币所做的。 事实上,在比特币中,服务字符串是 coinbase,其中包括接收者的奖励地址和区块中正在验证的交易。 比特币实际上并不包含随机来源 x,因此奖励地址被重新用作随机因素以避免为了这个随机来源而发生冲突,从而在 coinbase 中节省了 16 字节的空间。 对于隐私比特币,矿工应该在每个成功的区块上使用不同的奖励地址。

更精确的工作

比特币现金和比特币区别_比特币混淆器_比特币区块和比特币的区别

Hashcash 最初被提议以 2^k 的形式工作,其中 k 是一个整数,这意味着难度只能按 2 的幂来缩放。这稍微简单一些,因为你可以通过一个十六进制/ 0 的二进制数,并且足以满足先前的目的。 (为简单起见,做出了许多 hashcash 设计选择)。

但是由于比特币需要对工作进行更精确和动态的控制(以精确定位10分钟出块间隔为目标),它把k变成了一个分数(浮点数),所以工作就变成了求H(s,x, C)

什么是比特币?它与传统货币有何不同

比特币到底是什么? 它的属性是什么,它是如何工作的? 而它又为何给世界带来这股旋风呢?比特币,bitcoin,是一种运行在点对点网络技术(Peer-to-peer,简称P2P)上的全球虚拟货币。

工作、难度和密码安全

Hashcash 以标准密码安全术语 O(2^k) 表示安全边际,作为对比,DES 提供 k=56 位安全,而 ECDSA-256 提供 k=128 位安全,并且由于其广泛使用,以 log2 方式表示工作和安全是也可用于安全比较。

比特币的工作速率称为 GH/sec 的网络哈希率。 由于目标块间隔为 10 分钟,可以转换为 log2(hashrate * 600),密码安全为 2013 年 11 月,哈希率为 4 petahash/sec,比特币的 hashcash-256^2 工作量证明为62 位(包括双重哈希的 +1)。

比特币现金和比特币区别_比特币区块和比特币的区别_比特币混淆器

比特币还定义了一个新的(相对)难度概念,即在当前网络哈希率下,预计每 10 分钟发现一个区块所需的工作量。 它是相对于 2^32 次迭代的最小工作单元表示的(由于比特币实现级别的详细信息,从技术上讲,最小工作量约为 0xFFFF0000)。 比特币难度很容易转换为 log2 密码安全性:k = log2(difficulty) + 32(或 log2(difficulty * 0xFFFF0000) 以获得高精度)。 难度与目标有关,就是难度=目标/0xFFFF0000。

在 log2 规模上处理高难度可能更容易(petahash/sec 是每秒 16 位十进制哈希值)并使它们与其他加密安全声明相当。 例如,EFF“deepcrack”DES 破解器项目构建了一个能够在 56 小时内破解 DES 密钥的硬件暴力机器,导致 1998 年政治观点认为 56 位 DES 太弱,花费 250,000 美元(加上志愿者设计时间). 相比之下,比特币网络每 10 分钟执行 62 位(包括 +1 的双哈希)并且比 deepcrack 强大 537,000 倍,或者如果专注于 DES 而不是 SHA256 Key to Deepcracks 56 小时可以在 9 秒内破解 DES。

矿工隐私

因此,原则上,出于隐私原因,矿工应该为每个区块使用不同的奖励地址(并将计数器重置为 0)。 中本聪早期挖比特币的原因可能是相关的,因为当他更改奖励地址时,他忘记在每次成功挖矿后重置计数器,这是比特币挖矿中的一个隐私漏洞。 事实上,对于比特币,计数器也应该被覆盖,否则你会暴露你的努力程度,如果你有很多挖矿能力,它可能会暗示硬币属于谁。 比特币通过 nonces 和 nonces 来做到这一点。 随机数从 0 开始,但额外的随机数是随机的。 这些加起来就是一个随机数计数器,它隐藏了工作证明,所以没有人知道它是一个强大但不幸的矿工努力工作还是一个非常幸运的弱矿工。

此外,随着矿池的引入,如果矿工对所有用户使用相同的奖励地址(当前的挖矿协议正在这样做),用户可能会重做工作。 为了避免用户重做工作,矿工将定义的工作分配给用户。 然而,这会产生不必要的通信往返,并且在早期的协议版本中,这可能是决定将实际块从池中发送给我的一个因素,这意味着矿工没有验证他们自己的块,这将权限委托给validate ,虽然对矿池运营商无效,但会降低比特币网络的安全性。 较新的挖矿协议版本允许用户添加自己的区块定义,但仍然存在不必要的往返工作分配。 由于新的共享挖矿协议选择了一个矿工,它实际上是一个随机的起始因素,所以实际上不需要与矿池进行工作分配,所以矿池可以有一个静态的发布地址,矿工可以做矿工的工作。 然后将他们选择的大小作为 UDP 数据包提交到池中。 (如果矿工需要隐私,他们可以使用 BIP 32 中的公共推导方法,该方法允许节点通过加密消息、乘以静态公钥来告诉矿工有关挖矿工作的信息。)

加密工作量证明

谈论 Scrypt 的工作量证明是一种误解。 Scrypt 不打算用作工作量证明功能,而是用作扩展的密钥派生功能,虽然旨在使进行高迭代的计算成本很高,但不能用于制作有效的可公开审计的证明 - of-work 因为验证成本与 Create 相同。

比特币混淆器_比特币区块和比特币的区别_比特币现金和比特币区别

带有Scrypt内部哈希函数的Hashcash可以表示为hashcash-Scrypt(1)。 Colin Percival 的 Scrypt 是一种密钥派生函数,可将用户选择的密码短语转换为密钥。 它被加盐(以防止预计算/彩虹表攻击)并且哈希被迭代多次以减慢密码短语抛光。 Scrypt 的用途与事实上的标准密码密钥派生函数 PBKDF2(内部使用 HMAC-SHA1)类似。 人们不同的原因以及他们选择 Scrypt 而不是 PBDF2 的原因是 Scrypt 的内部哈希使用更多内存,因此 GPU(或理论上是 Scrypt ASIC/FPGA)在加密研磨方面比 CPU 优势被削弱更有效。

这不使用 Scrypt 的密钥扩展功能,因此挖掘实际上并不直接使用 Scrypt,而仅使用内部 Scrypt 哈希(通过将迭代参数设置为一次迭代来访问)。 因此,Scrypt 的密钥拉伸特性根本不是用来增加硬度的,不像它通常用于密钥保护,例如从用户密码中导出加密密钥来加密比特币钱包。 Scrypt 的密钥拉伸不能用于挖掘的原因是它同时使通过相同因素进行的验证更加昂贵。 这个 hashcash 变体可以表示为 hashcash-Scrypt(iter=1, mem=128KB) 或简单地表示为 hashcash-Scrypt(1)。 另一个主要的 scrypt 参数表示使用的内存量(通常为 128kB)。

去中心化:hashcash-Scrypt 和 hashcash-SHA256

由于用户访问或 ASIC 设备的所有权有限,128kB 的 Scrypt 内存占用空间可以说不太容易受到集中式挖矿能力的影响。 这是有争议的,而且还不清楚,因为有相反的论点:hashcash-SHA256^2 非常简单,有个人积蓄的技术人员或熟练的 Kickstarter 项目可以设计它并与芯片制造商取得联系。 这种简单性确保很多人都可以做到,而且 ASIC 应该是可用的。 相反,制作一个 hashcash-Scrypt(1) ASIC 与之相比要困难一些,所以如果资金雄厚的商业实体以更快但专有而非专有的技术垄断市场,那么从中期来看,中心化似乎是一个问题实际上会更糟。 hashcash-Scrypt(1) ASIC 可在市场上买到,这使得 scrypt GPU 挖矿无利可图。

另请注意,一个缓解因素是与 hashcash-SHA256^2 相比,hashcash-Scrypt(1) 被认为具有比 ASIC 实现更低的 GPU 加速。 之所以这样说,是因为有一种说法认为128kB RAM占用的die面积必须专用于每个Scrypt(1) core,这样就减少了每个芯片可以容纳的Scrypt(1) cores的数量。 但是请注意,Scrypt(1) 实际上并不是安全存储硬件,因为它没有尝试阻止时间-内存权衡,因此实际上可以重复内部循环的计算以减少内存需求。 因此,理论上以最少的内存实现 Scrypt(iter = 1,mem = 128kB)可能会花费更多的计算,但更多的工作。

Hashcash-Scrypt(1) 的缺点是验证 hashcash-SHA256^2 的速度要慢得多,因为一次 Scrypt (mem=128kB) 迭代的验证成本远高于两次 SHA256 哈希。 这使得验证 scrypt 区块链对所有完整节点来说需要更多的 CPU 和内存。 但是请注意,CPU 的主要验证工作是验证区块中多个交易的每个交易 ECDSA 签名。 即使是 ECDSA 签名也比每个块执行一次的 Scrypt(1) 验证慢,并且在一个块中有许多交易要验证(因此 ECDSA 签名验证)。

郑重声明:本文版权归原作者所有,转载文章仅出于传播更多信息之目的。 如作者信息标注有误,请第一时间联系我们修改或删除,谢谢。

【5分钟看懂比特币】当年不值钱,现在比炒房还赚钱

曾经,一堆真诚的比特币摆在你面前,你却没有好好珍惜。 现在你后悔了,因为它们比黄金还贵。 世界上最痛苦的事情就是这个。 问题是,比特币到底是什么?