我对MS的数据加密/解密等主题非常陌生。
我对数据加密/解密没有问题,但我不明白为什么下面的示例是作为“最佳实践”给出的?如果我可以直接用对称密钥加密/解密数据,为什么要用证书保护对称密钥?
USE SOMEDB
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '***';
GO
CREATE CERTIFICATE [some_cert] WITH SUBJECT = 'Key Protection';
GO
CREATE SYMMETRIC KEY [some_sem_key] WITH
KEY_SOURCE = 'My key generation bits. This is a shared secret!',
ALGORITHM = AES_256,
ENCRYPTION BY CERTIFICATE [some_cert];
GO 发布于 2022-06-23 16:56:24
简单的答案--这样您就不必共享对称密钥的密码了,这样那些使用它加密/解密的人就可以这样做了。
说明-您的示例代码没有显示的是如何使用键。如果是由证书加密的对称密钥,则
OPEN SYMMETRIC KEY [some_sem_key]
DECRYPTION BY CERTIFICATE [some_cert];
SELECT EncryptByKey(Key_GUID('some_sem_key'), 'Top Secret');这是基于这样的假设,即证书的私钥本身是通过数据库主密钥来保护的(您的示例显示了这一点,但是只需将其放在那里,因为证书的私钥也可以通过一个与此参数相反的密码得到保护)。可以通过格兰特'ing或撤销证书上的权限来控制访问。此外,如果证书受到某种程度的破坏,则旋转保护非常容易:
create certificate [some_cert2] WITH SUBJECT = 'Key Protection';
go
OPEN SYMMETRIC KEY [some_sem_key]
decryption by certificate [some_cert];
ALTER SYMMETRIC KEY [some_sem_key]
add encryption by certificate [some_cert2];
ALTER SYMMETRIC KEY [some_sem_key]
drop encryption by certificate [some_cert];如果通过密码保护对称密钥,则将其与必要的方法进行对比:
OPEN SYMMETRIC KEY [some_sem_key]
DECRYPTION BY PASSWORD = 'Sup3rSecurePassword!!!';
SELECT EncryptByKey(Key_GUID('some_sem_key'), 'Top Secret');在这种用法中,您必须将分发Sup3rSecurePassword!!!放在需要使用的任何地方(即应用程序、需要使用的个人等)。
证书轮换基本上是一样的:
OPEN SYMMETRIC KEY [some_sem_key]
decryption by password = 'Sup3rSecurePassword!!!'
ALTER SYMMETRIC KEY [some_sem_key]
add encryption by password = 'M0r3SecurePassword!!!'
ALTER SYMMETRIC KEY [some_sem_key]
drop encryption by password = 'Sup3rSecurePassword!!!'但访问控制的故事并非如此。只有拥有密码才能控制对受对称密钥保护的秘密的访问。
发布于 2022-06-23 15:03:45
使用对称密钥是因为它比用于加密数据的非对称密钥要快得多,而且资源效率更高。这意味着您可以避免“实时”加密数据的(相对可忽略的)开销。使用对称密钥进行加密使用更少的CPU,产生更小的加密数据,因此使用更少的存储。然而,它仍然是一个单一的钥匙。为了减少泄漏单个主密钥的固有安全风险,可以使用更慢但更安全的证书对其进行保护。
简而言之:证书保护用于加密数据的密钥(are)。
https://stackoverflow.com/questions/72732222
复制相似问题