密码学消息鉴别

Posted Gzb1128

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码学消息鉴别相关的知识,希望对你有一定的参考价值。

信息安全

完整性
1.数据完整性:数据未被篡改或损坏。数据是不可否认的,发送方和接收方不能抵赖处理了数据。
2.系统完整性:系统未被非授权使用。
真实性
确认实体是它声明的,适用于用户、进程等等的合法的信息(是否真的需要)。

对于数据来说,是不存在认证和合法性校验的,所以数据的完整性只包括是否被篡改和损坏,是否被处理过。而需要将认证和合法性单独抽离出来作为一个抽象的方面。

通信系统典型攻击

数据机密性方面:窃听,业务流分析
消息鉴别方面:消息篡改(内容,顺序,时间),冒充
数字签名方面:接受者或发送者否认收到或者发送过消息。

消息鉴别

证实收到的消息来自可信的源并且未被篡改的过程。

目的:
1.验证发送者是真正的,不是冒充的,源识别。
2.验证信息的完整性,在传送过程中未被篡改。

鉴别系统

鉴别系统模型:

即发送方使用编码器,接收方使用译码器,攻击者可以截获信道中的鉴别文本。密钥通过安全信道发送给双方。

安全的鉴别系统需要满足:
1.接收方可以验证消息的完整性,合法性和真实性。(数据完整性以及真实性)
2.消息不能被抵赖。(数据完整性)
3.除了合法的发送者,其他人不能发送消息。(系统完整性)

鉴别编码器和译码器可以抽象成鉴别函数。函数要产生一个鉴别标识,和鉴别协议,让接受者可以完整消息鉴别。

鉴别函数分类

产生鉴别符的函数基本分成三类:
1.消息加密函数:用完整消息密文作为对信息的鉴别
2.散列函数:以一个变长的报文作为输入,输出固定长度的散列码(也叫报文摘要),是公开的函数。
3.消息鉴别码MAC:公开函数+密钥产生一个固定长度的值作为鉴别标识。

消息加密函数

对称密码的加密提供保密和鉴别(只有双方持有这对密钥)
非对称密码的加密分3种情况:
A用B公钥加密,B用B私钥解密:提供保密性,无法提供鉴别
A用A私钥加密,B用A公钥解密:由于任何人都可以用A的公钥解密,因此不提供保密性。提供鉴别和签名。
A用A的私钥加密,再用B的公钥加密,B先用B的私钥解密,再用A的公钥解密:B的公钥提供保密性、A的私钥提供鉴别和签名。

密码学散列函数

输入任意长度报文,产出固定长度的消息摘要。同时提供了错误检测的能力。也称为数字指纹。

散列函数常见用法:



总的来说,明文被加密了就提供了保密性,散列函数提供了消息鉴别,如果利用私钥加密来提供数字签名。需要注意,消息鉴别只是提供数据完整性的保证,更多的保证要看具体的算法。而数字签名真的只是一个签名的功能,说明是公钥对应的私钥用户提供了签名。为什么对称密码没有签名功能,首先这个签名就至少有2个人可以签,因此签名一定是一个非对称下的概念。

RSA数字签名算法

公钥KUe,n,私钥KRd,p,q
将消息划分成块,使得每块P<n
签名P时,计算 y = s i g ( P ) = p d ( m o d n ) y=sig(P)=p^d(modn) y=sig(P)=pd(modn)
验证签名时,计算 P ′ = y e ( m o d n ) = P P'=y^e(modn)=P P=ye(modn)=P
就和RSA加密算法差不多

弱点:
1.任何人可以对A的签名解密,已知明文攻击是容易的
2.如果有一组 ( x 1 , y 1 ) , ( x 2 , y 2 ) , 伪 造 ( x 1 x 2 , y ) (x_1,y_1),(x_2,y_2),伪造(x_1x_2,y) (x1,y1),(x2,y2)(x1x2,y)是容易的, y = y 1 y 2 y=y_1y_2 y=y1y2

解决办法:
引入散列函数并签名摘要。
验证时先用公钥解密散列函数起到签名验证,再计算明文的散列函数以鉴别。
用hash签名可以提高签名速度,不用泄露签名的信息(解密签名只能看见散列函数,不暴露明文),签名变换和加密变换分开,提供不同层次的抽象。

散列函数特性

需要保证散列函数不降低鉴别方案的安全性(因为散列函数相当于将信息降到了256维)。

如果攻击者有一个签名(x,y),其中y是x的散列值并签名后的值。如果攻击者找得到x’使得h(x)=h(x’),则(x’,y)也是一个合法的签名。
弱无碰撞:散列函数h是弱无碰撞的,是指给定消息x,计算上几乎找不到 x ′ ≠ x 且 h ( x ) = h ( x ′ ) x'\\neq x且h(x)=h(x') x=xh(x)=h(x),也称抗第二原像攻击(抗弱碰撞攻击)

如果攻击者找到了一对明文x,x’,使得h(x)=h(x’),则攻击者让A对x签名,这个签名同样对x’合法。
强无碰撞:称散列函数是强无碰撞的,是指无法在计算上找到一对x和x’使得h(x)=h(x’),也称抗强碰撞攻击
强无碰撞是为了对抗生日攻击方法的防御方法。生日攻击表明对于n的取值空间,大约取 n \\sqrt n n 个的随机变量就可以有一对随机变量碰撞在一起。

单向的:称散列函数是是单向的,是指计算h的逆 h − 1 h^-1 h1在计算上不可行,也称抗原像攻击

