如果你仔細留意的話,你會發現,在大多數平台上,當你創建帳號時,平台或系統會對你的帳號密碼設置設定一系列要求。其中,最常見的就是,密碼設置必須包括一個大小寫字母、數字和特殊符號,並且密碼不得少於 8 個字符。而很多專家都告訴你,這是目前最安全的密碼設定方式,然而,實際上並不是如此。
追蹤T客邦IG,送你《2020影音大補帖》 https://bit.ly/3gjivf3
前端開發工程師 Jacob Bergdahl 撰寫了這篇「Why jK8v!ge4D isn't a good password」文章,分析了這種密碼設置方式的不安全性,關鍵就在於,過去我們認為「密碼不方便記憶」就「不容易破解」這件事,到底是不是對的?
首先,請仔細看看下面兩組密碼。你認為破解哪組密碼更簡單呢?你認為哪組密碼更方便記憶呢?
- jK8v!ge4D(含大小寫字母、數字和符號)
- greenelephantswithtophats(戴著禮帽的綠色大象)
對於這個兩個問題,無論從破解容易度,還是記憶方便度來說,答案都是第二組密碼。
然而,在各種Internet的平台上,我們仍然在採用看起來像第一組密碼的方式來設置密碼。大家都想當然地認為,只要密碼設置地過於複雜,不方便記憶,那這個密碼就不容易破解。
接下來,我們就詳細來聊聊這個話題。
在網路標準上,存在許多奇幻的事情。其中,就包括驗證。作為一名前端開發者,我的工作就包括去驗證使用者輸入在那些所謂「輸入框」中的內容。這些所謂的輸入框,包括使用者名、郵箱地址、家庭住址、電話號碼等等。
作為前端開發者,我們的工作職責就是要保證使用者在使用我們的產品過程中,不會惡意輸入或者錯誤輸入不符合既定格式要求的文字內容。
例如,郵政編碼文字框通常就只允許填入空格和數字。如果我們知道使用者來自哪個國家,我們還可以對這個文字框的格式做出更加明確的限制。電話號碼文字框通常都包括一系列數字,一個加號符號(通常都在最前面),以及一個破折號,有的情況下可能還包括圓括號。
郵箱地址的驗證就相對麻煩。然而,常規的做法是,它必須包括「@」符號,然後後面還需要包括一個小數點。在某些網站,他們會要求使用者在填寫使用者名的過程中,限制使用者填入的名字字符長度,有的還會限制其只能選用某些特定的字符。
驗證之所以存在,主要是基於以下幾個原因。
- 首先,安全因素。驗證可以防止使用者在文字框中輸入亂七八糟的訊息,進而增加改變資料庫或者引發其它惡意行為的可能性。
- 其次,它可以確認某種特定的數據類型。如果某個文字框只能包含數字的話,資料庫工程師就可以以此來建立一個僅含數字的資料庫。這即意味著,如果出現了非數字字符的話,就可能會出現錯誤。
- 然而,驗證存在的最核心原因,實際上是幫助使用者避免錯誤。
用密碼設置規則來迫使你設置密碼
從某種程度上來講,前端開發者應該為使用者提供全方位的幫助,讓使用者設置並輸入一個從傳統意義上來講非常安全的密碼。它至少應該包含 8 位字符,其中還包括大小寫字母、一個數字,如果還沒有安全感的話,甚至還可以加入感嘆號等特殊符號。
基於此,「jK8v!ge4D」通常都會被視作是一個非常安全的密碼典範。毫不誇張地說,在絕大多數的網路平台上,都會要求你按照這種模式來設置密碼,因此,你可能就會認為,這種組合的密碼就是非常安全的密碼。
然而,這種組合的密碼並不安全。
它反而是非常愚笨的密碼設置方式,是一個極容易被破解的密碼。
首先,這種密碼設置方式,會增加使用者記憶密碼的複雜程度。他們很有可能無法記住自己設置的密碼,進而「另闢蹊徑」,在筆記本或者其它地方把這個密碼記錄並保存下來,而這種方式也很容易被他人「破解」。
其次,由於大多數密碼都採取這樣的密碼設置組合,就複雜性而言,已經是其心目中的複雜密碼了。因此,為了避免不必要的麻煩,他們可能會在各種平台和設備上都採用相同的密碼。
當你在某個網站上創建帳號時,後台的一些「神奇魔法」,會將你設置的密碼轉變成一串透過雜湊函式之後產生的文字(雜湊也經常被錯誤地視作為加密技術)。透過這麼一個步驟,你設置的密碼,可能在資料庫中就會顯示成這樣:k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX。
即便資料庫被駭客入侵,駭客拿到這些雜湊之後的字串,也無法提取有用的訊息。如果密碼設置非常大眾化,並且相關演算法也非常簡單的話,那仍然有可能根據這個雜湊後的結果來破解原碼。不過,只要密碼設置妥當、雜湊產生過程也正常的話,它大體上仍然是非常安全的。
但問題在於,不是所有的平台或者設備都會為使用者的密碼產生雜湊。如果你把相同的密碼用於多個平台和設備的話,也許你使用的某個平台其後台編碼非常簡單,而你的密碼也是直接一字不差地以原密碼文字形式存在於其資料庫中,也就是所謂的「明碼」。
如果有一天,該平台的密碼資料庫遭到攻擊,那你可能會暴露所有平台和設備上相同的密碼。這麼說來就相當可怕了,而實際上,真實情況比我們想像的還要可怕。
因此,我個人建議,對於不同的平台,還是要設置不同的密碼。值得注意的是,如今大多數使用者在各個平台上都有大量的帳戶,如果設置不同的密碼,怎麼才能記住所有的密碼呢?一些超級使用者可能會使用密碼工具,來幫助其產生並管理密碼,但一般使用者基本上都沒有這麼做。
實際上,其實還有更好的密碼設置方法。
破解密碼需要多久?
我們先看看「gtypohgt」這個密碼。它由八個隨意的字母符號組成,全部都是小寫字母。對於這種密碼,要破解它只需要幾分鐘的時間。
如果把其中某幾個字符換成數字,比如「g9ypo3gt」,那破解時間至少就需要一個小時了。如果再把其中的小寫字母換成大寫字母,比如「g9YPo3gT」,那可能需要幾天才能破解成功。另外,如果你再往裡面添加一個特殊字符,比如「g9Y!o3gT」,那可能破解這個密碼都需要一個月的時間。
「g9Y!o3gT」這個密碼設置組合,就是我們通常所認為的安全密碼。這樣的密碼設置,很難被他人猜到,也完全不屬於常規設置密碼。要破解這樣的密碼,的確需要一定的時間。但問題在於,這樣的密碼設置,會直接增加使用者的記憶難度。
然後,我們再看另一組密碼「greenelephantswithtophats(戴著禮帽的綠色大象)」。這組密碼包括 24 個小寫字母,沒有數字、隨機字母和特殊字符。雖然你會認為這樣的密碼設置非常簡單,但要想破解這樣的密碼,可能需要至少上百萬年時間。
所以,只要你在密碼組合中增加一個字符,破解這個密碼的難度實際上是在呈幾何數增長。前述 24 個字符的密碼,並不像一般的「666888」「elephant(大象)」等常用的密碼,而且也很難讓人猜測。
這才是安全的密碼
因此,我建議,設置密碼,最好就讓這個密碼變成一個故事。比如,在設置 Facebook 帳號的密碼時,你可以使用「afaceforabookbutapizzaforahorse(書有一張臉,但馬有一個披薩)」。總之,最好透過視覺呈現的方式來設置你的密碼。
我們的記憶強項,反而就是在這些特殊內容的記憶方面。突然之間,你的密碼就非常強大了,而且不僅記憶方便,而且還可以避免過於重複。此外,即便是跟你關係密切的人,恐怕也很難去猜測這些密碼。
日常談話中,你肯定很少會提到烏龜吧?那你是否見到過紫色的烏龜呢?肯定沒有吧。那麼,不妨嘗試下,在腦海中視覺呈現一隻紫色的烏龜。然後你就可以這樣設置一串密碼:「ioncesawapurpleturtleiswear(我發誓我曾經見過一隻紫色烏龜)」。要破解這樣的密碼,至少需要上百萬年的時間,甚至連跟你睡在一張床上的伴侶都可能猜不到。
對於「walkingdowngrandpasroadwithlittlerufus(和魯夫斯一起在爺爺家門前走過)」這個密碼,破解可能需要上百萬年時間。即便有人知道魯夫斯是你的寵物狗,他們也很難猜到你會這樣來設置密碼。
從視覺化效果方面來講,以下這些密碼都非常容易呈現出來。
- flyingcarsthatcannotflyarenotflying:如果不會飛的汽車就不是飛車。
- applesmaybegreatbutpearsarelikeheaven:蘋果雖然好,但梨子卻更好。
- goatswithshoesenjoytrainsonrainydays:穿鞋的山羊喜歡在雨天搭火車。
總之,其他人很難猜測這些密碼。
然而,可能有些網站會不允許使用者這樣設置密碼。根據其設定的密碼設置規則,這個密碼中沒有包含數字或大寫字母、密碼過長,或者處於其他非技術因素無法設置該密碼。
因此,你也可以透過一些小伎倆來「騙」這個系統。比如,在任何密碼字符串的最後添加「A1!」。現在,你設置的密碼既有大小寫字母,也有數字和特殊字符了。只要密碼設置沒有對字符長度有要求的,那這個密碼肯定就可以設置成功。
即便你在所有的密碼字符串後面都添加同樣的「A1!」,但前面字符串的不同,仍然會保障該密碼的安全性。無論是「ioncesawapurpleturtleiswear(我發誓我曾經見過一隻紫色烏龜)」,還是「ioncesawapurpleturtleiswearA1!(我發誓我曾經見過一隻紫色烏龜 A1!)」,要想破解它們,都是不太可能的。因此,在密碼字符串的最後加上「A1!」,除了稍微有點不方便之外,沒有其它弊端。
實際上,前端開發者之所以制定相關密碼設置規則,其初衷也都是好的。畢竟,很多人並不重視密碼安全問題,通常都會設置「123456789」「666888」「elephant(大象)」等極其容易破解的常見密碼。
對於網站運營方而言,他們肯定不想發生任何數據洩露相關的醜聞。因此,即便可能會造成一系列麻煩,但他們只好強迫讓使用者設置一個相對安全的密碼。
當你下次設置密碼的生活,你可以嘗試用本文中提到的技巧來設置你的密碼。當然,結合此方法,你也可以用拼音的方式來設置密碼。比如「wofashiwocengjingjianguoyizhizisewugui(我發誓我曾經見過一隻紫色烏龜)」。
總之,在密碼設置過程中,既要方便你自己記憶,同時要讓別人無法破解。
當然,即便你對這樣的密碼設置技巧不感興趣,那你最好千萬不要設置「123456」「qwerty(順著鍵盤按鍵隨意輸入幾位字符)」等密碼。這些密碼,極度不安全,也非常容易被破解。對於這樣的使用者,我們前端開發者只好強迫你設置「jK8v!ge4D」這樣的密碼。
追蹤T客邦IG,送你《2020影音大補帖》 https://bit.ly/3gjivf3
- 本文授權轉載自:ifanr(愛范兒)
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!