我正在尝试在非常有限的技术条件下进行概念验证。我的问题是:如何有效地减去 Java Card 中的大整数(表示为字节数组)?.
现在,细节使这项任务变得棘手。我可以使用一张智能卡。机型为飞天JavaCOS A22,运行Java Card 2.2。对于完整的细节,Java Card 允许使用非常受限的 Java API 子集(即,没有int、没有char,当然也没有BigInteger),但它确实支持一系列可以在此列表中详述的加密原语.
特别是,我的任务是在卡片上实现经典的 ElGamal。到目前为止,我找到了两个相关的回复。在第一个中,Maarten 指出 ElGamal 不符合标准,因此需要实现该功能。在这个答案中,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$?