2011-12-27 43 views
5

我在PHP.net上讀到MD5是無用的,他們建議使用crypt + salt。Crypt和Salt對於暴力攻擊比MD5更安全嗎?

所以,我去他們的功能描述和閱讀

<?php 
$password = crypt('mypassword'); // let the salt be automatically generated 

/* You should pass the entire results of crypt() as the salt for comparing a 
    password, to avoid problems when different hashing algorithms are used. (As 
    it says above, standard DES-based password hashing uses a 2-character salt, 
    but MD5-based hashing uses 12.) */ 
if (crypt($user_input, $password) == $password) { 
    echo "Password verified!"; 
} 
?> 

或在我的情況是這樣的:

$stored_password=fetch_password($user); 
if (crypt($_REQUEST['password'],$stored_password)===$stored_password) { 
// ok 
} 

所以,當我看到鹽存儲在哈希密碼和你使用散列密碼作爲salt,我認爲Crypt + Salt對輸出的蠻力(設法竊取密碼的黑客)並不是更安全。它更安全嗎?

針對字典攻擊,我可以理解它的威力,但是對於哈希密碼的暴力攻擊,我沒有看到優勢。

回答

0

用散列加密比MD5簡單得多。攻擊者需要更多計算時間,因此這更安全。

對於密碼和MD5,攻擊者可以使用MD5 PLUS的預先計算表格,具有MD5的優勢非常快。

對於密碼和鹽漬土窖,預計算表將是無用的,PLUS隱窩需要更多的馬力比MD5

有特製algoritms(谷歌bcrypt),有故意高計算成本,甚至藉此進一步。

2

在散列之前將salt應用於字符串(示例中的密碼)之前,散列現在成爲另一個散列,而不是沒有鹽的散列。 沒有鹽,你可以使用一個預先存在的字典 - 現在,而不是你需要創建一個鹽的字典。如果您使用用戶特定的salt,每個用戶在使用暴力時都需要擁有自己的字典。這變得更加耗時。

MD5由於其collision vulnerabilities是一個破碎的算法。

0

鹽阻礙彩虹表&通過使您的哈希密碼獨一無二的散列字典。

它們還有助於防止某人竊取您的散列密碼列表,並使用它來訪問不同站點上的帳戶(通過顛倒散列或類似方式)。

這對傳統的蠻力攻擊沒有幫助。

+1

鹽會幫助反對傳統的暴力攻擊,因爲黑客必須建立一個調整爲鹽的字典。如果使用用戶獨特的鹽,那麼每個用戶都必須擁有自己的字典。 – Zar 2011-12-27 15:54:44

+0

字典不用於傳統的蠻力攻擊。 – MrGlass 2011-12-27 15:58:17