详解摘要认证

2023-05-16

1. 什么是摘要认证


摘要认证与基础认证的工作原理很相似,用户先发出一个没有认证证书的请求,Web服务器回复一个带有WWW-Authenticate头的响应,指明访问所请求的资源需要证书。但是和基础认证发送以Base 64编码的用户名和密码不同,在摘要认证中服务器让客户端选一个随机数(称作”nonce“),然后浏览器使用一个单向的加密函数生成一个消息摘要(message digest),该摘要是关于用户名、密码、给定的nonce值、HTTP方法,以及所请求的URL。


2. 摘要认证算法


摘要认证规范最早定义在RFC 2069中,RFC 2069定义了由服务器生成随机数来维护安全性的摘要认证架构,认证结果是采用下列方法得出的:


HA1=MD5(username:realm:password)
HA2=MD5(method:digestURI)
response=MD5(HA1:nonce:HA2)  


后来,RFC 2617引入一些可选的增强安全的方法代替了RFC 2069,这些增强的方法包括质量保护(QOP),客户端自增加计数器和客户端生成的随机数。这些可选参数提高了摘要认证的安全性,如可防止明文***。


如果算法指令是“MD5”或者未指定,HA1算法如下:


HA1=MD5(username:realm:password)  


如果算法指令是“MD5-sess”,HA1算法


HA1=MD5(MD5(username:realm:password):nonce:cnonce)  


如果质量保护指令是“auth”或未指定,HA2算法是


HA2=MD5(method:digestURI)  


如果质量保护指定是“auth-int”,HA2算法是


HA2=MD5(method:digestURI:MD5(entityBody))  


如果质量保护指定是“auth”或者“auth-int”,响应结果算法是


response=MD5(HA1:nonce:nonceCount:cnonce:qop:HA2)  


如果质量保护指令未指定,响应结果算法是


response=MD5(HA1:nonce:HA2)  


3. MD5安全问题对摘要认证的影响


虽然MD5是可逆的,被认为是不安全的,但是在HTTP摘要认证过程中使用MD5算法中引入了一些随机数,使得数据的可逆性的难度大大提高,所以使用MD5是安全的。但如果用户的密码过于简单,通过字典或排序查找算法破解难度就大大降低了,因此不建议使用过于简单的密码。


RFC2617 的安全增强的主要方式:


发起请求的时候,服务器会生成一个密码随机数(nonce)(而这个随机数只有每次"401"相应后才会更新),为了防止***者可以简单的使用同样的认证信息发起老的请求,于是,在后续的请求中就有一个随机数计数器(cnonce),而且每次请求必须必前一次使用的打.这样,服务器每次生成新的随机数都会记录下来,计数器增加.在RESPONSE 码中我们可以看出计数器的值会导致不同的值,这样就可以拒绝掉任何错误的请求.


4. 摘要认证流程


  • 客户端请求一个需要认证的页面,但是不提供用户名密码

  • 服务器返回401 "Unauthorized" 响应代码,并提供认证域(realm),以及一个随机生成的、只使用一次的数值,称为密码随机数 nonce

  • 浏览器会向用户提示认证域(realm)(通常是所访问的计算机或系统的描述),并且提示用户名和密码。

  • 一旦提供了用户名和密码,客户端会重新发送同样的请求,但是添加了一个认证头包括了响应代码。

  • 服务器接受了认证并且返回了请求页面。如果用户名非法和/或密码不正确,服务器将返回"401"响应代码,然后客户端会再次提示用户输入用户名及密码。


5.一段摘要加密报文示例


有兴趣的用户可以根据摘要加密算法进行计算。

Authorization: 

Digest username="admin",     //用户名

realm="favourite digest realm",   //用户认证提示

nonce="1478047635099:8f32add4b6aaef23649ca330b25c64be",  //随机数

uri="/hello",  //请求地址

response="778110c2b5d0215e0d7640a6baa069a0",   //加密后的值

opaque="B2E49B2542089EE534695CA7742FB588",  

qop=auth,   //质量保护

nc=00000001,   //客户端自增加随机数计数器

cnonce="8664dcaabed7e083" //客户端的随机数


HA1=MD5("admin:favourite digest realm:password");

HA2=MD5("GET:"+uri);

response = MD5(HA1:nonce:nc:cnonce:qop:HA2)



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

详解摘要认证 的相关文章

