2012-02-09 87 views

回答

0

鹽使加密更強。然而,字典攻擊不會嘗試解密密碼哈希,因此無論是否加鹽,都無關緊要,他們只會嘗試很多密碼,直到有效。

+0

這是不正確的。首先,我認爲你的意思是鹽讓哈希更強。大多沒有理由使用Salt加密。鹽被用作單向函數的輸入之一,以使它更難破解密碼或密碼數據庫。另外,如果您使用鹽進行字典式攻擊,這一點很重要。如果你不使用salt,黑客只需要對每個密碼猜測進行一次散列,並將其與所有散列進行比較,而在使用鹽的情況下(每個密碼都有一個單獨的鹽),你不能這樣做。 – Rutix 2012-02-11 15:47:02

1

如果'攻擊者'有你的站點/應用程序使用的密碼哈希(和鹽),他們將只是蠻力「鹽」+「密碼」。

但是,使用鹽對彩虹表(預先計算的散列表)提供更多保護,因此它們仍值得使用。

+0

但是攻擊者在發現匹配後如何知道哪一部分是鹽,哪一部分是真正的密碼? – 2012-02-09 23:28:21

+0

如果您的站點/數據庫已經被攻擊者足夠的入侵以獲取用戶散列密碼,他們可能也會訪問salt。 – pjumble 2012-02-09 23:35:28

0

這屬於上security.stackexchange.com

的問題是結合散列算法的速度計算能力之一。基本上,他正在投入慢速的bcrypt。

如果黑客同時使用哈希和鹽,並知道用於哈希密碼的算法,那麼破解它只是時間問題。

如果使用非常快速的算法,那麼這段時間很短。如果使用非常慢的算法,那麼顯然,找到命中的時間要長得多。

這給我們帶來了首要原因:我們首先散列/鹽的東西:買時間。可以使用這些時間來更改列出的所有密碼,並有時間與所有用戶聯繫,以便在需要更改其他系統上的密碼時通知他們。

我們使用鹽的原因是迫使黑客建立彩虹表每個鹽值。這樣一張表不能用來破解你的所有密碼。這樣做的唯一理由是花時間,並希望阻止普通黑客投入更多資源來破解所有這些資源。

無論使用何種機制,哈希密碼在大多數人都接受這個詞的意義上是不安全的。安全並不意味着「永遠不會被破解」。相反,這意味着「在時間/努力破解方面這將是昂貴的」。對於大多數黑客來說,他們只需要清晰的文字等低掛水果。對於一些人來說,他們會去任何需要的極端,比如按照鹽的價值建造大量的彩虹桌子,以獲得全部的彩虹。

而且,當然,支撐這一點的是在用戶表中是否容易識別任何「超級」用戶帳戶。對於大多數系統來說,破解系統管理員帳戶類型就足夠了,因此每個用戶使用不同鹽值的事實並不重要。聰明的人只會爲這個帳戶感到困擾。

0

這不完全準確,因爲大部分事情取決於您的假設。

主要假設是:

  1. 攻擊者有鹽「對飛」散列
  2. 計算完成相當快(如鹽,他將需要重新計算一切,將無法使用預定義列表)
  3. 每個用戶的鹽份相同。
1

鹽通過彩虹桌防止從字典中即時破解;該文章和後續文章指出,CPU /存儲器的折衷現在是彩虹表沒有意義,因此鹽不能幫助你。當然,他們從來沒有幫助過暴力攻擊。

+0

-1醃製對抗彩虹餐桌上的暴力攻擊同樣有效!但鹽必須是未知的。爲了防止重複密碼哈希,許多系統使用獨特的鹽。然後將其包含在數據庫中。如果一個數據庫泄漏了,那麼這個鹽幾乎是無用的。添加第三個應用程序特定鹽。是一種有效的解決方案,但不能將其存儲在數據庫中或其無用的代碼中。當然,如果黑客有權訪問文件系統,那麼您又有困難 – DeveloperChris 2013-05-28 03:43:47

-1

現在,這似乎是一個編程的問題不對,所以我只給你醃製和加密一些信息:

醃製的目的是在像哈希,這是單向的功能,以幫助在密碼學中廣泛使用,由於難以猜測密碼常常使用密碼,而其他攻擊(如暴力破解攻擊)則需要時間來破解密碼。

如果你想安全地存儲密碼,最好的方法就是加密。在Wikipedia上查找加密以獲取更多信息。

+0

-1。如果你不需要恢復密碼,你絕對不希望對它們進行加密,但想要散列(或者,甚至更好地使用類似bcrypt的散列)。但是......永遠不要加密,這是可逆的,除非你真的需要恢復明文密碼(這不是一個非常常見的用例)。 – jeffsix 2012-02-09 23:57:19

