前言

此次不深入源码、不分析原理、只厘清一些易混淆概念及其关联。
本次将从通信演变历史的角度出发,一步步阐述概念及其作用。
通过本篇文章,你将了解到:

1、明文通信
2、密文通信
3、对称加密
4、非对称加密
5、消息摘要
6、数字签名
7、CA与数字证书
8、总结

1、明文通信

大部分时候,咱们交流都是靠嘴对嘴,信息完全暴露在他人的耳朵里。

拉拉家常无关紧要,但要是涉及重要、私密的信息就不能这样子了。
此时可能想到,那我们就说悄悄话吧。

2、密文通信

悄悄话只能是俩人近距离才能实现,若是天各一方怎么才能将信息安全送给对方呢?
大家或多或少地看过谍战片,那会儿卧底如何将信息传给组织呢?答案是通过密码本。

双方约定好用一个密码本,密码本其实是个映射关系:

1、发送方通过密码本将明文信息转为不易被理解的信息,称为密文。
2、接收方接收到密文后,通过密码本映射关系反推出明文。

此时双方通信是经过加密的,我们称为密文通信。第三者想要破解信息,就需要拿到密码本或是破译出密码本映射关系,从而将密文转为明文。

3、对称加密

随着科学技术的发展,人们的交流由书信逐渐过渡为电子通信。

当我们在键盘上敲击一段文字后,这段信息会通过网络发送给对方,怎么保证这段信息不被别人轻易知道呢?
我们想到了加密,双方在传输信息前商量好一个密钥,发送方用密钥将信息进行加密形成密文后再发送,接收方在收到密文后使用之前协商的密钥进行解密。

因为加密明文、解密密文使用同一个密钥,我们称此种加密方式为对称加密方式。

举个简单例子:

小明现在将信息进行对称加密:

1、设定密钥为:X。
2、设定加密算法为:将每个字符+X。
3、假设采用密钥 X=1。

那么将明文hello,每个字符+1,得出如下结果:
hello—>ifmmp

小红拿到密文ifmmp后,她知道密钥X=1,因此她将密文每个字符-1,得出如下结果:
ifmmp—>hello

至此,小明和小红成功进行了交流。

此时小刚想知道小明和小红聊了啥,于是截获了信息:

但是由于小刚拿到的是密文信息:ifmmp。因为不知道密钥,因此无法反推出明文:hello。因此小明和小红的信息交流安全得到了保证。

当然对称加密算法没那么简单,常见的对称加密算法有如下几种:

1、DES(Data Encryption Standard) 数据加密标准,强度比较低,容易被破解,目前使用比较少。
2、3DES(TDEA,Triple Data Encryption Algorithm) 三重数据加密算法,是DES的增强版,对一块数据使用3个不同的密钥加密。
3、AES(Advanced Encryption Standard) 高级加密标准,当前主流的对称加密算法。
4、RC4 流加密算法,由Ron Rivest 大神设计的。
5、Blowfish 块加密算法,由Bruce Schneier 大神设计的。
6、SM4 分组密码算法,由我国设计并由国家密码管理局发布。

似乎使用对称加密就可以解决咱们通信安全问题,但引入了另一个问题:

小明和小红如何约定对称加密的密钥呢?\color{Red}{小明和小红如何约定对称加密的密钥呢?}小明和小红如何约定对称加密的密钥呢?

4、非对称加密

是否有种方式可以光明正大地传递信息呢?
答案是:非对称加密。

1、非对称加密有两个密钥,一个是公钥(public key),另一个是私钥(private key)。
2、用公钥加密后的密文只能由私钥来解密。
3、用私钥加密后的密文只能由公钥来解密。
4、公钥可以公布出来供其他人使用,而私钥却是需要保密,不能被别人获取。

因加密与解密使用的不是同一个密钥,故此种公私钥加密方式称为:非对称加密。

接着来看看小明和小红如何使用非对称加密来实现安全通信。
小明和小红分别生成自己的公私钥:

