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