对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权限认证 ...
随机推荐
- Hive中创建结构体、数组以及map
ROW FORMAT DELIMITED 分隔符设置开始语句 FIELDS TERMINATED BY:设置字段与字段之间的分隔符 COLLECTION ITEMS TERMINATED BY:设置一 ...
- 深入浅出 Java Concurrency (6): 锁机制 part 1 Lock与ReentrantLock
前面的章节主要谈谈原子操作,至于与原子操作一些相关的问题或者说陷阱就放到最后的总结篇来整体说明.从这一章开始花少量的篇幅谈谈锁机制. 上一个章节中谈到了锁机制,并且针对于原子操作谈了一些相关的概念 ...
- 《OpenCL异构并行编程实战》补充笔记散点,第五至十二章
▶ 第五章,OpenCL 的并发与执行模型 ● 内存对象与上下文相关而不是与设备相关.设备在不同设备之间的移动如下,如果 kernel 在第二个设备上运行,那么在第一个设备上产生的任何数据结果在第二个 ...
- WordPress无法发送电子邮件,可能原因:您的主机禁用了mail()函数解决方案
体验更优排版请移步原文:http://blog.kwin.wang/website/wp-cant-send-email-solution.html 最近折腾了下WordPress,给米表 搭了个论坛 ...
- sudo免密码
很多都是修改/etc/sudoers权限为740再加上一句 ALL=NOPASSWD:ALL 或者加一句 yourname ALL=(ALL) NOPASSWD: ALL 然后权限改回440 先说第一 ...
- HBase实验(CRUD和MR入库)
目录 前期准备 在HBase shell中实现CRUD操作 1. 启动命令行客户端 2. 创建表 3. 删除.新增列族 4. 删除表teacher 5. 新增数据 6. 查看数据 用Java API实 ...
- S 配置邮箱
- java普通类如何调用Spring的Service层?
首先在Service层上面添加 @Service("myService") 然后,在main方法中调用,String[]中为配置文件,如下所示: ApplicationContex ...
- php模拟http请求
在http简析中,我们提到了浏览器请求资源的一个流程,那么这个流程能不能用php来模拟呢?答案是肯定的. php模拟http请求需要实现以下步骤: 1.连接apache服务器 使用fsockopen: ...
- 6-Ubuntu与Windows不能相互复制
在安装Ubuntu系统后发现与Windows系统的文件不能相互复制,网上查了很多教程,发现都是不能用的,能实现的方法如下所示: 第一步: sudo apt-get autoremove open-vm ...