数字签名与数字证书技术简介(二)

信息摘要、数字签名

基于上篇文章,我们介绍了的非对称密钥算法:

http://blog.csdn.net/u014419512/article/details/26290821

现在我们可以继续我们的场景:

假设有一天,Alice收到了一份署名为Bob的文件。Alice希望能够确认这份文件一定是来自Bob;另外Alice希望能够确信,这份文件在传输过程中并没有被它人篡改。那么基于非对称密钥算法我们应该怎么做?

确认文件一定来自于Bob,其实就是Bob无法否认自己发送过这份文件。信息安全中称作不可抵赖性;另一方面,确信文件并没有中途被篡改,则称作不可篡改性

在非对称密钥算法中提到,公钥加密的内容使用私钥可以解密。同样的,基于私钥加密的内容使用公钥也可以解密,两者一一对应。因此我们可以很容易想到。如果Bob利用自己手里的私钥对文件进行加密后,传输给AliceAlice再通过公钥库中Bob的公钥进行解密,则可以证明文件一定是由Bob发出(由于只有Bob持有私钥)。另外,因为传输的是密文,如果能够使用公钥解密,同时也证明了文件并没有中途被篡改。这样的做法其实已经同时满足了不可抵赖性和不可篡改性。

然而,由于传输的文件可能很大,为了证明文件的不可抵赖性和不可篡改性,需要对整个文件进行加密,由于非对称算法效率较低,这样做的代价太大。因此常规的做法是用到信息摘要数字签名的方式。

所谓信息摘要,其实就是某种HASH算法。将信息明文转化为固定长度的字符,它具有如下特点:

无论输入的消息有多长,计算出来的消息摘要的长度总是固定的

 

用相同的摘要算法对相同的消息求两次摘要,其结果必然相同;

 

一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也几乎不可能相同;

 

消息摘要函数是单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息

 

好的摘要算法,没有人能从中找到碰撞,虽然碰撞是肯定存在的。即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,无法找到两条消息,是它们的摘要相同。

 

一般的,我们将信息的摘要也称作信息的指纹。如同指纹的含义,相同的信息一定会得相同的指纹,而仅通过指纹又无法还原出原始信息。目前主要的摘要算法有MD5SHA1

 

当有了信息摘要技术以后,基于BobAlice发送文件的场景,我们可以进行如下的操作:


第一步:

① Bob将原始的信息进行一次信息摘要算法,得到原始信息的摘要值;

 

② Bob使用自己的私钥,对该摘要值进行加密。得到信息摘要的密文;

 

③ Bob将原始文件和摘要值的密文一起发送给Alice

 

④ 一般的,我们将原始文件和摘要密文称作Bob对原始文件的签名结果。



第二步:

① 当Alice接收到Bob传输的信息(原始文件,信息摘要密文)后,使用Bob的公钥将摘要密文解密,得到信息摘要明文;

 

② 使用信息摘要算法,取原文的摘要信息,获取原始文件摘要信息;

 

③ Alice比较解密后的摘要信息和取得的摘要信息。如果相同,则可以证明文件一定由Bob发送,并且中途并没有经过任何篡改。一般将这个过程称作验签。

 

所谓数字签名,就是对原始文件的“指纹”进行了私钥加密。这样,即可保证文件的特征(摘要值)一定经过了私钥的加密。同时由于信息摘要的长度普遍不长(MD5128位,SHA1主要为256位),也并没有带来太大的开销。

如同对称密钥算法,在大部分开发语言中,基于非对称算法的数字签名,数字加密算法。也都进行了一定的封装。如下链接就比较详细的描述了基于JCE如何实现数字签名、加密、验证等:http://blog.csdn.net/centralperk/article/details/8538697

阅读更多

没有更多推荐了,返回首页