密码学总体介绍与分析 2

消息认证码

单向散列可以解决篡改的问题,但消息是来自可信一方,还是来自伪装者,却无法解决。伪装者完全可以发送有害的信息和该信息的散列,而接受者却无法分辨

消息认证码技术可以解决此类问题。

消息认证码(Message Authentication Code),MAC。通过发送方与接收方共享密钥,通过该共享密钥对计算 MAC 值。

MAC使用步骤

消息认证码使用步骤:

  1. 发送方 A 与接收方 B 共享密钥
  2. 发送方 A 通过密钥计算 MAC 值 = MAC-A
  3. 发送方 A 发送原消息 + MAC-A
  4. 接收方 B 对原消息通过密钥计算 MAC 值 = MAC-B
  5. 接收方 B 比较 MAC-A 与 MAC-B,若一致则成功

MAC实现

MAC 实现的关键,是获得一串需要与共享密钥相关而且足够有区分度的串

因此,可以通过多种方式获得 MAC 值,如单向散列、分组密码截取最后一组作为 MAC 值、流密码、非对称加密等。

针对MAC问题

  • 密钥配送的问题,因为 MAC 需要发送者与接收者使用相同的密钥
  • 重放攻击,窃取某一次通信中的正确的 MAC,然后攻击者重复多次发送相同的信息。由于信息与 MAC 可以匹配,在不知道密钥的情况下,攻击者就可以完成攻击。以下方法可以避免:
    • 序号,约定信息中带上递增序号,MAC 值为加上序号的 MAC。
    • 时间戳,约定信息中带上时间戳
    • 随机数 nonce,每次传递前,先发送随机数 nonce,通信是带上 nonce
  • 暴力破解
  • 无法防止否认,因为密钥是共享的,接收者可以伪造对发送者不利的信息。

数字签名

由于 MAC 无法解决否认的问题是由于采用的相同的密钥,那么采用公私钥对就可以解决啦~

采用非对称加密的消息认证码的技术,就是数字签名。

  • 在非对称加密中,私钥用来解密,公钥用来加密
  • 在数字签名技术中,私钥用来加密,公钥用来解密

数字签名步骤

  1. 签名方 A 生成非对称公私钥对 public-key、private-key
  2. A 向消息接收方 B 发送公钥 publi-key
  3. A 采用 private-key 加密(一般是对消息的散列值进行加密),生成数字签名
  4. A 将消息与数字签名发往 B
  5. B 采用 public-key 解密数字签名
  6. B 验证数字签名

由于用于解密的是公钥,是公开的。因此任何人都可以验证数字签名。

数字签名实现

数字签名的核心,就是非对称加密,在前文已经介绍了一些非对称加密算法,均可用于数字签名之中。

常见的有如下几种:

  • RSA
  • ElGamal
  • DSA
  • ECDSA(Elliptic Curve Signature Algorithm),结合椭圆曲线算法的数字签名技术
  • Rabin

数字签名的问题

数字签名由于采用了非对称加密,因此可以防止否认。但发送方怎么能知道所收到的公钥就是接收方私钥所对应的公钥呢?

如果不小心采用了攻击者的公钥,然后接收了攻击者私钥签名的信息,公私钥完全匹配,于是信息就被接受了,那么就 GG 了。

因此,业界便推出了证书。由权威机构颁布,认证公钥的合法性,那么就 OK 啦!

Reference: https://www.jianshu.com/p/a8070920810d

猜你喜欢

转载自blog.csdn.net/weixin_38134491/article/details/84677150
今日推荐