免费注册,打造高效身份管理
博客/身份安全/还分不清摘要、加密?一文带你辨析密码学中的各种基本概念
还分不清摘要、加密?一文带你辨析密码学中的各种基本概念
Authing 官方2022.09.22阅读 799

你一定听到过这些词:加密、解密,也听过种种说法:

我要用 md5 把密码加密一下

将 base64 字符串进行解密

把 token 进行加密,验证时需要解密

01

编码

首先我们从编码开始。一生二,二生三,三生万物,编码就是「一」。试想一下如何用一个只能存储数字的设备来存储汉字呢?一个很自然的想法是将汉字转化成数字,然后再存起来:

例如:用 1 来表示「一」,用 2 来表示「二」,用 24 来表示「人」...... 将所有汉字映射成一个数字,然后将这些数字存储起来。

需要对编码方式进行事先约定,不然你一个编码,我一个编码,大家谁都听不懂谁说的是什么。

谁让电脑是美国人最先发明的,非常流行普及的编码方案也是人家提出的,让我们看看 ASCII 编码:

所以当你想要将「Good morning」存进电脑里,需要存「47 6f 6f 64 20 6d 6f 72 6e 69 6e 67」(16 进制,篇幅原因不再展开成为二进制)。

那么 base64 是什么?base64 也是一套编码规范,可以将二进制数据映射成可见字符(什么是不可见字符?像空格,换行符,制表符都是不可见的)。

应用场景呢,比如你想把一张图片塞到 JSON 格式的数据里面,就要对图片二进制流进行 base64 编码。

所以,以后,作为一个密码学专家,你就要说,我会用 base64 算法编码一下图片文件。

最后一个问题,对信息编码会产生信息损失吗?请读者自己思考一下。

02

摘要

试想有一个搅拌机,放进去原料,输出果汁。在计算机的世界里,也有这样一个摘要机,输入数据,会输出数据的摘要。常见的摘要算法有 sha1、md5。

可以从摘要值反推输入的信息吗?可以从果汁还原水果吗?熟鸡蛋可以反生吗?摘要的计算是单向的,只能通过输入的信息计算摘要而不能从摘要反推信息。

MD5 算法总会输出一个 128 位二进制数,那么我计算一个电影文件的摘要,我可以通过这个 128 二进制数来还原整个电影吗?显然不能。

摘要算法的另一个特性是对于任意的输入变动,得出的结果是截然不同的。见上图,123456 和 1234567 只差了一个数字,计算出来的摘要值是完全不同的。即使你偷偷剪掉一个电影的一秒钟,计算出的电影摘要值也是完全不同的。

所以这有什么用呢?假设你是电影导演,在电影上映前需要先将剪辑后的作品发给不同的公司进行审核校对,那么你可以偷偷剪掉第一秒,计算一个摘要值,然后发给一个公司;偷偷剪掉第二秒,计算一个摘要值,然后发给第二个公司,以此类推。这样一旦有人将你的作品泄露到网上,你就能够通过摘要值立刻知道是哪家公司泄露出去的!还记得《权力的游戏》最后一季上映前先泄露了四集吗?如果他们使用这种方法,追查起来就可以很方便了。

总结一下摘要的特性:不可逆,失之毫厘,谬以千里。

所以,以后,作为一个密码学专家,你就要说,我要用 MD5 对明文密码做一个摘要然后再存储到数据库。

03

加密

试想在现实世界里,如果加密传递信息呢?把信息写在纸上,然后把纸装进盒子里,再把盒子锁上,最后把盒子邮寄给接受者。前提是接收者必须有这把锁的钥匙。你需要另寻办法将钥匙给到他。

在计算机的世界里,对称加密算法的原理也是类似。你有一段信息,有一个密钥,你用一段文字作为密钥,对你的信息做数学运算,得到一个结果,然后你把结果发给你的接收方,他用同样的文字作为密钥,对加密结果做数学运算,得到信息的原文。

