1. 公开密钥密码学
2. 非对称加密
1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。
相对于“对称加密算法”这种方法也叫做“非对称加密算法”。与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密 (privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法主要有 RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。使用最广泛的是 RSA 算法,Elgamal 是另一种常用的非对称加密算法。Elgamal 由 Taher Elgamal 于1985年发明,其基础是 DiffieˉHellman 密钥交换算法,后者使通信双方能通过公开通信来推导出只有他们知道的秘密密钥值[DiffieˉHellman]。
DiffieˉHellman 是 Whitfield Diffie 和 Martin Hellman 于1976年发明的,被视为第一种非对称加密算法,DiffieˉHellman 与RSA的不同之处在于,DiffieˉHellman 不是加密算法,它只是生成可用作对称密钥的秘密数值。在DiffieˉHellman密钥交换过程中,发送方和接收方分别生成一个秘密的随机数,并根据随机数推导出公开值,然后,双方再交换公开值。DiffieˉHellman 算法的基础是具备生成共享密钥的能力。只要交换了公开值,双方就能使用自己的私有数和对方的公开值来生成对称密钥,称为共享密钥,对双方来说,该对称密钥是相同的,可以用于使用对称加密算法加密数据。与 RSA 相比,DiffieˉHellman 的优势之一是每次交换密钥时都使用一组新值,而使用 RSA 算法时,如果攻击者获得了私钥,那么他不仅能解密之前截获的消息,还能解密之后的所有消息。然而,RSA 可以通过认证(如使用X.509数字证书)来防止中间人攻击,但 Diff ieˉHellman 在应对中间人攻击时非常脆弱。
公开密钥密码学(英语:Public-key cryptography)也称非对称式密码学(英语:Asymmetric cryptography)是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;公钥用作加密,私钥则用作解密。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文,最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;
不同于加密和解密都使用同一个密钥的对称加密。公钥可以公开,可任意向外发布;私钥不可以公开,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。
基于公开密钥加密的特性,它还能提供数字签名的功能,使电子文件可以得到如同在纸本文件上亲笔签署的效果。
公开密钥基础建设透过信任数字证书认证机构的根证书、及其使用公开密钥加密作数字签名核发的公开密钥认证,形成信任链架构,已在 TLS 实现并在万维网的 HTTP 以 HTTPS、在电子邮件的 SMTP 以 SMTPS 或 STARTTLS 引入。
另一方面,信任网络则采用去中心化的概念,取代了依赖数字证书认证机构的公钥基础设施,因为每一张电子证书在信任链中最终只由一个根证书授权信任,信任网络的公钥则可以累积多个用户的信任。PGP就是其中一个例子。
2.1. 加密
非对称加密往往需要密码学安全伪随机数生成器的协助来产生一对密钥,其中一个可以随便公开,称为公钥;另一个不公开,称为私钥,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供。
如果任何人使用公钥加密明文,得到的密文可以透过不安全的途径(如网络)发送,只有对应的私钥持有者才可以解密得到明文;其他人即使从网络上窃取到密文及加密公钥,也无法(在数以年计的合理时间内)解密得出明文。
典型例子是在网络银行或购物网站上,因为客户需要输入敏感消息,浏览器连接时使用网站服务器提供的公钥加密并上传数据,可保证只有信任的网站服务器才能解密得知消息,不必担心敏感个人信息因为在网络上发送而被窃取。
在现实世界上可作比拟的例子是,一个传统保管箱,开门和关门都是使用同一条钥匙,这是对称加密;而一个公开的邮箱,投递口是任何人都可以寄信进去的,这可视为公钥;而只有信箱主人拥有钥匙可以打开信箱,这就视为私钥。
2.2. 加密过程
在非对称加密中,爱丽丝使用鲍伯的公钥加密明文,得到密文,而只有鲍伯因为持有私钥才可以解密,得到明文。
在数学上,{\displaystyle d(c(x))=x}{\displaystyle d(c(x))=x}
,使用典型的爱丽丝与鲍伯假设来解释:
- 爱丽丝与鲍伯事先互不认识,也没有可靠安全的沟通渠道,但爱丽丝现在却要透过不安全的互联网向鲍伯发送信息
- 爱丽丝撰写好原文,原文在未加密的状态下称之为明文
{\displaystyle x}x
- 鲍伯使用密码学安全伪随机数生成器产生一对密钥,其中一个作为公钥为
{\displaystyle c}c
,另一个作为私钥{\displaystyle d}d
- 鲍伯可以用任何方法发送公钥
{\displaystyle c}c
给爱丽丝,即使伊夫在中间窃听到{\displaystyle c}c
也没问题 - 爱丽丝用公钥
{\displaystyle c}c
把明文{\displaystyle x}x
进行加密,得到密文{\displaystyle c(x)}{\displaystyle c(x)}
- 爱丽丝可以用任何方法传输密文
{\displaystyle c(x)}{\displaystyle c(x)}
给鲍伯,即使伊夫在中间窃听到密文{\displaystyle c(x)}{\displaystyle c(x)}
也没问题 - 鲍伯收到密文,用私钥
{\displaystyle d}d
对密文进行解密{\displaystyle d(c(x))}{\displaystyle d(c(x))}
,得到爱丽丝撰写的明文{\displaystyle x}x
- 由于伊夫没有得到鲍伯的私钥
{\displaystyle d}d
,所以无法得知明文{\displaystyle x}x
- 如果爱丽丝丢失了她自己撰写的原文
{\displaystyle x}x
,在没有得到鲍伯的私钥{\displaystyle d}d
的情况下,她的处境将等同伊夫,即无法透过鲍伯的公钥{\displaystyle c}c
和密文{\displaystyle c(x)}{\displaystyle c(x)}
重新得到原文{\displaystyle x}x
2.3. 数字签名
非对称加密可以用作 数字签名
2.4. 与对称密码学的比较
对称密码是指在加密和解密时使用同一个密钥的方式,公钥密码则是指在加密和解密时使用不同密钥的方式。
对称密钥加密牵涉到密钥管理的问题,尤其是密钥交换,它需要通信双方在通信之前先透过另一个安全的渠道交换共享的密钥,才可以安全地把密文透过不安全的渠道发送;对称密钥一旦被窃,其所作的加密将即时失效;而在互联网,如果通信双方分隔异地而素未谋面,则对称加密事先所需要的“安全渠道”变得不可行;非对称加密则容许加密公钥随便散布,解密的私钥不发往任何用户,只在单方保管;如此,即使公钥在网上被截获,如果没有与其匹配的私钥,也无法解密,极为适合在互联网上使用。
另一方面,公钥解密的特性可以形成数字签名,使数据和文件受到保护并可信赖;如果公钥透过数字证书认证机构签授成为电子证书,更可作为数字身份的认证,这都是对称密钥加密无法实现的。
不过,公钥加密在在计算上相当复杂,性能欠佳、远远不比对称加密;因此,在一般实际情况下,往往通过公钥加密来随机创建临时的对称秘钥,亦即对话键,然后才通过对称加密来传输大量、主体的数据。
2.5. OpenSSL 非对称加密支持
OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。