kerberos
2020-02-02 本文已影响0人
Jassi
kerberos 是什么
kerberos是一种网络认证协议, 它通过secret-key的加密方式 为client/server app提供了强大的认证能力, windows就是使用这个认证, 它不依赖于主机操作系统的认证 也不依赖与主机的物理安全。
kerberos认证 是有第三方完成的 they are client/service/KDC
相关概念:
- mit: 麻省理工
- DES: data encryption standard
- AS: authentication service(向client提供 service ticket)
- TGS:ticket-granting server(向client 提供 某个服务的TGT)
- KDC: key distribution center(= AS + TGS)
- AD: account database(存储所有client的名单, 至于存在client才能申请 TGT)
- DC: domain controller(= AD + KDC)
- TGT: ticket-granting ticket
- krbtgt: 创建DC的时候自动生成的特定用户,并由系统随机分配一个密码
- TGS secret key:krbtgt的随机密码TGS secret key
相关主体:
- client:
1 username/web address/service name
2 client secret key
3 TGT(encrypted)
3 TGS session key
4 service session key
4 service ticket(encrypted)
- server(DC/KDC)
2 Client secret key(AS向AD发送请求 验证username之后 取AD中保存的对应的hash)
3 TGT
3 - TGS secret key (krbtgt的密码)
3 TGS session key
4 service ticket
- service
4 service secret key
4 service ticket
how does it work?
- client 登录 提供client secret key & (username, service name, web address等) , request to server
- server 先确认 username 的在KDC中存在 再随机生成 TGS session key, 并且向client 发送以下两条message:
A: client secret key 加密的 TGS session key/timestamp/lifetime
B(TGT): TGS secret key加密的 TGS session
key+client info(/timestamp/lifetime/user name/web address)+service info(service name/))
- client get message A&B, 用自己的client secret key 解密A=>TGS session key并且cache it
- client 向 server发送以下两条消息
C: 明文的TGT、service name 、web address、user name
D: TGS session key加密的username(username/timestamp/lifetime)
-
server 先确认service name 在KDC中存在, 然后用自己的TGS secret key 解密C中的TGT =>TGS session key,进而解密D, 对比D和TGT中的 username/timestamp/lifetime等信息, 其实就是 校验server发出的A信息 经过client之后 有没有变化, 至此 完成可 client和server之间的session key的交换和身份验证
-
server 随机生成一个 service session key,并将以下message 发给 client
E(service ticket): 用service secret key 加密的 service session key / username/servicename/network address/lifetime/timestamp
F: 用TGS session key 加密的 servicename/lifetime/timestamp/service seesion key
- client 根据自己cache的TGS session key解密F=>service session key并cache it
- client 向service发送以下message
G:E(service ticket)
H:用service session key加密的username/timestamp/lifetime
1.service 用自己的service secert key解密 service ticket=>service session key/username/lifetime/timestamp等信息, 再用service session key 解密H, 对比H和ticket中username 、timestamp等信息, 即校验server发送给client中的F 经client之后 有没有变化,至此 则完成了 service session key 的交换
- service 向client 发送 以下信息
经过service session key 加密的service id /timestamp
- client 就可以用自己cache的 service session key 解密消息,进而完成 client-service的通信
版本
- Current release: krb5-1.17.1
- Maintenance release: krb5-1.16.4
- Kerberos for Windows: kfw-4.1
- Historical releases of MIT krb5
- mit实现的kerberos中停止了对版本4的支持, 原因如下:
DES是v4使用的唯一加密算法, 然而DES由于它具有较小的key space而达到了生命的终点(存在被穷举的可能), 已经从中联邦信息处理标准(FIPS)被撤销