CN117459226A - 一种基于cpu-gpu异构平台的sm3密码恢复方法 - Google Patents

一种基于cpu-gpu异构平台的sm3密码恢复方法 Download PDF

Info

Publication number
CN117459226A
CN117459226A CN202311422288.7A CN202311422288A CN117459226A CN 117459226 A CN117459226 A CN 117459226A CN 202311422288 A CN202311422288 A CN 202311422288A CN 117459226 A CN117459226 A CN 117459226A
Authority
CN
China
Prior art keywords
password
value
register
gpu
candidate
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311422288.7A
Other languages
English (en)
Inventor
康矗
韩柳彤
邢明杰
武延军
赵琛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN202311422288.7A priority Critical patent/CN117459226A/zh
Publication of CN117459226A publication Critical patent/CN117459226A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/45Structures or tools for the administration of authentication
    • G06F21/46Structures or tools for the administration of authentication by designing passwords or checking the strength of passwords
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Power Engineering (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于CPU‑GPU异构平台的SM3密码恢复方法。本方法为:1)CPU端读取存储待恢复密码的目标哈希值的哈希文件并对其进行解析,得到目标哈希值;2)CPU端初始化OpenCL运行环境,配置内核运行环境;3)CPU端生成候选密码并将其写入GPU显存;4)GPU线程从GPU显存中读取候选密码,并行计算每一候选密码的哈希值,判断计算结果与目标哈希值是否匹配,根据匹配结果生成对应候选密码的标志位并将其写入GPU显存;5)当所有线程都完成计算后,CPU端从GPU显存中读取标志位信息;根据标志位确定是否找到目标密码,如果找到目标密码则结束并释放当前资源;否则返回步骤3),直至找到目标密码。

Description

