一個強的 PDF 密碼是一段很長的隨機字串,其強度是以熵的位元數來衡量——也就是長度乘以字元池的以 2 為底的對數——而從四種字元集全部選取的 16 個字元,大約能提供 103 位元的熵,遠超過現行 NIST 與 OWASP 指南所認定、可抵禦離線暴力破解攻擊的 100 位元門檻。
多數讀者搜尋「generate password to PDF」時想找的,是保護文件那項工作中雖小卻關鍵的前半段:產生一個值得使用的密碼。PDF 格式支援兩種不同的密碼——一種是「開啟」密碼,會以 AES-256 加密整份檔案;另一種是「權限」密碼,只管控編輯與列印——兩者都應當夠長、隨機且唯一。在本機執行的密碼產生器可讓你用瀏覽器內的平台密碼學安全 RNG 產生一組密碼,再直接複製到你用來對檔案套用加密的任何工具中。由於密碼從未傳送出去,自然不會出現在伺服器記錄、瀏覽器歷史紀錄或雲端同步中——在你把它貼到 PDF 工具之前,它只存在於產生它的分頁中。
本文接下來會逐步說明 PDF 密碼實際上必須防禦什麼、如何設定產生器的長度與字元切換、如何解讀工具所顯示的強度與熵估計值,以及那些決定「隨機」密碼是否真正隨機的小細節——模偏差、容易混淆的字元、Fisher–Yates 洗牌。