hash函数通用结构


即迭代计算hash值

散列算法

MD5,SHA-1,RIPEMD-160,SHA-2,SHA-3,SM3

MD5

即明文分块迭代处理,密文反馈机制

消息鉴别码MAC

利用明文和密钥生成一个固定大小的数据块,称为MAC或者消息校验和。有点类似带密钥的hash算法。

作用:
1.接受者确保信息未被改变
2.确信信息来自发送者
3.如果消息中包含顺序码,接受者可以保证消息的正常顺序。
因此MAC和散列函数类似提供了一个鉴别的功能。

分组密码CMAC算法

CBC-MAC

可以看到和分组对称密码中的CBC算法类似,因为MAC也是一个对称密码

类似的CFB-MAC

基于hash的HMAC算法

HMAC和hash算法是解耦的,这样可以使用任意的hash算法。

算法:

即HMAC生成消息H(K xor opad, H(K xor ipad, text)),即提供一个密钥K进去,异或来对齐密钥长度,先对明文做一次hash,再对密文做一次hash。

02.密钥学基本概念

2.1 密码学作用
密码学主要涉及信息加密、鉴别、完整性和抗抵赖的内容。
2.1.1 信息加密
有必要使用某种方法伪装明文以隐藏真正消息,这个伪装过程称为加密,加密后得到的信息称为密文。
技术分享图片
总是有人试图要从密文中使用各种手段恢复出明文是其中主要的原因。我们称这种行为为密码分析,自然这种技术叫做密码分析技术;而设计密码算法的技术则称为密码编码技术。
2.1.2 鉴别
鉴别能力就是指消息的接收者应该能够确认消息发送者确实为发送者本身,入侵者不可能伪装成他人。
2.1.3 完整性
完整性用来确保信息没有被修改,也可以防止假冒的信息。
完整性的解决方案主要是基于单向散列函数和加密算法。单向散列函数能够将一个大的文件映射成一段小的信息码,并且具有不同的文件映射成的信息码相同得分概率极小的性质。完整性一般是用来确保信息没有被修改,但是在发现信息被修改后,怎么进行恢复也是一件有趣的事情。
2.1.4 抗抵赖
密码学已经提供了技术上可以抗抵赖的解决方案,就是数字签名技术。
2.2 密码数学
2.2.1 随机数
如果有一个周期为2亿的随机数产生器,而一般来说使用的位数知识几千卫一下的量级,那么对于这几千位来说,可能跟一个真正的随机数产生器的输出看起来没有太多的区别,那么这个随机数序列就可以称为伪随机数。
2.3 密码算法
密码算法就是用于加密和解密的函数,本节介绍密码算法的基本概念、种类、评估标准和应用。
密码算法的目的主要就是为了保密信息,如果算法的保密性是基于算法本身的,这种算法称为有限制算法,如果算法的保密性不是基于算法本身,而是基于密钥的,那么属于无限制算法
对称加解密函数:
技术分享图片
技术分享图片
RSA加解密函数:
技术分享图片
技术分享图片
2.3.2 对称加密算法
对称加密算法又称为传统密码算法、但密钥算法或秘密密钥算法。
加密算法分类:
a.流加密算法又称为序列加密算法或序列密码,他每次只对明文中单个位或单个字节进行加密操作。这种算法的有点是能够实时进行数据传输和解密。
b.块加密算法又称为分组加密算法或分组密码,他每次对明文中的一组数据位进行加密操作。
2.3.4 算法安全性
密码分析是指在不知道密钥的情况下,得出明文或密钥的技术。密码分析针对的对象可能是密钥,也可能是密码算法本身。
攻击算法:
*数据复杂性:即攻击时需要的数据量
*计算复杂性:完成攻击计算所需要的时间或计算量
*存储量需求:进行攻击所需要的最大存储时间
2.4 密码通信协议
总结起来,基于对称加密算法的安全网络通信协议存在问题
*密钥必须秘密地进行分配,这通常只能采用物理的传输手段实现,对于自动化程序高和应用广泛的加密系统来说,这样做的代价将是不可接受的。
*一旦加密密钥丢失,那么获得密钥的攻击就有能力解密通信中的任何数据,并且可以假装成其中任何一方发送虚假信息而不被发觉。
*一旦加密密钥丢失,那么获得密钥的攻击者就有能力解密通信中的任何数据,并且可以假装成其中任何一方发送虚假信息而不被发觉。
*随着用户的增多,需要的密钥个数会成平方级迅速增长。
2.4.3 数字签名
1.数字签名的基本问题
a.签名值的信任。
b.签名不能伪造和抵赖
c.签名不能重用
d.被签名的文件不能改变
2.5 密钥交换协议
通常要生成一个临时密钥用于对信息进行加密,这个密钥成为会话密钥。
2.6 鉴别协议
鉴别是指确定一个人的身份,即确定一个人是否是他所宣称的身份。
2.6.1 基于口令的鉴别协议
口令是最常用和最常见的鉴别协议。
口令保密的两种方法:
a.一种是将口令采用对称加密算法进行加密后在数据库保存,然后在鉴别的时候对用户输入的口令作相同的运算,如果得出的值跟数据库保存的值一致,那么鉴别就通过。
b.一种是使用单向散列函数替代对称加密函数,其他过程都基本一样。

以上是关于密码学消息鉴别的主要内容,如果未能解决你的问题,请参考以下文章