一种使用GPU实现SHA-1算法的方法技术

技术编号:7025681 阅读:230 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种使用GPU实现SHA-1算法的方法,它包括以下步骤:(1)在通用CPU上实现SHA-1算法;(2)将程序移植到GPU上,并按以下方法进行预处理:A.创建一个空的函数体;B.通过参数指针把参数从主存拷贝到GPU的全局匹配存储空间,并把结果从GPU的全局匹配存储空间复制回主存;C.加装置配置修饰符;D.同步。本发明专利技术提供一种使用GPU实现SHA-1算法的方法,利用快速发展的图形硬件技术,采用NVIDIA公司的CUDA并行计算架构来并行实现,把GPU作为并行运算设备进行程序发布和管理运算,具有灵活性好,减轻CPU负载,提高信息安全设备的处理性能,提高运算效率,运算过程安全性高等优点。

【技术实现步骤摘要】

本专利技术涉及信息安全处理领域,特别是一种使用GPU实现SHA-I算法的方法。
技术介绍
随着信息技术的不断发展,人与人之间的联系越来越频繁,距离已经不再是问题, 安全问题在信息的传递过程中引起了人们的密切关注,数字签名是电子信息技术发展的产物,是针对电子文档的一种签名确认方法,所要达到的目的是对数字对象的合法性、真实性进行标记,并提供签名者的承诺,随着信息技术的广泛使用,特别是电子商务,电子政务等的快速发展,数字签名的应用需求越来越大,它的实现不仅需要执行的正确性,对高效率的执行也是不可缺少的,寻求一种廉价且能够快速实现的数字指纹的途径,具有很大的现实意义。目前,在GPU(Graphics Processing Unit,图形处理器)上进行通用计算(General Purpose computation)尽管还是一个新兴的研究领域,但已经得到了许多研究组织的注意和参与,图形处理硬件已经被用来在通用目的的计算,并且依托现代图像处理器(GPh),以其灵活性和强大的处理能力,能解决很多问题,并在诸多领域得到应用。SHA (Secure Hash Algorithm,译作安全散列算法)是美国国家安全局 (NSA)设计,美国国家标准与技术研究院(NIST)发布的一系列密码散列函数,SHA-I算法可以对长度不超过264比特的消息进行计算,产生160比特的信息摘要作为输出,在信息安全设备的实现中,需要进行大量的SHA-I等信息摘要运算,目前,常用的SHA-I算法具有灵活性差,CPU负载较多,信息安全设备的处理性能较差,运算效率较低,运算过程安全性较差等缺点。专利技术内容本专利技术的目的即在于克服现有技术的不足,提供一种灵活性好,有效减轻CPU负载,提高信息安全设备的处理性能,提高运算效率,运算过程安全性高的一种使用GPU实现 SHA-I算法的方法。本专利技术的目的是通过以下技术方案来实现一种使用GPU实现SHA-I算法的方法, 它包括以下步骤(1)在通用CPU上实现SHA-I算法在通用CPU上实现SHA-I算法至少包括重复进行移位、与、或和异或操作的初始化函数、更新函数、终止函数;(2)将程序移植到GPU上,并按以下方法进行预处理A.创建一个空的函数体,此函数为CUDA的入口函数,该入口函数的定义需加全局配置修饰符,表示该入口函数在CPU上调用,在GPU上执行;B.调用入口函数时需要通过参数指针把参数从主存拷贝到GPU的全局匹配存储空间, 执行后把结果从GPU的全局匹配存储空间复制回主存;C.在GPU上调用并执行的所有函数定义中加上装置配置修饰符;D.同步,块内线程到齐以后再继续后面的任务。本专利技术的有益效果是本专利技术提供一种使用GPU实现SHA-I算法的方法,利用快速发展的图形硬件技术,采用NVIDIA公司的CUDA并行计算架构来并行实现SHA-I算法,把 GPU作为并行运算设备进行程序发布和管理运算,不需将计算映射到图形应用程序接口,具有灵活性好,有效减轻CPU负载,提高信息安全设备的处理性能,提高SHA-I算法的运算效率,运算过程安全性高等优点。具体实施例方式下面对本专利技术做进一步的描述,但本专利技术的保护范围不局限于以下所述。一种使用GPU实现SHA-I算法的方法,它包括以下步骤(1)在通用CPU上实现SHA-I算法在通用CPU上实现SHA-I算法至少包括重复进行移位、与、或和异或操作的初始化函数SHAlInit、更新函数SHAlUpdate、终止函数SHAlFinal, 如下所示void SHAlInit (SHAlContext *sc){}void SHAlUpdate (SHAlContext 氺sc, const void ^vdataj uint32_t len){ιvoid SHAlFinal (SHAlContext *sc, uint8_t hash){}int main (int argc,char 5^argv []){SHAlContext foo ;uint8_t hash;int i ;SHAlInit (&foo); SHAlUpdate (&foo, 〃abc", 3); SHAlFinal (&foo, hash);}(2)将程序移植到GPU上,并按以下方法进行预处理A.创建一个空的函数体shal_cuda_prjKernel,此函数为CUDA的kernel函数,kernel 函数的定义需加全局配置修饰符—global—修饰符,表示该入口函数在CPU上调用,在GPU 上执行,如下所示extern 〃C〃 —global— void shal_cuda_prjKernel()要让CUDA执行此入口函数,需使用以下的语法调用函数名称《〈block数目,thread数目,share memory大小》> (参数,…);B.kernel函数和普通函数相比有一些限制,它不能有传回值,调用kernel函数时需要通过参数指针把参数从主存拷贝到GPU的全局匹配存储空间global memory,执行后把结果从GPU的全局匹配存储空间global memory复制回主存,如下所示uint8_t *gpu_data ; uint8_t *gpu_hash_result ;cudaMalIoc((void**)&gpu_data, sizeof(HashReq)*HASH_REQ_COUNT); cudaMalloc((void**)&gpu_hash_result,sizeof(uint8_t)*SHA1_HASH_SIZE*HASH_ REQ_C0UNT);cudaMemcpy (gpu_data, hashReq, sizeof (HashReq) *HASH_REQ_ COUNT, cudaMemcpyHostToDevice);shal_cuda_prjKernel <BLOCK_NUM, THREAD_NUM, 0>>> (gpu_data, gpu_hash_ result);cudaMemcpy(&hashResult, gpu_hash_result, sizeof(uint8_t)*SHA1_HASH_ SIZE*HASH_REQ_COUNT, cudaMemcpyDeviceToHost); cudaFree(gpu_data); cudaFree(gpu_hash_result);cudaMalloc分配GPU运行时使用的global memory,对应cudaFree用于释放 cudaMalloc 分配的 memory ;cudaMemcpy用于在GPU和CPU主存间拷贝数据,其中参数cudaMemoryHostToDevice表示将执行数据参数从CPU主存拷贝到GPU,cudaMemoryDeviceToHost表示将执行结果从GPU 拷回CPU主存;上述调用会建立BL0CK_NUM个blocks,每个blocks有THREAD_NUM个threads,总共有 BL0CK_NUM* THREAD_NUM 个 threads 并行执行;C.在GPU上调用并执行的所有函数定义中加上装置配置修饰符—本文档来自技高网...

【技术保护点】
1.一种使用GPU实现SHA-1算法的方法,其特征在于:它包括以下步骤:(1)在通用CPU上实现SHA-1算法:在通用CPU上实现SHA-1算法至少包括重复进行移位、与、或和异或操作的初始化函数、更新函数、终止函数;(2)将程序移植到GPU上,并按以下方法进行预处理:A.创建一个空的函数体,此函数为CUDA的入口函数,该入口函数的定义需加全局配置修饰符,表示该入口函数在CPU上调用,在GPU上执行;B.调用入口函数时需要通过参数指针把参数从主存拷贝到GPU的全局匹配存储空间,执行后把结果从GPU的全局匹配存储空间复制回主存;C.在GPU上调用并执行的所有函数定义中加上装置配置修饰符;D.同步,块内线程到齐以后再继续后面的任务。

【技术特征摘要】

【专利技术属性】
技术研发人员:李晓云王亚栋邓春梅刘颖
申请(专利权)人:四川卫士通信息安全平台技术有限公司
类型:发明
国别省市:90

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1