. 時空權衡意味著不用儲存所有可能的雜湊(如果您嘗試儲存 nt 雜湊,所需的儲存量會超出全世界所有儲存器的容量)。儲存所有從 76-字元字符集中挑選的最多含 14 個字元的 nt 雜湊,需要 5,652,897,009×10 億×10 億位元組的儲存量,這超出了當今任何檔案系統的容量。而儲存所有 lm 雜湊(只需 310 千吉位元組)目前仍然不可行。為了解決這個矛盾,oechslin 博士提出了時空權衡理論,從而只需儲存一部分雜湊及其相關聯的密碼。這極大降低了儲存要求,只需 17 吉位元組的儲存量,就可以儲存相同字符集的 lm 雜湊。我們會看到,支援密碼短語的主要觀點之一是:密碼短語消除了儲存要求,並阻止了預先計算的雜湊攻擊。
密碼短語擁護者的第乙個觀點是:與記憶長(超過 10 個字元)密碼相比,使用者更容易記住密碼短語。這或許沒錯,但是由於很少有使用者使用 10 個以上字元組成的密碼,這個觀點是否正確還很難說。為了回答這個問題,我進行了一項完全不科學的研究,來確定使用者能否記住含 10 個字元的密碼。我向管理員們徵求了他們的意見;99% 的人稱使用者不僅記不住含 10 個字元的密碼,而且會拒絕使用這類密碼。那麼,使用者能否記住由 10 個字元組成的句子呢?可能吧,因為只有幾個需要記憶的符號(這裡指單詞)而已。我想引用一篇著名的文章,是 miller 在 1956 發表的經典之作「the magical number seven, plus or minus two:some limits on our capacity for processing information.(神奇的數字七,加二或減二:人類資訊處理能力的一些侷限性。)」
這篇文章(只需讀一下標題就有所感觸的偉大的文章之一)的前提是人類只有有限的資訊處理能力。我們一次能記住 7(加或減 2)個資訊塊。人類的資訊處理能力有限的事實比數字 7 更為重要。有些人認為這個數字應該是 5(加或減 2)。我認識的一些人堅持認為該數字應該是 3,但我認為他們只是在做無用功。無論如何,人類的資訊處理能力都非常有限。
「(資訊)塊」的定義也隨我們所要做的具體事情而定。在由 10 個字元組成的隨機密碼中,乙個塊就是乙個符號,而 miller 聲稱多數人都記不住 10 個隨機的符號。使用者更容易記住由兩三個詞語或資訊塊組成的含 10 個字元的密碼短語。
如果我們假設使用者能夠記住 7 個資訊塊、詞語或符號,那麼他們會用的最長的密碼將被限制在 9 個字元以內。這個觀點已經得到了實踐測試的證實。為了評估密碼的強度,我破解了乙個大型域中的 28,000 個密碼。我能夠完全破解其中 23,311 個,佔 83%,並部分破解另外 13.16%。但是這個例子並沒有給出全部的密碼,而本文後面的統計數字都是根據我對這 23,311 個已破解的密碼得來的。這項分析為 9 個字元的限制提供了一些佐證:域中 64% 遭破解的密碼(要求至少由 7 個字元構成)包含的字元都不超過 9 個。該域的所有密碼中至少有 90.37% 包含的字元不超過 15 個。(除非以明文形式捕獲這些密碼,否則無法確定到底有多少個密碼含有的字元數不足 15 個。因此,假設沒有 lm 雜湊的密碼含有 15 個字元或更長,即便一些密碼因為其他原因而缺少 lm 雜湊)
在密碼短語中,每個詞語就是乙個資訊塊。英語詞彙的平均長度為 5 個字元。在英語中,有五個字元組成的詞語也是用於衡量每分鐘打字速度的標準。同樣,在1995 年對 45 名 pgp 使用者進行的一項調查中
,arnold reinhold 發現 pgp 密碼短語所含的詞語平均由 5.3 個字元組成。有趣的是,reinhold 還報告稱,在他的這項研究中,所有詞語中有 5/8 屬於英語詞典中的詞彙。這個例子太小,在學術上不具備有效性,但是在少的可憐的文獻裡,這是我們手頭僅有的最佳事例。
重新回到 miller 的觀點上,能記住 7 個詞組成的句子的使用者可以設定含 41 個字元的密碼。這一推論有一些前提。首先,真正的密碼短語不可能這麼長。例如,我現在所用的密碼短語(對,我的確在用)只含 35 個字元,但已經覺得太麻煩了。另外,reinhold 還發現密碼短語一般只含 4 個詞。
另乙個支援密碼短語的觀點是:密碼短語更長,所以更強大。密碼短語的長度與密碼的長度沒有直接的可比性。之所以認為更長的密碼就更好是因為,通常衡量密碼強度的方式是:破解所需的時間。例如,正如我們前面看到的,破解 8 字元密碼要比破解 7 字元密碼多花 5 年又 11 個月的時間。但是只有當隨機選取密碼並且每個符號在密碼中出現的機率完全相同時,這個觀點才能成立。如果密碼不是隨機選取的,那麼這些計算結果將無法成立。
作為另乙個支援更長密碼的觀點,長於 14 個字元的密碼不會生成 lm 雜湊的說法經常被引用。因為我們可以通過其他方法去除 lm 雜湊,單單去除 lm 雜湊並不是密碼短語的優勢所在。那麼,長度更長就有優勢嗎?不一定。目前,密碼破解程式設計用來破解符號,但是沒有理由說,未來的破解程式就不會使用單詞作為符號。相反,我們當中有些人已經發現了這方面的可行性。所以,更長的密碼不可能永遠具有優勢;它們只是有助於防範當今的破解工具。
密碼短語有乙個顯著的優點:熵值更高。熵一般用於衡量隨機性。熵由三個部分組成:所選擇專案的數量、從中選擇的集合的大小以及選擇每一項的概率。由於密碼短語比密碼更長,因此就算從相同的字符集中進行選取,也會比密碼擁有更高的熵。這一點值得注意,因為密碼破解程式會根據概率來進行破解。密碼破解程式通常不會簡單地嘗試每個可能的字母組合來破解密碼,而是先從字典中的一些常見組合入手,然後根據字母的出現頻率進行重新組合。因此,我們對於 28 天破解 7 字元密碼的計算結果可能有誤。實際上,很可能只要幾秒鐘就能破解許多密碼(取決於它們的構成方式)。所以,與單純的長度和字符集相比,熵能夠更好地衡量密碼的強度。
讓我們來看一些例子。測試顯示,我們的測試例項中有 83% 以上的密碼只是從字母、數字以及符號(!@#$%^&*()-_+=)組成的字符集中組合得來的。該字符集有 26+26+10+14=76 個英文符號,以及一些其他語言的符號。另外,那些密碼所用的符號中有 80% 的符號選自那 76 個符號中的 32 個。32 個常見的符號為(按出現的頻率排列):ea1oirn0st2lud!m3hcyg94ksbpm758b。更有趣的是,有 10% 的密碼單單由這 32 個字元組成。
含 76 個符號的字符集的內在熵或絕對比率為每個符號 r=log2l = 6.25 位。絕對率通常被視為熵的上限,同時假定每個字元被選中的概率相等。但是 c.e. shannon 計算出 8 字母英語資訊塊的每字母熵為 2.3 位元組(shannon, c.e., 「predication and entropy in printed english,」 bell system technical journal, v. 30, n. 1, 1951, pp.50-64). 記住,shannon 是根據採用 26 字符集的英語詞進行計算的,而不是我們例子中的含 76 個符號的字符集。我們已經發現使用者只從 32 個符號中選取大多數符號。無論如何,每個密碼字元的實際熵可能要大於 shannon 所計算的 2.3 的結果,但卻要小於 6.25 的絕對比率。log2 32 = 5(雖然比我想象的要高一點)對於密碼每位熵的上限來說,是乙個不錯的估計值。由於密碼的平均長度為 9.16 個字元。我們將其四捨五入為 9,那麼所得的熵不會超過 9*5=45 位。
支援密碼短語的觀點認為,大多數人的詞彙量超過 76 個。也可以認為密碼短語是由一種語言組成的 —— 由該語言中的詞彙來構築密碼短語。《牛津英語詞典》收集了 616,500 個單詞,但是只有參加拼字比賽的人和參加大學入學考試的學生才與其中 614,000 個詞打交道。現實中,據語言學家 richard lederer 估計,美國人的平均詞彙量(對於歐洲人在此所要進行的各種抨擊,我將保持克制)為10,000-20,000
而語言學家 james l. fidelholtz 估計這個數字為50,000-70,000
這兩位權威人士都認為其中絕大多數屬於回憶性詞彙——比如,某個單詞聽到才認識,但不會用。普通人只會使用上述詞彙中的一小部分。
讓我們假設密碼短語僅根據 300 個單詞組成。這可能算是非常保守的估計,但是另一方面,多數單詞只有當通過特殊的方法串在一起時才有意義,從而極大降低了密碼短語的隨機性。
如要計算密碼短語的實際熵,就需要知道一共使用了多少個詞。上面提到的 pgp 研究的單詞的中間值為 4,但平均數則要高一些。為了遵守 miller 的理論,讓我們使用由 5 個詞組成的密碼短語作為平均值。
而且,我們計算密碼短語的熵時,還未考慮到所估計的詞彙量。我們可以假定,如果密碼短語太普通,攻擊者就可以開始使用利用單詞而不是符號作為單位的「密碼短語破解程式」。這種情況會給密碼隨機性計算方法帶來巨大的變化。使用單詞作為單位可能比使用作為符號組成單詞的字母更加合適。如果我們使用所掌握詞彙量中的 300 個單詞來組成密碼短語,並假定這些單詞可以隨機組合,那麼所得到的每單詞的絕對比率為 log2300 = 8.23 位。使用由 5 個單詞組成的密碼短語得到的熵值為 8.23*5= 41.2 位,而使用由 6 個單詞組成的密碼短語得到的熵值為 49.4 位。
使用單詞為單位使密碼短語看起來根本不如密碼那麼有吸引力。實際上,由 5 到 6 個單詞組成的密碼短語的強度大致等同於 9-字元密碼。應該說這不算是乙個科學的驗證結果。必須進一步進行研究,以證明這些熵計算方法的正確性.
C C 補習 型別和操作符 PART2
繼續part1的內容,這篇主要補習下陣列中那些我不知道的以及一直在犯的錯誤東西。1 交錯陣列 2 一直會犯的陣列定義錯誤 一 交錯陣列 在沒補習之前我一直不知道有個陣列叫交錯陣列 看來我基礎夠差的 我一直認為下面2段 定義效果是一樣的 int nums int nums2 這幾天補習下來才發現我錯的...
C 類和物件的學習 part2 物件特性
完成對物件的初始化和清理。編譯器強制,自動呼叫。建構函式語法 類名 析構函式語法 類名 分類方式 三種呼叫方式 具體程式如下 arrayone.cpp small arrays of integers include using namespace std 建構函式的分類和呼叫 class pers...
資料庫複習2 修改和更改密碼 儲存引擎
方法1 用set password命令 首先登入mysql,使用mysql自帶的那個客戶端連線上mysql。格式 mysql set password for 使用者名稱 localhost password 新密碼 例子 mysql set password for root localhost ...