从JavaCard中的私钥计算ECC公钥

时间:2017-07-11 03:05:27

标签: smartcard javacard elliptic-curve

使用Java Card API,它支持"椭圆曲线,如何在给定已知密钥的情况下计算公钥。

在DH共享秘密协商之后,我对导出公共共享密钥感兴趣。根据TR-03111和X9.63,不应使用DH ECC密钥协议的共享密钥,但根据我的理解,x坐标的仿射表示(与共享密钥相关的公钥的x分量)作为私钥)将被使用。

使用BigInteger算法或ECPoint.multiply()这很容易,但Java Card中不存在这样的API。

1 个答案:

答案 0 :(得分:1)

此乘法不能直接用于Java Card。基本上,Java Card会为您隐藏低级操作。

但是,如果你有一个相对较新的Java卡,你可以使用KeyAgreement创建的ALG_EC_SVDP_DH_PLAIN_XY实例来解决这个问题。您可以做的是创建一个ECPublicKey,其中公钥点简单地设置为点G.此基点G是域参数的一部分。私钥当然应该设置为您的值。

然后归结为执行密钥协议;协议的结果将是公钥的X和Y点。

请注意,对任何算法常量的支持取决于卡的实现。常量将存在 - 如果实现的API足够新 - 但算法可能无法实现。