軟體密碼管理原理:為什麼主密碼加密

computer%20screen%20showing%20data%20visualization...
發表時間:2026 年 10 月 27 日 | 更新日期:2026 年 10 月 27 日 | 編輯:雅寶社區編輯團隊
軟體密碼管理原理:為什麼主密碼加密 - 雅寶社區 · 頂客論壇

  • 第二層:加密與隔離。所有帳密以密文形式儲存,且加密金鑰不與伺服器共享。這一層解決的是「資料外洩時,攻擊者拿到的是什麼」——拿到的是無法解讀的密文,而不是一整份明文清單。
  • 第三層:信任架構。透過零知識設計,讓服務提供者在技術上「沒有能力」讀取你的資料,而不是「承諾不會讀取」。這一層解決的是「你為什麼要相信一間公司」的問題,答案從「相信它的道德」轉變成「相信它的架構」。
  • 這三層之中,第一層是使用者體驗,第二層是加密實作,第三層才是真正的安全哲學。而第三層之所以能成立,關鍵就在「主密碼」與「金鑰派生」的設計。

    二、主密碼不是「登入密碼」:拆解主密碼的真正角色

    「主密碼」這個詞很容易誤導人。多數人會把它理解成「打開 App 的那道鎖」,就像手機的解鎖圖形或銀行的登入密碼。但如果主密碼只是登入驗證用途,那它其實可以被重設、可以被客服繞過、可以被伺服器代管——而這些在專業密碼管理器裡統統不成立。你忘記主密碼,就是救不回來,這是設計上的必然,不是廠商不貼心。

    要理解為什麼,必須先分清楚兩種密碼在系統中的位置:一種是「驗證用密碼」,用來證明「你是你」;另一種是「加密用密碼」,用來參與金鑰派生,直接決定資料能不能被解開。多數網路服務用的是前者,伺服器存的是密碼的雜湊值,忘記了可以重設,因為伺服器根本不需要知道你的原始密碼。密碼管理器的主密碼則同時扮演後者——它本身就是解密金鑰的材料來源。一旦忘記,等於金鑰材料遺失,數學上就沒有還原的可能。

    主密碼與一般密碼的三個本質差異

    第一,主密碼不傳輸。在零知識架構下,主密碼(或其派生出的加密金鑰)從頭到尾都留在你的裝置上,不會因為登入、同步、客服協助而離開本機。伺服器只知道「這組驗證值對不對」,不知道「主密碼是什麼」。這與一般網站把密碼送到伺服器比對的模式完全不同。

    第二,主密碼沒有「重設」這個選項。一般密碼忘記了可以寄重設信,因為伺服器可以核發新的驗證憑證。但主密碼同時是解密金鑰的來源,若伺服器能幫你重設,就代表伺服器握有能解密你資料的金鑰——這與零知識架構直接衝突。因此專業產品的做法是:忘記主密碼,資料就無法還原,只能靠事前準備的復原碼或緊急聯絡人機制。

    第三,主密碼的強度要求遠高於一般密碼。一般網站密碼只要擋得住線上暴力破解(通常有速率限制、帳號鎖定)即可。主密碼面對的是「離線暴力破解」——攻擊者若取得你的加密資料庫(例如透過裝置遺失、雲端備份外洩、或服務商被入侵),就可以在自己的機器上無限次嘗試,沒有速率限制。這代表主密碼的強度必須足以抵抗長期的離線運算,這也是為什麼密碼管理器會強制要求長度、複雜度,並搭配 KDF 的反覆運算來拉高破解成本。

    為什麼主密碼絕對不能存在伺服器上?

    這個問題的答案,決定了整套系統的信任模型。假設某個密碼管理器把主密碼存在伺服器上(哪怕是加密後儲存),會發生什麼事?

    首先,伺服器成為單點失效(single point of failure)。一旦伺服器被入侵,攻擊者同時取得密文與主密碼(或保護主密碼的金鑰),整份資料直接失守。其次,服務商在技術上具備讀取你資料的能力,所謂「我們不會看」就從架構保證退化為道德承諾。第三,法律或政府調閱時,服務商有能力交出可解密的資料,零知識的宣稱就不成立。

    因此,零知識密碼管理器的設計原則是:伺服器只儲存「加密後的資料庫」與「與密碼無關的驗證材料」,主密碼與其派生金鑰永遠不離開使用者裝置。這聽起來很嚴格,但實際運作起來並不困難,關鍵在於把「驗證」與「解密」這兩件事,用不同的金鑰分別處理。

    三、從主密碼到加密金鑰:金鑰派生函數(KDF)的原理

    主密碼是一串人類可記憶的字元,但加密演算法需要的是一段固定長度、高熵的金鑰。把人類密碼轉換成加密金鑰的過程,不能只是「直接拿來用」,而必須經過金鑰派生函數(Key Derivation Function,KDF)處理。這個環節是整套系統的安全核心之一,也是多數評測文章最容易略過的地方。

    KDF 的目標有三個:第一,把任意長度的輸入轉換成固定長度的金鑰;第二,讓每次派生的結果不可預測(透過加鹽);第三,讓暴力破解的成本高到不切實際(透過反覆運算與記憶體消耗)。這三件事分別對應「壓縮」、「抗預計算」與「抗硬體加速」三個安全目標。

    加鹽(Salt)為什麼必要?

    如果兩個人使用同樣的主密碼,而系統沒有加鹽,那麼他們派生出的金鑰會完全相同。攻擊者只要預先計算「常見密碼 → 金鑰」的對照表(彩虹表),就能一次破解大量帳戶。加鹽的做法,是在派生過程中混入一段隨機資料(鹽),讓同樣的主密碼在不同使用者、不同裝置上產生不同的金鑰。

    鹽不需要保密,它可以與密文一起儲存在伺服器上。它的價值在於「唯一性」:每個使用者、甚至每次金鑰派生都應該有不同的鹽。有了鹽,攻擊者就不能用預計算表一次打穿所有帳戶,必須針對每個鹽重新計算,破解成本隨使用者數量線性上升。

    值得注意的是,鹽只能抵抗「預計算」與「相同密碼共用金鑰」的問題,它不能讓弱密碼變強。如果主密碼是「123456」,就算加了鹽,攻擊者針對單一目標做離線暴力破解,還是在極短時間內就能猜中。這就是為什麼 KDF 還需要「反覆運算」與「記憶體硬度」來補強。

    PBKDF2、scrypt、Argon2 的差異與取捨

    目前主流密碼管理器使用的 KDF 主要有三種:PBKDF2、scrypt 與 Argon2。它們的設計哲學不同,適用的攻擊模型也不同。

    PBKDF2 是最老牌、最廣泛支援的選擇,透過大量反覆的雜湊運算(例如 HMAC-SHA256 迭代數十萬次)來拉高破解成本。它的優點是實作成熟、跨平台支援度極高、計算結果穩定;缺點是它對「GPU 與 ASIC 加速」的抵抗力較弱,因為這類硬體非常擅長大量平行執行簡單的雜湊運算。攻擊者可以用顯示卡或專用晶片,以遠高於 CPU 的速度進行離線猜測。

    scrypt 的改進在於加入「記憶體硬度」:派生過程需要消耗大量記憶體,讓攻擊者難以用大量平行晶片同時進行破解,因為每個並行單位都需要配置大量記憶體,硬體成本會急遽上升。這對抵抗 GPU 與 ASIC 有明顯效果,但代價是行動裝置上的計算時間與耗電也會增加。

    Argon2 是目前密碼學社群較推薦的選擇(尤其是 Argon2id 變體),它結合了記憶體硬度與可調參數,能同時抵抗平行運算與側通道攻擊,並且在 2015 年的 Password Hashing Competition 中獲選為優勝者。多數新一代密碼管理器已逐步支援或預設使用 Argon2id。

    對使用者而言,這些細節的實務意義是:當你在評測中看到「本產品使用 PBKDF2 迭代 60 萬次」或「支援 Argon2id」,你應該理解這代表廠商對「離線暴力破解」這個威脅模型的重視程度。迭代次數與記憶體參數不是愈高愈好——太高會讓低階裝置解鎖變慢——但太低就等於把防線讓給攻擊者。合理的設計會根據裝置效能動態調整,並在安全與體驗之間取得平衡。

    四、零知識架構:伺服器為什麼「看不到」你的密碼

    「零知識」(Zero-Knowledge)這個詞在行銷文案裡被用得非常氾濫,但它的技術定義其實很明確:服務提供者在整個服務流程中,都不具備取得使用者明文資料的能力。注意,是「不具備能力」,而不是「承諾不去看」。這兩者的差別,決定了當服務商被入侵、被收購、被政府調閱、或內部員工惡意操作時,你的資料會不會曝光。

    要達成零知識,系統必須把「加密」與「解密」的發生地點,嚴格限制在使用者裝置上。伺服器只負責儲存密文、轉發密文、以及驗證「你是不是有正確金鑰的人」,但它本身不持有任何能解開密文的金鑰。

    加密與解密到底在哪裡發生?

    以典型的零知識密碼管理器為例,流程大致如下:

    使用者在裝置上輸入主密碼。

    裝置本地以 KDF(加鹽 + 反覆運算)從主密碼派生出「金鑰材料」。

    金鑰材料再經過一次派生(通常是 HKDF),拆成「加密金鑰」與「驗證金鑰」兩把不同的金鑰。

  • 加密金鑰用來以 AES-256-GCM 等對稱演算法加密整個密碼庫;驗證金鑰則用來向伺服器證明身分(例如計算一組驗證雜湊,或參與 PAKE / SRP 協定)。
  • 伺服器只收到「驗證用的雜湊或協定訊息」與「加密後的密碼庫」,收不到主密碼、收不到加密金鑰、也收不到明文。
  • 在這個流程裡,有兩個關鍵設計值得注意。第一,加密金鑰與驗證金鑰是分開的。這代表即使伺服器端的驗證資料外洩,攻擊者也無法直接用它來解密資料庫,因為那是另一把金鑰。第二,整個派生過程都在裝置本地完成,主密碼從未以任何形式離開裝置——這正是「零知識」的具體實現。

    零知識≠絕對安全:信任邊界在哪裡

    零知識架構大幅降低了「服務商端」的風險,但它並沒有消滅所有風險。信任邊界只是從「伺服器」轉移到「你的裝置」與「你的主密碼」。這代表幾件事:

    第一,如果你的裝置被植入惡意程式(鍵盤側錄、記憶體抓取、螢幕錄影),主密碼與解密後的明文仍然可能被竊取。零知識保護的是「傳輸與儲存」,不是「使用中的裝置」。第二,如果你被釣魚到偽造的登入頁面或偽造的 App,主密碼可能直接落入攻擊者手中。第三,如果你的主密碼太弱,攻擊者取得密文後可以離線暴力破解,KDF 只能拉高成本,不能保證絕對安全。

    換句話說,零知識是一個「架構層級」的保證,它讓你不必信任服務商的道德與維運能力,但它不能替代「裝置安全」與「主密碼強度」這兩個使用者端責任。這是很多評測文章沒有說清楚的地方,也是使用者最容易誤解的地方。

    五、對稱與非對稱加密的分工:AES、RSA 與 ECC 各司其職

    密碼管理器並不是只用一種加密演算法,而是依照不同場景,混用對稱加密與非對稱加密。理解這個分工,有助於你看懂「為什麼有些功能需要額外的金鑰」、「為什麼分享密碼不等于把密碼傳給對方」。

    AES-256-GCM 為什麼是主流選擇

    對稱加密是指加密與解密使用同一把金鑰,優點是速度快、適合大量資料。密碼管理器用它來加密整個密碼庫,因為密碼庫可能有數千筆資料,用非對稱加密會慢到無法接受。

    AES-256 指的是金鑰長度 256 位元的 AES 演算法,目前沒有已知的實用攻擊方法能在合理時間內破解。GCM(Galois/Counter Mode)則是一種「認證加密」模式,它在加密的同時產生認證標籤(authentication tag),可以偵測密文是否被竄改。這一點很重要:如果攻擊者偷偷修改了密文中的某個位元,GCM 解密時會直接失敗,而不是產出錯誤但看似正常的明文。這種「完整性保護」是現代密碼管理器的基本要求,也是為什麼單純的 AES-CBC 已經逐漸被淘汰的原因。

    此外,GCM 需要一組「初始化向量」(IV / nonce),且同一把金鑰下絕對不能重複使用相同的 nonce,否則會嚴重破壞安全性。專業的實作會嚴格管理 nonce 的產生與計數,這也是評估一款密碼管理器實作品質時可以觀察的細節。

    非對稱加密在「分享」與「同步」中的角色

    非對稱加密使用一對金鑰:公開金鑰用來加密,私密金鑰用來解密。它的速度慢,但解決了「如何在不共享對稱金鑰的前提下傳遞機密」這個問題。在密碼管理器裡,它主要用在兩個場景。

    第一是「安全分享」。當你想把某個帳號密碼分享給家人或同事時,理想的做法不是把明文密碼傳過去,而是用對方的公開金鑰加密該筆資料,只有對方的私密金鑰能解開。這樣一來,連服務商都無法在中途讀取分享內容。部分產品更進一步支援「分享後可撤銷」、「限時存取」等機制,背後的原理都是金鑰管理與重新加密。

    第二是「跨裝置同步」與「團隊協作」。在企業方案中,管理者可能需要核發、撤銷成員的金鑰權限,這通常會用到非對稱金鑰或混合式金鑰封裝(例如用 RSA 或 ECC 封裝對稱金鑰)。近年來,部分產品也開始採用更現代的橢圓曲線加密(ECC),因為它在相同安全強度下金鑰更短、計算更快,更適合行動裝置。

    值得注意的是,非對稱加密的存在並不代表系統「更安全」或「更不安全」,它只是解決不同問題的工具。真正影響整體安全性的,是金鑰如何產生、如何儲存、如何銷毀,以及權限模型是否嚴謹。

    六、常見誤解與真實風險:主密碼加密不是萬靈丹

    談完原理,必須回到現實。市面上關於密碼管理器的宣傳,經常混淆「架構保證」與「絕對安全」,讓使用者產生錯誤期待。以下整理幾個最常見的誤解,以及對應的真實風險。

    誤解一:加密了,廠商就一定偷不到

    這句話只在「零知識架構正確實作」的前提下成立。如果產品聲稱加密,但金鑰由伺服器代管、或主密碼會傳到伺服器驗證、或同步過程中使用廠商持有的金鑰,那麼「廠商偷不到」就不成立。判斷方式很簡單:看它是否明確說明「主密碼不會離開裝置」、「伺服器不持有解密金鑰」、「忘記主密碼無法復原」。這三點是零知識的試金石,缺一不可。

    誤解二:有加密就等於不會被盜

    加密保護的是「資料在靜止與傳輸時的機密性」,它不保護「使用中的裝置」。如果你的電腦被植入木馬,攻擊者可以在你解鎖密碼庫之後,直接讀取記憶體中的明文,或側錄你的鍵盤輸入。這類攻擊與加密強度無關,而是端點安全問題。因此,密碼管理器必須搭配作業系統更新、防毒軟體、以及良好的裝置使用習慣,才能形成完整防線。

    真實風險一:主密碼太弱,離線破解照樣成立

    如前述,主密碼面對的是離線暴力破解。假設攻擊者取得了你的加密資料庫(例如透過雲端備份外洩、裝置遺失、或服務商被入侵),他就可以在自己的機器上,用 GPU 或 ASIC 無限次嘗試。如果你的主密碼是「生日 + 英文名字」,即使 KDF 迭代數十萬次,破解時間可能仍在數小時到數天之內。這不是危言聳聽,而是許多真實外洩事件的研究結論。

    因此,主密碼的設計原則是:長度優先於複雜度、避免個人資訊、避免常見詞組、最好使用密碼管理器提供的「隨機片語」產生器(例如四到六個隨機單字組成的密語)。這類密語的熵值高、人類較易記憶,且能有效抵抗字典攻擊。

    真實風險二:釣魚、偽 App 與剪貼簿外洩

    即使架構完美,使用者行為仍是最弱的一環。偽造的登入頁面可能誘導你輸入主密碼;偽造的 App 可能要求你授予過多權限;複製密碼到剪貼簿後若沒有自動清除,其他程式可能讀取剪貼簿內容。這些風險的解法不是「不要用密碼管理器」,而是「養成正確習慣」:確認網域、開啟雙因素驗證、使用生物辨識解鎖、設定剪貼簿自動清除時間、避免在公用電腦上登入。

    真實風險三:忘記主密碼,資料真的救不回來

    這是零知識架構的必然代價。使用者必須在註冊時妥善保存「復原碼」或設定「緊急聯絡人」,並理解這些機制本身的風險(例如復原碼若被他人取得,等於多了一把備用鑰匙)。這是典型的「安全與便利」取捨,沒有標準答案,只有適不適合你的使用情境。

    七、如何挑選與設定:從原理回推的實務建議

    理解了原理之後,挑選密碼管理器就不再是「看星星數」或「看廣告」,而是看它是否符合你需要的安全模型。以下從技術指標與實務設定兩個角度,給出可操作的建議。

    挑選時應該看的技術指標

  • 是否明確採用零知識架構:官方文件是否說明主密碼不離開裝置、伺服器不持有解密金鑰、忘記主密碼無法復原。這是最基本也最重要的一項。
  • KDF 的選擇與參數:是否支援 Argon2id 或 scrypt,PBKDF2 的迭代次數是否足夠(目前建議至少數十萬次),參數是否可調整或因裝置而異。
  • 加密演算法與模式:是否使用 AES-256-GCM 或 XChaCha20-Poly1305 等「認證加密」模式,而非僅有 AES-CBC。
  • 是否經過獨立稽核:是否有第三方安全公司進行程式碼稽核與滲透測試,報告是否公開。這比任何行銷文案都有說服力。
  • 雙因素驗證與生物辨識:是否支援 TOTP、硬體金鑰(FIDO2/WebAuthn),以及裝置端的生物辨識解鎖。
  • 復原機制設計:復原碼、緊急聯絡人、企業版的金鑰託管選項是否清楚說明其風險與限制。
  • 開源與否:開源不代表一定安全,但可接受社群檢驗,對於驗證「零知識宣稱」有實質幫助。
  • 主密碼設定與日常使用的實務守則

    第一,使用「密語」而非「複雜亂碼」。四到六個隨機單字組成的密語,長度足夠、熵值高、且比亂碼好記。避免使用歌詞、名言、或個人相關資訊。

    第二,主密碼只用在密碼管理器上,絕不重複使用於其他服務。這是避免「一處外洩、全軍覆沒」的基本紀律。

    第三,開啟雙因素驗證,並優先使用硬體金鑰或 TOTP,而非簡訊驗證碼(SIM 卡交換攻擊是真實存在的威脅)。

    第四,定期備份加密資料庫,並將復原碼存放在離線、實體的安全位置(例如保險箱),不要只存在雲端硬碟或手機相簿裡。

    第五,定期檢查帳號安全狀態:哪些裝置曾登入、是否有異常的同步行為、是否有閒置的分享連結。多數產品都提供這類稽核功能,善用它。

    第六,保持軟體更新。密碼管理器本身也是軟體,可能出現實作漏洞(例如 nonce 重複使用、記憶體未清除、隨機數產生器缺陷)。更新是修補這類問題最直接的方式。

    八、結語:主密碼加密是「信任架構」,不是一個打勾的功能

    回到最初的問題:為什麼密碼管理器要用主密碼加密?答案不是「因為這樣比較安全」這麼簡單,而是「因為這是把信任從人為承諾轉移到數學架構的唯一方法」。當主密碼與其派生金鑰從不離開你的裝置,服務商就從「有能力讀取但承諾不做」的角色,轉變成「技術上做不到」的角色。這個轉變,才是零知識架構真正的價值。

    當然,這套架構也把責任部分轉移回使用者身上:你必須選擇夠強的主密碼、保護好裝置、妥善保存復原碼、並且理解「忘記就救不回來」是設計的一部分,而不是缺陷。安全從來不是單一功能,而是一整套流程與習慣的總和。

    對「雅寶社區 · 頂客論壇」的讀者而言,下次在軟體評測版看到「本產品採用 AES-256 軍規加密」這類文案時,不妨多問三件事:它的金鑰從哪裡來?主密碼會不會離開裝置?忘記主密碼時,廠商能不能幫你解開?這三個問題的答案,比任何星級評分都更能告訴你,這款軟體究竟是把安全當成架構,還是當成行銷素材。

    理解了主密碼加密的原理,你就不再只是「使用」密碼管理器,而是能夠「評估」它。這正是軟體評測應有的深度,也是面對日益複雜的數位威脅時,最實用的一種素養。

    🏠 返回首頁