Prime-Numbers

有沒有公開的ppp和qqqDSA 中使用的數字?

  • January 23, 2017

有許多 RFC 文件給出了在 Diffie-Hellman 中使用的大素數。但是,我找不到標準 $ p $ 和 $ q $ DSA 簽名方案中使用的大素數。這被證明是我自己的 DSA 玩具實現中的一個主要障礙,因為生成這些素數使用的數學和程式碼比算法的其餘部分要混亂得多,而且我可能會在更多的地方犯下愚蠢的錯誤,從而破壞整個方案的安全性.

我在哪裡可以找到合適的 $ p $ 和 $ q $ ? 它們似乎不需要保密,坦率地說,我有點震驚,沒有標準的數字可以讓人們免於自己進行昂貴的計算。

有一個非常詳細的算法關於如何構造 $ p,q $ 在FIPS 186-3附錄 A.1.2.1.2 中。提供的算法將長度作為輸入 $ L,N $ , 的 $ p,q $ (resp.) (例如 L=1024,N=160) 和輸出,素數 $ p,q $ 這樣 $ p\equiv 1\pmod{q}. $

此外,在 python 中有一個實現(對於 $ (L,N)=(1024,160) $ )。例如

from Crypto.PublicKey import DSA
import random
def randfunc(n):
   return ''.join(str(random.random())[4] for _ in xrange(n))
DSAkey=DSA.generate(int(1024),randfunc)
p=DSAkey.p;q=DSAkey.q; 

執行上一個我得到的

p=898846567431157967424297114057633644601771516927834298008846524493109792\
637522535293491954598238817151457964980464592383454281215613866269456797\
539564000773528820716639254597505008070182540287714904340213156913571237\
346370468948761234961687162517352526627424620993348024330584723776744085\
98573487858308054417L
q= 1193447034984784682329306571139467195163334221569L

引用自:https://crypto.stackexchange.com/questions/11655