簡體   English   中英

逆轉數學函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM