加密过程的区别

 

首先我们使用两个简易的加密、解密过程图来说明对称秘钥和非对称秘钥的区别。

对称秘钥加密解密图示过程:

sql server2012企业版钥匙 sqlserver2012标准版密钥_非对称秘钥

对称秘钥有且只有一个秘钥,加密解密使用相同秘钥,一旦用户获得秘钥,就可以解密任何你使用其加密的数据。

非对称秘钥加密解密的过程:

sql server2012企业版钥匙 sqlserver2012标准版密钥_非对称秘钥_02

非对称秘钥加密算法,通常被称为公-私钥加密算法,有两个秘钥。一个可以分发给需要对数据加密的用户,称为公钥。因此如果某人想发送给你一些信息,并且要対信息进行加密,他们仅仅需要知道公钥即可。另外一个秘钥应该被安全管理,其被称为私钥。非对称秘钥算法工作的原理是,如果某用户使用公钥加密数据,那么仅仅只有你的私钥才能解密。只要你安全的保管私钥,即使他们拥有你的公钥,也没有办法进行解密。

从加密功能上来看,两者都能实现数据的加密和解密功能,几乎没有差别。

从安全上来看,非对称秘钥的安全性明显要高于对称秘钥。

当然,相对于对称秘钥,非对称秘钥保密性更优。

对称秘钥和非对称秘钥性能比较

下面我们从性能上来比较两种加密方式的差异。

我们分别使用《SQL Server 对称密钥在数据加密中的应用》《SQL Server 非对称秘钥在数据加密中的应用》两文中使用的数据库、表及过程进行测试。分别对INSERT、SELECT、UPDATE、DELETE过程的性能进行测试比较,结果为:

  • 加密过程,包括INSERT、UPDATE,非对称秘钥优于对称秘钥
  • 解密过程SELECT,非对称秘钥是对称秘钥性能开销的千、万倍,尤其是大批量的解密过程。
  • DELETE 两者无显著差异

由此可见,对于永不需要解密的数据或极少需要解密的数据,非对称秘钥加密要优于对称秘钥,无论是数据安全上,还是性能上。而对于需要频繁解密的数据,建议使用对称秘钥进行加密、解密。

 

INSERT性能比较

DECLARE @i INT =1
DECLARE @id INT=0,@Ecol VARCHAR(100)
WHILE @i<1000
BEGIN
      SELECT TOP(1) @id=[object_id],@Ecol=name
      FROM sys.all_objects
      WHERE [object_id]>@id
      ORDER BY [object_id]
      EXEC InsertEncryptData @id,@Ecol
      SET @i=@i+1
END

sql server2012企业版钥匙 sqlserver2012标准版密钥_加密解密_03

DECLARE @i INT =1
DECLARE @id INT=0,@Ecol VARCHAR(100)
WHILE @i<1000
BEGIN
      SELECT TOP(1) @id=[object_id],@Ecol=name
      FROM sys.all_objects
      WHERE [object_id]>@id
      ORDER BY [object_id]
      EXEC InsertEncryptDataByAsy @id,@Ecol
      SET @i=@i+1
END

sql server2012企业版钥匙 sqlserver2012标准版密钥_性能比较_04

插入相同数量的记录,非对称秘钥加密使用的时间仅仅是对称秘钥使用时间的一半。

 

SELECT 性能比较

这里我们直接调用《SQL Server 对称密钥在数据加密中的应用》《SQL Server 非对称秘钥在数据加密中的应用》两文中创建的查询过程,执行结果如下:

sql server2012企业版钥匙 sqlserver2012标准版密钥_对称秘钥_05

sql server2012企业版钥匙 sqlserver2012标准版密钥_sql server2012企业版钥匙_06

可以看到,非对称秘钥解密过程消耗是对称秘钥解密消耗的千倍以上。

 

UPDATE性能对比

对称秘钥更新脚本:

OPEN SYMMETRIC KEY SYKey_Data
DECRYPTION BY CERTIFICATE CertData
WITH PASSWORD='!<Ilc/cby=`Qpae'
UPDATE TOP(1)  EncryptionData SET EncryptionCol= ENCRYPTBYKEY(KEY_GUID('SYKey_Data'),'Jack')
WHERE id=RAND()*1000
--关闭对称密钥
CLOSE SYMMETRIC KEY SyKey_Data

sql server2012企业版钥匙 sqlserver2012标准版密钥_性能比较_07

 

非对称秘钥更新脚本:

UPDATE TOP(1) EncryptionDataByAsy
SET EncryptionCol=ENCRYPTBYASYMKEY(ASYMKEY_ID('AsyKeyFromFile'),'Jack')
WHERE id>RAND()*1000

sql server2012企业版钥匙 sqlserver2012标准版密钥_非对称秘钥_08

更新时,两者加密数据的性能消耗近乎一致。

DELETE性能比较

sql server2012企业版钥匙 sqlserver2012标准版密钥_加密解密_09

sql server2012企业版钥匙 sqlserver2012标准版密钥_性能比较_10

删除数据时并没有使用到解密函数,所以两者也几乎无差异。