【问题标题】:Computing ECC public key from a private key in JavaCard从 JavaCard 中的私钥计算 ECC 公钥
【发布时间】:2017-07-11 03:05:26
【问题描述】:

使用“支持”椭圆曲线的 Java Card API,我如何在已知密钥的情况下计算公钥。

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

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

【问题讨论】:

  • 你使用 KeyAgreement 类吗?为什么不直接调用 generateSecret?
  • 我使用了 KeyAgreement 类来生成共享密钥。现在我想将共享密钥用作私钥并派生公钥。据我所知,KeyAgreement 不能用于此。
  • Stefan 发布了一个 Answer 说“如果你依赖于 javacard Towards Low-level CryptographicPrimitives for JavaCards 中引入的 JCMathLib

标签: smartcard javacard elliptic-curve


【解决方案1】:

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

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

那么归根结底就是执行一个关键协议;协议的结果将是公钥的 X 点和 Y 点。


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

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 2016-09-20
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多