2014-09-12 136 views
1

我尝试实施ElGamal签名,但验证有问题。据的消息m维基百科,签名(R,S)是正确的,如果:
verification formulaElGamal签名验证

有一种公知的算法,用于计算ModPow,这是在签名步骤中使用: enter image description here

但我无法找到计算第一个公式的方法。如果我尝试直接计算功率,这似乎太大了。我用C#编写代码并使用BigInteger,它甚至不允许用BigInteger指数计算权力 - 我只接受普通整数,这是合理的。
有没有简化?这应该如何计算? 谢谢

+0

'BigInteger.ModPow' – CodesInChaos 2015-03-18 16:39:44

回答

0

我已经在matlab中实现了这个算法,它的工作正常。我为大数使用了可变精度整数(vpi)。

zvyr = vpi(mod(((y^r)*(r^s)),p)) 

我相信类似的东西可以用于C#。

+0

我从这个答案中删除了你的问题。如果您有自己的问题,则应该将其作为问题发布。 – Magnilex 2015-03-18 16:39:39

0

使用与计算g^k (mod p),square-and-multiply完全相同的算法进行计算。您不需要自己实现该算法,ModPow方法是BigInteger类型的一部分。

bool success = BigInteger.ModPow(g, h, p) == 
       (BigInteger.ModPow(y, r, p) + BigInteger.ModPow(r, s, p)) % p; 

注意(mod p)以数学公式的右边是不是一个操作符,它会告诉你整个公式应一致性模p处理。