这篇主要介绍常用的加密算法和鉴权协议,关于Kerberos的大概过程,可以参考这篇
https://www.cnblogs.com/huamingao/p/7267423.html
这里面有一个点没说清楚,就是第四步客户端收到 session key和服务端secret key加密后的session ticket后, 是如何获得session Key的,实际上session key和服务端secret key加密后的session ticket是分开返回的,可以参考这篇文章
https://blog.csdn.net/weixin_39848953/article/details/112076045
=========================================================================
加密算法: 对称/非对称加密、Hash、密码交换算法
鉴权协议:Kerberos(windows内部使用)、OAuth、OpenID等
一、加密算法
对称加密:
1.分组加密 :如DES/AES/TEA
2.序列加密: 如ECB (分组密文间无关联)/CCB(分组间有关联)
非对称加密: RSA
HASH:MD5、SHA
密钥交换: Diffie-hellman(也可用非对称加密算法)
二、Kerberos鉴权过程
登录前的鉴权阶段
主要在C(客户端)和AS(鉴权服务器,存放各种key,相当于agent)之间进行
- C与S 建立TCP连接,C->S 申请公钥
- S->C ,返回公钥
- C->S ,用公钥加密密码,传给S
- S->C ,鉴权完成,返回skey。
如果有人在第一步S和C中间伪装S,传给C假的公钥,获取了密码。则形成C->H->S的中间人攻击
解决办法:在第一步建立连接中,用密码作二次MD5生成密钥,加密uid,时间戳等,解决假server问题。因为自己的server知道密码,所以能解出内容。
已登录后申请访问业务A:
在C(客户端)和BS(业务服务器)之间进行
- C->S skey(业务A)
- S->C skey(KEYA(uid+timestamp))
- C->S KEYA(uid+timestamp)
数据有效性检查:账号、时间、IP
解密函数返回成功不代表认证成功,还需要做有效性检查。协议设计时尽量不要在多个字段上用一样的数据,否则需要在各个字段做校验。
网友评论