分类 "技术"

非对称加密的两个 KEY

非对称加密也称“公钥加密” 来源自公钥密码学。与对称加密不同的是,公钥加密有一对 key,一个负责加密另一个负责解密,而以往的对称加密只有一个 key,通信双方只要都知道这个共享 key 就能完成数据的加密与解密。

非对称加密中的两个 key,一个对外公开称为公钥(Public Key)另一个自己秘密保管即为私钥(Private Key ),正如一开始提到的,如果用公钥加密,就要用对应的私钥进行解密,反之用私钥加密就要用对应的公钥进行解密。但是,非对称加密的两个 key 起初并没有规定哪个是公钥哪个是私钥,这完全取决于如何使用它们,公开的 key 就是公钥,自己私密保管仅此一份的 key 就是私钥。

如何深入理解这两个 key 我们通过非对称加密的两个典型应用场景来说明。

单向加密通信

我要发给你一条秘密的消息,这条消息只能被你看到,在这次通信中因为双方使用的是公开信道,如果数据是明文传输,信道上可能会有窃听者,那么消息可能会泄露,所以有必要对数据进行加密传输,不仅如此我们还要让这些数据不能被随便篡改,这样才能是一个完整的安全通信,那么 key 的排列组合可能会有以下四种:

  1. 我用 我的公钥 加密数据,你用 我的私钥 进行解密,但私钥只有我自己知道,你无法解密,除非告诉你我的私钥,如此做我的私钥将变得不再隐私,存在潜在被泄露的风险,既不安全也不合理。
  2. 我用 我的私钥 加密数据,你用 我的公钥 进行解密,由于我的公钥可能很多人都知道甚至是完全公开的,因此任何人都可以进行解密,和明文传输无差别,不具备保密通信的意义。
  3. 我用 你的私钥 加密数据,这不太可能,因为你的私钥我并不知道。如果你把私钥偷偷的告诉我,隐患请看第 1 条。
  4. 我用 你的公钥 加密数据,即使数据在传输过程中被窃听者拿到,但是他没有你的私钥无法进行解密和篡改,数据安全到达你的手里,你用你自己私钥进行解密,符合了安全通信的预期。

以上第 4 条得知,如果我要给对方写加密信件,我应该用对方的公钥进行加密。

签名和防伪

签名是非对称加密特有的能力,传统对称加密是无法实现的。在一些场合比如我给一个数据产品加上签名,使用他的人可以验证这个数据产品是否出自我之手,或者说证明这个东西就是我的。用官方的话来说可以验证是否是正版,这在防伪领域也有广泛应用。

我们可以给一段授权信息或者消息签名后,形成密文,但它并不具备加密的特性,因为任何人都应该能解开它,这个过程即为验证。如同加密原理,用其中一个 key 加密,另一个 key 能解开并且得到的明文与期望的一样,即视为验证通过。

假设我要给你发一个信息并签了名,那么 key 的排列组合可能会有以下四种:

  1. 我用 你的公钥 进行签名,你用 你的私钥 进行校验,问题是你的公钥是公开的,任何人都可以伪造签名,所以不具备签名和防伪的目的。
  2. 我用 你的私钥 进行签名,你用 你的公钥 进行校验,但是我并不知道你的私钥,不可取。
  3. 我用 我的公钥 进行签名,你用 我的私钥 进行校验,问题是我的公钥是公开的,任何人都可以伪造签名,而且我的私钥你并不知道,你无法进行校验,所以也不可取。
  4. 我用 我的私钥 进行签名,你用 我的公钥 进行校验,我的公钥是公开给所有人的,我签名的正版信息,任何人都可以进行校验真伪,符合了签名的意义。

以上第 4 条得知,如果我要给数据进行签名或加防伪,我应该用自己的私钥进行签名。

加密通信和签名防伪的原理其实都是对一段信息进行非对称加密,根据不同场景使用不同角色的 key,带来不同的效果,但不管怎样,凡是需要用到无权得知的私钥进行处理的方案都是不合理的。

在进行签名时,可以确定的是这段信息的来源是真实可靠的,途中是不能被篡改的,但是它的内容并不能保密,如果一段信息既要保密传递给一方同时又要验证来源,可以将上述的两种示例场景灵活的结合使用,实现更安全的通信。

简而言之,加密用收件人的公钥,签名用签发人的私钥。非对称加密,我们理解了这两个 key 的用途和区别,就能准确的运用在合适的场景中。

新版博客,全新开始

今天是个特殊的日子,我的个人博客迎来了全新的设计改版。

很久没有写新的内容了,旧的博客是自己用 PHP 实现的,用起来总感觉不是很方便,毕竟后台管理不想花费太多时间只能简单开发,于是萌生了使用开源博客系统的念头,而在众多开源产品中选择了成熟度比较高的 WordPress。

下载安装 wp 的最新版,经过简单的配置就能跑起来了,为了优化图片文件等资源,还安装了七牛云存储的插件 wp-qiniu 这样所有图片都会上传到七牛的免费10G空间,不用占用自己服务器的资源,更重要的是优化了访问速度。在网站呈现和模板方面重新做了设计编排,同时对 wp 的模板进行了二次开发。

LOGO 还是保留原来的设计思路,这次做了一些细节的改进,原来使用 Photoshop 位图也改成了 Sketch 做的矢量图,以便可以更加轻松的生成各种尺寸应对不同的场景需要。

Sketch 比较容易上手,新建画板 [快捷键 a]、创建圆角矩形、添加字体、设置蒙版,就可以完成如图所示的方案,一个“龙”的局部纹理在黑色矩形之上的抽象风格。

英文字母的标志不再作为主 LOGO 出现在顶部,字体仍然使用的是 AVP 拼接而成,被放置到了网页的最底部居中。

这次新版,整体的设计风格是简洁黑白搭,功能上侧重阅读体验。内容形式可以分为多种,文章、状态、杂志、音乐、视频、技术论文和报告等,除了技术上的一些分享,在生活上也会有一些感悟和记录,期待与大家交流。