12

还分不清摘要、加密?一文带你辨析密码学中的各种基本概念

 3 years ago
source link: https://www.chainnews.com/articles/127712295135.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

还分不清摘要、加密?一文带你辨析密码学中的各种基本概念

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

我要用 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 的组合写法。签名需要分两步走:

  1. 计算信息的摘要值

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

还分不清摘要、加密?一文带你辨析密码学中的各种基本概念

_06_验签

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

还分不清摘要、加密?一文带你辨析密码学中的各种基本概念

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

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

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

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


MGD! 抢它!

八月礼遇进行中

本期调研有礼

您的反馈很重要!诚邀您花 2 分钟时间参与一个小小的调研,了解我们需要直面的身份挑战与思考。

我们会将最后的调研结果与您分享,并且为提交顺序中含有 1、6、8 数字的调研者,送出 Authing 2021 特别礼盒一份(定制 T 恤 / U 型靠枕 / 手持小风扇 / 写字本等随机组合)。

花 2 分钟立即参与

还分不清摘要、加密?一文带你辨析密码学中的各种基本概念

*数量有限 赠完为止

*获奖用户收到通知后 24 小时内未回复邮寄信息则视为“谢谢参与”


8 月

限额免费体验

Authing 已服务全球七个国家的数万开发者和企业,包括中国石油、国家电网、日本丰田、大众汽车、博世集团、德高集团、高等教育出版社等不同行业客户。遵从不同国家和行业的安全与合规要求,实现可视化安全审计,加密传输与存储、自定义密码强度、自适应多因素认证等丰富的安全策略。

扫一扫享受超高体验次数

专属人工通道

还分不清摘要、加密?一文带你辨析密码学中的各种基本概念

- End -

本文由“壹伴编辑器”提供技术支持

关于 Authing

Authing 是国内首款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务。Authing 被科技部认定为「2020 国家高新技术企业」,被中国信息通信研究院评选为「国内身份管理与访问控制领域创新企业」,并被录入《2019 网络安全产业白皮书》。Authing 已为中国石油、国家电网、招商银行、日本丰田、德高集团等国内外优秀企业打造了卓越的开发方式、高效的办公流程和安全的 IT 管理体系。

还分不清摘要、加密?一文带你辨析密码学中的各种基本概念

点击阅读原文,即刻注册~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK