AKA认证初探
近期工作中遇到了有关SIP AKA认证的相应协议规范,目前在IMS中已得到应用支持,本文主要是希望探索一下AKA认证的具体机制,以及相应算法。为简便起见,暂时先抛开IMS内部架构,从参数着手分析AKA认证。
AKA认证主要还是基于DIGEST认证方式,在此基础上加入了对称加密机制。先简单看一下AKA的流程图与信令:
如图所示,AKA认证流程与DIGEST认证流程一致,参数MS新增了RAND和AUTN,加下来看一下具体的信令:
熟悉SIP DIGEST的会发现,参数表面上看,除了algorithm指定为AKAv1-MD5之外,没有什么区别,那RAND和AUTN参数跑哪儿去了呢?AKA认证耍了个花招,尽量兼容DIGEST,他将RAND(128位)和AUTN(128位)参数进行BASE64编码后放置在了nonce参数中进行传递,如下图所示:
RAND为服务器端生成的128位随机值,AUTN的生成算法如下图所示:
AUTN的解析算法如下:
至于f1-f5算法通常采用Milenage算法,具体不在此赘述,此处解析之后,终端将会得到RES参数,然而此RES参数并非DIGEST认证中Authorization头域的response参数,而是使用RES作为DIGEST认证时的密钥,从而生成最终的response参数。
至此,AKA认证流程基本完成,CK和IK参数是作为IPSec SA的加密密钥以及完整性密钥,有兴趣的可以翻阅相应的IMS文档。总的说来AKA认证较DIGEST认证更为安全可靠:
1 实现了双向认证:服务器对UE的认证是通过RES实现的:如果UE合法,它能够正确地计算出RES,且RES等于XRES;UE对服务器的认证是通过MAC实现的:UE计算期望的消息认证码(XMAC),如果MAC和XMAC一致,则认证成功;
2 每次使用的MAC是由不断递增的SQN作为输入变量之一,从而确保了密钥的新鲜性,有效地防止了重放攻击;
3 这种机制更利于将服务器分离成认证服务器与鉴权服务器,认证服务器收到请求后,请求鉴权服务器生成AUTN、RAND等健全信息从而进行认证,而鉴权服务器也无需将密码等信息透露给认证服务器。
鉴权 [ jiàn quán ]:是指验证用户是否拥有访问系统的权利。
英文翻译:authentication
鉴权主要用来验证用户是否拥有访问系统的权利,涉及的领域主要是信息科学。以前人们都通过密码验证进行鉴权,但是由于密码经常会被忘记或者遗失,所以这种方式并不可靠。
为了克服这种鉴权方式的缺点,需要一个更加可靠的鉴权方式。目前的主流鉴权方式是利用认证授权来验证数字签名的正确与否。
扩展资料:
(一)鉴权的作用:
使用鉴权可以用来识别出非法用户。用户鉴权,是对试图接入网络的用户进行鉴权,审核其是否有权访问网络。通过用户鉴权可以保护网络,防止非法盗用;同时通过拒绝假冒合法客户的“入侵”而保护该网络中的客户。
(二)生活中常用的鉴权方式:
1、HTTP Basic Authentication:
它是 Authentication( 认证 ) 中最简单的方法。长期以来,这种认证方法被广泛的使用。当你通过 HTTP 协议去访问一个使用 Basic Authentication 保护的资源时,服务器通常会在 HTTP 请求的 Response 中加入一个"401 需要身份验证"的 Header,来通知客户提供用户凭证,以使用资源。
2、session-cookie:
在网络上,临时cookie为用户浏览器关闭时消失的含有用户有关信息的小文件,有时也称通话cookie。跟永久cookie不一样,临时cookie不保存在硬盘驱动器而是存在临时存储器中,当浏览器关闭时,将被删除。
3、Token 验证:
Token是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token的值会保存到微信后台。只有服务器和微信后台知道这个字符串,于是Token就成了这两台服务器之间的密钥,它可以让公众账号服务器确认请求是来自微信后台还是恶意的第三方。
4、OAuth(开放授权):
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
-鉴权
常用的web鉴权方式有:
1 基本身份验证(Basic Authentication): 这是最基础的一种鉴权方式,通过在HTTP请求头中添加用户名和密码的方式进行验证。这种方式简单易用,但安全性较低,因为密码通常明文传输。现在基本已经被更安全的鉴权方式所取代。
2 摘要身份验证(Digest Authentication):这是一种更安全的方式,它通过对密码进行散列处理,并在每次请求时生成一个新的散列值进行比较,从而防止密码明文传输。这种方式通常用于需要更高安全性的场景,如银行网站等。
3 OAuth:OAuth是一种开放授权标准,它允许用户在第三方网站上使用他们的用户名和密码进行登录,同时保护用户的隐私。OAuth通过颁发授权令牌的方式,允许第三方网站在一定时间内访问用户的某些资源,如读写权限等。
4 JWT(JSON Web Tokens):JWT是一种用于身份验证和访问控制的标准化令牌格式。它使用JSON语法存储信息,并通过公开密钥加密的方式在网络上传输。JWT提供了更强的安全性,并且可以在不同的应用和服务之间进行互操作。
5 Session Management:Session Management通过维护用户会话信息的方式实现鉴权。服务器会为用户分配一个唯一的会话标识符,并在用户访问时检查该标识符的有效性。Session Management通常与某种形式的密码验证(如基本身份验证)结合使用。这种方式在某些情况下仍然非常有用。
6 Secret Key Authentication:这是一种更高级别的鉴权方式,通常用于需要高度安全的场景。在这种方式中,服务器和客户端之间会交换一个秘密密钥,并在每次请求时使用该密钥进行签名或加密解密操作。这种方式提供了更高的安全性,但同时也增加了实现的复杂性。
以上就是一些常用的web鉴权方式。每种方式都有其适用的场景和优缺点,需要根据具体的需求来选择合适的鉴权方式。同时,随着技术的发展,新的鉴权方式也在不断出现。在实际应用中,通常会结合使用多种鉴权方式来提高系统的安全性。
众所周知,web server是无状态的,也就是说服务器不知道用户在最后一次请求中做了什么,请求之间是相互独立的。客户信息仅来自每个请求携带的或由服务器本身保存的公共信息,并且可以被所有请求使用。因此,为了跟踪用户请求的状态信息,比如网购的购物车历史,Cookie应运而生。
当服务器响应客户端的请求时,它会向客户端推送一个Cookie。这个Cookie记录了服务器上的一些信息。客户端在后续请求中携带这个Cookie,服务器可以根据这个Cookie判断请求的上下文。
Cookie的出现是从无国籍状态过渡到有国家状态的一种手段。
以登录为例,用户输入帐户名和密码,向服务器发送请求。服务器生成一个Cookie并发送给浏览器。浏览器将Cookie以k-v的形式保存在某个目录下的文本文件中,下次请求同一个网站时会将Cookie发送给服务器。服务器验证接收到的Cookie是否与服务器的Cookie一致;否则,验证失败。这是最初的想法。
img src=' https://P6 toutiaoimgcom/large/PGC-image/48e 7b 24 ea 95 f 4 E0 CB 8d 940 DC 05 feb 1 EC '/
存储在浏览器中的Cookie的位置如下图所示。
img src=' https://p26 toutiaoimgcom/large/PGC-image/b 35 b 701d 7 b 454 ada 95 a 49 a 36d 0026 a F9 '/
Cookie的原理决定了他具有以下特征:
在存储客户端,可以随意篡改,不安全。
它的内容会和http交互传输,会影响性能,所以Cookie能存储的数据不能太大,最多4kb。
一个浏览器只能为一个网站存储不超过20个cookie,而浏览器一般只允许300个cookie。
移动对Cookie支持不友好。
一般来说,存储的是纯文本,对象在存储之前需要序列化,解析需要反序列化。
还是以登录Cookie为例。例如,现在有两个二级域名,http://axxxcom(域名A)和3358bxxxcom(域名B)。那么域名A的登录Cookie可以在域名B下使用吗?
默认情况下,域名A的服务主机中生成的Cookie只能由域名A的服务器获取,其他域名无法获取这个Cookie,只能是主机Cookie。
但是,服务器可以显式声明Cookie的域来定义它的域。比如域名A的登录Cookie的域设置为http://xxxcom(他们共同的顶级域名),path设置为'/',Set-Cookie:name=value;domain=xxxcomPath='/',那么域名B就可以读了。
在新规范rfc6265中,domain的值将忽略任何前导点,即子域中可以使用xxxcom和 XXXcom 。SSO(单点登录)也是根据这个原理实现的。
例如,现在有两个域名,abefcomcn(域名1)和cdefcomcn(域名2)。域名2想读取域名1的Cookie。域名1可以声明哪些域?答案是effcomcn或者 fcomcn,浏览器不能接受以domian为comcn的cookie,因为如果cookie域名可以设置为后缀的话,那就是峡谷大战了。
如果域名1设置了Set-Coo
kie:mykey=myvalue1;domain=efcomcn;path=’/’
域名 2 设置Set-Cookie:mykey=myvalue2;domain=efcomcn;path=’/’
那该域下 mykey 的值会被覆盖为 myvalue2,很好理解,同一个域下,Cookie 的 mykey 是唯一的。通常,我们要通过设置正确的 domain 和 path,减少不必要的数据传输,节省带宽。
随着交互式 Web 使用的兴起,Cookie 大小的限制以及浏览器对存储 Cookie 的数量限制,我们一定需要更强大的空间来储存大量的用户信息,比如我们这个网站是谁登录了,谁的购物车里加入了商品等等,服务器要保存千万甚至更多的用户的信息,Cookie 显然是不行的。那怎么办呢?
那将用户信息存储在哪呢?能否直接存在服务器中?
如果存在服务器中,1、这对服务器说是一个巨大的开销,严重的限制了服务器的扩展能力。2、假设 web 服务器做了负载均衡,用户 user1 通过机器 A 登入该系统,那么下一个请求如果被转发到另一台机器 B 上,机器 B 上是没有存该用户信息的,所以也找不到 sessionId,因此 sessionId 不应该存储在服务器上。这个时候redis/Memcached便出来解决该问题了,可以简单的理解它们为一个缓存数据库。
当我们把 sessionId 集中存储到一个独立的缓存服务器上,所有的机器根据 sessionId 到这个缓存系统里去获取用户信息和认证。那么问题就迎刃而解了。
根据其工作原理,你有没有发现这个方式会存在一个什么样的问题?那就是增加了单点登录失败的可能性,如果负责 session 的机器挂了, 那整个登录也就挂了。但是一般在项目里,负责 session 的机器也是有多台机器的集群进行负载均衡,增加可靠性。
思考:
假如服务器重启的话,用户信息会丢失吗?
Redis 等缓存服务器也是有个集群的,假设某一台服务重启了,会从其他运行的服务器中查找用户信息,那假设真的某一次所有服务器全都崩溃了,怎么办呢?大概的应对策略就是,存储在内存中的用户信息会定期刷到主机硬盘中以持久化数据,即便丢失,也只会丢失重启的那几分钟内的用户数据。
Cookie-session 局限性
依赖 Cookie,用户可以在浏览器端禁用 Cookie
不支持跨端兼容 app 等
业务系统不停的请求缓存服务器查找用户信息,使得内存开销增加,服务器压力过大
服务器是有状态的,如果是没有缓存服务器的方式,扩容就非常困难,需要在多台服务器中疯狂复制 sessionId
存在单点登录失败的可能性
单点登录(Single Sign On),简称为 SSO。随着企业的发展,一个大型系统里可能包含 n 多子系统,用户在操作不同的系统时,需要多次登录,很麻烦,单点登录就是用来解决这个问题的,在多个使用系统中,只需要登录一次,就可以访问其他相互信任的使用系统。
之前我们说过,单点登录是基于 cookie 同顶域共享的,那按照不同的情况可分为以下 3 种类型。
同一个站点下;
系统在相同的顶级域名下;
各子系统属于不同的顶级域名
一般情况下一个企业有一个顶级域名,前面讲过了,同一个站点和相同顶级域下的单点登录是利用了 Cookie 顶域共享的特性,相信大家已经明白这个流程,不再赘述。但如果是不同域呢?不同域之间 Cookie 是不共享的,怎么办?
这里我们就要说一说 CAS(中央认证服务 )流程了,这个流程是单点登录的标准流程。它借助一个单独的系统专门做认证用,以下成为SSO系统。
它的流程其实跟 Cookie-session 模式是一样的,单点登录等于说是每个子系统都拥有一套完整的 Cookie-session 模式,再加上一套 Cookie-session 模式的 SSO 系统。
用户访问系统 a,需登录的时候跳到 SSO 系统,在 SSO 系统里通过账号密码认证之后,SSO 的服务器端保存 session,,并生成一个 sessionId 返回给 SSO 的浏览器端,浏览器端写入 SSO 域下的 Cookie,并生成一个生成一个 ST,携带该 ST 传入系统 a,系统 a 用这个 ST 请求 SSO 系统做校验,校验成功后,系统 a 的服务器端将登录状态写入 session 并种下系统 a 域下的 Cookie。之后系统 a 再做登录验证的时候,就是同域下的认证了。
这时,用户访问系统 b,当跳到 SSO 里准备登录的时候发现 SSO 已经登录了,那 SSO 生成一个 ST,携带该 ST 传入系统 b,系统 b 用这个 ST 请求 SSO 系统做校验,校验成功后,系统 b 的服务器端将登录状态写入 session 并设置系统 b 域下的 Cookie。可以看得出,在这个流程里系统 b 就不需要再走登录了。
关于“跳到 SSO 里准备登录的时候发现 SSO 已经登录了”,这个是怎么做的呢,这就涉及 Oauth2 授权机制了,在这里就不展开讲,简单提个思路,就是在系统 b 向 SSO 系统跳转的时候让它从系统 a 跳转,携带系统 a 的会话信息跳到 SSO,再通过重定向回系统 b。
关于 Oauth2,可移步阮一峰 的《OAuth 20 的四种方式》。
我们已经分析过 Cookie-session 的局限性了,还有没有更彻底的解决办法呢?既然 SSO 认证系统的存在会增加单点失败的可能性,那我们是不是索性不要它?这就是去中心化的思路,即省去用来存储和校验用户信息的缓存服务器,以另外的方式在各自系统中进行校验。实现方式简单来说,就是把 session 的信息全部加密到 Cookie 里,发送给浏览器端,用 cpu 的计算能力来换取空间。
服务端不保存 sessionId,用户登录系统后,服务器给他下发一个令牌(token),下一次用户再次通过 Http 请求访问服务器的时候, 把这个 token 通过 Http header 或者 url 带过来进行校验。为了防止别人伪造,我们可以把数据加上一个只有自己才知道的密钥,做一个签名,把数据和这个签名一起作为 token 发送过去。这样我们就不用保存 token 了,因为发送给用户的令牌里,已经包含了用户信息。当用户再次请求过来的时候我用同样的算法和密钥对这个 token 中的数据进行加密,如果加密后的结果和 token 中的签名一致,那我们就可以进行鉴权,并且也能从中取得用户信息。
对于服务端来说,这样只负责生成 token , 然后验证 token ,不再需要额外的缓存服务器存储大量的 session,当面对访问量增加的情况,我们只需要针对访问需求大的服务器进行扩容就好了,比扩充整个用户中心的服务器更节省。
假如有人篡改了用户信息,但是由于密钥是不知道的,所以 token 中的签名和被篡改后客户端计算出来的签名肯定是不一致的,也会认证失败,所以不必担心安全问题。
关于 token 的时效性,是这样做的,首次登陆根据账号密码生成一个 token,之后的每次请求,服务端更新时间戳发送一个新的 token,客户端替换掉原来的 token。
jwt 模式的退出登录实际上是假的登录失效,因为只是浏览器端清除 token 形成的假象,假如用之前的 token 只要没过期仍然能够登陆成功
安全性依赖密钥,一旦密钥暴露完蛋
加密生成的数据比较长,相对来说占用了更大的流量
不依赖 Cookie,可跨端跨程序使用,支持移动设备
相对于没有单点登录的 cookie-session 模式来说非常好扩展
服务器保持了无状态特性,不需要将用户信息存在服务器或 Session 中
对于单点登录需要不停的向 SSO 站点发送验证请求的模式节省了大量请求
相关问答:IEEE802LAN协议定义的局域网并不提供接入认证,只要用户能接入局域网控制 设备 (如LANS witch)就可以访问局域网中的设备或资源。这在早期企业网有线LAN应用环境下并不存在明显的安全隐患。但是随着移动办公及驻地网运营等应用的大规模发展,服务提供者需要对用户的接入进行控制和配置。尤其是WLAN的应用和LAN接入在电信网上大规模开展,有必 要对端口加以控制以实现用户级的接入控制,802lx就是IEEE为了解决基于端口的接入控制 (Port-Based Network Access Contro1) 而定义的一个标准。
基本原理 IEEE 8021X是根据用户ID或设备,对网络客户端(或端口)进行鉴权的标准。该流程被称为“端口级别的鉴权”。它采用RADIUS(远程认证拨号用户服务)方法,并将其划分为三个不同小组:请求方、认证方和授权服务器。
8021X 标准应用于试图连接到端口或其它设备(如Cisco Catalyst交换机或Cisco Aironet系列接入点)(认证方)的终端设备和用户(请求方)。认证和授权都通过鉴权服务器(如Cisco Secure ACS)后端通信实现。IEEE 8021X提供自动用户身份识别,集中进行鉴权、密钥管理和LAN连接配置。 整个8021x 的实现设计三个部分,请求者系统、认证系统和认证服务器系统。
请求者系统 请求者是位于局域网链路一端的实体,由连接到该链路另一端的认证系统对其进行认证。请求者通常是支持8021x认证的用户终端设备,用户通过启动客户端软件发起8021x认证,后文的认证请求者和客户端二者表达相同含义。
认证系统 认证系统对连接到链路对端的认证请求者进行认证。认证系统通常为支持802 1x协议的网络设备,它为请求者提供服务端口,该端口可以是物理端口也可以 是逻辑端口,一般在用户接入设备 (如LAN Switch和AP) 上实现8021x认证。倎文的认证系统、认证点和接入设备三者表达相同含义。
认证服务器系统 认证服务器是为认证系统提供认证服务的实体,建议使用RADIUS服务器来实现认证服务器的认证和授权功能。
请求者和认证系统之间运行8021x定义的EAPO (Extensible Authentication Protocolover LAN)协议。当认证系统工作于中继方式时,认证系统与认证服务器之间也运行EAP协议,EAP帧中封装认证数据,将该协议承载在其它高层次协议中(如 RADIUS),以便穿越复杂的网络到达认证服务器;当认证系统工作于终结方式时,认证系统终结EAPoL消息,并转换为其它认证协议(如 RADIUS),传递用户认证信息给认证服务器系统。
认证系统每个物理端口内部包含有受控端口和非受控端口。非受控端口始终处于双向连通状态,主要用来传递EAPoL协议帧,可随时保证接收认证请求者发出的EAPoL认证报文;受控端口只有在认证通过的状态下才打开,用于传递网络资源和服务。
认证过程
(1) 客户端向接入设备发送一个EAPoL-Start报文,开始8021x认证接入;
(2) 接入设备向客户端发送EAP-Request/Identity报文,要求客户端将用户名送上来;
(3) 客户端回应一个EAP-Response/Identity给接入设备的请求,其中包括用户名;
(4) 接入设备将EAP-Response/Identity报文封装到RADIUS Access-Request报文中,发送给认证服务器;
(5) 认证服务器产生一个Challenge,通过接入设备将RADIUS Access-Challenge报文发送给客户端,其中包含有EAP-Request/MD5-Challenge;
(6) 接入设备通过EAP-Request/MD5-Challenge发送给客户端,要求客户端进行认证
(7) 客户端收到EAP-Request/MD5-Challenge报文后,将密码和Challenge做MD5算法后的Challenged-Pass-word,在EAP-Response/MD5-Challenge回应给接入设备
(8) 接入设备将Challenge,Challenged Password和用户名一起送到RADIUS服务器,由RADIUS服务器进行认证
(9)RADIUS服务器根据用户信息,做MD5算法,判断用户是否合法,然后回应认证成功/失败报文到接入设备。如果成功,携带协商参数,以及用户的相关业务属性给用户授权。如果认证失败,则流程到此结束;
(10) 如果认证通过,用户通过标准的DHCP协议 (可以是DHCP Relay) ,通过接入设备获取规划的IP地址;
(11) 如果认证通过,接入设备发起计费开始请求给RADIUS用户认证服务器;
(12)RADIUS用户认证服务器回应计费开始请求报文。用户上线完毕。
AP(Access Point)是移动计算机用户进入有线网络的接入点,比较简单的理解就是家里的无线路由器。
AC 是accessing controller,功能是推送portal页面;
AS 是authencation server,鉴权服务器,提供鉴权和计费系统 。
HLRHLR (Home Location Register):归属位置寄存器。HLR负责移动用户管理的数据库。存储所管辖用户的签约数据及移动用户的位置信息,可为至某MS的呼叫提供路由信息。HLR存放原始用户信息;
Portal是门户的意思,在你说的这种业务中用于用户上网认证,用户如果要上网需要先访问一个web页面输入用户名和密码,这个页面就是portal的表现形式。一般无线上网基本上都用portal的模式。
Radius是一种协议的名字,该协议普遍用于宽带ADSL上网过程(认证、鉴权、计费都依赖该协议携带的数据)。它是接入服务器和鉴权服务器之间使用的协议,用户上网的几个重要的过程中的交互过程在局端由radius服务完成,包括认证(用户名、密码)、开始上网、下网。这个协议跟移动业务无关。
1、MAS:新加坡金融监管局
新加坡金融监管局,简称“MAS”,是新加坡的中央银行。其使命是推动非通货膨胀下经济的可持续增长,将新加坡建设成一个健全的,蓬勃向上的金融中心。
2、MAS:鬼舞步的一种分类
mas就是马来西亚Malaysia Shuffle ,巴西完全是学习马来人的,动作狂野豪迈,注重全身性的协调拉伸。和AUS的跳法有很大的区别,当shuffle进入中国一段时间后,国内人喜欢把AUS叫做小步,MAS叫做大步。
3、MAS:移动代理服务器
MAS是移动代理服务器的简称,是协助企业原有业务系统实现无线应用的接入工具,实现MAS接入后企业原有的业务系统可以方便的实现无线应用。
MAS系统包括MAS服务器、MAS管理平台和MAS终端,中国移动通过在集团客户(主要为拥有完备企业信息系统的政府行业用户和企业)内部部署移动代理服务器。
为集团客户提供的基于移动终端(包括短信、彩信、GPRS 、WAP、手机客户端等)的信息化应用服务。通过移动代理服务器将不同的行业用户应用和业务延伸到移动终端。
扩展资料:
MAS(新加坡金融监管局)历史沿革
1971年1月,新加坡金融监管局(MAS)成立。新加坡金融监管局(MAS)法案赋予了新加坡金融监管局(MAS)监管货币各方面的权力,比如银行以及新加坡金融领域的各方面。
1977年4月,新加坡政府决定由新加坡金融监管局(MAS)接手监管新加坡的保险业。
1984年9月,1973年通过的证券产业法赋予的证券行业监管权力也转移到新加坡金融监管局(MAS)。
2002年10月1日新加坡金融监管局(MAS)合并货币机构董事会后,他也具备了发行货币的职能。
-MAS:新加坡金融监管局
-MAS:鬼舞步的一种分类
-MAS:移动代理服务器
美篇转朋友圈出现鉴权失败提醒是由于以下几点造成的:
1、美篇小程序未在开发者后台添加相应的页面或接口权限。
2、美篇小程序未在业务服务器中正确配置小程序的AppID和AppSecret。
3、美篇小程序未在业务服务器中正确配置小程序的服务器域名和业务域名。
0条评论