我正在考虑在Javacard中实现从左到右的二进制模幂运算。
我知道有些库可以执行RSA加密等,但在我的情况下,我只需要执行模幂运算。
我唯一感到困惑的是,由于Javacard最多接受int数据类型,因此限制了数据类型的使用。但就我而言,这些数字也可能是两倍。
仍然可以使用Javacard API为大数字实现此算法。
答案 0 :(得分:2)
通常,模块取幂可以通过Java卡上的原始RSA(无填充的RSA)或Diffie-Hellman计算来使用。这样,协处理器(通常存在于高端Java卡实现中)可以直接使用。密码协处理器中的硬件辅助蒙哥马利计算将以非常大的余量优于任何特定计算。由于效率问题,使用低端处理器甚至无法对非常大的数字执行计算。
通常{Java}实现中没有int
- 只是因为整个Java Card API在任何地方都没有使用int
。由于处理器极不可能包含浮点处理器(FPU),因此double
会增加一倍。所以通常你会遇到(签名)short
值。当然,您可以使用short
执行任何类型的计算 - 请参阅我的回答here - 但它不会很快也不会很快。
最后,Java的Java Card子集很容易成为Turing-complete machine。所以是的,任何事情都有可能,直到你的内存耗尽或 - 确实 - 时间。
请注意,安全措施可能会使原始RSA等一些技巧无法用于通用模块化算法。我建议首先尝试DH并深入研究手册,以了解您的特定平台的要求。