[英]Reverse that Math function
我需要使用困難的數學運算來反轉一個函數,我要在這里檢查它是否有可能,最終尋求幫助。
public static UInt32 Func_4(UInt32 P, UInt32 X, UInt32 G)
{
UInt64 result = 1;
UInt64 mult = G;
if (X == 0)
return 1;
while (X != 0)
{
if ((X & 1) != 0)
result = (mult * result) % P;
X = X >> 1;
mult = (mult * mult) % P;
}
return (UInt32)result;
}
“反向”是指:我知道G,我知道P,我知道結果。 我需要X。
今天早晨,我雖然頭腦清醒,但還是嘗試再次翻譯它,但失敗了。 可能嗎?
先感謝您。
看來您的Func_4()
函數計算G X mod P。 您要提供的是離散對數問題的解決方案,但是尚無有效的算法。
好,
通過手工進行以下工作:
P = 5,X = 0b0000 1110,G = 7
P = 5,X = 0b0001 1110,G = 7
P = 5,X = 0b0011 1110,G = 7
P = 5,X = 0b0111 1110,G = 7
等,我想你看到了模式
所有結果的返回值都相同(4)...
因此,任何將其取反以獲得X值的嘗試都將為X提供多個可能的值。
根據您實際需要的東西,這可能並不重要...
這件事的背景是什么?
由於模運算符在起作用,因此您可以立即得知該函數不是雙射的:對於固定的P和G,不同的x可能返回相同的結果。
但是該函數對於x的有限域是雙射的。 就像atan,asin,sqrt,....會產生一整套值一樣,當您限制域時,可以選擇正確的值。
乍看之下,對於一個非常大的P,函數的作用是:
G (2i * x [i])的乘積,其中x [i]是x的第i個位(從第0位開始為最低有效位)。
這意味着給定一個大P(對於x = 0x1111 ... 111,它大於Prod(G 2i )),則可以反轉該函數。 似乎該函數設計為不可逆的較小的P。
看起來我=(g ** x)mod p。 這意味着可能有多個x
pseduo算法
R = pow(G,X)mod P
即)存在一個Q,它是R + P * Q = pow(G,X)
反之,檢查Y以檢查從0到UINT32((MAXUINT32-R)/ P)的所有Q,
Y =對數(R + P * Q)/對數(G)
並且如果值Y沒有分數,則它們是問題的多個“ X”答案的集合。
假定X1是不帶分數的第一個X值,X2是不帶分數的第二個X值。 然后可以在等式X(S)= X1 +(X2-X1)* S中給出所有X的集合,其中S = 0至UINT32((MAXUINT32-X1)/(X2-X1))。
這是由於如果1 = Pow(G,T)mod P然后Pow(G,X + T)mod P = Pow(G,X)mod P * Pow(G,T)mod P也是Pow( G,X)modP。因此X,X + T,X + 2T,X + 3T ...都將具有相同的值。
我嚴重認為您正在濫用此算法。 從您的描述以及對算法的了解來看,很明顯,這只是為了向前發展。 可以將其視為使用鍵P和G計算X的校驗和。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.