大数据安全与隐私保护
上QQ阅读APP看书,第一时间看更新

1.6 基本密码学工具

密码学可有效地保障信息的机密性、完整性、认证性和不可否认性,是大数据安全和隐私保护的基础工具。本节重点介绍密码学的一些基本概念。

1.6.1 加密技术

传统加密技术的主要目标是保护数据的机密性。一个加密算法被定义为一对数据变换。其中一个变换应用于数据起源项,称为明文,所产生的相应数据项称为密文。而另一个变换应用于密文,恢复出明文。这两个变换分别称为加密变换和解密变换。习惯上,也使用加密和解密这两个术语。加密和解密的操作通常都是在一组密钥控制下进行的,分别称为加密密钥和解密密钥。主要有两大类加密技术:一类是对称加密,另一类是公钥加密。对称加密的特征是加密密钥和解密密钥一样或相互容易推出;公钥加密(也称非对称加密)的特征是加密密钥和解密密钥不同,从一个难以推出另一个。

1. 对称加密技术

对称加密分为两种:一种是将明文消息按字符逐位地加密,称为序列密码(也称流密码);另一种是将明文消息分组(每组含有多个字符),逐组地进行加密,称为分组密码,例如分组密码AES和SM4以及序列密码ZUC。AES是美国国家标准技术研究所(NIST)公布的一个分组密码[36],其分组长度为128b,密钥可为128b、192b或256b。SM4是中国公布的一个商用分组密码标准[37],其分组长度和密钥长度均为128b。ZUC(祖冲之序列密码算法)是一个序列密码,已成为国际3GPP标准,也是中国的国家标准[38]。ZUC算法逻辑上分为上中下3层,上层是16级线性反馈移位寄存器(LFSR),中层是比特重组(BR),下层是非线性函数F。

2. 公钥加密技术

公钥密码是由Diffie和Hellman于1976年首次提出的。与对称密码不同,公钥密码采用两个不同的密钥将加密功能和解密功能分开。一个密钥称作私钥,像在对称密码中一样,该密钥被秘密保存。另一个密钥称作公钥,不需要保密。公钥密码必须具有如下重要特性:给定公钥,要确定出私钥是计算上不可行的。

公钥密码的设计比对称密码的设计具有更大的挑战性,因为公钥为攻击算法提供了一定的信息。目前使用的公钥密码的安全性基础主要是数学中的困难问题。最流行的有两大类:一类是基于大整数因子分解问题的,如RSA公钥加密;另一类是基于离散对数问题的,如椭圆曲线公钥加密、SM2公钥加密等。1977年由Rivest、Shamir和Adleman提出了第一个比较完善的公钥密码,这就是著名的RSA算法[39]。RSA也是迄今应用最广泛的公钥密码,其安全性基于大整数因子分解困难问题:已知大整数N,求素因子pqN=pq)是计算困难的。1985年,Koblitz和Miller分别独立地提出了椭圆曲线密码[40][41](Elliptic Curve Cryptography,ECC)。椭圆曲线密码的安全性基于椭圆曲线群上计算离散对数困难问题。椭圆曲线密码能用更短的密钥来获得更高的安全性,而且加密速度比RSA快,因此,在许多资源受限的环境中得到了广泛的应用。SM2椭圆曲线公钥密码算法是中国的一个公钥密码标准[42],包括公钥加密算法、数字签名算法、密钥交换协议。

1.6.2 数字签名技术

数字签名是一种以电子形式存储的消息签名。数字签名算法由一个签名者对数据产生数字签名,并由一个验证者验证签名的可靠性。每个签名者有一个公钥和一个私钥,其中私钥用于产生数字签名,验证者用签名者的公钥验证签名。一个数字签名方案应具备如下基本特点:

(1)不可伪造性。在不知道签名者私钥的情况下,任何其他人都不能伪造签名。

(2)不可否认性。签名者无法否认自己对消息的签名。

(3)保证消息的完整性。任何对消息的更改都将导致签名无法通过验证。

公钥密码可提供功能强大的数字签名方案,而无须接收者秘密保存验证密钥。目前诸多数字签名方案主要基于公钥密码。除了RSA数字签名方案外,目前还有很多不同功能、不同类型的数字签名方案。ISO数字签名标准ECDSA和中国的商用密码标准SM2椭圆曲线数字签名就是两个重要的数字签名标准。ECDSA数字签名[43]是使用椭圆曲线对数字签名算法DSA的模拟。ECDSA于1998年成为ISO标准,于1999年成为ANSI标准,于2000年成为IEEE和FIPS标准。ECDSA是ElGamal公钥密码的一种变形,其安全性依赖于椭圆曲线群上计算离散对数困难问题。SM2数字签名[42]与ECDSA数字签名一样,其安全性也依赖于椭圆曲线群上计算离散对数困难问题。

1.6.3 Hash和MAC技术

Hash函数(也称杂凑函数或哈希函数)可将任意长的消息压缩为固定长度的Hash值。Hash函数需具有如下性质:

(1)单向性。对一个给定的Hash函数值,构造一个输入消息将其映射为该函数值是计算上不可行的。

(2)抗碰撞性。构造两个不同的消息将它们映射为同一个Hash函数值是计算上不可行的。

Hash函数可用于构造分组密码、序列密码和消息认证码,也是数字签名的重要组件,可破坏输入的代数结构,进行消息源认证;也可用于构造伪随机数生成器,进行密钥派生等。典型的Hash函数有SHA-256算法[44],SM3算法[45]和SHA-3算法[46]

与Hash函数技术相关的是消息认证码(Message Authentication Code,MAC)技术。MAC算法也是基于一个大尺寸数据生成一个小尺寸数据,在性能上也需要避免碰撞,但MAC算法有密钥参与,计算结果类似于一个加密的Hash函数值,攻击者难以在篡改内容后伪造它。因此,MAC值可单独使用,而Hash函数值一般配合数字签名使用。MAC算法主要基于分组密码或普通Hash算法改造,HMAC是最常用的MAC算法,它通过Hash函数来实现消息认证。HMAC可以和任何迭代Hash函数(如MD5、SHA-1)结合使用而无须更改这些Hash函数。

1.6.4 密钥交换技术

通信双方在公开的网络环境中传送数据,一般要确保数据的机密性和可认证性。要达到此目的,必须对传送的数据进行加密和认证,这就需要使用会话密钥。密钥交换协议就是两个或多个参与方在公开的网络环境中建立秘密的会话密钥的过程,会话密钥是协议参与方产生的输入的函数。例如MQV密钥交换协议和SM2密钥交换协议就是两个典型的两方密钥交换协议。MQV协议由Menezes等人于1995年最先提出[47]。这一协议被世界上许多权威标准机构(例如ANSI、IEEE、NIST等)采纳为密码标准。美国国家安全局(NSA)也将MQV协议纳入“下一代密码技术”标准体系中,用以保护密级达到国家级机密的重要、敏感数据。SM2密钥交换协议[42]是中国公布的一个商用密码标准,可满足通信双方经过两次或可选三次信息传递过程,通过计算获取一个由双方共同决定的会话密钥。