2011-08-25 85 views
1

這是一個非常基本的問題。我已經尋求幫助,但找不到具體的答案。所以我特意在這裏問。在blowfish加密哈希中查找salt

用例是,我想找到指向可用哈希列表的弱密碼。爲此,我必須將每個已知/常用單詞的散列與可用散列進行比較。所有這些都是在C++ for Unix中使用openssl/blowfish.h完成的。

但是,要創建此猜測字的哈希,需要使用與用於密碼哈希的鹽相同的鹽生成。

我在這裏的問題是我如何從密碼哈希中提取鹽。 假設,下面是我的散列:

$ 2A $ 10 $ FTx8T5QrEbxYVe.NJ6iOhuei.V9qgl60xF8/8s7iZRDIlOl.ibDEW

是什麼鹽呢?或者我如何實現目標?任何指針都會很棒!

在此先感謝。

+1

http://stackoverflow.com/questions/4683350/blowfish-salt-length-for-the-crypt-function –

+1

好文章由傑夫阿特伍德關於鹽和哈希和彩虹表http:// www。 codinghorror.com/blog/2007/09/rainbow-hash-cracking.html到 –

回答

1

這不就是鹽的重點嗎?你不知道它是什麼?那麼沒人可以來做你現在想做的事情?

我明白鹽的方法是這樣的:

  • 你有一個字符串,讓我們把它password
  • 你有和算法,它接受一個字符串,並從中產生一個散列。我們稱之爲blowfish
    • 是甚至是正確的?是河豚哈希算法?我不這麼認爲!
    • 讓我們打電話給我們的算法md5
  • md5會產生一個散列password,但它總是會產生相同的一個
  • 你有一個壞傢伙。我們給他打電話Mrun
  • Mrun試圖通過不使用只是password一束已知密碼測試md5從字典
  • 找出password,而是password + salt,不同的散列產生並Mrun被挫敗。

如果您需要查找鹽,您必須至少有一個已知的密碼和散列組合。然後你可以嘗試用暴力來弄清楚鹽。祝你好運。哦,我希望你在這裏不是邪惡的。哦,我希望其餘的邪惡生物也是無能爲力......

+0

你在這裏有一些誤解---如果你不能得到鹽,你如何驗證密碼是否正確?鹽是爲了防止*預編譯表*,但不是在現場表上。這也是你不應該重複使用鹽的原因。 –

+1

我認爲你誤解了我 - 如果你發現鹽(通過猜測,將哈希算法應用於密碼並猜測並檢查已知哈希),那麼你可以使用salt重新編譯你的表並破解其餘的密碼。 –

+1

我同意J-16。每個用戶都將擁有自己的鹽值,並採用適當的設置。沒有鹽這樣的東西。即密碼錶將有三列:'用戶,鹽,哈希'。 – MSalters

2

只要通過密碼散列作爲鹽 - 它是足夠聰明的提取自己。這是crypt()

How Passwords Work in Unix, Mac OS, and Windows現代Unix和「BSD風格的」散列的慣例。

注意:crypt()salt參數不是鹽。這是$algorithm$salt$MORESALTsomething,所以你不應該自己提取鹽。 - 歷史(DES時代)原因稱爲salt

參見Why does crypt/blowfish generate the same hash with two different salts?

+0

是的。我看到了第二個鏈接。基於這一點,我做了一些實際上不適合我或者給出意想不到的結果的假設。我無法弄清楚我應該如何使用blowfish API作爲我的用例。 – Mrun

+0

使用blowfish API可以達到相同效果嗎? – Mrun

+0

我不這麼認爲 - 密碼哈希中使用的河豚是一個修改過的。 –

1

的密碼散列函數的「鹽」的值與密碼,然後將得到的字符串被散列。爲了找回鹽,這意味着你需要找回被散列的字符串。顯然,這有兩個主要問題:

  1. 如果您能夠找回散列字符串,它也將包含明文密碼。這將是散列函數的一個主要安全失敗。
  2. 你還必須弄清楚連接字符串的哪一部分是鹽,以及哪個密碼。