Sql-Server

我們如何在知道用於加密的對稱密鑰的情況下解密數據?

  • March 26, 2018

本文解釋瞭如何解密對稱密鑰。例如:

SELECT SK.name, SK.symmetric_key_id, SK.key_length, SK.algorithm_desc,
      KE.crypt_type_desc,
      COALESCE(C.name,AK.name,PSK.name) AS protector_name,
      KE.crypt_property AS encrypted_key,
      COALESCE(DECRYPTBYCERT(C.certificate_id,KE.crypt_property),
               DECRYPTBYASYMKEY(AK.asymmetric_key_id,KE.crypt_property)) AS decrypted_key
 FROM sys.key_encryptions AS KE
 JOIN sys.symmetric_keys AS SK
   ON KE.key_id = SK.symmetric_key_id
 LEFT JOIN sys.certificates AS C
   ON KE.thumbprint = C.thumbprint
 LEFT JOIN sys.asymmetric_keys AS AK
   ON KE.thumbprint = AK.thumbprint
 LEFT JOIN sys.symmetric_keys AS PSK
   ON KE.thumbprint = CAST(PSK.key_guid AS VARBINARY(50));

可以使用以下查詢對其進行測試:

-- 
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'smGK_MasterKeyPassword@';

-- 
CREATE CERTIFICATE [CERT_V001]
WITH SUBJECT = 'User for protecting SM symetric keys.'


--
CREATE SYMMETRIC KEY [SK_SecurityUsers_V001]
WITH ALGORITHM = AES_256 ENCRYPTION
BY CERTIFICATE [CERT_V001]
GO


DECLARE @Email NVARCHAR(128) = 'sometest@google.com';
DECLARE @EmailEncrypted VARBINARY(256);

OPEN SYMMETRIC KEY [SK_SecurityUsers_V001] DECRYPTION
BY CERTIFICATE [CERT_V001];

SELECT @EmailEncrypted = ENCRYPTBYKEY(KEY_GUID('SK_SecurityUsers_V001'),@Email);
SELECT @EmailEncrypted;

CLOSE SYMMETRIC KEY [SK_SecurityUsers_V001];


OPEN SYMMETRIC KEY [SK_SecurityUsers_V001] DECRYPTION
BY CERTIFICATE [CERT_V001];

SELECT CONVERT(NVARCHAR(128), DECRYPTBYKEY(@EmailEncrypted));

CLOSE SYMMETRIC KEY [SK_SecurityUsers_V001];


--DROP SYMMETRIC KEY [SK_SecurityUsers_V001];
--DROP CERTIFICATE [CERT_V001];
--DROP MASTER KEY;

我想知道,這是否意味著數據根本不受保護?

文章中說:

但是,對於受密碼保護和受對稱密鑰保護的密鑰,這很遺憾地不起作用。

我想這意味著我需要使用其中一種加密類型來確保數據受到保護?

我想知道,這是否意味著數據根本不受保護?

不,它受到保護,但如文章所示,您需要訪問所有密鑰才能解密這些值。當涉及到密鑰的保護時,這篇文章採取了很多自由並掩蓋了很多事情。嘗試在不成為系統管理員、不知道 DMK 密碼或使用透明解密層次結構的情況下執行此操作。你還能做嗎?很可能不會。

SQL Server 中的機密資訊通常受到加密級別的保護——一個密鑰加密另一個密鑰,另一個密鑰加密另一個密鑰。如果您可以解開所有這些級別(這篇文章甚至沒有真正談論,只是略作掩飾),那麼您絕對可以解密數據。SQL Server 不使用任何自製加密,它是公開記錄的所有行業標準算法。如果他們擁有所有的鑰匙,就沒有什麼能阻止任何人實施一些事情來扭轉它。這就是為什麼過度配置權限是一件壞事。

數據必須在靜止時加密,我想檢查上述行為是否可以讓有權訪問數據庫但不知道數據庫主密鑰密碼的人能夠加密數據。

在這種情況下,他們通常無法獲得解密的數據。但是,有些邊緣情況不會阻止具有管理訪問權限和良好的加密工作知識的人獲取數據。

這都是關於“合理保護”的,您已經為數據提供了足夠合理的保護。如果您希望它非常安全,那麼您需要使用另一個團隊擁有的 HSM,並且會非常頻繁地對其進行審核。沒有人對伺服器具有管理訪問權限,也沒有人對 SQL Server 具有系統管理員訪問權限。那可能不會成功-因此“合理”的保護就足夠了。

引用自:https://dba.stackexchange.com/questions/202262