AWS KMS 全稱爲 Key Management Service,中文直譯過來爲密鑰管理服務 —— 這一點很重要,它提供的核心服務是密鑰管理,幫助企業、開發者方便安全地管理密鑰。不少剛接觸 KMS 的同窗常常搞不清 KMS 到底作是作什麼的,很大緣由也是沒仔細注意到 Key Management 這兩個詞。安全
因此咱們的第一個問題「What」就已經回答了,KMS 就是一個管理密鑰的服務,它並非某種 super super magic 的高超加密方法。服務器
我但願本文的讀者經過閱讀能意識到一個觀念:加密是簡單的,難的是管理密鑰自己。
接着來看第二個問題:Why ?爲何我須要把個人密鑰給你管理,我本身保存不行了嗎?事實上你徹底能夠本身管理,就像你徹底能夠自建機房同樣,only if 你清楚各類最佳實踐並願意花時間本身去維護。服務之因此叫服務,是服務提供商爲你作了各類各樣麻煩的事情(They deal with those heavy lifting),從而讓你把更多的時間精力花在更有價值的事情上。app
那麼 AWS KMS 爲用戶作了哪些麻煩的工做呢?ui
知道了爲何使用 AWS KMS,接下來也是本文重點內容,瞭解一下 How: KMS 內部實現原理。加密
首先了解一下對稱加密與非對稱加密:簡要來講,對稱加密指的是加密、解密用的是同一個密鑰;非對稱加密指的是加密、解密使用一對密鑰:公鑰和私鑰,你可使用公鑰加密私鑰解密,也能夠反過來。如 HTTPS 用的就是非對稱加密。spa
接下來看看 KMS 內部是如何保存你的密鑰的:假設咱們有一個用於加密數據的密鑰,叫作 Data Key,將 Data 加密事後獲得 Encrypted Data,這個過程很簡單。設計
可是問題來了,該怎麼處理 Data Key 呢,要是攻擊者獲取到了 Data Key,那不至關於數據也就被破解了?正確的選擇是把 Data Key 也用某種密鑰(這裏把它叫作 Matser Key)加密一下(術語叫作 Wrapping),獲得 Encrypted Data Key 。接着咱們把 Encrypted Data 和 Encrypted Data Key 保存在一塊兒,以下圖所示:blog
但是問題又來了:Master Key 怎麼加密?相信你已經察覺出來了,這很像一個俄羅斯套娃(劃掉)接口
你沒有看錯,AWS KMS 還真就是這麼作的,他們這樣一層一層加密密鑰(專業名詞叫作 KMS Key Hierarchy),到最終的那個 Key 的時候,它的確是一個明文,可是:內存
以致於連 AWS 員工都沒有辦法獲取到原始內容。
那麼其餘的 Data Key 呢?我真正加密的數據的數據用的是 Data Key,要是 Data Key 泄漏了怎麼辦?這個問題很重要。那麼 KMS 是如何解決的呢?
KMS 的 Data Key 是在內存中動態生成的,用於加密數據事後,它就在內存中被刪掉了,只有加密事後的 Encrypted Data Key 保留了下來。
借用 AWS re:Invent 2019 上 AWS Solution Architect Peter M.O'Donnell 的話:
KMS is a very serious service, built by very serious people for very serious customers .
總結一下:
這篇文章介紹了 AWS KMS 是什麼、爲何要用 KMS 以及 KMS 是如何保護你的密鑰從而保護你的數據的,下一篇咱們從實際應用的角度,來看看該怎麼將 KMS 具體應用到你的系統中。
相關閱讀: