什么是比特币计算的是什么的哈希函数

720被浏览176,201分享邀请回答19710 条评论分享收藏感谢收起44248 条评论分享收藏感谢收起什么是区块链哈希算法?加密货币中哈希算法的应用有哪些? - 币圈子
币圈子-中国领先的数字货币/区块链用户平台
比特币24H 最新价格 :
当前位置:&>&&>&>正文内容
什么是区块链哈希算法?加密货币中哈希算法的应用有哪些?
简言之,哈希算法是将任意长度的字符串映射为较短的固定长度的字符串。比特币则是使用SHA-256摘要算法对任意长度的输入给出的是256bit的输出。那么,加密货币中哈希算法的应用有哪些?加密哈希函数数据结构挖矿加密哈希函数:一个加密哈希函数有
简言之,哈希算法是将任意长度的字符串映射为较短的固定长度的字符串。比特币则是使用SHA-256摘要算法对任意长度的输入给出的是256bit的输出。那么,加密货币中哈希算法的应用有哪些?加密哈希函数数据结构挖矿加密哈希函数:一个加密哈希函数有如下特性:确定性 :无论在同一个哈希函数中解析多少次,输入同一个A总是能得到相同的输出h(A)。高效运算 :计算哈希值的过程是高效的。抗原像攻击(隐匿性) :对一个给定的输出结果h(A),想要逆推出输入A,在计算上是不可行的。抗碰撞性(抗弱碰撞性) :对任何给定的A和B,找到满足B≠A且h(A)=h(B)的B,在计算上是不可行的。细微变化影响 :任何输入端的细微变化都会对哈希函数的输出结果产生剧烈影响。谜题友好性 :对任意给定的Hash码Y和输入值x而言,找到一个满足h(k|x)=Y的k值在计算上是不可行的。加密哈希函数对区块链的安全性和挖矿有巨大的帮助。数据结构:有两种数据结构对于理解区块链非常重要:链表和哈希指针。链表:链表是依次按顺序连接而成的数据区块,如下图所示:在链表中的每个区块都通过一个指针指向另一个区块。指针:指针是包含其他变量地址的变量。因此,正如其名,指针就是指向其他变量的变量。哈希指针:哈希指针不仅有其他变量的地址,还有该变量中数据的哈希值。那么,这对区块链而言有何帮助呢?区块链的构成如下图所示:区块链本质上是一个链表,其中的每个新区块都包含一个哈希指针。指针指向前一区块及其含有的所有数据的哈希值。借此特性,区块链拥有了不可更改性(immutability)的伟大特质。区块链如何实现其不可更改性?假设在上面的图表中,有人尝试篡改1号区块中的数据。请记住加密哈希函数的一个重要特质是任何输入端的细微变化都会对哈希函数的输出结果产生剧烈影响。那么,即便有人尝试对1号区块里的数据进行细微的改写,也会使得存储在2号区块里的1号区块的哈希值产生巨大的变化。接下来,这将导致2号区块的哈希值发生变化,进而影响存储在3号区块的哈希值。以此类推,最终整条区块链上的数据都会发生变化。这种通过冻结整条链条来修改数据的方式几乎是不可能做到的。正因如此,区块链被认定为是不可篡改的。每个区块都有自己的梅克尔根(Merkle
Root)。现在,正如你已知道的,每个区块里都包含多笔交易。如果将这些交易按线性存储,那么在所有交易中寻找一笔特定交易的过程会变得无比冗长。而这就是我们使用梅克尔树的原因。在梅克尔树中,所有个体交易通过哈希算法都能向上追溯至同一个根。这就使得搜索变得非常容易。因此,如果想要在区块里获取某一特定的数据,我们可以直接通过梅克尔树里的哈希值来进行搜索,而不用进行线性访问。挖矿加密谜题被用来挖掘新的区块,因此哈希算法仍然至关重要。其工作原理是调整难度值的设定。随后,一个被命名为“nonce”的随机字符串被添加到新区块的哈希值上,然后被再次哈希。接着,再来检验其是否低于已设定的难度值水平。如果低于,那么产生的新区块会被添加至链上,而负责挖矿的矿工就会获得奖励。如果没有低于,则矿工继续修改随即字符串“nouce”,直至低于难度值水平的值出现。正如你所见,哈希算法是区块链和加密经济学中一个至关重要的部分。
我们关注币圈最新动态,有新产品或者项目希望我们报道,请猛戳这里→
|308
|529
|290
|313
|1054
|293
热门交易平台
66区交易平台
BGF Exchange
Bancor Network
BitShares Asset Exchange
热门数字货币比特币算法——SHA256算法介绍
SHA256是安全散列算法SHA(Secure Hash
Algorithm)系列算法之一,其摘要长度为256bits,即32个字节,故称SHA256。SHA系列算法是美国国家安全局
(NSA) 设计,美国国家标准与技术研究院(NIST)
发布的一系列密码散列函数,包括&SHA-1、SHA-224、SHA-256、SHA-384 和
SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard
DSS)里面定义的数字签名算法(Digital Signature Algorithm
DSA)。下面介绍该算法计算消息摘要的原理。
对于任意长度(按bit计算)的消息,SHA256都会产生一个32个字节长度数据,称作消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据是否发生改变,即验证其完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
  SHA算法有如下特性:1.不可以从消息摘要中复原信息;2.两个不同的消息不会产生同样的消息摘要。
  一、术语和概念
  (一)位(Bit),字节(Byte)和字(Word)
  SHA始终把消息当成一个位(bit)字符串来处理。本文中,一个“字”(Word)是32位,而一个“字节”(Byte)是8位。比如,字符串“abc”可以被转换成一个位字符串:
