数字签名及散列

一、数字签名

1.简介

如书信或文件是根据亲笔签名或印章来证明其真实性的。而计算机网络中,则使用数字签名。

实现如下三种功能:

1)接收者能够核实发送者对报文的签名。也就是说,接收者能够确信该报文的确是发送者发送的。其他人无法伪造对报文的签名。这叫做报文鉴别

2)接收者确信所收到的数据和发送者完全一样而没有被篡改过。这叫做报文的完整性

3)发送者事后不能抵赖对报文的签名。这叫做不可否认

2.数字签名及验证

发送方使用自己的公钥进行数字签名;接收方使用发送方的公钥进行验证。

3.数字签名生成流程

由于对较长的报文进行数字签名,会对计算机造成非常大的负担,因此需要找出一种非常简单的方法对报文进行鉴别

即使用密码散列函数(摘要),后面进行介绍

1)数字签名过程:

将待发送信息原文做摘要

发送方使用自己的私钥对摘要进行签名

签名附在信息原文后面一起发送

2)验证数字签名:

收到签名数据包

对信息部分进行摘要

对签名部分用发送方公钥解密,得到摘要

比较两个摘要是否相同,相同则数字签名有效(原文信息一旦被篡改,生成相同摘要的概率非常低)

4.为什么数字签名具有上述三种功能?

1)报文鉴别:除发送方自己之外,没有人拥有它的私钥,所以除发送方外,没有人能产生用发送方私钥进行数字签名的密文;

2)报文的完整性:若其他人篡改过报文,由于无法得到发送方的私钥而对报文进行数字签名,那么,接收方利用发送方的公钥对接收到的报文进行数字签名认证,则得到不可读的报文,就知道收到的报文被篡改过;

3)不可否认:发送方要想抵赖发送报文给接收方,接收方可把报文及密文出示给进行公证的第三者,第三者很容易去证实发送方确实发送报文给接收方。

5.安全性

数字签名的安全性和有用性取决于两个关键因素:

用户私钥的保护(没有其他人能拥有发送方自己的私钥)

安全的哈希函数

最常见的安全哈希函数:

MD5:128bit校验和

SHA:160bit校验和

哈希函数是否安全:

函数是单向的

创建两条经过函数计算后获得相同校验和的信息非常困难

二、密码散列函数

1.简介

两个特点:

输入长度可以很长,但输出长度固定,且较短;

单向函数,即计算上,不可能找到两个不同的报文,有相同的密码散列函数输出(摘要)

也就是说,若网络入侵者截获了摘要,也无法伪造出一个报文,使得该报文的摘要与原报文的摘要相同,即保护了报文的完整性

2.完整性验证原理

单向摘要函数:信息原文的数字化摘要,不能根据概要推出原文

摘要验证:对接收到的信息重做摘要,比较此摘要与原摘要

3.两种密码散列函数

(1)MD5(报文摘要的第5个版本,Message Digest 5)

以任意长度的报文作为输入,产生一个128bit的报文输出

MD5已被中国学者王小云团队证实是可逆的,即找到了一对报文,具有相同的MD5报文摘要

最终被SHA所取代

MD5算法的大致流程:

1)先把任意长的报文按模2^{64}计算其余数(64位),追加在报文的后面;

2)在报文和余数之间填充1~512位,使得填充后的总长度为512的整数倍。填充的首位是1,后面都是0;

3)把追加和填充后的报文分割为一个个512位的数据块,每个512位的报文数据再分成4个128位的数据块依次送到不同的散列函数进行4轮运算。每一轮又都按32位的小数据块进行复杂的运算。一直到最后计算出MD5报文摘要代码。

(2)SHA-1(安全散列算法,Secure Hash Algorithm)

总体思路与MD5有相似之处

以任意长度报文输入,160bit输出(比MD5的128bit多了25%)

SHA-1也是可攻破的,后被SHA-2和SHA-3所取代

三、完整流程

网上银行、电子商务使用的验证流程:

A用户:

利用哈希函数获得明文的信息摘要1,利用A的私钥对摘要1进行数字签名;
将“明文+数字签名+A的数字证书”,以某种对称密钥进行加密,获得密文;
利用B的公钥对此对称密钥进行加密,获得数字信封;
将“数字信封+密文”,发送给B。

B用户:

将“数字信封+密文”,拆开;
利用B的私钥进行解密,还原出需要的对称密钥;
利用此对称密钥对密文进行解密,获得明文信息;(下面考虑能否信任这个明文,即该明文是否被篡改)
对此明文进行哈希函数运算,得到信息摘要2;
并进行数字签名验证,以A的数字证书(即A的公钥)操作,还原出信息摘要1;
将信息摘要1与信息摘要2进行比较,若相同,则传送成功,中间未发生错误。

问题:数字证书是怎么生成的?证书的安全性如何保障?见下篇。

四、鉴别

鉴别是要验证通信的对方确实是自己所要通信的对象,而不是其他的冒充者,并且所传送的报文是完整的,没有被其他人篡改过

与授权不同,授权涉及的是所进行的过程是否被允许(如是否可对某文件进行读或写)

可把鉴别细分为两种:

报文鉴别:鉴别所收到的报文的确是报文的发送者所发送的,而不是其他人伪造的或篡改的,包含端点鉴别和报文完整性鉴别

实体鉴别:仅仅鉴别发送报文的实体,实体可以是一个人,也可以是一个进程,即端点鉴别

区别:

报文鉴别是对每一个收到的报文都要鉴别报文的发送者(前面数字签名部分,是对每个报文的鉴别)

实体鉴别是在系统接入的全部持续时间内对和自己通信的对方实体只需验证一次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章