加密过程的区别
首先我们使用两个简易的加密、解密过程图来说明对称秘钥和非对称秘钥的区别。
对称秘钥加密解密图示过程:
对称秘钥有且只有一个秘钥,加密解密使用相同秘钥,一旦用户获得秘钥,就可以解密任何你使用其加密的数据。
非对称秘钥加密解密的过程:
非对称秘钥加密算法,通常被称为公-私钥加密算法,有两个秘钥。一个可以分发给需要对数据加密的用户,称为公钥。因此如果某人想发送给你一些信息,并且要対信息进行加密,他们仅仅需要知道公钥即可。另外一个秘钥应该被安全管理,其被称为私钥。非对称秘钥算法工作的原理是,如果某用户使用公钥加密数据,那么仅仅只有你的私钥才能解密。只要你安全的保管私钥,即使他们拥有你的公钥,也没有办法进行解密。
从加密功能上来看,两者都能实现数据的加密和解密功能,几乎没有差别。
从安全上来看,非对称秘钥的安全性明显要高于对称秘钥。
当然,相对于对称秘钥,非对称秘钥保密性更优。
对称秘钥和非对称秘钥性能比较
下面我们从性能上来比较两种加密方式的差异。
我们分别使用《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
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
插入相同数量的记录,非对称秘钥加密使用的时间仅仅是对称秘钥使用时间的一半。
SELECT 性能比较
这里我们直接调用《SQL Server 对称密钥在数据加密中的应用》、《SQL Server 非对称秘钥在数据加密中的应用》两文中创建的查询过程,执行结果如下:
可以看到,非对称秘钥解密过程消耗是对称秘钥解密消耗的千倍以上。
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
非对称秘钥更新脚本:
UPDATE TOP(1) EncryptionDataByAsy
SET EncryptionCol=ENCRYPTBYASYMKEY(ASYMKEY_ID('AsyKeyFromFile'),'Jack')
WHERE id>RAND()*1000
更新时,两者加密数据的性能消耗近乎一致。
DELETE性能比较
删除数据时并没有使用到解密函数,所以两者也几乎无差异。