对SIP摘要认证方案的理解

2023-05-16

一、口令认证常见机制

基于口令认证的系统一般有以下几种口令验证方式:

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(实体-主体)就是实体主体的哈希值,而不是消息主体的哈希值,该值在发送方进行任何传

输编码前计算,之后,被接收方删除。

转载于:https://www.cnblogs.com/wenjingu/p/4019434.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对SIP摘要认证方案的理解 的相关文章

  • SIP鉴权—摘要式认证

    SIP 认证过程源自 HTTP 摘要式认证 HTTP Digest Authentication xff0c 它是一种基于质询的安全机制 当服务器收到一个请求 xff0c 将质询请求的发起者 xff0c 要求提供相应的身份信息 服务器发出的
  • 对SIP摘要认证方案的理解

    一 口令认证常见机制 基于口令认证的系统一般有以下几种口令验证方式 xff1a 1 客户端以明文形式将用户名密码通过网络发送到服务器 xff0c 服务器与已经保存在服务端的用户名密码进行比较 xff0c 一致则通过验证 xff1b HTTP
  • SIP 鉴权 & HTTP 认证

    sip 鉴权是基于摘要签名认证的 具体来说 每一个用户都有一个用户名和密码 用户名和密码在客户端和SIP 服务器的数据库中都有保存 在认证的过程中 客户端将自己的信息 用户名 密码 url 等信息 做一些复杂的MD5 或者SHA256 SH
  • SIP鉴权简介

    介绍 SIP提供了一个无状态 基于挑战的鉴权机制 xff0c 该机制基于HTTP的鉴权 任何时候一个UA或代理服务器收到一个请求 除CANCEL和ACK xff0c 都可以挑战请求的发起者要求其提供身份的保证 一旦发起者判定了身份 xff0
  • sip response 摘要认证

    详解摘要认证 1 什么是摘要认证 摘要认证与基础认证的工作原理很相似 xff0c 用户先发出一个没有认证证书的请求 xff0c Web服务器回复一个带有WWW Authenticate头的响应 xff0c 指明访问所请求的资源需要证书 但是
  • SIP协议&开源SIP服务器搭建和客户端安装

    1 SIP SIP 是一个应用层的控制协议 可以用来建立 修改 和终止多媒体会话 例如Internet电话 SIP在建立和维持终止多媒体会话协议上 支持五个方面 1 用户定位 检查终端用户的位置 用于通讯 2 用户有效性 检查用户参与会话的
  • SIP Using SDP with Offer/Answer Model

    根据RFC3261 13 2 1所述 SIP使用的Offer Answer模型是建立在对话环境下的 RFC中还特意对Offer Answer交互有限制 1 初始Offer必须在INVITE消息或者第一个可靠的非失败型响应中 注 当时RFC3
  • 学习SIP非常好的视频

    https www youtube com watch v gMcUpktyhOE
  • 安卓 SIP SSL

    我在 Android 2 3 4 中使用 SIP 堆栈 一切运行良好 但是 我需要系统使用 SSL 并创建了以下代码 SipProfile Builder builder new SipProfile Builder user domain
  • 使用 freeswitch 在网络浏览器中发起呼叫和接听呼叫

    我有一个要求 我有一个网站 我想在其中实现拨出呼叫和拨入呼叫功能 我在 Windows 上使用 freeswitch 作为 sip 服务器 目前我可以使用 verto 在本地分机上发起呼叫 如何直接从浏览器向手机发起出站呼叫 并且还可以使用
  • 在 Raspberry PI 上安装“ring.cx SIP 客户端”

    情况 我希望在我的 Raspberry Pi 上进行基于终端 无头 的 SIP 呼叫 并且我已经使用 linphone 尝试过此操作 RaspberryPI 使用 linphonec 或替代 SIP 软电话进行 SIP 出站呼叫 由于我目前
  • Internet Explorer和Google Chrome Frame可以支持webRTC吗?

    我尝试并测试了各种方法来使 webRTC 在 Internet Explorer 上工作 使用谷歌浏览器插件 网络RTC4all Sipml5 不响应这两种方法 我还阅读了 可定制的 无处不在的网络实时通信 CU RTC Web 实时媒体和
  • 应用程序在 Android 模拟器上正常工作时无法访问设备上的互联网?

    我开发了一个基于 SIP 的应用程序 该应用程序在 Android 设备上调试时无法使用互联网连接 但在模拟器上调试时却可以正常工作 我已在manifest xml 中授予了有关互联网连接的所有权限 是否有任何其他权限可以使用互联网连接在设
  • SIP 软电话客户端的 java SDK

    我想用java构建一个SIP客户端 将向 SIP 注册器注册并能够调用另一个 sip 客户端的 java 类 有什么建议么 如果你愿意的话 你可以尝试我的软件电话 它提供了一个非常简单的API 它被称为同行 http peers sourc
  • 对 Cordova/Phonegap 的 SIP 支持

    是否有可能在 Cordova Phonegap 中使用 SIP 我还没有找到任何插件 对 WebRTC 的支持也不可用 但根据他们的路线图 计划在 2 x 中提供 配套SIP or WebRTC在 Android 上与PhoneGap Co
  • Android 作为 SIP 转 GSM 网关

    很快我就可以使用 SIP 转 GSM 网关 因为我需要从德国向捷克共和国的手机拨打电话 因此 我考虑实施一个 现在 问题是 这样的解决方案是否已经存在 价格合理 是否可以使用可用的 Android API SDK 或 NDK 将 语音 流重
  • 如何使用 Twilio 拨打实时语音电话,而不仅仅是在接听电话时播放 MP3?

    为了通过 Twilio 从笔记本拨打电话号码 我创建了 ASP NET MVC 5 2 应用程序 我可以拨打一个号码并接听电话 但我不知道如何实现实时语音 能够通话 连接 而不仅仅是播放音乐 我在里面创建了一个动作方法HomeControl
  • 如何仅使用音频编解码器制作 iOS VOIP/SIP 应用程序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 任何人都可以帮助我消除我的疑虑 我正在尝试实现 SIP 应用程序 我已经设置了 sip 服务器 并且我有我的 sip 帐户的用户名和密码
  • 使用android的sip进行Android音频通话

    我为客户开发了一个使用 sip 进行互联网呼叫的应用程序 为此 他向我提供了两个有效的 sip 用户 ID 和密码 我正在使用 SIP API 进行 SIP 实施 客户说呼叫无法进行 当他使用自己的帐户登录时 他没有收到任何有关未接来电的通
  • 如何在 Windows Phone 7 中创建自定义文本框?

    是否可以通过创建自定义文本框来处理 sip 我想创建一个自定义文本框 gt 创建获得焦点事件 gt 在我的自定义文本框的焦点上而不是 SIP 上 我的自定义键盘应该打开 要求 如何创建自定义文本框 打开自定义键盘而不是 SIP 获取文本字段