00011。它也可以被表示成16进制字符串:0x616263.
   二、SHA256算法描述
  (一)补位
  信息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)Q2
= 448。即使长度已经满足对512取模后余数是448,补位也必须要进行。
  补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。以信息“abc”为例显示补位的过程。
  原始信息:11
  补位第一步:1 1
  首先补一个“1”
  补位第二步:1 10…..0
  然后补423个“0”
  我们可以把最后补位完成后的数据用16进制写成下面的样子
  现在,数据的长度是448了,我们可以进行下一步操作。
  (二)补长度
  所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个64位的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式)
  如果原始的消息长度超过了512,我们需要将它补成512的倍数。然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。
  (三)使用的常量
  在SHA256算法中,用到64个常量,这些常量是对自然数中前64个质数的立方根的小数部分取前32bit而来。这64个常量如下:
  & 428a2f98 c0fbcf
f111f1 923f82a4 ab1c5ed5&
d807aa98 185be 550c7dc3&
72be5d74 80deb1fe 9bdc06a7 c19bf174&
e49b69c1 efbedc6 240ca1cc&
2de92c6f 4a7484aa 5cb0a9dc 76f988da&
983ed b00327c8 bf597fc7&
c6e00bf3 d5a51 &
27b70a85 2e1bc6dfc 53380d13&
650aabb 81c2c92e 92722c85&
a2bfe8a1 a81a664b c24b8b70 c76c51a3&
d192e819 de0&
19a4c116 1e376c08 2748774c
34b0bcb5&&
391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3&
748f82ee 78a14 8cc70208&
90befffa a4506ceb bef9a3f7 c67178f2
  (四)需要使用的函数
   CH(x, y, z) = (x AND y) XOR ( (NOT x) AND
MAJ( x, y, z) = (x AND y) XOR (x AND z) XOR (y AND
BSIG0(x) = ROTR^2(x) XOR ROTR^13(x) XOR
ROTR^22(x)&&
BSIG1(x) = ROTR^6(x) XOR ROTR^11(x) XOR
ROTR^25(x)&&
SSIG0(x) = ROTR^7(x) XOR ROTR^18(x) XOR
SHR^3(x)&&
SSIG1(x) = ROTR^17(x) XOR ROTR^19(x) XOR
SHR^10(x)&
其中x、y、z皆为32bit的字。
ROTR^2(x)是对x进行循环右移2位。
  (五)计算消息摘要
基本思想:就是将消息分成N个512bit的数据块,哈希初值H(0)经过第一个数据块得到H(1),H(1)经过第二个数据块得到H(2),......,依次处理,最后得到H(N),然后将H(N)的8个32bit连接成256bit消息摘要
I、哈希初值H(0)
SHA256算法中用到的哈希初值H(0)如下
H(0)0 = 6a09e667&
H(0)1 = bb67ae85&&
H(0)2 = 3c6ef372&
H(0)3 = a54ff53a&
H(0)4 = 510e527f&
H(0)5 = 9b05688c&
H(0)6 = 1f83d9ab&
H(0)7 = 5be0cd19
注:这些初值是对自然数中前8个质数&#、7、11等的平方根的小数部分取前32bit而来。
II、 计算过程中用到的三种中间值
1、&#bit字的message schedule标记为w0、w1、…、w63。
2、&#bit字的工作变量标记为a、b、c、d、e、f、g。
3、包括8个32bit字的哈希值标记为H(i)0、…、H(i)7。
III、 工作流程
原始消息分为N个512bit的消息块。每个消息块分成16个32bit的字标记为M(i)0、M(i)1、M(i)2、…、M(i)15然后对这N个消息块依次进行如下处理
For i=1 to N
&&&&&1)&&
For t = 0 to 15&
&&&&&&&&&&&&&&&&&&&&
Wt = M(i)t&
&&&&&&&&&&&&&&&&
For t = 16 to 63&
&&&&&&&&&&&&&&&&&&&&
Wt = SSIG1(W(t-2)) + W(t-7) + SSIG0(t-15) +
2)& a = H(i-1)0&
&&&&&&&&&&&&&&
&b = H(i-1)1&
&&&&&&&&&&&&&&&
c = H(i-1)2&
&&&&&&&&&&&&&&&
d = H(i-1)3&
&&&&&&&&&&&&&&&
e = H(i-1)4&
&&&&&&&&&&&&&&&
f = H(i-1)5&
&&&&&&&&&&&&&&&
g = H(i-1)6&
&&&&&&&&&&&&&&&
h = H(i-1)7
3)For t = 0 to 63&
&&&&&&&&&&&&&&&&&&
&T1 = h + BSIG1(e) + CH(e,f,g) + Kt +
&&&&&&&&&&&&&&&&&&&
T2 = BSIG0(a) + MAJ(a,b,c)&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
e = d + T1&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
a = T1 + T2
&&&&&&&&&&
4)H(i)0 = a + H(i-1)0&
&&&&&&&&&&&&&&&&
H(i)1 = b + H(i-1)1&
&&&&&&&&&&&&&&&&
H(i)2 = c + H(i-1)2&
&&&&&&&&&&&&&&&&
H(i)3 = d + H(i-1)3&
&&&&&&&&&&&&&&&&
H(i)4 = e + H(i-1)4&
&&&&&&&&&&&&&&&&
H(i)5 = f + H(i-1)5&&
&&&&&&&&&&&&&&&&&H(i)6
= g + H(i-1)6&
&&&&&&&&&&&&&&&&
H(i)7 = h + H(i-1)7
对N个消息块依次进行以上四步操作后将最后得到的H(N)0、H(N)1、H(N)2、…、H(N)7串联起来即可得到最后的256bit消息摘要。
  &&三、SHA算法安全吗?
