2017-08-27 57 views
0

比方說例如我使用的功能,例如:有多容易破解操縱散列

int someHash(string someValue) 
{ 
    return crc32(someValue) + 10 - 5 * 20; 
} 

它多麼容易。將推斷的散列是如何以再現相同的哈希值操作?

+0

如果原始字符串大於四個字節,crc32它不能被反向工程 - 只有強制強制 - 見https://stackoverflow.com/questions/1514040/reversing-crc32 – Daniel

+1

我認爲這個問題是關於如果哈希涉及自定義操作哈希值。 –

+0

@ramailosathi是正確的。假設原始字符串/數據是已知的,但不應該改變。數據被散列並且散列值與數據一起保存。 – JSON

回答

2

這取決於轉換。在你的someHash功能的情況下,這很容易。注意你正在應用的轉換是一個簡單的線性函數。你的變換可以表示爲:

H」是新的哈希和^h是原來的哈希值。如果您有一個散列及其改變的散列,您可以解決c的等式。 (c = h' - h = -90)。

這個例子是其中的一個,爲什麼我們經常說rolling your own crypto往往不是一個好主意。該方案實際上需要兩個屬性:

  1. 該方案必須產生看起來random的輸出。
  2. 該計劃不容易被猜出。

上面提到的攻擊方式是一個原因爲什麼是很重要的。在這種情況下,轉型的結構非常清晰,我們可以輕鬆開發。

2.是必要的,因爲即使我們沒有一個方案,它有這個結構,我們仍然可以枚舉c。在嘗試了非常少量的數字之後,我們仍然發現恆定的c = -90

這並不意味着這是不可能的。恰恰相反:我們使用分組密碼來重新加密散列。這是有效的,因爲分組密碼產生的輸出看起來是隨機的,並且需要一個隨機生成的≥128位密鑰(這足夠大以致於不容易被猜測)。