常用的加解密算法

First Post:

Last Update:

Word Count:
823

Read Time:
3 min

常用的加解密算法

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

打赏点小钱
支付宝 | Alipay
微信 | WeChat