通俗理解数字签名,数字证书和https

前言

最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应。签章有法律效应必须满足两个条件:

  • 能够证明签名,盖章者是谁,无法抵赖
  • PDF合同在签章后不能被更改

在纸质合同中,由于签名字迹的不可复制性,盖章的唯一性以及纸质合同对涂改的防范措施(比如金额用大写)可以保证上述两点,从而具备法律效应,那么PDF合同如何保障呢?两个重要的概念就是数字签名和数字证书。这项技术广泛运用于文件认证,数据传输等。

为了弄懂这些,我花了2天时间从加密算法开始,到数字签名和CA证书,最后再重新认识下https的原理。

非对称加密

加密我了解的不多,只知道有这么两种算法:对称加密和非对称加密。

  • 对称加密:加密和解密的密钥一样,比如用123加密就是用123解密,但是实际中密码都是普通数据在互联网传输的,这样一点密码被中间人截取并破解,加密直接被攻破。
  • 非对称加密:把密钥分为公钥和私钥,公钥是公开的所有人都可以认领,私钥是保密的只有一个人知道。假设A要发送一封Email给B,他不想让任何其他人在传输中看到Email的内容,做法就是使用B的公钥对Email加密,只有B的私钥能够解密(B的私钥唯一性保证信件不会泄露)。

    某天出意外了,有黑客冒充A给B发送Email,并且也用B的公钥加密,导致B无法区分这封邮件是否来自A。怎么办?此时A可以用自己的私钥加密,那么B收到邮件后如果用A的公钥可以解密邮件,那么证明这封信肯定来自于A。

    OK,通过这个例子我想你们基本明白非对称加密了!我总结了下面几点:

    公钥的作用:对内容本身加密,保证不被其他人看到。

    私钥的作用:证明内容的来源

    公钥和私钥是配对关系,公钥加密就用私钥解密,反之亦然,用错的密钥来尝试解密会报错。

数字签名

接着聊上面发邮件的例子,假设A用自己的私钥对Email加密发送,这存在下面问题:

  • 对文件本身加密可能是个耗时过程,比如这封Email足够大,那么私钥加密整个文件以及拿到文件后的解密无疑是巨大的开销。

    数字签名可以解决这个问题:

    1.A先对这封Email执行哈希运算得到hash值简称“摘要”,取名h1

    2.然后用自己私钥对摘要加密,生成的东西叫“数字签名”

    3.把数字签名加在Email正文后面,一起发送给B

    (当然,为了防止邮件被窃听你可以用继续公钥加密,这个不属于数字签名范畴)

    4.B收到邮件后用A的公钥对数字签名解密,成功则代表Email确实来自A,失败说明有人冒充

    5.B对邮件正文执行哈希运算得到hash值,取名h2

    6.B 会对比第4步数字签名的hash值h1和自己运算得到的h2,一致则说明邮件未被篡改。

    图1.png

看完这个过程,是不是觉得数字签名不过如此。其实就是利用算法(不一定是非对称算法)对原文hash值加密,然后附着到原文的一段数据。数字签名的作用就是验证数据来源以及数据完整性!解密过程则称为数字签名验证。

不过先别着急,我在梳理数字签名流程时候有下面几点疑惑,不知你也是否一样?

  1. 如果中间人同时篡改了Email正文和数字签名,那B收到邮件无法察觉啊。

    答案:数字签名的生成需要对方私钥,所以数字签名很难被伪造。万一私钥泄漏了呢,不好意思,你私钥都能弄丢了那这篇文章当我白写。(私钥绝对保密不参与传输)

  2. 公钥是公开的并且可以自行导入到电脑,如果有人比如C偷偷在B的电脑用自己公钥替换了A的公钥,然后用自己的私钥给B发送Email,这时B收到邮件其实是被C冒充的但是他无法察觉。

    答案:确实存在这种情况!解决办法就是数字证书,一环套一环请接着看。

数字证书