1、小红将自己的公钥告诉小明。
2、小明使用小红的公钥加密后发送给小红。
3、小红使用自己的私钥来解密,得出明文。

由上可知,用小红的公钥加密的信息只能由小红的私钥解开,只要小红的私钥没有泄漏,那么小明和小红的通信是安全的。
当然了,真正非对称加密算法并没有那么简单,常见的几种非对称加密算法:

1、DSA(Digital Signature Algorithm)是 Schnorr 和 ElGamal 签名算法的变种。
2、ECC(Elliptic Curves Cryptography),椭圆曲线密码编码学。
3、DH算法,一般用于密钥交换。
4、RSA(Ron Rives,Adi Shamir,Leonard Adleman)三位大神一起提出的,命名取姓氏开头字母。RSA 既可以交换密钥,也可以用作数字签名,是流行最广的非对称加密算法。

5、消息摘要

小明和小红的通信真是安全的吗?
此时小刚又来搞事情了:

1、因为小红的公钥是公开的,意味着小刚也能拿到公钥。
2、小刚截获了小明发送给小红的信息,虽然小刚不能解密,但是他可以伪造信息。
3、小刚将伪造好的信息用小红的公钥发送小红。
4、此过程中,小明和小红都不知道小刚的存在,然而小刚背地里暗戳戳地替换了信息。

以上信息表明:

1、即使是密文,信息也容易被伪造。
2、小刚这种行为是中间人攻击(Man-in-the-MiddleAttack MITM)。

小明和小红一合计,想出来了一个办法:

1、小明使用Hash算法将明文进行哈希,生成消息摘要。
2、小明将明文用小红的公钥加密并和消息摘要一起发给小红。
3、小红收到信息后先用私钥解密,解密出来的明文使用Hash算法生成消息摘要,并与小明发过来的消息摘要对比,若是一致则表明消息没被更改。

消息摘要(Message Digest)特点:

1、通过消息摘要算法,将一组不定长的源信息生成定长的目标信息。
2、不同的源信息生成的目标信息不一致。

常见的消息摘要算法:MD5、SHA1。

6、数字签名

虽然采用了消息摘要,但是小刚依然能够自己伪造信息,并生成对应的消息摘要,小红收到后验证摘要是正确的,便认为是小明发的,这种做法还是有漏洞。
在前边用到了小红的公钥、私钥,而没用到小明的公钥、私钥。
在消息摘要的基础上,想办法让小明的公私钥也参与到通信过程中来:

1、小明将公钥告诉小红。
2、小明将消息摘要使用自己的私钥加密并使用小红的公钥加密明文,两者一并发给小红。
3、小红收到信息后先用自己的私钥解密出明文,然后将加密过后的消息摘要使用小明的公钥解密。
4、对比消息摘要是否一致。

与消息摘要过程对比,此时多了一个步骤:

用小明的私钥加密消息摘要。

用私钥加密的信息的过程我们称之为:数字签名
数字签名具有不可抵赖性的特点。根据前面的描述,用私钥加密的信息,只有对应的公钥才能解开。
因此,若是小红使用了小明的公钥解开了密文,那么说明该消息肯定是小明发过来的。反之,小明使用私钥加密后发出去,代表这信息是确认是自己发的,这就是他的签名。

常见的数字签名算法:RSA、DSA、ECDSA。
老规矩,用图来看看小明与小红如何使用数字签名的。

小明发送信息过程:

小红处理信息过程:

由上可知:
数字签名有两个作用:

1、证明消息是某个确定的实体发送的。
2、证明消息是没有被串改。

整个流程小明的公私钥、小红的公私钥都参与了。
因为小刚没有小明的私钥,所以他无法生成小明的数字签名,最终无法通过小红对数字签名的验证。

7、CA与数字证书

这么看来小刚是无能无能为力了?非也!
回顾一下之前说的对称加密的痛点:如何传递对称密钥?
实际上非对称加密也存在问题:如何传递公钥?
可见,无论是对称加密还是非对称加密都需要解决密钥传递问题。

