我有NXP的智能卡支持ECC over GF(p),并且不支持ECC over GF(2 ^ n)。
在我的项目中,我需要使用这种特殊类型的智能卡(已经使用了数千个实例)。但是,我需要在sect193r1上添加EC签名验证,这是GF(2 ^ n)上的曲线。
对我来说,性能不是问题。这可能需要一些时间。签名验证不涉及任何私钥,因此安全性和密钥管理也不是问题。不幸的是,我必须验证智能卡内的签名,而不是配备智能卡读卡器的设备。
有什么解决方案吗?是否存在基于GF(2 ^ n)的EC加密的纯软件JavaCard实现的任何现有源代码?
答案 0 :(得分:3)
能够执行非对称加密的智能卡始终使用协处理器(通常包含蒙哥马利乘数)来执行此操作。大多数智能卡(例如最初的NXP SmartMX处理器)仍然使用8位或16位CPU运行。这些CPU不是为大数量执行操作而设计的。不幸的是,Java Card并没有为乘法器的调用提供直接支持 - 如果它完全可以使用的话。大多数卡(例如SmartMX)也不支持32位(Java int
)操作。
因此,如果要执行此类计算,则必须使用带符号的8位和带符号的16位基元自行编程。这将需要大量的工作,而且会很慢。再加上处理Java字节码所需的开销,你将会遇到惊人的迟缓。
答案 1 :(得分:1)
只需更新某些额外信息,以防有人仍在寻找解决方案。
OpenCryptoJC lib确实提供了BigNumbers,EC曲线基元操作等。因此您应该能够加载自己的曲线及其参数。
但是,如果卡本身不支持此曲线,则使用lib自行实现曲线上的操作。这不是微不足道的......
或者,如果要使用的GF(2 ^ n)曲线和另一个GF(p)之间存在任何映射,您可以尝试在GF(p)中执行所有操作,并将结果映射回GF(2) ^ N)。假设存在这样的映射,这可能更容易做到。
免责声明:我是lib作者之一。 :)