密码学_椭圆曲线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码学_椭圆曲线相关的知识,希望对你有一定的参考价值。

取p=29,求出椭圆曲线y^2=x^3+4x+20的全部解点

用穷举法求椭圆曲线

第一步:列表,求出0~28(0<=i<p)关于等式x^3+4x+20 mod29  的结果

可用程序完成此步骤:

代码如下:

#include<stdio.h>
int main()
{
int i,y,z;
printf("x x^3+4*x+20 \\n");
for (i = 0; i < 29; i++)
{
y = i*i*i + 4 * i + 20;
z = y % 29;
printf( "%d %d\\n", i, z);
}

}

计算结果如下图:

技术分享

 

第二步,计算i(0<=i<p)的平方模29的结果

0~28的平方模29的结果为:

技术分享

代码为:

#include<stdio.h>
int main()
{
int i, y;

printf("x x^2 mod 29\\n");
for (i = 0; i < 29; i++)
{
y = i*i%29;
printf("%d %d \\n",i,y);
}
}

第三步,通过对比i^3+4i+20 mod29的结果是否有i^2吗mod29与之相等,有的话在“是否模29的平方剩余”处写Y,并将对应的I写入y列

 

x

X^3+4x+20 mod 29

是否模29的平方剩余

y

0

20

Y

7,22

1

25

Y

5,24

2

7

Y

6,23

3

1

Y

1,28

4

13

Y

10,19

5

20

Y

7,22

6

28

Y

12,17

7

14

N

 

8

13

 

10,,19

9

2

N

 

10

16

 

4,,25

11

3

N

 

12

27

N

 

13

7

 

6,23

14

7

 

6,,23

15

4

 

2,27

16

4

 

2,27

17

13

 

10,,19

18

8

N

 

19

24

 

1316

20

9

 

3,26

21

27

N

 

22

26

N

 

23

12

N

 

24

20

 

7,22

25

27

N

 

26

10

N

 

27

4

 

2,27

28

15

N

 

说明

第一个程序结果

第一个和第二个程序对比结果

相应2个数加起来等于p。如第27行的7+22=29

然后将结果读出加上O点即可,即为

(0,7)(0,22)(1,5)(1,24)(2,6)(2,23)(3,1)(3,28)(4,10)(4,19)(5,7)(5,22)

(6,12)(6,17)(8,10)(8,19)(10,4)(10,25)(13,6)(13,23)(14,6)(14,23)(15,2)(15,27)

(16,2)(16,27)(17,10)(17,19)(19,13)(19,16)(20,3)(20,26)(24,7)(24,22)(27,2)(27,27)加上O点(∞,∞)

共37个解点

37位素数,所以,所以此群为循环群

以上是关于密码学_椭圆曲线的主要内容,如果未能解决你的问题,请参考以下文章

椭圆曲线密码体制(ECC)简介

GF(p)上的ELGamal型椭圆曲线密码详解(Java实现)

椭圆曲线密码学

Golang 椭圆加密算法实现

椭圆曲线加密

ECC椭圆曲线加密