对SIP摘要认证方案的理解
一、口令认证常见机制
基于口令认证的系统一般有以下几种口令验证方式:
1、客户端以明文形式将用户名密码通过网络发送到服务器,服务器与已经保存在服务端的用户名密码进行比较,一致则通过验证;
HTTP基本鉴别方案即采用这种方式,它不会对以明文方式在物理网络中传输的实体进行任何形式的保护,显然这不是安全的用户鉴别方式。
2、客户端对用户名和密码进行加密,服务端解密后在验证;
这种方式有一定的安全性,但无论加密方式采用对称加密方式(如DES),还是非对称加密方式(如:MD5),都不足够安全。
对称加密方式容易被破解,非对称加密方式虽然很难被破解,但仍然会受到字典攻击和假冒服务器攻击。
3、密码+动态口令机制
HTTP摘要认证方案即采用该种方式,虽然它并不象Kerberos或任何客户端的私钥方案那样安全,但是它比telnet、ftp用的机制好,当然,也比基本鉴别方案安全。
SIP协议也采用该摘要认证方案,其中rfc2543允许Sip实现者可以使用HTTP的basic和digest鉴权机制来提供初步的安全机制。
但rfc3261要求服务器必须不能接收验证方式为“basic”类型的信任书,并且服务器必须拒绝“basic”。
此外,摘要认证方案并没有为最初用户和服务器间的口令建立提供安全做法。
二、SIP协议摘要认证机制
前面提到SIP协议采用的摘要认证方案是一种类似于密码+动态口令的机制,其关键点在于:
1、服务器在收到对受保护对象未经认证的访问请求时,在应答中提供一个动态的nonce值(相当于动态口令),为防止回放攻击,该值最好不要重复;
2、客户端想重试发送请求时,也产生一个动态的cnonce值,用来避免选择纯文本攻击、提供共同鉴别、提供某些消息的完整性保护;
3、客户端通过计算生成response值(即摘要),用来证明用户是否知道口令。
4、服务器收到重发的请求后,要对用户名、口令的合法性进行检查。这时,服务器使用已经保存在服务端的用户名和密码并结合消息头中的其他参数采用
和客户端相同的摘要计算操作(如,MD5),并将结果与给定请求-摘要(response值)相比较即可。此处的关键点在于:由于response的值与用户名、
密码、nonce、cnonce、algorithm(约定的算法)等参数有关,因此如果结果一致,服务器和客户端双方都可以认为对方不是伪造的。
三、response的计算方法
(请参考rfc2617 3.2.2节):
1、response = "response" "=" request-digest
2、请求-摘要(Request-Digest)
a、如果”qop”值是"auth" 或"auth-int":
request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value
":" unq(cnonce-value)
":" unq(qop-value)
":" H(A2)
) <">
b、如果”qop”指示没有给出(与RFC2069保持兼容性):
request-digest =<"> < KD ( H(A1), unq(nonce-value)
":" H(A2)
) <">
解释:KD(secret, data)表示对数据"data"和"secret"调用摘要算法获取字符串,用H(data)表示对数据"data"调用校验和算法获取字符串;
而unq(X)表示将带引号字符串的引号去掉。
对于"MD5" 和"MD5-sess" 算法: H(data) = MD5(data)
并且KD(secret, data) = H(concat(secret, ":", data)) 也就是说,摘要(digest)就是对secret与data通过冒号连接一起的结果进行MD5运算。
而"MD5-sess"算法则允许其它第三方服务器参与鉴别。
A1及A2的定义在下面。
3、A1
如果算法("algorithm")值是”MD5”或没有指定,则A1是:
A1 = unq(username-value) ":" unq(realm-value) ":" passwd
其中 passwd = < user's password >
如果"algorithm"值是"MD5-sess",则A1只要计算一次,即当客户端发出第一个请求,并从服务器收到WWW-鉴别(WWW-Authenticate)质询(challenge)时计算。它使用该质询
中的服务器的nonce,则用来构建A1的第一个客户端nonce值应为:
A1 = H( unq(username-value) ":" unq(realm-value)
":" passwd )
":" unq(nonce-value) ":" unq(cnonce-value)
上式为并发请求和回应的鉴别产生一个‘会话密钥’(session key),该密钥对于每个‘鉴别会话’(authentication session)都是不同的,这样,就限制了使用任何一个密钥进行哈希处理
的次数。
4、 A2
如果”qop”值是”auth”或者没给出,则A2:
A2 = Method ":" digest-uri-value
如果"qop"值是"auth-int", 则A2:
A2 = Method ":" digest-uri-value ":" H(entity-body)
5、项值和带引号的字符串(Directive values and quoted-string)
注意,许多项的取值,如”username-value”等,被定义成带引号的字符串(quoted-string)。而实际上,”unq”注释则表示在生成字符串A1时,去掉其外部的引号。因而,如当授权报头包
括该域,如:
username="Mufasa", realm=myhost@testrealm.com
则表示用户Mufasa的口令是"Circle Of Life",这样H(A1)就可表示成
H(Mufasa:myhost@testrealm.com:Circle Of Life),注意,在摘要字符串中没有引号。
注意,在摘要函数H()中的字符串中不允许出现空格,除非空格出现在带引号的字符串内或者用以标记字符串摘要的实体主体中。例如,上面出现的字符串A1必须是
Mufasa:myhost@testrealm.com:Circle Of Life
在冒号的两边都不可以有空格,但是允许口令单词之间出现空格(Circle+SP+Of+SP+Life)。同样,其它由H()摘要的字符串也不能在用于域间分隔的冒号两边加空格,除非空格在引号内
或被摘要的实体主体内。
同样要注意的是,如果应用了完整性保护(integrity protection),即qop=auth-int,则H(实体-主体)就是实体主体的哈希值,而不是消息主体的哈希值,该值在发送方进行任何传
输编码前计算,之后,被接收方删除。
对SIP摘要认证方案的理解的更多相关文章
- Digest Authentication 摘要认证
“摘要”式认证( Digest authentication)是一个简单的认证机制,最初是为HTTP协议开发的,因而也常叫做HTTP摘要,在RFC2671中描述.其身份验证机制很简单,它采用杂凑式(h ...
- WebApi接口安全认证——HTTP之摘要认证
摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法.它在密码发出前,先对其应用哈希函数,这相对于HTTP基本认证发送明文而言,更安全.从技术上讲,摘要认证是使用随机数来阻止 ...
- 微服务常见安全认证方案Session token cookie跨域
HTTP 基本认证 HTTP Basic Authentication(HTTP 基本认证)是 HTTP 1.0 提出的一种认证机制,这个想必大家都很熟悉了,我不再赘述.HTTP 基本认证的过程如下: ...
- 前端学HTTP之摘要认证
前面的话 上一篇介绍的基本认证便捷灵活,但极不安全.用户名和密码都是以明文形式传送的,也没有采取任何措施防止对报文的篡改.安全使用基本认证的唯一方式就是将其与SSL配合使用 摘要认证与基本认证兼容,但 ...
- [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)
本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...
- ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)
在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...
- 详解HTTP中的摘要认证机制(转)
Basic认证方式是存在很多缺陷的,具体表现如下: 1, Basic认证会通过网络发送用户名和密码,并且是以base64的方式对用户名和密码进行简单的编码后发送的,而base64编码本身非常容易被解 ...
- 安全验证之使用摘要认证(digest authentication)
安全验证之使用摘要认证(digest authentication) 在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看 ...
- asp.net权限认证:摘要认证(digest authentication)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
随机推荐
- Windows RDP远程连接CentOS 7
1. 打开已经安装了CentOS7的主机,以root用户登录,在桌面上打开一个终端,输入命令:rpm -qa|grep epel,查询是否已经安装epel库(epel是社区强烈打造的免费开源发行软 ...
- Electron 前端页面导入jQuery 出现错误Uncaught ReferenceError: jQuery is not defined
如下: <script src="../assets/js/jquery-1.10.2.js"></script> 方法1 改为: <script&g ...
- Loadrunner11在新建Microsoft Word 报告时提示指定的转换无效
HP Loadrunner11中文教程的学习基本已经结束,最后困扰我的就是这个在创建Microsoft Word 报告时不停的提示“指定的转换无效”的问题.在网上搜索了好长时间,好多朋友回答说没有生成 ...
- linux-修改pip源
1.进入家目录的隐藏 .pip目录下 cd ~/.pip 2.创建并修改pip.conf [global]timeout = 10 # 超时 index-url = http://mirrors.a ...
- 版本控制器svn详细
2 svn介绍 2.1 项目管理中的版本控制问题 通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: 备份多个版本,占用磁盘空间大 解决代码冲突困难 容易 ...
- python 爬预警没解析前的
- java基础三 [深入多态,接口和多态](阅读Head First Java记录)
抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{ public void roam ...
- Android开发之获取系统所有进程信息。
最近在做一个app,有一个进程管理模块用于管理系统中正在运行的进程,并且可以关闭进程进行加速手机的功能,基本把它实现了出来.界面的效果都是自己写的,虽然有BUG,但是基本上能满足需求,后期我会改进BU ...
- Spring中的注解配置-注入bean
在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean ...
- jmeter 常用函数
${__Random(10000000,19999999,str)};vars.put("msisdn","182"+${__evalVar(str)});