題:
能否說出哈希結果是否接近密碼猜測?
elmer007
2016-09-16 01:50:17 UTC
view on stackexchange narkive permalink

最近我一直在閱讀有關密碼管理的信息(非常有趣!),我想知道類似字符串的哈希值有何不同。

是否可以通過比較來了解密碼猜測是否接近例如,如果真實密碼是“ password123”,並且黑客嘗試“ Password123”,“ password1234”,“ password124”等,則生成的散列是否為足夠類似於黑客或他們的計算機可以告訴他們的正確哈希值嗎?

讓我們假設黑客知道任何鹽,胡椒粉,辣椒粉,阿斗波等等。他們嘗試使用正確的密碼,它們會生成匹配的哈希。

(我認為這可能會因所使用的哈希函數而異,但我不確定這一點。)

簡短的回答:否-否則彩虹桌最終會*小*很多
散列的目的是盡可能地隨機。所以我希望不會。
真的從來沒有問過這個問題嗎???只需嘗試用一個短字符串的MD5哈希值,更改一個字母,然後自己尋找!http://www.miraclesalad.com/webtools/md5.php
@schroder您是否將“應該”與“不”混淆?
-1
@DmitryGrigoryev我不這麼認為。我使用的定義是:“散列函數是可用於將任意大小的數據映射到固定大小的數據的任何函數”。某些散列函數具有的屬性使其比其他應用程序更適合密碼應用程序,但是模數是散列函數。您是否有其他更好的定義?
-1
九 答案:
ThoriumBR
2016-09-16 02:12:15 UTC
view on stackexchange narkive permalink

否,您無法確定您對哈希的猜測有多接近。設計哈希函數時要牢記這一點:輸入上的單個更改位必須在輸出上更改很多位。 。它叫雪崩效應

貝婁是你的一些例如密碼散列SHA1:

  cbfdac6008f9cab4083784cbd1874f76618d2a97  -  password123b2e98ad6f6eb8508dd6a14cfa704bad7f05f6fb1  -  Password1232b4bfcc447c3c8726d26c22927a68f511d5e01cc  -  password124115b55dcc1cd9a0dfdd60c120e83eaf658c45fc6  - 右馬電池釘abf7aad6438836dbe526aa231abde2d0eef74d42-正確的馬釘電池釘 

單個更改將完全改變哈希結果。實際上,在理想情況下,對於輸入的每一位更改,輸出的每一位都將以50%的概率進行更改。