常见的对称加密方法 AES、DES,本质上都是使用一段文字对原始信息做数学运算,然后将结果发送给接收方。

加密的意义在于,及时信息在传递过程中被黑客截获,他也不知道双方在说什么。

那么对称加密的密钥如何传递呢?另寻办法的方法是什么?非对称加密呼之欲出。非对称加密算法,用于加密和解密的密钥是不同的。也就是说,一段文字用于加密信息,另一段文字用于解密加密的结果。

04

公钥和私钥

公钥

在数学上,公钥就是两个数字(e,n)。e 一般取 65537,n = p * q(p 、q 为质数)。公钥用于加密。

私钥

在数学上,私钥就是两个数字(d,n)。d 是 e 对于 ø(n)(欧拉函数)的逆元。私钥用于解密。

公钥与私钥的关系

  1. 在数学上没有区别,都是一对数字,取决于将哪一组数字公开。
  2. 公钥加密的内容要使用私钥解密;私钥加密的内容要使用公钥解密。
  3. 私钥要自己保护好,不得泄露;公钥可以公开在互联网上,任何人都可以用它来加密信息,当然加密内容只有私钥能够解出来。

下面是一次 RSA 加密信息的过程:

Q: 可不可以用私钥加密数据呢?

A: 可以!

Q: 那用公钥解密数据?

A: 是的!

Q: 公钥暴露在网络上,任何人都能解密数据,那加密还有什么意义?

A: 继续往下看!

拓展:上图中要计算每个字符编码的 e 次幂,需要算几次?

05

签名

先计算信息的摘要值,用私钥对摘要值进行加密,生成的结果叫签名值,签名算法有 RS256。顾名思义,是 RSA + HS256 的组合写法。签名需要分两步走:

计算信息的摘要值

用私钥加密摘要值,得到签名

06

验签

利用公钥对签名信息进行验证。拿到一段信息和它的签名值,需要先本地计算信息摘要值,用公钥解密签名值,和计算的信息摘要值进行比对。

还记得公钥和私钥的区别吗?如果我们用私钥对数据加密,任何人都可以用公钥解密加密结果(公钥是公开的),如果解出来的内容是有意义的,那么数据的来源一定是私钥的持有者,如果解出来的内容是乱码,那么数据的来源就不是私钥的持有者。

那么之前对称加密算法的密钥传递问题也解决了,接收方将公钥给发送方,发送方用公钥加密一个密钥,接收方用私钥解密加密后的内容,得到密钥原文。如此一来,钥匙就安全地交给接收方了。

总结一下,如果你想对一段信息签名,先算它的摘要,然后用私钥加密摘要值,这样所有人都可以使用公钥验证它的正确性;如果你想加密传输一段信息,用公钥加密这段信息,这样信息接受者可以用私钥解密加密后的结果。

当你说加密的时候,你实际想说:编码、摘要、加密;当你说解密的时候,你实际想说:编码、解密、验签。

关于 Authing

Authing 是国内首款以开发者为中心的全场景身份云产品,为企业和开发者提供完善安全的用户认证和访问管理服务。作为云原生架构下的身份云产品,Authing 在产品创建初期,目标就是服务亿级的企业和个人开发者客户,轻量级、易部署、低消耗、技术栈成熟,运维易的云原生技术产品架构,成为了 Authing 的首选。

点击此处了解更多行业身份管理

「解决方案」以及「最佳实践案例」

文章作者

avatar

Authing 官方

0

文章总数

authing blog rqcode
关注 Authing 公众号
随时随地发现更多内容
authing blog rqcode
添加 Authing 小助手
加入 Authing 开发者大家庭
Online
Contact us online
To create a perfect identity system
WeCom
authing
Add Wecom to receive industry information
CEO-Mail
ceo@authing.cn
Direct feedback to the CEO
Free Trial
Online
Phone