一种基于CPU-GPU异构平台的SM3密码恢复方法
技术领域
本发明属于消息摘要算法加密领域,以及程序设计和算法设计领域,提出了一种基于CPU-GPU异构平台的SM3密码恢复方法。
背景技术
随着互联网的快速发展,信息泄露事件逐渐增多,信息安全的保障已经成为各行业的迫切需要。密码学算法是现代密码学的核心技术,为保障信息安全提供了理论支撑。消息摘要算法是密码学三大基础算法之一,广泛应用于数字签名、身份认证、数据完整性校验等领域,具有不可或缺的地位。消息摘要算法的作用原理是,对于任意长度的消息输入,通过一系列变换生成固定长度的摘要输出,从而提取出消息输入的“指纹信息”。
国密SM3算法是由我国自主研发的消息摘要算法,已发布为国家密码杂凑算法标准,现已提交至ISO国际标准化组织。SM3算法结构类似于SHA-2系列算法,但比SHA-2具有更复杂的函数运算和更强的数据依赖关系。相比于传统的MD5和SHA系列算法,SM3具有更强的抗碰撞性。
图形处理器(Graphics Processing Unit,简称GPU)的提出初衷是为了协助CPU处理图像计算。但在消费市场庞大需求的刺激下,现代GPU已具有很强的计算性能,它的众核架构和多并发模式能帮助处理大规模数据的并行计算。
开放计算语言(Open Computing Language,简称OpenCL)是一种异构编程框架,能够在不同处理器上运行。同时OpenCL也是GPU通用计算语言,并且支持在NVIDIA、Intel、AMD等多种平台上执行,比CUDA具有更强的可移植性。OpenCL采用C语言来描述物理设备的硬件行为,使开发人员无需考虑硬件电路的实现,方便开发人员编写出更高效率的代码。
当前,利用CPU-GPU异构设备实现SM3密码恢复的方案仍有局限性。目前的研究方案大都是针对SM3算法结构和存储资源分配进行改进,基本都是在SM3算法实现层级上加速优化,缺乏在SM3密码恢复层级上的优化方法。
发明内容
针对现有技术的缺陷,本发明的目的在于提供一种基于CPU-GPU异构平台的SM3密码恢复方法。密码学算法的应用通常具有计算过程单一、数据规模较大的特性,因此可以使用GPU对SM3算法进行加速计算。本发明基于OpenCL框架在CPU-GPU异构平台上开发SM3算法的并行计算程序实现SM3密码恢复。本发明的密码恢复方法面向的是长度在5~12之间,每个字符的字符集是全字符(95个字符)的密码。
为了方便描述,可将本发明的SM3密码恢复方法分成3个模块:OpenCL辅助模块、密码生成和传输模块、SM3密码哈希值计算模块。
OpenCL辅助模块:负责OpenCL运行环境的配置和GPU内核程序的执行,通过调用OpenCL内置的API函数在GPU上创建多个线程并管理线程的并行情况;
密码生成和传输模块:用于每次在CPU端上生成密码后缀并将其传输至GPU显存上,GPU线程将自行生成的一批密码前缀与所述密码后缀进行密码拼接生成一批候选密码;
SM3密码哈希值计算模块:负责在GPU设备上计算候选密码哈希值,是本发明最核心的模块。首先在GPU上创建多个线程,每个线程先从GPU显存上读取候选密码,并行计算每一候选密码的哈希值,判断计算结果与所述目标哈希值是否匹配,根据匹配结果生成对应候选密码的标志位并将其写入GPU显存;当所有线程都完成计算后,CPU端从GPU显存中读取标志位信息;根据标志位确定是否找到目标密码,如果找到目标密码则结束并释放当前资源。计算SM3密码哈希值时采用了寄存器重用技术,将消息字扩展中所需寄存器数量从132个减少到17个,节约了寄存器资源;进行消息字扩展时采用了缓存技术,提前计算部分扩展字的数值并缓存在寄存器中,以避免后续大量的重复计算;判断哈希值是否匹配时采用了提前判断方案,减少了压缩变换中3/64的计算量。
本发明是基于CPU-GPU异构平台的SM3密码恢复方法实现,其中GPU上主要是进行哈希值的计算,而CPU端负责搭建OpenCL运行环境、生成候选密码并传输到GPU上、调度GPU设备进行计算等。整个SM3密码恢复方法的运行包括如下步骤:
步骤一:CPU端读取存储待恢复密码的目标哈希值的哈希文件并对其进行解析,得到所述目标哈希值;
步骤二:CPU端通过调用库函数进行OpenCL运行环境的初始化,其主要内容包括选择OpenCL平台和设备、创建设备上下文和命令队列、创建GPU内核程序、初始化内存空间、加载编译内核程序等;
步骤三:CPU端生成候选密码并将其写入GPU显存;
步骤四:GPU线程从GPU显存中读取候选密码,并行计算每一候选密码的哈希值,判断计算结果与所述目标哈希值是否匹配,根据匹配结果生成对应候选密码的标志位并将其写入GPU显存;
步骤五:当所有线程的计算都完成后,CPU端从GPU显存中读取标志位信息;根据标志位确定是否找到目标密码,如果找到目标密码则结束并释放当前资源;否则返回步骤三,直至找到目标密码。
本发明的优点如下:
1、本公开采用的计算设备是GPU,能高效处理大规模数据的计算;采用的平台是OpenCL框架,能够支持在CPU、GPU、FPGA和DSP等多种处理器上运行,便于后续做异构并行的移植。
2、本公开在步骤三生成密码时采用了前后缀密码拼接技术,CPU只需将密码后缀写入GPU显存,再由GPU线程自动生成密码前缀进行拼接;这一方案极大地减少了数据传输量,提高程序运行性能。
3、本公开在步骤四计算密码哈希值时对程序结构进行了改进,合并了消息字扩展和压缩函数,促进了循环展开,降低分支跳转带来的开销;还采用了寄存器重用技术,将消息扩展中所需寄存器从132个减少到17个,节约了寄存器资源,为提高线程并行能力提供了存储资源的支持;并使用了循环展开和指令优化技术,减少了程序的分支跳转次数和汇编代码中的指令数量。
4、本公开在步骤四判断哈希值是否匹配时采用了提前判断的方案。由于SM3算法有64轮压缩变换,需要进行64步的计算才能得到最终哈希值。但根据SM3算法特性,在第61步时就已经能计算出哈希值中第4个字的值,因此可以在第61步后直接对目标哈希值的第4个字进行判断,若不匹配就无需进行后续计算,这样可以减少压缩函数中3/64的计算量。
5、本公开在步骤四计算密码哈希值时采用了缓存技术。在采用前后缀密码拼接技术的基础上,GPU上的每个线程计算的密码前缀不同、而后缀相同,因此W1~W15的值也相同,消息扩展中仅与W1~W15的值有关的扩展字W17、W18、W20、W21、W23、W24、W26、W27、W30、W33、W36、W39的值也相同。所以可以提前计算这些扩展字的值,并缓存计算结果,避免后面消息扩展中大量的重复计算。
附图说明
图1是本发明的方法及装置总体架构图。
图2是进行OpenCL环境配置的流程图。
图3是密码生成与传输采用密码前后缀拼接技术的示意图。
具体实施方式
下面结合附图对本发明进行进一步详细描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,本发明的基于OpenCL框架在CPU-GPU平台上运行的SM3密码恢复方法的执行需要进行下步骤:
步骤一:CPU端读取存储待恢复密码的目标哈希值的哈希文件并对其进行解析,得到目标哈希值;
特别的,待恢复密码长度必须是在5~12位之间,每个字符的字符集是全字符(95个字符)的密码。
步骤二:CPU端通过调用库函数进行OpenCL运行环境的初始化,其主要内容包括选择OpenCL平台和设备、创建设备上下文和命令队列、创建GPU内核程序、初始化内存空间、加载编译内核程序等;
更具体的,如图2所示,在本发明中,OpenCL的具体执行过程可概括为:
首先是创建OpenCL程序运行的上下文环境。
调用API函数clGetPlatformIDs()与clGetDeviceIDs()来查询当前系统所在平台与相连设备的相关信息,并选择所需平台与设备。由于本发明使用的OpenCL设备是NVIDIA厂商的显卡Geforce GTX 1050,因此平台选择NVIDIA,设备选择GPU。
调用函数clCreateContext()为程序创建上下文,其中上下文定义了OpenCL的编程资源,包括所选平台与设备。
调用clCreateCommandQueue()创建命令队列,命令队列定义了OpenCL需要完成的操作以及这些操作的顺序;本发明所需用到的命令包括:密码写入GPU显存、执行内核、从GPU显存中读取计算结果。
再调用clCreateBuffer()为程序分配一块存储空间(通常是缓冲区),此存储空间将会映射到GPU显存中的一块区域,用以实现CPU和GPU之间的数据传输。
上下文环境配置好后,再将内核加载到上下文中,并进行编译。
先调用clCreateProgramWithSource()和clBuildProgram()来完成OpenCL C内核源代码的加载编译工作,这步是将以.cl的文件格式存储在内核程序对象中的可执行内核代码加载编译。
OpenCL执行的最小单元是内核函数,而一个内核程序中可能含有多个内核函数,所以还需通过clCreateKernel()为每个内核函数创建一个内核对象,并调用clSetKernelArg()为内核函数配置相应的参数。
步骤三:CPU端生成候选密码并将其写入GPU显存;
更具体地,如图3所示,CPU端每次生成一个密码后缀,而GPU生成一批密码前缀并进行候选密码拼接。在本发明中,待恢复密码的长度在5~12位之间,设定前4位为密码前缀,后1~8位为密码后缀。由于密码长度未知,需要穷举整个密码空间,此处默认从密码长度为5位开始穷举,依次列举到长度为12位。CPU端生成密码后缀后,调用clEnqueueWriteBuffer()将密码前缀和目标哈希值等内核所需参数写入缓冲区中,供GPU线程读取计算。
步骤四:GPU线程从显存中读取候选密码,并行计算每一候选密码的哈希值,判断计算结果与所述目标哈希值是否匹配,根据匹配结果生成对应候选密码的标志位并将其写入GPU显存;
更具体的,CPU端调用API函数clEnqueueNDRangeKernel()执行GPU上的内核。执行方式有数据并行和任务并行两种模式,本发明选择的是数据并行模式。
更具体的,GPU端计算候选密码哈希值和判断结果匹配的步骤包括:
S1:首先进行消息填充。定义char类型数组messageBlock0~63,并将该数组messageBlock0~63的每一字节都初始化为0。线程从缓冲区中读取密码后缀并将其写到messageBlock0~63的相应位置,再将比特“1”添加到密码后缀末尾。由于密码的前4字节为前缀,故将后缀字节数加4得密码字节数,再乘8即可得到密码的比特长度l。再将密码比特长度l的二进制表示成64位的比特串,填充到messageBlock0~63的最后8字节。
S2:再预先计算部分扩展字的值。定义int类型数组W0~15和int类型变量W17、W18、W20、W21、W23、W24、W26、W27、W30、W33、W36、W39,将数组messageBlock0~63的后60字节加载到数组W1~15中,根据消息扩展公式 依次计算出扩展字W17、W18、W20、W21、W23、W24、W26、W27、W30、W33、W36、W39的数值,并缓存在寄存器中。
S3:然后开始计算候选密码的哈希值。定义int类型数组V0~7,和int类型变量A、B、C、D、E、F、G、H、SS1、SS2、TT1、TT2。每个线程需要处理多个密码输入,根据CPU生成的密码后缀,GPU线程还需穷举整个密码前缀空间。因此开一个循环次数为95*95的for循环体,每轮循环要进行的步骤包括如下:
S31:根据当前为第k轮循环生成密码前缀,并写入到messageBlock的前4个字节以完成密码拼接工作。
S32:将数组messageBlock的值写入到数组W0~15中,并将数组V0~7的值初始化为{0x7380166f,0x4914b2b9,0x172442d7,0xda8a0600,0xa96f30bc,0x163138aa,0xe38dee4d,0xb0fb0e4e},再将V0~7的值依次赋值给寄存器A、B、C、D、E、F、G、H。
S33:对消息字W0~15进行扩展并对寄存器A、B、C、D、E、F、G、H的数值迭代压缩,总共包括64轮计算,第j轮的计算需要进行的操作有
将SS1赋值为:寄存器A循环左移12位加寄存器E再加上常量T循环左移j位的值,再循环左移7位;
将SS2赋值为:寄存器A循环左移12位的值异或SS1的值;
将TT1赋值为:寄存器A、B、C经布尔函数FF运算后的值加字Wj和Wj+4异或的值,再加寄存器D、SS2的值;
将TT2赋值为:寄存器E、F、G经布尔函数GG运算后的值加字Wj的值,再加上寄存器H、SS1的值;
将D的值更新为寄存器C的值;
将C的值更新为寄存器B循环左移9位的值;
将B的值更新为寄存器A的值;
将A的值更新为寄存器TT1的值;
将H的值更新为寄存器G的值;
将G的值更新为寄存器F循环左移19位的值;
将F的值更新为寄存器E的值;
将E的值更新为寄存器TT2经置换函数P0运算后的值;
按照公式
更新扩展字Wj+16的值,并将其存储在寄存器W(j+16)%16中,以实现寄存器循环复用,节省寄存器资源。
S33.1:其中布尔函数FF、GG和常量T拆分为前16轮和后48轮两组,避免分支跳转。
布尔函数FF拆分为FF0和FF1,前16轮使用FF0运算,后48轮使用FF1运算;
函数FF0,参数为X、Y、Z,返回值为int类型,将X、Y、Z的值依次异或,得到FF0的数值结果;
函数FF1,参数为X、Y、Z,返回值为int类型,将X、Y的值相与,X、Z的值相与,Y、Z的值相与,再将三个值进行或运算,得到FF1的数值结果。
布尔函数GG拆分为GG0和GG1,前16轮使用GG0运算,后48轮使用GG1运算;
函数GG0,参数为X、Y、Z,返回值为int类型,将X、Y、Z的值依次异或,得到GG0的数值结果;
函数GG1,参数为X、Y、Z,返回值为int类型,将X、Y的值相与,X的值先按位取反再跟Z的值相与,再将两值进行或运算,得到GG1的数值结果。本发明通过OpenCL内置指令bitselect实现函数GG1的运算。
常量T拆分为SM3国密标准规定的T0和T1,前16轮使用T0运算,后48轮使用T1运算。其中T0的值为0x79cc4519,而T1的值为0x7a879d8a。
S33.2:其中置换函数P0,参数为X,将X的值与X的值循环左移9位、循环左移17位的结果依次异或,得到P0的数值结果;置换函数P1,参数为X,将X的值与X的值循环左移15位、循环左移23位的结果依次异或,得到P1的数值结果。
S33.3:其中循环左移操作通过OpenCL内置指令rotate(x,n)实现。
特别的,完成前61轮压缩变换后,将寄存器A的值循环左移9位后异或数组V的第4个字的值V3,将异或后的结果与目标哈希值中第4个字的值进行比较。若结果不相等,则说明当前计算密码一定不匹配,返回步骤S31进行下一轮密码生成与运算;若结果相等,则说明当前计算密码可能匹配,继续完成最后3轮的压缩变换。
S4:将数组V0~7的值分别与寄存器A、B、C、D、E、F、G、H的值进行异或,得到更新后的数组V0~7的值;
S5:将更新后的数组V0~7的值与目标哈希值进行比较。若不完全相等,返回步骤S31进行下一轮密码生成与运算;若完全一致,则说明当前候选密码是符合条件的正确密码,将此候选密码写到缓存区中,并将标志位置为候选密码的长度。
步骤五:当所有线程的计算都完成后,CPU端从GPU显存中读取标志位信息;根据标志位确定是否找到目标密码,如果找到目标密码则结束并释放当前资源;否则返回步骤三,直至找到目标密码。
综上所述,本发明基于OpenCL框架在CPU-GPU异构平台上实现了SM3密码恢复方法,面向的是长度在5~12位之间,每个字符的字符集是全字符(95个字符)的密码。本发明采用了密码前后缀拼接方案,以减少异构平台之间的数据传输量。在SM3算法层级采用了程序结构改进、寄存器重用和指令优化的方案,以加速SM3算法计算。在密码恢复的层级采用了提前判断和缓存技术,减少了压缩函数中3/64的计算量,也避免了线程中的重复计算。
尽管为说明目的公开了本发明的具体实施例,其目的在于帮助理解本发明的内容并据以实施,本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (7)