這是_ [正確的馬力電池釘書釘](https://xkcd.com/936/)_ :)(SHA1`abf7aad6438836dbe526aa231abde2d0eef74d42`)
評論不作進一步討論;此對話已[移至聊天](http://chat.stackexchange.com/rooms/45501/discussion-on-answer-by-thoriumbr-can-one-tell-if-a-password-guess-was-靠近)。
因試圖與XKCD配合使用而被巧妙引用,但隨後卻對其報價錯誤。
好吧,正確的*接近*可以糾正,結果不能有太大的不同
您應該注意,這對於* cryptographic *散列是正確的。如果使用例如Java的String.hashCode()方法或其他通用哈希函數,則情況並非如此。
-1
@theonlygusti您在向誰投票?里諾?您如何拒絕評論?只是好奇
-1
OIC。很抱歉這麼傻感謝您的解釋(+1)
此答案中給出的SHA1散列是密碼的散列,最後是換行符(LF)。因此,它們與密碼字符串的散列完全不同,而無需進行額外的行更改。
@JiK並不重要。關鍵是要表明輸入的一位完全改變了輸出。
此外,良好的密碼哈希值會被添加。
Surendra Patil
2016-09-16 03:31:56 UTC
view on stackexchange narkive permalink

不,由於雪崩效應,即使輸入發生一點點變化也應該在輸出中產生很大的差異。

還要討論諸如md5之類的哈希函數或其他...給定任何輸入size輸出大小不會改變。在md5中,如果輸入大小為2位或2000位,則輸出將始終為32位的字母數字(十六進制格式)。因此,即使普通用戶已經對md5進行了哈希處理,也幾乎無法猜測輸入的大小,猜測密碼已經超出了普通用戶的範圍,仍然有通過應用算法和大量置換以及高端並行計算的方式。組合以找出可能的輸入之一(如果您具有散列代碼...!)

請不要使用MD5對密碼進行哈希處理(並且僅出於“效率太高”的原因)。
僅以md5為例...我知道更好的哈希函數...
Jason
2016-09-16 22:06:56 UTC
view on stackexchange narkive permalink

要在上面的答案中添加一個附加元素-哈希函數的整個點是為了避免問題中的信息種類-如果您可以確定任何內容比較輸入與輸出之間的相似性,這代表哈希函數的失敗。

不僅僅是哈希函數執行某些工作,而且順便說一句,您無法弄清哈希函數的任何信息。輸入,散列函數的工作是為您提供有關輸入的零信息,如果您可以通過比較兩個輸出來找到有關輸入的某些信息,那將違反該原理。

您的意思是“加密”哈希函數的全部內容。
@XiongChiamiov是正確的-補充說明,如果您使用非加密哈希函數對密碼進行了哈希處理,那麼您就搞砸了。
TTT
2016-09-16 20:18:06 UTC
view on stackexchange narkive permalink

這取決於您使用的哈希函數。由於您指定了密碼哈希,然後又明確地指定了,因此,您永遠都不想對洩漏任何信息的密碼使用哈希功能。

也就是說,確實存在提供相似性信息的哈希函數; 此答案中提供了更多信息。

只有一個哈希函數不會“洩漏任何信息”,它將所有輸入映射到同一輸出。
@NajibIdrissi洩漏有輸入的信息。
@MichaelKjörling是嗎?這實際上不是新信息。我的評論並不是開玩笑,僅供參考...
@NajibIdrissi-我同意你的看法。過去,散列函數可能不會洩漏任何信息,這對於檢查密碼也很有用。儘管我們可以足夠接近以使其實際上等效。
@NajibIdrissi儘管遇到碰撞,特定功能的表現卻很差...(j / k)
@TTT是“醫務人員”嗎?密碼學是一門精確的科學。“足夠接近”不是“相等”。
@NajibIdrissi-我不確定您要問什麼?至於足夠接近,我沒有說這是相等的,只是*實際上*相等。因為其中*實際上*不會洩漏任何信息,即使* any *有點誇張(如您所指出的那樣。)如果那不是真的,我們將無法安全地使用任何哈希函數作為密碼。
Joshua Hunter
2016-09-16 02:08:05 UTC
view on stackexchange narkive permalink

不。

例如,這是MD5中的“ hello”:

  5d41402abc4b2a76b9719d911017c592  

這是'Hello':

  8b1a9953c4611296a827abf8c47804d7  
好吧,這必然是一種關係。關鍵是這兩種方式都不透明。
@AntonSherwood,您當然是正確的。進進出出之間有關係。如果您將相同的東西放進去並且期望每次都再次出現相同的東西,那一定是必須的。 但是,只要散列函數沒有受到損害,就應該不可能取出結果並確定輸入的內容。因此,輸入與輸出之間沒有“明顯”的關係。
Flutter
2016-09-20 15:11:30 UTC
view on stackexchange narkive permalink

這有點牽強,但通常不行-無法通過哈希值確定密碼猜測的“正確性”。我能想到的最接近的場景是將密碼短語的各個部分分割並分別進行哈希處理時,例如 LMhash。這種情況將允許攻擊者從密碼的正確部分中收集信息,但不允許攻擊者推斷每個段與正確的“接近程度”。

其他用戶對散列和雪崩效果進行了很好的概述,因此我不再贅述!

Lucas
2016-09-19 01:56:12 UTC
view on stackexchange narkive permalink

根據所使用的算法,可能可以計算出密碼的接近程度,這會導致碰撞攻擊,從而使破解密碼的方式比暴力破解更快。

據我所知,情況確實如此由於此類缺陷,MD4可能會在幾毫秒內被破解。我沒有分析MD4漏洞,但我敢打賭其中嵌入了一個接近方程。

讓我們舉一個白痴的例子:一個哈希函數,它是密碼的ASCII碼之和。密碼AB和BA將具有相同的哈希值131。如果實際密碼為AB,則係統還將接受BA作為實際密碼。進行一些逆向工程將顯示一種關係:a)將任何字母更改為下一個字母將在哈希中添加一個; b)在密碼中添加新的A會在哈希中添加65。然後裂縫就準備好了。破解返回的密碼可能與用戶使用的密碼不同,但是系統不會知道兩者之間的區別。

