你发送给朋友一条消息(内容:明天下午来我家吃饭),这一过程中你不想让除你朋友以外的人看到消息的内容,这就叫做消息的机密性,用来保护消息机密性的方式被叫做加密机制。
现在站在朋友的视角,某一天他收到了一封来信,他怎么知道消息是谁发给他的呢?(也许你想到了,签个名不就好了,但如果有人伪造我的签名给我朋友发消息怎么办),他怎么得知消息里面的内容是真实的呢?(万一有人篡改了消息内容:“后天早上来我家吃饭”)
这时候我们想确保对消息内容的真实性和完整性(比如没有被篡改),也想确保消息来源的真实性(是我的朋友发给我的,不是其他别的什么人)。那么这就需要一种方式来对消息进行处理,用来保护消息的完整性,内容真实性和来源真实性,这种方式被叫做消息认证!
一、什么是消息认证?
消息认证(Message Authentication),也称为数据源认证,是信息安全领域的一个关键概念,主要涉及验证接收到的数据是否真实无误地来源于声称的发送方,以及数据在传输过程中是否未被篡改。消息认证确保了信息的完整性和真实性,防止中间人攻击、重放攻击等安全威胁。
【注】拿上面的例子来说明重放攻击,比如我朋友上周已经来我家吃过饭了,这周我的朋友又收到了一条消息,和上周我发他的一模一样,因为是一模一样所以我的朋友自然也就不会怀疑,他屁颠屁颠的跑来我家吃饭,结果我说我没有发消息给他,他失落的回到家,发现家里被入室盗窃了。(这只是一种重放攻击所造成的损失的假设,实际上网络安全中重放攻击更多的是重放某个获取东西的请求,这样攻击者就能通过重放攻击得到只有授权用户才能得到的响应)
消息认证的目的:消息认证的主要目的是验证消息的完整性(完整性认证)和确认消息的来源(源点认证)。它确保消息在传输过程中未被篡改,并且来自声称的发送方。
【注】在消息认证之前,收发双发就已经通过某种方式建立了信任关系,并且共享了密钥。这里更确切的说,我可以和一群人建立信任关系,我们都共享了密钥,所以消息认证并不能让我知道我收到的消息到底是谁发来的,我只知道是我信任的人(持有密钥的人)发给我的。
二、实现消息认证的方式
(1)消息认证码 MAC
消息认证码(Message Authentication Code,简称MAC)是消息认证的一种实现方式,它通常基于共享密钥,由发送方使用密钥和消息内容生成一个短的固定长度的值,然后将这个值附加在消息后面一起发送。接收方收到消息后,使用同样的密钥和消息内容重新计算MAC值,然后与接收到的MAC值进行比较,以此来验证消息的真实性和完整性。
MAC的主要特性包括:
-
完整性:MAC能够检测出传输过程中的任何更改,无论是无意的错误还是恶意的篡改。
-
真实性:由于MAC是使用共享密钥计算的,所以只有持有相同密钥的实体才能生成有效的MAC,这保证了消息来源于持有正确密钥的实体。因此消息的真实性问题转换为了如何安全的分发密钥。一旦密钥泄露那么也没有办法确认对方的真实性。
-
机密性:MAC本身并不提供对消息内容的加密,但是它可以与加密技术结合使用,以实现同时保护消息的隐私和完整性。
(2)消息检测码 MDC
消息检测码(Message Detection Code,简称MDC)是一种用于检测数据是否发生变化的校验码,但与消息认证码(MAC)不同的是,MDC不提供数据源的身份验证或保密性。
MDC主要用于检测数据在传输过程中是否发生了非故意的改变,例如由噪声、干扰或其他物理因素引起的错误。它不提供防止恶意篡改的功能,因为任何人都可以生成正确的MDC,只要他们有原始数据。