计算机网络 鉴别

鉴别

  • 在信息的安全领域中,对付被动攻击的重要措施是加密,而对付主动攻击中的篡改和伪造则要用鉴别 (authentication)。
  • 报文鉴别使得通信的接收方能够验证所收到的报文(发送者和报文内容、发送时间、序列等)的真伪。
  • 使用加密就可达到报文鉴别的目的。但在网络的应用中,许多报文并不需要加密。应当使接收者能用很简单的方法鉴别报文的真伪。
鉴别与授权不同
  • 鉴别与授权 (authorization) 是不同的概念。
  • 授权涉及到的问题是:所进行的过程是否被允许(如是否可以对某文件进行读或写)。
鉴别分类
  • 可再把鉴别细分为两种。
  • 报文鉴别:即鉴别所收到的报文的确是报文的发送者所发送的,而不是其他人伪造的或篡改的。这就包含了端点鉴别和报文完整性的鉴别。
  • 实体鉴别:仅仅鉴别发送报文的实体。实体可以是一个人,也可以是一个进程(客户或服务器)。这就是端点鉴别。

报文鉴别

  • 许多报文并不需要加密,但却需要数字签名,以便让报文的接收者能够鉴别报文的真伪
  • 然而对很长的报文进行数字签名会使计算机增加很大的负担(需要进行很长时间的运算)。
  • 当我们传送不需要加密的报文时,应当使接收者能用很简单的方法鉴别报文的真伪。
1. 密码散列函数
  • 数字签名就能够实现对报文的鉴别。
  • 但这种方法有一个很大的缺点:对较长的报文(这是很常见的)进行数字签名会使计算机增加非常大的负担,因为这需要较多的时间来进行运算。
  • 密码散列函数 (cryptographic hash function)是一种相对简单的对报文进行鉴别的方法。
散列函数的两个特点
  1. 散列函数的输入长度可以很长,但其输出长度则是固定的,并且较短。散列函数的输出叫做散列值,或更简单些,称为散列
  2. 不同的散列值肯定对应于不同的输入,但不同的输入却可能得出相同的散列值。这就是说,散列函数的输入和输出并非一一对应,而是多对一的。
密码散列函数的特点
  • 在密码学中使用的散列函数称为密码散列函数
  • 特点:单向性
  1. 要找到两个不同的报文,它们具有同样的密码散列函数输出,在计算上是不可行的。
  2. 也就是说,密码散列函数实际上是一种单向函数 (one-way function)。
    在这里插入图片描述
2. 实用的密码散列函数 MD5 和 SHA-1
  • 通过许多学者的不断努力,已经设计出一些实用的密码散列函数(或称为散列算法),其中最出名的就是 MD5 和 SHA-1。
  • 报文摘要算法 MD5 公布于RFC 1321 (1991年),并获得了非常广泛的应用。
  • SHA-1比 MD5 更安全,但计算起来却比 MD5 要慢些。
MD5 算法
  • MD5 是报文摘要 MD (Message Digest) 的第 5 个版本。报文摘要算法 MD5 公布于 RFC 1321 (1991 年),并获得了非常广泛的应用。

  • MD5 的设计者 Rivest 曾提出一个猜想,即根据给定的 MD5 报文摘要代码,要找出一个与原来报文有相同报文摘要的另一报文,其难度在计算上几乎是不可能的。

  • 基本思想
    用足够复杂的方法将报文的数据位充分“弄乱”,报文摘要代码中的每一位都与原来报文中的每一位有关。

  • 计算步骤:

  1. 附加:把任意长的报文按模 264 计算其余数(64位),追加在报文的后面(长度项)。

  2. 填充:在报文和长度项之间填充 1~512 位,使得填充后的总长度是 512 的整数倍。填充的首位是 1,后面都是 0。
    在这里插入图片描述

  3. 分组:把追加和填充后的报文分割为一个个 512 位的数据块,每个 512 位的报文数据再分成 4 个 128 位的数据块。

  4. 计算:将 4 个 128 位的数据块依次送到不同的散列函数进行 4 轮计算。每一轮又都按 32 位的小数据块进行复杂的运算。一直到最后计算出 MD5 报文摘要代码(128 位)。

安全散列算法(SHA-1)
  • 安全散列算法 SHA (Secure Hash Algorithm)是由美国标准与技术协会 NIST 提出的一个散列算法系列。
  • SHA 比 MD5 更安全,但计算起来却比 MD5 要慢些。
  • 已制定 SHA-1、SHA-2、 SHA-3 等版本。
  • 基本思想:
  1. 要求输入码长小于 264 位,输出码长为 160 位。
  2. 将明文分成若干 512 位的定长块,每一块与当前的报文摘要值结合,产生报文摘要的下一个中间结果,直到处理完毕。
  3. 共扫描 5 遍,效率略低于 MD5,抗穷举性更高。