是的,密碼哈希算法的目的是防止這種情況的發生。它應該是不可預測的,因此需要蠻力。但並非總是能按預期工作。數學是無法原諒的。

編輯:由於這些攻擊,現在MD4,MD5和SHA1已過時。為了避免這些漏洞,誕生了新的算法。密碼檢查的作用不僅僅在於散列。新算法的採用並沒有我們想要的那麼快。對於不斷更新的Linux,基本密碼應使用現代算法。但是我敢打賭,世界上有很多系統運行的軟件已有10年以上的歷史了,因為如果使用付費軟件,新版本的操作系統可能與較舊的應用程序不兼容,或者僅通過許可費用就不容易。我敢打賭,許多將自己的密碼數據庫與系統分開的軟件的安全性較弱。

但是這些天沒有人使用MD4,MD5甚至是鹽醃的SHA1,對嗎?我們都在使用pbkdf2,bcrypt或腳本嗎?正如其他張貼者所解釋的那樣,即使是古老的MD5也不會對輸入產生巨大不同的輸出,而輸入僅相差1個字符,這意味著不會,相似的密碼嘗試不會產生相似的哈希值。
添加了對此的評論
MD5和MD5都比10年要早得多。MD5在1993年SHA0發佈時已過時,MD5的一個組成部分在1995年被破壞。SHA1在1995年發布,但是2005年在SHA1中發現了理論上的弱點,並且11年前不再考慮SHA1保護資金雄厚的對手,因此您想使用SHA256或SHA512,但不能單獨使用。因此,HMAC函數Pbkdf2,bcrypt,scrypt等全部使用帶有熵的哈希函數作為其算法的一部分,但不是JUST哈希算法。
埃爾默克雷格(Craig,Elmer)的問題是關於“假設某人知道所有鹽類,以及其他使用的技巧”的哈希。
Elmer的問題是關於密碼管理的
mckenzm
2016-09-19 11:46:00 UTC
view on stackexchange narkive permalink

是的,但是您必須存儲散列,並將其關聯起來,因此在這里和那裡的工作和資源以及可能的安全問題。例如,即使在現在,也有可能在Wordpress網站上看到“嘗試”的明文密碼,如果其中任何一個與其他地方的已知高熵密碼相匹配,我們都可以知道它是從哪裡洩漏出來的。當然,有一些算法可以生成錯誤輸入的數據,由於URL蹲在類似的錯誤拼寫上,因此眾所周知,但是您需要分配分數才能確定匹配的接近程度以及需要達到的接近程度提醒。本質上,如果這些是詞典單詞,則可以按Soundex或類似方式對它們進行排名。

