2014-09-12 193 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處理。