為什麼密碼設置為「jK8v!ge4D」仍然不安全?


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

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

  • jK8v!ge4D(含大小寫字母、數字和符號)
  • greenelephantswithtophats(戴着禮帽的綠色大象)

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

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

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

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

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

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

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

驗證之所以存在,主要是基於以下幾個原因。
  • 首先,安全因素。驗證可以防止用户在文本框中輸入亂七八糟的信息,從而增加改變數據庫或者引發其它惡意行為的可能性。
  • 其次,它可以確認某種特定的數據類型。如果某個文本框只能包含數字的話,數據庫工程師就可以以此來建立一個僅含數字的數據庫。這即意味着,如果出現了非數字字符的話,就可能會出現錯誤。
  • 然而,驗證存在的最核心原因,實際上是幫助用户避免錯誤。

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

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

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

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

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

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

當你在某個網站上創建賬號時,後台的一些「神奇魔法」,會將你設置的密碼轉變成一串散列(散列也 經常被錯誤地視作為加密技術)。通過這麼一個步驟,你設置的密碼,可能在數據庫中就會顯示成這樣:k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX。

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

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

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

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

▲ 圖片來源:Pexels.com

破解密碼需要多久?

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

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

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

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

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

這才是安全的密碼

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

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

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

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

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

  • flyingcarsthatcannotflyarenotflying:如果不會飛的汽車就不是飛車。
  • applesmaybegreatbutpearsarelikeheaven:蘋果雖然好,但梨子卻更好。
  • goatswithshoesenjoytrainsonrainydays:穿鞋的山羊喜歡在雨天搭火車。

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

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

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

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

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

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

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

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

當然,即便你對這樣的密碼設置技巧不感興趣,那你最好千萬不要設置「123456」「qwerty(順着鍵盤按鍵隨意輸入幾位字符)」等密碼。這些密碼,極度不安全,也非常容易被破解。對於這樣的用户,我們前端開發者只好強迫你設置「jK8v!ge4D」這樣的密碼。

本文來自 36 氪旗下編譯團隊神譯局,譯者俊一,愛範兒經授權發佈。


資料來源:愛範兒(ifanr)

如果喜歡我們的文章,請即分享到︰