2016-11-11 164 views
0

我正在嘗試實現diffie-hellman密鑰交換。比方說,我發現一個大素數p - 我怎樣才能找到一個發電機g?我只能使用一些基本的操作(+,*, - ,/,pow,modExp,modMult,mod,gcd,isPrime,genRandomPrime,genRandomBits等等)來限制我使用的多精度庫。可用。生成Diffie-hellman參數(生成器)

將它的工作尋找一個安全素q,讓每一位數ñ針對gcd(n,q) == 1應該是一個發電機,對不對?

回答

0

如果你關心你的安全,你已經得到了儀式警告而不是推出你自己的加密,所以這裏是如何找到一個安全素數的發電機mod。當且僅當g ^(​​(q-1)/ 2)!= 1 mod q時,封閉範圍[2,q-2]中的數g是一個生成器,您應該使用標準算法進行模冪運算。選擇g的隨機值直到通過測試。

1

你基本上回答了你的問題。只是測試gcd(n,q)==1是沒有必要的,因爲q是素數。這意味着,任何數量的n,這樣n < q沒有共同的因素與qgcd(n,q)將一直輸出1

您可以檢查Q = 2P + 1是否是素數。如果是,則ord(Zq)= q-1 =(2p + 1)-1 = 2p。由於ord(x)| ORD(ZQ)XZQORD(X)= 2ORD(X)= PORD(X)= 2P。因此,您只需要檢查從{2,...,q-1}中隨機選擇的元素x的順序是否爲2.如果不是,則它的順序爲p或2p,您可以將其用作生成器。

0

通常,不要問程序員關於密碼學的問題。密碼是微妙的,因此,難以以無形的方式導致對自己的能力的自我欺騙。相反,要求密碼學家(其中許多也是程序員)。 Stack Exchange有一個密碼板,這個問題已經得到解答。

https://crypto.stackexchange.com/questions/29926/what-diffie-hellman-parameters-should-i-use

我可以建議有狡辯,但它基本上聲音。除非你真的想學習相關的數學,否則我會服從當局;他們在上面的答案中被引用。

至於你問的數學問題,這裏有一個小小的介紹。乘以模數p具有大小p-1。 (見Fermat's Little Theorem。)order of any element必須除p-1。最有利的情況是p-1 = 2q,其中q也是主要的。

+0

如果您的意思是按元素數量q-1的最大階數,那麼不存在最大階數的元素。想象一下簡單的乘法羣Z mod 11. ord(2)是10。 –

+0

@MarekKlein我刪除了違規索賠。當我分心時,我不應該做數學。 – eh9