我已经搜索了一些有关ECC的信息,但是到目前为止,我只发现了使用ECC的Diffie-Hellman密钥交换实现,但是我不想交换密钥,而是想像ElGamal中那样对数据进行加密和解密。 >我知道具有椭圆曲线的ElGamal应该是可能的(因为ElGamal基于DH),但是我不知道如何。
所以,谁能告诉我如何使用椭圆曲线实现ElGamal。
我认为我不需要太多背景信息,


什么是私钥,什么是公钥?
如何加密消息?和
如何解密消息?

就足够了。

评论

请注意,使用ECIES通过EC加密数据更为常见。 ECIES基本上是静态的Diffie-Hellman密钥协议,然后使用得到的密钥进行对称加密。

#1 楼

您的答案在Neal Koblitz的论文《椭圆曲线密码系统》中:


在字段$ \ mathbb {F} _q $和点$ P $上建立椭圆曲线$ E $顺序为$ N $的系统参数与EC-DDH相同。
您需要一个公共的已知函数$ f:m \ mapsto P_m $,它将消息$ m $映射到$ E上的$ P_m $点$。它应该是可逆的,一种方法是将曲线方程中的$ m $用作$ x $并计算相应的$ y $。
选择一个秘密键$ x \ in_R [1,N-1] $随机,将点$ Y = x P $作为公共密钥发布。
加密:选择随机$ k \ in_R [1,N-1] $,然后计算$ C = kP $和$ C'= kY $并计算$ P_m = f(m)$。密文是元组$(C,C'+ P_m)$。
解密:从密文$(C,D)$计算$ C'= xC $,并用$ P_m检索点$ P_m $。 = DC'=(k(xP)+ P_m)-(x(kP))$。然后使用$ f ^ {-1}(P_m)$计算消息$ m $。


评论


$ \ begingroup $
您正在使用$ \ mathbb {F} _q $表示从中选择ECC点坐标的字段。私钥是从1..N-1中选择的,其中N是ECC组的顺序,而不是从$ \ mathbb {F} _q $中选择。
$ \ endgroup $
–布鲁克·汉森(Brock Hansen)
2014年4月23日下午0:05

$ \ begingroup $
@BrockHansen更改了私钥“ generation”的描述。您能检查一下数学符号是否足够好?
$ \ endgroup $
–马腾·博德威斯♦
15年2月22日在16:08

$ \ begingroup $
@MaartenBodewes现在应该可以了。
$ \ endgroup $
– DrLecter
15年2月22日在17:16

$ \ begingroup $
@DrLecter嗯,是的,我已经想知道其他随机分量是否正确。我想他们必须受命令的限制:)我目前正在尝试将一条消息$ m $映射到Bouncy Castle的某个点,以解决此问题-如果有人能够帮助您,请这样做。
$ \ endgroup $
–马腾·博德威斯♦
15年2月22日在17:24

$ \ begingroup $
@MaartenBodewes您可以看一下本文(第2.4节显示了一种简单的标准方法)。我想我已经在这里某个地方回答了这样的问题,但现在找不到了:/
$ \ endgroup $
– DrLecter
15年2月22日在17:32