- 地狱烈犬
- 身份认证协议
- Kerberos 四幕话剧
KDC: 用于在 A, B 之间做双向认证
第一步, 账号 A 和 KDC 互相认证
A 向 KDC 证明自己
A 既不用说出自己的密码, 又可以声明自己拥有密码:
抓包:
- hmac
- 账户: linp1
- 随机字符串: 136…
Wireshark 知道密钥?
之后 KDC 用已有密码生成密钥, 对加密数据进行解密, 最后获得时间戳来进行验证.
- 与当前时间比较, 相差较大则认证失败 (重放攻击)
- 需要同步所有机器的时间
KDC 向 A 证明自己
改进认证过程
- KDC 只需保存自己的密码
KDC 回复给 A 的 AS_REP 所包含的信息:
- 注意公式
第二步, 账号 A 请 KDC 帮忙认证资源 B
- 向 KDC 发送 TGS-REQ 请求:
- TGT
- A 的信息
- 当前时间戳
- B 的信息
- KDC 验证 A
- KDC 生成 A, B 之间的密钥
- Ticket
- TGS_REP
- A 使用 Ticket 使用资源 B
第三步, 账号 A 和资源 B 互相认证
- A 向 B 发送 AP_REQ
- B 回复 AP_REP
- A 验证 B
AP_REP 例子:
整个认证过程
理解 Kerberos 的技巧就是各方使用自己的密码生成密钥.
上面的所有过程中, Wireshark 之所以能解密信息是因为: 提前使用自己的密码生成的 keytab 文件配置了 Wireshark.