Brute-Force-Attack
是否可以在沒有蠻力的情況下展開堆疊的 XOR 字元串?
鑑於:
- 每個人都可以看到的初始字元串 (sBase)
sBase = "syLgETsPihVXBRuVR4eI"
- 其他幾個僅對我可見的字元串
sXOR1 = "48MjsK7SiNMGV7wxb3Kb" sXOR2 = "jokxnPZpUWmJfaL0BS1t" sXOR3 = "4KAh1TEAmtWFV6HvTUda" sXOR4 = "wOnlFV4vUiJkaESXX25X" sXOR5 = "77H6NQrcmrdHuThmBdTL"
認為:
- XOR sBase 與 sXOR1 並得到 sResult
- 將 sResult 與 sXOR2 異或,並獲得第一個堆疊的異或 sResult
- 繼續用每個新的 sResult 對其餘的 sXORn 字元串進行異或
Final sResult = "Y??Ga??' ?¤00#=]<W?*"
問題:
- 我可以使用已知的 sBase 字元串從 XOR 堆疊的 sResult 中確定原始 sXOR 字元串嗎?
- 還是通過蠻力攻擊 sResult 以確定原始 sXOR 字元串的唯一解決方案?
(編輯 - 添加評論)
如果我不清楚我的 XOR 操作的解釋:
- 每個 XOR 操作的結果與下一個 sXOR 字元串進行異或
sResult = sBase XOR sXOR1 sResult = sResult XOR sXOR2 sResult = sResult XOR sXOR3 sResult = sResult XOR sXOR4 sResult = sResult XOR sXOR5
- 最終的 sResult 是由一系列 XOR 操作產生的單個字元串
- 我想知道某人(只知道 sBase 和最終 sResult 的值)是否有可能確定發生了多少 XOR,以及他們是否可以確定我在該過程中使用的 sXORn 字元串值是什麼?
============================================================
編輯以顯示成功的結果 - 2017-05-06
查看答案和評論(一遍又一遍) - 最後得到@daniel給出的“位”範例的句柄 - 我能夠弄清楚如何編寫一個解決方案來查找生成等效 XOR 結果的字元串集。
現在我可以繼續檢驗我的假設。
感謝大家!
布魯斯
Note that the xC and xD columns are totally different in these two runs. And that the two outside result columns are the same for both runs. This shows that (xCR$ XOR xDR$) is equivalent to the multiple XOR operations using my sXOR(n) strings. The routine is fast - and I can now find all of the XOR equivalent strings that I want. FIRST RUN: '--------------------------------------------------------- sXORResult =591D0D47611C1D27001E0F3030233D5D3C571A2A 'Hex$ of the xR values in the first column - the result of my sXOR(n) operations '--------------------------------------------------------- xR=01011001 89 xC=00110110 54 xD=01101111 111 R2=01011001 89 xR=00011101 29 xC=11110111 247 xD=11101010 234 R2=00011101 29 xR=00001101 13 xC=01111011 123 xD=01110110 118 R2=00001101 13 xR=01000111 71 xC=11100001 225 xD=10100110 166 R2=01000111 71 xR=01100001 97 xC=11010111 215 xD=10110110 182 R2=01100001 97 xR=00011100 28 xC=01100110 102 xD=01111010 122 R2=00011100 28 xR=00011101 29 xC=10100111 167 xD=10111010 186 R2=00011101 29 xR=00100111 39 xC=10011011 155 xD=10111100 188 R2=00100111 39 xR=00000000 0 xC=00100010 34 xD=00100010 34 R2=00000000 0 xR=00011110 30 xC=11100000 224 xD=11111110 254 R2=00011110 30 xR=00001111 15 xC=00101111 47 xD=00100000 32 R2=00001111 15 xR=00110000 48 xC=11101111 239 xD=11011111 223 R2=00110000 48 xR=00110000 48 xC=00111101 61 xD=00001101 13 R2=00110000 48 xR=00100011 35 xC=01110111 119 xD=01010100 84 R2=00100011 35 xR=00111101 61 xC=01100010 98 xD=01011111 95 R2=00111101 61 xR=01011101 93 xC=11000000 192 xD=10011101 157 R2=01011101 93 xR=00111100 60 xC=10001100 140 xD=10110000 176 R2=00111100 60 xR=01010111 87 xC=11000010 194 xD=10010101 149 R2=01010111 87 xR=00011010 26 xC=10101110 174 xD=10110100 180 R2=00011010 26 xR=00101010 42 xC=00011010 26 xD=00110000 48 R2=00101010 42 '--------------------------------------------------------- xCR$ =36F77BE1D766A79B22E02FEF3D7762C08CC2AE1A 'Hex$ of the xC values in the second column xDR$ =6FEA76A6B67ABABC22FE20DF0D545F9DB095B430 'Hex$ of the xD values in the third column sCDResult =591D0D47611C1D27001E0F3030233D5D3C571A2A 'Hex$ of the R2 values in the fourth column - the result of (xCR$ XOR xDR$) 'Note that sXORResult (above) and the sCDResult are equivalent '--------------------------------------------------------- SECOND RUN: '--------------------------------------------------------- sXORResult =591D0D47611C1D27001E0F3030233D5D3C571A2A '--------------------------------------------------------- xR=01011001 89 xC=00000010 2 xD=01011011 91 R2=01011001 89 xR=00011101 29 xC=11001100 204 xD=11010001 209 R2=00011101 29 xR=00001101 13 xC=00100101 37 xD=00101000 40 R2=00001101 13 xR=01000111 71 xC=00011110 30 xD=01011001 89 R2=01000111 71 xR=01100001 97 xC=11000111 199 xD=10100110 166 R2=01100001 97 xR=00011100 28 xC=11100100 228 xD=11111000 248 R2=00011100 28 xR=00011101 29 xC=01000101 69 xD=01011000 88 R2=00011101 29 xR=00100111 39 xC=10010011 147 xD=10110100 180 R2=00100111 39 xR=00000000 0 xC=00100011 35 xD=00100011 35 R2=00000000 0 xR=00011110 30 xC=10010000 144 xD=10001110 142 R2=00011110 30 xR=00001111 15 xC=00010110 22 xD=00011001 25 R2=00001111 15 xR=00110000 48 xC=10000000 128 xD=10110000 176 R2=00110000 48 xR=00110000 48 xC=01111110 126 xD=01001110 78 R2=00110000 48 xR=00100011 35 xC=00110011 51 xD=00010000 16 R2=00100011 35 xR=00111101 61 xC=11000000 192 xD=11111101 253 R2=00111101 61 xR=01011101 93 xC=00001010 10 xD=01010111 87 R2=01011101 93 xR=00111100 60 xC=01100010 98 xD=01011110 94 R2=00111100 60 xR=01010111 87 xC=10000010 130 xD=11010101 213 R2=01010111 87 xR=00011010 26 xC=00001111 15 xD=00010101 21 R2=00011010 26 xR=00101010 42 xC=01001000 72 xD=01100010 98 R2=00101010 42 '--------------------------------------------------------- xCR$ =02CC251EC7E44593239016807E33C00A62820F48 xDR$ =5BD12859A6F858B4238E19B04E10FD575ED51562 sCDResult =591D0D47611C1D27001E0F3030233D5D3C571A2A '---------------------------------------------------------
我不知道您的安全目標是什麼,但正確語句“堆疊的 XOR 是無用的”的另一面是,任何字元串都可以“取消堆疊”成任意數量的字元串的 XOR,沒有人知道如何使用了許多字元串。
XOR下的固定長度字元串形成一個組,比如 $ G $ . 所以對於任何 $ S \in G $ 我們可以寫
$$ S=X \oplus (S\oplus X), $$ 它為任何非零字元串提供了一個unstacking $ X $ . 因此對於 $ n $ 位串有 $ (2^n-1) $ 將字元串拆分為兩個 XOR 的方法,因為有盡可能多的非零字元串 $ X. $
您可以根據需要多次重複此過程。