为什么在 SQL Server 中使用非对称密钥?

ElP*_*nte 8 sql-server encryption

我一直在阅读有关 SQL Server 加密的多个资源,每个人的做法基本相同,但没有人解释为什么我们在 SQL Server 中使用非对称密钥。我的意思是当我们遵循“适当的”程序并首先对称加密数据,然后是非对称密钥或证书时,如此 MSDN 层次结构:

在此处输入图片说明

因此,如果我有数据,首先我会使用对称密钥对其进行加密,以提高速度并避免在受到威胁时重新加密。然后我们使用第二层加密保护该密钥。

现在让我们假设我使用密码保护第二个密钥。在这种情况下,证书、非对称密钥或对称密钥有什么优势?在我看来,我们从未使用这种策略使用证书或非对称密钥的公共方面,因为我们只使用解密方面。那么不应该对我们选择的三种方法中的哪一种不可知吗?我们可以撤销对所有三种密钥类型的访问权限并授予使用所有三种密钥的权限。为什么不使用另一个对称密钥?

我在这里看到的唯一区别是您可以使用 DMK 保护 Cert 或 Asym 密钥,因此用户无需输入密码。这使得访问更容易,但代价是失去了强制用户输入第二个密码的安全性。

这是正确的理解吗?

Mic*_*her 5

正确的密钥层次结构是服务主密钥保护数据库主密钥,数据库主密钥保护非对称密钥或证书,非对称密钥或证书可用于加密或可用于保护用于加密的对称密钥。加密。密钥按该顺序创建。系统创建并保护SMK,DMK及后续密钥由用户创建。

SQL Server 中密钥层次结构的设计可保护数据和密钥免遭泄露。请记住,使用对称密钥时,会使用相同的密钥来加密和解密数据,或者在本例中使用其他密钥。将非对称密钥或证书引入受数据库主密钥保护的层次结构的主要目的是防止从数据库内部对 DMK 和 SMK 进行攻击。如果有人恶意想要获取未加密的 DMK,那么该人需要执行以下两项操作之一。解密服务主密钥并使用它来解密 DMK,这是不可能的,因为只有数据库引擎可以使用数据保护 API 来执行此操作,或者尝试从层次结构的顶部向下解密,这在以下情况下是可能的:不存在非对称密钥或证书。

SQL Server 中对称密钥的所有签名或加密位都位于每个数据库中名为 sys.crypt_properties 的系统表中,包括 master 数据库中服务主密钥的加密。不存在包含任一非对称密钥类型的私钥的系统表。如果层次结构中的所有密钥都是对称密钥,则 SMK 将加密 DMK,而 DMK 将加密用于加密数据的对称密钥。由于对称密钥的工作方式,这也意味着,如果有人打开数据的对称密钥,那么理论上它可以解密 DMK,并且解密的 DMK 可以由恶意用户保存或用于解密 SMK,因为加密和解密使用相同的密钥。这就是为什么非对称密钥或证书需要成为加密层次结构的集成部分的原因。