第九章(55+25+45+60) 20+40
要点:
非对称密码是一种密码体制,其加密算法和解密算法使用不同的密钥:一个是公钥,一个是私钥。 非对称密码也称为公钥密码。
非对称密码用两个密钥中的一个以及加密算法将明文转换为密文。 用另一个密钥以及解密算法从密文恢复出明文。
非对称密码可以用来保密,认证。
应用最广泛的公钥密码体制是RSA。 攻击RSA的困难性基于寻找大合数的素因子的困难性。
从密码学产生至今,几乎所有的密码体制都是基于代替和置换这些初等方法的。
随着转轮加密/解密的机器出现, 传统密码学有了很大进展。 转轮机和DES是密码学发展的重要标志,但是他们基于代替和置换这些初等方法之上。
公钥密码学和其前的密码学完全不同。首先,公约算法是基于数学函数而不是基于代替和置换,更与只是用一个密钥的对称密码不同,公钥密码是非对称的,它使用两个独立的密钥。 使用两个密钥在消息的保密性、密钥分配和认证领域有着重要意义。
任何加密方法的安全性依赖于密钥的长度和破译密文所需要的计算量。 从抗密码分析的角度看,原则上不能说传统密码优于公钥密码,也不能说公钥密码优于传统密码。
公钥密码学仅限于用在密钥管理和签名这类应用中。
使用公钥密码也需要某种形式的协议与密钥分配中心会话,该歇息通常包含一个中心代理,并且它所包含的处理过程既不比传统密码中的那些过程更简单, 也不比之更有效。
很多公钥密码体制的理论都基于数论。
公钥密码术语:
非对称密钥:两个密钥:公钥和私钥,用来实现互逆运算,即加密和解密,或者生成签名与验证签名。
公钥证书:是一种由签证机构用自己的私钥签名的数字文件。它将使证书拥有者的姓名和其公钥绑定在一起。 证书中所标志的证书拥有者单独控制和使用自己的私钥。
公钥(非对称)密码算法:
含有两个密钥:公钥和私钥。从公钥推出私钥在计算上是不可行的。
公钥基础设施(PKI):
一个由政策、处理、服务平台、软件和工作站组成的集合,用于管理证书和公钥-私钥队,并且负责产生、维护和废除公钥证书。
9.1公钥密码体制的基本原理
公钥密码学的概念是为了解决传统密码中最困难的两个问题而提出的。
第一个为密钥分配问题。用对称密码进行密钥分配要求:1.通信双方已经共享一个密钥, 而该密钥已通过某种方法分配给通信双方。或者2.利用密钥分配中心。
第二个问题为数字签名问题。 确保数字签名是出自某特定的人, 并且各方对此均无异议。
9.1.1
公钥算法依赖于一个加密密钥和一个与之相关的不同的解密密钥。 这些算法都具有下述重要特点:
仅根据密码算法和加密密钥来确定解密密钥在计算上是不可行的。
RSA等算法还具有以下特点:
两个蜜月中的任何一个都可用来加密,另一个用来解密。
公钥密码体制有6个组成部分:
明文:算法的输入。它们是可读信息或数据。
加密算法:家里算法对明文进行各种变换。
公钥和私钥:算法的输入。这对密钥中一个用于加密,另一个用于解密。加密算法执行的变换依赖于公钥或者私钥。
密文:算法的输出。它依赖于明文和密钥,对给定的消息,不同的密钥产生的密文不同。
解密算法:该算法接收密文和相应的密钥,并产生原始的明文。
其主要步骤如下:
1.每一用户产生一对密钥,用来加密和解密消息。
2.每一用户将其中一个密钥存于公开的寄存器或者其他可访问的文件中,该密钥称为公钥,而另一密钥则保持私密。每一用户可以拥有若干其他用户的公钥。
3.若Bob要发消息给Alice,则Bob用Alice的公约对消息加密。
4.Alice收到消息后,用其私钥队消息解密。由于只有Alice知道其自身的私钥,所以其他的接受者均不能解密出消息。
利用这种方法,通信各方均可访问公钥,而私钥是各通信方在本地产生的,所以不必进行分配。只要用户的私钥受到保护,保持秘密性,那么通信就是安全的。在任何时刻,系统可以改变其私钥,并公布相应的公钥以代替原来的公钥。
为了区分对称密码和公钥密码,我们一般讲对称密码中使用的密钥称为秘密钥,将公约秒钟使用的两个密钥分别称为公钥和私钥。 私钥总是保密的。
传统密码和公钥密码
传统密码
一般要求:
1.加密和解密使用相同的密钥和相同的算法,
2.收发双方必须共享密钥
安全性要求
1.密钥必须是保密的
2.若没有其他信息,则解密消息是不可能或至少是不可行的
3.知道算法和若干密文不足以确定密钥
公钥密码
一般要求:
1.同一算法用于加密和解密,但加密和解密使用不同密钥
2.发送方拥有加密或解密密钥,而接收方拥有另一密钥。
安全性要求:
1.两个密钥之一必须是保密的
2.若没有其他信息,则解密消息是不可能或至少不可行的
3.知道算法和其中一个密钥以及若干密文不足以确定另一密钥
认证功能:
A向B发送消息前,先用A的私钥队消息加密,B则用A的公钥对消息解密。优于是用A的私钥队消息加密,所以只有A可加密消息,因此,整个加密后的消息就是数字签名。除此之外,因为只有拥有A的私钥才能产生上述加密后的消息,因此该消息可用于认证源和数据完整性。
上述方法是对整条消息加密,尽管这种方法可以验证发送方和内容的有效性,但却需要大量的存储空间。在实际使用中,每个文件既要以明文形式保存,又要以密文形式保存,以便在发生争执时可以验证消息源及其发送的消息。解决这个问题的更有效的途径是只对一个称为人征服的小数据块加密,它是消息的函数,对该消息的任何修改必然会引起认证符的变化。如果发送方的私钥队认证符加密,那么加密的结果就可作为数字签名,它能验证消息源、消息和通信序列的有效性。
用私钥的加密过程不能保证消息的保密性,它可以防止发送的消息被修改,但不能防止搭线窃听。在基于对部分消息签名的方法中,因为消息的其余部分是以明文形式传输的,所以这种方法显然不能保证保密性。由于任何人都可以用发送方的公钥对消息解密,所以即使用私钥对整条消息加密,也不能保证被发送消息的保密性。
但是,如果两次使用公钥方法,既可提供认证功能,又可暴增被发送消息的保密性。
在这种方法中,发送方首先用其私钥对消息加密,得到数字签名,然后在用接收方的公钥加密,所得到的密文被拥有相应四月的接收方解密,这样可保证消息的保密性,但这种方法在每次通信中要执行四次复杂的公钥算法而不是两次。
9.1.2公钥密码体制的应用
公钥密码体制的特点是使用具有两个密钥的密码算法,其中一个密钥是私有的,另一个是公开的。根据不同的应用,发送方可使用其私钥或者接收方的公钥或同时使用二者来执行密码功能。一般,公钥密码体制的应用可分为三类:
1.加密/解密:发送方用接收方的公钥对消息加密。
2.数字签名:发送方用其私钥对消息签名。签名可通过对整条消息加密或者对消息的一个小的数据块加密来产生,其中该小数据块是整条消息的函数。
3.密钥交换:通信双方交换会话密钥。有几种不同的方法可用于密钥交换,这些方法都使用了通信一方或双方的私钥。
算法 加密/解密 数字签名 密钥交换
RSA 是 是 是
椭圆曲线 是 是 是
Diffie-Hellman 否 否 是
DSS 否 是 否
9.1.3对公钥密码的要求
非对称密码体制建立在基于两个相关密钥的密码算法之上。Diffie和Hellman假定这一体制是存在的但没有证明这种算法的存在性,不过他们给出了这些算法应满足的条件:
1.B产生一对密钥在计算上是容易的
2.已知公钥和要加密的消息M,发送方A产生相应的密文在计算上是容易的。
C=E(PUb,M)
3.接收方B使用其私钥对接受的密文解密以恢复明文在计算上是容易的。
M=D(PRb,C)=D(PRb,E(PUb,M))
3.已知公钥PUb时,攻击者要确定私钥PRb在计算上是不可行的,
4.已知公钥PUb时,攻击者要确定私钥PRb在计算上市不可行的,
5.已知公钥PUb和密文C,攻击者要恢复明文M在计算上是不可行的,
增加一个条件,尽管很有用,但并不是所有的公钥密码应用都必须满足该条件
6.加密和解密函数的顺序可以交换
要满足上述条件即是要找一个单向陷门函数(计算函数值很容易,并且在缺少一些附加信息是计算函数值的逆是不可行的,但是已知这些附加信息时,可以再多项式时间内计算出函数的逆,那么我们称遮掩的函数为单向陷门函数)。
9.1.4公钥密码分析
和对称密码一样,公钥密码也易受穷举攻击,其解决方法也是使用长密钥。公钥体制使用的是某种可逆的数学函数,计算函数值的复杂性可能不是密钥长度的线性函数,而是比线性函数增长更快的函数。为了抗穷举攻击,密钥必须足够长;同时,为了便于实现加密和解密,密钥又必须足够短。在实际中,现已提出的密钥长度确实可以抗穷举攻击,但是它也使加密/解密速度太慢,所以公钥密码目前仅限于密钥管理和签名中。
对公钥密码的另一种攻击方法是,找出一种从给定的公钥计算出私钥的方法,到目前为止还未在数学上证明对一特定的公钥算法这种攻击是不可行的,包括RSA在内的任何算法都是值得怀疑的。
还有一种攻击形式是公钥体制中所特有的,这种攻击的本事就是穷举消息攻击。抗这种攻击的方法是,在要发送的消息后附加上一个随机数。
9.2RSA(Rivest-Shamir-Adleman)算法
RSA体制是一种分组密码,其明文和密文均是0-某n-1之间的整数,通常n的大小为1024位二进制数或309位十进制数,n<2的1024次方。
9.2.1算法描述
RSA算法使用乘方运算,明文以分组为单位进行加密,每个分组的二进制值均小于n,也就是说,分组大小必须小于或等于log2(n)+1位,在实际应用中在,分组的大小是i位,其中2的i次方<n<=2的(i+1)次方。对于明文分组M和密文分组C,加密和解密过程如下:
C=M的e次方 mod n
M=C的d次方 mod n=(M的e次方)的d次方 mod n = M的ed次方mod n
其中收发双方均已知n,发送方已知e,只有接收方已知d,因此公钥加密算法的公钥为PU(e,n),私钥PR=(d,n).搞算法要能用作公钥加密,必须满足下列条件:
1.可以找到e,d,n,使得所有的M<n,有M的ed次方 mod n =M
2.对所有的M<n,计算M的e次方和C的d次方是比较容易的。
3.由e和n确定d是不可行的
RSA密钥产生过程:
1.选择p,q
2.计算n=pq
3.计算欧拉n=(p-1)(q-1)
4.选择整数e gcd(欧拉n,e)=1;1<e<欧拉n
5.计算de=1mod 欧拉n且d<欧拉n
公钥 PU={e,n}
私钥 PR={d,n}
加密:
明文 M<n
密文 C=M的e次方 mod n
解密:
密文 C
明文 M=C的d次方 mod n
9.2.2计算方面的问题
下面我们讨论RSA的计算复杂性的问题:加密/解密和密钥产生
模算术里的求幂运算
[(a mod n)*(b mod n)]mod n = (a*b) mod n
为了加快RSA算法在使用公钥时的运算速度,通常后悔选择一个特定的e,e位65537或3,17.
9.2.3 RSA的安全性
对RSA算法的攻击可能有如下四种方式:
穷举攻击:这种方法试图穷举所有可能的私钥
数学攻击:有多种数学攻击方法,它们的实质都是试图分解两个素数的乘积。
计时攻击:这类方法依赖于解密算法的运行时间。
选择密文攻击:这种攻击利用了RSA算法的性质。
数学攻击:
1.分解n为两个素因子
2.直接确定欧拉n而不先确定p,q
3.直接确定d,而不先确定欧拉n
计时攻击:
攻击者可以通过记录计算机解密消息所用的时间来确定私钥。
选择密文攻击和最佳非对称加密填充
要点:
非对称密码是一种密码体制,其加密算法和解密算法使用不同的密钥:一个是公钥,一个是私钥。 非对称密码也称为公钥密码。
非对称密码用两个密钥中的一个以及加密算法将明文转换为密文。 用另一个密钥以及解密算法从密文恢复出明文。
非对称密码可以用来保密,认证。
应用最广泛的公钥密码体制是RSA。 攻击RSA的困难性基于寻找大合数的素因子的困难性。
从密码学产生至今,几乎所有的密码体制都是基于代替和置换这些初等方法的。
随着转轮加密/解密的机器出现, 传统密码学有了很大进展。 转轮机和DES是密码学发展的重要标志,但是他们基于代替和置换这些初等方法之上。
公钥密码学和其前的密码学完全不同。首先,公约算法是基于数学函数而不是基于代替和置换,更与只是用一个密钥的对称密码不同,公钥密码是非对称的,它使用两个独立的密钥。 使用两个密钥在消息的保密性、密钥分配和认证领域有着重要意义。
任何加密方法的安全性依赖于密钥的长度和破译密文所需要的计算量。 从抗密码分析的角度看,原则上不能说传统密码优于公钥密码,也不能说公钥密码优于传统密码。
公钥密码学仅限于用在密钥管理和签名这类应用中。
使用公钥密码也需要某种形式的协议与密钥分配中心会话,该歇息通常包含一个中心代理,并且它所包含的处理过程既不比传统密码中的那些过程更简单, 也不比之更有效。
很多公钥密码体制的理论都基于数论。
公钥密码术语:
非对称密钥:两个密钥:公钥和私钥,用来实现互逆运算,即加密和解密,或者生成签名与验证签名。
公钥证书:是一种由签证机构用自己的私钥签名的数字文件。它将使证书拥有者的姓名和其公钥绑定在一起。 证书中所标志的证书拥有者单独控制和使用自己的私钥。
公钥(非对称)密码算法:
含有两个密钥:公钥和私钥。从公钥推出私钥在计算上是不可行的。
公钥基础设施(PKI):
一个由政策、处理、服务平台、软件和工作站组成的集合,用于管理证书和公钥-私钥队,并且负责产生、维护和废除公钥证书。
9.1公钥密码体制的基本原理
公钥密码学的概念是为了解决传统密码中最困难的两个问题而提出的。
第一个为密钥分配问题。用对称密码进行密钥分配要求:1.通信双方已经共享一个密钥, 而该密钥已通过某种方法分配给通信双方。或者2.利用密钥分配中心。
第二个问题为数字签名问题。 确保数字签名是出自某特定的人, 并且各方对此均无异议。
9.1.1
公钥算法依赖于一个加密密钥和一个与之相关的不同的解密密钥。 这些算法都具有下述重要特点:
仅根据密码算法和加密密钥来确定解密密钥在计算上是不可行的。
RSA等算法还具有以下特点:
两个蜜月中的任何一个都可用来加密,另一个用来解密。
公钥密码体制有6个组成部分:
明文:算法的输入。它们是可读信息或数据。
加密算法:家里算法对明文进行各种变换。
公钥和私钥:算法的输入。这对密钥中一个用于加密,另一个用于解密。加密算法执行的变换依赖于公钥或者私钥。
密文:算法的输出。它依赖于明文和密钥,对给定的消息,不同的密钥产生的密文不同。
解密算法:该算法接收密文和相应的密钥,并产生原始的明文。
其主要步骤如下:
1.每一用户产生一对密钥,用来加密和解密消息。
2.每一用户将其中一个密钥存于公开的寄存器或者其他可访问的文件中,该密钥称为公钥,而另一密钥则保持私密。每一用户可以拥有若干其他用户的公钥。
3.若Bob要发消息给Alice,则Bob用Alice的公约对消息加密。
4.Alice收到消息后,用其私钥队消息解密。由于只有Alice知道其自身的私钥,所以其他的接受者均不能解密出消息。
利用这种方法,通信各方均可访问公钥,而私钥是各通信方在本地产生的,所以不必进行分配。只要用户的私钥受到保护,保持秘密性,那么通信就是安全的。在任何时刻,系统可以改变其私钥,并公布相应的公钥以代替原来的公钥。
为了区分对称密码和公钥密码,我们一般讲对称密码中使用的密钥称为秘密钥,将公约秒钟使用的两个密钥分别称为公钥和私钥。 私钥总是保密的。
传统密码和公钥密码
传统密码
一般要求:
1.加密和解密使用相同的密钥和相同的算法,
2.收发双方必须共享密钥
安全性要求
1.密钥必须是保密的
2.若没有其他信息,则解密消息是不可能或至少是不可行的
3.知道算法和若干密文不足以确定密钥
公钥密码
一般要求:
1.同一算法用于加密和解密,但加密和解密使用不同密钥
2.发送方拥有加密或解密密钥,而接收方拥有另一密钥。
安全性要求:
1.两个密钥之一必须是保密的
2.若没有其他信息,则解密消息是不可能或至少不可行的
3.知道算法和其中一个密钥以及若干密文不足以确定另一密钥
认证功能:
A向B发送消息前,先用A的私钥队消息加密,B则用A的公钥对消息解密。优于是用A的私钥队消息加密,所以只有A可加密消息,因此,整个加密后的消息就是数字签名。除此之外,因为只有拥有A的私钥才能产生上述加密后的消息,因此该消息可用于认证源和数据完整性。
上述方法是对整条消息加密,尽管这种方法可以验证发送方和内容的有效性,但却需要大量的存储空间。在实际使用中,每个文件既要以明文形式保存,又要以密文形式保存,以便在发生争执时可以验证消息源及其发送的消息。解决这个问题的更有效的途径是只对一个称为人征服的小数据块加密,它是消息的函数,对该消息的任何修改必然会引起认证符的变化。如果发送方的私钥队认证符加密,那么加密的结果就可作为数字签名,它能验证消息源、消息和通信序列的有效性。
用私钥的加密过程不能保证消息的保密性,它可以防止发送的消息被修改,但不能防止搭线窃听。在基于对部分消息签名的方法中,因为消息的其余部分是以明文形式传输的,所以这种方法显然不能保证保密性。由于任何人都可以用发送方的公钥对消息解密,所以即使用私钥对整条消息加密,也不能保证被发送消息的保密性。
但是,如果两次使用公钥方法,既可提供认证功能,又可暴增被发送消息的保密性。
在这种方法中,发送方首先用其私钥对消息加密,得到数字签名,然后在用接收方的公钥加密,所得到的密文被拥有相应四月的接收方解密,这样可保证消息的保密性,但这种方法在每次通信中要执行四次复杂的公钥算法而不是两次。
9.1.2公钥密码体制的应用
公钥密码体制的特点是使用具有两个密钥的密码算法,其中一个密钥是私有的,另一个是公开的。根据不同的应用,发送方可使用其私钥或者接收方的公钥或同时使用二者来执行密码功能。一般,公钥密码体制的应用可分为三类:
1.加密/解密:发送方用接收方的公钥对消息加密。
2.数字签名:发送方用其私钥对消息签名。签名可通过对整条消息加密或者对消息的一个小的数据块加密来产生,其中该小数据块是整条消息的函数。
3.密钥交换:通信双方交换会话密钥。有几种不同的方法可用于密钥交换,这些方法都使用了通信一方或双方的私钥。
算法 加密/解密 数字签名 密钥交换
RSA 是 是 是
椭圆曲线 是 是 是
Diffie-Hellman 否 否 是
DSS 否 是 否
9.1.3对公钥密码的要求
非对称密码体制建立在基于两个相关密钥的密码算法之上。Diffie和Hellman假定这一体制是存在的但没有证明这种算法的存在性,不过他们给出了这些算法应满足的条件:
1.B产生一对密钥在计算上是容易的
2.已知公钥和要加密的消息M,发送方A产生相应的密文在计算上是容易的。
C=E(PUb,M)
3.接收方B使用其私钥对接受的密文解密以恢复明文在计算上是容易的。
M=D(PRb,C)=D(PRb,E(PUb,M))
3.已知公钥PUb时,攻击者要确定私钥PRb在计算上是不可行的,
4.已知公钥PUb时,攻击者要确定私钥PRb在计算上市不可行的,
5.已知公钥PUb和密文C,攻击者要恢复明文M在计算上是不可行的,
增加一个条件,尽管很有用,但并不是所有的公钥密码应用都必须满足该条件
6.加密和解密函数的顺序可以交换
要满足上述条件即是要找一个单向陷门函数(计算函数值很容易,并且在缺少一些附加信息是计算函数值的逆是不可行的,但是已知这些附加信息时,可以再多项式时间内计算出函数的逆,那么我们称遮掩的函数为单向陷门函数)。
9.1.4公钥密码分析
和对称密码一样,公钥密码也易受穷举攻击,其解决方法也是使用长密钥。公钥体制使用的是某种可逆的数学函数,计算函数值的复杂性可能不是密钥长度的线性函数,而是比线性函数增长更快的函数。为了抗穷举攻击,密钥必须足够长;同时,为了便于实现加密和解密,密钥又必须足够短。在实际中,现已提出的密钥长度确实可以抗穷举攻击,但是它也使加密/解密速度太慢,所以公钥密码目前仅限于密钥管理和签名中。
对公钥密码的另一种攻击方法是,找出一种从给定的公钥计算出私钥的方法,到目前为止还未在数学上证明对一特定的公钥算法这种攻击是不可行的,包括RSA在内的任何算法都是值得怀疑的。
还有一种攻击形式是公钥体制中所特有的,这种攻击的本事就是穷举消息攻击。抗这种攻击的方法是,在要发送的消息后附加上一个随机数。
9.2RSA(Rivest-Shamir-Adleman)算法
RSA体制是一种分组密码,其明文和密文均是0-某n-1之间的整数,通常n的大小为1024位二进制数或309位十进制数,n<2的1024次方。
9.2.1算法描述
RSA算法使用乘方运算,明文以分组为单位进行加密,每个分组的二进制值均小于n,也就是说,分组大小必须小于或等于log2(n)+1位,在实际应用中在,分组的大小是i位,其中2的i次方<n<=2的(i+1)次方。对于明文分组M和密文分组C,加密和解密过程如下:
C=M的e次方 mod n
M=C的d次方 mod n=(M的e次方)的d次方 mod n = M的ed次方mod n
其中收发双方均已知n,发送方已知e,只有接收方已知d,因此公钥加密算法的公钥为PU(e,n),私钥PR=(d,n).搞算法要能用作公钥加密,必须满足下列条件:
1.可以找到e,d,n,使得所有的M<n,有M的ed次方 mod n =M
2.对所有的M<n,计算M的e次方和C的d次方是比较容易的。
3.由e和n确定d是不可行的
RSA密钥产生过程:
1.选择p,q
2.计算n=pq
3.计算欧拉n=(p-1)(q-1)
4.选择整数e gcd(欧拉n,e)=1;1<e<欧拉n
5.计算de=1mod 欧拉n且d<欧拉n
公钥 PU={e,n}
私钥 PR={d,n}
加密:
明文 M<n
密文 C=M的e次方 mod n
解密:
密文 C
明文 M=C的d次方 mod n
9.2.2计算方面的问题
下面我们讨论RSA的计算复杂性的问题:加密/解密和密钥产生
模算术里的求幂运算
[(a mod n)*(b mod n)]mod n = (a*b) mod n
为了加快RSA算法在使用公钥时的运算速度,通常后悔选择一个特定的e,e位65537或3,17.
9.2.3 RSA的安全性
对RSA算法的攻击可能有如下四种方式:
穷举攻击:这种方法试图穷举所有可能的私钥
数学攻击:有多种数学攻击方法,它们的实质都是试图分解两个素数的乘积。
计时攻击:这类方法依赖于解密算法的运行时间。
选择密文攻击:这种攻击利用了RSA算法的性质。
数学攻击:
1.分解n为两个素因子
2.直接确定欧拉n而不先确定p,q
3.直接确定d,而不先确定欧拉n
计时攻击:
攻击者可以通过记录计算机解密消息所用的时间来确定私钥。
选择密文攻击和最佳非对称加密填充