密碼為什麼會被破解?長度和不重複使用為何重要

約 9 分鐘 · 更新:2026年10月23日

密碼被破解的主要原因有3個:常用的密碼被猜中、外洩的密碼被重複使用,以及自己在假網站上輸入。比起混入符號或定期變更,把密碼加長、每個服務各用不同的密碼更有效。再加上多因素驗證或通行金鑰,即使密碼外洩也比較守得住。

這篇文章可以了解

  • 服務如何儲存密碼(雜湊與鹽值)
  • 破解密碼的主要手法,以及各自有效的對策
  • 為什麼加長密碼比混入符號更有效
  • 多因素驗證與通行金鑰的原理,以及不同方式的強度差異

先備知識:不需要。

生活中的例子

你應該看過「請設定8個字元以上,並包含大寫字母、數字與符號」的畫面。有些公司還規定「每90天變更一次」。也可能某天收到一封信:「資料已外洩,請變更您的密碼。」

然而,現在的官方指引並不建議其中幾個習慣。哪些有效、哪些無效呢?先從密碼怎麼儲存、怎麼被破解看起。

服務不會直接儲存密碼

登入時,服務想確認的只有「和註冊時的是否相同」。因此,設計良好的服務不會儲存密碼本身,而是儲存從密碼計算出來的值。

這個計算使用的是雜湊函數。不論輸入多長,都會算出固定長度的值。相同的輸入一定得到相同的值,差1個字就會變成完全不同的值。它被設計成實際上無法從值反推原本的輸入。算出來的值稱為雜湊值。

登入時,服務把輸入的密碼做同樣的計算,再和儲存的雜湊值比對。一致就視為本人。加密是只要有金鑰就能還原的方式。雜湊則根本沒有還原的步驟。這是兩者最大的不同。

因此,儲存的一方會再加上2個措施。第1個是鹽值。這是每位使用者各不相同的隨機值,先加到密碼上再計算。沒有鹽值的話,密碼相同的人會得到相同的雜湊值。攻擊者只要把常見密碼的雜湊值算一次,就能一口氣識破許多人。有了鹽值,就必須每個人重新計算。鹽值不需要保密。

第2個是刻意使用慢速的雜湊函數。一般的雜湊函數是為了算得快而設計的。密碼用的則是計算時需要花時間或記憶體的方式。代表例子是1999年發表的bcrypt,以及在2015年競賽中選出的Argon2。登入1次花0.1秒,使用者不會困擾。但對想要嘗試數十億次的攻擊者來說,就是很大的阻礙。

在密碼加上鹽值,送進慢速雜湊函數,只儲存鹽值和雜湊值。登入時也做同樣的計算來比對 密碼 鹽值 隨機值 慢速雜湊函數 雜湊值 儲存的只有鹽值和雜湊值 登入時也做同樣的計算來比對
服務儲存的不是密碼本身,而是計算後的結果。圖中省略的部分:決定慢速程度的設定值(這也會一起儲存)。也有在鹽值之外,再混入另外保管之秘密值的方式。

破解手法1:猜測常見的密碼

最簡單的手法,是嘗試大家常用的密碼。英國政府機構NCSC(國家網路安全中心)在2019年分析了外洩的密碼。全世界使用「123456」的帳號有2,320萬個。「qwerty」和「password」也名列前茅。

從收集了單字、名字、常見密碼的清單依序嘗試的方法,稱為字典攻擊。清單也會自動加入在結尾加上「1」或「!」,或把「a」換成「@」的版本。人想得到的小變化,攻擊者大多也會試。

嘗試的方式有2種。在登入畫面一個一個試,會受到次數限制或帳號鎖定,所以很慢。因此也有一種手法,是把少數常見密碼,對大量帳號各試1次。每個帳號的失敗次數少,不容易觸發鎖定。這稱為密碼噴灑攻擊,經常鎖定公司的帳號。

另一種方式,是把從服務偷來的雜湊值,拿到攻擊者自己的電腦上試。這種方式沒有次數限制。如果是快速的雜湊函數,1台GPU(處理影像用的運算裝置)每秒就能試數十億次。這就是儲存方式很重要的原因。

破解手法2:暴力破解。為什麼長度比符號有效

