比特币自动交易软件使用的是哪种Hash算法

比特币、暴雪和下载盗版电影都应用了同一种算法:哈希算法
哈希算法是如何保护比特币和其他数据的?通过文章一起来了解下~
在ICO泡沫迅速涌起和迅速破灭后,比特币仍然一路高歌,在最近突破了9600美金的大关。作为一种独立于货币体系的数字加密币,比特币成功的本质还是要归功于技术——区块链的安全和隐私支撑起了比特币最核心的价值。
提到区块链,非对称加密算法和哈希算法是两个不能避开的技术名词。尤其是哈希算法,在区块链相关的技术文章中总能看到这个名字,却很难真正理解它的奥秘。今天,我们就来看看哈希算法是如何保护比特币和其他数据的?
学好哈希算法,用脑子储存比特币
如果你准备购买比特币,你就会拥有一个“比特币钱包”。通常来讲,比特币钱包会是一个移动/本地客户端,用户可以通过客户端进行交易。但是还有一种更高端的玩法:脑钱包。
我们知道,比特币实际上是一种“资源”,它并不是像文档一样躺在谁的U盘里,而想要确立这种资源的所有权,则需要由用户自己生成一串数字密钥并储存到某个地方。交易时,先生成一套只能由交易中某一方用来解密的私有密钥,再根据私有密钥单向加密生成双方都能看到的共有密钥。
由于密钥的生成是独立于比特币协议和区块链的,所以如何保护好自己的密钥成了一个大问题,以前甚至发生过黑客破解比特币钱包客户端获取比特币的事件。
为了避免这种问题,就有人想出了一个新方法:自己生成一段比特币密钥,然后记在自己脑子里。
生成比特币密钥的方式并不难,最初始的密钥只是一串256位的二进制数字,抛二百多次硬币即可得到。但想记住二百多个0和1实在是太复杂了,脑钱包概念的关键在于,用哈希算法SHA-256对密钥进行校验,让256位二进制数字变成更短的编码,就可以保证让这串字符适合人脑记忆。
来自国家安全局,怪不得哈希算法很安全!
不管是抛二百次硬币用脑子记忆的脑钱包,还是在移动端、PC端作为客户端的电子钱包,基本都绕不开用SHA-256算法校验这一步骤。
其实SHA-256算法发明的最初目的和比特币毫无关系,1993年,美国国家安全局设计了一套用于安全加密的密码散列函数——Secure Hash Algorithm,翻译过来就是安全散列算法。人们更愿意把它叫做SHA,1993年推出的版本名为SHA-0,后来随着算法不断的被破解又不断自我修正,最终推出了数个SHA算法的变体,其中就包括SHA-256。
SHA最主要的特性就是,接收到二进制数字消息时会形成一串“数字摘要”,而这一摘要还可以用来验证数字消息的完整性。如上文所示,SHA-256就意味着算法可以把256位的二进制数字进行压缩。
很多人会感到疑惑的是,哈希算法对数字进行压缩、摘要,那么为什么不可以根据这些摘要反向“破解”呢?
哈希算法与其说是“加密”,其实更接近于“压缩”。这其中涉及到一个“映射”的概念。所谓映射,我们可以理解为“代表”。举个例子,可以用ABC这样的字符去代表这样的数字,字符A可以代表1、001、0001等等,但只得到字符A时,我们无法得知加密前的数字究竟是1还是001还是0001还是……
用更简单的案例解释一下:在比特币交易中,交易双方都能得知的共有密钥是“100”,但只有其中一方知道加密前的私有密钥是2+78+5+5+10。
得到100这个共有密钥的人,想要破解私有密钥只能去挨个去排列“1+0+0+0+99”、“1+1+0+0+98”……如果变成256位的密钥,几乎是一个不可能完成的任务。而想要验证公有密钥也很简单,既然加密前的私有密钥是2+78+5+5+10,那么99、98这些公有密钥就都是错误的。
忘记比特币,下载过盗版电影的你早就认识了哈希算法
所以,目前看来哈希算法的压缩功能最大的用处是在比特币交易加密上?
实际上哈希算法最大的用处还是压缩数据,之所以被用在比特币上,是因为其中包含的大量运算贴合了以“消耗资源来获取比特币”的规则。在其他领域中,哈希算法也能发挥很大作用。
一个比较典型的例子是游戏公司暴雪推出的“One Way Hash”算法。
作为手握魔兽争霸、星际等等数款大型游戏的企业,暴雪和其他企业一样,拥有一个巨大的数据库。而当数据库太大时,从中检索就成了一个巨大的麻烦。
通常情况下在数据库中寻找数据就像在KTV点歌,数据库是曲库,想要找到自己要点的歌,只能把曲库从头到尾翻个遍。但也有一种更简单的方法,那就是建立一种代表关系,把歌曲名字《小星星》简写成XXX,并把这种对应关系储存在数据库中。寻找歌曲时,如果连XXX都找不到,说明曲库中不可能存在《小星星》这首歌。
同理,《小星星》=XXX、《爱我中华》=AWZH,这种文字转化成拼音、拼音取首字母的对应方式在现实应用时可能会涉及到函数、坐标等等数学问题,总之这种对应方式被称作“哈希表”。
但我们在KTV点歌时,搜索XXX得出的结果不光有《小星星》、还有《笑哈哈》,面对这种同一字符串在哈希表上位置相同的问题,暴雪的程序猿们想出了一种绝妙的解决办法——在哈希表中用三个哈希值来校验位置。
也就是说在暴雪KTV的曲库中,《小星星》(xiaoxingxing)的哈希值可以分别是XXX、OGG和III,这时再搜索歌曲,就几乎不会遇到《小星星》和《笑哈哈》同时出现的情况了。
同样的作用也体现在P2P(点对点)传播上。如果是上古时代的互联网用户,可以对emule(电驴)这款下载软件有印象,在eMule上可以从全球所有eMule用户手中接收某一件文件的数据上行和下载。
其原理就是,当你想下载电影《战狼2》时,系统会提取《战狼2》的哈希值,通过对这一哈希值的搜索,可以发现所有拥有《战狼2》的用户,大家一起进行点对点的数据传送,eMule本身也不用建立数据库,只搭建平台就可以了。因为哈希算法的压缩特性,使得“全球搜索”这件事变的低成本并可行。
虽然那个具备共享精神的好时代一去不复返,但即使是今天哈希算法也依然活跃在我们的视野中,即使有很多人声称自己破解了哈希算法,却也没有发生过因为算法被破解而造成损失的情况。
目前来看,哈希算法如果被抛弃,无非是出现以下两种情况:
第一,量子计算开始应用,哈希算法和已知的所有密码、加密方式都被强大的计算能力和速度打败。
第二,出现了更好用的压缩算法,比如美剧《硅谷》中的魔笛手成真,哈希算法由于不好用而被开发者抛弃。
评估一下以上这两种情况出现的可能性,相信大家就能知道哈希算法还会陪伴我们多久了。
本文由 @脑极体 原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自unsplash,基于CC0协议
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点什么是比特币哈希函数?_巴比特_服务于区块链创新者
什么是比特币哈希函数?
对比特币感兴趣的人或多或少应该都听说过“加密哈希函数(cryptographic hash function)”这个术语。但是它究竟是什么意思,与加密货币又有什么联系?
哈希函数不仅是比特币协议的重要部分,还是也是整个信息安全的重要部分。
我们将在下文中通过一些简单的例子来展示哈希函数的工作原理。
什么是哈希函数?
从理论上讲,哈希函数就是一种数学流程,将任意大小的输入数据放入该流程,然后返回固定大小的输出数据。
更具体地讲就是,提取任意长度的字母序列作为输入——我们将其称为string——然后返回一个固定长度的字母序列。无论这个输入string是一个单一的字母,单词,句子还是整部小说,而输出的长度——叫做摘要(digest)——永远都是相同的。
这种类型的哈希函数的常见用例就是存储密码。
当你使用任何一种网络服务创建一种需要密码的用户账户时。这种密码都是通过哈希函数运行的,存储的就是该密码信息的哈希摘要。当你输入密码来登录账号时,然后相同的哈希函数就会去运行你输入的密码,然后服务器就会检查其结果是否与存储的摘要相匹配。
这就意味着即使黑客能够访问用于存储哈希的数据库,他们也不可能立即破坏所有用户账户,因为无法轻易找到生成某一特定哈希的密码。
Python简单哈希函数
你可以使用Python(Mac和Linux操作系统在默认情况下安装的编程语言)来实验哈希值。(本教程假设使用了某种版本的OSX或者Linux系统,因为使用Python会更加复杂)
首先,打开终端,输入python并点击Enter。
然后你将进入Python REPL,在这种环境下,你可以直接试用Python命令,而不是在单独的文件中编写程序。
然后输入以下数值,在每行之后敲击Enter,并在标记处输入TAB:
import hashlib
def hash(mystring):
[TAB] hash_object = hashlib.md5(mystring.encode())
[TAB] print(hash_object.hexdigest())
这样你就创建了一个函数——hash(),该函数将计算出某一特定的使用MD5哈希算法的字符串的哈希值。将字符串插入上述的括号()中便可运行该函数。例如:
hash(“CoinDesk rocks”)
按下Enter并查看该字符串的哈希摘要。
你将看到在同一字符串上调用该哈希函数将会总是生成相同的哈希,但添加或改变其中的某一个字符将会生成一种完全不同的哈希值:
hash("CoinDesk rocks") =& 7ae26e64679abd1e66cfe1e9b93a9e85
hash("CoinDesk rocks!") =& 6b1f6fde5ae60b2fe1bfe
比特币哈希函数
在比特币协议中,哈希函数是区块哈希算法的一部分,可以用来通过挖矿流程将新的交易编写到区块链中。
在比特币挖矿过程中,函数的输入都是来自于最近的尚未确认的交易(以及一些与前一个区块相关的时间戳和引用一些额外输入)
在以上代码示例中,我们已经看到改变哈希函数中的一小部分会导致产生一种完全不同的输出。这个属性与挖矿过程中的“工作量证明(POW)”算法至关重要:为了成功“解决”一个区块,矿工需要以这种方式将所有输入与他们自己的输入数据结合,由此产生的哈希将以某些0开头。
作为一种基础的演示,我们可以通过在“CoinDesk rocks!”后面手动添加尝试感叹号(!),以此尝试使用我们的Python哈希函数来进行“挖矿”,知道我们找到以单个0开头的哈希。
&&& hash("CoinDesk rocks!!")
c5e013974d
&&& hash("CoinDesk rocks!!!")
c8de96b4cf781aceac0f0
&&& hash("CoinDesk rocks!!!!")
9ea367cea6a2cc4a6f5a1d9a334d0d9e
&&& hash("CoinDesk rocks!!!!!")
&&& hash("CoinDesk rocks!!!!!!")
0feecea6b6 =& SOLVED!
当然,为比特币区块解决哈希——,必须以18个0开头——需要一个非常大的计算量(比特币网络的所有计算机处理能力结合在一起仍旧需要接近10分钟才能解决一个区块)。
需要大量的处理能力就意味着新比特币的挖掘需要一个长期的过程才能完成,而无法一次性将所有的比特币全部挖出。
为了能够从挖矿中赚取比特币,你需要投入大量的工作来解决区块——通过获得这种奖励,你将所有的新交易锁入区块中,也就是添加到之前所有交易的永久性记录中:区块链。
发文时比特币标准价格 买价:¥7169.00
卖价:¥7043.00
您需要登录后才可以回复
哈希函数就是一种数学流程,将任意大小的输入数据放入该流程,然后返回固定大小的输出数据
【比特币哈希函数简述】对比特币感兴趣的人或多或少应该都听说过“加密哈希函数“,哈希函数不仅是比特币协议的重要部分,还是也是整个信息安全的重要部分。它究竟是什么意思,与加密货币又有什么联系?我们通过使用Python运行一些简单的哈希函数来介绍比特币哈希函数的原理。http://t.cn/RJrJi5s准备好纸和笔,人肉计算比特币:每天0.67哈希值 - FreeBuf互联网安全新媒体平台 | 关注黑客与极客
准备好纸和笔,人肉计算比特币:每天0.67哈希值
共558576人围观
,发现 13 个不明物体
在这篇文章中,我们一起来看一看用纸和笔来人肉“挖”比特币的难度到底有多大。实际上,用于挖矿的SHA-256算法其实还算是比较简单的了,而且可以手工计算出来。毫无疑问,这个过程肯定要比GPU或CPU的速度慢上N倍,而且还会让人感觉有些不切实际。但是自己拿纸和笔手工完成一次挖矿算法的计算,确实可以让你更加深入地了解整个算法的工作机制。
下图显示的是我们用纸和笔手工计算的一轮SHA-256:
挖矿是比特币系统整体安全的一个关键部分,挖矿的思路如下:比特币矿工将一系列比特币交易组织到一个区块中,然后重复执行N次加密散列计算(哈希计算),直到发现了某个特殊的哈希值为止。此时,区块已经成功被“挖”出,并且成为了比特币区块链的一个部分。实际上,计算任务本身是没有什么意义的,但由于发现一个成功的区块非常困难,这样就可以确保他人无法接管比特币系统了。更多关于挖矿的内容,请参考这篇文章【】。
一个加密散列函数可以接收大量输入数据,并输出一个不可预测的输出值。对于比特币来说,它所使用的哈希散列函数名叫,为了提供额外的安全保护功能,比特币使用了两次SHA-256函数,也就是所谓的双重SHA-256。
在比特币系统中,一次成功的哈希是以足够多的0开始的。就像你在日常生活中很少会见到以多个0结尾的手机号或者身份证号一样,我们也很难找到哪个哈希值是以多个0起始的。但是在比特币系统中,一切都是以指数倍形式增加的。目前,一次成功的哈希必须以大约17个0起始,所以哈希计算的成功率大约为1/1.4×1020。换句话说,寻找到一个正确的哈希值其难度比还要难。
下面这张图片显示了比特币区块链中的一个以及相应的哈希。下图中,黄色标注的哈希字节用于生成区块哈希。大家可以看到,计算出来的哈希是以足够多的0开始的,而现在就已经挖矿成功了。
比特币所使用的SHA-256哈希算法
SHA-256哈希算法的输入数据块为512位(64字节),结合加密数据,并生成一个长度为256位(32字节)的输出值。SHA-256算法由64次相对简单的重复计算组成,下图显示的是其中一轮计算,其中以8个4字节数据作为输入,从A到H,执行一系列计算之后,并生成新的A-H的值。
具体的计算过程请参考中本聪的比特币白皮书【】。
我们在下面这个视频中给大家演示了如何使用纸和笔人肉计算刚才所描述的SHA-256哈希计算。我自己实现了挖矿过程中的一轮哈希计算,整个过程大约花费了16分钟左右的时间。
视频地址:
下图显示的是比特币区块的最后一轮哈希计算,计算出来的结果用黄色部分标注出来了。末尾部分的多个0表示这是一次成功的哈希计算。
SHA-256散列计算中的每一个步骤都可以在数字逻辑(简单的布林运算和32位求和)中轻松实现,因此自定义的ASIC芯片可以在硬件上高效地实现SHA-256算法,并且能够在一块芯片上并行地进行数百轮哈希计算。下图显示的是一块挖矿芯片,它的计算速度为2-3 Ghash/秒:
相比之下,莱特比、狗币以及类似的山寨币所使用的是,而这种哈希算法是很难在硬件上实现的。它需要在内存中存储1024个不同的哈希值,然后以一种不可预知的方式来进行组合计算,并生成最终的值。因此,scrypt哈希算法跟SHA-256相比,它将需要更多的电路板以及存储器。你也可以从挖矿速度和上了解到,毕竟挖这些山寨币的速度(scrypt)可比挖比特币(SHA-256)的速度要慢好几千倍。
SHA-256算法其实是非常简单的,简单到足以手工计算出来。但是,用于对比特币交易进行签名的椭圆曲线算法却是很难手工进行计算的,因为它将会涉及到32字节整数的乘法运算。进行一轮SHA-256哈希计算用掉了我16分45秒的时间,根据这个速度来看,对一个完整的比特币区块(128轮)进行哈希计算将需要连续计算1.49天,即每天计算0.67哈希。相比之下,当前的比特币挖矿硬件每秒可以进行好几兆的哈希计算,这可比手动计算要快好多好多。毫无疑问,比特币人肉挖矿肯定是不切实际的。
有一个Redit的读者问了我关于体能消耗的问题。其实整个过程并不需要消耗太多的体力,假设人体静息代谢率为1500大卡每天,手动计算哈希所消耗的能量大约为1000焦耳/hash。而硬件挖矿的平均消耗为1000兆哈希/焦耳。这也就意味着,人肉挖矿的能量成本是硬件挖矿成本的10^16倍左右。考虑到食物问题的话,一个普通的甜甜圈价格为0.23美金,能量为200卡路里。电费大概是0.15美金/千瓦时,因此每计算一个哈希的成本比硬件挖矿的成本要高出6.7×10^8倍。很明显,我并不打算依靠人肉挖矿来赚钱,而且我还没把计算所需的纸和笔的成本算进去呢。
* 参考来源:,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM
秀--天秀--蒂花之秀--造化钟神秀--社会主义接班人就属你最优秀汝之秀,非常人所能及
这孩子能当显卡
入梦落樱满熏香,梦醒犹记四月谎
你站在这等我,我去买几个,1080ti。
必须您当前尚未登录。
必须(保密)
好好学习,天天向上
关注我们 分享每日精选文章
可以给我们打个分吗?比特币协议中的哈希函数比特币协议中的哈希函数区块链小伙伴百家号哈希函数是什么?理论上,哈希函数是一种数学计算的流程,它可以把(输入的)任意长度的数据转化成(输出的)固定长度的数据。在数学上,哈希函数用y =hash(x)表示,输入x进行运算,得到一个哈希值y。这个y有另一个叫法:摘要,类似于论文中的摘要,不管正文中的内容有多大,哈希函数总能用固定长度的数据来表述正文里的所有内容。常使用的哈希算法包括MD5、SHA-1、SHA-256、SHA-384及SHA-512等。比特币协议中,这个哈希函数是SHA-256。2008年,中本聪发明比特币时采用的这个SHA-256被公认为最安全最先进的算法之一。除了生成地址中有一个环节使用了REPID-160算法,比特币系统中但凡有需要做Hash运算的地方都是用SHA-256。哈希函数SHA-256SHA (Secure Hash Algorithm,安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数,经历了SHA-0,SHA-1,SHA-2,SHA-3系列发展。比特币采用的SHA-256算法属于SHA-2系列。SHA-256是将任何一串数据输入到SHA-256将得到一个256-bit (32-byte) 长度的Hash值(散列值)。为什么中本聪会选择用在比特币协议中使用这个函数呢?原因很简单:(1)输出固定长度无论输入多长的数据,哈希函数的输出长度永远都是固定的。(2)不可逆又叫做单向性,输入x可以得到y,但输入y是无法得到x的。这个特点很重要。在现实世界中,存储密码是哈希函数应用中的一种。当我们上网的时候,经常需要注册账户,并设置密码,这种密码就是经过哈希函数处理的。官方服务器存储的是这个密码信息的哈希摘要。当我们下一次重新登录的时候,输入帐号和密码。服务器就会经过相同的哈希函数处理你的密码,然后判断这个结果是否与之前存储的哈希摘要相匹配。这就意味着,即使有黑客攻破了服务器,得到了你账户密码的哈希摘要,他也没有办法通过这个摘要获得你的真实帐号和密码。就是因为哈希函数的不可逆性。(3)防篡改性只要输入的x发生改变哪怕只是一个字节的改变,经过哈希函数处理之后的y就会发生改变。这个是区块链的核心技术。在我们做大规模文本比对的时候,这个性质能直接帮我们减少计算耗时。但是,哈希之后能取到的值,范围总是有限的,而 X 的取值却可以是无限的,因此一定存在两个不同的 X,hash之后取到相同的y,比如仍以取余为例,当X=3 时,f(3)=2,这与 x=234 是一样的,这就叫“冲突”或“碰撞”。上面我们讲过,哈希函数可以用来存储密码,所以我们不希望两个不同的输入x值,能够得到相同的输出y值。换句话说,我们不希望哈希函数出现碰撞的情况,即使一个也不行。因缺思婷的是,我们虽然无法消除碰撞的存在,但却有保证能找到碰撞的方法。给一个256位输出大小的哈希函数找到碰撞,我们可以考虑以下这个简单的方法:选出2的256次方+ 1个不同的值,计算出每个值的哈希值,然后检查是否有两个输出值是相同的。因为我们选择的输入值的数量超过了输出值全部可能的数量,那当你运用哈希函数计算时就至少会有一对数值碰撞了。而比特币的产生,就是利用这种“哈希碰撞”。- End -本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。区块链小伙伴百家号最近更新:简介:专注区块链领域,旨在信息传播和知识普及作者最新文章相关文章拒绝访问 | www.cybtc.com | 百度云加速
请打开cookies.
此网站 (www.cybtc.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(43dab11b59b64394-ua98).
重新安装浏览器,或使用别的浏览器}

我要回帖

更多关于 马云购买200亿比特币 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信