DSA签名验证和BigInteger类

时间:2018-04-08 09:34:05

标签: java encryption biginteger dsa pari

我遇到了(非常)简单的DSA问题,并且已经找到了密钥和其他变量。为了验证签名,我需要以某种方式翻译等式:

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

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

r.modPow(指数,模数);

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

如果BigInteger无法做到这一点,我将如何通过Pari表达这个等式?

1 个答案:

答案 0 :(得分:1)

我认为你只需要使用

的身份
(a*b) mod p == ((a mod p)*(b mod p)) mod p

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

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

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