0

我得到了一个(非常)简单的 DSA 问题,并且已经找到了关键和其他变量。为了验证签名,我需要以某种方式转换等式:

V = [( y^u1*h^u2 )mod p] mod q

进入 BigInteger 操作。这在java上甚至可能吗?到目前为止,我一直在成功使用 modPow,但是到目前为止所有问题都在以下形式:

r.modPow(指数,模数);

我不知道如何通过 BigInteger 完成上述等式(特别是粗体部分),我想知道它是否可能。有没有人有任何想法?

如果 BigInteger 做不到,我将如何将这个等式通过 Pari?

4

1 回答 1

1

我想你只需要使用身份

(a*b) mod p == ((a mod p)*(b mod p)) mod p

所以要计算 y u1 × h u2 mod p:

  1. 计算 y u1 mod p, 使用modPow,
  2. 计算 h u2 mod p,使用modPow
  3. 将步骤 1 和 2 的结果相乘,
  4. 减少步骤 3 mod p 的结果。

第 4 步是必要的,因为第 1 步和第 2 步的结果可能相乘以产生大于 p 的值。

于 2018-04-08T12:23:21.213 回答