選單

為什麼密碼設定為“jK8v!ge4D”仍然不安全?

如果你仔細留意的話,你會發現,在大多數平臺上,當你建立賬號時,平臺或系統會對你的賬號密碼設定設定一系列要求。其中,最常見的就是,密碼設定必須包括一個大小寫字母、數字和特殊符號,並且密碼不得少於8個字元。然而,這並不是安全的密碼設定方式。這篇文章,原標題是Why jK8v!ge4D isn’t a good password,前端開發師Jacob Bergdahl在文章中分析了這種密碼設定方式的不安全性,同時又跟大家分享了一種更安全的密碼設定方式,希望對你有用。

為什麼密碼設定為“jK8v!ge4D”仍然不安全?

首先,請仔細看看下面兩組密碼。你認為破解哪組密碼更簡單呢?你認為哪組密碼更方便記憶呢?

jK8v!ge4D(含大小寫字母、數字和符號)

greenelephantswithtophats(戴著禮帽的綠色大象)

對於這個兩個問題,無論從破解容易度,還是記憶方便度來說,答案都是第二組密碼。

然而,在各種網際網路的各種平臺上,我們仍然在採用看起來像第一組密碼的方式來設定密碼。大家都想當然地認為,只要密碼設定地過於複雜,不方便記憶,那這個密碼就不容易破解。

接下來,我們就詳細來聊聊這個話題。

在網際網路標準方面,實際上存在許多奇幻的事情。其中,就包括驗證。作為一名前端開發者,我的工作就包括去驗證使用者輸入在那些所謂“輸入框”中的內容。這些所謂的輸入框,包括使用者名稱、郵箱地址、家庭住址、電話號碼等等。

作為前端開發者,我們的工作職責就是要保證使用者在使用我們的產品過程中,不會惡意輸入或者錯誤輸入不符合既定格式要求的文字內容。

例如,郵政編碼文字框通常就只允許填入空格和數字。如果我們知道使用者來自哪個國家,我們還可以對這個文字框的格式做出更加明確的限制。電話號碼文字框通常都包括一系列數字,一個加號符號(通常都在最前面),以及一個破折號,有的情況下可能還包括圓括號。

郵箱地址的驗證就相對麻煩。然而,常規的做法是,它必須包括“@”符號,然後後面還需要包括一個小數點。在某些網站,他們會要求使用者在填寫使用者名稱的過程中,限制使用者填入的名字字元長度,有的還會限制其只能選用某些特定的字元。

驗證之所以存在,主要是基於以下幾個原因。

首先,安全因素。驗證可以防止使用者在文字框中輸入亂七八糟的資訊,從而增加改變資料庫或者引發其它惡意行為的可能性。

其次,它可以確認某種特定的資料型別。如果某個文字框只能包含數字的話,資料庫工程師就可以以此來建立一個僅含數字的資料庫。這即意味著,如果出現了非數字字元的話,就可能會出現錯誤。

然而,驗證存在的最核心原因,實際上是幫助使用者避免錯誤。

為什麼密碼設定為“jK8v!ge4D”仍然不安全?

用密碼設定規則來迫使你設定密碼

從某種程度上來講,前端開發者應該為使用者提供全方位的幫助,讓使用者設定並輸入一個從傳統意義上來講非常安全的密碼。它至少應該包含8位字元,其中還包括大小寫字母、一個數字,如果還沒有安全感的話,甚至還可以加入感嘆號等特殊符號。

基於此,“jK8v!ge4D”通常都會被視作是一個非常安全的密碼典範。毫不誇張地說,在絕大多數的網際網路平臺上,平臺都會要求你按照這種模式來設定密碼,因此,你可能就會認為,這種組合的密碼就是非常安全的密碼。

然而,這種組合的密碼並不安全。它反而是非常愚笨的密碼設定方式,是一個極容易被破解的密碼。

首先,這種密碼設定方式,會增加使用者記憶密碼的複雜程度。他們很有可能無法記住自己設定的密碼,從而“另闢蹊徑”,在筆記本或者其它地方把這個密碼記錄並儲存下來,而這種方式也很容易被他人“破解”。

其次,由於大多數密碼都採取這樣的密碼設定組合,就複雜性而言,已經是其心目中的複雜密碼了。因此,為了避免不必要的麻煩,他們可能會在各種平臺和裝置上都採用相同的密碼。

當你在某個網站上建立賬號時,後臺的一些“神奇魔法”,會將你設定的密碼轉變成一串雜湊(雜湊也 經常被錯誤地視作為加密技術)。透過這麼一個步驟,你設定的密碼,可能在資料庫中就會顯示成這樣:

k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX。

即便資料庫被駭客入侵,駭客拿到這些雜湊也無法提取有用的資訊。如果密碼設定非常大眾化,並且相關演算法也非常簡單的話,那仍然有可能根據這個雜湊來破解原密碼。不過,只要密碼設定妥當、雜湊生成過程也正常的話,它大體上仍然是非常安全的。

但問題在於,不是所有的平臺或者裝置都會為使用者的密碼生成雜湊。如果你把相同的密碼用於多個平臺和裝置的話,也許你使用的某個平臺其後臺編碼非常簡單,而你的密碼也是直接一字不差地以原密碼文字形式存在於其資料庫中。如果他們的資料庫遭到攻擊,那你可能會暴露所有平臺和裝置上相同的密碼。這麼說來就相當可怕了,而實際上,真實情況比我們想象的還要可怕。

因此,我個人建議,對於不同的平臺,還是要設定不同的密碼。然而,值得注意的是,如今大多數使用者在各個平臺上都有大量的賬戶。如果設定不同的密碼,怎麼才能記住所有的密碼呢?一些超級使用者可能會使用密碼工具,來幫助其生成並管理密碼,但一般使用者基本上都沒有這麼做。

