常用的加解密算法
Last Update:
Word Count:
Read Time:
常用的加解密算法
ECC
考虑如下等式:K=kG [其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数],不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。这就是椭圆曲线加密算法采用的难题,我们把点G称为基点(base point)。
椭圆曲线在代数上的表示是下面这个方程: y2 = x3 + ax + b 其中,a = 0, b = 7 (比特币系统所使用的版本),它的图形如下:
加解密流程
1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。
2、用户A选择一个私有密钥k,并生成公开密钥K=kG。
3、用户A将Ep(a,b)和点K,G传给用户B。
4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r。
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进行解码就可以得到明文。
签名过程
1、选择一条椭圆曲线Ep(a,b),和基点G;
2、选择私有密钥k(k<n,n为G的阶),利用基点G计算公开密钥K=kG;
3、产生一个随机整数r(r<n),计算点R=rG;
4、将原数据和点R的坐标值x,y作为参数,计算SHA1做为hash,即Hash=SHA1(原数据,x,y);
5、计算s≡r - Hash * k (mod n) 6、r和s做为签名值,如果r和s其中一个为0,重新从第3步开始执行
验证过程如下:
1、接受方在收到消息(m)和签名值(r,s)后,进行以下运算
2、计算:sG+H(m)K=(x1,y1), r1≡ x1 mod p。
3、验证等式:r1 ≡ r mod p。
4、如果等式成立,接受签名,否则签名无效。
参考:https://cloud.tencent.com/developer/article/1141115
RSA
RSA算法原理
- RSA定理:若P和Q是两个相异质数,另有正整数D和E,其中E的值与
- (P-1)(Q-1)的值互质,并使得DE%(P-1)(Q-1)=1,有正整数M,且M<PQ,设:
- C=ME%PQ,B=CD%PQ,则有M=B。
生成公钥和密钥
- 随意选择两个大的素数P和Q,且P不等于Q
- 令N=PQ
- 令T=(P-1)(Q-1)
- 选择一个整数E,作为一个密钥,使E与T互质(即E与T的最大公约数为1),且E必须小于T
- 由公式DE%T=1,计算得到D的值,作为另一密钥
- 将(N,E)作为公钥,(N,D)作为私钥,当然也可互换。
用公钥加密信息
- 发送方收到公钥(N,E)后,通过公钥对数据进行加密,操作如下:
- 明文:M
- 加密:ME%N=C
- 密文:C
用私钥解密信息
- 接收方收到密文C后,通过私钥(N,D)进行解密,得到明文M,操作如下:
- 密文:C
- 解密:CD%N=M
- 明文:M
AES
DES
打赏点小钱

