最简单的椭圆曲线算法及加解密签名验签流程

一条椭圆曲线可以使用二元三次方程来表示,比如:y2 = x3 + ax + b

下图展示了一些合法的椭圆曲线:

最简单的椭圆曲线算法及加解密签名验签流程最简单的椭圆曲线算法及加解密签名验签流程

椭圆曲线定义

定义椭圆曲线上两点相加为:给定曲线两点P,Q,P+Q等于P和Q两点的连线与曲线交点沿X轴的对称点,如果P=Q,则P+P等于P在曲线上的切线与曲线交点沿X轴的对称点

下图演示了如何计算P+Q=R(P≠Q),将P和Q相连得到和曲线的另一个交点-R,再将-R沿X轴做对称得到最终结果R。

最简单的椭圆曲线算法及加解密签名验签流程最简单的椭圆曲线算法及加解密签名验签流程

如果P和Q相等,下图演示了如何计算P+Q=2P=R(P=Q),使用P点的切线得到红点-R,沿着X轴做对称得到R点。

最简单的椭圆曲线算法及加解密签名验签流程最简单的椭圆曲线算法及加解密签名验签流程

如果我们从某一点出发(所谓的单位元,比如正整数域的1,代表一个空间里的最基本单元),不停做自增操作(所谓群操作,比如++),枚举出整个空间的集合元素可以用下图表示:

最简单的椭圆曲线算法及加解密签名验签流程

G点是一般是固定算法推荐的点。随机生成稳定性不可靠

从G出发,不停做切线,找对称点,依次得到-2G,2G,-4G,4G,-8G,8G... 我们可以想象,如果直接给你一个点 Q ,而且Q = NG,你是无法直接回答N的数值是多少(因为是做的切线,无法轻易的反推回去)。N就是我们的私钥,Q就是我们的公钥。

N如果是奇数,比如是3,可以使用G点与2G点的连线交易椭圆曲线一点,然后在做x轴的对称点即为3G点

 

椭圆加解密流程

流程:

  1. 随机生成K
  2. 公钥即为KG
  3. 生成随机数R,(随机数是通过生成随机数r乘以基点G得到) 。同样的公钥同样的私钥所以每次加密都是不一样的。

加密就可以完成了C = M +r*k*G

  1. 加密好的数据发送给对方,应该包含两个内容,一个是密文C,另一个是随机数R.
  2. 解密时即可通过私钥k,得到明文 M = C-k*R

最简单的椭圆曲线算法及加解密签名验签流程

椭圆曲线签名验签流程

原理私钥签名,公钥验签。

G点是基准基点,然后通过一个随机数r,获取一个R=rG

模逆元是除法

私钥是k,公钥是kG

步骤:

  1. 通过消息散列h,随机数rG,私钥k,生成签名s= r(-1)(h+kx)。然后发送给接收者签名s和随机数rG
  2. 接收者验签,公钥kG,签名s,随机数rG,验证得到结果即为rG ,即表示比对成功。

最简单的椭圆曲线算法及加解密签名验签流程

椭圆曲线 秘钥交换协议ECDH

步骤:

A与B协商私钥

  1. A,B生成随机私钥a,b
  2. 首先协商生成一个基点G,发送给B
  3. 通过基点,各自发送自己的公钥 bG,aG
  4. 计算共享秘钥abG
  5. 窃听者无法计算出abG, 前向安全性