非对称加密之ECC椭圆曲线加密

非对称加密之ECC椭圆曲线加密

基于数学难题:椭圆曲线上离散对数问题

椭圆曲线

​ 如果用非常学术的话来说,一条椭圆曲线是在射影平面上满足威尔斯特拉斯方程(Weierstrass)所有点的集合

$Y^2Z+a_1XYZ+a_3YZ^2=X^3+a_2X^2Z+a_4XZ^2+a_6Z^3$

​ 而且具有如下特点

  • 椭圆曲线为齐次方程

  • 椭圆曲线上每一个点都必须是光滑的,也就是处处可导的。

    其图像如下图所示

  • 观察其图像也会发现,关于x轴是对称的。

    ​但是上面的介绍有点过于数学,而且这图象也一点不像曲线啊。但其实,所谓的椭圆曲线,是其方程跟椭圆周长的计算方程相似,才得名椭圆曲线

   ​非椭圆曲线图示:

   

椭圆曲线普通方程

​ 上面的那个关于椭圆曲线的式子是有点过于复杂的。但是在ECC的加密算法中,并不需要用到那么复杂的方程,会简化到如下形式。

$y^2=x^3+ax+b$

但其中a、b会满足如下约束条件
$4a^3+27b^2\neq0$,该约束条件用于确保椭圆曲线的光滑性,也就是可导性。

椭圆曲线上离散化

​ 椭圆曲线是连续的,好像并不适合运用在加密运算上。所以,我们必须把椭圆曲线变成离散的点,并令其定义在有限域上。

​ 将椭圆曲线离散化,也就是将椭圆曲线上的点转换为点集合,一般取整数化的点,所有的点也就成呈现离散化分布。而为了将其引入到密码学领域,我们在引入有限域的概念。

​ 有限域GF(p)的概念在AES中讲过,也就是伽罗华域,表示对n以内的两个数其进行运算后(如加、减、乘、除等),其结果仍然在n内。

​ 而在椭圆曲线内,有限域GF(p)也就是让椭圆曲线限定在(0,0)到(p-1,p-1)的象限内,集合中的点都离散分布在该象限内。

椭圆曲线上的加法运算

​ 在ECC加密算法中,我们需要用到关于椭圆曲线的加密算法,这跟我们常识上的加法运算往往是不一样的。

​ 这里必须要举例说明

​ 已知椭圆曲线$y^2=x^3-x$,点P、Q分别在椭圆曲线上,如图所示,计算P+Q=R的过程如图所示

​ 也就是两点所作直线交椭圆曲线另一点R‘,过R’作与Y轴平行的直线再交椭圆曲线于R。这个R,就是加法P+Q的结果。

椭圆曲线上的乘法运算

​ 所谓的乘法运算跟传统的乘法运算当然也不一样,当然也不是将两个点进行点乘。所谓椭圆曲线上的乘法运算是由加法推演来的。我们知道,传统乘法运算也是由数个数字相加得来的。椭圆曲线上乘法运算也类似,是指由多个椭圆曲线加法运算得来的,不过是同点加法

​ 接着上诉的加法运算,试想,如果P和Q取同一点的话会怎么样?怎样进行运算?

​ 对于P+P这样的同点运算,其结果为2P,这就是所谓的椭圆曲线乘法。其运算过程是作该点的切线交与椭圆曲线上的2P‘,作X轴的垂直线再交椭圆曲线上一点也就是我们的2P。

​ 然而这样的加法是一只可以持续下去的。比如点2P+点P也得到3P。过程同上。

有限域椭圆曲线运算

​ 已知有限域椭圆曲线 ​$y^2=x^3+x+1\ (mod\ 23)$,设两点$P(x_1,y_1)、Q(x_2,y_2)$,无论是过两点作直线还是同一个点的切线,都是可以列出方程来的。所以对于P+Q的结果​$R(x_3,y_3)$可以用下面的公式计算:

${\displaystyle if(P=Q),则k\ = \ \frac{3x_1^2+a}{2y_1}\ (mod\ p)}​$ 

​$\displaystyle else\ if(P\neq Q),则 k\ =\ \frac{y_2-y_1}{x_2-x_1}\ (mod\ p)$

$x_3{\equiv}k^2-x_1-x_2\ \ (mod\ p)​$

 

​ 例:假如$P(3,10),Q(9,7)$,求P+Q以及2P

  • 计算P+Q

    ${\displaystyle k=\frac{7-10}{9-3}=-2^{-1}\ mod\ 23}$

    这里需要2 mod 23的逆元,可采用拓展欧几里得算法,这里一眼就可以看出来我就不写了。

    $\because2^{-1}\ mod\ 23 =12$

    $\therefore-2^{-1}\ mod\ 23=11$

    $\therefore\ x_3=11^2-3-9\ (mod\ 23)=17$

    $y_3 = 11(3-17)-10(mod\ 23)=20

    $\therefore P+Q=R\therefore R(17,20)$

  • 计算2P

    ${\displaystyle k=\frac{3\times3^2+1}{2\times10}mod\ 23=7\times5^{-1}\ mod\ 23=6}$

    $\therefore x_4=6^2-3-3\ (mod\ 23)=7$

    $y_3=7(3-7)-10\ (mod\ 23)=12$

    $\therefore P+P=2P \therefore2P(7,12)$

​ 那么,如果我们将2P、3P、4P......一直计算下去的话,就可以在椭圆曲线上得到很多点。如下图,是一个模28的有限域椭圆曲线,P为(1,1)的乘法集合。

​ 可以在图中很明显地观察到,这是一个非常不具有规律性的点集合。那么对于密码学,我们知道,越是没有规律,就越是适用于加密算法。

​ 如果对于p=23,a=1,b=3,$E_{23}(1,3)$共有27个点如下:

​ (0,7) (6,15) (15,9) (0,16) (7,10) (15,14) (2,6) (7,13) (19,2) (2,17) (10,1) (19,21) (4,5) (10,22) (21,4) (4,18) (12,8) (21,19) (5,8) (12,15) (22,1) (5,15) (14,1) (22,22) (6,8) (14,22) O

​ 最后一点是O点,也就是无穷远处点,O+P=P。

椭圆曲线的困难性

​ 假如给定椭圆曲线上的两个点P和Q,k则为整数。

​ $Q=kP$

​ 意思就是,Q点由基点P经过椭圆曲线k倍乘法而得来。

  • 给定k和P,计算Q是很容易的

  • 而给定P和Q,求k是非常困难的(mod p一般取得非常大,穷举出k非常困难)

    这就是椭圆曲线困难性的体现。

ECC加密算法

公私钥的计算

​ 按以下步骤进行

  • 选取椭圆曲线$E_p(a,b)$(素数p一般取得非常大),并取椭圆曲线上一点作为基点P
  • 选定一个大数k作为私钥,并生成公钥$Q=kP$
  • 得到公钥集合$(P,Q)$,私钥k

加密过程

  • 在进行加密之前,要对明文消息M通过编码嵌入到曲线上,以便更好地进行运算,具体嵌入方法可参考有关文献。

  • 假如拥有公钥对$(P,Q)$

    选取随机数r,将嵌入到椭圆曲线上的明文消息M生成密文,$C_1=rP,C_2=M+rQ,即得到密文消息C=(rP,M+rQ)$

解密过程

  • 解密过程看起来挺简单的,假如我们手头现在拥有私钥k

    $M=C_2-kC_1=M+rQ-krP=M+rQ-rQ=M$

 

posted @ 2022-03-20 11:41  三木森林  阅读(522)  评论(0编辑  收藏  举报