利用椭圆曲线进行加密通信

一个利用椭圆曲线进行加密通信的过程:

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(r<n)。
  5、用户B计算点P1=M+rK;P2=rG。
  6、用户B将P1、P2传给用户A。
  7、用户A接到信息后,计算P1-kP2,结果就是点M。

因为P1-kP2=M+rK-k(rG)=M+rK-r(kG)=M,再对点M进行解码就可以得到明文。

在这个加密通信中,如果有一个偷窥者H ,他只能看到Ep(a,b)、K、G、P1、P2。
H有两种方式获得明文M,一是通过K、G求k,二是通过P2、G求r,都是相对困难的,都需要通过穷举法暴力破解k或r,算法复杂度为O(n)。而在做乘法的时候,知道k和G求K,可以有捷径,比如说通过倍乘相加的方式,这样可以将算法复杂度减少到O(logn)。因此,H很难得到A、B间传送的明文信息。

简单来说,假如有种运算,乘法很容易,但是不存在除法。令G=7,私钥=100,计算出公钥=700,发给前端是7和700。
前端要发送的密文假设是28,那么他寻找一个随机数r,发给后端28+700r 以及 7r
后端拿到28+700r和7r后,可以很轻松地计算出密文28= 28+700r- 7r*私钥100
H想要破解,只有通过700、7求乘数100,或者通过7r、7来求乘数r的值(M=P1-rK),只能穷举破解。

SM2非对称加密的结果由C1,C2,C3三部分组成。最开始的国密标准的结果是按C1C2C3顺序的,新标准的是按C1C3C2顺序存放的。
其中C1是加密方根据生成的随机数r,计算出的的椭圆曲线点C1 = rG
C2是密文数据,首先计算rK=X,再以X的两坐标为参数,以某种方式计算出一个字节流t,将字节流t异或明文M获得密文C2,C2=F(rK) ^ M
C3是SM3的摘要值。

解密:因为 M = F(rK) ^ C2,又因为kC1 = rkG = rK,所以 M = F(kC1) ^ C2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值