如何使用matlab在有限域上绘制椭圆曲线

时间:2012-02-06 07:18:07

标签: matlab cryptography matlab-figure

我需要在有限域F17上绘制一条椭圆曲线(换句话说,我想在曲线上绘制一些特定的点),但不知怎的,我不能正确。

曲线由等式定义:

y^2 = x^3 +x + 1 (mod 17)

我尝试了以下方式,但它不起作用。

  
    
      

对于x = 0:16,绘图(x,mod(sqrt(x ^ 3 + x + 1),16),'r')',结束

    
  

有人可以帮忙吗?

[更新]

根据内森和比尔的建议,这是一个稍微修改过的版本。

 x = 0:18
 plot(mod(x,16), mod(sqrt(x.^3+x+1), 16),'ro')

但是,我觉得这个数字是错误,例如,当x = 4时,y不是整数。

enter image description here

3 个答案:

答案 0 :(得分:3)

您必须测试满足等式y^2 = x^3 +x + 1 (mod 17)的所有点。由于它是一个有限域,你不能简单地取右边的平方根。

我会这样做:

a=0:16  %all points of your finite field
left_side = mod(a.^2,17)  %left side of the equation
right_side = mod(a.^3+a+1,17) %right side of the equation

points = [];


%testing if left and right side are the same 
%(you could probably do something nicer here)
for i = 1:length(right_side)
    I = find(left_side == right_side(i));
    for j=1:length(I)
        points = [points;a(i),a(I(j))];
    end
end

plot(points(:,1),points(:,2),'ro')
set(gca,'XTick',0:1:16)
set(gca,'YTick',0:1:16)
grid on;

elliptic curve

答案 1 :(得分:0)

Matlab本身适用于矢量。

你的语法很接近,但需要进行矢量化:

x = 0:16
plot(x, mod(sqrt(x.^3+x+1), 16),'r')

请注意.中的x.^3。这告诉Matlab单独复制x的每个元素,而不是将向量x提升到第3个幂,这并不意味着什么。

答案 2 :(得分:0)

如果要在真实数字上绘图,可以使用此代码:

syms x y;
v=y^2-x^3-x-1;
ezplot(v, [-1,3,-5,5]);

但是,对于模数的情节,首先你可以写下面的代码;

X=[]; for x=[0:16], z=[x; mod(x^3+x+1,17)]; X=[X, z]; end, X,

然后,您可以使用坐标矩阵绘制X