随机推荐

  • 永久关闭swap分区

    参考文章 xff1a https blog 51cto com 6923450605400 735323 xff08 1 xff09 临时关闭swap分区 重启失效 swapoff a xff08 2 xff09 永久关闭swap分区 se
  • querySelector() 方法

    返回文档中匹配指定 CSS 选择器的一个元素 虽然IE8中没有getElementsByClassName 但可以用querySelector 代替 注意 xff1a querySelector 方法仅仅返回匹配指定选择器的第一个元素 如果
  • 《Programming in Lua 3》读书笔记(二十五)

    日期 xff1a 2014 8 11 Part The C API 29 User Defined Types in C 在之前的例子里 xff0c 已经介绍过如果通过用C写函数来扩展Lua 在本章 xff0c 将会介绍通过用C写新的类型来
  • EntityFramework

    How to Call StoreProcedure http www tudou com programs view 0WtDy50Hbzs target 61 blank If it not work see http stackove
  • HOOK技术的一些简单总结

    好久没写博客了 xff0c 一个月一篇还是要尽量保证 xff0c 今天谈下Hook技术 在Window平台上开发任何稍微底层一点的东西 xff0c 基本上都是Hook满天飞 xff0c 普通应用程序如此 xff0c 安全软件更是如此 xff
  • windows2000上如何跑MSN

    WINDOWS2000上一直可以跑MSN的 LP公司还在用可怜的2000 xff0d xff0d 在9月13日以前 xff0c 我就一直这样与LP MSN联系 但之后就不行了 xff0c 直到今天 xff0c LP就没能再登录MSN 兹事体
  • 30岁人生进度条_30岁前,人生可以靠努力,30岁后,人生更需要一些“觉醒”

    慈怀女子 偶然看到胡歌一位粉丝的留言 xff0c 触动很深 入行15年 xff0c 如今的胡歌 xff0c 已活成了百万粉丝心中的 灯塔 24岁之前 xff0c 胡歌的青春几乎是开挂的 高中起就拍广告 xff0c 迅速在上海广告界蹿红 大二
  • win10环境安装TensorFlow2.0 - 吴恩达视频-修复版

    文章整体参考吴恩达老师的视频 xff0c 见如下 https www bilibili com video BV19E411Y7Kw p 61 4 实际结果 xff1a 不可行 xff01 版本安装后1 1 0 xff01 本文提供解决方案
  • tensorflow2.0入门与实战(笔记) 独热编码与交叉熵损失函数

    百度的独热编码定义 独热编码即 One Hot 编码 xff0c 又称一位有效编码 xff0c 其方法是使用N位状态寄存器来对N个状态进行编码 xff0c 每个状态都有它独立的寄存器位 xff0c 并且在任意时候 xff0c 其中只有一位有
  • 树莓派基础信息

    默认的用户名 pi 默认的密码是 raspberry 如果SSH连接别拒绝 xff0c 可能要修改以下密码 xff0c 使用命令sudo passwd pi aptitude可以解决安装包依赖问题
  • ESP32+arduino开发基础信息

    开发环境准备 官方的开发环境配置指导 xff1a Installing Arduino ESP32 2 0 2 documentation 实测可用 xff0c 其中在IDE首选项中增加的URL xff0c development和stab
  • git常用命令汇总

    Git本地操作 git init初始化git库git add添加文件git rm删除文件git commit m 34 xxxx 34 提交修改 xff0c 并增加提交日志git status查看版本库状态git log查看近期提交记录gi
  • 移植python3到ARM平台的OK6410开发板

    1 下载 python3 2 2 的源码 源码下载地址 xff1a http www python org ftp python 3 2 2 Python 3 2 2 tgz xff08 1 xff09 在 Ubuntu 上必须安装同版本的
  • 串口通信校验方式(even,odd,space,mark) 分类: 开...

    无校验 xff08 no parity xff09 奇校验 xff08 odd parity xff09 xff1a 如果字符数据位中 34 1 34 的数目是偶数 xff0c 校验位为 34 1 34 xff0c 如果 34 1 34 的
  • alias 命令的用法/相对路径和绝对路径/cd命令/rmdir,mkdir 创建和删除命令/rm命令...

    alias 命令的用法 相对路径和绝对路径 cd命令 rmdir xff0c mkdir 创建和删除命令 rm命令 alias是用做别名用 如下 xff1a root 64 alex alias alias cp 61 39 cp i 39
  • HTTP基础认证Basic Authentication

    HTTP基础认证Basic Authentication Basic Authentication是一种HTTP访问控制方式 xff0c 用于限制对网站资源的访问 这种方式不需要Cookie和Session xff0c 只需要客户端发起请求
  • c语言中结构体对齐详解

    为什么要对齐 现代计算机中内存空间都是按照byte划分的 xff0c 从理论上讲似乎对任何类型的变量的访问可以从任何地址开始 xff0c 但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问 xff0c 这就需要各种类型数据按照一
  • CAN总线基础和在linux下使用实战

    CAN总线基础和在linux下使用实战 CAN 是Controller Area Network 的缩写 有CANH和CANL两线 xff0c 即差分信号通信 当然设备芯片还会有电源和地等线 在总线空闲时 xff0c 所有的单元都可开始发送
  • C和C++的区别,有你不知道的

    c和c 43 43 可以说现在都是比较流行的 xff0c 但是两者到底有什么联系和区别吗 xff0c 这是学习c和c 43 43 最需要注意的 xff0c 不要把两者搞混了 xff0c 我们先开始就来看一下c和c 43 43 有什么联系 x
  • 详解摘要认证

    1 什么是摘要认证 摘要认证与基础认证的工作原理很相似 xff0c 用户先发出一个没有认证证书的请求 xff0c Web服务器回复一个带有WWW Authenticate头的响应 xff0c 指明访问所请求的资源需要证书 但是和基础认证发送