依序嘗試所有組合的方法,稱為暴力破解(窮舉攻擊)。如果字元是隨機挑選的,能不能抵擋這種攻擊,取決於組合的數量。組合數是「可用字元的種類數」連乘「字元數」次。

英文大寫、小寫加數字共62種。8個字元就是62連乘8次,約218兆種。即使再加上符號變成94種,也只增加約28倍。相對地,只用英文小寫但加長到12個字元,就是62種8個字元的約440倍。比起增加字元種類,每多1個字元,組合數增加得多得多。

夠長又好記的,是把單字排在一起的密碼短語。不過,單字必須用擲骰子等方式隨機挑選。名言或歌詞早就在字典攻擊的清單裡。從7,776個單字的清單挑5個,約有2,800京種。京是兆的1萬倍(見下方「從數字來看」)。

破解手法3:鎖定重複使用的「撞庫攻擊」

現在特別大的危險之一,是重複使用密碼。假設某個服務外洩了電子郵件地址和密碼的組合。攻擊者會把這份清單,自動輸入到其他服務的登入畫面。這稱為撞庫攻擊。

攻擊者把網站A外洩的帳號與密碼清單,拿到網站B和網站C嘗試。使用相同密碼的網站B被登入,使用不同密碼的網站C則失敗 網站A外洩 帳號與密碼 的清單 自動嘗試 網站B 相同的密碼 網站C 不同的密碼 被登入 登入失敗
如果重複使用,即使外洩的是別的服務,損害也會擴大。圖中省略的部分:如果設定了多因素驗證,即使在網站B,光靠密碼也無法登入。

只要重複使用,密碼再長也沒有用,因為對方輸入的就是外洩的那串字。防範方法是每個服務用不同的密碼,以及下面說明的多因素驗證。日本總務省的「國民網路安全網站」也強烈建議不要重複使用。

破解手法4:誘使你在假網站上輸入

把人引到和真網站一模一樣的假網站,讓人輸入密碼的詐騙,稱為網路釣魚。因為是本人自己輸入,密碼再強也沒有關係。假網站也常常有鎖頭圖示。詳細說明請見「HTTPS是什麼?鎖頭圖示能保護與不能保護的事」。

對策1:夠長、各不相同,記憶交給工具

每個服務各用不同的長密碼,要記住幾十組是不可能的。這時就用密碼管理工具。它會產生密碼、加密保管,並在登入畫面自動填入。也有內建在瀏覽器或手機裡的。

多數密碼管理工具,只有在網址和登錄的網站相符時才會自動填入。如果在假網站上沒有跳出填入,就是察覺異狀的線索。不過,它是集中保管的地方,本身也會成為目標。打開它用的密碼要夠長、不在別處使用,也要設定多因素驗證。

對策2:多因素驗證與通行金鑰

確認本人的線索大致有3種:本人知道的東西(密碼等)、持有的東西(手機等)、身體的特徵(指紋或臉)。組合2種以上不同種類的方式,稱為多因素驗證。即使密碼外洩,沒有手機也無法登入。

驗證碼的傳送方式有差別。用簡訊(寄到電話號碼的簡短訊息)收到的驗證碼,比只用密碼安全得多。但如果電話號碼被盜用,驗證碼也會被搶走。美國公家機關NIST的指引(後述)也把簡訊等使用電話網路的方式,歸類為「受限制」。手機上驗證器App顯示的驗證碼,不依賴電話號碼。即使如此,在假網站上輸入,一樣會被拿去用。

消除這個弱點的是通行金鑰。使用通行金鑰時,手機或電腦會為每個網站保有一把秘密的金鑰。網站那邊只保存成對的公開用金鑰。登入時,裝置用秘密金鑰產生「簽章」送出。簽章是只有持有那把金鑰的裝置才做得出來的記號。金鑰和註冊網站的網址綁在一起,所以在假網站上無法使用。

指紋或臉,是在裝置內用來確認、讓金鑰可以使用的,並不會傳送到網站。通行金鑰以產業團體FIDO聯盟和W3C制定的標準(FIDO2與WebAuthn)為基礎。2022年5月,Apple、Google、Microsoft共同宣布將擴大支援。不過,仍有服務尚未支援。也要先確認裝置遺失時的復原方式。

官方指引如何改變