日美国约翰霍普金斯大学的计算机科学教授,知名的加密算法专家,Matthew
Green被NSA要求删除他的一份关于破解加密算法的与NSA有关的博客。
同时约翰霍普金斯大学服务器上的该博客镜像也被要求删除。但当记者向该大学求证时,该校称从未收到来自NSA的要求要删除博客或镜像的资料,但记者却无法在原网址再找到该博客。幸运的是,从谷歌的缓存可以找到该博客。该博客提到NSA每年花费2.5亿美元来为自己在解密信息方面获取优势,并列举了NSA的一系列见不得人的做法。在BitcoinTalk上,已经掀起了一轮争论:到底SHA256是否安全?
部分认为不安全的观点包括:
NSA制造了sha256,
我们不相信NSA,他们不可能不留后门。
棱镜事件已经明白的告诉我们,政府会用一切可能的手段来监视与解密。
虽然有很多人会研究SHA-2,且目前没有公开的证据表明有漏洞。但没有公开这并不能代表就没有,因为发现漏洞的人一定更倾向于保留这个秘密来自己利用,而不是公布。
部分认为安全的观点包括:
SHA-2是应用广泛的算法,应该已经经历了实践的检验。
美国的对头中国和俄国都有很多杰出的数学家,如果有问题的话,他们肯定已经发现了。
如果真的不安全,世界上安全的东西就太少了,我不能生活在提心吊胆里,所以我选择相信安全。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。【比特币的故事03】比特币的哈希函数和算法
TA的更多文章
【比特币的故事03】比特币的哈希函数和算法
作者:吧唧saber啊哈,深奥难懂的比特币专栏又来啦。这篇文章将是这一系列最难的一篇,小伙伴们做好心理准备哟。上一文我们提到了使用加密算法和工作量机制(算力)来解决拜占庭将军问题。那些将军们无法确认他们收到的信息是否被篡改,而比特币协议则将信息隐藏得足够深,足够复杂的数学方程式中。获得和发送信息的方式也必须通过加密。因此,增加的一层安全信息是通过加密方程式自己完成的,即使找到了解密方法,也不可以进行逆向工程。(逆向工程,打一个比方就是在已知答案和解决方法的时候,从答案倒推出原题)因此背叛者和黑客们无法发动“攻击”,在加密哈希函数被解出来之前,未进行信息解码的加密信息都是一个谜。那到底什么是哈希函数呢?为什么哈希函数就这么令那些“反叛者”头疼呢?Hash,一般翻译为“散列”,有的也直译为“哈希”。指的是将任意长度的输入,通过散列算法,变成固定长度的输出。输出的就是散列值。【打个比方就是我拿着大大小小的鸡肉鸭肉牛肉一起放入绞肉机,然后等肉绞好了拿出来一看,咦,都是稀烂稀烂。无论之前是什么肉放进去,拿出来的都是肉末。】而那个绞肉机呢,就是哈希函数。常用的哈希函数有这样三个:1,直接取余法。也叫做取模运算(但是取余和取模并不是一致的),给定一个正整数a,任意一个整数b,一个等式b=ka+t。其中k,t均为整数。则称t为b对a的模(或余数)记为 b mod a=t。当ab均为正数时候是一致的,但是当ab异号,以4/(-3)约等于-1.3为例,在取余运算时候商值向0方向舍弃小数位为-1。在取模运算时商值向负无穷方向舍弃小数位为-2。则在比特币的运算中,有如下函数&& f(x)= x mod maxM ; maxM一般是不太接近 2^t 的一个质数。在这个计算函数下,任何一个x都能转换为固定区域内的一个数字。而只要maxM确定,也就意味着哈希表(哈希值域)确定下来了。例如,f(x)=x mod 2,那么无论什么数字,它的余数只有1,0,-1这三个,从而将漫天多的x转化为了三个数字来表示。但是在选择的过程中,对不同的x得到相同的f(x)这种现象叫做哈希碰撞,而具有相同的函数值的x们称为同义词。而一旦发生哈希碰撞,往往很难分辨到底哪一个x是x。例如张三和李四的学号都是10号,那么当老师点名叫10号的时候,到底是在叫谁呢?(小伙伴有没有感觉头晕?不妨休息一下接着看吧)2,乘法取整法。这个方法比直接取余法优秀很多。首先,在直接取余法中maxM的选择非常重要,关系到哈希表的构建。而乘法取整,则是不需要过多考虑M的值。例如存在一个数字a,先乘上某一个常数N(0&N&1),然后抽取出aN的小数部分e。然后用M乘以e得到一个新的数字T。再对这个数字T取整。M的选择则是可以使用例如2的整数次幂而减少发生哈希碰撞,其C语言表达如下。3.平方取中法。这个方法则是先将一个数字扩大,然后根据整个数列的长度选择中间几位数来作为散列函数值。【例】将一组关键字(,,0111)平方后得(10,12321)。若取数字长度为1000,则可取中间的三位数作为散列地址集:(100,121,201,020,123)。但是这三种方法都会引发哈希碰撞,解决方法也很简单,此处介绍一种“再散列法”,也就是在不同的散列函数下,当产生同义词的时候(发生哈希碰撞),更换哈希算法计算另一个哈希值。直到冲突不再发生,这个解决方法很容易增加计算时间。介绍完了三种常用的哈希函数,我们来讲一讲比特币和哈希函数的关系。比特币地址是比特币账户中惟一的标识。每一个地址持有人配上私钥(小知识:钥yuè,第四声,现代人很多都读yào,但是不影响交流)。地址作为人们为了沟通想出来的方法,但是公钥太长了,(130字符或66字符串),通过base58编码后,转变为34或者35字符。因为一个公钥有两种地址,因此都是可以通过同一个私钥进行交易。而私钥则是一个巨大的随机数。大小介于1到0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数字,都是可以视为合法的私钥。而在交易的过程中,使用私钥对数据进行签署,之后得到签名。而被签署的数据,则是先生成了哈希值,然后对哈希值进行签名。用签名和数据哈希值可以推出一个公钥,只需要验证这个公钥,便可以知道是否是由对应的私钥进行签名的。从而保证了比特币交易的安全性和完整性。可以说,在目前的算力情况下,用进攻的方法破解是几乎做不到的。即使已知哈希算法是什么,也无法得出到底其本身的数值是多少。例如在b=ka+t,已知t=2,a=8,我们仍然无法得知b到底是多少。(如果有小伙伴想问因为不知道k所以当然不知道b的,请返回开头进行阅读。因为k是由a和b产生的,而t是我们所已知的哈希值)如果硬要破解,那就不得不从头开始一个个试错直到找到正确答案。哈希函数难以逆向推导,这都是由于我们目前的计算机只有0和1两种二进制代码,一个位置只能表示一个代码。而未来的量子计算机,0和1是可以被同一个量子比特存储,一个量子比特需要两个数进行描述(00,01,10,11,也就是一个量子比特操纵两种状态),N个量子比特可以存储超过2^n个数。那么2^n是N的多少倍呢?所以未来一台量子计算机的算力超过全球计算机算力的总和也不是什么奇怪的事情。而在这么庞大的算力下,比特币的安全防线——哈希算法,将无法保障信息的绝对安全。写给小伙伴们:当你读到这里的时候,我真为你感到高兴,因为你是那么认真的读完了全文而不是半途而废。行百里者半九十,学习新的事物向来都不是那么容易,容易学的东西一定没什么价值。的确,是你们,让我坚持读完了三本新的书,在这里up感谢你们的支持。同时,也希望你们给你们自己鼓鼓掌,告诉自己,坚持学习,未来大有可期!
本文禁止转载或摘编

我要回帖

更多关于 比特币算的是什么 的文章

 

随机推荐