2010-09-13 85 views
2

在一些項目中,我們甚至有人甚至認爲我們的員工無法訪問。理論上,我們有確保他們不這樣做的政策。實際上,我們在非洲,政策並不意味着很多,不管你執行的程度如何。如何處理數據庫中的敏感數據?

我想知道的是,有一種方法來在數據庫中,以便加密數據:

  • 每個用戶密碼加密和解密只有它自己的數據,以及其自己的數據;
  • 數據在過程中儘可能晚地解密以確保用戶的最大安全性。理想情況下,我會猜測客戶端,但我很想聽到在服務器端可以做一些我不知道的瘋狂事情。
  • 數據仍可搜索。這甚至有可能嗎?

我的第一個想法是:「如果客戶想要這個級別的保護,然後給他自己的虛擬機託管和加密hardrive,那麼所有的維護必須完成它的許可。

+0

這一切都取決於數據的種類。如果它像用戶配置文件一樣,並且所有搜索都是通過用戶名完成的 - 那麼它很簡單。否則 - 這取決於。 – 2010-09-13 16:22:52

+0

不,有數字,微積分等 – 2010-09-13 16:25:40

+0

你使用了什麼數據庫? – 2010-09-13 16:27:27

回答

2

我不能想出一個奇特的策略是多麼我實現了這一點:

請記住,當用戶改變他的密碼,你必須重新加密的一切。我總是使用相同的加密密鑰,但使用用戶的明文密碼對密鑰進行了加密。所以我只需要重新加密密鑰。用戶的密碼被存儲爲salted哈希值,因此即使他看到哈希值,也無法解密密鑰和數據。

它的工作原理是這樣的:

  1. 用戶輸入他的明文密碼

  2. 創建鹽醃哈希

  3. 檢查所生成的散列相匹配的數據庫(認證)的一個

  4. 如果是,則使用他的明文密碼解密數據密鑰使用密鑰

  • 解密存儲數據。這不會給你100%的安全,但它提高。

  • +0

    加密關鍵技巧真的很棒。 +1 – 2010-09-13 17:23:39

    +0

    沒有一個完整的anwser,但definitly最好的一個。如此接受。 – 2011-02-06 00:06:17

    +4

    @sled:如果用戶通過密碼重置會發生什麼?然後他將無法使用新密碼解密密鑰,這導致他無法解密他的數據。 我錯過了什麼嗎?你如何解決這個額外的案例? – 2013-04-19 13:23:05

    0

    這裏有幾件事情我能想到的:

    你應該進行加密時,它被保存在,當你讀回存儲的數據。使用在RDBMS級別而不是數據層集成的解決方案。

    爲了嚮應用程序傳輸數據和從應用程序傳輸數據,請使用HTTPS Web服務。

    如果您有桌面應用程序,請勿在本地存儲任何數據和日誌文件等。

    如果它是一個Web應用程序,那麼也應該製作應用程序HTTPS。

    安全性必然會使應用程序比使用普通數據慢一點,但這是您付出的代價。

    0

    這實際上取決於你在數據上做什麼和在哪裏(在客戶端或服務器上)。

    例如,您的應用程序不需要知道密碼本身就可以在驗證過程中對其進行驗證。此用例的最佳實踐是僅存儲密碼的散列(例如sha1)和隨機鹽。這足以驗證它,但只給出散列和鹽,需要幾乎無限的時間來計算明文密碼。

    如果您必須通過不安全的通道交換數據,加密可能是一種靈魂。但請記住,爲了處理數據,你必須解密它們。因此,如果在同一臺機器上進行解密和加密,那就沒有意義了。如果需要解密,無論多久你要這樣做都無所謂,因爲無論如何都必須給予鑰匙。

    例如,您可以使用加密來保護服務器和客戶端之間的通信。您甚至可以在服務器上生成只有客戶端才能讀取的消息,反之亦然,可以使用異步加密。因此,一旦消息在服務器上生成並使用客戶端公鑰加密,即使服務器不能再讀取消息,由於私鑰只有客戶端知道解密需要。

    你用密碼術無法解決的問題是,當你在服務器上有數據時,服務器應該能夠讀取它們來處理它們,但是人類用戶不應該受限於這個服務器。