PDF 加密
在這裡加密,那份還沒上鎖的原檔從頭到尾沒有離開過你的電腦。
本機處理把檔案拖進來,或點擊選擇
支援 PDF。沒有大小上限,不用註冊。
加密跟著檔案走,不跟著你寄它的那個管道走。任何同時拿到文件與密碼的人都讀得到,所以兩樣要分開送。權限旗標靠閱讀器自己遵守,密碼學那一側並沒有在強制它。
選一份 PDF,決定別人是要有密碼才打得開,還是打得開但不能做某些事,然後拿回一份加密過的複本。整個加密動作由你這台電腦自己完成,而這件事在這一頁比在站上任何其他頁都重要:拿去給轉檔網站處理的話,交出去的正好是那份還沒有保護的。
這一頁的兩個選項是兩種不同的東西,不是強弱之分
選「要密碼才打得開」,做出來的是一份沒有那組祕密就讀不出任何內容的文件。沒有中間狀態,也不靠誰的良心。沒有密碼的軟體手上沒有東西可以顯示,換哪一支程式來開都一樣。
選「誰都打得開,只限制能做什麼」,做出來的是完全另一種東西。文件對所有人都開得了,它帶著一組旗標說明哪些操作應該被提供,閱讀器讀了那組旗標,再據以決定要把哪些功能開給使用者。頁面內容從頭到尾都是讀得到的 —— 也正因為如此,選它的理由跟選第一種完全不同:它標記的是意圖。一份全公司都打得開、但標著不供編輯的報告,等於對下一個讀它的人說了一件真話,說明它被設計成怎麼被使用。
兩者之間怎麼選,歸結到一個跟技術無關的問題:你是想讓某些人拿不到內容,還是想告訴那些本來就拿得到內容的人該怎麼處理它。前者需要密碼。後者不需要,而且硬加一道密碼上去,通常只換來接下來一整個星期有十二個人來問你密碼是多少。
密碼就是全部的安全決定,而且算式很短
很容易把 AES-256 讀成「這有多強」的答案。它不是。沒有人在攻擊那個密碼演算法,因為那件事目前沒有人知道怎麼做。被攻擊的是密碼,作法是把候選一組一組丟進去比對,直到其中一組吻合為止;而這件事要花多久,是你在輸入的那一刻決定的。
有用的思考方式是「對方總共得走過多少種可能」。你自己想出來的密碼,價值遠低於它的長度看起來的樣子,因為人類編出好記密碼的方式就那幾種,而且早就被整理成冊。從一份兩千個詞的清單裡隨機挑四個詞,大約是四十四個位元 —— 兩千的四次方大約是十七兆。加到第五個詞會變成五十五。把一個本來就好猜的字裡的 o 換成 0,只多一個位元,代價是你沒辦法在電話裡把它唸給對方聽。
這件事在這一頁比在某些其他工具產出的文件上更要緊,理由寫在下一段。而它落到實務上的樣子一點都不華麗:寧可要來自隨機的長度,也不要來自替換的小聰明。這一頁的輸入框會一邊打一邊告訴你字元數,不到十二個的時候也會直說。
為什麼結果那一行會寫出修訂版編號
跑完之後這一頁會回報類似「AES-256(修訂版 5)」這樣的字。後面那半不是裝飾,而且據我們所知沒有別的工具會顯示它,所以值得先解釋它是什麼,免得有人以為那是我們軟體的版本號。
負責這件事的安全處理器前後改過好幾版,其中第 5 版與第 6 版都用 256 位元金鑰的 AES。它們的差別在「怎麼檢查一個候選密碼」。第 5 版把密碼連同它的鹽雜湊一次。第 6 版是隨這個格式的 ISO 版本一起來的,它跑一套迭代結構,包含數十回合的雜湊與一個區塊加密,目的正是讓試一個候選的成本遠高於一次雜湊。兩者的內容加密完全相同,差別整個落在「猜一次的單價」上。
這一頁寫的是修訂版 5,因為那是它所使用的那份經過審視的加密實作會產出的東西,而另一條路是由我們自己寫一份密碼推導函式的實作。在一個工作就是保護文件的工具裡自己發明密碼學,比誠實標示一個較舊的修訂版糟糕得多,所以那個數字放在畫面上而不是藏起來。這也正是上一段那麼強調長度的原因:驗證便宜的時候,長度是你還握在手上的那個變數。
對方拿不到的密碼,保護不了任何人
加了保護的文件最常見的失敗方式,跟加密一點關係都沒有。檔案當附件寄出去,密碼寫在同一封信的內文裡,結果是這份文件的私密程度剛好等於它經過的那個信箱。它經過的每一站,兩半都是一起經過的。
把兩者分到兩個管道去,保護才真的成立,而那兩個管道必須真的不同。補寄一封信是同一個管道。在同一個聊天視窗再傳一則訊息也是同一個管道。打一通電話、傳到一個你本來就有的號碼、或是當面講過一次的規則,才是不同的管道,而其中任何一種就夠了。
機構替一整批文件挑密碼的方式裡還有一個相關的陷阱。「帳號末四碼」或「收件人生日」這種規則之所以方便,是因為誰都不必被告知任何事;但它產生出來的值來自一個小到可以整個走完的集合,而且那些資訊收件人往往已經給過十幾個其他單位。如果你是寄一份文件給一個人,就挑一組隨機的,然後告訴他是什麼。那種規則只有在你要寄好幾千份的時候才值得,而且就算那時候也要知道:它是一道篩子,不是一把鎖。
你剛做出來的這一份,誰打得開
AES-256 大約在 2009 年前後進入主流閱讀器,現在凡是有在更新的地方都支援它。「有在更新的地方」這幾個字在那句話裡是有份量的。落後的那些地方,正好就是文件最後會流到的地方:事務機的韌體、幾年前買的電子閱讀器、某個部門不立專案就升不動的文件管理系統、舊版郵件軟體內建的預覽。
AES-128 這個選項就是為了這種情況存在的。它確實是比較舊的設計,選它是拿餘裕換覆蓋率的一個刻意決定,不是失誤。如果這份文件是要給一個拿著現代手機或筆電的人,就沒有理由選它;如果它要進入一條你控制不了也沒辦法先測的流程,它在更多地方打得開。
有一個細節這裡替你處理掉了。AES-256 在 PDF 1.7 是以 Adobe 擴充的形式加進去的,而一份只宣稱自己是 1.7 版的檔案,沒有給嚴格的閱讀器任何方法知道裡面裝的是更新的加密機制。這裡產出的檔案會在文件目錄裡宣告那個擴充等級,那也正是規格要求的作法。多數工具略過它而且沒出事,因為多數閱讀器不檢查。
有一件事是任何設定都改不了的:加密撐不過一次轉檔。如果有人打開你這份加了保護的檔案,把它轉存成 Word,或是列印成一份新的 PDF,出來的那一份身上沒有任何密碼。那不是格式的漏洞,那就是一個有權讀某樣東西的人,把他讀到的東西重新做了一份的自然結果。
四個勾選框,以及一個刻意不做成勾選框的旗標
列印、複製文字、編輯、註解,這四個是對得上一般人腦中畫面的選項。它們預設是勾起來的,因為你要的是一把鎖,而一份印不出來的文件不是鎖。有好幾個工具的預設是反過來的,那正是為什麼有人會遇到自己的檔案自己印不出來,而且不確定是自己做錯了什麼。
底下那一層,這個格式提供的開關比四個多,其中兩個不值得各佔一個控制項。重新排列頁面跟著編輯走,填寫表單欄位跟著註解走 —— 因為「可以編輯但不可以重排頁面」這種區分,從來沒有人想要過。它們會跟著上面那個勾選框一起設定。
有一個開關是刻意缺席的。有一個旗標的職責是說明「輔助技術可不可以取出文字」,而它正是大家在瞄準防複製時最常誤關的那一個。把它關掉,對一個決心要把字弄出來的人幾乎沒有作用,卻會讓一份文件對使用螢幕閱讀器的人整個消失。那不是一個值得提供的取捨,而這個格式的現行版本也同意 —— 它已經把那個旗標廢止,並要求閱讀器一律視為允許。這裡永遠讓它保持開啟。
也要注意這些旗標是什麼、不是什麼。它們每一個都是給閱讀軟體的訊息,由願意遵守的程式遵守。值得設定,因為多數軟體確實會遵守,也因為它們記錄了你的意圖。但不值得把它們當成一道障礙來依賴。
檔案加密之後,還有哪些東西沒被蓋到
保護的對象是內容。它蓋不到檔名,而檔名是明文傳輸的,往往還是關於這份檔案最有資訊量的東西 —— 一個檔名裡有客戶名稱與和解金額的檔案,最有趣的部分已經先講完了。頁數與大致的檔案大小同樣不必密碼就看得出來。
它也蓋不到收件人事後決定要做的任何事。一個讀得到文件的人可以拍螢幕、可以把一段話重打一次、可以在電話裡唸出來。加密是「被攔截」與「檔案跑到不該去的人手上」這兩件事的好答案;它不是「你本來就不該信任的那個讀者」的答案,而且沒有任何格式層級的功能會是。
還有,它蓋不到你原本那一份。這一頁交給你一份新的加密複本,你選的那個檔案原封不動留在原地,沒有保護。那是對的預設 —— 有人拖進來一個檔案就把它就地改掉會是一個很糟的驚喜 —— 但這也表示最後一步是你的。如果整件事的目的是「這份文件不該可讀地擺在那裡」,那份沒有保護的仍然可讀地擺在那裡。
這裡有兩件事的做法跟別人不一樣,以及為什麼
第一件跟擁有者密碼有關 —— 這個格式裡的第二組祕密,管的是權限旗標可不可以被改。很多工具把它設成跟開檔密碼同一串字,那安靜地意味著:任何打得開這份文件的人,也都能把上面每一條限制拿掉。既然你從頭到尾都不需要知道那個值,這一頁替你產生一組很長的亂數、不顯示給任何人看、然後把它丟掉。結果那一行會告訴你那組亂數帶了多少位元的亂度。限制因此在「讀得到文件的人」面前活了下來,而那是這個功能唯一有意義的版本。
第二件跟本來就帶著權限鎖的檔案有關。替這種檔案重新加保護,不是把新設定蓋在舊的上面就算數,因為舊的那份加密字典裡帶著由前一組密碼推導出來的值。原封不動留著的話,新檔案會夾帶一份還能用的離線檢查工具,檢查的正是那組你正在汰換掉的祕密。所以舊的處理器會先被拆掉,新的才蓋上去。
這兩件事在產物上都是看不見的。一份隨便加密的檔案跟一份謹慎加密的檔案,打開的方式一樣、看起來一樣、檔案大小差在四捨五入的範圍內。也正因為如此,它們寫在這裡,而不是被當成實作細節放著。
這一切在進行的時候,文件在哪裡
加密、金鑰推導、新檔案的寫出,三件事都由你這台裝置上早就載入好的程式碼做完。沒有上傳這一步、沒有佇列、沒有一份暫存在別人機器上的複本,也沒有帳號。至於一般性的論證與自行查證的步驟,站上另有專頁整理,這裡不重複。
這一頁獨有的是「會被送出去的是哪一份」。在一個移除保護的工具上,你交出去的東西至少是加密過的。這裡剛好相反:你會上傳的那一份正是還沒有任何保護的那一份,而按照定義,那是一份你剛剛才判斷它敏感到需要一道密碼的文件。為了取得保護而上傳它,等於那份沒有保護的版本已經先去過一個你控制不了的地方 —— 用這個順序去換一把鎖,是很奇怪的一筆交易。
你輸入的密碼具備同樣的性質,還多一項。它不會進入任何表單欄位、不會跟著檔案送到任何地方,視窗一收掉它就跟著消失 —— 而且,跟一組你只是沿用的舊密碼不同,這一組是你此刻正在創造的祕密,為的是一份你正要寄給某個人的文件。
台灣這邊寄件方實際會遇到的狀況
以下是英文版沒有的一段,講的是國內寄件方的實務慣例與法遵環境。會計師事務所寄財報與查核報告、代書寄權狀影本、學校寄成績單與獎助學金名冊、診所與健檢中心寄檢查報告、公司寄投標文件與員工薪資明細 —— 這些場合的共同點是收件人只有一個或少數幾個,卻幾乎都習慣沿用「一整批共用一條規則」的作法。前面那一段講過為什麼那是一道篩子而不是一把鎖:寄給單一對象時,挑一組隨機密碼再用另一個管道告訴他,成本只多一通電話。
法遵那一側值得留意的有一條:個人資料保護法第二十七條要求持有個人資料的機構採行適當之安全維護措施,施行細則第十二條把「資料安全管理」與「設備安全管理」列在裡面。條文沒有指名要用哪一種加密,所以沒有人能說「用了 AES-256 就合規」;但反過來,把載明身分證字號、病歷或薪資的 PDF 用不加密的附件寄出去,在事後檢視時是很難解釋的一項。這一頁能替你做的是那個技術動作,判斷要不要做、以及機構內部的規範怎麼寫,仍然是機構自己的事。
幾個在地細節也一併講清楚。第一,繁體中文密碼在這裡可以用,但僅限 AES-256 那個選項 —— AES-128 的規格根本表示不了中文字元,選了它再打中文密碼,這一頁會停下來說明並要你自己改選,而不是偷偷替你換規格或是做出一份別的軟體打不開的檔案。第二,中文檔名不會變成亂碼:輸出沿用你原本的檔名再接上 -protected,因為檔名從頭到尾沒有離開這台電腦,也就沒有任何一段會把它重新編碼的傳輸。第三,檔名本身並不受加密保護,而國內很多單位習慣把姓名、身分證字號或案號直接寫進檔名 —— 那等於在信件列表上就先把個資公開了一次,改檔名這件事其實比加密更早該做。
最後一件事是關於政府與金融機構的收件端。不少單位的線上申辦系統會拒收帶有開檔密碼的附件,或是把它當成損毀檔案退回,因為它們的後端要能自動讀取內容。要送進這類系統的文件,正確作法是不要加開檔密碼,需要標示用途的話改用權限鎖那個選項;先寄出去被退件,往往比一開始就問清楚多花好幾天。
常見問題
我寄過去之後,對方可以把密碼再拿掉嗎?
只要他打得開就可以。任何拿著開檔密碼的人都能做出一份沒有保護的複本,用這個站上的工具或其他十幾種工具都行。保護管的是誰讀得到這份文件,不是一個有權讀它的人接下來會做什麼。
我該選 AES-256 還是 AES-128?
沒有特別理由就選 AES-256。要選 AES-128 的情況是:這份檔案要送去某個你沒辦法先測試的老地方 —— 事務機韌體、用了很多年的電子閱讀器、某個沒有人升得動的內部系統 —— 因為認得它的比較多。如果文件是要給一個用現代裝置的人,選舊的那個什麼也換不到。
你們會留一份密碼,或是任何救回檔案的方法嗎?
不會,而且沒有地方可以留。這一頁沒有任何一部分牽涉到伺服器:沒有帳號、沒有儲存、沒有金鑰託管、也沒有重設連結。密碼只在你停留在這個分頁的期間存在於這個分頁裡。如果它弄丟了,文件就不是我們或任何人救得回來的 —— 那句話跟「加密有在運作」是同一件事。
為什麼結果寫的是修訂版 5,而不是只寫 AES-256?
因為修訂版決定了「試一個猜測的密碼要多貴」,那是一個真實而且值得說出名字的差別。第 5 版與第 6 版都用 AES-256 加密內容;第 6 版讓每一次猜測的成本高出許多。這一頁寫的是第 5 版,那是它所用的那份經過審視的加密實作會產出的東西,而我們把數字顯示出來,不讓你自己假設成比較新的那一個。
我可以用中文或帶重音符號的密碼嗎?
選 AES-256 就可以,它用 UTF-8 存密碼。AES-128 比那更早,只表示得了一個小很多的字元集合,所以含有集合外字元的密碼會被擋下來並附上說明,而不是被默默弄壞或默默升級規格 —— 那兩種結果都會讓你手上多一份在你預期的地方打不開的檔案。
那些限制真的擋得住別人複製文字嗎?
擋得住大多數人,因為大多數人用的軟體會遵守它。擋不住一個不想被擋住的人,因為文字為了顯示出來,本來就已經被解密了。設定它們是為了記錄你的意圖、讓最省事的那條路剛好是你希望的那條,不是把它們當障礙用。
本來就有密碼的 PDF 可以在這裡加保護嗎?
只有那種「開檔本來就不用輸入任何東西」的可以。帶著現有開檔密碼的檔案,沒有那組密碼就改寫不了,所以這一頁會直接說明而不是丟一個看不懂的失敗 —— 請先把舊的保護移除再回來。至於只限制列印或複製的那一種,這裡直接處理,而且會把它舊的加密拆掉而不是疊上去。
幫 PDF 加密會讓它明顯變大或變慢嗎?
幾乎不會。加密作用在既有的資料串流上,不是加東西進去,所以大小變化很小,而且物件重新排布之後往任一個方向都有可能。閱讀器是一邊算繪一邊解密的,在一份給人閱讀的文件上你不會察覺到。


