互聯網公司如何安全的存儲用戶信息

jopen 8年前發布 | 7K 次閱讀 加密解密 數據庫

互聯網公司如何安全的存儲用戶信息 之前的文章提到了個人的安全注意事項,并且簡單提到了互聯網公司的安全注意事項。這篇文章注意談一談如何存儲重要的明文信息。

通常情況下,密碼的存儲通過單向加密算法實現。比如在 20 年前可以使用人人皆知的 MD5 算法加密,現在可以使用 Bcrypt 算法加密。這樣用戶登錄的時候,只需要對比明文的 HASH 是否一致即可判斷密碼的正確性。

但是,還有很多需要使用這些明文信息的場景。比如,我們經常會遇到存儲用戶信息的情況,比如:姓名、地址、電話號碼、信用卡信息、第三方不支持 OAuth 的系統登錄密碼等等。

首先,不建議在自己的系統內存儲不必要的用戶信息。盡量規避風險,使用可靠的第三方服務。只要存儲了用戶信息,就有可能成為攻擊對象。

但是假如業務邏輯無法避免這些信息的存儲。本文是一個思路:使用 Mcrypt 算法進行信息的雙向加密

0. 可行性

數據庫是信息泄露的主要源頭,需要避免 在數據庫存儲明文敏感信息 。而且,數據庫基本是一個互聯網公司的核心數據源,對于應用系統來說,數據庫數據的內部人員訪問權限非常難以限制。即,需要一種即使讓其他人訪問數據庫但卻不泄露用戶敏感信息的策略。

1. 思路

雖然很多人喜歡 Bcrypt 超過了 Mcrypt,但是 Bcrypt 不支持雙向加密,所以這里使用 Mcrypt 。

首先,需要在一個安全的地方存儲一個加密的秘鑰。這個秘鑰除了線上的應用程序,其他人是不可訪問的。

加密

密文 = BASE64_ENCODE(加密算法(明文 + 隨機 Salt, 秘鑰))

解密

明文 = BASE64_DECODE(加密算法(密文,秘鑰))- 隨機 Salt

2. 部署

關于秘鑰的存儲是整個系統的關鍵,否則將功虧一簣。一般情況下可以將其存儲在應用的配置文件中,僅僅會有泄露給運維人員的風險。

3. 加密服務

可以單獨獨立部署加密用的 HTTP 或者 RPC 服務,通過網絡服務進行加密。這樣做的好處是:可以進行訪問記錄的審計;方便進行訪問權限控制;方便進行訪問頻率控制,防止大規模泄密;可以將加密服務和普通應用系統進行部署隔離;等等。

4. 其他

加密服務可以統一管理秘鑰。將不同業務系統的秘鑰進行隔離。另外可以進行秘鑰的版本管理,以及秘鑰的統一過期和更新。貌似絕大部分互聯網公司都有客戶敏感信息存儲的需求,比如現在廣泛使用的用戶手機號碼作為驗證碼的方式。希望這篇文章對你有幫助,減少安全風險。

5. 其他幾個安全問題的考慮

之后有機會再寫文章說明:如何安全的第三方存儲敏感信息,比如 Github;Amazon S3 如何實現數據的簽名訪問。

相關鏈接:

  • https://en.wikipedia.org/wiki/Bcrypt
  • https://en.wikipedia.org/wiki/Mcrypt
  • http://www.twinbit.it/en/blog/storing-sensitive-data-git-repository-using-git-crypt
  • https://gist.github.com/shadowhand/873637

注冊 DigitalOcean 1G 內存, 30GB SSD 硬盤 VPS, 獲取 10 美元折扣

來自: https://blog.eood.cn/security-service

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!