转自 我理解的数字证书-1-公钥,私钥和数字证书

英文原文地址:

http://www.youdzone.com/signature.html

若下文有任何错误,请告知我,谢谢。79996286@qq.com

主角介绍:Bob and Alice

提起RSA加密算法,公钥和私钥,多数文章都要使用Bob和Alice这两位人物。他们的创造者名叫Rivest,是RSA之父。他为了在避免在描述中使用A和B,就以这两个字母开头,创建一男一女两个角色,就是我们在任何文章上都能看到的Alice和Bob了。这是一些题外话,下面就来进入我们的数字证书入门学习吧。

什么是数字证书

Bob有两把钥匙,一把叫公钥(public key),一把叫私钥(private key)。

Bob的公钥可以公开供其他人使用,他只保留自己的私钥。公钥和私钥用来加解密数据,如果使用任意一把来加密数据,那么只有使用另外一把才能解密数据。

Susan想给Bob写信,她可以使用Bob的公钥将内容加密以后发送给Bob,Bob收到以后,使用私钥解密以便阅读内容。Bob的的其他同事即使截获了Susan发送给Bob的信件,由于没有Bob的私钥,也无法解密,从而确保数据安全。以上就是使用公钥和私钥加解密的过程演示。

多说一句,如果Bob给Susan回信,如何保证数据安全呢?他可以使用Susan的公钥加密消息后发给Susan,Susan使用自己的私钥解密后阅读。所以保护好自己的私钥是多么重要的事情啊。

现在Bob决定给Pat写一份信,信件的内容不用加密,但是要保证Pat收到信件后,能够确认信件的确是Bob发出的,而不是别人冒充Bob发给Pat的,应该如果做呢?

Bob将信件通过hash软件计算一下,得到一串消息摘要(有的文章也称之为“hash值”)。这一过程能够保证2点:1、过程不可逆。即不能通过消息摘计算出信件的内容。2、消息摘要不会重复。即如果信件有任何改动,再次hash计算出的消息摘要一定不会和改动前的消息摘要一致。

然后,Bob使用自己的私钥,将消息摘要加密。加密后的结果,我们称之为“数字签名”。现在,Bob就可以将信件连同数字签名一起发给Pat。

Pat收到信件以后,会做2件事:1、使用Bob的公钥将数字签名解密,如果顺利解密,说明的确是Bob签发的数字签名,不是别人签发的,因为Bob的私钥没有公开。2、Pat使用hash软件对信件再次进行hash计算,和解密数字签名得到的消息摘要对比,如果一致,说明信件没有篡改,确实是Bob发出的。这就是数字签名的过程。它能够确保签名人发出的消息不被篡改,也能证明的确是签名人发出的消息。

ok,一切看上去是那么的完美,使用公钥私钥,即能加解密消息,又可以数字签名。说了那么多,还没有提到文章的主题----数字证书(不要和数字签名搞混了)。

先来做一道CISP的试题:

那类人对单位的信息安全威胁最大:a、高层领导   b、信息主管  c、安全管理员  d、心怀不满的员工

三长一短选最短,三短一长选最长,so答案就是d,也是我们下面引入的主角,Doug,our disgruntled employee。

Doug要欺骗Pat,冒充Bob给Pat写信,他应该怎么做的?既然Bob的公钥是公开的,Doug可以冒充Bob,将他自己的公钥发给Pat,让Pat误认为收到的公钥就是Bob的,然后就可以冒充Bob给Pat发消息了(这里我们只谈理论,不谈具体实现方式)。所以问题的核心就是,如何确保公钥不被冒充?

使用数字证书可以确保公钥不被冒充。数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道该证书是由那家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:

1、由专门的机构签发的数字证书才安全有效。

2、签发数字证书是收费的。

3、不会被冒充,安全可信。

4、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。

5、CA的公钥已经集成到操作系统中了。如上图。

生成数字证书的流程的如下:

1、持有人将公钥以及身份信息发送给权威机构。

2、权威机构负责对持有人的身份进行验证,确保公钥和持有人的信息准确无误。

3、权威机构使用自己私钥对持有人公钥进行数字签名,生成数字证书。

4、为了确保证书不被篡改,权威机构对数字证书进行hash计算(指纹算法),生成摘要(指纹),使用自己的私钥对摘要进行数字签名,放到数字证书中。