上面第2点描述的安全漏洞根源在哪?就是A的公钥很容易被替换!那么数字证书是怎么生成的呢?以及如何配合数字签名工作呢?

  1. 首先A去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对A的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate):

    图2.png

  2. A在邮件正文下方除了数字签名,另外加上这张数字证书

    image.png

  3. B收到Email后用CA的公钥解密这份数字证书,拿到A的公钥,然后验证数字签名,后面流程就和图1的流程一样了,不再赘述。

    和数字签名一样我在梳理这个流程时有下面几点疑惑:

  • 假设数字证书被伪造了呢?

    答案:是的,传输中数字证书有可能被篡改。因此数字证书也是经过数字签名的,是不是感觉很绕貌似陷入了“鸡生蛋蛋生鸡”,我保证这是最后一个蛋- - !上文说道数字签名的作用就是验证数据来源以及数据完整性!B收到邮件后可以先验证这份数字证书的可靠性,通过后再验证数字签名。

  • 要是有1万个人要给B发邮件,难道B要保存1万份不同的CA公钥吗?

    答案:不需要,CA认证中心给可以给B一份“根证书”,里面存储CA公钥来验证所有CA分中心颁发的数字证书。CA中心是分叉树结构,类似于公安部->省公安厅->市级派出所,不管A从哪个CA分支机构申请的证书,B只要预存根证书就可以验证下级证书可靠性。

  • 如何验证根证书可靠性?

    答案:无法验证。根证书是自验证证书,CA机构是获得社会绝对认可和有绝对权威的第三方机构,这一点保证了根证书的绝对可靠。如果根证书都有问题那么整个加密体系毫无意义。

举个栗子

上面一直在说虚拟场景,下文举个实际例子看看数字签名+数字证书如何验证文件的来源,以及文件的完整性。比如下载文件:我们开发中一般是服务端给文件信息加上md5,客户端下载完成后校验md5来判断文件是否损坏,这个其实就是简单的校验机制,而很多正规企业比如google都会给官方软件签署数字签名和证书,而windows已经预置了很多CA根证书:

image.png

然后看下我之前从网上下载的Chrome.exe,右键属性,通过鼠标点击一步验证:

image.png

Google Inc就是google从CA中心申请的数字证书。这样看来,这个软件确实来源于google官方,并且文件完整。接下来我干点坏事,用notepad打开这个exe文件并且篡改里面的内容(修改二进制数据,09 改为33),保存:

image.png

再看下数字签名还正常吗?

image.png

文件被篡改导致数字签名无效,数字证书没有问题。

https简单介绍

数字签名和数字证书可以用于文件,当然也能用于html网页数据。本人没有https相关开发经验,故不做深入探讨只是简单介绍下。

  • http的安全缺陷
  1. 无法验证服务端的身份
  2. 无法保证数据完整性
  3. 无法保证数据传输不被窃听

而https就是专门解决这三个问题,https使用数字签名+数字证书解决了前2个问题,很多大型网站比如baidu.com都会采用https协议,网址左侧会出现绿色加锁标识:

image.png

点击可以查看证书,另外浏览器都会内置CA根证书,来对这些网站的服务器证书进行校验。

然后,再用SSL协议对传输通道加密,保证数据传输不被窃听,这个SSL加密原理分为很多步骤不在本文讨论范围。

总结

全文比较深入地探讨了非对称加密,数字签名和数字证书的原理,最后引出https的简单介绍,如有差错尽请指正。

作者:08_carmelo
链接:https://www.jianshu.com/p/4932cb1499bf
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文地址:https://www.cnblogs.com/renjiaqi/p/10344488.html

时间: 2024-11-04 14:50:52

通俗理解数字签名,数字证书和https的相关文章

安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS

一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. 对称加解密的过程如下: 发送端和接收端首先要共享相同的密钥k(即通信前双方都需要知道对应的密钥)才能进行通信.发送端用共享密钥k对明文p进行加密,得到密文c,并将得到的密文发送给接收端,接收端收到密文后,并用其相同的共享密钥k对密文进行解密,得出明文p. 一般加密和解密的算法是公开的,需要保持隐秘的是密钥k,流行的对称加密算法有:DES,Triple-DES,RC2和RC4 对称加密的不足

