【发布时间】:2016-03-12 19:48:06
【问题描述】:
我正在尝试在非常有限的技术条件下进行概念验证。我的问题是:如何有效地减去 Java Card 中的大整数(表示为字节数组)?.
现在,细节使任务变得棘手。我可以使用一张智能卡。模型是飞天JavaCOS A22,运行Java Card 2.2。有关详细信息,Java Card 允许使用 Java API 的非常 受限子集(即,没有 int,没有 char ,当然,没有BigInteger),但它确实支持一系列加密原语,可以在list 中详细说明。
特别是,我的任务是在卡片上实现经典的 ElGamal。到目前为止,我找到了两个相关的回复。在第一个one 中,Maarten 指出 ElGamal 不符合标准,因此需要实现该功能。在这个 answer 中,thotheolh 分享了一个链接,指向 Java Card 2.2 中 DiffieHellman 的实现,基于相同的原则:由于它不受本机支持,它利用了 RSA 的功能。
逻辑是无缝的:RSA、ElGamal 和 DiffieHellman 依赖于相同的基本操作 $a^b mod c$。基于 thotheolh 的代码,我已经成功实现了密钥生成。加密发生在卡外,所以这不是我关心的问题。但解密需要特定的变体。对于解密 $b=p-1-x$,其中 $p$ 和 $x$ 都是 BigIntegers。这就是我卡住的地方:如何有效地计算 $p-1-x$?
【问题讨论】:
-
我不知道以特殊方式使用 API 的任何方法,但是为什么不能只实现字节减法呢?减法并没有那么慢,你只需要一些代码来处理进位。
-
Petr 的回答可能对将来可能有相同问题的任何人也有用:stackoverflow.com/a/53628582/2724773
标签: cryptography bytearray smartcard javacard elgamal