若是小刚伪造了小红的公钥,情况如下:

1、小明在获取小红公钥的时候,被小刚替换为自己的公钥。
2、小明用小刚的公钥(他以为是小明的)对信息进行加密,并用自己的私钥对摘要做数字签名。
3、小刚收到信息后用自己的私钥解密。
4、小刚用小明的公钥加密,并用自己的私钥对摘要进行数字签名。
5、同样的方式,小刚也欺骗了小红。
6、最后,小刚愉快地当着中间人…

因为公钥被伪造了,所以小刚可以为所欲为。
小明如何才能知道自己收到的公钥是小红的呢?
这时候就需要引入权威机构:CA(Certificate Authority) 证书授权中心

有了CA,小红发布公钥的流程变了:

1、小红将自己的公钥提交给CA。
2、CA 确认小红的身份信息,比如组织机构、姓名、城市等。
3、将以上信息和小红的公钥用CA的私钥进行签名生成数字证书
4、证书返给小红。

用图表示如下:

图上5个步骤,有些同学对第4步不太理解:

小明验证小红的证书,因为证书是CA签过名的,那么需要CA的公钥来解密,那么CA 的公钥又是如何传给小明的?

似乎又回到了原点:如何安全传递公钥的问题。
其实,信任是有起点的。
CA 不仅为他人生成证书,也生成自己的证书,CA 为自己生成的证书里包含了CA的公钥。
CA 的证书在电脑、手机等设备出场的时候就会预置在系统里、浏览器里。

因此,当小明验证小红的证书时,会在系统里寻找能够解开小红证书的CA 公钥,若是找到则说明小明证书的颁发机构是可信任的,既然信任了该证书,那么从证书里取出的公钥,小明也认可是小红的。
至此,小红的公钥就安全地传给了小明,后面就可以愉快地通信了。

系统里找不到对应的证书会有什么影响?大家还记得12306网站刚开始运行的时候,用浏览器访问时浏览器会提醒说该网站不受信任,12306提示用户安装自己的根证书。
这也从侧面说明了,咱们不要轻易更改系统里的证书。

8、总结

对称加密存在密钥传送被泄漏的风险,非对称加密虽然不需要传递私钥,但是需要传递公钥,也存在被中间人攻击的风险。
为此,引入了CA 生产证书解决了非对称加密公钥传递问题。

然后非对称加密速度慢,适合加密数据量少的信息,对称加密速度快,适合加密数据量大的信息。
如何将对称加密与非对称加密结合起来打造一个安全的通信链路,下篇我们将重点分析其中的典型:SSL/TLS 的原理与应用。

您若喜欢,请点赞、关注,您的鼓励是我前进的动力

