数据加密 第二篇:加密算法和加密机制

加密是指通过使用密钥或密码对数据进行模糊处理的过程,加密解密最简单的过程如下图所示:

 

对称加密是加密和解密使用同一个密钥的加密算法,在图中就是加密密钥和解密密钥是相同的。对称加密通常来说会比较羸弱,因为使用数据时不仅仅需要传输数据本身,还是要通过某种方式传输密钥,这很有可能使得密钥在传输的过程中被窃取。

非对称加密是加密和解密使用不同密钥的加密算法,在图中就是加密密钥和解密密钥是不同的。用于加密的密钥称之为公钥,用于解密的密钥称之为私钥。因此安全性相比对称加密来说会大大提高。当然有一长必有一短,非对称加密的方式通常算法会相比对称密钥来说复杂许多,因此会带来性能上的损失。

因此,一种折中的办法是使用对称密钥来加密数据,而使用非对称密钥来加密对称密钥。这样既可以利用对称密钥的高性能,还可以利用非对称密钥的可靠性。

没有一个加密算法能够适用所有的情况,在选择加密机制时,可以借鉴一些成功的经验:

  • 强的加密通常意味着消耗更多的CPU资源;
  • 长的密钥比短密钥的加密效果更好;
  • 长密码比短密码的加密效果更好
  • 非对称加密比对称加密更慢,但是加密效果更好;
  • 如果要加密大量的数据,推荐使用对称密钥来加密数据,然后使用非对称密钥加密该非对称密钥。
  • 密文不能被压缩,但是,压缩后的数据可以被加密,推荐在压缩数据后再对数据进行加密。

加密算法

加密算法用于把数据转换成密文,从SQL Server 2016 (13.x)开始,除了AES_128, AES_192 和 AES_256 之外,其他加密算法都已经过时了。

关于DES算法的说明:

  • 使用ALGORITHM = TRIPLE_DES_3KEY 创建的对称密钥,是指192bit的TRIPLE DES
  • 使用ALGORITHM = TRIPLE_DES 创建的对称密钥,是指128bit的TRIPLE DES

加密机制

SQL Server提供的加密方式主要是值级加密(Cell Level)和文件级别加密(TDE)。SQL Server提供的加密机制主要有:

  • 加密函数:使用短语作为密码对数据进行加密
  • 非对称密钥(Asymmetric keys)和对称密钥(Symmetric keys)
  • 凭证(Certificates)
  • 透明数据加密(Transparent Data Encryption,简称TDE),对整个数据库文件进行加密

使用短语加密数据

对于单个值,可以使用TSQL函数EncryptByPassPhrase()进行加密,使用DecryptByPassPhrase()进行解密。传递一个短语作为密码,使用128bit键长的TRIPLE DES 算法进行加密。

EncryptByPassPhrase ( 'passphrase', 'cleartext' [ , add_authenticator , authenticator ] )
DecryptByPassPhrase ( 'passphrase', 'ciphertext' [ , add_authenticator ,authenticator  ] ) 

参数注释:

  • passphrase:字符串,用于生成对称键
  • cleartext:需要加密的字符串,数据类型可以是:nvarchar, char, varchar, binary, varbinary, 或 nchar,不能超过8000Bytes。
  • ciphertext:密文,是加密之后的数据,数据类型是varbinary。
  • add_authenticator:布尔值,是否把authenticatory和cleartext以及加密。如果是1,authenticator参数必须有值。默认值是0,可以省略参数add_authenticator和authenticator。
  • authenticator:sysname类型,用于指示身份验证者

返回值:这两个函数的返回值都是varbinary,最大长度是8000Bytes。

举个例子,使用这两个函数对数据进行加密和解密:

declare @cipher varbinary(8000)
select @cipher=Encryptbypassphrase(N'悦光阴','A good man')
select @cipher as EncryptedText,cast(Decryptbypassphrase(N'悦光阴',@cipher) as varchar(128)) as DecryptedText

 

参考文档:

细说SQL Server中的加密

posted @ 2020-05-20 09:29  悦光阴  阅读(129)  评论(0编辑  收藏