3. 报文鉴别码 MAC
  • MD5 实现的报文鉴别可以防篡改,但不能防伪造,因而不能真正实现报文鉴别。

  • 例如:
    (1) 入侵者创建了一个伪造的报文 M,然后计算出其散列 H(M ),并把拼接有散列的扩展报文冒充 A 发送给 B。
    (2) B 收到扩展的报文 (M, H(M )) 后, 通过散列函数的运算,计算出收到的报文 MR 的散列 H(MR)。
    (3) 若 H(M ) = H(MR),则 B 就会误认为所收到的伪造报文就是 A 发送的。

  • 为防范上述攻击,可以对散列进行一次加密。

  • 散列加密后的结果叫做报文鉴别码 MAC (Message Authentication Code)。

  • 由于入侵者不掌握密钥 K,所以入侵者无法伪造 A 的报文鉴别码 MAC,因而无法伪造 A 发送的报文。这样就完成了对报文的鉴别。
    在这里插入图片描述

  • 现在整个的报文是不需要加密的。

  • 虽然从散列H导出报文鉴别码 MAC 需要加密算法,但由于散列 H 的长度通常都远远小于报文 X 的长度,因此这种加密不会消耗很多的计算资源。

  • 因此,使用鉴别码 MAC 就能够很方便地保护报文的完整性。

实体鉴别

  • 实体鉴别与报文鉴别不同。
  • 报文鉴别是对每一个收到的报文都要鉴别报文的发送者。
  • 实体鉴别是在系统接入的全部持续时间内对和自己通信的对方实体只需验证一次
最简单的实体鉴别过程
  • 可以使用共享的对称密钥实现实体鉴别。
  • A 发送给 B 的报文的被加密,使用的是对称密钥 KAB 。
  • B 收到此报文后,用共享对称密钥 KAB 进行解密,因而鉴别了实体 A 的身份。 因为该密钥只有 A 和 B 知道。
    在这里插入图片描述
存在明显漏洞
  • 入侵者 C 可以从网络上截获 A 发给 B 的报文。
  • C 并不需要破译这个报文,而是直接把这个截获的、由A加密的报文发送给 B,使 B 误认为 C 就是 A。然后 B 就向伪装是 A 的 C 发送应发给 A 的报文。
  • 这种攻击被称为重放攻击 (replay attack)。C 甚至还可以截获 A 的 IP 地址,然后把 A 的 IP 地址冒充为自己的 IP 地址(这叫做 IP 欺骗),使 B 更加容易受骗。
使用不重数进行鉴别

不重数 (nonce) 就是一个不重复使用的大随机数,即“一次一数”。由于不重数不能重复使用,所以 C 在进行重放攻击时无法重复使用所截获的不重数。
在这里插入图片描述

使用公钥体制进行不重数鉴别

在这里插入图片描述

  • 在使用公钥密码体制时,可以对不重数进行签名鉴别。
  • B 用其私钥对不重数 RA 进行签名后发回给 A。A 用 B 的公钥核实签名。如能得出自己原来发送的不重数 RA,就核实了和自己通信的对方的确是 B。
  • 同样,A 也用自己的私钥对不重数 RB 进行签名后发送给 B。B 用 A 的公钥核实签名,鉴别了 A 的身份。
  • 公钥密码体制虽然不必在互相通信的用户之间秘密地分配共享密钥,但仍有受到攻击的可能

实例:

  • C 冒充是 A,发送报文给 B,说:“我是 A”。
  • B 选择一个不重数 RB,发送给 A,但被 C 截获了。
  • C 用自己的私钥 SKC 冒充是A的私钥,对 RB 加密,并发送给 B。
  • B 向 A 发送报文,要求对方把解密用的公钥发送过来,但这报文也被 C 截获了。
  • C 把自己的公钥 PKC 冒充是 A 的公钥发送给 B。
  • B 用收到的公钥 PKC 对收到的加密的 RB 进行解密,其结果当然正确。于是 B 相信通信的对方是 A,接着就向 A 发送许多敏感数据,但都被 C 截获了。
中间人攻击

在这里插入图片描述

  • A 向 B 发送“我是 A”的报文,并给出了自己的身份。此报文被 “中间人” C 截获,C 把此报文原封不动地转发给 B。B 选择一个不重数 RB 发送给 A,但同样被 C 截获后也照样转发给 A。
  • 中间人 C 用自己的私钥 SKC 对 RB 加密后发回给 B,使 B 误以为是 A 发来的。A 收到 RB 后也用自己的私钥 SKA 对 RB 加密后发回给 B,中途被 C 截获并丢弃。B 向 A 索取其公钥,此报文被 C 截获后转发给 A。
  • C 把自己的公钥 PKC 冒充是 A 的发送给 B,而 C 也截获到 A 发送给 B 的公钥 PKA 。
  • B 用收到的公钥 PKC (以为是 A 的)对数据加密发送给 A。C 截获后用自己的私钥 SKC 解密,复制一份留下,再用 A 的公钥 PKA 对数据加密后发送给 A。
  • A 收到数据后,用自己的私钥 SKA 解密,以为和 B 进行了保密通信。其实,B 发送给 A 的加密数据已被中间人 C 截获并解密了一份。但 A 和 B 却都不知道。

由此可见,公钥的分配以及认证公钥的真实性也是一个非常重要的问题。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值