1.一种基于CPU-GPU异构平台的SM3密码恢复方法,其步骤包括:
1)CPU端读取存储待恢复密码的目标哈希值的哈希文件并对其进行解析,得到所述目标哈希值;
2)CPU端初始化OpenCL运行环境,配置内核运行环境;
3)CPU端生成候选密码并将其写入GPU显存;
4)GPU线程从GPU显存中读取候选密码,并行计算每一候选密码的哈希值,判断计算结果与所述目标哈希值是否匹配,根据匹配结果生成对应候选密码的标志位并将其写入GPU显存;
5)当所有线程都完成计算后,CPU端从GPU显存中读取标志位信息;根据标志位确定是否找到目标密码,如果找到目标密码则结束并释放当前资源;否则返回步骤3),直至找到目标密码。
2.根据权利要求1所述的方法,其特征在于,所述CPU端生成候选密码并将其写入GPU显存的方法为:每次CPU端生成一个密码后缀并其写入GPU显存,同时GPU线程生成一批密码前缀,GPU线程将当前收到的密码后缀与当前生成的每一密码前缀进行拼接,生成一批候选密码。
3.根据权利要求2所述的方法,其特征在于,所述待恢复密码的长度在5~12位,所述密码前缀长度为4位,所述密码后缀的长度为1~8位。
4.根据权利要求3所述的方法,其特征在于,判断计算结果与所述目标哈希值是否匹配的步骤包括:
S1:定义char类型数组messageBlock0~63,并将该数组messageBlock0~63中每一字节初始化为0;线程从缓冲区上读取密码后缀并将其写到messageBlock0~63的相应位置,再将比特“1”添加到密码后缀末尾;然后将候选密码的比特长度l的二进制表示成64位的比特串填充到数组messageBlock0~63的最后8字节;
S2:定义int类型数组W0~15,以及int类型变量W17、W18、W20、W21、W23、W24、W26、W27、W30、W33、W36、W39;将数组messageBlock0~63的后60字节加载到数组W1~15中,根据消息扩展公式依次计算出扩展字W17、W18、W20、W21、W23、W24、W26、W27、W30、W33、W36、W39的数值,并缓存在寄存器中;
S3:定义int类型数组V0~7和int类型变量A、B、C、D、E、F、G、H、SS1、SS2、TT1、TT2;并设置一个循环次数为95*95的for循环体,每轮循环要进行的步骤包括:
S31:将当前第k轮循环生成的密码前缀写入到messageBlock0~63的前4个字节;
S32:将数组messageBlock0~63的值写入到数组W0~15中,并将数组V0~7的值初始化为{0x7380166f,0x4914b2b9,0x172442d7,0xda8a0600,0xa96f30bc,0x163138aa,0xe38dee4d,0xb0fb0e4e},再将V0~7的值依次赋值给寄存器A、B、C、D、E、F、G、H;
S33:对寄存器A、B、C、D、E、F、G、H中的信息先进行压缩变换,再进行扩展;其中包括64轮的压缩变换,第j轮的压缩变换计算需要进行的操作包括:
将SS1赋值为:寄存器A循环左移12位加寄存器E再加上常量T循环左移j位的值,再循环左移7位;
将SS2赋值为:寄存器A循环左移12位的值异或SS1的值;
将TT1赋值为:寄存器A、B、C经布尔函数FF运算后的值加字Wj和Wj+4异或的值,再加寄存器D、SS2的值;
将TT2赋值为:寄存器E、F、G经布尔函数GG运算后的值加字Wj的值,再加上寄存器H、SS1的值;
将D的值更新为寄存器C的值;
将C的值更新为寄存器B循环左移9位的值;
将B的值更新为寄存器A的值;
将A的值更新为寄存器TT1的值;
将H的值更新为寄存器G的值;
将G的值更新为寄存器F循环左移19位的值;
将F的值更新为寄存器E的值;
将E的值更新为寄存器TT2经置换函数P0运算后的值;
然后按照公式 更新扩展字Wj+16的值,并将其存储在寄存器W(j+16)%16中;
其中完成前61轮压缩变换后,将寄存器A的值循环左移9位后异或数组V的第4个字的值V3,将异或后的结果与目标哈希值中第4个字的值进行比较;若结果不相等,则返回步骤S31进行下一轮候选密码生成与运算;若结果相等,则继续完成最后3轮的压缩变换;
S4:将数组V0~7的值分别与寄存器A、B、C、D、E、F、G、H的值进行异或,得到更新后的数组V0~7的值;
S5:将更新后的数组V0~7的值与目标哈希值进行匹配,若不匹配则返回步骤S31进行下一轮候选密码生成与运算;若匹配则将当前候选密码写到缓存区中。
5.一种基于CPU-GPU异构平台的SM3密码恢复系统,其特征在于,包括OpenCL辅助模块、密码生成和传输模块、SM3密码哈希值计算模块、CPU端和GPU端;
所述OpenCL辅助模块,用于负责OpenCL运行环境的配置和GPU内核程序的执行,通过调用OpenCL内置的API函数管理GPU显存上内核的并行情况;
所述密码生成和传输模块,用于每次在CPU端上生成密码后缀并将其传输至GPU显存上,GPU线程将自行生成的一批密码前缀与所述密码后缀进行密码拼接生成一批候选密码;
所述SM3密码哈希值计算模块,用于创建多个线程并行计算每一候选密码的哈希值,判断计算结果与CPU端从哈希文件中解析得到的目标哈希值是否匹配,根据匹配结果生成对应候选密码的标志位;当所有线程都完成计算后,CPU端从GPU显存中读取标志位信息;根据标志位确定是否找到目标密码,如果找到目标密码则结束并释放当前资源。
6.一种服务器,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1至4任一所述方法中各步骤的指令。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4任一所述方法的步骤。
CN202311422288.7A 2023-10-30 2023-10-30 一种基于cpu-gpu异构平台的sm3密码恢复方法 Pending CN117459226A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311422288.7A CN117459226A (zh) 2023-10-30 2023-10-30 一种基于cpu-gpu异构平台的sm3密码恢复方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311422288.7A CN117459226A (zh) 2023-10-30 2023-10-30 一种基于cpu-gpu异构平台的sm3密码恢复方法

