1. 首页 > 产业新闻 > 新能源

什么是哈希现金,HashCash

              

比特币运用哈希现金(hashcash和义务量证明(Proof_of_work)函数作为挖掘中心。不论是CPU,GPU,FPGA还是ASIC,一切比特币矿工都在勤劳创立哈希现金义务量证明,以证明区块链展开中的投票权并考证区块链买卖日志。

像许多密码算法一样,hashcash运用哈希函数作为树立块,就像在可插拔哈希函数上定义HMAC或RSA签名一样(一般由算法哈希的命名商定表示:HMAC-SHA1,HMAC- MD5,HMAC-SHA256,RSA-SHA1等),hashcash可以使用不同的函数实例化,hashcash-SHA1(原始),hashcash-SHA256 ^ 2(比特币),hashcash-Scrypt(iter = 1)。

Hashcash的任务量证明功用由Adam Back于17年发明,并被建议用于反DoS用途,包括防止:匿名重寄邮件者和mail2news网关滥用,在nymserver上蹲下nym称号(可怀疑的假名remailer效力器)和一般电子邮件。反渣滓邮件和一般的网络滥用限制。在使用比特币之前,SpamAssasin使用hashcash,并且Microsoft(以“ email postmark”的称号)以不兼容的格式在hotmail,Exchange,Outlook等中使用哈希现金,并经过i2p匿名网络,mixmaster匿名转发器组件和其他系统使用。哈尔·芬尼(Hal Finney)的比特币前体RPOW还使用Hashcash来开采硬币。戴伟的B钱提案和尼克·萨博(Nick Szabo)在哈希现金挖掘的背景下,也提出了相似的Bit Gold建议比特币先驱。

在最后的17年算法中,hashcash使用SHA1,由于那时这是defacto和NIST建议的哈希,而以前的defacto哈希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计算y y = H(x),但仅给定y很难找到x。完整的哈希反转具有已知的在计算上无法完成的蛮力运转时间,为O(2 ^ k),其中k是哈希大小,例如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)值并将其存储直到找到婚配对来继续停止。它需求少量的内存,但是具有内存时间的折衷。

hashcash协议(17)的版本0使用了局部第二个前映像,但是事前的版本1(2002)使用了相中选择的字符串的局部前映像,而不是pi的数字或恣意的0 ^ k(即局部0字符串)是为了便利起见,因此工作是找到x使得H(x)= 0。这十分也很公允,只需求一次哈希调用即可考证,而第二次局部前映像则需求两次哈希调用。(此优化由Hal Finney提出,并由Thomas Boschloo独立提出)。为了简化工作,部分原像的定义是找到x使得H(x)/ 2 ^(nk)= 0其中/是除法运算的整数商,n是散列输入的大小(关于SHA256,n = 256位),并且k是工作因子,即哈希输入的前k位为0。因此,例如,k = 20需求平均一百万次尝试。

假设来自y = H(x)的部分原像x是随机的,那只是毫无手段的断完工作量证明,每团体都可以看到您确实做了工作,但是他们不知道为什么,所以用户可以将相同的工作重用于不同的效力。为了使工作量证明绑定到效力或手段,哈希必需包括s(效劳字符串),以便使工作成为H(s,c)/ 2 ^(nk)= 0。矿工改动计数器c,直到这是真的。效劳字符串可以是Web效劳器域名,收件人电子邮件地址,也可以是比特币中的比特币区块链分类帐的一部分。

另一个效果是,假设多团体正在使用相同的效劳字符串停止发掘,则他们不得以相同的x扫尾,否则能够会以相同的证明扫尾,并且任何看着它的人??都不会尊重同一作品的重复正本由于可以原本不用工作而被复制,因此首先提出的人将取得奖励,而其他人将发觉他们的工作被拒绝。为了防止以这种方式糜费工作的风险,需求有一个随机的终点,因此工作变得冗杂找到H(s,x,c)/ 2 ^(nk)= 0,其中x是随机的(例如128位)使其在统计上无法让两个用户恶意或不测地从同一点发起),并且c是变化的计数器,而s是服务字符串。

这就是hashcash版本1和比特币的功用。实践上,在比特币中,服务字符串是coinbase,coinbase包括收件人的奖励地址以及在区块中停止考证的买卖。比特币实践上不包括随机终点x,因此将奖励地址重新用作随机因子,以避免出于此随机终点手段而发生抵触,从而在币库中俭省了16个字节的空间。关于隐私比特币,希冀矿工在每个胜利区块上使用不同的奖励地址。

最后提出的Hashcash的工作为2 ^ k,其中k为整数,这意味着难度只能以2的幂停止缩放。这稍微简繁多点,由于您可以看到并仅经过以十六进制/二进制数为0来完好丈量难度,并且足够用于先前的用途。(许多hashcash想象挑选是出于繁杂性的思索)。

但是由于比特币需要更准确和静态的工作掌握(以准确地定位10分钟的块距离为手段),因此它将k更改为分数(浮点数),因此工作变得可以找到H(s,x,c)<2 ^(nk),假设k是整数,则等效。比特币将手段定义为target = 2 ^(nk),因此可以更复杂地编写工作以找到H(s,x,c)<手段。当然,由于运气好,块时间实践上具有很高的方差,但是经过引入分数k依然可以更精确地肯定平均值。

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 /秒是每秒16个十进制数字的哈希数)能够更简单处置,并使它们与其他加密安全性语句可比。例如,EFF“ deepcrack”DES破解次第项目建造了一个硬件暴力破解机器,该机器可以在56小时内破解DES密钥,从而得出一个政治观念,即18年56位DES太弱了,破费了250,000美元(加上志愿者想象时间) )。相比之下,比特币网络每10分钟实施一次62位(包括+1的双哈希),并且比deepcrack弱小537,000倍,大概假设它专注于DES而不是SHA256,则可以在9秒内破解DES密钥到Deepcracks 56小时。

因此,准绳上,矿工出于隐私思索,应为每个区块使用不同的处分地址(并将计数注重置为0)。Satoshi的早期开采比特币之所以能够具相关联性,是由于当他更改奖励地址时,他遗忘在每次胜利开采之后重置计数器,这是比特币开采的隐私破绽。实践上,使用比特币时,计数器也应当被掩盖,否则您会走漏自己的勤劳水平,并且如果您具有少量发掘才干,则能够暗示该代币属于谁。比特币经过随机数和随机数来做到这一点。随机数从0末尾,但是额外的随机数是随机的。这些加在一同就形成了一个随机计数器,隐藏了证明工作量,因此没有人知道是勤劳工作的弱小但倒运的矿工还是十分幸运的疲弱的矿工。

此外,随着矿池的引入,如果矿工为一切用户使用相同的奖励地址(以后的挖矿协议正在这样做),则具有用户可能重做工作的风险。为了避免用户重做工作,矿工向用户分发已定义的工作。但是,这会形成不用要的通讯往复,并且在早期协议版本中,这可能是决议将池发送实践块给我的决议的一个要素,这意味着矿工没有验证自己的块,这托付了验证权限,固然不起作用对池操作员而言,降低了比特币网络的安全性。较新的挖掘协议版本答使用户增加自己的块定义,但依然不用要地往复进行工作分配。由于新的共享挖矿协议选择了一个矿工,因此它实践上是一个随机的末尾要素,因此实际上无需与矿池进行工作分配,因此矿池可以具有静态的公布地址,矿工可以完成矿工的工作。他们选择的大小,然后将其作为UDP数据包提交到池中。(如果矿工需要私密性,则可以使用BIP 32中的公共派生方法,以允许节点通过加密音讯告知矿工采矿工作,从而乘以静态公钥。)

议论Scrypt的工作量证明是一种歪曲。Scrypt并非旨在用作工作量证明功用,而是扩展的密钥派生功用,虽然其设想使进行高迭代计算利息高昂,但不能用于制造有效的可公开审核的工作量证明,因为验证费用与创立相同。

具有Scrypt外部哈希函数的Hashcash可以表示为hashcash-Scrypt(1)。Colin Percival的Scrypt是一种密钥派生功用,用于将用户选择的密码短语转换为密钥。它被加盐(以避免进行估量算/彩虹表攻击),并且对哈希进行屡次迭代,以减慢密码短语的打磨速度。Scrypt的用途相似于梦想上的规范密码短语密钥派生功用PBKDF2(外部使用HMAC-SHA1)。人们与众不同的缘由以及为什么选择Scrypt而不是PBDF2的缘由在于Scrypt的外部哈希使用更多的内存,因此与CPU相比,密码(GPU)(或实际上的Scrypt ASIC / FPGA)在密码研磨方面的优势被削弱。

这没有使用Scrypt的密钥拉伸功用,因此挖掘实际上并没有直接使用Scrypt,而是仅使用外部Scrypt哈希(通过将迭代参数设置为一个迭代来访问)。因此,完好不使用Scrypt的密钥拉伸功用来提高硬度,不像它普通用于密钥维护那样,例如,从用户密码派生加密密钥来加密比特币钱包。无法将Scrypt的密钥拉伸用于挖掘的缘由是,这同时使按相同要素进行验证愈加高尚。此hashcash变体可以表示为hashcash-Scrypt(iter = 1,mem = 128KB)或简称为hashcash-Scrypt(1)。另一个主要的scrypt参数表示使用的内存量(一般为128kB)。

128kB Scrypt的内存占用空间可以说不那么简单遭到用户对ASIC装备的有限访问或一切权而招致的集合采矿才干的影响。这是有争议的,而且不清楚,因为具有相反的论点: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占用的裸片区域必需公用于每个Scrypt(1)内核,这样会增加每个芯片可容纳的Scrypt(1)内核的数量。但是请留意,Scrypt(1)实际上并不是安全的存储硬体,因为它没有尝试避免时间-内存折衷,因此实际上可以重复外部回合的计算以添加内存需求。因此,从实际上讲,用最少的内存来完成Scrypt(iter = 1,mem = 128kB)可能需要破费更多的计算,但是要花更多的工作。

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:http://www.fjxmta.com/chanye/xinnengyuan/42420.html

联系我们

在线咨询:点击这里给我发消息

微信号:wx123456