JavaCard - ECC 在 GF(2^n) 上的纯软件实现

JavaCard - pure software implementation of ECC over GF(2^n)

我有 NXP 的智能卡,支持 ECC over GF(p),但不支持 ECC over GF(2^n)。

在我的项目中,我需要使用这种特殊类型的智能卡(已经使用了数千个实例)。但是,我需要在 sect193r1 上添加 EC 签名验证,这是 GF(2^n) 上的曲线。

性能对我来说不是问题。这可能需要一些时间。签名验证不涉及任何私钥,因此安全和密钥管理也不是问题。不幸的是,我必须在我的智能卡中验证签名,而不是在配备智能卡的设备中验证签名 reader。

有什么解决办法吗?是否存在基于 GF(2^n) 的 EC 加密的纯软件 JavaCard 实现的任何现有源代码?

能够执行非对称加密的智能卡总是使用协处理器(通常包含蒙哥马利乘法器)来执行此操作。大多数智能卡(例如最初的 NXP SmartMX 处理器)仍然使用 8 位或 16 位 CPU 运行。那些 CPU 不是为对大量数字执行操作而设计的。不幸的是 Java Card 不直接支持对乘法器的调用——如果它有用的话。大多数卡(例如 SmartMX)也不支持 32 位(Java int)操作。

所以如果你想执行这样的计算,你必须自己编程,使用带符号的 8 位和带符号的 16 位原语。这将需要大量工作并且会非常缓慢。再加上处理 Java 字节码所需的开销,您将遇到惊人的迟缓。

只是更新一些额外的信息,以防有人仍在寻找解决方案。

OpenCryptoJC 库确实提供了 BigNumbers、EC 曲线原语操作等。因此您应该能够加载自己的曲线及其参数。

但是,如果卡本身不支持这条曲线,你可以使用库自己实现对曲线的操作。这不是微不足道的......

或者,如果您要使用的 GF(2^n) 曲线与另一个 GF(p) 之间存在任何映射,您可以尝试在 GF(p) 中执行所有操作,并将结果映射回 GF (2^n)。假设存在这样的映射,这可能更容易做到。

免责声明:我是 lib 作者之一。 :)