2

我正在为未来的项目做一些研究,它需要对一些数据进行加密。

在我今天的研究中,我注意到有许多不同的加密算法(包括 AES、Triple-DES、X-DES 等),我希望使用 SQL-Server 中的一种算法(2008r2 express probs),你会如何推荐这样做,比如最佳实践等?

我打算做以下事情:

-- Create the master key. 
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Som3Rand0m!3y?na'
-- Create the cert.
CREATE CERTIFICATE someCert WITH SUBJECT = 'c3p009xFR?'
-- Create Symmetric Key
CREATE SYMMETRIC KEY someSymmetricKey WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE someCert 

并以下列方式使用它:

declare @sql varchar(8000)
set @sql = 'OPEN SYMMETRIC KEY someSymmetricKey DECRYPTION BY CERTIFICATE someCert '
exec (@sql)

-- Check the table
SELECT      col1, Convert(varchar(max), DECRYPTBYKEY(col2)) as col2
FROM        myTable

-- dont forget to close the symmetric key again afterwards.
CLOSE SYMMETRIC KEY someSymmetricKey

我想这是正确的方法(我很久以前读过它并保存了一个例子,所以只需仔细检查:])?

此外,使用不同的加密算法之间是否真的存在任何性能差异(或安全差异,比如一个比另一个更容易破解)?<<- 这是我真正想要了解/最重要的一个。

最后,如果我将数据库移动到不同的服务器,我想我可以以相同的方式重新创建密钥/证书,我将能够取回数据等?

任何好的博客文章/链接/白皮书将不胜感激:)(我读过的大部分内容都非常糟糕)

感谢阅读:D

4

2 回答 2

2

您只有两个选择:AES 和 3DES。简单的 DES 和 XDES 太弱(分别为 56 位和 112 位强度)。RC4 不是一个选项,因为 SQL Server 实现被破坏(没有正确加盐加密值)。

3DES 固守过去。使用 AES,是当前 NIST推荐的算法,并为您提供不错的速度。

于 2011-03-21T22:51:17.250 回答
1

对于您选择的加密算法,实际上并没有万能的选择(请参阅下面的链接,了解 Microsoft 对 SQL Server 中可用算法的建议)。

http://msdn.microsoft.com/en-us/library/ms345262.aspx

至于备份和恢复您的加密密钥:

--Backup the master key   
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'Som3Rand0m!3y?na';
BACKUP MASTER KEY TO FILE = 'c:\temp\exportedmasterkey' 
ENCRYPTION BY PASSWORD = 's0me0th3rp4$$w0rd';
GO 
--Back up the certificate
BACKUP CERTIFICATE someCert TO FILE = 'c:\temp\someCert.cer'
GO

然后,在您的另一台服务器上

RESTORE MASTER KEY FROM FILE = 'c:\temp\exportedmasterkey' 
    DECRYPTION BY PASSWORD = 's0me0th3rp4$$w0rd'
    ENCRYPTION BY PASSWORD = 'Som3Rand0m!3y?na'
GO

CREATE CERTIFICATE someCert
    FROM FILE = 'c:\temp\someCert.cer'
GO
于 2011-03-21T23:06:32.443 回答