資訊安全:為何重設密碼不直接告訴你舊密碼?破解密碼的方法

閱讀時間約 11 分鐘

我遇過網購的平台訂單的資訊被洩漏,就接到詐騙集團打電話說設定成每月定期付款,差點就衝去郵局 ATM 處理。好險有家人阻止,才免於被騙錢。又有一次是朋友 Facebook 被盜用發出借錢訊息給我,我還傻傻差點匯錢>﹏<

以上都是資訊安全存在生活中的實際案例,現在我來介紹到底密碼是怎麼被破解的,又有哪些方法可以預防。


1. Dictionary Attack

你是否使用了太簡單的密碼呢?像是 123456、password、qwerty 這些密碼,可能都中了一種叫 Dictionary Attack 的攻擊!

簡介: 這種攻擊方法是駭客透過試用一整份包含常見密碼的字典來破解。例如,駭客會準備一份包含 "123456"、"password"、"iloveyou" 這類常見密碼的清單,然後用程式快速嘗試每個密碼,直到成功破解。來看一下你的密碼有沒有在榜上 Wikipedia:10,000 most common passwords

實際應用: 例如,某人用 "password" 當作電子郵件密碼,駭客使用自動化工具依照字典檔逐一嘗試,很容易就能登入受害者的帳戶。解決辦法是設計複雜的密碼,加入特殊符號及大小寫混合!

2. Password Stuffing

簡介: 駭客利用從其他網站洩漏的帳密資料,嘗試登錄你的其他帳戶。

實際應用: 假設你跟我一樣,在某購物網站用的帳號和密碼洩漏了,駭客就可能用這組密碼嘗試登入你的社交媒體帳號。因此,建議每個網站使用不同的密碼。

但很多密碼會不好記憶,這時候可以使用

3. Password Manager

簡介: 密碼管理員是一種工具,可以幫助安全儲存和自動填入密碼。

實際應用: 例如,你可以使用 LastPass 或 1Password 管理不同網站的複雜密碼,減少記憶負擔。或是 Google, Apple ID 都有幫你產出一串亂碼,並協助你紀錄密碼的功能


為何重設密碼不直接告訴你舊密碼?因為連電腦都不知道你真正的密碼

以下 hash 的舉例內容引用自

為什麼忘記密碼時只能重設,不把舊密碼告訴我?

電腦存密碼時,會透過雜湊(Hash)的功能將密碼轉換。舉個簡單的例子:

該密碼的轉換方式是:「數字不做轉換,英文字母把 a 換成 1,b 換成 2…z 換成 26」,以此類推,第幾個字母就換成幾,大小寫不分都一樣。

如果密碼是 abc123,轉換完就變成 123123。

但駭客拿到 123123 不會直接對應到 abc123 而是有可能由 123123、abcabc、12cab3 組成。

這就是 hash 跟加密最大的不同。加密跟解密是成對的,可以直接回推,但 Hash 不行。

有些人可能會注意到,這樣的儲存方式似乎有個漏洞。延續前面的例子,假設資料庫存的是 123123,而我的原始密碼是 abc123,這樣如果有人輸入 "abcabc",雜湊後結果也是 123123,不就可以登入了嗎?

這種情況,兩個不同的輸入卻產生同一組輸出的現象,就叫做碰撞(Hash Collision)。碰撞在理論上是不可避免的,但如果演算法設計得夠好,碰撞的機率會小到幾乎可以忽略。

前面提到的轉換規則只是方便舉例,真實世界中的演算法複雜許多。例如,以 SHA256 演算法為例,哪怕只是改變一個字元,結果也會有天壤之別,這就是設計良好的演算法強大的地方!

  1. abc123 => 6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090
  2. abc124 => cd7011e7a6b27d44ce22a71a4cdfc2c47d5c67e335319ed7f6ae72cc03d7d63f


更多 Hash 的延伸補充請參考我之前的文章

雜湊表(Hash Table)& 字典樹(Trie)的程式碼和補充 Malloc 用法


不過這樣駭客也有方法可以「查表」找出該 Hash 值,這就是 Rainbow Table

3. Rainbow Table

簡介: 駭客可能使用 Rainbow Table,這是一張對應密碼雜湊值的查表,通過這張表可以快速解碼雜湊值。

實際應用: 例如,某網站儲存的密碼是經過雜湊處理的 "abc123",結果是 "123123"。駭客利用 Rainbow Table 找到對應,快速破解密碼。為了應對,網站應結合 Salting 技術來增加破解難度。

4. Salting

簡介: Salting 是在密碼雜湊時加入隨機值,讓每個密碼的雜湊結果都獨一無二。

實際應用: 例如,兩位使用者用相同密碼 "123456" 註冊,透過 Salting 處理後,資料庫中儲存的雜湊值也完全不同。這有效阻止駭客用 Rainbow Table 破解密碼。

加入 Salting 後,每位使用者的密碼會加上一段隨機的鹽值,比如 "123456salt1" 和 "123456salt2"。最終雜湊值不同,即便是駭客也難以逆推出原始密碼。

例如:

  • 使用者 A 的密碼 "123456" 加上鹽值 "saltA",雜湊結果為 "a1b2c3d4"。
  • 使用者 B 的密碼 "123456" 加上鹽值 "saltB",雜湊結果為 "z9y8x7w6"。


談完密碼怎麼被儲存,我們來看常見的加密模式,以及加密怎麼被駭客反利用。

5. End-to-End Encryption

簡介: 端對端加密是指在通訊過程中,訊息從發送到接收的每個階段都被加密,只有接收者能解密。

實際應用: 像 Telegram 的 「焚毀訊息」功能,所有訊息傳輸過程都加密,確保其他人無法攔截或查看內容。


6. Full Disk Encryption & Ransomware

簡介: 全碟加密會將整台電腦的數據加密,而勒索軟體 (Ransomware) 利用相似技術鎖住你的資料。

實際應用: 例如,某天你開機後,發現所有檔案都被鎖住,駭客要求支付贖金才能解密。為了預防建議定期備份資料,也不要亂點來路不明的網站。


7. Symmetric & Asymmetric Encryption

簡介:

  • 對稱加密 使用相同密鑰進行加解密。
  • 非對稱加密 使用一對公鑰與私鑰來分別加密與解密。

實際應用: 對稱加密適合快速的內部資料保護;非對稱加密則常用於網路傳輸,例如電子郵件加密和數位簽章。

圖片擷取自以下影片。這種非對稱加密是用公共鑰匙和私人鑰匙的概念進行加密。

圖片擷取自以下影片。這種非對稱加密是用公共鑰匙和私人鑰匙的概念進行加密。


補充影片:Asymmetric Encryption - Simply explained


8. Passkey

簡介: Passkey 是一種需要特定硬體設備(如 USB 安全鎖)進行解密的技術。

核心概念

  1. 公開金鑰與私密金鑰:
    • 私密金鑰(Private Key):由用戶設備生成並安全存儲,永遠不會離開設備。
    • 公開金鑰(Public Key):用戶註冊時,設備將公開金鑰發送給服務端,服務端用它來驗證用戶身份。
  2. 密碼學簽名:
    • 使用私密金鑰對資料,例如伺服器傳送的cryptographic challenge(加密挑戰碼)簽名,伺服器用公開金鑰來驗證簽名是否正確。

工作流程

1. 註冊階段(Registration):

    • 設備生成一對公開金鑰和私密金鑰。
    • 公開金鑰發送到伺服器並與用戶帳戶綁定。
    • 私密金鑰安全地存儲在設備中
raw-image

