Algorithm-Design

找出具有一個已知輸入和輸出的數字鍵生成器的算法

  • June 17, 2018

我有一個在硬體上執行的軟體程序。要訪問特定功能,它會執行類似質詢-響應的身份驗證,即它會生成一個數字 4 位 PIN 並期望一個 4 位數字 PIN 作為響應。我現在正在尋找是否有可能提出用於生成響應的算法,如果可以的話如何。

現在我有一對樣品 (7153 - 9533) 可以使用。理想情況下,我可以在這裡應用或調整一些實用程序或公式。我相信,一旦我弄清楚底層算法是將一個 4 位挑戰轉換為 4 位響應的基本算法,那麼我將能夠編寫一個小實用程序來始終獲得響應。

由於響應始終是從另一個 4 位數字生成的 4 位數字,我假設只有 10,000 個可能的程式碼與 10,000 個可能的“種子”相關,所以我認為這對我來說應該很難逆轉工程師或蠻力,基本上我正在尋找一個開始的方向。

所以我的問題(簡而言之):

我將如何解決這樣的問題,甚至可以完成嗎?

理想情況下,我可以在這裡應用或調整一些實用程序或公式。

我不得不說沒有這樣的效用,沒有這樣的公式。這個問題沒有解決辦法。

10000!= factorial(10000) 4 位數字到 4 位數字的不同轉換。例如,您的輸入 7153 和結果 9533 可以由以下任何函式生成:

f(x)=(2x+5227) MOD 10000

f(x)=(3x+8074) MOD 10000

f(x)=(x^3+8956) MOD 10000

只知道一對並不足以找出使用了什麼轉換。如果他們使用一些簡單的功能,那麼擁有更多對可能會(但不能保證)對這個功能有所了解。

如果數字“響應”是數字“提供”的任意函式,則有 $ 10000^{10000}=2^{132877.12\dots} $ 可能的功能。如果是可逆函式,則有 $ 10000!=2^{118458.14\dots} $ (問題陳述不允許判斷函式是否可逆)。
注意:甚至可能有一些隱藏的輸入,比如日期/時間,在驗證者端有一些容差;這在用於銀行業務的一次性密碼生成器中很常見,但我將把它放在一邊。

這個問題告訴我們一個樣本對。這允許將上述數字減少一個因子 $ 10000=2^{13.29\dots} $ ,但我們仍然得到兩個遠高於十萬的冪,這很難想像。在這些眾多功能中,沒有什麼可以選擇的了。

密碼學具有此類功能的構造,實現的目標是,給定範例“提供”/“響應”對,預測新“提供”的“響應”比隨機嘗試更好(並且,如果可逆性成立)在計算上是不可行的,充分利用不同的“提供”產生不同的“響應”)。即使知道用於建構子的原理(現代密碼學中的一個基本假設是唯一的未知數是密鑰),這種可能性仍然存在。這些構造是根據Format-Preserving Encryption原則建構的偽隨機函式偽隨機排列

例如,即使我們知道函式是 $ n\mapsto\operatorname{HMAC-MD5}(\text{key},n)\bmod10000 $ ,在軟體中隱藏了一個 16 字節的密鑰,我們將無法預測任何有用的資訊;或從 $ n\mapsto\operatorname{HMAC-SHA-1}(\text{key},n)\bmod10000 $ .

因此,如果密碼學使用得當,除了對“軟體程序”進行逆向工程或在某種程度上訪問“生成響應”的內容之外,就無法實現所要求的目標,這兩者都是題外話。

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