[区块链] 密码学——椭圆曲线密码算法(ECC)

本文介绍了椭圆曲线密码学(ECC)的基础知识,包括椭圆曲线的数学概念、射影平面坐标系、椭圆曲线上的加法运算以及在密码学中的应用。在ECC中,加密和解密基于椭圆曲线上的点运算,为区块链(如比特币)提供安全的公钥和私钥生成。文章还简述了ECC的加密通信过程和签名验证机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天在学椭圆曲线密码(Elliptic Curve Cryptography,ECC)算法,自己手里缺少介绍该算法的专业书籍,故在网上查了很多博文与书籍,但是大多数博客写的真的是。。。你懂的。。。真不愧是 ‘天下文章一大抄’ 啊! 雷同不说,关键是介绍的都不是很清楚,是我在阅读过程中、产生的很多疑问无法解决!例如:只来句‘P+Q=R’,但是为什么等于呢?是根据什么计算出来的呢? 后来查了好久,才发现:这是规定的、是定义!瞬间很是无语!

  好了,不吐槽了,为了方便大家对椭圆曲线密码算法有系统的了解,我整理了几篇较好的博文,并加上了自己的见解!

  [  时间有限、见解不深,如出现错误,欢迎指正!]

 


  

  比特币使用椭圆曲线算法生成公钥和私钥,选择的是secp256k1曲线。

  椭圆曲线密码学(Elliptic Curve Cryptography) 的缩写。该算法是基于椭圆曲线数学的一种公钥密码的算法,其安全性依赖于椭圆曲线离散对数问题的困难性。

  在ECC流行起来之前,几乎所有的公钥算法都是基于RSA、DSA和DH ———— 基于模运算的可选加密系统。RSA及其友类算法在当前仍非常重要,经常与ECC一并使用。不过,RSA及其友类算法背后的原理很容易解释,因而被广泛理解,一些简单的实现也可以很容易编写出来;但ECC的实现基础对于大多数人来说仍很神秘。

   具体来说,我将触及以下主题:

  1. 数学上的椭圆曲线及相关概念

  2. 密码学中的椭圆曲线

  3. 椭圆曲线上的加密/解密

  4. 椭圆曲线签名与验证签名

 


 

一、数学上的椭圆曲线及相关概念

   1.1  从平行线谈起

  平行线,永不相交。不过到了近代这个结论遭到了质疑。平行线会不会在很远很远的地方相交?事实上没有人见到过。所以“平行线,永不相交”只是假设(大家想想初中学习的平行公理,是没有证明的)。既然可以假设平行线永不相交,也可以假设平行线在很远很远的地方相交了。即平行线相交于无穷远点P∞(请大家闭上眼睛,想象一下那个无穷远点P∞,P∞是不是很虚幻,其实与其说数学锻炼人的抽象能力,还不如说是锻炼人的想象力)。给个图帮助理解一下:

  

  直线上出现P∞点,所带来的好处是所有的直线都相交了,且只有一个交点。这就把直线的平行与相交统一了。为与无穷远点相区别把原来平面上的点叫做平常点。

  以下是无穷远点的几个性质。

  ▲直线L上的无穷远点只能有一个。(从定义可直接得出)
  ▲平面上一组相互平行的直线有公共的无穷远点。(从定义可直接得出)
  ▲ 平面上任何相交的两直线L1,L2有不同的无穷远点。(否则L1和L2有公共的无穷远点P ,则L1和L2有两个交点A、P,故假设错误。)
  ▲平面上全体无穷远点构成一条无穷远直线。(自己想象一下这条直线吧)
  ▲平面上全体无穷远点与全体平常点构成射影平面。

 

  1.2  射影平面坐标系

  射影平面坐标系是对普通平面直角坐标系(就是我们初中学到的那个笛卡儿平面直角坐标系)的扩展。我们知道普通平面直角坐标系没有为无穷远点设计坐标,不能表示无穷远点。为了表示无穷远点,产生了射影平面坐标系,当然射影平面坐标系同样能很好的表示旧有的平常点(数学也是“向下兼容”的)。

  我们对普通平面直角坐标系上的点A的坐标(x,y)做如下改造:
  令x=X/Z ,y=Y/Z(Z≠0);则A点可以表示为(X:Y:Z)。
  变成了有三个参量的坐标点,这就对平面上的点建立了一个新的坐标体系。

  例1:求点(1,2)在新的坐标体系下的坐标。
  解:∵X/Z=1 ,Y/Z=2(Z≠0)∴X=Z,Y=2Z ∴坐标为(Z:2Z:Z),Z≠0。即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0的坐标,都是(1,2)在新的坐标体系下的坐标。

  我们也可以得到直线的方程aX+bY+cZ=0(想想为什么?提示:普通平面直角坐标系下直线一般方程是ax+by+c=0)。新的坐标体系能够表示无穷远点么?那要让我们先想想无穷远点在哪里。根据上一节的知识,我们知道无穷远点是两条平行直线的交点。那么,如何求两条直线的交点坐标?这是初中的知识,就是将两条直线对应的方程联立求解。平行直线的方程是:aX+bY+c1Z =0; aX+bY+c2Z =0  (c1≠c2);
  (为什么?提示:可以从斜率考虑,因为平行线斜率相同);

  将二方程联立,求解。有c2Z= c1Z= -(aX+bY),∵c1≠c2 ∴Z=0  ∴aX+bY=0;
  所以无穷远点就是这种形式(X:Y:0)表示。注意,平常点Z≠0,无穷远点Z=0,因此无穷远直线对应的方程是Z=0。

  例2:求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点。
  解:因为L1∥L2 所以有Z=0, X+2Y=0;所以坐标为(-2Y:Y:0),Y≠0。即(-2:1:0)(-4:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值