公开金钥加密查看源代码讨论查看历史
公开密钥密码学(Public-key cryptography)也称非对称式密码学(Asymmetric cryptography)是密码学的一种演算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;公钥用作加密,私钥则用作解密。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文,最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密[1] 。公钥可以公开,可任意向外发布;私钥不可以公开,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通讯的另一方。
基于公开密钥加密的特性,它还能提供数位签章的功能,使电子文件可以得到如同在纸本文件上亲笔签署的效果。
公开金钥基础建设透过信任数字证书认证机构的根证书、及其使用公开密钥加密作数位签章核发的公开金钥认证,形成信任链架构,已在TLS实现并在万维网的HTTP以HTTPS、在电子邮件的SMTP以SMTPS或STARTTLS引入。
另一方面,信任网络则采用去中心化的概念,取代了依赖数字证书认证机构的公钥基础设施,因为每一张电子证书在信任链中最终只由一个根证书授权信任,信任网络的公钥则可以累积多个用户的信任。PGP就是其中一个例子。
历史
该思想最早由瑞夫·墨克(Ralph C. Merkle)在1974年提出,之后在1976年。惠特菲尔德·迪菲(Whitfield Diffie)与马丁·赫尔曼(Martin Hellman)两位学者以单向函数与单向暗门函数为基础,为发讯与收讯的两方建立金钥。
常见的公钥加密算法有:RSA、ElGamal、Rabin(RSA的特例)、DSA、ECDSA。使用最广泛的是RSA算法(由发明者Rivest、Shmir和Adleman姓氏首字母缩写而来)是著名的公开秘钥加密算法。
公钥密码学
在密码学中,公开钥匙密码学,简称公钥密码学,又称非对称密码学,是使用一对公钥和私钥的密码学,与只用一个钥匙的密钥密码学相对应。通常,我们所说的公钥密码学包括公钥加密算法和数字签名算法。有些公钥加密算法可以很容易被改造成一个数字签名算法(如RSA),而有些则需要经过较大改动。
概述
加密
非对称加密往往需要密码学安全伪随机数生成器的协助来产生一对密钥,其中一个可以随便公开,称为公钥;另一个不公开,称为私钥,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供。 如果任何人使用公钥加密明文,得到的密文可以透过不安全的途径(如网路)传送,只有对应的私钥持有者才可以解密得到明文;其他人即使从网路上窃取到密文及加密公钥,也无法(在数以年计的合理时间内)解密得出明文。典型例子是在网络银行或购物网站上,因为客户需要输入敏感讯息,浏览器连接时使用网站伺服器提供的公钥加密并上传数据,可保证只有信任的网站伺服器才能解密得知讯息,不必担心敏感个人信息因为在网路上传送而被窃取。
在现实世界上可作比拟的例子是,一个传统保管箱,开门和关门都是使用同一条钥匙,这是对称加密;而一个公开的邮箱,投递口是任何人都可以寄信进去的,这可视为公钥;而只有信箱主人拥有钥匙可以打开信箱,这就视为私钥。
加密过程
在非对称加密中,爱丽丝使用鲍伯的公钥加密明文,得到密文,而只有鲍伯因为持有私钥才可以解密,得到明文。 在数学上,<math>d(c(x))=x</math>,让我们使用典型的爱丽丝与鲍伯假设来解释:
- 爱丽丝与鲍伯事先互不认识,也没有可靠安全的沟通渠道,但爱丽丝现在却要透过不安全的互联网向鲍伯发送信息
- 爱丽丝撰写好原文,原文在未加密的状态下称之为明文 <math>x</math>
- 鲍伯使用密码学安全伪随机数生成器产生一对密钥,其中一个作为公钥为 <math>c</math>,另一个作为私钥 <math>d</math>
- 鲍伯可以用任何方法传送公钥 <math>c</math> 给爱丽丝,即使伊夫在中间窃听到 <math>c</math> 也没问题
- 爱丽丝用公钥 <math>c</math> 把明文 <math>x</math> 进行加密,得到密文 <math>c(x)</math>
- 爱丽丝可以用任何方法传输密文 <math>c(x)</math> 给鲍伯,即使伊夫在中间窃听到密文 <math>c(x)</math> 也没问题
- 鲍伯收到密文,用私钥 <math>d</math> 对密文进行解密 <math>d(c(x))</math>,得到爱丽丝撰写的明文 <math>x</math>
- 由于伊夫没有得到鲍伯的私钥 <math>d</math>,所以无法得知明文 <math>x</math>
- 如果爱丽丝遗失了她自己撰写的原文 <math>x</math>,在没有得到鲍伯的私钥 <math>d</math> 的情况下,她的处境将等同伊夫,即无法透过鲍伯的公钥 <math>c</math> 和密文 <math>c(x)</math>重新得到原文 <math>x</math>
数位签章
相反,如果某一用户使用他的私钥加密明文,任何人都可以用该用户的公钥解密密文;由于私钥只由该用户自己持有,故可以肯定该文件必定出自于该用户;公众可以验证该用户发布的数据或文件是否完整、中途有否曾被篡改,接收者可信赖这些数据、档案确实来自于该用户,这被称作数位签章,大部份国家已经立法承认数位签章拥有等同传统亲笔签名的法律效力。公钥可以透过数字证书认证机构签授的电子证书形式公布,接收者透过信任链形成一套完整的公开金钥基础建设。例如,从网上下载的安装程序,大部分都带有程序制作者的数字签名,可以证明该程序的确是该作者(公司)发布的而不是第三方伪造的且未被篡改过(身份认证/验证)。而现时的网上银行或购物网站都会使用HTTPS,避免沟通过程中的信息泄露。
与对称密码学的比较
对称密码是指在加密和解密时使用同一个密钥的方式,公钥密码则是指在加密和解密时使用不同密钥的方式。
对称密钥加密牵涉到密钥管理的问题,尤其是密钥交换,它需要通讯双方在通讯之前先透过另一个安全的渠道交换共用的密钥,才可以安全地把密文透过不安全的渠道传送;对称密钥一旦被窃,其所作的加密将即时失效;而在互联网,如果通讯双方分隔异地而素未谋面,则对称加密事先所需要的“安全渠道”变得不可行;非对称加密则容许加密公钥随便散布,解密的私钥不发往任何用户,只在单方保管;如此,即使公钥在网上被截获,如果没有与其匹配的私钥,也无法解密,极为适合在互联网上使用。
另一方面,公钥解密的特性可以形成数位签章,使数据和文件受到保护并可信赖;如果公钥透过数位凭证认证机构签授成为电子凭证,更可作为数字身份的认证,这都是对称密钥加密无法实现的。
不过,公钥加密在在计算上相当复杂,效能欠佳、远远不比对称加密;因此,在一般实际情况下,往往通过公钥加密来随机建立临时的对称秘钥,亦即对话键,然后才通过对称加密来传输大量、主体的数据。