我有一张支持JavaCard 2.2.2的智能卡,我想在椭圆曲线上开发一个带有票据的签名。为此,我需要计算椭圆曲线上 2 个点的总和。我读过JavaCard的API,我认为这是不可能的,事实上有一些关于椭圆曲线的东西,但仅适用于已经开发的算法(例如ECDSA的ECPrivateKey......)但是当你想创建一个ECPrivateKey,你必须给出定义椭圆曲线的参数,所以它是在某个地方定义的,对吗?
简而言之,是否可以开发一个 Java cardlet,在椭圆曲线上进行计算(求和、点的乘积...)?
我对此有点迷失所以非常感谢你的帮助:)
不,目前使用标准 Java API 是不可能的,至少在不自己完成所有所需计算的情况下是不可能的,这将需要大量复杂的代码和乘法器的实现(这将不会表现良好) .
它可能只存在于某些专有 API 中(例如 JCOP 的某些版本,举一个完全随机的例子)。
ALG_EC_PACE_GM。这仍然不是点加法,但它可以用来实现 PACE,而无需专有扩展。当然,如果卡首先实现了该算法。
JCOP
API。示例可以在这里找到。 这里是关于JCOP的讨论。
import com.gemalto.javacard.gostservices.math.ECMathFp;
...
private ECPoint point;
...
如果有人可以在第 3 页分享有关主题的详细信息 - 这将非常有趣(至少对我来说)
JCMathlib实现ECPoint添加。您可以加载曲线、初始化 EC 点并执行所有原始 EC 点操作。
如果用于原型设计或侧信道攻击不在您的威胁模型中,那么它应该可以很好地工作。但请注意,该库不太可能像硬件实现那样抵抗侧信道攻击。免责声明:我是库作者之一。 :)