skip to content

Search

Notes RSS feed

非对称加密

在大二下的 互联网应用技术开发 这门课上,老师在讲 HTTP 协议时,一起介绍了非对称加密的技术。我之前有在一些论坛上看到过私钥和公钥之类的东西,但是并不了解它们的使用和背后的原理,这次正好听了之后感觉挺有意思的。

维基百科上是这样介绍非对称加密的(没啥,不如直接看后面的例子):

公开密钥密码学(英语:Public-key cryptography)也称非对称式密码学(英语:Asymmetric cryptography)是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;公钥用作加密,私钥则用作解密。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文,最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。公钥可以公开,可任意向外发布;私钥不可以公开,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。

非对称加密(Asymmetric Encryption) 有两个核心概念:

  1. 公钥(Public Key): 发到网上给别人用的;
  2. 私钥(Private Key): 不公开自己保存的。
  • 公私钥常用的算法有 RSAECCEdDSA(如Ed25519)DSA 等,通常还会和 SHA-256 等结合使用。

非对称加密最大的特点就是加密的私钥(公钥)不能用来解密,只能用它对应的公钥(私钥)来解密,一对公钥和私钥配套使用。老师上课还开玩笑地说,一个密钥理论上还是能得到对应的另一个密钥的,但是要全世界的计算机算个十万百万年的。

当 A 试图向 B 传递某条信息时,B 把自己的公钥发给 A,A 用这个公钥加密信息后把密文发给 B,B 拿到密文后用自己的私钥解密便获得了信息的内容。其他人只能看到 B 公开的公钥和 A 发送的密文,而公钥加密的密文不能由公钥解出,因此其他人是没有办法获得信息的内容的。除此之外,非对称加密还能用于数字签名。例如,A 用自己的私钥对文件生成签名,并把文件和对应的公钥发布在网上,其他人就可以用公钥验证签名,确认文件的来源和完整性等。

经常用 GitHub 的人肯定会配置 SSH keys,不得不说这个方法确实方便,毕竟 GitHub 现在不支持在命令行登录了,HTTPS 证书有时候又会报错。以及最近还用了 SSH 连接实验室的服务器。在 Linux 和 macOS 上,SSH 相关信息应该都在~/.ssh/目录下,进入就可以看到密钥对(我当前用的是 Ed25519 生成的密钥,包括一个私钥id_ed25519和公钥id_ed25519.pub)、known_hostsconfig等等。