随机推荐

  • 【Linux操作系统分析】进程——进程切换,进程的创建和撤销

    1 进程 进程是程序执行时的一个实例 xff0c 可以把它看作充分描述程序已经执行到何种程度的数据结构的汇集 从内核的观点看 xff0c 进程的目的是担当分配系统资源 xff08 CPU时间 xff0c 内存等 xff09 的实体 xff0
  • C++中的.和::和:和->的区别

    在学习C 43 43 的过程中我们经常会用到 和 和 xff1a 和 gt xff0c 在此整理一下这些常用符号的区别 1 A B则A为对象或者结构体 xff1b 2 A gt B则A为指针 xff0c gt 是成员提取 xff0c A g
  • 通过Curl 对url进行encode操作

    最近做项目的时候 xff0c 通过 Gflags Reload 时候 发现对于某些value中包含 61 中文等字符的支持不够好 xff0c value被截断了 经过分析后 xff0c 发现程序对url切分是用 61 amp 为标准的 xf
  • STM32进阶之串口环形缓冲区实现(转载)

    转载自微信公众号 玩转单片机 xff0c 感谢原作者 杰杰 队列的概念 在此之前 xff0c 我们来回顾一下队列的基本概念 xff1a 队列 Queue xff1a 是一种先进先出 First In First Out 简称 FIFO 的线
  • 位和结构体寄存器访问方法(转)

    1 2 1 传统 define 方法 1 2 外设位域结构体方法综述 DSP281x 头文件和外设示例使用位域结构体方法 xff0c 映射和访问基于F28x 外设寄存器 本节将介绍这种方法 xff0c 并把它和传统的 define 方法加以
  • 关于将函数写入头文件问题(分离式编译)

    如果某些函数在其他很多 cpp 文件中被调用 xff0c 那么为了避免写大量重复的代码以及让代码量更小一些 xff0c 我们可以将这些函数写头文件中 xff0c 然后其他 cpp 文件只需要引用该头文件然后就可以使用包含在头文件中的函数了
  • SpringSecurity配置跨域访问

    说明 java后端web服务有很多种方法可以实现跨域访问 xff0c 配置很简单 xff0c 今天这里我们用SpringSecurity的方式配置跨域访问 xff0c 配置方法如下 xff1a span class token keywor
  • 嵌入式C语言开发---存储器与寄存器

    概述 xff1a 讲述如何使用C语言来对底层寄存器进行封装 内容 xff1a 存储器映射寄存器与寄存器映射C语言访问寄存器 存储器映射 程序存储器 数据存储器 寄存器和I O 端口排列在同一个顺序的4 GB 地 址空间内 存储器映射 xff
  • httplib用法

    httplib的内容上是很多 xff0c 也比较简单 以下是一个非常简单的例子 xff0c 使用httplib获取google首页的html xff1a import httplib conn 61 httplib HTTPConnecti
  • HTTP认证之摘要认证——Digest(一)

    导航 HTTP认证之基本认证 Basic xff08 一 xff09 HTTP认证之基本认证 Basic xff08 二 xff09 HTTP认证之摘要认证 Digest xff08 一 xff09 HTTP认证之摘要认证 Digest x
  • Linux 文件名和路径的最大长度

    在x86 64 Linux下 xff0c 文件名的最大长度是255个字符 characters xff0c 文件路径的最大长度是4096字符 characters xff0c 即可以包含16级的最大文件长度的路径 在 lt limits h
  • Django之auth

    一 xff1a auth基础 xff08 1 xff09 作用 xff1a django提供给开发人员 对用户进行操作的模块的 例如 xff1a 登录 注册 认证 注销等等 xff08 2 xff09 使用方式 from django co
  • [JavaSE 源码分析] 关于HashMap的个人理解

    目录 HashMap是什么 HashMap的底层数据结构是什么 table容量为什么必须是二的倍数 table容量怎么做到二的倍数 Entry是怎样的结构 Node Entry在HashMap中的具体实现处理hash冲突的方法HashMap
  • HIS(LIS、PACS、RIS、EMR)系统简介

    HIS xff08 LIS PACS RIS EMR xff09 系统简介 HIS xff1a 医院信息系统 Hospital Information System HIS xff0c 利用电子计算机和通讯设备 xff0c 为医院所属各部
  • jackson使用问题:mapper.readValue()将JSON字符串转反序列化为对象失败或异常

    问题根源 xff1a 转化目标实体类的属性要与被转JSON字符串总的字段 一 一对应 xff01 字符串里可以少字段 xff0c 但绝对不能多字段 先附上我这段出现了问题的源码 xff1a 1 接收并转化相应的参数 需要在pom xml中引
  • SpringSecurity集成oauth2(jwt)

    版本 springboot版本 xff1a 2 2 7 RELEASE spring security oauth2版本 xff1a 2 3 6 RELEASE 主要依赖 span class token tag span class to
  • 微信小程序开发——点击按钮获取用户授权没反应或反应很慢的解决方法

    异常描述 xff1a 点击按钮获取用户手机号码 xff0c 有的时候会出现点击无反应 或很久之后才弹出用户授权获取手机号码的弹窗 xff0c 这种情况下 xff0c 也会出现点击穿透的问题 xff08 详见 xff1a 微信小程序开发 连续
  • 09-cmake语法-add_dependencies()

    在编译器的命令行上 xff0c 为当前路径以及下层路径的源文件加入一些define flag 这个命令可以用来引入任何flag xff0c 但是它的原意是用来引入预处理器的定义 那些以 D或 D开头的 看起来像预处理器定义的flag xff
  • WordPress教程之判断文章所属分类函数in_category、is_category

    最近自己在修改一个采用Wordpress程序的博客的时候需要用到一个特殊的功能 xff1a 我需要判断这篇文章是属于哪些分类 xff0c 如果属于我设定的分类下的文章 xff0c 则输出一个DIV内容 按道理说实现这个功能应该不算太难 xf
  • 对SIP摘要认证方案的理解

    一 口令认证常见机制 基于口令认证的系统一般有以下几种口令验证方式 xff1a 1 客户端以明文形式将用户名密码通过网络发送到服务器 xff0c 服务器与已经保存在服务端的用户名密码进行比较 xff0c 一致则通过验证 xff1b HTTP