維運 實務
磁碟加密:在不屬於您的主機上,它防得住什麼
全磁碟加密防得住離開機房的硬碟,防不住正在運作中的機器——因為金鑰就存在虛擬機器監控器能夠定址到的記憶體裡。同樣四個字所賣的兩種加密,差別只在金鑰握在誰的手中。
15 分鐘閱讀 於 2026年8月28日 發布 於 今天 檢查
每一家標榜隱私的服務商都會說磁碟已加密。這通常屬實,卻也通常答非所問。加密須留意三種狀態,而伺服器的整個運作生涯,幾乎都待在全磁碟加密照顧不到的那一種裡。以下說明界線實際落在哪裡、界線兩側各是什麼,以及同樣四個字所賣的兩種安排之中,哪一種才是金鑰握在您手裡的那一種。
三種狀態,以及沒有人加密的那一種
資料常被描述為處於三種狀態之一,而業界已相當有說服力地解決了其中兩種。靜態指資料存放在目前沒有任何程式讀取的磁碟上:全磁碟加密,加上疊加其上的資料庫或物件儲存加密,已解決此問題。傳輸中指資料正跨越網路:TLS 已徹底解決此問題,徹底到一張誤發的憑證如今都會成為新聞。使用中指資料已載入某個執行中處理程序的記憶體——而伺服器所送出的每一個位元組,無論多麼短暫,都必須先進入這個狀態,才能被送出去。
靜態加密一詞十分精確,精確到容易被輕易略過。它描述的是機器關機時資料所處的狀態。伺服器全部的工作,就是不能關機。在它運作的數月期間,磁碟區是開啟的,資料庫檔案能被任何以正確使用者身分執行的處理程序讀取,加密機制所做的,僅僅是等待斷電而已。
這四個字所掩蓋的第二件事,是金鑰握在誰手上。以同樣說法販售的,其實是兩種截然不同的安排。服務商可以用自己管理的金鑰為儲存層加密:這保護了服務商自身的除役流程,也縮小了它自身的外洩風險,也確實能防止硬碟被帶出機房——但握有金鑰的一方,正是您原本想問的那一方。另一種做法,是在您自己的機器內部為磁碟區加密,金鑰只存在於您的腦中,以及執行中核心的記憶體裡。只有第二種安排,才會改變第三方能取得什麼;本指南接下來談的,也只有第二種。
以上種種,都不是在反對為磁碟加密,而是在提醒您:務必弄清楚下方八種情境裡,您已涵蓋了哪幾種、還沒涵蓋哪幾種。能擋住一件真實威脅的加密,值得擁有;而您誤以為能擋住八種威脅的加密,比完全沒有加密更糟——因為這種誤信,會讓討論就此打住。
機器運作時,金鑰存放在哪裡
解鎖 LUKS 磁碟區時,您輸入的密碼短語本身並不是金鑰。它解開的是儲存在磁碟區標頭裡的主金鑰,而這把主金鑰接著會存放在核心記憶體中,直到磁碟區關閉或機器斷電為止。每一次讀取、每一次寫入,都會經過它。不存在任何一種可運作的加密磁碟設定,能讓磁碟使用中時金鑰卻放在別處——這不是誰能修正的實作細節,而是使用加密磁碟這件事本身的意義。
在您自己擁有的硬體上,那塊記憶體位於您掌控的機殼、您掌控的房間裡,針對它的攻擊手法相當罕見:需要親自到場,還得利用記憶體晶片斷電後殘留的那幾秒殘留訊號。在虛擬伺服器上,情況不是程度上的差異,而是性質上的差異:您的核心記憶體本身就是主機記憶體的一部分。虛擬機器監控器天生就能定址到它——因為正是透過定址,虛擬機器監控器才把這塊記憶體分配給您。有三項完全稀鬆平常的操作,就能讀到它:
- 即時遷移。將一台執行中的虛擬機器搬移到另一台實體主機時,會在它持續運作的同時複製其記憶體。這是一項功能——主機正是靠這個方式,在不讓您重開機的情況下完成維護——而您的主金鑰,就在被複製的那些記憶體分頁裡。
- 包含記憶體的快照。若快照只針對您自行加密的磁碟區,內容就只有密文,別無其他。但若快照能讓機器完全從原本的狀態接續運作,其中就包含金鑰——因為金鑰本身,正是「完全原本的狀態」的一部分。
- 記憶體傾印。客體的記憶體,存在於主機上某個處理程序的位址空間裡。讀取該處理程序的記憶體,是例行的除錯操作,相關工具隨虛擬化堆疊一併提供,不需要另外夾帶進來。
以上並不是在斷言您的服務商做了這些事,而是在指出:這些操作完全不需要您的配合,不會在您看得到的地方留下痕跡,而且與尋常的平台維護毫無二致。這正是唯一值得寫進威脅模型的特質——重點不在於對方正在做什麼,而在於對方能夠在您不知情的狀況下做到什麼。同樣的道理再往外推一層,也是為什麼您面前的映像檔倉庫與代理伺服器,該和主機一起列入同一份清單的原因。
請記住這條界線:磁碟加密能保護您抵禦磁碟區解鎖那一刻之下的一切——也就是硬碟帶著資料離開機房的情況——但對它之上的一切,則毫無防禦力。
界線之上,還有:虛擬機器監控器及任何握有其憑證的人、任何在您執行中的機器上取得 shell 的人,以及每一份以明文外流的備份——這是資料實際外洩最常見四種途徑裡的三種。
重新開機的難題,以及讓它前功盡棄的捷徑
加密的 root 磁碟區必須先解鎖,系統才能開機到足以接受 SSH 連線的程度。在筆電上,您直接在鍵盤輸入密碼短語即可;但在 2000 公里外、您從未踏進過的機房裡,需要鍵盤的那一刻,根本沒有鍵盤可用。每一種實際可行的解法都是一種取捨——而下面四種做法裡,有一種根本不是取捨,只是裝出一副已經取捨過的樣子。
| 方式 | 無人值守重開機 | 能否防止硬碟遭竊 | 代價是什麼 |
|---|---|---|---|
| SSH 進入開機映像檔 | 否 | 是 | initramfs 裡的一個最簡 SSH 伺服器,讓您連線輸入密碼短語。機器會保持關機狀態,直到有人醒著且能連上線為止。這是誠實的做法,代價也是真實的:凌晨四點的重開機,會一路是一次停機事故,直到有人發現為止。 |
| 網路綁定金鑰 | 是 | 部分 | 機器開機時,會向您架設在別處的伺服器取得解鎖金鑰,而您可以拒絕把金鑰交給一台已經搬動過、或不是您主動重開機的機器。這台金鑰伺服器必須保持上線,而且必須放在同一份命令觸及不到的地方——否則,您只是把同一把鎖的金鑰,分裝進了兩扇門而已。 |
| 開機映像檔內的金鑰檔案 | 是 | 否 | 金鑰放在 initramfs 裡,initramfs 放在未加密的開機分割區裡,而開機分割區又落在您原本想保護的那顆磁碟上。誰拿走磁碟,就連金鑰一併拿走。這種設定相當常見,開機也十分順利,卻完全防不住任何事。 |
| 封存於 TPM | 是 | 部分 | 在您自己擁有的硬體上,一顆真實的安全晶片只會把金鑰釋出給未經竄改的開機鏈。而在虛擬伺服器上,這顆晶片是由主機端模擬出來的,把金鑰封存在裡面,等於把金鑰交給了您原本想防範的那一方。 |
第三列值得多看一眼。當需求被寫成「磁碟必須加密」、卻沒有人追問為了什麼時,最後多半就會落到這一列。稽核會過關,區塊裝置也確實加密了。只是金鑰就搭在同一塊硬體上,放在一個救援模式的 shell 大約 4 秒鐘就能讀到的檔案裡。
這也是租來的虛擬機器與您自己擁有的機器之間,最明顯的實際差異。在獨立伺服器上,頻外管理介面能提供一個撐得過重開機的主控台,於是第一列不再是停機事故,只是 2 分鐘的中斷——第四列裡晶片被模擬出來的問題,也一併消失,因為晶片是焊死在主機板上,而不是由您正要防範的那一方用軟體寫出來的。
全磁碟加密實際換來了什麼
同一個問題,用八種方式來問。重要的是最後一欄——因為在每一列加密幫不上忙的地方,總有別的東西能派上用場,而說清楚那是什麼,正是這整個練習的價值所在。
| 情境 | 加密是否有幫助 | 實際決定結果的因素 |
|---|---|---|
| 硬碟除役、轉售,或依保固退回 | 是 | 沒有其他機制能涵蓋這種情況。硬碟不斷地離開資料中心,清除資料是一道流程,而流程總會悄悄地出錯。這正是全磁碟加密當初被發明來對付的情境,對付起來,效果也正如宣傳所說。 |
| 機器已關機,磁碟被取出 | 是 | 同樣的保護、同樣的界線,而這條界線正是「關機」二字。在機器運作中被取走,等於是在解鎖狀態下被取走——磁碟區是開啟的,金鑰也還留在裡面。 |
| 備份副本存放在別處 | 部分 | 來源磁碟區上的加密,對資料的副本毫無作用。真正決定結果的,是備份在離開之前是否已經加密,而且金鑰不存放在被備份的那台機器上。 |
| 平台建立了快照 | 部分 | 只涵蓋磁碟、且是您自行加密的磁碟區快照,內容是密文,沒有密碼短語就毫無用處。但若快照連記憶體狀態一併擷取,金鑰也會一併被擷取進去。這兩者都叫做快照。 |
| 有人在執行中的機器上取得 shell | 否 | 磁碟區早已是開啟的,入侵者讀到的是檔案,而不是區塊。決定這一列結果的,是修補更新、最小權限原則,以及不在多個服務間重複使用的憑證,加密在這裡毫無貢獻。 |
| 主機端操作者,或任何握有其存取權限的人 | 否 | 唯有金鑰完全不曾進入機器的加密方式,才能防範這一項。硬體記憶體加密是唯一的例外,而它在所有地方預設都是關閉的,下一節會談到這一點。 |
| 命令送達服務商 | 部分 | 由司法管轄區決定誰能提出要求、憑什麼提出;由加密決定答覆內容可能包含什麼。我們公開的立場由兩句話組成,兩句都很重要:我們不持有客戶的金鑰,也無法提供;而虛擬伺服器上未加密的磁碟區,仍然需要一份指名該服務的命令才能取得。 |
| 您必須通報一起資料外洩事件 | 部分 | 如果您的使用者位於歐盟境內,GDPR 第 32 條將加密列為對您的期待措施之一,而第 34 條規定:只要資料已被轉為無法辨識的形式,就能免除通知當事人的義務——但通報主管機關的義務永遠不會因此免除。是否適用,完全取決於資料外流當下金鑰身在何處。 |
磁碟之上:什麼能撐過惡意主機
到目前為止談的,都是止於區塊裝置這一層的防護。在它之上還有三件事,而這三者加起來,正是上表第五、第六、第七列的唯一解答。
把加密放在應用程式之上,而非其下
欄位層級加密,是指應用程式在資料寫入資料庫之前先加密,讀出時再解密。不論是誰、透過什麼途徑取得資料庫的傾印檔,拿到的都是密文。代價是,您將無法搜尋或索引已加密的欄位——這也是為什麼它只該用在少數值得的欄位上,例如訊息內容、上傳的檔案、第三方權杖,而非用在所有欄位上。這條路走到底,就是端對端加密:金鑰屬於使用者,伺服器從不持有明文,惡意主機什麼也拿不到,因為那裡根本沒有東西可拿。這是本頁唯一一種真正不在乎由誰經營硬體的架構,而且它首先是一項產品決策,遠早於成為一項基礎設施決策。
備份是另一項決定,而非附帶結果
資料離開一台已加密機器最常見的途徑,就是備份。推送到物件儲存的快照、同步到第二家服務商的資料庫傾印檔、下載到工作站的封存檔——這些副本,完全不會繼承來源磁碟區的任何加密。應該在資料寫入備份的那一刻就加密,金鑰存放在機器本身碰不到的地方,這樣即使伺服器遭入侵,也無法解密自己過去的資料。接著要在真正需要之前,先在另一台機器上還原一次:一份打不開的加密備份,是一種異常乾淨俐落的方式,能讓您一次失去所有東西。存放在另一個國家的副本,也就是受另一套規則管轄的副本——這等於在不知不覺中,又多選了一個司法管轄區。
記憶體加密,以及您多半還沒有它
沒有人加密的那個狀態,其實有硬體層級的解方。機密運算擴充功能——AMD 的 SEV-SNP、Intel 的 TDX——會以一顆獨立安全處理器所持有的金鑰,為客體的記憶體與暫存器狀態加密,而非交由虛擬機器監控器持有,於是主機就算傾印記憶體,拿到的也只是密文。這項技術是真實存在、也確實已在出貨,但適用範圍很窄:SEV-SNP 需要第三代或更新的 EPYC 晶片,主機必須刻意設定才能啟用,客體也必須能證明自己確實取得了這項保護。幾乎沒有通用型虛擬伺服器提供這項功能,而且沒有一家會悄悄提供。除非服務商以書面明確表示您擁有這項保護,並能告訴您如何自行驗證認證結果,否則就該假設自己沒有它。
一套誠實面對自身極限的設定
以上所有討論,最終並不是導向「別費心了」,而是導向一套設定——它的極限,您可以坦然大聲說出口,不必迴避。
- 寫下您真正要防範的那一個情境(5 分鐘)。除役的硬碟、運作中被查扣的機器、惡意主機、法院命令、必須通報的資料外洩——這五種情境的答案各不相同,而一套想同時應付全部五種的設定,結果通常一種都應付不了。
- 把加密放在金鑰所在的地方(決定)。如果金鑰由服務商持有,您買到的保護就只到硬碟離開機房為止,再多也沒有。若想要更多,磁碟區就必須由您自己、從客體內部解鎖,使用平台永遠看不到的東西。
- 加密資料磁碟區,而非 root 磁碟區(設定)。加密 root,代表每一次重開機都得等您。若改用另一個獨立加密的磁碟區來存放資料庫目錄、上傳檔案與機密資料,機器就能自行重新開機,而敏感的部分則保持關閉,直到您親自打開為止。這是多數小型平台都該做的取捨,卻幾乎沒有人把它寫下來。
- 絕不把金鑰檔案留在未加密的開機分割區(規則)。如果機器無人值守開機,又沒有金鑰伺服器、也沒有主控台,金鑰就一定在磁碟上——不存在第三種可能。若您的整個威脅模型,就只是硬碟遭竊,這是個不錯的取捨;除此之外的任何情況,都只是自我欺騙。
- 在寫入的那一刻就為備份加密,金鑰存放在別處(設定)。接著,挑一個沒有任何緊急事故的日子,在另一台機器上還原一次備份。
- 用一句話說出您涵蓋了什麼(5 分鐘)。大致是這樣的一句話:把這顆磁碟從機架抽走的攻擊者,什麼也拿不到;而在運作中的機器或其主機上取得 root 權限的人,則什麼都拿得到。如果這句話讓您寫下來時感到不自在,那是因為它是真的。
這六項裡,兩項是決定,四項是設定。做決定要花一個下午,做設定只要一個小時,而少了那個下午,這一個小時毫無意義。順序顛倒過來做,正是人們最後落到第一張表第三列的原因——擁有一台通得過稽核、卻誰也保護不了的機器。
您究竟要防範哪一種情境,這首先是威脅建模的問題,其次才是加密的問題;那項一小時版本的練習,幾乎會順帶產出第六步驟裡的那句話。如果答案最終是一份法院命令,而不是一顆硬碟,那麼決定結果的那一層,根本就不在您的磁碟上——而在於誰的法律能觸及您的服務商,以及在信任這一點之前該如何查證。
由實際維運平台的工程師撰寫,並於 今天 重新檢閱。如果這裡有任何錯誤或已經過時,歡迎透過客戶面板告訴我們,這裡大約一半的內容正是這樣來的。