2021SC@SDUSC
文章平均质量分 67
m0_54743939
这个作者很懒,什么都没留下…
展开
-
cuda编程(5)
1、介绍图形处理单元 (GPU) 提供比 CPU 高得多的指令吞吐量和内存带宽 类似的价格和功率范围。 许多应用程序利用这些更高的功能来 在 GPU 上运行比在 CPU 上运行得更快。 其他计算设备,如 FPGA,也非常节能,但提供的能源要少得多 编程灵活性优于 GPU。GPU 和 CPU 之间存在这种能力差异是因为它们 设计时考虑了不同的目标。 虽然 CPU 旨在擅长执行 一系列操作,称为 线程 ,尽可能快且可以执行 几十个这样的线程并行运行,GPU 旨在擅长执行 数千个并行(分摊较慢的单线程性能以原创 2021-12-24 16:47:10 · 316 阅读 · 0 评论 -
2021SC@SDUSC 使用CUDA/GPU技术加速密码运算 总结
结论我自己写的gpu模幂运算代码以及从github和stackoverflow上的gpu rsa算法、gpu模幂算法,都没有比cpu块,而且是cpu代码不进行任何优化的情况下。我的测试是8192个xymodzx^ymodzxymodzx和y是unsigned long long 类型,也就是int64,64bit的正整数,z是65537。我自己的代码multiply.cu在5秒左右5.041000s,multiply_cpu.c 0.287000s,开O3优化之后几乎为零我用tensorflow写原创 2021-12-24 16:44:12 · 1117 阅读 · 0 评论 -
2021SC@SDUSC openssl gpu BASE64编解码
2021SC@SDUSC2 BASE64编解码12.1 BASE64编码介绍BASE64编码是一种常用的将十六进制数据转换为可见字符的编码。与ASCII码相比,它占用的空间较小。BASE64编码在rfc3548中定义。12.2 BASE64编解码原理将数据编码成BASE64编码时,以3字节数据为一组,转换为24bit的二进制数,将24bit的二进制数分成四组,每组6bit。对于每一组,得到一个数字:0-63。然后根据这个数字查表即得到结果。表如下: 比如有数据:0x30 0x82原创 2021-12-06 14:27:20 · 530 阅读 · 0 评论 -
2021SC@SDUSC openssl gpu 文本数据库
2021SC@SDUSC10 文本数据库10.1 概述Openss实现了一个简单的文本数据库,它可以从文件读取数据和将数据写到文件中,并且可以根据关键字段来查询数据。Openssl的文本数据库供apps/目录下的文件调用,比如apps.c、ca.c和ocsp.c。openssl文本数据库典型的例子为apps/demoCA/index.txt。文本数据库一行代表数据库的一行,各个列之间必须用一个\t隔开,用#进行注释(#必须在开始位置),以空行结束。比如下面的例子:赵春平 28 湖北z原创 2021-12-06 14:25:15 · 88 阅读 · 0 评论 -
2021SC@SDUSC openssl gpu 配置文件
2021SC@SDUSC8 配置文件8.1 概述Openssl 采用自定义的配置文件来获取配置信息。Openssl的配置文件主要由如下内容组成:注释信息 : 注释信息由 # 开头;段信息 : 段信息由 [xxx] 来表示,其中xxx为段标识;属性-值信息: 表示方法为 a = b,这种信息可以在一个段内也可以不属于任何段。典型配置文件为apps/openssl.cnf(同时该文件也是openssl最主要的配置文件)。摘取部分内容如下:OpenSSL example conf原创 2021-12-06 14:24:00 · 129 阅读 · 0 评论 -
2021SC@SDUSC openssl-gpu 抽象IO
7 抽象IO7.1 openssl 抽象 IOopenssl 抽象 IO(I/O abstraction,即 BIO)是 openssl 对于 io 类型的抽象封装,包括:内存、 文件、日志、标准输入输出、socket(TCP/UDP)、加/解密、摘要和 ssl 通道等。Openssl BIO 通过回调函数为用户隐藏了底层实现细节,所有类型的 bio 的调用大体上是类似的。Bio 中的数据能从一个 BIO 传送到另外一个 BIO 或者是应用程序。其实包含了很多种接口,用通用的函数接口,主要控制在原创 2021-12-06 14:20:58 · 518 阅读 · 0 评论 -
2021SC@SDUSC openssl 动态模块加载
2021SC@SDUSC6 动态模块加载6.1 动态库加载动态库加载函数能让用户在程序中加载所需要的模块,各个平台下的加载函数是不一样的。动态加载函数一般有如下功能:1)加载动态库windows下的函数LoadLibraryA ;linux 下的函数dlopen ;这些函数一般需要动态库的名字作为参数。2)获取函数地址windows下的函数 GetProcAddresslinux 下的函数 dlsym。这些函数一般需要函数名作为参数,回函数地址。3)卸载动态库windows下原创 2021-12-04 16:10:15 · 244 阅读 · 0 评论 -
2021SC@SDUSC openssl 内存分配
2021SC@SDUSC5 内存分配man openssl_malloc5.1 openssl内存分配用户在使用内存时,容易犯的错误就是内存泄露。当用户调用内存分配和释放函数时,查找内存泄露比较麻烦。openssl提供了内置的内存分配/释放函数。如果用户完全调用openssl的内存分配和释放函数,可以方便的找到内存泄露点。openssl分配内存时,在其内部维护一个内存分配哈希表,用于存放已经分配但未释放的内存信息。当用户申请内存分配时,在哈希表中添加此项信息,内存释放时删除该信息。当用户原创 2021-12-04 16:07:00 · 95 阅读 · 0 评论 -
2021SC@SDUSC openssl 哈希表
2021SC@SDUSC4 哈希表man lhash4.1 哈希表在一般的数据结构如线性表和树中,录在结构中的相对位置是与记录的关键字之间不存在确定的关系,在结构中查找记录时需进行一系列的关键字比较.这一类查找方法建立在"比较"的基础上, 查找的效率与比较次数密切相关。理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立确定的对应关系,使每个关键字和结构中一个唯一的存储位置相对应.在查找时,只需根据这个对应关系找到给定值.这种对应关系既是哈希函数,按这个思想建立原创 2021-12-04 16:05:49 · 89 阅读 · 0 评论 -
2021SC@SDUSC openssl 堆栈
2021SC@SDUSC3 堆栈man DEFINE_STACK_OFhttps://www.openssl.org/docs/man1.1.1/man3/sk_TYPE_num.htmlhttps://blog.csdn.net/as3luyuan123/article/details/170815813.1 openssl堆栈堆栈是一种先进后出的数据结构。 openssl大量采用堆栈来存放数据。它实现了一个通用的堆栈,可以方便的存储任意数据。它实现了许多基本的堆栈操作,主要有:构建新原创 2021-12-04 16:04:08 · 2813 阅读 · 0 评论 -
2021SC@SDUSC-cuda环境及cuda程序编写
在win11 wsl2上搭建cuda环境原创 2021-12-04 15:43:15 · 281 阅读 · 1 评论 -
2021SC@SDUSC libressl
2021SC@SDUSClibressl是一个openssl的替代品,在openssl发生“心脏出血”漏洞之后,openssl的安全性饱受质疑。libressl是openbsd旗下的一个项目,openbsd一向以安全性著称。libressl的漏洞比openssl少很多,见https://hltj.me/security/2017/05/26/libressl-instead-openssl.htmllibressl 加密库实现了广泛的 用于各种 Internet 标准的加密算法。 服务 TLS 的 li原创 2021-11-24 10:31:32 · 4136 阅读 · 0 评论 -
2021SC@SDUSC 模幂运算cuda实现
2021SC@SDUSC引入头文件#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define R_size 129#define k 1024#define n_size 128主要函数__global__ void get_square(unsigned char a[], unsigned int accumulator[], un原创 2021-11-23 23:40:14 · 179 阅读 · 0 评论 -
2021SC@SDUSC 大数运算
2021SC@SDUSC11 大数11.1 介绍大数一般指的是位数很多的数。 计算机表示的数的大小是有限的,精度也是有限的,它不能支持大数运算。 密码学中采用了很多大数计算,为了让计算机实现大数运算,用户需要定义自己的大数表示方式并及实现各种大数运算。 Openssl为我们提供了这些功能,主要用于非对称算法。11.2 openssl大数表示 crypto/bn.h中定义了大数的表示方式,如下: struct bignum_st { BN_ULONG原创 2021-11-23 23:39:10 · 653 阅读 · 0 评论 -
2021SC@SDUSC 随机数
9 随机数9.1 随机数随机数是一种无规律的数,但是真正做到完全无规律也较困难,所以一般将它称之为伪随机数。随机数在密码学用的很多,比如ssl握手中的客户端hello和服务端hello消息中都有随机数;ssl握手中的预主密钥是随机数;RSA密钥生成也用到随机数。如果随机数有问题,会带来很大的安全隐患。软件生成随机数一般预先设置随机数种子,再生成随机数。设置随机数种子可以说是对生成随机数过程的一种扰乱,让产生的随机数更加无规律可循。生成随机数有多种方法,可以是某种算法也可以根据某种或多种随机原创 2021-11-20 16:27:24 · 1151 阅读 · 0 评论 -
2021SC@SDUSC libqs主要数据结构及头文件分析
src / kem /kem. h关键封装机制。该文件包含两个有关使用OQS_KEM API 示例。src/kem/example_kem.c第一个示例直接使用单个方案的算法,不使用动态内存分配 - 所有缓冲都分配在堆栈上,使用预处理器宏指示大小。由于算法可以在编译时间禁用,程序员应将代码包裹在#ifdefs中。第二个示例使用OQS_KEM对象来使用运行时间指定的算法。因此,它使用动态内存分配 - 所有缓冲器必须由程序员进行 malloc’ed,使用相关 OQS_KEM对象的相应长度成员指示大小。由原创 2021-11-20 16:23:04 · 667 阅读 · 0 评论 -
2021SC@SDUSC椭圆曲线加密
2021SC@SDUSC20 椭圆曲线20.1 ECC介绍椭圆曲线算法可以看作是定义在特殊集合下数的运算,满足一定的规则。椭圆曲线在如 下两个域中定义:Fp 域和 F2m 域。Fp 域,素数域,p 为素数;F2m 域:特征为 2 的有限域,称之为二元域或者二进制扩展域。该域中,元素的个数为 2m 个。椭圆曲线标准文档如下:X9.62Public Key Cryptography For The Financial Services Industry: The Elliptic Curve原创 2021-11-20 16:21:01 · 712 阅读 · 0 评论 -
2021SC@SDUSC rsa分析
2021SC@SDUSC17.1 RSA介绍RSA算法是一个广泛使用的公钥算法。其密钥包括公钥和私钥。它能用于数字签名、身份认证以及密钥交换。RSA密钥长度一般使用1024位或者更高。RSA密钥信息主要包括[1]: n : 模数 e : 公钥指数 d : 私钥指数 p : 最初的大素数 q : 最初的大素数 dmp1 : e*dmp1 = 1 (mod (p-1)) dmq1 : e*d原创 2021-11-20 16:07:36 · 278 阅读 · 0 评论 -
2021SC@SDUSC 量子加密库libqs
2021SC@SDUSCliboqsliboqs 是量子安全加密算法的开源 C 库。liboqs提供:量子安全密钥封装机制 (KEM) 和数字签名算法的开源实现集合(参见受支持的算法列表))这些算法的常见 API测试线束和基准测试程序概述开源。liboqs 是根据麻省理工学院许可证发布的量子安全加密算法的 C 库。liboqs 包含一些外部组件,这些组件使用不同的许可证。多平台。liboqs 建立在 Linux、macOS 和 Windows 上, 支持 x86 和 ARM 架构, 以及原创 2021-11-11 19:43:52 · 434 阅读 · 0 评论 -
2021SC@SDUSC 后量子密码NTRU的参考实现
2021SC@SDUSCPQ Crypto Cataloghttps://github.com/kriskwiatkowski/pqc提交给 NIST PQC 标准化流程的量子安全签名和 KEM 方案。该项目目标是在 C 和 Rust 中提供易于使用的 API 以支持实验。 该代码源自提交给 NIST 后量子加密标准化的 PQClean 项目 。用户不应期望此代码提供任何级别的安全性。 该库不打算用于实时生产系统。支持NameNIST Roundx86 optimized原创 2021-11-08 00:46:52 · 467 阅读 · 0 评论 -
2021SC@SDUSC sm2数字签名算法
2021SC@SDUSC数字签名1. 参数与密钥产生参数的产生、密钥的产生与SM2加密解密算法相同。2. 数字签名生成验证过程1.SM2数字签名生成算法假设待签名的消息为M,为了获取消息M的数字签名(r,s),作为签名者的用户A应实现以下运算步骤:(1)置M‾=ZA∣∣M\overline{M}=Z_A ||MM=ZA∣∣M其中ZA是用户的A的可辨标识、部分椭圆曲线系统参数和用户A公钥的杂凑值;(2)计算,e=Hv(M‾)e=H_v (\overline{M})e=Hv(M)并将生成e的原创 2021-10-31 23:31:31 · 1136 阅读 · 0 评论 -
2021SC@SDUSC cuda实现模幂运算源码分析(2)
2021SC@SDUSC数论函数void cgbn_binary_inverse(cgbn_env_t env, cgbn_t &r, const cgbn_t &x)计算 x mod 2bitsx\,mod\,2 ^{bits}xmod2bits的模逆,要求 x 是奇数。void cgbn_gcd(cgbn_env_t env, cgbn_t &r, const cgbn_t &a, const cgbn_t &b)计算a,b的最大公因数。 返回 b原创 2021-10-24 20:54:27 · 297 阅读 · 1 评论 -
2021SC@SDUSC cuda实现模幂运算源码分析(1)
2021SC@SDUSCCGBN概念CGBN 的典型用例是构建处理大量问题实例的内核,其中每个问题实例都需要无符号多精度算术计算。 典型的 CUDA 方法是为每个问题实例分配一个线程,但是多精度算法需要大量寄存器资源,因此将多精度值分布到一组连续线程中会更有效。这是CGBN实现的基本逻辑。从一个样本内核开始,该内核传递了一系列问题实例,对于每个实例,内核计算 的总和 a + b 并将结果存储在 r 中,其中 a 、 b 和 r 是 1024 位数字。#include "cgbn/cgbn.h"原创 2021-10-24 18:20:40 · 2907 阅读 · 0 评论 -
2021SC@SDUSC sm2算法加解密过程
2021SC@SDUSC1.SM2 加密算法假设要发送的消息为比特串M ,len为M的比特长度。为了对明文M进行加密,作为加密者的用户A应进行以下运算步骤。(1)用随机数发生器产生随机数k∈[1,n-1],其中n是椭圆曲线基点G的阶次。(2)计算椭圆曲线点 C1=[k]G=(x1,y1)C1=[k]G=(x_1,y_1)C1=[k]G=(x1,y1)(3)计算椭圆曲线上的点S=[h]PB S=[h]P_BS=[h]PB其中S不能为无穷远点O。(4)计算椭圆曲线点[k]PB=(x2,y2)[原创 2021-10-17 20:42:56 · 574 阅读 · 0 评论 -
2021SC@SDUSC sm2算法原理(2)
2021SC@SDUSC2. 基点的确定根据前面得到的参数p,a,b 和n,利用下面的算法可以求出具有大素数阶的基点。当参数a、b、p确定,这条曲线 就定下来了。先随机产生0到p-1间的整数作为基点x坐标,计算x3+ax+bx^3+ax+bx3+ax+b的结果再开方就得出基点y坐标,必须满足x,y为整数。又知道椭圆曲线上的任意非无穷远点可作为基点,得到基点G=(x,y)。基点G的阶n>4sqrt(p) n>4sqrt(p)n>4sqrt(p),其中函数sqrt()非负平方根。3.原创 2021-10-17 20:32:19 · 374 阅读 · 0 评论 -
2021SC@SDUSC sm2算法原理(1)
2021SC@SDUSCSM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。原创 2021-10-17 20:21:00 · 990 阅读 · 0 评论 -
2021SC@SDUSC-cuda编程
CUDA线程模型线程是程序执行的最基本单元,CUDA的并行计算就是通过成千上万个线程的并行执行来实现的。CUDA的线程模型自底向上依次为:Thread:线程,并行的基本单位Thread Block:线程块,互相合作的线程组,线程块有如下几个特点:允许彼此同步可以通过共享内存快速交换数据以1维、2维或3维组织Grid:一组线程块以1维、2维组织共享全局内存Kernel:在GPU上执行的核心程序,这个kernel函数是运行在某个Grid上的。One kernel <->原创 2021-10-10 11:28:02 · 90 阅读 · 0 评论 -
2021SC@SDUSC-源码分析1-核心运算函数
openssl中的模幂运算1.第一种下面函数可以进行更有效率的模乘和模除,假如在重复在同一模下重复进行模乘和模除计算,计算r=(a*b)%m 利用了recp=1/mBN_RECP_CTX *BN_RECP_CTX_new(void);void BN_RECP_CTX_init(BN_RECP_CTX *recp);void BN_RECP_CTX_free(BN_RECP_CTX *recp);int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM原创 2021-10-10 11:00:35 · 260 阅读 · 0 评论 -
2021SC@SDUSC——使用CUDA/GPU技术加速密码运算(一)
项目描述这是一个某公司委托的预研项目。该公司主要产品之一是基于硬件芯片的加密卡/加密机。考虑到虽然当前政策倾向于批准基于硬件的加密设备,但是下一步可能会放开其他类型的实现形式,比如使用GPU加速运算的加密设备和服务,因此要预研使用CUDA/GPU加速的密码运算技术。工作计划是在GMSSL(一个开源的密码算法和SSL库以支持国产密码SM系列算法为特色)中,使用GPU实现RSA、SM2等公钥算法。RSA的GPU实现可以参考libgpucrypto(一个使用CUDA的RSA开源实现项目)。具体工作需要改进l原创 2021-09-29 20:35:06 · 2245 阅读 · 0 评论