+0

我假設他想存儲他的密碼供以後使用/訪問,這就是爲什麼我建議加密,如果他不想因任何原因恢復它,像哈希這樣的單向函數絕對是一種方法。如果你打算-1,確保你明白我的意思。當我說安全存儲時,我的意思是存儲以供以後使用/恢復。 – Ipquarx 2012-02-10 00:14:15

0

兩點意見:

  1. 常規的哈希算法可以重複。僅僅因爲你想增加工作因子就不需要使用非標準算法。

  2. 即使使用慢散列方法,也建議使用鹽。它可能不一定會增加最佳攻擊的工作負載,但在用戶選擇與另一用戶,另一個帳戶或舊密碼相同的密碼時,它將停止微不足道的攻擊。

5

對於單個密碼,它沒有多大區別。暴力破解密碼與暴力破解密碼一樣困難。你只需要嘗試按鍵,直到你受到打擊。

當存在大量密碼時(例如在泄漏的數據庫中)時,會出現差異。基本思想是,在破解很多密碼時,可以重新使用部分必要的計算。這是通過構建彩虹桌完成的。這樣做的計算成本很高,但一旦完成,攻擊者就可以相對快速地破解大量密碼。用彩虹表破解N密碼要比單獨強制密碼更加快速。

如果每個密碼都與單個salt進行散列,則不能以相同的方式重新使用信息。您仍然可以構建彩虹表,但它們只能用於數據庫中的一個密碼,這使得它們無用。所以爲了破解密碼,你必須單獨強制所有的密碼,這對攻擊者來說通常是不實際的。

此外,對於無鹽密碼和流行的哈希算法,您可以簡單地從互聯網上下載預先計算的彩虹表。所以攻擊者甚至不需要自己計算它們。他可以下載一個表並查找特定散列的密碼。鹽可以防止這種情況。

無信號哈希也有缺點,即具有相同密碼的兩個用戶的密碼哈希是相同的。因此,如果攻擊者發現具有相同密碼散列的多個用戶,他只需要破解該密碼一次。

1

爲了說明的目的,假設你正在使用的鹽2字符串可以是一個隨機元素從該組
salts = {'00', '01', '02'...... '99'}

您使用的公式是:

salt = salts[rnd(100)]  # gets a random element from the set above, say '87' 
password_hash = MD5(password + salt) # say the hash is 'dai480hgld0' 

此後你會保存散列和鹽在數據庫中,像

 
+---------------------------+ 
| password_hash  | salt| 
+---------------------------+ 
| dai480hgld0  | 87 | 
| sjknigu2948  | 23 | 
| .     | . | 
| .     | . | 
+--------------------+------+ 

我們假設一個COM承諾的系統攻擊者可以訪問你的代碼 - 所以他知道你是如何計算你的哈希值的。
攻擊者也可以訪問你的數據庫,所以他擁有所有的密碼哈希和鹽。

鑑於這一信息,爲了做破解您的密碼(其中有一個哈希:「dai480hgld0」),他就必須做到以下幾點:

for word in dictionary_words #iterate over all the words in dictionary 
    for salt in salts   #iterate over all possible salts (100 iterations) 
    password_hash = MD5(word + salt) 
    if password_hash == 'dai480hgld0' 
     print "The password is " + word 
     exit() 
    endif 
    next 
next 

請注意,如果你有不使用任何鹽可言,算法將一直

for word in dictionary_words #iterate over all the words in dictionary 
    password_hash = MD5(word) 
    if password_hash == 'dai480hgld0' 
    print "The password is " + word 
    exit() 
    endif 
next 

從以上兩個代碼示例,它明顯地增加了鹽的密碼增加了暴力攻擊嘗試的次數。在我們的例子中,因爲有100種可能的鹽,所以你已經讓攻擊者用100種鹽來嘗試每個單詞。

因此,得出結論:

  • 鹽是不錯的。他們讓你的密碼難以破解。即使你的用戶輸入了弱密碼,鹽也會確保所產生的哈希不可用。例如,它很容易谷歌一個散列'3cc31cd246149aec68079241e71e98f6'這實際上是一個相當複雜的密碼,並將滿足幾乎所有的密碼策略。仍然破解它不需要一行代碼!

  • 鹽不是萬能的。它們只會增加黑客破解密碼所需的時間。但是,如果你的salt地址空間相當大,那麼你很好。例如,如果你有32個字符的字母數字字符串作爲鹽 - 蠻力真的需要很長時間。

  • 像bcrypt這樣的慢速算法在這方面幫助你,只是因爲它們很好...'慢'。對於蠻力攻擊來說,打破計算速度慢的哈希需要很長的時間。