数字签名和数字证书

今天,我读到一篇好文章

它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。

====================================================

数字签名是什么?

原文网址:http://www.youdzone.com/signature.html

1.

clip_image001

鲍勃有两把钥匙,一把是公钥,另一把是私钥。

2.

clip_image002

鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

3.

clip_image003

苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果。

4.

clip_image004

鲍勃收信后,用私钥解密,看到信件内容。

5.

clip_image005

鲍勃给苏珊回信,写完后用Hash函数,生成信件的摘要(digest)。

6.

clip_image006

然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

7.

clip_image007

鲍勃将这个签名,附在信件下面,一起发给苏珊。

8.

clip_image008

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

9.

clip_image009

苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

10.

clip_image010

复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

11.

clip_image011

苏珊发现,自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

12.

clip_image012

鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

13.

clip_image013

苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

14.

clip_image014

下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。

15.

clip_image015

首先,客户端向服务器发出加密请求。

16.

clip_image016

服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

17.

clip_image017

客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

18.

clip_image018

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

19.

clip_image019

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

20.

clip_image020

果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

 

 

 

 

数字签名(代码签名)流程


Authenticode : 这里
翻译为数字认证代码。
code sign : 字面的翻译为代码签名,但是通常的
我们称为数字签名,以下的文中均称为数字签名。



一 数字认证码
如果你是
软件开发人员,你可能已经知道windows系统一些浏览器(例如IE,Firefox)使用一种称为数字认证代码的技术来标识软件的发行商,来检查软件没有被病毒影响。如果你的软件没有用数字认证代码签名,用户将会收到一个警告“此软件发行商不能被成功验证,你是否要继续运行此软件“,很多的用户为了安全起见将放弃对此软件的使用。

如果你的软件是
提供给专业的人员使用,结果肯能会更糟。许多公司IT安全策略禁止没有用数字认证码签名的软件的运行。

同时
微软Windows也使用数字签名证书来判断潜在的恶意软件。如果你的setup.exe没有进行数字认证证书的签名,你的软件的名誉将遭受损害。

在Vista系统增加UAC之后,情况变的更糟,如果你的软件没有使用数字认证证
书签名,且在运行时需要管理员的权限,则会出现警告对话框”不可识别的程序想访问你的计算机“,这个时候很多的用户可能认为是病毒,会禁止使用你的软件。

二 数字认证码的
原理

数字签名代码是一种技术,它使用数字证书来识别软件的发布商和使用hash算法来确保软件的完整性。数字签名使用公共密匙签名书法被创建,它使用两种不同的密匙:公共密匙和私有密匙,我们称其为密匙对。私有密匙一般为拥有者所有,公有密匙对所有的人都可见。


数字签名的过程本质上为:

签名软件对要签名的软件创建hash;

使用发布者的私有密匙来加密软件的hash;

被加密的hash和发布者的数字证书被插入到要签名的软件;


数字签名的验证过程本质上为:

用户对要验证的软件创建hash;

使用发布者的公共密匙来解密被加密的hash;

比较解密的hash和新获得的hash,如果匹配说明签名是正确的,软件没有被修改过;


三 数字签名
数字签名是对软件进行标识的一个流程,它通过对软件增加了发布商的信息来检查软件在发布后是否被修改或受病毒影响。在软件出售前进行签名已经成为了
行业范围的专业实践。随着用户的安全意识的提高,现在越来越多的用户限制下载未签名的软件,因此作为专业的软件公司,在软件出售前进行签名已经成为必不可少的一步。

要进行数字签名,需要以下准备:
1)数字证书和密码;
2)数字签名
工具
3)时间戳
服务器URL地址


四 数字签名工具
数字签名工具, 微软提供了两套数字签名工具,

1)signcode.exe, 从1998年开始使用,随.NET Framework SDK发布。

signcode.exe 数字签名工具

makecert.exe 创建数字证书

cert2spc.exe 将数字证书转化为软件发布者证书格式


2)signtool.exe,随visualstudio 2005及其以后的版本发布。

signtool.exe 数字签名工具

makecert.exe 创建数字证书

cert2spc.exe 将数字证书转化为软件发布者证书格式

pvk2pfx.exe(pvkimprt.exe) 将私有的密匙和软件发布者证书合并为pfx文件,此文件将被signtool.exe使用


