数字签名、数字证书

摘要:
由于网络环境的复杂性,我们无法保证通信双方是真实的,内容完整且未经修改,因此需要数字签名。数字签名与现实生活中的签名类似,具有以下两个功能:确认通信双方的真实身份,其他任何人都不能伪造;可以确认消息的完整性。

一、数字签名

1.1、为什么需要数字签名?

由于网络环境的复杂性,我们无法保证通信的双方是真是的,而且内容是完整的、没被修改过的,因此才需要数字签名。数字签名类似于现实生活中的签名,有以下两种功能:(1)确认通信双方的真实身份,别人假冒不了;(2)能确认消息的完整性。

它是基于非对称加密算法。

1.2、数字签名的流程

假如A和B进行通信。开始时A有两把钥匙:自己的公钥和私钥。A把自己的公钥公布出来,每个人都能看到。同理,B也如此。

1.2.1、B向A发送信息

B向A发送时,需要注意两点:

(1)需要让A知道确实是B自己发送的,而不是其他人伪造的。这就叫做数字签名。过程如下:

①由于只是验证身份,所以不需要像一片文档一样那么多内容,所以需要先针对文档生成一段短的字符串,一般用hash函数,生成一个32位的字符串,这叫做摘要;

②B用自己的私钥对摘要进行加密,得到摘要的密文,即:数字签名。因为B要验证自己的身份,所以必须要加密,而且只能用自己的私钥进行加密,而不是对方A的。

(2)对发送的文档进行加密。B就用A的公钥对文档进行加密,得到密文。

最后,B将签名密文+文档密文一起发送给A。

1.2.2、A解密密文+身份认证

A在得到签名、文档后,需要进行解密、身份认证的操作,A进行如下过程:

(1)A用自己的私钥对文档密文进行解密,得到文档的明文;

(2)A用B的公钥对签名密文进行解密,得到签名的明文(即:摘要),证明了确实是由B发过来的;

(3)A对文档的内容,使用相同hash函数,得到摘要,与(2)中的摘要进行对比,即可得知文档的内容有没有被修改过,证明了文档的完整性。

1.3、数字加密和数字签名区别

数字签名和数字加密的过程都是使用公开密钥体系,但实现的过程正好相反,使用的密钥对也不同。

    数字签名:使用的是发送方的密钥对,发送方用自己的私钥进行加密,接收方用发送方的公钥进行解密;这是一个一对多的关系,任何拥有发送方公钥的人都可以验证数字签名的正确性;

    数字加密:使用的是接收方的密钥对,这是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私钥的人才可能对信息解密;

另外:数字签名只采用了非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性;   

   数字加密采用了对称密钥加密算法和非对称密钥加密算法形结合的方法,它能保证发送信息的保密性。

 

二、数字证书

以上从数字签名的过程可以看出,它可以保证通信双方身份的正确性,但有可能出现这样一种情况。由于数字签名是由公钥、A发送给B的签名这两部分构成的,假如这两部分都被别人替换掉,该怎么办?比如:B保存的A的公钥被黑客C替换成C自己的了,那么C就可以假冒A和B进行通信了。这时候就需要数字证书了。

数字证书是由权威的认证机构颁发的证书:证书认证中心(certificate authority,简称CA),他保证了自己所颁发给网站A的公钥的正确性。数字证书的内容包括该证书的颁发机构、证书的拥有者、证书的有效期、公钥等,这些内容是由证书认证中心用自己的私钥加密得到的,通过证书认证中心自己公开的公钥即可认证网站A的身份。证书认证中心的证书是由更高一级的证书认证中心授权的,以此类推,直到根证书认证中心,我们假设根证书认证中心是可信的,因为没有办法认证根证书认证中心的身份的正确性。

如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出如下警告。

数字签名、数字证书第1张

如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。如下图。

数字签名、数字证书第2张

 
参考资料:
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
http://blog.csdn.net/hanxuemin12345/article/details/12843027

免责声明:文章转载自《数字签名、数字证书》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Cmder的安装.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android应用程序签名详解 简介

转自: http://blog.csdn.net/lyq8479/article/details/6401093   本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名...

Java-文件加密传输(摘要+签名)

Java-文件加密传输(摘要+签名) 文件加密传输其实就是将文件以二进制格式进行传输。其中加密文件主要由:源文件二进制文件、源文件数字摘要、数字签名、特征码等等组成。摘要可确认文件的唯一性,数字签名则是对摘要进行了加密。 本文主要记录使用RSA加密方式其中生成RSA密钥主要介绍二种方式: 1、安装openssl情况下使用Linux命令生成 2、Java代...

【转】Git详解之四 服务器上的Git

服务器上的 Git 到目前为止,你应该已经学会了使用 Git 来完成日常工作。然而,如果想与他人合作,还需要一个远程的 Git 仓库。尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心就很容易弄混其他人的进度。另外,你也一定希望合作者们即使在 自己不开机的时候也能从仓库获取数据 — 拥有一个更稳定的公共仓库十分有用。因此,更好...

关于Active控件的电子签名

两种方案:一是自己制作证书,客户端安装证书后就可以识别该控件;二就是买官方的喽,在国内找verisign的代理,负责各种电子签名,任何一台浏览器都可以识别该证书。该公司官方网址:http://www.verisign.com/products-services/security-services/code-signing/digital-ids-code-s...

使用SHA1、SHA2双证书进行微软数字签名

微软是第一个宣布了SHA-1弃用计划,在2016年之后Windows和IE将不再信任SHA-1证书。正好我们公司的数字签名也到期了,索性就重新申请了sha256和sha1的新数字证书,用来给产品签名。 这时就要把用了多年的自动签名脚本改为支持sha256和sha1双证书的格式。公司原使用signcode.exe和SignTool.exe两种方式进行签名,其...

密码学——网间数据加密传输全流程(SSL加密原理)

0.导言 昨天写了一篇关于《秘钥与公钥》的文章,写的比较简单好理解,有点儿像过家家,如果详细探究起来会有不少出入,今天就来详细的说明一下数据加密的原理和过程。这个原理就是大名鼎鼎SSL的加密原理,哦,对了,有人说上个月SSL刚爆出本年度最轰动的漏洞“心脏滴血”,可能危及全球好多互联网企业,那这个东西靠谱吗?其实,爆出漏洞的是SSL的一款产品openssl,...