5.2 消息认证 – lmn
5.2 消息认证
0x01 消息认证定义
首先我们看一下百科给出的定义:
消息认证(message authentication)
验证消息的完整性,当接收方收到发送方的报文时,接收方能够验证收到的报文是真实的和未被篡改的
- 验证信息的发送者是真正的而不是冒充的,即数据起源认证
- 验证信息在传送过程中未被篡改、重放或延迟等
0x02 消息认证函数
Hash认证:利用单向散列函数进行认证
单向散列函数的性质:
- 输出的长度固定
- 能快速计算出散列值(消息越长计算时间越长)
- 消息不同散列值也不同(只有1比特的改变,也会很高概率的产生散列值
- 具备单向性(可根据消息计算散列值,但不能通过散列值反算消息)
常见的MD5就具备这些特性,MD5的长度为128位,不可逆,并且安全性比较好,但会通过碰撞得到MD5
详细可参考我的文章:
https://www.yuque.com/tidesec/grghkw/wqg84z
0x03 消息认证码
消息认证码(MAC),是用于检测对消息的篡改,加密类密码只能是明文本身进行加密,但是无法判断消息是否被篡改
消息认证流程
- Alice与Bob拥有一个相同的密钥K
- 当Alice向Bob发送消息时,将消息m与实用MAC韩式计算得到的MAC值一起发送给Bob
- Bob通过判断消息m的MAC指与传输过来的MAC值进行判断,如果不匹配则说明消息被篡改
MAC函数将密钥K与消息m进行运算,得到 MAC(K,m),MAC值也称为标签
理想MAC
尼尔斯·弗格森的密码工程定义了理想的MAC的样子:
“理想的 MAC 函数是一个从所有可能的输入到 n 位输出的随机映射”
例如我们常见的md5
限制更强的标准定义是攻击者选择 n 个不同的消息然后得到每个消息对应的 MAC 攻击者必须提出与所选择的N个消息不同的第 N+1 各消息和与这个消息对应的有效的 MAC 值
CBC-MAC
将一组分组密码转化为对消息 M 采用CBC模式进行加密,从而只保留密文的最后一个分组
CBC-MAC攻击:例如碰撞攻击
if: CBC-MAC(a) = CBC-MAC(b)
CBC-MAC(a||c) = CBC-MAC(b||c)(c is any)
优点使用与分组密码加密模式相同类型的计算
HMAC
首先对消息进行一次下列运算江叔叔的结果与必要再进行三的运算
python 实现HMAC
import hmac
m = b'texttexttexttext'
Key = b'secret'
h = hmac.new(Key, m, digestmod='MD5')
print(h.hexdigest())
GMAC
是针对128位的分组密码进行消息认证此函数输入密钥瞬时值以及带认证的消息这个瞬时值只用一次
0x03 数字签名
数字签名就像电子“指纹”,消息以编码的形式,数字签名将签名者与记录交易中的文档安全地关联起来,数字签名使用一种标准的、公认的格式,称为公钥基础设施 (PKI),以提供最高级别的安全性和普遍接受性,它们是电子签名(eSignature)的特定签名技术实现
电子签名
电子签名(eSignatures)的广泛类别包括许多类型的电子签名,该类别包括数字签名,它是电子签名的特定技术实现
类似于签名,可以验证身份,签名的时候用私钥,验证签名的时候用公钥
公钥加密系统允许任何人在发送信息时使用公钥进行加密,接收信息时使用私钥解密,消息的接收方可以通过数字签名来防止所有后续的抵赖行为
References:
https://blog.csdn.net/qq_41137136/article/details/86434974
https://blog.csdn.net/qq_45746876/article/details/121036042?spm=1001.2014.3001.5502
请登录后查看回复内容