天天看点

加密机制Kerberos原理

Kerberos是一种加密机制。Kerberos据说是希腊神话中一条三个头的看家神犬,凶猛异常。加密机制以此为名,估计是自认为很厉害,好打得吧。

Kerberos的设计意图,是希望整个认证过程不依赖于操作系统安全、主机物理安全、网址认证、网络安全之类,即使网络上传送的数据包被任意地读取、修改和插入数据,它也浑然不惧。这就比https更厉害了。https就是用来保护信息在传输过程中不被窃取篡改的,但它依赖于CA认证中心和证书。

这么牛逼,是怎么做到的?其实就是加密咯。传输的信息都经过加密,所以不怕泄露;而且还可以验证,因此不怕篡改和抵赖。老实说,加密和校验都不是什么新鲜招,但妙就妙在它的加密方式。

它用对方的口令做密钥进行加密。

具体一点,就是它没有用非对称加密,什么私钥公钥、你来我往这么复杂。用的就是对称加密,简单多了。唯一的诀窍,在于许多加密信息,其密钥用的是信息接收者的口令。

什么意思?

在Kerberos机制中,由Client、Application Server、KDC三大部分组成。Client、Application Server好理解,KDC则是一个居于中心地位的中央认证模块,叫KDC(key distribution center):密钥发放中心。KDC由两个模块组成:认证服务模块AS(authentication service),授权服务模块TGS(ticket granting service,票据授权服务)。认证和授权是安全验证的两个主题。认证解决你是谁的问题,授权则解决你能做啥的问题。

Kerberos的运作流程如下图:

加密机制Kerberos原理

结合上图,解说如下:

1、需要凭证

客户端(client)想去访问某应用服务器1(Application 1 Server),结果Application 1 Server说,你啥凭证都没有,没身份,没授权,恕不接待。

2、寻求凭证

客户端于是找到KDC,报上自己的username(应该是账号)。

3、发送凭证

KDC.AS向client发回一个包,里面有一个票据TGT和一把密钥SK_TGS,记作{TGT,SK_TGS},这个包使用了client的口令进行加密。其中,TGT本身又是一个包{ user, address, tgs_name, start_time, lisftime, SK_TGS},它是用KDC.TGS的口令进行加密的!注意到TGT里也包含了一份相同的SK_TGS。SK_TGS是client和KDC.TGS进行会话的密钥。

4、得到凭证

client收到KDC.AS发回的包以后,用自己的口令解开,得到TGT和SK_TGS。然后,client向KDC.TGS发送[TGT,Authenticator]。其中Authenticator={ user, addresss, start_time, lifetime},使用了SK_TGS进行加密。

5、校验凭证

KDC.TGS收到client发来的包后,用自己的口令解开TGT,得到了SK_TGS。然后,用SK_TGS解开Authenticator,将里面的内容与TGT里的相关信息进行比对和验证。

验明正身以后,KDC.TGS为 client 和 Application 1 Server 之间生成一个会话密钥SK_Service;然后发送给 client 一个包:[ {SK_Service}SK_TGS,ST]。其中,SK_Service使用SK_TGS加密,票据ST使用Application 1 Server 的口令加密。同样,ST本身也是一个包,内容为:{ user, address, start_time, lifetime, SK_Service }。请注意里面也有一份SK_Service。

6、开启对话

client收到KDC.TGS发回的包,利用SK_TGS解密得到SK_Service,然后用SK_Service加密生成Authenticator,然后向Application 1 Server发送[ ST,Authenticator ]。

Application 1 Server用自己的口令解开ST,得到里面的会话密钥SK_Service,以此解开Authenticator,然后对比验证。从此与client之间使用SK_Service开始进行了愉快的对话。

7、需要“单点登录”

client想访问第2个应用服务器Application 2 Server,遭拒

8、单点登录

由于在有效时间内,client的身份已被证实,因此无须再向KDC.AS进行身份认证,直接与KDC.TGS申请Application 2 Server的访问授权。。。

由上可知,Kerberos主要是使用了类似电子信封这一安全技术,将密钥放在加密票据里,而而票据的加密往往又使用了对方的口令作为密钥。另外,一个传输包往往存在票据和加密包两种对象,而票据和加密包里的内容又有相关性,用票据里的密钥解开加密包后,可以互为参照,防止了篡改和抵赖。初初看Kerberos,觉得非常绕,各种票据、会话密钥满天飞,但只要明白这个套路,就不难理解。

继续阅读