转: 数字证书原理 https 完整过程解析

点评: 讲的非常的详细与全面,值得一看. 转: http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书.如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出! 1.基础知识

聊聊数字证书,你所理解的数字证书是什么?

谈谈我对数字证书的理解吧: 有一个朋友想做微信H5支付,腾讯强制安装HTTPS协议,所以第一次接触到了SSL证书.他有做过IOS发布,但是证书是别人去弄的,他一般是有人去弄,他就不去深想了.但是这次自己做微信支付,服务器并没有使用什么webserver框架,而是完全自己开发,所以对于证书的使用必须完全靠他从头开始一步步来,所以只好花费很久时间来研究了. 数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字×××,而是身份认

公钥 私钥 数字签名 数字证书

经常会听到公钥和私钥的概念,今天来讨论一下我对公钥和私钥的理解. 公钥和私钥是非对称加密的一种,有别于对称加密中,双方都持有相同的密钥,非对称加密,加解密双方持有不同的密钥,公开给对方的密钥被称为公钥,自己保留的密钥 被称为私钥.由公钥加密的内容只有私钥能解开,反之,由私钥加密的内容只能被公钥解开. 那么,公钥和私钥的用处在哪里呢.首先来了解一下对称加密,对称加密双方都持有相同的密钥,只要得不到密钥就解不开密文,但这是建立在双方都互相信任的基础上, 如果两边都可能存在不信任,那么随便把密钥交给对

数字签名 数字证书

数字签名原理简介(附数字证书) 首先要了解什么叫对称加密和非对称加密,消息摘要这些知识. 1. 非对称加密 在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密.同时,一般一个密钥加密,另一个密钥就可以解密. 因为公钥是公开的,如果用来解密,那么就很容易被不必要的人解密消息.因此,私钥也可以认为是个人身份的证明. 如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密. 2.消息摘要

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

英文原文地址: http://www.youdzone.com/signature.html 若下文有任何错误,请告知我,谢谢.[email protected] 主角介绍:Bob and Alice 提起RSA加密算法,公钥和私钥,多数文章都要使用Bob和Alice这两位人物.他们的创造者名叫Rivest,是RSA之父.他为了在避免在描述中使用A和B,就以这两个字母开头,创建一男一女两个角色,就是我们在任何文章上都能看到的Alice和Bob了.这是一些题外话,下面就来进入我们的数字证书入门学习

IIS 6.0安装SSL数字证书实现https访问

https访问某个网站的时候,服务器端和客户端传输的数据有经过加密,不会被截取,比普通的http协议安全多了.下面我来介绍一下IIS6.0下SSL的配置,以实现https的访问.有详细的过程截图说明.      1.进入网站属性,选择目录安全性,然后点击服务器证书进行证书的配置: 2.创建证书,大家到这里申请免费证书,点击继续去申请. https://testca.netca.net/apply_srv/srv_root.asp 现在不好用了 3.填写完服务器的基本信息之后,然后输入C盘下cer

数字签名,数字证书,CA认证等概念理解

本文将介绍数字签名,数字证书以及CA相关知识. 加密相关知识可见我的上一篇博文:http://watchmen.blog.51cto.com/6091957/1923426 本文参考文献引用链接: 1.https://www.zhihu.com/question/25912483 2.https://blog.jorisvisscher.com/2015/07/22/create-a-simple-https-server-with-openssl-s_server/ 3.https://zh.

数字签名与数字证书

数字签名: 将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要.在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符.这样就保证了报文的不可更改性. 将该报文摘要值用发送者的私人密钥加密,然后连同原报文一起发送给接收者,而产生的报文即称数字签名 数字证书: 数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证.它是由一个由权威机构-----CA机构,又称为证书