首页 > 编程知识 正文

kerberos跨域认证步骤,kerberos工作原理

时间:2023-05-04 15:31:40 阅读:143005 作者:4472

Kerberos是认证协议。

要a访问b,请执行以下操作:

一般的认证只是b确认a不是假货。

在Kerberos中,不仅要保证上述问题,还必须保证a和b都不是假货

Step 1: A和KDC的相互认证(

在不告诉对方自己的密码的前提下,让对方知道自己有密码(向对方证明自己) )

以下是a向KDC证明自己的身份。 首先,a使用hash函数将自己的密码加密为私钥kclt(a (由a的密码加密)。

使用在a上生成的密钥Kclt加密时间戳,得到{timestamp}Kclt

a发送到KDC的AS_REQ包含以下数据

AS_REQ={timestamp}Kclt,a的信息,随机字符串图中的1

后面的字符串允许a验证KDC,加密时间戳可以防止重放攻击。

KDC收到AS_REQ后,可以使用从AS_REQ中读取a的信息来调用a的密码。

而且,通过与a相同的方式(用相同的散列函数加密a的密码),KDC也得到与a相同的Kclt,

然后,用该Kclt对{timestamp}Kclt进行解密,如果能够解密,则表示对方是a,通过KDC对a的认证也完成。

这样就完成了KDC对a的认证。

然后进行a对KDC的认证。 实际上,可以用Kclt对AS_REQ的随机字符串进行加密,然后发送到a。 一旦解了a,就完成了a对KDC的认证,但每次认证都会消耗KDC的资源,因为KDC必须从AS_REQ中检索a的信息并调用a的密码

首先,KDC直接生成两个用于以后a和KDC相互认证的密钥Kclt-Kdc,把其中一个交给a,另一个应该是自己的,但也交给a保管(KDC )

但是,不能把自己的钥匙就这样交给a。 有可能从假的客户端发送来假的密钥。 因此,KDC必须能够识别出这个密码确实是自己寄存在A上的。 因此,KDC使用由自己的密码hash组成的Kkdc对存储在a中的密钥进行加密。 (请注意,此处的密码是KDC自己的密码,而不是如上所述用于生成Kclt的a的密码。 如果这把钥匙回来了(这里是KDC自己的,但是寄存在a的钥匙和另一把真的是a的) )。

KDC用Kkdc加密的,不仅是自己交给别人的私钥,还有对方的信息,全部被称为TGT

TGT={对方的信息,Kclt-Kdc}Kkdc,

因此,回复a内容AS_REP具有以下内容

AS_REP=TGT,{Kclt-kdc,timestamp,随机字符串}Kclt图中2

TGT被寄存在a中,a不进行任意的解密操作,根据需要将其返还给KDC即可。

后面是用Kclt加密的内容,如上所述,Kclt会出现a的密码hash,所以只有a能解开。

然后,可以通过随机字符串判断KDC的身份。 也就是说,由a进行的KDC认证完成。

KLT-KDC:KDC和a即将用于认证的密钥,这是属于a的密钥,但TGT中的只是KDC自己的,暂时存储在a中。 一共2根)

这样就完成了a和KDC的相互认证,完成了图的1、2

步骤2 a是向KDC认证b的方法(还是在a和KDC之间完成的,b没有参加)对应图3、4 a为了让KDC帮助认证b,必须告诉KDC认证谁,也就是说要向KDC发送b的信息。

别人的东西也要还。 也就是说,KDC暂时存放在a的TGT也必须送回KDC。 另外,还有用于a和KDC相互认证的信息。 (

因此,a发送到KDC的消息TGS_REQ具有以下部分:

TGS_REQ=TGT,b的信息、{A的信息、timestamp}Kclt-Kdc图中3

TGS_REQ的信息包括返回给KDC的TGT、a要验证的b的信息以及证明自己身份的信息。 此时,KDC还没有这个密钥。 KDC的密钥在TGT中,所以还没有发送到KDC。

KDC收到TGS_REQ后,用自己的Kkdc对TGT进行解密(TGT是KDC用自己的Kkdc加密的),得到密钥Kdlt-Kdc,可以解密之后的{A的信息,timestamp}Kclt-Kdc

然后,KDC必须向a提供a和b认证所需的信息。 此时,KDC在a和b之间生成两个用于认证的密钥Kclt-srv。 上述Kclt-kdc用于a和KDC之间的相互认证。 一个是a,另一个是b,但b从a传递到b,临时存储上述a和KDC的密钥Kclt-kdc

srv来对属于B的那把密钥进行加密,叫做Ticket(要发给B的)

Ticket = {A的信息,Kclt-srv}Ksrv    用Ksrv来加密,只有B能解开,里边存放了A、B间相互认证使用的密钥

KDC发给A的回复信息包括

TGS_REP = {Kclt-srv}Kclt-kdc, Ticket         图中4 

其中包含要转交给B的Ticket,

还有属于A的那把用于A与B认证的密钥(用A与KDC间的密钥Kclt-kdc加密,因为这是KDC与A之间交换的数据)

A收到TGS_REP之后,就有了一把与B之间相互认证的密钥:Kclt-srv, 还有要交给B的Ticket,

此时B是没有用于与A相互认证的密钥的,还在Ticket中(未发送)。

Step 3 A与B相互认证

AP_REQ : A给B发送 {A信息,timestamp}Kclt-srv, Ticket    图中5

B收到这个Ticket,用自己的Ksrv解开得到与A间认证的密钥Kclt-srv, 然后用这把密钥解开 {A信息,timestamp}Kclt-srv,

来完成对A的身份的认证

AP_REP : B向A证明自己的身份,AP_REP = {timestamp}Kclt-srv,   图中6

如果A能解开,说明B是真的,其他人不可能有这把密钥(Kclt-srv)

 

Reference : 《Wirshark 网络分析就这么简单》 洁净的篮球

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。