上面2中工具的不同是signcode.exe需要输入私有密匙和软件发布者证书(pvk和spc文件),signtool.exe只需要输入由pvk和spc合并产生的一个个人信息交互文件(pfx)。


五 获得数字证书

数字证书,你可以创建自己的数字证书来测试数字签名的流程,但是正式的软件发布,你需要向可信赖的证书颁发机构购买数字证书和密码,例如你可以向以下的证书机构购买Comodo, Globalsign, Thawte and Verisign。


创建自己的数字证书(用来测试)

使用如下命令来创建自己的数字证书:
makecert.exe -sv mykey.pvk -n "CN=Acme Software Inc." mycert.cer你可以将Acme Software Inc.替换为你自己公司的名字。如果mykey.pvk不存在的话,你会要求输入私有密匙的密码,密码可以为空。安全起见最好设置密码,否则别人拿到你的私有密匙后就可以签名了。在上面的命令后,产生了2个文件mykey.pvk和mycert.cer。接下来需要将数字证书(cer)转化为软件发布商证书(spc),命令如下:cert2spc.exe mycert.cer mycert.spc此过程中需要输入私有密匙的密码,创建完成后应该会生成mycert.spc文件,当数字签名时mycert.cer文件是不需要的。

六 对软件数字签名
时间戳
服务器,你可以选择下列之一,
- http://timestamp.verisign.com/scripts/timstamp.dll
- http://timestamp.globalsign.com/scripts/timstamp.dll
- http://timestamp.comodoca.com/authenticode


1)使用signcode.exe,如下:
signcode.exe -t <timestamp
URL> -spc mycert.spc -v mykey.pvk "<file to be signed>"进行数字签名的文件可以是.exe, .dll, .ocx 或者是其他的可执行文件。

2)使用signtool.exe,如下:

如果你没有pfx文件,需要使用以下的命令来将pvk和spc文件合并为pfx,如果没有设置密码的话必须使用pvkimprt.exe来合并。pvk2pfx.exe -pvk mykey.pvk -pi <password> -spc mycert.spc -pfx mycert.pfx -po <password>pvkimprt.exe -pfx mycert.spc mycert.pvksigntool.exe sign /f mycert.pfx /p <password> /t <timestamp URL> /v "<file to be signed>"
以下是使用signtool.exe签名的一个实例:
signtool.exe sign /f mycert.pfx /p <password> /t <timestamp URL> /v "<file to be signed>"

Here is the Sample Output:
The following certificate was selected:
Iss
ued to: SID Software Inc.
Issued by: Thawte Code Signing CA
Expires: 10/16/2011 2:17:15 AM
SHA1 hash: 4374SD894388B9H456E206124G06D9AV1535G12E

D
one Adding Additional Store

Attempting to sign: jservice.exe
Successfully signed and timestamped: jservice.exe

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

 

数字签名是一种用于验证和确保数字数据完整性、认证身份和防止篡改的技术。它基于公钥密码学的原理。数字签名使用私钥对数据进行加密生成签名,然后使用对应的公钥进行验证签名的有效性。 数字签名的过程包括以下步骤: 1. 生成密钥对:首先,需要生成一对密钥,包括一个私钥和一个公钥。私钥由签名者保留,公钥可以公开发布。 2. 数据签名:签名者使用私钥对要签名的数据进行加密生成签名。这个签名是唯一的,任何对数据进行篡改都会导致签名验证失败。 3. 签名验证:接收者使用签名者的公钥对接收到的数据和签名进行解密和验证。如果解密后的签名与解密后的数据匹配,说明数据完整且未被篡改。 数字证书是用于证明公钥的真实性和拥有者身份的电子文档。数字证书由权威机构(如数字证书颁发机构)颁发,其中包含公钥、证书持有者信息和颁发机构的数字签名数字证书的作用是确保公钥的合法性和信任,以及提供验证身份的方式。它可以用于安全通信、身份认证、数据完整性保护等多个领域。 在使用数字证书进行数字签名时,签名者的公钥会包含在数字证书中,接收者可以使用数字证书中的公钥对签名进行验证。数字证书数字签名可以保证证书的真实性和可靠性。 总结来说,数字签名是一种通过加密和解密技术,用于验证数据完整性和身份认证的方法。而数字证书则是一种包含公钥、身份信息和数字签名的电子文档,用于证明公钥的真实性和拥有者身份。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值