1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第七周)

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第七周)

时间:2020-12-09 19:39:01

相关推荐

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第七周)

SC@SDUSC

本周对于国密SM2算法原理进行简要的介绍,方便后续对其在CUDA上进行设计。

一、SM2加解密过程

SM2 国密非对称加密算法,属于椭圆曲线密码体制(ECC

Author:John

基于椭圆曲线的离散对数难题,目前 SM2 256 bit 加密算法是相当安全的,相当于 RSA 2048 bit 及以上的安全性

有公钥、私钥之分,公钥给别人,可以在一定范围内公开,私钥留给自己,必须保密。由私钥可以计算公钥;由公钥计算私钥,是相当困难的,现阶段是不可能

加密过程:

设需要发送的消息为比特串 M ,klen 为 M 的比特长度。

为了对明文 M 进行加密,作为加密者的用户 A 应实现以下运算步骤:

A1:用随机数发生器产生随机数k∈[1,n-1];

A2:计算椭圆曲线点 C1=[k]G=(x1,y1),([k]G 表示 k*G )将C1的数据类型转换为比特串;

A3:计算椭圆曲线点 S=[h]PB,若S是无穷远点,则报错并退出;

A4:计算椭圆曲线点 [k]PB=(x2,y2),将坐标 x2、y2 的数据类型转换为比特串;

A5:计算t=KDF(x2 ∥ y2, klen),若 t 为全0比特串,则返回 A1;

A6:计算C2 = M ⊕ t;

A7:计算C3 = Hash(x2 ∥ M ∥ y2);

A8:输出密文C = C1 ∥ C2 ∥ C3。

解密过程:

设klen为密文中C2的比特长度。

为了对密文C=C1 ∥ C2 ∥ C3 进行解密,作为解密者的用户 B 应实现以下运算步骤:

B1:从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;

B2:计算椭圆曲线点 S=[h]C1,若S是无穷远点,则报错并退出;

B3:计算[dB]C1=(x2,y2),将坐标x2、y2的数据类型转换为比特串;

B4:计算t=KDF(x2 ∥ y2, klen),若t为全0比特串,则报错并退出;

B5:从C中取出比特串C2,计算M′ = C2 ⊕ t;

B6:计算u = Hash(x2 ∥ M′ ∥ y2),从C中取出比特串C3,若u != C3,则报错并退出;

B7:输出明文M′。

原理:

用户 A 持有公钥PB=[dB]G(仅有PB值),用户 B 持有私钥 dB

加密:C1=k*G C2=M⊕(k*PB) 解密:M′=C2 ⊕ (dB*C1) # 这里只叙述基本原理,便于理解

证明:dB*C1=dB*k*G=k*(dB*G)=k*PB 因此,M′=C2 ⊕ (dB*C1)=M⊕(k*PB)⊕(k*PB)=M 得证

注:此实现算法所研究的椭圆曲线是基于域 Fp 上的椭圆曲线

安全参数设置:

随机数 k 和私钥 dB 最好大点。

加密流程图如下图:

SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高

学习sm2算法,首先学习ECC算法。

二、ECC算法

首先,了解“椭圆曲线离散对数问题”,如下图:

上图中Q=kP不是简单的代数乘法,该表达式会在后面分析到。我们从图中信息很容易知道:已知私钥K基点P是很容易求出公钥Q的,但已知基点P公钥Q私钥K是非常困难的。这样的单向性正适合密码学。

接着来看“椭圆曲线”:

这里的“椭圆曲线”不能与高中所学的椭圆曲线方程划等号,这里所说的“椭圆曲线”,形状并不是椭圆。它知识类似于计算一个椭圆周长的方程而这样命名的。椭圆曲线始终关于x轴对称。

如图所示,括号内的条件是为了保证曲线不包含奇点,即曲线上任意一点都存在切线。

接下来,讲解其加法是怎样计算的。

计算A+B,首先过A、B两点作一条直线,交椭圆曲线于一点。再经过该点作一条平行于y轴的直线交椭圆曲线于另一点(也就是图中的C点),那么C=A+B

可以看出这里的加法区别于代数上坐标的加法运算。根据这个算法很容易就知道A+(-A)=∞,如上图右边部分,本身连线就与y轴平行,无交点(相当于相交于一个无穷远点)。

由上图就可以知道如何计算A+A也就是2A了。若计算A+A,根据上面介绍的算法很容易知道,假设B无限接近于A,则不难看出A+A实际上就是过A点做椭圆曲线的切线交椭圆曲线于一点,再通过该点作平行于y轴的直线交曲线于另一点(如上图C点),那么C=2A=A+A。以此类推计算A的倍数例如3A,就是A+2A,将其看作A+B就可以作图得出C,即3A。

综上所述,我们就可以知道其中的单向性了。Q=kP,如同上述的3A=3*A,已知k=3,P=A,是很容易求出3A的,但已知Q=3A,P=A,就很难推出k=3。由于这里举例中k太小,不好理解,我们来看下图:

如上图你会发现A(图中为G)的倍数没有任何的规律,这就意味着越难破解,这不正是密码学所需要的?因此,回到之前你就能理解为什么很难推出k=3了。

PQ公开,k保密。因为Q=kP,所以M+rQ-k(rP)=M.

以上图片介绍了“有限域”,以及在有限域上的椭圆曲线运算。假设A、B两点的坐标,求C(也就是A+B)的坐标,根据上图公式一步一步计算得到对应坐标即可。

由上图若计算2A用人工手算发现过程比较繁琐,这仅仅是2A,更别说k取大值,因此下面有较为简化的算法:

通过上面知识的简单学习基本掌握了ECC加密算法。

ECC算法描述

1、用户A选定一条适合加密的椭圆曲线Ep(a,b)(如:y2=x3+ax+b),并取椭圆曲线上一点,作为基点G。

2、用户A选择一个私有密钥k,并生成公开密钥(公钥PB)K=kG。

3、用户A将Ep(a,b)和点(公钥)K,G传给用户B。

4、用户B接到信息后 ,将待传输的明文(M)编码到Ep(a,b)上一点M,并产生一个随机整数r(r<n)。加密开始

5、用户B计算点C1=M+rK;C2=rG。

6、用户B将C1、C2传给用户A。

7、用户A接到信息后,计算C1-kC2,结果就是点M。因为C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M

再对点M进行解码就可以得到明文。

密码学中,描述一条Fp上的椭圆曲线,常用到六个参量:

T=(p,a,b,G,n,h)。

(p 、a 、b 用来确定一条椭圆曲线,G为基点,n为点G的阶,h 是椭圆曲线上所有点的个数m与n相除的整数部分)

这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:

1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;

2、p≠n×h;

3、pt≠1 (mod n),1≤t<20;

4、4a3+27b2≠0 (mod p);

5、n 为素数;

6、h≤4。

三、SM2算法简介

SM2算法与RSA算法一样,同属于非对称算法体系,是属于椭圆曲线加密(ECC)算法的一种。但与RSA算法不同的是RSA算法是基于大整数分解数学难题,SM2算法是基于椭圆曲线上点群离散对数难题。

相对于RSA算法,SM2算法具有以下优点:

安全性高。192位的SM2密码强度已经比RSA 2048位密码强度要高。

存储空间小。SM2算法的密码一般使用192-256位,RSA算法密码一般需要使用2048-4096位。

签名速度快。SM2在私钥运算上,速度远比RSA快得多。

国产算法。由国家密码管理部门制订规范,不存在不可公开的密码,保证无国外可利用的后门。

目前认为在国内被非常广泛使用的RSA 1024位算法不再安全,国家密码管理局下达了通知:自7月1日起,投入运行并使用公钥密码的信息系统,应使用SM2椭圆曲线密码算法。

详细的SM2算法原理流程步骤参考博客:SM2 SM3 SM4简介_cqwei1987的博客-CSDN博客

本篇参考博客:密码学算法之 SM2国密算法_BlackNight168的博客-CSDN博客_sm2算法

参考视频:【ECC加密算法】| ECC加密原理详解| 椭圆曲线加密| 密码学| 信息安全_哔哩哔哩_bilibili

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。