数字签名/数字证书/对称/非对称加密/CA 等概念明晰相关推荐

  1. 网络安全--数字签名/数字证书

    对称加密: 未加密的信息+秘钥 --> 加密的黑盒子 --> 加密后的信息 加密后的信息+秘钥 --> 解密的黑盒子 --> 未加密的信息 非对称加密: 未加密的信息+公钥 - ...

  2. 什么是 数字签名 数字证书 数字信封

    1,数字签名 数字证书 数字信封 当A和B进行通信时,将A发送的消息的hash值先用A的私钥进行加密(数字签名),B存储A的公钥,B收到信息之后利用公钥进行解密,保证信息的完整性和保密性来自于A 存在 ...

  3. SSL数字证书(一)CA、根证书与数字证书

    数字证书原理(〇)认识SSL SSL数字证书(一)CA.根证书与数字证书 SSL数字证书(二)使用makecert.exe签发证书 SSL数字证书(三)使用 openssl 生成证书 网络安全无疑是现 ...

  4. 数字证书和密钥加密的理解

    1.密钥     密钥分为公钥和私钥,私钥只有一把,一般归内容发布者所有,而公钥有很多吧,有内容发布者发布给内容接受者,内容接受者用公钥来解密内容发布者用私钥加密的内容. 2.密钥加密解密过程     ...

  5. 常见的哈希Hash算法 MD5 对称非对称加密 海明码

    2019独角兽企业重金招聘Python工程师标准>>> 参考 Link 另外,这篇文章也提到了利用Hash碰撞而产生DOS攻击的案例: http://www.cnblogs.com/ ...

  6. 信息安全技术之数字签名_公钥密码_非对称加密

    信息安全技术主要包括: 信息加密技术 数字签名技术 身份认证技术 访问控制技术 网络安全技术 反病毒技术 数据备份与恢复 信息安全管理 这里因为之前搞到了师兄给的一百多页的密码学基础,所以就先pick ...

  7. 数字签名、证书,RSA加密、解密

    文章目录 一.相关知识扫盲篇 数字签名.数字证书 防止证书伪造 之 证书链-Digital Certificates 二.公私钥格式.协议规范 三.golang RSA加密.解密具体实现 `RSA`加 ...

  8. 数字证书引入的原因 CA机构 授权认证中心

    数字签名是鲍勃自己制作的,不安全, 数字证书,是ca发布的,包含了鲍勃的公钥,是安全的. 今天,我读到一篇好文章. 它用图片通俗易懂地解释了,"数字签名"(digital sign ...

  9. 写给小白的常见三种加密方式:MD5,对称非对称加密

    我们在做数据类传输产品或测试的过程中,总会听到开发说数据要加密,然后使用各种加密方式,那么希望通过本文,能够让大家对一些常见的加密方式有一些更加深入的了解,理解其中的底层逻辑. 今天介绍三种常见的加密 ...

  10. 密码中对称非对称加密是什么意思?

    在你学习和工作中,经常会用到各种加密算法来保护自己的信息安全,也经常听到对称和非对称加密的概念,可是仔细回想一下,这个对称和非对称到底是怎么来的,怎么个对称法?就自己学习的知识,咋们就来细说一下. 为 ...

最新文章

  1. C语言基本数据结构之四(线性,对分,二叉树查找及二叉树删除)
  2. 剑指Offer_29_最小的K个数
  3. Spring IOC 容器源码分析 - 创建单例 bean 的过程
  4. 《AlwaysRun!团队》第四次作业:项目需求调研与分析
  5. php自动报价,使用PHP转换所有类型的智能报价
  6. Shadow DOM及自定义标签
  7. c语言标准库 swap,swap
  8. java递归实现多级菜单栏_vue+ java 实现多级菜单递归效果
  9. Shell 07 项目案例
  10. final 和static的关系
  11. poj 1005 I Think I Need a Houseboat
  12. 90%测试猿都想学的Jmeter技能,你get吗?
  13. IOS 地理编码以及反地理编码
  14. jQuery - 自定义插件开发方式
  15. leapmotion和HTC和投影视角注意事项
  16. 简单的网页制作期末作业
  17. HTML-坐标的含义,以及变换的使用
  18. GSM/CDMA区别
  19. matlab 线透明度,matlab 曲线填充 透明度
  20. 保龄球计分java代码_从 保龄球得分计算方法 浅析 深度学习

热门文章

  1. Python 豆瓣TOP250 电影爬取
  2. 阿里安全研究员路全:如何运用AI对抗“数据污染”?
  3. py征途3之填坑(pagerank个人详解)
  4. 概率论复习笔记3.0--假设检验
  5. 《谁动了我的奶酪》读后感
  6. pytorch是什么?解释pytorch的基本概念
  7. linux图片裁剪软件安卓版,照片裁剪软件下载-照片裁剪 安卓版v2.2-PC6安卓网
  8. wox开机自启_快速启动神器-wox 安装和插件配置
  9. zblog php 调用缩略图,zblog调用文章缩略图的方法
  10. 华为服务器不显示u盘启动项,服务器不读u盘启动