文章目录
1、认证概述
在进行密钥分发的时候,如果没有身份认证,密钥的分发经常是不安全的。在通信过程中不但需要认证通信伙伴的身份,还需要确保消息在传输的过程中没有被修改、插入、删除或重放,即确认消息的完整性
认证是一种不同于保密的安全机制,也是一种安全服务
- 用来防止恶意第三方冒充通信中的一方欺骗通信伙伴
- 用来防止通信消息被伪造、被篡改
认证包含了两部分
- 身份认证(确认消息源)
- 消息完整性认证(确认消息是源发出的消息,内容没有改变、消息顺序没有改变,产生消息的时间等所有属性都没有改变)
加密与认证的区别
数据保密性
使用加密的安全机制,保护数据免于非授权泄露
认证
使用一些安全机制,保证通信实体是它所声称的实体,保证通信内容是发送者发出的内容
- 对等实体认证:用于逻辑连接时连接的实体的身份提供可信性
- 数据源认证:保证收到的信息来源是声称的来源
2、散列函数(Hash)
2.1、Hash的概念
Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法
变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数
2.2、Hash的特点
散列函数必须具备两个基本特征:单向性、碰撞约束
- 单向性是指其的操作方向的不可逆性,在散列函数中是指只能从输入推导出输出,而不能从输出计算出输入
- 碰撞约束是指不能找到一个输入使其输出结果等于一个已知的输出结果 或者 不能同时找到两个不同的输入使其输出结果完全一致
2.3、Hash的应用
Hash算法在信息安全方面的应用主要体以下的3个方面
- (1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
- (2)数字签名
Hash算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对Hash值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
- (3) 鉴权协议
如下的鉴权协议又被称作挑战—认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。以上就是一些关于hash以及其相关的一些基本预备知识。
2.4、Hash函数需要满足的需求
- 1)输入可以为任意长度
- 2)输出数据长度固定
- 3)容易计算,给定任何x,容易计算出x的Hash值H(x)s
- 4)单向函数:即给出一个Hash值,很难反向计算出原始输入
- 5)碰撞性:即难以找到两个不同的输入会得到相同的Hash输出值(在计算上是不可行的)
2.5、Hash函数的安全要求
- 单向性:已知y ,找出x,使得Hash k (x)=y困难
- 弱碰撞:已知x ,找出x’≠x,使得Hash k(x’)= Hash k(x)困难
- 强碰撞:找出任意x’≠x,使得Hash k(x’)= Hash k(x)困难·困难性具有递增关系
3、数字签名
3.1、数字签名的概述
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串
这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法
一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用
3.2、数字签名的原理
- 所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换
- 这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造
- 它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名
- 主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名
- 普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等
- 特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等
- 与具体应用环境密切相关
3.3、数字签名的要求及具有的性质
对数字签名的要求:
1、必须有认证功能
2、必须能被第三方仲裁
3、必须能被验证
4、产生、识别、验证数字签名比较容易,保存副本可行
数字签名应该具有的性质
1、签名是对文档的一种映射,不同的文档内容所得到的映射结果是不一样的,即签名与文档具有――对应关系(精确性)
2、签名应基于签名者的唯一性特征(如私钥),从而确定签名的不可伪造性和不可否认性(唯一性)
3、签名应该具有时间特征,防止签名的重复使用(时效性)
3.4、数字签名的主要功能
网络安全,主要是网络信息安全,需要取相应的安全技术措施,提供适合的安全服务
数字签名机制作为保障网络信息安全的手段之一,可以解决伪造、抵赖、冒充和篡改问题
数字签名的目的之一就是在网络环境中代替传统的手工签字与印章,有着重要作用
- 防冒充(伪造)
私有密钥只有签名者自己知道,所以其他人不可能构造出正确的
- 可鉴别身份
由于传统的手工签名一般是双方直接见面的,身份自可一清二楚。在网络环境中,接收方必须能够鉴别发送方所宣称的身份
- 防篡改(防破坏信息的完整性)
对于传统的手工签字,假如要签署一份200页的合同,是仅仅在合同末尾签名呢?还是对每一页都签名?如果仅在合同末尾签名,对方会不会偷换其中的几页? 而对于数字签名,签名与原有文件已经形成了一个混合的整体数据,不可能被篡改,从而保证了数据的完整性
- 防重放
如在日常生活中,A向B借了钱,同时写了一张借条给B,当A还钱的候,肯定要向B索回他写的借条撕毁,不然,恐怕他会再次用借条要求A还钱。在数字签名中,如果采用了对签名报文添加流水号、时间戳等技术,可以防止重放攻击
- 防抵赖
如前所述,数字签名可以鉴别身份,不可能冒充伪造,那么,只要保存好签名的报文,就好似保存好了手工签署的合同文本,也就是保留了证据,签名者就无法抵赖。那如果接收者确已收到对方的签名报文,却抵赖没有收到呢? 要预防接收者的抵赖。在数字签名体制中,要求接收者返回一个自己的签名表示收到的报文,给对方或者第三方或者引入第三方机制。如此操作,双方均不可抵赖
- 机密性(保密性)
手工签字的文件(如同文本)是不具备保密性的,文件一旦丢失,其中的信息就极可能泄露。数字签名可以加密要签名消息的杂凑值,不具备对消息本身进行加密,当然,如果签名的报名不要求机密性,也可以不用加密
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者用自己的公钥解密被加密的摘要信息,然后用Hash函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性
数字签名是个加密的过程,数字签名验证是个解密的过程
3.5、数字签名的实现方法
数字签名算法依靠公钥加密技术
来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以自由发布,但私钥则秘密保存;还有一个要求就是要让通过公钥推算出私钥的做法不可能实现
普通的数字签名算法包括三种算法:
- 密码生成算法
- 标记算法
- 验证算法
数字签名技术大多基于哈希摘要和非对称密钥加密体制来实现
如果签名者想要对某个文件进行数字签名,他必须首先从可信的第三方机构(数字证书认证中心CA)取得私钥和公钥,这需要用到PKI技术
哈希算法的数字签名与验证
- 哈希函数是一种“压缩函数”
- 利用哈希函数可以把任意长度的输入经由
散列函数算法
变换成固定长度的输出,该输出的哈希值就是消息摘要,也称数字摘要 - 在正式的数字签名中,发送方首先对发送文件采用哈希算法,得到一个固定长度的消息摘要( Message Digest)
- 再用自己的私钥( Secret key,SK)对消息摘要进行签名,形成发送方的数字签名
- 数字签名将作为队件和原文一起发送给接收方
- 接收方首先用发送方的公钥对数字签名进行解密得到发送方的数字摘要
- 然后用相同的哈希函数对原文进行哈希计算,得到一个新的消息摘要
- 最后将消息摘要与收到的消息摘要做比较
具体过程如图所示
基于非对称密钥加密体制的数字签名与验证
- 发送方首先将原文用自己的私钥加密得到数字签名,然后将原文和数字签名一起发送给接收方
- 接收方用发送方的公钥对数字签名进行解密,最后与原文进行比较