實際上,其實還有更好的密碼設定方法。

破解密碼需要多久?

我們先看看“gtypohgt”這個密碼。它由八個隨意的字母符號組成,全部都是小寫字母。對於這種密碼,要破解它只需要幾分鐘的時間。

如果把其中某幾個字元換成數字,比如“g9ypo3gt”,那破解時間至少就需要一個小時了。如果再把其中的小寫字母換成大寫字母,比如“g9YPo3gT”,那可能需要幾天才能破解成功。另外,如果你再往裡面新增一個特殊字元,比如“g9Y!o3gT”,那可能破解這個密碼都需要一個月的時間。

“g9Y!o3gT”這個密碼設定組合,就是我們通常所認為的安全密碼。這樣的密碼設定,很難被他人猜到,也完全不屬於常規設定密碼。要破解這樣的密碼,的確需要一定的時間。但問題在於,這樣的密碼設定,會直接增加使用者的記憶難度。

然後,我們再看另一組密碼“greenelephantswithtophats(戴著禮帽的綠色大象)”。這組密碼包括24個小寫字母,沒有數字、隨機字母和特殊字元。雖然你會認為這樣的密碼設定非常簡單,但要想破解這樣的密碼,可能需要至少上百萬年時間。

所以,只要你在密碼組合中增加一個字元,破解這個密碼的難度實際上是在呈幾何數增長。前述24個字元的密碼,並不像一般的“666888”“elephant(大象)”等常用的密碼,而且也很難讓人猜測。

這才是安全的密碼

因此,我建議,設定密碼,最好就讓這個密碼變成一個故事。比如,在設定Facebook賬號的密碼時,你可以使用“afaceforabookbutapizzaforahorse(書有一張臉,但馬有一個披薩)”。總之,最好透過視覺呈現的方式來設定你的密碼。

我們的記憶強項,反而就是在這些特殊內容的記憶方面。突然之間,你的密碼就非常強大了,而且不僅記憶方便,而且還可以避免過於重複。此外,即便是跟你關係密切的人,恐怕也很難去猜測這些密碼。

日常談話中,你肯定很少會提到烏龜吧?那你是否見到過紫色的烏龜呢?肯定沒有吧。那麼,不妨嘗試下,在腦海中視覺呈現一隻紫色的烏龜。然後你就可以這樣設定一串密碼:“ioncesawapurpleturtleiswear(我發誓我曾經見過一隻紫色烏龜)”。要破解這樣的密碼,至少需要上百萬年的時間,甚至連跟你睡在一張床上的伴侶都可能猜不到。

為什麼密碼設定為“jK8v!ge4D”仍然不安全?

對於“walkingdowngrandpasroadwithlittlerufus (和魯夫斯一起在爺爺家門前走過)”這個密碼,破解可能需要上百萬年時間。即便有人知道魯夫斯是你的寵物狗,他們也很難猜到你會這樣來設定密碼。圖片來源:Jamie Street

從視覺化效果方面來講,以下這些密碼都非常容易呈現出來。

flyingcarsthatcannotflyarenotflying:如果不會飛的汽車就不是飛車。

applesmaybegreatbutpearsarelikeheaven:蘋果雖然好,但梨子卻更好。

goatswithshoesenjoytrainsonrainydays:穿鞋的山羊喜歡在雨天搭火車。

總之,其他人很難猜測這些密碼。

然而,可能有些網站會不允許使用者這樣設定密碼。根據其設定的密碼設定規則,這個密碼中沒有包含數字或大寫字母、密碼過長,或者處於其他非技術因素無法設定該密碼。

因此,你也可以透過一些小伎倆來“騙”這個系統。比如,在任何密碼字串的最後新增“A1!”。現在,你設定的密碼既有大小寫字母,也有數字和特殊字元了。只要密碼設定沒有對字元長度有要求的,那這個密碼肯定就可以設定成功。

即便你在所有的密碼字串後面都新增同樣的“A1!”,但前面字串的不同,仍然會保障該密碼的安全性。無論是“ioncesawapurpleturtleiswear(我發誓我曾經見過一隻紫色烏龜)”,還是“ioncesawapurpleturtleiswearA1!(我發誓我曾經見過一隻紫色烏龜A1!)”,要想破解它們,都是不太可能的。因此,在密碼字串的最後加上“A1!”,除了稍微有點不方便之外,沒有其它弊端。

實際上,前端開發者之所以制定相關密碼設定規則,其初衷也都是好的。畢竟,許多人並不重視密碼安全問題,通常都會設定“123456789”“666888”“elephant(大象)”等極其容易破解的常見密碼。

對於網站運營方而言,他們肯定不想發生任何資料洩露相關的醜聞。因此,即便可能會造成一系列麻煩,但他們只好強迫讓使用者設定一個相對安全的密碼。

當你下次設定密碼的生活,你可以嘗試用本文中提到的技巧來設定你的密碼。當然,結合此方法,你也可以用拼音的方式來設定密碼。比如“wofashiwocengjingjianguoyizhizisewugui(我發誓我曾經見過一隻紫色烏龜)”。

總之,在密碼設定過程中,既要方便你自己記憶,同時要讓別人無法破解。

當然,即便你對這樣的密碼設定技巧不感興趣,那你最好千萬不要設定“123456”“qwerty(順著鍵盤按鍵隨意輸入幾位字元)”等密碼。這些密碼,極度不安全,也非常容易被破解。

所以,對於這樣的使用者而言,我們前端開發者只好強迫你設定“jK8v!ge4D”這樣的密碼。

譯者:俊一