Dot-Net
是否有用於信用卡加密的最佳 .NET 算法?
.NET
System.Security.Cryptography命名空間有一組相當令人困惑的算法,我可以使用這些算法來加密信用卡詳細資訊。哪個是最好的?對於相對較短的字元串,它顯然需要安全。
編輯:我在英國,我知道只要三位數的 CVV 號碼從未被儲存,我們就可以儲存加密的信用卡詳細資訊。並感謝大家的好評。
沒有冒犯,但這個問題有點“誤導”。沒有“銀彈”解決方案。我建議一般閱讀密碼學,然後進行一些威脅建模。您應該問自己一些問題(絕不是完整的列表):
- 進行加密的模組是需要解密的模組(在這種情況下使用對稱加密)還是會將數據發送到將使用它的另一個模組(在另一台機器上)(在這種情況下,您應該考慮公鑰加密)
- 你想保護什麼?有人訪問數據庫但沒有原始碼(在這種情況下,您可以將加密密鑰直接硬編碼到原始碼中)?有人在嗅探您的本地網路(您應該考慮像 IPSec 這樣的透明解決方案)?有人偷了你的伺服器(即使在數據中心也可能發生——在這種情況下應該考慮全盤加密)?
- 你真的需要保留數據嗎?不能直接傳給信用卡處理商,得到確認後抹掉嗎?您不能將其儲存在客戶端本地的 cookie 或 Flash LSO 中嗎?如果您將其儲存在客戶端,請確保在將其放入 cookie 之前在伺服器端對其進行加密。此外,如果您使用 cookie,請確保僅將它們設為 http。
- 比較數據的相等性是否足夠(即客戶給我的數據與我擁有的數據相同)?如果是這樣,請考慮儲存它的雜湊值。因為信用卡號相對較短並且使用的符號集較少,所以在散列之前應該為每個卡號生成一個唯一的鹽。
稍後編輯:請注意,來自同一類別的標準加密算法(例如 3DES 和 AES - 都是對稱塊密碼)具有相當的強度。大多數(商業)系統沒有被破壞,因為有人暴力破解了他們的加密,而是因為他們的威脅建模不夠詳細(或者他們沒有任何東西)。例如,您可以加密所有數據,但如果您碰巧有一個容易受到 SQL 注入攻擊的面向公眾的 Web 界面,那麼它對您沒有多大幫助。