• 地狱烈犬
  • 身份认证协议
  • Kerberos 四幕话剧

KDC: 用于在 A, B 之间做双向认证

第一步, 账号 A 和 KDC 互相认证

A 向 KDC 证明自己

A 既不用说出自己的密码, 又可以声明自己拥有密码:

image.png

抓包:

  • hmac
  • 账户: linp1
  • 随机字符串: 136…

image.png

Wireshark 知道密钥?

之后 KDC 用已有密码生成密钥, 对加密数据进行解密, 最后获得时间戳来进行验证.

  • 与当前时间比较, 相差较大则认证失败 (重放攻击)
  • 需要同步所有机器的时间

KDC 向 A 证明自己

image.png

改进认证过程

  • KDC 只需保存自己的密码

image.png

KDC 回复给 A 的 AS_REP 所包含的信息:

  • 注意公式

image.png

image.png

第二步, 账号 A 请 KDC 帮忙认证资源 B

  1. 向 KDC 发送 TGS-REQ 请求:
    1. TGT
    2. A 的信息
    3. 当前时间戳
    4. B 的信息

image.png

  1. KDC 验证 A

image.png

  1. KDC 生成 A, B 之间的密钥

image.png

  • Ticket

image.png

  • TGS_REP

image.png

image.png

  1. A 使用 Ticket 使用资源 B

image.png

第三步, 账号 A 和资源 B 互相认证

  1. A 向 B 发送 AP_REQ

image.png

  1. B 回复 AP_REP

image.png

  1. A 验证 B

image.png

AP_REP 例子:

image.png

整个认证过程

image.png

理解 Kerberos 的技巧就是各方使用自己的密码生成密钥.

上面的所有过程中, Wireshark 之所以能解密信息是因为: 提前使用自己的密码生成的 keytab 文件配置了 Wireshark.