我已經使用salted hashing在我的數據庫中存儲密碼,這意味着我應該免疫rainbow table攻擊。值得加密數據庫中的電子郵件地址嗎?
雖然我有一個想法:如果有人拿我的數據庫呢?它包含用戶的電子郵件地址。我無法真正哈希這些,因爲我會用它們發送通知電子郵件等。
我應該加密它們嗎?
我已經使用salted hashing在我的數據庫中存儲密碼,這意味着我應該免疫rainbow table攻擊。值得加密數據庫中的電子郵件地址嗎?
雖然我有一個想法:如果有人拿我的數據庫呢?它包含用戶的電子郵件地址。我無法真正哈希這些,因爲我會用它們發送通知電子郵件等。
我應該加密它們嗎?
布魯斯·施奈爾對這類問題做出了很好的迴應。
加密不是解決您的安全問題。這可能是解決方案的一部分,也可能是問題的一部分。在許多情況下,密碼學通過使問題變得更糟而開始,並且使用密碼術是一種改進並不十分清楚。
對數據庫中的電子郵件進行必要的加密「以防萬一」並未真正使數據庫更安全。數據庫存儲的密鑰在哪裏?這些密鑰使用哪些文件權限?數據庫是否可公開訪問?爲什麼?這些帳戶有哪些帳戶限制?機器存放在哪裏,誰可以物理訪問這個盒子?怎麼樣遠程登錄/ ssh訪問等等等等等等等
所以我想你可以加密電子郵件,如果你想,但如果這是系統的安全程度,那麼它確實沒有太大的作用,並且實際上會使維護數據庫的工作變得更加困難。
當然,這可能是您的系統的廣泛安全策略的一部分 - 如果是的話,那麼太棒了!
我並不是說這是一個壞主意 - 但是爲什麼鎖死Deadlocks'R'us的門會花費5000美元,因爲他們可以切割門板上的膠合板?或者從您打開的窗戶進來?或者更糟糕的是,他們發現在門墊下留下的鑰匙。系統的安全性與最薄弱的環節一樣好。如果他們擁有root權限,那麼他們幾乎可以做他們想做的事情。
Steve Morgan使得一個好點,即使他們無法理解的電子郵件地址,他們仍然可以做很多傷害(如果他們只有SELECT訪問可能得到緩解)
它也很重要,要知道你的原因是存儲電子郵件地址。我可能與this answer有點過度,但我的觀點是你真的需要存儲一個帳戶的電子郵件地址?最安全的數據是不存在的數據。
你真的必須衡量你最糟糕的情況下獲得這些電子郵件地址的人,獲得他們的可能性,以及你需要額外的努力/時間來暗示變化。
與大多數安全要求一樣,您需要了解威脅等級。
如果電子郵件地址受到損害,可以造成什麼樣的損害?
它發生的機會是什麼?
如果電子郵件地址被替換,造成的損害可能比它們暴露時大得多。特別是如果您使用電子郵件地址驗證密碼重置到安全系統。
密碼被替換或暴露的機會大大減少,如果你哈希它們,但它取決於你有什麼其他控制。
更換電子郵件 - 很邪惡!你必須與政治家掛在一起:) – NoChance 2017-01-24 02:10:05
我會說這取決於您的數據庫的應用程序。
最大的問題是,你在哪裏存儲加密密鑰?因爲如果黑客擁有比數據庫更多的東西,所有的努力都可能被浪費掉。 (請記住,您的應用程序將需要該加密密鑰來解密和加密,因此最終黑客會找到加密密鑰和使用的加密方案)。
臨:
缺點:
@Roo
我有點同意你說的話,但不值得對數據進行加密只是爲了讓多一點很難有人走呢?
隨着你的推理,在你的房子裏有鎖或鬧鐘是沒有用的,因爲它們也很容易被攻破。
我的回答:
我要說的是,如果你有敏感數據,你不想落入壞人之手,你或許應該這樣做很難,因爲你可以爲黑客獲取它,即使它不是100%的傻瓜證明。
SQL Server和Oracle(以及其他數據庫)都支持數據庫級別的數據加密。如果你想加密一些東西,爲什麼不簡單地抽象對數據庫服務器端可以加密的數據的訪問,並讓用戶選擇是否使用加密數據(在這種情況下SQL命令將會不同)。如果用戶想要使用加密數據,那麼它可以配置數據庫服務器,並且使用標準DBA工具(由DB供應商製作而不是從您制定)來連接與密鑰管理相關的所有維護工作。
請勿意外將加密與混淆混淆。我們通常會混淆電子郵件以防止垃圾郵件。許多網站將有「網站管理員_at_ mysite.com」,以減緩抓取工具將電子郵件地址解析爲潛在的垃圾郵件目標。這應該在HTML模板中完成 - 在持久性數據庫存儲中這樣做沒有任何價值。
我們不加密任何東西,除非我們需要在傳輸過程中保密。您的數據何時何地傳輸?
SQL語句從客戶端傳輸到服務器;是在同一個盒子上還是通過安全連接?
如果您的服務器被攻破,你有一個無意的傳播。如果你擔心這一點,那麼你應該保護你的服務器。您有外部威脅以及內部威脅。所有用戶(外部和內部)是否正確認證和授權?
在備份過程中,你有一個故意傳輸到備份介質;這是使用安全備份策略完成的嗎?
我意識到這是一個死去的話題,但我同意Arjan的背後邏輯。有一些事情,我想指出的:
有人可以無需檢索源代碼檢索數據庫中的數據(即SQL注入,第三方數據庫的)。考慮到這一點,考慮使用帶密鑰的加密是合理的。雖然,這只是安全的一個補充措施,而不是安全......這是人誰願意保持電子郵件比明文更私人, 在關閉的機會,在更新過程中的東西是被忽視,或者攻擊者設法檢索電子郵件。
IMO:如果您打算對電子郵件進行加密,請同時存儲它的鹽漬散列。然後,您可以使用散列進行驗證,並且不斷使用加密來查找大量數據的開銷。然後有一個單獨的私人函數來檢索和解密你的電子郵件,當你需要使用一個。
這是值得在數據庫中的數據進行加密,這不是使之更有點困難,但是當它以正確的方式加密,從而阻止理念和加密敏感數據的方式更加困難;)
這個回覆的問題是,雖然它確實提醒人們還有其他可能的方式來損害數據,但它最終只會阻礙人們應該鼓掌的積極思考。 – John 2013-01-21 06:08:24
@John爲了防萬一,使用加密技術在我的腦海中並不是主動思考。積極主動的思考將會評估風險並提出減輕風險的解決方案。加密可能是也可能不是該解決方案的一部分。我希望我的回答能鼓勵這種想法。 – roo 2013-02-03 06:18:06
我發現某些WordPress緩存插件實際上將數據庫表緩存爲公共wp-content目錄內的json文件。這意味着,smtp設置(如果提供發佈帖子)和網站上的所有評論將暴露電子郵件地址。由於有人可能由於疏忽而看到數據庫的內容,但無法訪問系統或數據庫本身,我完全支持使用存儲在數據庫之外的字符串來加密電子郵件地址。如果WordPress是這種情況,那麼暴露的電子郵件地址將是無用的。 – 2015-07-26 23:02:52