2. 登入階段(Authentication):

    1. 伺服器發送挑戰碼:一段隨機生成的數據(防止重放攻擊)。
    2. 設備生成簽名:用戶使用指紋、臉部識別或 PIN 解鎖設備,啟用私密金鑰。設備用私密金鑰對挑戰碼進行簽名。
    3. 伺服器驗證:伺服器用之前存儲的公開金鑰檢查簽名是否正確。如果正確,驗證成功。
藍色私鑰於電腦,傳送驗證給伺服器才可以開啟公鑰

藍色私鑰於電腦,傳送驗證給伺服器才可以開啟公鑰

例如 QR Code 驗證。電腦版的Line 就有此功能

例如 QR Code 驗證。電腦版的Line 就有此功能


Passkey 的優點

高安全性:私密金鑰永不離開設備,不會被伺服器端攻擊波及。

過去,如果假冒訂房網站的釣魚網站請你輸入帳號密碼,該組帳號密碼就會被駭客拿到。但現在 Passkey 只能在原始註冊的官方網站運作,只有官方網站有你註冊時的公鑰登入用戶資訊,所以大幅減少資料外洩的問題

使用便利性:

    • 不需要記住或輸入密碼。
    • 支援多設備同步(如透過 iCloud、Google 服務進行金鑰同步)。


補充影片:What are passkeys? Explained in under 4 minutes


11. Modular Arithmetic 模運算 (超難的數學)

簡介: 模數運算是一種數學技術,用於快速計算餘數,常見於加密演算法中。

若有兩整數 a、b,兩者的差 (a–b) 可被另一正整數 n 整除,則 a、b 各自除以 n,所得餘數相同,此時稱「a、b 同餘模」,符號表示如下:

意義:

  • a≡b(modn) 的意思是,當 a 和 b 分別被 n 除時,得到相同的餘數。
換句話說,a 和 b 相差一個 n 的倍數。a≡b(modn)

數學公式: (注意是三條線不是等於)

a≡b(modn)⟺n∣(a−b)⟺amodn=bmodn

舉例說明:

  1. 基本例子:
    • a=17, b=5, n=6
    • 計算: a−b=17−5=12
    • 12 可以被 6 整除 (餘數為0)
    • 所以17≡5(mod6)
  2. 餘數法檢查:
    • 17 mod 6=17−(6×2)=5
    • 5 mod 6=5
    • 17和 5 在模 6 下有相同的餘數,確認17≡5(mod6)
  3. 應用例子:時鐘算數
    • 在時鐘上,時間是按照 12小時進行模算數的。
    • 例如,現在是 14 點(下午 2 點),但 14 mod 12=2,所以可以說 14≡2(mod12)

實際應用: 例如,RSA 加密演算法中會用到模數運算來產生公鑰與私鑰。

加密演算法是取用模運算的特性,例如分解大數、計算餘數或循環性。以下是一些常見例子及其背後邏輯:(以下內容參考自 ChatGPT)

ab mod n 即使 b很大,也可以用有效算法快速計算,但很難反推出原數。

此圖擷取自 ChatGPT

此圖擷取自 ChatGPT



結語:你會用密碼管理員嗎?為什麼呢?

資訊安全是生活中的重要一環,你的每一步保護,都是對駭客的一大阻礙!如果你有什麼想法或問題,歡迎留言告訴我!



留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
相信大家現在都有在使用網銀的習慣 以前因為打工和工作的關係,我辦過的網銀少說也有5、6間,可以說在使用網銀App方面我可以算是個老手了。 最近受邀參加國泰世華CUBE App的使用測試 嘿嘿~殊不知我本身就有在使用他們的App,所以這次的受測根本可以說是得心應手
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
相信大家現在都有在使用網銀的習慣 以前因為打工和工作的關係,我辦過的網銀少說也有5、6間,可以說在使用網銀App方面我可以算是個老手了。 最近受邀參加國泰世華CUBE App的使用測試 嘿嘿~殊不知我本身就有在使用他們的App,所以這次的受測根本可以說是得心應手