不要共用口令/密碼
現(xiàn)在相當(dāng)多的同學(xué)喜歡靠一個口令包打天下。這是相當(dāng)相當(dāng)危險的事情。同一個口令,用的場合越多,則泄密的危險越大。而一旦泄露,你的安全防線就會全面崩潰。
所以,今天要講的頭一個要點,就是絕對不要在所有(大多數(shù))場合,使用同一個口令。
密碼的分級機制
由于共用口令存在很大的風(fēng)險,比較穩(wěn)妥的辦法就是——每一個場合僅使用一個密碼。但是很多人會抱怨說:這樣會很繁瑣,增加了很多的麻煩。那如何才能做到既安全,又不太麻煩捏?這就要引入密碼的分級機制。
根據(jù)安全圈內(nèi)一個人所共知的常識:越安全的措施,通常也就越麻煩,成本也高;反之亦然。另外,根據(jù)二八原理,非常重要口令畢竟只占少數(shù)。所以,就像電影要有分級機制一樣,你的密碼/口令也要引入分級的概念。通過分級機制,對大多數(shù)不太重要的口令,可以采取簡化的安全措施;而對少數(shù)重要的口令,采取高度安全的措施。
下面,就來介紹一下,如何對不同的口令,進行分類。
第1級:不重要的口令
所謂不重要的口令,就是說萬一被盜了或者忘記了,對你沒啥損失。
比如,俺經(jīng)常碰到一些土鱉的論壇,只允許注冊會員從上面下載附件。因此俺就經(jīng)常臨時注冊一個賬號,然后登錄上去下載東西。這類賬號,基本上都屬于一次性的(用完即扔),所以重要程度很低。
對于那些不重要的口令,基本上不用考慮太多安全性的因素。隨便設(shè)置一個即可。
第2級:重要但少用的口令
對于重要的口令,還要根據(jù)其使用的頻繁程度,再區(qū)別對待。有些口令雖然重要,但是使用的頻度很低。由于這類口令很少使用,所以設(shè)置得麻煩一些,問題也不大。
比如俺管理的一些研發(fā)的服務(wù)器(比如源代碼服務(wù)器),其重要程度非常高,但是平常基本無需登錄。
第3級:重要且頻繁使用的口令
最后這類口令,既重要,又經(jīng)常用。所以,設(shè)置這類口令就比較講究。要同時兼顧安全性和易用性。
比如自己日常使用的操作系統(tǒng)用戶密碼,就屬于此類。
一些反面教材——脆弱的密碼舉例
說完了分級機制。接下來俺先列舉一些反面教材,讓大伙兒看看,啥樣的口令算是脆弱的?(順便說一下:2011年底,國內(nèi)各大網(wǎng)站紛紛被脫庫,大量用戶口令側(cè)漏。俺專門寫了一篇博文,分析國內(nèi)用戶的口令習(xí)慣)
口令和用戶名一樣
無需多說,這種情形的口令,非常脆弱。
口令是一串簡單數(shù)字
用連續(xù)的數(shù)字串(包括順序和逆序)作密碼,是很愚昧滴。
口令太短
如果你的口令小于6個字符,是很容易被暴力破解滴。畢竟,小于6個字符的所有組合,也沒多少個。對專門窮舉密碼程序來說,那簡直是小菜一碟。
用英文單詞作口令
用單個的英文單詞作口令,也很容易被破解。畢竟,常用的英文單詞,也就千把個;算上冷僻的,也就幾萬個。
在許多年以前,就有黑客專門收集整理了英文單詞的列表(稱之為“口令字典”)。而且這個字典是根據(jù)單詞的使用頻度進行排序。有了這種密碼破解字典,密碼破解程序就可以輕易猜解出那些使用單個英文單詞的密碼。
用日期作口令
有些同學(xué)希望用某個具有特殊意義的日期(比如:生日、結(jié)婚紀念日、等)作為口令。要知道這種伎倆也是不靈滴。因為常見的日期,大都分布在最近100年的范圍內(nèi)。所以充其量,可能的個數(shù)也就大約是365*100個。即便把不同的日期表示格式考慮進去,也多不了幾倍。在這個數(shù)量級上,對于暴力破解工具而言,還是小菜一碟。
其他的爛口令
上述列舉的這幾種情況,大伙兒一定要避免。另外,你還可以去圍觀一下某老外整理的一個濫口令大全(這老外真有耐心)。不過這個列表是根據(jù)歐美用戶統(tǒng)計的,未必適合中國的國情。
如何構(gòu)造復(fù)雜的密碼?
前面已經(jīng)說了:口令太簡單,容易被破解。但是太復(fù)雜的話,萬一自己也忘了,那可就完蛋了。所以,很多網(wǎng)友都糾結(jié)于口令到底該復(fù)雜到什么程度。俺的經(jīng)驗是:口令要做到對自己簡單,對別人復(fù)雜。
下面就來介紹筆者在這方面的經(jīng)驗。
用多個單詞構(gòu)成詞組
前面提到,如果用單個英文單詞作密碼,容易遭受字典攻擊。為了避免字典攻擊,可以考慮由2-5個英文單詞構(gòu)成密碼。如果你英語不靈光或你比較習(xí)慣中文,也可以考慮用2-5個漢字的漢語拼音來構(gòu)成密碼。
優(yōu)點是:
由于能顯著增加密碼長度,可以抗擊暴力破解。
缺點是:
有可能需要改變你記憶密碼的習(xí)慣。
口令中僅包含字母,復(fù)雜度不夠高。
插入特殊字符
剛才提到了用多個單詞或漢字拼音構(gòu)造密碼。為了讓密碼的強度再好一些,還可以在單詞或漢字拼音之間,插入一些特殊字符。
最常見的是插入空格。當(dāng)然,你也可以考慮插入其它字符(比如:下劃線、減號、斜杠、井號、星號、等)。
通常進行暴力破解時,為了加快破解進度,都只針對字母和數(shù)字進行暴力破解。如果你的口令中含有特殊字符,會大大提高攻擊者的難度。
優(yōu)點是:
由于口令包含較多特殊符號,復(fù)雜度大大提高。
缺點是:
很多特殊字符的輸入,要依賴于SHIFT鍵輔助,會影響你輸入密碼的擊鍵速度。這會給偷窺者留下可乘之機。
字符變換
所謂的字符變換,就是用形狀類似的字母和數(shù)字進行相互替換,通過這種變換,可以規(guī)避前面提到的基于口令字典的攻擊。
常見的變換有如下幾種:
字母o和數(shù)字0
字母l和 數(shù)字1
字母z和數(shù)字2
字母s和 符號$
字母g和 數(shù)字9
字母q和數(shù)字9
字母a和符號@
字母b和數(shù)字6
字母x和符號*
假設(shè)俺想用單詞 program作為口令,那么經(jīng)過上述的變換之后,就成為pr09r@m很明顯,變換之后的口令同時具有字母、數(shù)字、符號。強度相當(dāng)好 :)
如果你有興趣,還可以對給出的這幾個變換,進行擴展,以滿足自己的習(xí)慣和喜好。
優(yōu)點是:
不用改變你原先的記憶習(xí)慣。
由于口令包含較多特殊符號,復(fù)雜度大大提高。
缺點是:
如果你想好的口令中,恰巧所有字母都沒有對應(yīng)的變換,那就比較不爽啦。
鍵位平移
這個招數(shù)也比較簡單,就是在進行鍵盤輸入時,把手向右平移一個鍵位。通常咱們在盲打時,兩只手的食指分別對著字母F和字母J。平移之后,則食指對著G和K。
假設(shè)俺想用單詞 program作為口令,那么經(jīng)過上述的變換之后,就成為 [tphts,經(jīng)過這種輸入法,口令已經(jīng)面目全非。但是對你自己來說,并不難記。
優(yōu)點是:
不用改變你原先的記憶習(xí)慣。
口令看起來完全沒規(guī)律。
缺點是:
依賴于QWERT的鍵盤布局。萬一哪天你想在非QWERT鍵盤(比如某些手機鍵盤)上輸入口令,那你就歇菜了。
藏頭詩
在某些古代小說的情節(jié)中,經(jīng)??梢钥匆娪胁仡^詩的橋段。藏頭詩的點子,也可以借用來構(gòu)造安全口令。
為了用此招數(shù),你先要想好一句令你印象深刻的話。這話可以是中文,也可以是英文、法文、火星文......反正只要是你熟悉的語言既可。最好這句話的字數(shù)(單詞數(shù))在6-20之間。然后你把這句話每一個單詞的頭一個字母取出來,組合成一個口令。如果是中文的話,就把每一個字的拼音的聲母取出,組合成口令。
假設(shè)俺想好的話是:只有偏執(zhí)狂才能生存。那么用拼音的聲母表示就成為:zypzkcnsc
優(yōu)點是:
不用改變你原先的記憶習(xí)慣。
口令看起來完全沒規(guī)律。
缺點是:
口令中僅包含字母,復(fù)雜度不夠高。
如果句子中的字數(shù)(單詞數(shù))不夠多,效果就不夠好。
對于港臺的同學(xué),由于沒學(xué)過漢語拼音,只好用英文的藏頭詩了。好在港臺的英語教育通常比大陸好,應(yīng)該關(guān)系不大 :-)
巧用SHIFT鍵
在構(gòu)造口令的時候,適當(dāng)?shù)亟M合一下SHIFT鍵,有時也可以達到不錯的效果。假如你的口令中,有部分字符是數(shù)字,那當(dāng)你輸入口令時,按住SHIFT鍵會讓這些數(shù)字字符變?yōu)樘厥夥枴?/p>
優(yōu)點是:
不用改變你原先的記憶習(xí)慣。
由于口令包含較多特殊符號,復(fù)雜度大大提高。
缺點是:
萬一你原先的口令僅有字母,沒有數(shù)字,則密碼的強度會稍微打折扣。
由于要依賴于SHIFT鍵進行切換,會影響你輸入密碼的擊鍵速度。這會給偷窺者留下可乘之機。
運用數(shù)學(xué)等式
還有一種又好記,破解起來又復(fù)雜的密碼構(gòu)造方式——運用數(shù)學(xué)等式。
比如,俺的密碼可以設(shè)計成:7+8=15
雖然只有6個字符,但是由于包含了符號,已經(jīng)有一定的強度。如果你覺得6字符太少,還可以很容易增加,比如改為:110+9=119
如果你覺得還不夠復(fù)雜,還可以搞得再變態(tài)一點——把某個數(shù)用英文表示。比如:
two+7=nine
優(yōu)點是:
密碼同時包含了字母、數(shù)字、符號。標準的高復(fù)雜度!
缺點是:
需要改變你記憶密碼的習(xí)慣。
一旦你的口令被別人看到,別人很容易就可以發(fā)現(xiàn)你構(gòu)造口令的規(guī)律。
利用散列值(哈希值)
最后,來說一種俺的看家本領(lǐng)——利用散列值構(gòu)造口令。
不熟悉IT技術(shù)的同學(xué),可能不了解散列值是啥玩意兒。這里不想多浪費口水解釋,好奇的同學(xué)可以查一下資料紹。
為了構(gòu)造基于散列值的密碼,俺建議大伙兒選用的是CRC32散列算法。為啥用它捏?因為這玩意兒用起來比較方便。比如,假設(shè)俺想得到某個文件的CRC32散列值,只要用WinRAR或7-Zip等壓縮工具,把它壓縮成zip格式的文件,然后就可以看到該文件的CRC32值了(因為zip格式用CRC32散列算法作為文件的校驗碼)。不信你隨便拿手頭一個zip格式的文件打開來看看就明白鳥。
現(xiàn)在,詳細說一下基于散列值的密碼如何構(gòu)造。
首先,你先想好一個字符串,作為計算散列的種子。這個字符串不需要很復(fù)雜,也不需要很長。比如,你叫張三,那你可以拿張三的拼音聲母zs作為種子串。
假設(shè)你有一個hotmal的郵箱,需要設(shè)置口令。你可以先用notepad生成一個txt文件。里面先寫上種子串sz再寫上hotmail,存盤。然后把這個txt文件用工具壓縮成zip格式,看一下它的CRC32校驗碼(是9C9041C0),然后就拿它作為密碼。
如果你再有一個gmail郵箱需要設(shè)置口令,只要同樣地,往那個txt文件寫入 zsgmail,然后計算CRC32,既可以得到另外一個值(03B2F77D)。大伙注意到?jīng)]有?這兩個值看起來沒有任何關(guān)聯(lián)性,而且從這兩個口令,也看不出和種子串zs有啥關(guān)系。
優(yōu)點是:
密碼同時包含了字母、數(shù)字,但是沒有特殊符號。復(fù)雜度屬于中高!
由于散列值具有隨機性。也就是說,你看到的絕大多數(shù)散列值都沒啥規(guī)律。
由于散列值具有不可逆性。也就是說,即便有一個密碼暴露了,攻擊者也看不出規(guī)律。
如果把CRC算法換成其它算法(比如MD5或SHA-1),可以輕易構(gòu)造出超長的密碼(32個字符)。
缺點是:
這種密碼是完全隨機的,不是常人所能記住滴。所以,在密碼分級機制中,它僅適合第二級的密碼。第三類密碼沒法這么玩。