[发明专利]一种抗ASIC挖矿的工作量证明方法有效
申请号: | 201910843866.1 | 申请日: | 2019-09-06 |
公开(公告)号: | CN110569021B | 公开(公告)日: | 2023-09-12 |
发明(设计)人: | 杨征;谭林;李旷;李文宙;周开元;刘秀;刘必成 | 申请(专利权)人: | 湖南天河国云科技有限公司 |
主分类号: | G06F7/58 | 分类号: | G06F7/58;G06F9/302;G06F9/30;G06F9/50 |
代理公司: | 长沙湘之星知识产权代理事务所(普通合伙) 43271 | 代理人: | 刘斌 |
地址: | 410100 湖南省长沙市长沙县星沙街道天华北*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 asic 工作量 证明 方法 | ||
1.一种抗ASIC挖矿的工作量证明方法,其特征在于,包括以下步骤:
方式1:初始化工作存储器Memory;
方式2:修改工作存储器Memory内容;
方式3:根据工作存储器内容产生最后的结果;
所述方式1中:设定单向函数族hi,其中0≤i≤15,共计16种不同的单向函数H;单向函数H={Hy=H(x)},其中y为256位,x为单向函数Hy=H(x)的输入,y为单向函数Hy=H(x)的输出;即每个单向函数H的输入固定为256位,其中h0的输入可以是任意长度,输出固定为256位;
工作存储器Memory,总容量为|M|字节,|M|能被32整除,设置大小为1M;
伪随机函数发生器seed(uint48s)为设置随机数发生器的种子,rand()为随机数发生器的结果,返回48位无符号整数;
规约函数reduce_bit(x,y)将x的内容规约到y位,设x的位数为l,满足l≥y;将x的长度补零扩展到y的整数倍,得到长度为L的二进制串X,然后再将X分为L/y段长度为y的段,将这L/y段内容异或得到最终结果;
设定右移函数RRS(x,y)将x循环右移y位;用于向下一个算法传递随机变量;中间变量r为64位无符号整数,b为64字节数组,a为32字节数组,循环变量i为32位无符号整数,用于表示循环次数;
初始化工作存储器Memory;输入为x;输出为工作存储器Memory的内容;参数K是一个设定的参数,用于调整计算速度,K越大计算速度越快;
所述方式1目的是产生一个容量大小为|M|的伪随机内存内容,每次循环产生32字节内容,其中连续K-1次由随机数发生器产生,1次由单向函数H产生;单向函数H的计算速度慢,而随机数发生器的随机数的填充速度快,通过增加K减少单向函数H的调用时间,提升填充速度;
在随机数发生器的随机数填充部分中,四路48位独立设置种子的随机数产生器的结果合成一个64位随机数;在合成64位随机数后,再使用不定长循环移位方法增加预测产生内容的难度;确定32字节随机数填充块的因素为四个48位的随机数种子和215种循环变量的可能性,则这32字节随机数填充块的内容的输入可能性总共有448×215=296+15=2111,从而不能通过预计算的方法,预先确定每个存储块的内容;
调用单向函数族hi中的单向函数H时,输入内容不仅依赖于上一次单向函数H的输出,而且依赖于前面K-1个存储块的内容,使得单向函数H的计算必须在随机数发生器的随机数的填充完成后才能进行;单向函数H输入的内容依赖于256位的数值和256种移位数,可能性达到2256+8=2264,从而不能通过预计算的方法,预先确定每个存储块的内容;
之后为后续的随机数发生器的随机数的填充设定新的种子,使得后续的随机数填充块必须在单向函数H计算完成之后才能继续;
所述方式2中:首先对基于工作存储器Memory的最后一块内容使用SHA3函数产生随机数发生器种子,并初始化长度为L字节的状态变量,L为正整数,用于平衡存储器访问和散列函数计算之间的时间比例;随后进行C次主循环,C为正整数,用于调整计算轮数,C不小于|M|/128;在每次主循环中,将进行64L次子循环;
在子循环中,都将由随机数发生器产生一对地址,对工作存储器Memory中一对地址的字节数据和状态向量中的字节数据,使用异或方法相互融合和交换,以更新工作存储器Memory的内容和状态向量内容;
方式2中获取工作存储器Memory的最后一块内容进行散列函数计算,这就需要完整地完成方式1之后才能进行方式2,保证了方式1和方式2运行的顺序性;
方式2目的是随机化地修改M中的内容;分为两个阶段:1)根据参数随机地修改存工作存储器Memory内容;2)根据排序后的内容使用单向函数族hi,重新产生工作存储器Memory的修改参数;
在方式2修改工作存储器Memory内容的修改阶段,每次修改2个字节的内容,地址的产生由上一次单向函数H的结果a和r共同决定;其中r的修改依赖于前面所有存储器访问的值和单向函数H的结果;在每次循环中会产生两个存储器访问地址,两个存储器访问地址差距是2x位移+2;由于位移的低8位为0,使得在位移不等于0的情况下,两个存储器访问地址的差距在512字节以上,此时这两次存储器访问不会落在同一个缓存cache行中,即采用异或方法将两个存储器的内容和单向函数H的内容进行相互交叉叠加,保持原有内容的随机性;
单向函数H输入取决于当次循环的存储器访问内容,当前循环次数,以及r;将所有单向函数H的执行信息融合在数组中,作为后续算法的随机数输入,其中r包含方式2执行过程的历史信息;
在所述方式3根据工作存储器内容产生最后结果;输入为工作存储器Memory,参数D用于调整单向函数H的计算次数;D越大,单向函数H的计算次数越少,速度越快,设置为素数,y是输出;直到i=|M|/32-1算法结束;
根据排序后的内容使用单向函数族hi,重新产生工作存储器Memory修改参数;在参数的设置下,方式1、方式2、方式3的操作数量由单向函数H的操作数量决定;
按照现有的参数设计,将修改工作存储器Memory四分之一的内容;
方式3的目的是快速地基于工作存储器Memory的内容产生最后结果,即将上次单向函数H的结果与d段工作存储器Memory的内容通过异或方式叠加;d是依赖于上次单向函数H结果,且处于0~2D-1之间的随机值,D为正整数,用于调整单向函数H的计算次数,D越大,单向函数H的计算次数越少,速度越快,设置为素数;即使用并行计算的方法,但是由于上一步中起始的i和d都无法事先预知,则增加并行计算判断的难度;
在最终结果产生阶段,将连续异或随机工作存储器Memory中d个块的内容后,使用设定单向函数族hi更新状态向量,并重新计算d,直至工作存储器Memory的最后一块,其中,d为不大于D的随机数;
单向函数H计算加入循环变量i的因素,使得输入不仅仅依赖于y,而且和循环的位置相关,单向函数H的输入蕴含了所有存储器内容的信息,决定在方式3的最后一步必须执行单向函数H0。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于湖南天河国云科技有限公司,未经湖南天河国云科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910843866.1/1.html,转载请声明来源钻瓜专利网。
- 上一篇:超越函数求值
- 下一篇:全硅基CMOS量子随机数发生装置