PDF 真正需要什麼樣的密碼
現代的 PDF 通常以 AES-128 或 AES-256 加密,兩者在密碼演算法層級上都本質上無法破解——攻擊面在於密碼,而非演算法本身。取得檔案的攻擊者會進行離線暴力破解:用 GPU 速度雜湊候選密碼並加以比對。因此你選的每組密碼,都會以攻擊者需要猜多少次來評估,而這個次數會隨著以位元計的熵指數成長:每增加一位元,工作量就加倍。
由此可推出兩個實際結論。第一,長度的重要性凌駕複雜度:長度加倍,工作量大致呈平方成長;而字元池大小加倍(例如加入符號),工作量只呈倍數成長。第二,保護財務紀錄、醫療資料,或任何保密期限較長之內容的 PDF 密碼,應達到現代指南對其他高價值帳號所設的同一道 100 位元門檻。
| 長度 | 字元池大小(大寫 + 小寫 + 數字 + 符號 = 86) | 概略熵(位元) | 評等 |
|---|---|---|---|
| 8 | 86 | 51 | 弱——在現代 GPU 設備上數小時內即可猜中 |
| 12 | 86 | 77 | 尚可——適合用完即丟的文件 |
| 16 | 86 | 103 | 強——PDF 密碼的建議下限 |
| 20 | 86 | 129 | 非常強——為冷儲存封存提供充裕的安全邊際 |
字元池大小是將四種字元集合相加得出:26 個大寫 + 26 個小寫 + 10 個數字 + 24 個常用符號 = 86。完整的熵公式為 entropy = length × log2(poolSize);以 86 而言,log2(86) ≈ 每字元 6.43 位元。上表的數字就是用這個公式計算的,12 與 16 字元的數值也與官方估算工具所顯示的結果一致。
在瀏覽器中產生 PDF 密碼
最乾淨的工作流程是:開啟在本機執行的產生器、選擇設定、複製結果,然後直接貼到 PDF 工具的開啟密碼或權限密碼欄位,完全不需用手輸入。沒有任何東西會離開分頁,因此也不會有東西外洩。
- 在瀏覽器中開啟密碼產生器。
- 將長度設為 16 以上——20 是適合可能長年存放於冷儲存的高價值 PDF 的舒適預設值。
- 保留大寫、小寫、數字與符號全部啟用,使字元池維持在 86 個字元。
- 若你需要手動輸入密碼,請切換「排除容易混淆的字元」以去掉 0、O、1 與 l;否則請保持關閉,以維持完整的字元池。
- 查看工具顯示的熵估計值——確認其達到或超過 100 位元。
- 按一下產生新密碼以重新產生一組字串;若顯示的值已符合需求,則按複製。
- 將密碼貼入 PDF 工具的開啟密碼欄位,然後關閉產生器分頁,讓密碼僅存在於目的地端。
無論你要保護的是一張發票還是一整個合約資料夾,這套工作流程都同樣適用。由於產生器不會在各次執行間保留任何狀態,每份文件都會擁有自己的獨立字串,因此某一個檔案遭破解,並不會連累其他檔案。
為何在此任務中 CSPRNG 勝過 Math.random
PDF 密碼強度最大的變數,不是納入哪些字元,而是隨機性的來源。瀏覽器提供兩種截然不同的 API。Math.random 快速但可預測:它是一種非密碼學等級的 PRNG,其內部狀態往往能從少量連續輸出還原出來,這代表以它為基礎所建構的「隨機」16 字元字串,實際上所帶有的不可預測性,可能遠低於其長度所暗示的程度。
相對地,crypto.getRandomValues 是 CSPRNG——密碼學安全亂數產生器——其設計目標是,即使攻擊者觀察到所有先前的輸出,也無法預測下一個值。密碼產生器從 crypto.getRandomValues 抽取字元,這與瀏覽器用於 TLS 金鑰及其他安全敏感操作時所用的基本機制相同,因此你複製出來的字串,能完整擁有長度所承諾的熵。MDN 對此 API 的說明文件指出,只要「你想要的是密碼學等級的隨機值」,就該選擇它。
這個差別對 PDF 而言比對一般網站登入更為關鍵,因為 PDF 上的密碼面對的是更強大的攻擊者:任何持有加密檔案的人,都能在自己的硬體上離線、以每秒數十億次雜湊的速度(使用消費級 GPU)逐步猜測。可預測的 PRNG 在這種工作量下會崩潰;CSPRNG 則能撐住。
如何解讀熵值與強度計
產生器以 Shannon 熵(以位元為單位)回報強度,計算方式正好是 length × log2(poolSize)。讀取強度計的方法很直接:
- 低於 60 位元——弱,僅適合用完即丟的測試檔。
- 60 至 100 位元——尚可,適用於低價值的文件。
- 100 位元及以上——強,是你不希望外洩的任何 PDF 所建議的範圍。
計算範例:啟用全部四種字元集時,字元池為 26 + 26 + 10 + 24 = 86 個字元,因此 log2(86) ≈ 每字元 6.43 位元。一組 16 字元密碼因此帶有 16 × 6.43 = 102.88,工具會將其四捨五入並顯示為大約 103 位元——這就是「強」這個評等的依據。
另外還有兩個較細微的細節值得留意。第一,產生器採用拒絕抽樣(rejection sampling):它並非將原始的 32 位元隨機整數直接以普通模運算對應到字元集,而是丟棄任何會落入偏差餘數範圍的值,然後重新抽取。這讓每個字元出現的機率保持相等,從而保全所選長度的完整熵。第二,系統會保證每種已選類型至少出現一個字元,接著再以 Fisher–Yates 演算法進行洗牌,確保這些被保證出現的字元不會落在固定位置,而被攻擊者利用。這兩個步驟在 UI 上看不見,但你能從反覆重新產生時強度計維持穩定而觀察到。
正確地將密碼套用至 PDF
密碼到手之後,如何正確套用本身也是一項決策。多數 PDF 工具會顯示兩個不同的密碼欄位:
- 開啟密碼——檢視文件本身就必須輸入。檔案以 AES-128 或 AES-256 加密,沒有密碼就無法讀取。任何敏感性內容都應使用此選項。
- 權限密碼——僅限制編輯、列印或複製。文件可在沒有密碼的情況下開啟,因此這並不提供機密性,只能勸阻隨意的修改。
若要取得實質的保護,請在你選擇的工具中依下列步驟進行:
- 在你選擇的工具中開啟 PDF——Adobe Acrobat、macOS 預覽程式、PDFsam、qpdf,或你平台所提供的任何工具皆可。
- 找到加密或「保護」選項——在 Acrobat 中位於檔案 → 使用密碼保護,在預覽程式中位於檔案 → 輸出 → 加密,在 qpdf 中則是 --encrypt 旗標。
- 若工具提供加密演算法選擇,請選 AES-256——絕不要接受舊式的 RC4 選項。
- 將產生的開啟密碼貼到使用者密碼欄位,然後在第二個欄位再次確認。
- 儲存檔案,並以關閉後重新開啟 PDF 的方式驗證,確認密碼確實已套用。
- 若你也想要權限密碼,請另外產生一組獨特的密碼,並貼到擁有者/權限欄位——請勿重複使用開啟密碼。
在 AES-256 之上使用一組 16 字元的隨機字串,是實務上的甜蜜點:既夠長,讓離線攻擊者在文件的保密期限內無法實際進行暴力破解;又夠短,仍便於管理。
隱私:為何在本機產生的 PDF 密碼能保持私密
基於瀏覽器的產生器最被低估的特性,就是密碼從不離開裝置。產生過程透過用戶端的 crypto.getRandomValues 執行,字元選擇發生於分頁內的 JavaScript,而結果在複製之前,只存於該分頁的 DOM 中。沒有任何攜帶密碼的網路請求、沒有需要清理的伺服器端記錄,也沒有任何分析端點會看到這個值——關閉分頁就會將其銷毀。
這條純粹在本機運作的鏈之所以重要,是因為 PDF 密碼的威脅模型具有不對稱性。文件本身經常四處移動:被以電子郵件寄送、上傳到共用磁碟、封存於備份中。任何在產生過程中曾接觸到密碼的東西——伺服器記錄、同步紀錄、聊天訊息——都會成為攻擊面的一部分,即使在文件被移走之後亦然。完全在將密碼貼入 PDF 工具的同一台裝置上產生密碼,能讓這個秘密的足跡縮減為僅僅一次剪貼簿的傳輸。
若想再多一層保險,可於私密瀏覽視窗中執行產生器,讓該分頁不會被保存,並在 PDF 工具接收密碼之後,清除剪貼簿的內容。
常見會削弱 PDF 密碼的錯誤
當人們手動挑選 PDF 密碼時,有幾個可見的錯誤會反覆出現。請避開每一項:
- 重複使用同一組主密碼。如果同一字串同時保護你的電子郵件、銀行帳戶和合約 PDF,只要其中一處遭到外洩,其他也會跟著曝光。
- 用符號取代相近字母,例如 P@ssw0rd!。這些正是攻擊者會優先嘗試的組合,而現代的破解規則集會把它們排在很前面。
- 挑選一個其實是知名詞句的「通行片語」。歌詞、電影台詞和書本開頭,全都會出現在外洩字典中。
- 依賴自訂腳本中的 Math.random。它的輸出雖然快速,但可預測;若是涉及安全密鑰,請務必使用 CSPRNG。
- 忘記每個檔案對應到哪一組密碼。請為每個 PDF 配上一組獨立的值,並把對應關係存放在密碼管理工具中,才不會失去存取權。
若想從不同角度了解如何選擇長度與字元集設定,請參考如何使用本機工具產生安全的密碼。NIST SP 800-63B 與 OWASP Authentication Cheat Sheet 的現代指引,都傾向使用保存在管理工具中的長隨機密碼,勝過強制性的複雜度規則——這正是由 CSPRNG 支援的產生器所輸出的型態。
產生密碼是多數讀者會略過的一半,卻也是決定最終檔案是否真正安全的一半。從 CSPRNG 取得的 16 字元隨機字串,搭配 AES-256 加密作為開啟密碼,可為任何文件提供大約 103 位元的熵——即使在檔案分享多年後,這個餘裕仍足以抵禦離線暴力破解。
想進一步了解,請參考如何正確判斷密碼強度。