NIST(美國國家標準與技術研究院)發布了身分驗證的指引SP 800-63B。它是給美國政府機關用的,但全世界都拿來參考。2025年7月定稿的第4版(SP 800-63B-4),主要規定如下。

  • 只用密碼登入時,要求15個字元以上;作為多因素驗證的一部分時,要求8個字元以上
  • 最好能使用到64個字元以上
  • 不得強制「一定要包含符號」等字元種類的規則
  • 不得要求定期變更。但如果有外洩的證據,就要求變更
  • 和常用或已外洩的密碼清單比對,符合的就不准使用
  • 要能使用密碼管理工具(最好也允許貼上)

在日本,總務省的「國民網路安全網站」(2024年5月改版)也有說明。它表示如果沒有外洩等情況,就不需要定期變更。並建議不要重複使用,以及使用管理密碼的工具。長度方面,建議至少10個字元,並且是隨機排列。

總務省也認為混合數字、符號與大小寫字母「較為理想」。NIST禁止的,是把混合當成規則強制要求。兩者都重視密碼要夠長、難以預測,這一點是相同的。

常見的誤解

誤解:每90天變更一次,密碼就會變強

實際上,被強制變更時,人往往只做小改動,例如把「Spring2026!」改成「Spring2027!」。攻擊者也會試這種改法。變更沒有外洩的密碼,強度並不會增加。NIST和日本總務省都建議,外洩時要立刻變更。

誤解:像「P@ssw0rd」這樣替換字元就會變強

實際上,「a→@」「o→0」這類替換,是字典攻擊工具會自動嘗試的基本招式。看起來複雜,但原本是字典裡的單字,很快就會被找到。決定強度的是難以預測的程度和長度。

誤解:網站用HTTPS加密,所以我的密碼很安全

實際上,HTTPS保護的只有傳送途中。如果服務儲存的資料被偷,雜湊值就會被拿到攻擊者手邊去試。弱密碼就在那裡被識破。如果在假網站上輸入,即使是HTTPS,也會原封不動送到對方手上。

從數字來看

我們計算了用暴力破解試完所有組合需要的時間。假設字元或單字是隨機挑選的。平均來說,大約一半的時間就會猜中。嘗試的速度,假設為下面2種情況。

  • 快速雜湊:每秒100億次(1台GPU嘗試快速方式時的參考值。2025年也有公開的測試顯示,用1台GPU嘗試快速方式之一的MD5,每秒可達1,600億次以上)
  • 慢速雜湊:每秒1萬次(1台GPU嘗試以實用設定使用bcrypt等方式時的大致參考值)
密碼組合數快速雜湊慢速雜湊
英文小寫8個字元約2,100億約21秒約240天
英文大小寫與數字8個字元約218兆約6小時約690年
加入符號8個字元約6,100兆約7天約1.9萬年
英文小寫12個字元約9.5京約110天約30萬年
隨機4個單字約3,700兆約4天約1.2萬年
隨機5個單字約2,800京約90年約9,000萬年

單字假設從7,776個單字的清單中挑選。可以看出,比起加上符號,加長更有效。另外,在這個假設下,同一個密碼會因為儲存方式不同,時間相差100萬倍。實際的速度取決於雜湊方式和攻擊者的設備,這張表請當作參考。還有,「123456」這類常見密碼或重複使用的密碼,和這裡的計算無關,一瞬間就會被破解。

進一步學習

接著閱讀

系列「資安與生活中的 IT」的文章

  1. 密碼為什麼會被破解?長度和不重複使用為何重要
  2. 雲端運算是什麼?資料和應用程式在「哪裡」運作
  3. 加密是什麼?對稱式加密與公開金鑰加密的原理
  4. 生成式AI怎麼運作?大型語言模型(LLM)的原理
  5. VPN是什麼?保護通訊的通道原理與做不到的事
  6. 機器學習是什麼?電腦從資料中找出規則的原理
  7. 資料中心是什麼?支撐雲端與AI的建築物內部
  8. 防火牆是什麼?讓通訊通過或擋下的機制
  9. QR Code是什麼?髒污也能讀取的原理
  10. 網路釣魚是什麼?假郵件、假網站的分辨方法與對策
  11. 指紋辨識、臉部辨識的原理是什麼?手機如何認出本人?
  12. 惡意程式是什麼?病毒、勒索軟體的差異與防範對策

這個領域的題目: 資訊安全基礎

參考資料

入門解說一覽