使用Java Card API,它支持"椭圆曲线,如何在给定已知密钥的情况下计算公钥。
在DH共享秘密协商之后,我对导出公共共享密钥感兴趣。根据TR-03111和X9.63,不应使用DH ECC密钥协议的共享密钥,但根据我的理解,x坐标的仿射表示(与共享密钥相关的公钥的x分量)作为私钥)将被使用。
使用BigInteger算法或ECPoint.multiply()这很容易,但Java Card中不存在这样的API。
答案 0 :(得分:1)
此乘法不能直接用于Java Card。基本上,Java Card会为您隐藏低级操作。
但是,如果你有一个相对较新的Java卡,你可以使用KeyAgreement
创建的ALG_EC_SVDP_DH_PLAIN_XY
实例来解决这个问题。您可以做的是创建一个ECPublicKey
,其中公钥点简单地设置为点G.此基点G是域参数的一部分。私钥当然应该设置为您的值。
然后归结为执行密钥协议;协议的结果将是公钥的X和Y点。
请注意,对任何算法常量的支持取决于卡的实现。常量将存在 - 如果实现的API足够新 - 但算法可能无法实现。