Publications (1)

Publication Number Publication Date
CN117459226A true CN117459226A (zh) 2024-01-26

Family

ID=89586958

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311422288.7A Pending CN117459226A (zh) 2023-10-30 2023-10-30 一种基于cpu-gpu异构平台的sm3密码恢复方法

Country Status (1)

Country Link
CN (1) CN117459226A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118520484A (zh) * 2024-07-23 2024-08-20 天翼云科技有限公司 一种基于OpenCL的SM3口令破解方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118520484A (zh) * 2024-07-23 2024-08-20 天翼云科技有限公司 一种基于OpenCL的SM3口令破解方法及装置

Similar Documents

Publication Publication Date Title
Gupta et al. Pqc acceleration using gpus: Frodokem, newhope, and kyber
US10503716B2 (en) Systems and methods for generating bit matrices for hash functions using fast filtering
US9223720B2 (en) Systems and methods for rapidly generating suitable pairs of hash functions
US10908885B2 (en) Quantum compiler
US8438370B1 (en) Processing of loops with internal data dependencies using a parallel processor
JP2015529865A (ja) シングルデータバッファの並行処理
CN117459226A (zh) 一种基于cpu-gpu异构平台的sm3密码恢复方法
Chacón et al. Thread-cooperative, bit-parallel computation of levenshtein distance on GPU
US20120288089A1 (en) System and method for device dependent and rate limited key generation
Flegar et al. Adaptive precision block-Jacobi for high performance preconditioning in the Ginkgo linear algebra software
US20070271444A1 (en) Using register readiness to facilitate value prediction
CN115525342A (zh) 一种sm3密码杂凑算法的加速方法及指令集处理器
CN111027690A (zh) 执行确定性推理的组合处理装置、芯片和方法
CN118300774A (zh) 面向sm3口令的安全性评估方法及系统
US9182960B2 (en) Loop distribution detection program and loop distribution detection method
US9158511B2 (en) Scalable partial vectorization
CN115865312A (zh) 基于risc-v架构的祖冲之算法实现方法、协处理器和运算装置
KR20200030582A (ko) 데이터 처리장치에서의 연속값들의 매칭
CN112602058B (zh) 处理器存储器存取
CN115904486A (zh) 一种代码相似度检测方法及装置
Wang et al. Accelerating the Smith-Waterman algorithm by GPU for high-throughput sequence alignment
US7278138B2 (en) Computer program conversion and compilation
JP2010140233A (ja) エミュレーションシステム及びエミュレーション方法
CN117591087B (zh) 一种针对复杂数据处理需求的高效形式化代码构建方法
US20050135604A1 (en) Technique for generating output states in a security algorithm

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination