2012-07-12 45 views
3

我有以下行爲的加密方法: 密碼的每個字符都被通過獲取字符的ASCII值,並且將這個字節的一種方式,然後其他的方式方法提出,並返回如下:PHP加密方法

$shifted_left.$original_char.$shifted_right

口令的一個例子之前,它被散列:

àp8Âa0æs9æs9îw;Þo7är9Èd2Îg3Þo7Êe2æs9Ðh4Êe2är9Êe2d2

在此之後,將所得的字符串從通過在原來的密碼使用BCrypt被散列每個字符要形成。使用這些垃圾字符包圍密碼是否可以提高密碼的強度或防止它們通過彩虹表/字典攻擊被破解?

+0

據我所知,(SHA1 || SHA256)+鹽非常強,目前推薦。 – Ron 2012-07-12 07:03:08

+0

@Ron不完全,特別是對於密碼哈希,你需要一個* slow *算法,比如Blowfish。 SHA特別是一種快速算法,所以如果你使用它,你至少應該對它進行大幅擴展。 – deceze 2012-07-12 07:07:10

+2

如果有人知道這個「預散列」算法,他可以爲你編寫一個彩虹表。它是否提高了實力?是。它完全保護你嗎?沒有。 – Roman 2012-07-12 07:07:42

回答

3

一般來說,它確實會阻止預先計算彩虹表,因爲您有一個相當獨特的算法,可能沒有人會爲創建彩虹表而煩惱。

但是,相同的密碼仍然哈希到相同的散列。因此,一個試圖暴力破解所有密碼哈希的攻擊者有更容易的時間,因爲他只需要爲所有用戶破解一次相同的密碼。

因此,它仍然是非常可取的使用用戶特定的鹽。如果您使用的是具有強大哈希算法的用戶特定鹽,則您是否也可以進行位移跳舞並不重要。

+0

真正的..但是,自從被散列密碼是不實際的密碼,但混亂的字符串,並不意味着如果他們試圖強力攻擊,他們就無法真正破解任何的因爲真正的密碼沒有存儲的密碼? – SHH 2012-07-12 07:10:59

+0

當攻擊者破壞你的服務器(或者你的代碼的任何地方)時,他/她知道你是如何構建你的散列字符串的。有沒有神奇的,因此攻擊者可以暴力破解哈希很快... – Ron 2012-07-12 07:16:52

+0

@SHH如果他們想嘗試暴力破解你的數據,他們會需要反正知道你的特定算法。通過查看哈希算法使用的算法是不可能的。如果您的數據庫受到損害,以致您的哈希值被泄漏,那麼只需假定該算法已隨其泄漏,因爲攻擊者可以訪問您的服務器。 – deceze 2012-07-12 07:21:07

2

如果攻擊者可以控制數據庫和代碼,那麼添加亂碼字符將毫無幫助(只有可忽略的操作更多)。如果他只有數據庫而沒有代碼(SQL注入),那麼他會識別bcrypt散列,現在可以用bcrypt強行推force,但由於加擾沒有任何弱密碼。這就像打亂的文本將是密碼破解,所以字典是沒有用的。

這是隱藏的安全,但會是有效的,只要密碼不知道。在使用bcrypt和獨特的鹽之前,通過添加修正的硬編碼鹽(鍵),可以更輕鬆地獲得相同的效果。

P.S. bcrypt中使用的獨特鹽將有助於防止彩虹表,而不是擾亂你的密碼。一張大彩虹桌也可以包含隨機組合,比如你的密碼。