2014-07-13 40 views
1

當滾動瀏覽所有python選項時,我發現python包含一個選項,用於在散列隨機化上[打開],以便str,bytes和datetime對象的值__hash__()被不可預知的隨機雖然它們在單獨的Python過程中保持不變,但它們在重複調用Python之間無法預測。「 (source)Python -R函數

官方文檔參考這個文檔http://www.ocert.org/advisories/ocert-2011-003.html,它應該提供更多的信息,但是它沒有提供任何這樣的「精心設計的HTTP請求」的信息。網站上的所有相關鏈接都已死亡。我知道這可以通過調用python -R來解決,但是我對細節更感興趣。
一個HTTP請求如何在幾個小時內完成100%的服務器CPU,以及如何隨機化散列值修復該問題?它是否創造了某種死鎖? (我知道,如果腳本被破壞,HTTP請求可能會花費很長時間(infinity for/while循環,goto s)或者正在執行非常昂貴的任務,但我認爲情況並非如此)。

回答

1

使用不可預測的鹽的鹽漬散列用於防止collision attacks

在一個世界裏,碰撞攻擊是針對散列表算法的攻擊,散列表算法通常在O(1)中運行,但可以被誘騙以O(n)運行。

欺騙散列表算法很簡單:當存儲具有公共散列值的對象時,散列表實現通常比較慢,因此它被命名爲衝突。這比較慢,因爲這兩個值一起存儲在一起,例如鏈接列表中。所以,如果你能產生大量的碰撞所有密鑰,你就迫使哈希表將它們全部存儲在一個鏈表中,這個速度非常緩慢,並且消耗了大量的CPU。

要利用這一點,你必須知道哈希算法,以便能夠預測和生成衝突的密鑰。如果哈希被一個你不知道的值所淹沒,你將無法生成衝突的密鑰。