DSA 签名验证和 BigInteger class
DSA Signature Verification and BigInteger class
我得到了一个(非常)简单的 DSA 问题,并且已经找到了密钥和其他变量。为了验证签名,我需要以某种方式翻译等式:
V = [(y^u1*h^u2)mod p] mod q
进入 BigInteger 操作。这在 java 上有可能吗?到目前为止,我一直在成功地使用 modPow,但是到目前为止所有的问题都是以下形式:
r.modPow(指数,modulus);
我不知道如何通过 BigInteger 计算上面的等式(特别是粗体部分),我想知道这是否可能。有人有什么想法吗?
如果 BigInteger 做不到,我该如何通过 Pari 计算这个等式?
我认为你只需要使用
的身份
(a*b) mod p == ((a mod p)*(b mod p)) mod p
所以要计算yu1×hu2modp:
- 计算 yu1 mod p,使用
modPow
,
- 计算 hu2 mod p, 使用
modPow
,
- 将第 1 步和第 2 步的结果相乘,
- 减少第 3 步的结果 mod p.
第 4 步是必要的,因为第 1 步和第 2 步的结果相乘可能会产生大于 p 的值。
我得到了一个(非常)简单的 DSA 问题,并且已经找到了密钥和其他变量。为了验证签名,我需要以某种方式翻译等式:
V = [(y^u1*h^u2)mod p] mod q
进入 BigInteger 操作。这在 java 上有可能吗?到目前为止,我一直在成功地使用 modPow,但是到目前为止所有的问题都是以下形式:
r.modPow(指数,modulus);
我不知道如何通过 BigInteger 计算上面的等式(特别是粗体部分),我想知道这是否可能。有人有什么想法吗?
如果 BigInteger 做不到,我该如何通过 Pari 计算这个等式?
我认为你只需要使用
的身份(a*b) mod p == ((a mod p)*(b mod p)) mod p
所以要计算yu1×hu2modp:
- 计算 yu1 mod p,使用
modPow
, - 计算 hu2 mod p, 使用
modPow
, - 将第 1 步和第 2 步的结果相乘,
- 减少第 3 步的结果 mod p.
第 4 步是必要的,因为第 1 步和第 2 步的结果相乘可能会产生大于 p 的值。