5、对持有人收费。

--- Bob有了数字证书后,给Pat写信时额外地附上数字证书,如下:


 
Pat收信后,用CA的公钥解密数字证书中的数字签名(CA公钥存在根证书中,根证书是绝对信任的),得到数字签名的原文,再计算数字证书的hash值,对比得到的hash值和得到的数字签名原文,即可验证该数字证书是否可信任,若验证通过了,说明该数字证书上的信息是可信的,进而得到Bob的真实公钥,用Bob的真实公钥来验证Bog的数字签名,若验证通过,则可以确认该信件是Bob发出的了。

附:

几篇好的文章,对我的帮助很大,谢谢作者:

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

http://blog.csdn.net/ly131420/article/details/38400583

公钥、密钥和数字证书相关推荐

  1. 公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS

    2019独角兽企业重金招聘Python工程师标准>>> 对公钥和私钥有点稀里糊涂的,搜索了一些资料,作一些整理吧,先看这个: 加密--公钥 解密--私钥 签名--私钥 验证--公钥 ...

  2. 数字签名与数字证书是什么

    目录 概述 数字签名 数字签名是什么 数字签名的大概流程 发件人 收件人 签名的安全风险 数字证书 为什么需要数字证书 数字证书是什么 数字证书的应用场景 使用流程 概述 了解数字签名和数字证书之前, ...

  3. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等

    为什么80%的码农都做不了架构师?>>>    本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司 ...

  4. 使用X.509数字证书加密解密实务(一)-- 证书的获得和管理

    一.       获得证书... 2 1.        从CA获得... 2 2.        从windows2003证书服务中获得... 2 3.        使用makecert工具获得. ...

  5. 加密、数字签名和数字证书

    加密.数字签名和数字证书 1      对称加密 对称加密算法中,加密和解密使用的是同一个秘钥,所以秘钥的保护是非常重要的,对称加密和解密过程如下图: 对称算法加密过程 对称算法解密过程 尽管对称秘钥 ...

  6. 数字签名与数字证书技术简介(三)

    数字证书 前两篇文章,分别介绍了非对称加密算法和数字签名技术: http://blog.csdn.net/u014419512/article/details/26290821 http://blog ...

  7. 19.系统知识-数字证书

    密码学相关概念 明文(plain text):发送人.接受人和任何访问消息的人都能理解的消息. 密文(cipher text):明文消息经过某种编码后,得到密文消息. 加密(encryption):将 ...

  8. 什么是RSA国产数字证书?

    一位朋友向我打听什么是RSA国产证书? 我们用的较多说法是,国际算法的RSA证书,国密算法的SM2证书,那么有没有RSA国产证书呢? RSA国产证书的提法并不标准,它来源一个安全通告,2019年11月 ...

  9. 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

    网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...

最新文章

  1. java Windows7 下环境变量设置
  2. 负载均衡算法及其Java代码实现
  3. Python: generator, yield, yield from 详解
  4. linux pwn练习0x02
  5. ELK5.3环境部署
  6. Navicat for MySQL设置备份路径
  7. JZOJ 5490. 【清华集训2017模拟11.28】图染色
  8. Qt知识点汇总——来自网络
  9. Ubuntu下安装配置JDK
  10. Training的第二十二天
  11. Linux下autoconf与automake
  12. 一个简单SeekBar样式的例子
  13. Python以TCp搭建小游戏服务器
  14. MAE,何凯明-2021
  15. 达梦数据库角色、用户管理
  16. Docker的基本管理命令!!!学会docker的第一步
  17. 什么是Autorun病毒?它的运作原理是什么?如何手工清除?
  18. 三门问题(基于贝叶斯分析和python的实现)
  19. Android中65536问题剖析
  20. java,你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si

热门文章

  1. Java注释:单行、多行和文档注释
  2. 智能体适能训练评估系统-体姿体态评估系统软件
  3. VMware Workstation 12 Pro虚拟机下载(含序列号)
  4. java线程状态(Java线程状态和系统线程)
  5. 【RTSP/RTP流媒体】10、编写简单的RTSP客户端
  6. anz的swift code_澳洲Commonwealth bank是不是只有一个SWIFT CODE?
  7. python制作微信小程序_python搭建微信小程序
  8. Shiro认证源码解析和工作原理
  9. python笔记—>网页爬虫
  10. html实现弹窗输入