2009-06-29 101 views
1

我在這裏閱讀了很多類似的問題,但沒有一個與我的情況完全相同。存儲SSN/CC數據

此前,用戶輸入大量信息,包括SSN,配偶SSN和CC數據。當用戶完成該過程時,信息被推送到PDF上,然後壓縮(然後被加密),然後通過FTP返回到我們的服務器。除了SSN和CC之外,我們保存了數據庫中的所有內容,當會話死亡時這些內容被刪除。

現在,我們需要將該信息保存到數據庫,以及在用戶A完成後的某些情況下,用戶B需要進入並簽名表單。用戶B完成後,將創建文件並刪除SSN/CC數據。這意味着數據必須從我們的數據庫中存儲幾分鐘到可能一個月。有一組到期日期,我從數據庫中清除數據並重新開始。注意:我沒有使用CC數據實際收費,所以我不能將它交給像Authorize.net或Paypal這樣的第三方。

有了這個解釋,我需要知道加密這個東西並保護它的最好方法。我在我的代碼中使用用戶的GUID作爲密鑰或者只是SQL Server 2005列進行加密並將解密功能限制爲網絡用戶之間進行切換。

我喜歡AES,因爲它讓少數擁有數據庫訪問權限的用戶可以使用Web用戶的密碼來獲取所有CC數據。他們可以訪問源代碼並可以複製解密方法,但至少比運行某些查詢要困難一些。

不幸的是,我沒有時間推動不存儲CC數據的方式,但我對下一個版本有一些想法。我必須做出選擇並在本週實施加密。

回答

2

我不明白如何在用戶GUID作爲對稱密鑰的應用程序代碼中使用AES加密將保護數據不被具有數據庫訪問權限的人員解密。在大多數系統中,用戶ID GUID也不會以明文形式存儲在數據庫中?如果是這樣,那麼任何有權訪問數據庫的人都可以通過傳遞相應的解密函數來解密任何數據。

根據應用程序服務器連接到數據庫服務器的方式,SQL Server中的內置列加密功能應該是一個很好的解決方案。如果您使用集成身份驗證,則可以避免爲應用程序用戶提供明文密碼。通過使用可用的訪問控制來保護您的加密密鑰,您可以對其進行設置,以便其他用戶(甚至可能不包括DBA)可以任意解密數據庫中的數據。

2008年6月我作了關於在SQL Server 2005和2008可用使用加密功能here

下面是從演示文稿中給出瞭如何使實現這一目標的概述示例代碼只適當的用戶可以查看解密的數據:

- 創建數據庫的主密鑰,這將用於在DB每隔一個密鑰來加密並且又由服務主密鑰加密

CREATE MASTER KEY ENCRYPTION BY password = 'MasterKey1$' 

- 創建證書所用的用戶保護自己的對稱密鑰 - 創建對稱密鑰對數據進行加密,因爲它們是速度更快,基於關鍵尺寸沒有固有的數據大小的限制

CREATE CERTIFICATE data_cert AUTHORIZATION data WITH SUBJECT = 'Data Cert' 

- 請注意,您也可以在這裏使用「密碼加密」選項來防止不知道密碼的DBA打開證書,從而無法解密數據。 - 爲每個用戶創建對稱密鑰保護他們的數據 - 注意如果在XP上運行SQL Server,AES算法不可用,則必須使用3DES

CREATE SYMMETRIC KEY data_key WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE data_cert 

- 注意,您還可以使用加密BY PASSWORD在這裏也防止DBA誰不從打開該鍵

知道密碼 - 授予對對稱密鑰,以便只有正確的用戶可以訪問它們

GRANT VIEW DEFINITION ON SYMMETRIC KEY::data_key TO [DOMAIN\ApplicationServiceAccount] 

這使您只能通過相應的用戶可以打開表中使用的加密/解密數據的對稱密鑰。您還可以從數據庫引擎中的加密最佳實踐功能中獲益,例如每個單元使用獨特的初始化向量加密,以及SQL Server中的密鑰管理功能,使您能夠定期輕鬆更改密鑰。

0

您是否已經閱讀了Payment Card Industry要求?

將用戶的GUID用作AES密鑰似乎不符合要求。

+0

我沒有看到任何與加密密鑰相關的內容。 – AndyMcKenna 2009-06-29 05:06:42

+0

快速參考指南中的第3部分(https://www.pcisecuritystandards.org/pdfs/pci_ssc_quick_guide.pdf):保護用於加密持卡人數據的密鑰,避免泄露和濫用。 – 2009-06-29 06:28:15