如果你加密數據,那麼你必須問問自己誰會解密它。如果您使用非對稱加密系統(例如RSA),則加密使用公鑰,解密使用相應的私鑰; 「不對稱」來自私鑰不能從公鑰重新計算的事實(儘管這兩個密鑰在數學上連接在一起)。
非對稱加密往往會產生開銷。第一種說法是,這種加密必須包含一些隨機部分,因爲每個人都可以加密(公鑰是,公開):如果加密過程是確定性的,那麼任何人都可以加密所有可能的SSN(少於一個數十億,這對現代計算機來說是非常小的數字)並且與加密值相匹配。因此,在加密期間必須有一些隨機添加,並且加密的SSN大於明文SSN。
已知的非對稱加密系統使用具有自己成本的數學結構。基本上,對於RSA加密系統,使用「足夠強」的密鑰,加密消息的長度至少爲128字節。一些加密系統做得更好;同時堅持走完學術研究的路徑,我可以在41個字節左右(與El-Gamal相比NIST K-163橢圓曲線)做到這一點。小一點似乎更難。
所以難怪一個給定的數據庫系統在默認情況下不會包含這樣的功能。
對於您的問題,您應該首先定義(寫),儘可能清楚,您可以:
- 是什麼,你要保護的數據
- 誰輸入數據
- 是誰應該讀回數據
然後你應該問自己,是否加密是一個適當的工具。當設想的攻擊者可以獲得原始的存儲數據時,加密是很好的。這意味着攻擊者繞過了操作系統的保護。那時,無論操作系統知道什麼,攻擊者也知道。如果數據庫託管在一臺機器上,並且存在可以獲得解密的SSN的接口,那麼該機器「知道」如何獲取數據,攻擊者也是如此......另一方面,如果主機機器操作系統被認爲具有足夠的彈性,那麼加密似乎根本不需要。
對數據庫的對稱加密可能會解決一個較弱的問題,攻擊者在此之後獲取硬盤的副本,然後。主機系統知道對稱加密密鑰,但只知道它在RAM中。竊取硬盤的攻擊者不會擁有該密鑰。
你確定**你需要存儲SSN?你真的想要肩負這麼大的法律責任嗎? – ceejayoz 2010-02-16 18:27:32
我正在盡我所能做到最好。但是這將是一個有利於開放註冊的系統,如果你添加一個新的依賴項,SSN是必需的信息。 – 2010-02-16 18:28:16
這很有道理。只要確保它不是像最後四位數字或單向散列就足夠的情況。 – ceejayoz 2010-02-16 18:31:28