发布时间:2025-07-09 20:56:19 点击量:
HASH GAME - Online Skill Game GET 300
概念回顾: 哈希函数:是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为固定长度的二进制串,其输出值称为哈希值,也称为散列值。 以哈希函数为基础构造的哈希算法,在现代密码学中扮演着重要的角色,常用于实现数据完整性和实体认证,同时也构成多种密码体制和协议的安全保障。 碰撞是与哈希函数相关的重要概念,体现着哈希函数的安全性,所谓碰撞是指两个不同的消息在同一个哈希函数作用下,具有相同的哈希值。 哈希函数的安全性是指在现有的计算资源(包括时间、空间、资金等)下,找到一个碰撞是不可行的。
SHA256又是何方神圣? SHA256是构造区块链所用的主要密码哈希函数。无论是区块的头部信息还是交易数据,都使用这个哈希函数去计算相关数据的哈希值,以保证数据的完整性。同时, 在比特币系统中,基于寻找给定前缀的SHA256哈希值,设计了工作量证明的共识机制;SHA256也被用于构造比特币地址,即用来识别不同的用户。 SHA256是一个Merkle-Damgard结构的迭代哈希函数,其计算过程分为两个阶段:消息的预处理和主循环。在消息的预处理阶段,主要完成消息的填充和扩展填充, 将所输入的原始消息转化为n个512比特的消息块,之后对每个消息块利用SHA256压缩函数进行处理。这个计算流程是一个迭代计算的过程,当最后1个消息块(第n块)处 理完毕以后,最终的输出值就是所输入的原始消息的SHA256值。 在比特币系统中,SHA256算法的一个主要用途是完成PoW(工作量证明)计算。按照比特币的设计初衷,PoW要求钱包(节点)数和算力值大致匹配,因为需要通过 CPU的计算能力来进行投票。然而随着人们对SHA256的计算由CPU逐渐升级到GPU,到FPGA,直至到ASIC矿机,这使得节点数和PoW算力也渐渐失配。解决这个问题 的一个思路是引入另外的一些哈希函数来实现PoW。 scrypt算法最早用于基于口令的密钥生成,该算法进行多次带参数的SHA256计算,即基于SHA256的消息认证码计算,这类计算需要大量的内存支持。采用scrypt算法 进行PoW计算,将PoW计算由已有的拼算力在一定程度上转化为拼内存,能够使得节点数和PoW的计算力的失配现象得到缓解。莱特币就是采用scrypt算法完成PoW计算 的。 SHA3算法是2012年10月由NIST所选定的下一代密码哈希算法。在遴选SHA3算法过程中人们提出了一系列的候选算法,包括了BLAKE、Grostl、JH、Keccak、 Skein、ECHO、Luffa、BMW、CubeHash、SHAvite、SMID等,最后胜出的是Keccak算法。达世币(DASH,原名暗黑币,DarkCoin)定义了顺序调用上述11个哈希算 法的X11算法,并利用这个算法完成PoW计算。同样,由于采用了X11算法,使得节点数和PoW的计算力能够保持一定程度上的匹配。
设计原理 下面介绍SHA算法计算消息摘要的原理: 对于任意长度(按bit计算)的消息,SHA256都会产生一个32个字节长度数据,称作消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据是否发生改变, 即验证其完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA算法有如下特性: 1. 不可以从消息摘要中复原信息; 2. 两个不同的消息不会产生同样的消息摘要。 一、术语和概念 (一)位(Bit),字节(Byte)和字(Word) SHA始终把消息当成一个位(bit)字符串来处理。本文中,一个“字”(Word)是32位,而一个“字节”(Byte)是8位。比如,字符串“abc”可以被转换成一个位字符串: 01100001 01100010 01100011。它也可以被表示成16进制字符串:0x616263. 二、SHA256算法描述 (一)补位 信息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)Q2 = 448。即使长度已经满足对512取模后余数是448,补位也必须 要进行。 补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。以信息“abc”为例显示补位的过 程。 原始信息:01100001 01100010 01100011 补位第一步:0 01100011 1 首先补一个“1” 补位第二步:0 01100011 10…..0 然后补423个“0” 我们可以把最后补位完成后的数据用16进制写成下面的样子 61626380 0 00000000