您能再解釋一下嗎?我不知道如何確定兩個哈希具有相似的輸入。
在哈希之前確定相似性。鑑於“迪斯尼樂園”是一個低熵密碼,因此您可能會為“迪斯尼樂園”和“迪斯尼樂園”生成哈希(以及其他)。除非有衝突,否則您將有一個與密碼相關聯的哈希列表,如果被單擊,則可以將其檢測到。相似性的標準由您決定,但您可以通過重複或省略原始字符來存儲100個未命中的字符。您無法從哈希中執行此操作,在捕獲時需要密碼。在企業級別,這可以建立一個黑名單來防止諸如“ Summer01”,“ Summer02”等序列值。
可以將其列入黑名單,但最好在指定新密碼時檢查“是否有足夠的區別”。要求用戶(重新)輸入舊密碼,然後為您提供這兩個密碼的明文(此外,無論如何,在更改過程中都要進行驗證的良好做法)。另請參閱Harper的答案和評論。對於加密哈希,答案是“否”,這是原始問題,因為您實際上是在與_other_哈希進行比較(此外,您還基於未哈希/未加密的值在哈希之間創建了鏈接)。
Harper - Reinstate Monica
2016-09-19 06:34:15 UTC
view on stackexchange narkive permalink

不是通過看哈希來的,不是。

但是他們可以強行使用接近輸入密碼的幾千個密碼。

當然,他們假定他們可以繞過站點對某人進行多次嘗試的任何防禦措施。顯然,該站點本身俱有這種能力,例如,如果它想檢查密碼是否只是用手指捏住,而不是將其計入允許的嘗試次數之內。)

需要進行多少次嘗試n個字符的密碼?

  • n來測試用戶是否用手指指了多餘的字符。

  • (n + 1)* 95來測試缺少的字符角色在任何位置。

  • n進行測試,以測試用戶將1個字符的小寫字母而不是大寫字母或移位(#)而不是未移位(3)。

  • n(n-1)來測試2個字符的小寫/不移位,反之亦然。

  • < = 6n來測試用戶無意中鍵入了一個相鄰字符而不是該字符。 (即,如果說是F,則用D R T G V C代替)。

  • 12來測試用戶的一隻手的位置是否應該偏移一個位置,另外還要為鍵盤中部(YGHB)上的一些字符進行偏移可能被任何一隻手擊中。

如您所見,這些數字並不是很大,因此這種分析是可行的。

我錯過了這個答案的重點。您沒有將哈希與實際哈希進行比較以了解其接近程度,而是基於相似的輸入構造了一組哈希。此設置可能對驗證用戶有用(關閉不算入鎖定前的最大嘗試次數),但是如果該設置洩漏(“嘗試輸入錯誤的值,但關閉!”或“僅需要嘗試一種形式的),也會幫助攻擊者例如:“ password”還測試“ Password”,“ password1”,“ password2”,“ passwords”,“ passwordz”,但不測試傳統的大寫鎖定“ PASSWORD”和“ pASSWORD”。
我認為主機沒有任何理由告訴黑客/用戶他已經接近,這僅是有用的內部情報。如果黑客有哈希值和鹽分,這還使他可以輕鬆地在他可能已經擁有的密碼附近測試密碼,例如來自黑客*其他*系統。對於用戶而言,這意味著對密碼的微小更改根本就不受保護。
如果破解者俱有一組哈希(實際+閉合),則測試1個可能的哈希密碼將消除該組中的所有密碼(如果閉合1000個,則計算1個哈希並將其與1001個_without_ _recomputing_哈希進行比較)。我以為pwd db(帶有所有額外的“關閉”散列)洩漏了(但請參閱下一條註釋)。
備用破解方案:假設cracker(me)嘗試登錄到一次3次錯誤嘗試後鎖定5分鐘,在12次之後鎖定1天,並在24次之後要求重置但不算“足夠接近”的網頁登錄。如果我實際上嘗試使用任何“關閉”密碼,那幾乎就像在跟踪鎖定時嘗試嘗試1000。如果“ opensesame”關閉,那麼我只需要測試接近於opensesame的密碼。更糟糕的是,鑑於密碼重用(準確或幾乎類似),**這對試圖通過標準登錄程序將一個網站的違規行為擴展到其他網站的任何人來說都是天賜的禮物。**我可以永遠嘗試!**


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...