憑證壓縮檔、匯出的員工名冊、帶私鑰的設定檔,最後常常進了個人 Google 雲端硬碟、OneDrive,或公司共用資料夾。上傳頁會寫「傳輸加密」「靜態加密」「保險箱」。這些詞說的是服務商自己的磁碟和線路,不是「除了你,誰都解不開」。另一篇寫過怎麼用 Network 核對明文沒有上傳:口號無法證明。本文換一個具體場景——檔案已經要離開這台電腦、進入別人的儲存時,先分清誰拿得到明文,密碼該走哪條路。
這不是「線上檔案加密」功能清單,也不教你選哪一家雲端空間。問題只有三個:密文出站之前,明文有沒有先變成密文;上傳之後,服務商或下一個下載的人還能否直接打開;密碼有沒有和 .lock / .enc 捆在同一封郵件或同一則 LINE 訊息裡。MyPassGen 的檔案加密盒按這個界線工作:在瀏覽器裡用 AES-256-GCM 算完,再下載結果;檔案與密碼不作為業務資料上傳,開啟即可使用。下面用對照表和可當場做的步驟說明界線。
「已加密」經常不是你以為的那一層
HTTPS 只保護傳輸路徑上的竊聽者。檔案到達雲端伺服器之後,服務商仍然可能以明文或「自己能解的密文」落盤。許多產品把這種服務商代管金鑰的靜態加密,寫成「您的檔案已加密」。對維運來說,這能防硬碟被順走;對「不想讓雲端側看見證件掃描檔」來說,不夠。
用戶端先加密再上傳,是另一層:瀏覽器或本機程式用你持有的密碼派生金鑰,雲端上只留下密文。Rclone Crypt、部分同步工具,以及瀏覽器裡的 Web Crypto,都屬於這一層。它們解決的是「儲存方拿不到可用明文」,不解決密碼太弱、密碼和檔案一起傳送,或檔名自己就把內容說穿。
《個人資料保護法》第二條把國民身分證統一編號、護照號碼、聯絡方式與財務情況列為個人資料;第五條要求蒐集、處理或利用不得逾越特定目的之必要範圍。把未加密的身分證或健保卡掃描檔丟進個人雲端,再轉到 LINE 群,等於把識別能力一併轉出。先加密再上傳,減少的是儲存方和路人直接打開的能力;它不是匿名化,也不能代替「這份檔案該不該離開本機」。
先問誰能打開,再問演算法名字
服務商代加密:服務商能打開,你也能打開。本機先加密:沒有密碼的人——包括雲端側——打不開正文。密碼和密文捆在一起:任何看到那則訊息的人,都回到第一種。演算法寫 AES 並不能把第三種變成第二種。
誰拿得到明文:三種存放
把同一份 certs.zip 放進雲端硬碟,至少能分成三類。差別不在頁面文案,而在金鑰在誰手裡、明文有沒有先離開瀏覽器。
| 做法 | 雲端側拿到什麼 | 沒有密碼的下載者 |
|---|---|---|
| 直接上傳原檔 | 完整明文(外加 TLS) | 能直接打開 |
| 雲端「保險箱 / 靜態加密」 | 服務商可解的密文或明文 | 登入後通常仍能打開 |
本機先加密再上傳 .lock / .enc |
密文;檔頭可能仍有原名 | 沒有密碼則解不開正文 |
第三類才回答「不想讓儲存方看見正文」。它要求加密發生在上傳之前,並且金鑰不交給那台儲存機器。上一篇已經寫過:Web Crypto API 保證的是運算可以在本機發生,並不禁止頁面先上傳再加密。所以「本機先加密」必須用流量核對,不能用行銷句核對。
AES-256-GCM 在這一步做什麼
MyPassGen 初版只使用 AES-256-GCM。NIST SP 800-38D 把 GCM 規定為認證加密:密文被改過,解密應失敗,而不是解出一段亂碼還讓你當正文。RFC 5116 裡的 AEAD_AES_256_GCM 使用 32 位元組金鑰、12 位元組 nonce、16 位元組認證標籤。MDN 的 AesGcmParams 同樣建議 96 位元 IV,且同一金鑰下每次加密必須換新 IV。IV 本身不必保密,可以和密文放在一起。
密碼不會直接當 AES 金鑰用。本站檔案盒用 PBKDF2、100,000 次迭代、SHA-256、16 位元組鹽,再得到 256 位元金鑰;鹽寫在檔頭裡,以便解密時重算。RFC 8018 引用 NIST SP 800-132:迭代次數應在可接受的等待時間內盡量大。OWASP 對「伺服器存密碼雜湊」目前建議 PBKDF2-HMAC-SHA256 至少 600,000 次。檔案密碼的第一道防線仍是足夠長的隨機密碼——迭代次數擋的是離線窮舉,擋不住 123456 寫在雲端備註裡。
密碼不要和密文走同一條路
最常見的失敗不是演算法選錯,而是:把 backup.lock 和「密碼是夏天加工號」發在同一則 LINE 群、同一封郵件、同一個雲端資料夾的 readme.txt 裡。此時雲端側或群組成員同時拿到兩半,本機加密等於沒做。
穩妥的拆法是:密文走雲端硬碟或郵件附件;密碼走另一條通道——當面、電話,或一次閱後即焚連結(金鑰在網址的 # 後面,閱讀頁無需註冊)。不要把密碼寫進檔名、壓縮檔註解,或「僅自己可見」卻仍存在同一帳號下的備忘錄。
密碼本身建議用密碼產生器在本機產生,隨機模式長度 6–128,預設 16;低於 8 位應視為偏弱。忘記密碼無法復原:沒有伺服器明文備份,也沒有「安全提問」。這是零知識存放的代價,不是功能缺失。
不要把原檔交給來路不明的「線上加密」
把整份憑證包 POST 到會代算的網站,等於把明文寫進對方紀錄。加密應在目前分頁完成,並且你能在 Network 裡看見:業務請求沒有檔案本體,也沒有密碼欄位。下載到的應是 .lock 或 .enc,而不是對方伺服器回的「已加密副本」連結。
打開 .lock 還能看見什麼
密文不是「整份檔案變成無法辨認的雜訊」。可公開的容器頭往往仍帶著中繼資料。MyPassGen 預設輸出 .lock,也可以選 .enc——兩者是同一套格式,只是副檔名不同,方便和別的工具習慣對齊。檔頭以四個位元組 CSLK 開頭,接著是版本號、16 位元組鹽、分塊大小,以及原始檔名和 MIME 類型的明文。正文按約 1 MB 一塊做 AES-GCM,每塊自帶 12 位元組 IV 和 16 位元組標籤。
因此,把 身分證掃描.pdf 加密成 身分證掃描.pdf.lock 再上傳,雲端列表和檔頭都能看出「這是一份證件掃描」。加密保護的是位元組內容,不是名字。名字敏感時,先把原檔改成無含義的名字再加密;上傳後的 .lock 也不要用能讀懂的標題。
單檔上限 5 GB。加密時按 Blob.slice 切成約 1 MB 再交給 crypto.subtle.encrypt。Web Crypto 的 encrypt() 一次只吃一份 BufferSource,整檔一次送進去,大檔會把分頁記憶體頂滿。切片避免「一次把整份明文餵給介面」;結果仍會在本機拼成下載檔。解密目前實作會先讀入整個 .lock,所以超大檔更吃記憶體——這是你能在活動監視器或工作管理員裡核對的事實,不是口號。
當場核對:Network、檔頭、解不開
下面這組步驟不依賴任何品牌承諾。用一個可丟棄的小文字檔做,不要拿真實證件練手。
- 新建一個幾十字元組的
probe.txt,寫入一句只有你知道的測試句,例如orange-lake-7。不要用真實密碼或證件。 - 打開開發人員工具 Network,勾選「保留記錄」。再打開檔案加密頁,選中該檔,設一組密碼,開始加密。
- 逐條看 Fetch / XHR:請求列和請求主體裡不應出現
orange-lake-7,也不應出現你剛輸入的密碼。分析回報同樣不該帶走原文。允許出現的是腳本、樣式和與檔案本體無關的統計。 - 下載得到的
.lock或.enc,用十六進位檢視器看檔頭前四位元組,應是43 53 4C 4B(ASCIICSLK)。再往後應能看見原始檔名probe.txt的明文,而不是測試句本身。 - 把該密文拖回同一頁解密,輸入正確密碼,應還原測試句;改一個密碼字元,解密應失敗,而不是給出亂碼正文。
- 這之後,才把
.lock上傳到雲端硬碟。密碼走另一則訊息。回到雲端預覽:不輸入密碼,應打不開原文。
MyPassGen 的檔案加密盒按這個界線工作:AES-256-GCM,PBKDF2 100,000 次,單檔不超過 5 GB,輸出 .lock / .enc。計算在目前分頁完成,無需註冊。你要相信的仍是 Network 和檔頭,不是頁面上的「不會上傳」五個字。
短機密別走整份檔案
一條 API Key、一段復原碼、一個資料庫密碼,不必先打成檔再加密。整檔流程適合憑證包、匯出表、磁碟映像切片;短文本走閱後即焚更合適:明文上限 32 KB,伺服器只暫存密文,金鑰放在 # 後面,閱讀次數和 TTL 可以設。建立與閱讀都無需登入。
外發說明文件時,連結和正文是另一道工序。帶 utm_source 的網址按哪些參數能刪處理;工單裡的手機號碼、身分證字號按哪些欄位必須打碼處理。加密檔案解決的是「儲存方打不開正文」,不是「討論時少帶完整號碼」。
常見誤區
「雲端硬碟寫了加密,就等於只有我能看。」服務商代管金鑰時,維運、執法調取和帳號被盜,看到的仍是可用檔案。本機先加密,才把「能解的人」收成持有密碼的人。
「HTTPS 已經全程保護。」HTTPS 結束於服務商入站。落盤之後,保護範圍換人。你要減少的是落盤那一份裡的明文。
「副檔名改成 .lock 就是加密。」沒有經過認證加密的改名,用記事本仍能搜到原文。檔頭應有約定魔數,正文應解不開;只改後綴等於沒做。
「密碼忘了可以找客服找回。」零知識存放沒有伺服器密碼副本。頁尾也不提供客服信箱來「重設加密密碼」。密碼只存在你自己的密碼管理器或另一條你控制的通道裡。
從哪一步開始
先處理今天就要上傳的那一份。用可丟棄的小檔走完上一節的六步,確認 Network 沒有原文、檔頭是 CSLK、錯密碼解不開。然後再加密真實檔案。名字敏感的,先改名。
密文上傳雲端硬碟或當作郵件附件;密碼當面說、打電話,或產生一條閱後即焚。不要把密碼寫進同一資料夾的文字檔。做完這一件,你就已經能回答本文的問題:雲端側不該拿得到明文;密碼不該和密文走同一條路;檔頭裡仍可能看見原名,需要單獨處理。
常見問題
雲端的「保險箱」和本機先加密有什麼差別?
保險箱通常仍由服務商持有或代管金鑰,登入同一帳號就能打開。本機先加密後,雲端側沒有密碼解不開正文。帳號被盜時,沒有密碼的人只能下載密文。
密碼忘了還能解密嗎?
不能。沒有伺服器明文或密碼備份。請用足夠長的隨機密碼,並單獨存在你自己的密碼管理器裡。這是「儲存方看不見正文」的對稱代價。
.lock 和 .enc 有什麼不同?
在本站裡它們是同一套容器,只是副檔名不同。解密時兩種後綴都可以拖回頁面。不要假設別的軟體的 .enc 能被同一套檔頭解析。
加密需要註冊嗎?檔案會不會上傳?
不需要註冊。把原檔交給會代算的網站,才有紀錄風險。本地處理時,檔案與密碼留在目前分頁;你要核對的是 Network 裡有沒有檔案本體或密碼,以及 .lock 裡是否還能搜到測試句原文。