【笔记】用Javascript实现椭圆曲线加密算法

本文通过JavaScript详细介绍了椭圆曲线加密算法的实现,包括点的定义、加法、乘法,以及ECDH密钥交换和ECDSA数字签名算法。通过代码示例和简单的验证,展示了算法的正确性和实用性。
摘要由CSDN通过智能技术生成

之前为了一个项目所以去学了下椭圆曲线加密算法,本来是想写篇笔记细写算法的,但写了半天也没写出来什么,所以不如把自己摸索的东西用代码写出来了。之前项目用的nodejs,所以这里就用js写了。所有代码几乎全部可以直接在F12的控制台中运行。

0x01 点的定义

ecc中最基础计算单位自然就是一个个点了,点的定义非常简单,只要new一个对象然后赋予其点的xy坐标即可。

class Point{
   
    constructor(x,y){
   
        this.x = BigInt(x);
        this.y = BigInt(y);
    }
}

由于在实际进行计算的时候涉及的数据通常都很大,所以这里把点的坐标都转换成大整数以方便后续计算。
在ECC中,点只有两种运算:加法和数乘。所以这里我们先来实现这两个算法。

0x02 点的加法

因为点的加法的定义:

画一条线穿过P和Q,则此直线必和曲线相交第三个点R。取R关于x轴的对称点-R,就是P+Q的结果。

所以当我们有点 (x1, y1) (x2, y2) 的时候,就可以做出直线:
y − y 1 = k ( x − x 1 ) + b y-y_1=k\left(x-x_1\right)+b yy1=k(xx1)+b

其中:
k = x 2 − y 1 x 2 − x 1 k=\frac{x_2-y_1}{x_2-x_1} k=x2x1x2y1
有了这两个式子再和椭圆曲线:
y 2 = x 3 + a x + b y^2=x^3+ax+b y2=x3+ax+b
相联立,就可以得到一个关于x的一元三次方程组,解出x3再代入1式就可以得到结果的点了。
接下来是一个点和自己相加。
按照定义,一个点和自己相加时画这个点的切线,得到切线的斜率后再带入13式就可以得到结果了。
计算切线的斜率可以通过求导的方式计算得出:
F ( x ) = x 3 + a x + b − y 2 F\left(x\right)=x^3+ax+b-y^2 F(x)=x3+ax+by2
F x ′ = 3 x 2 + a F_x^{'}=3x^2+a Fx=3x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值