Http协议(5)—HTTP摘要认证

一、摘要认证的改进
        1.用摘要保护密码
            客户端不发送密码,而是发送一个摘要,服务端只需验证这个摘要是否和密码相匹配
        
        2.单向摘要
            a.摘要是一种单向函数,将无限的输入值转化为有限的
            b.常见的摘要为MD5:
                将任意长度的字节序列转换为一个128位的摘要;
                MD5的128位摘要通常会被写成32个十六进制的字符,每个字符4位

        3.用随机数防止重放攻击
            a.黑客可以截获摘要对服务器无限制的重发攻击
            b.可以将随机数添加到密码中,然后再根据具有随机数的密码生成摘要,这样每次生成的
            摘要都不相同,可以防止重放攻击
    
        4.摘要认证的握手机制      
            (1).服务器计算出一个随机数
            (2).服务器将此随机数放在www-Authenticate中,随算法列表一起发往客户端
            (3).客户端选择一个算法,计算出密码和其他数据摘要
            (4).客户端将摘要放在一条Authorization响应中发往服务端
            (5).服务器根据客户端发送的响应计算出相同的摘要,然后服务器将本地生成的摘要与网络
                 传送过来的摘要进行比较,验证是否匹配

二、摘要计算
        1.摘要算法的输入数据
            a.由单向散列函数H(d)和摘要KD(s,d)组成的一对函数,s为密码,d为数据
            b.一个包含安全信息的数据块,称为A1
            c.一个包含请求报文中非保密属性的数据块,成为A2
        
        2.算法H(d)和KD(s,d)
            H(<data>) = MD5(<data>)    
            KD(<secret>,<data>) = H(concatenate<secret>:<data>)

        3.与安全相关的数据(A1)
            密码和受保护信息的产物,包含用户名、密码、保护域、随机数
            MD5
                    为每条请求运行单向散列函数,A1是由冒号连接起来的用户名、域、密码
            MD5-sess
                    只在第一次www-Authenticate握手时运行一次散列函数
            算法对A1的定义
                   
            ps:nonce为当前随机数;cnonce为客户端随机数            

        4.与报文有关的数据(A2)
            包括URL、请求方法、报文实体,有助于防止方法、资源或报文被篡改
            根据保护质量(qop),为A2提供两种策略:
                    a.只包含HTTP请求方法和URL,默认
                    b.添加报文实体,当qop="auth-init"时使用
            算法对A2的定义
                    
            ps:request-method为请求方法;uri-directive-value为请求URI

        5.摘要认证会话
            客户端响应对保护空间的WWW-Authenticate质询时,会启动一个此保护空间的认证对话

        6.预授权
            摘要认证:
                    a.服务器预先在Authentication-Info首部中发送下一个随机数
                    b.服务器允许在一小段时间内使用同一个随机数
                    c.客户端和服务器使用同步的、可预测的随机数生成算法

        7.随机数的选择
            BASE64(time-stamp H(time-stamp ":" ETag ":" private-key))
                time-stamp:服务器产生的时间戳
                ETag:与所请求实体有关的ETag首部
                private-key:只有服务器知道的数据
    
        8.对称认证
            客户端对服务器的认证

三、增强保护质量(报文完整性检查)
        在三种摘要首部中提供qop字段:
            WWW-Authenticate
            Authorization
            Authentication-Info

        1.报文完整性保护(qop="auth-init")

四、应该考虑的实际问题
        1.多重质询
            服务器可以对某个资源发起多重质询,即既提供基本认证,又提供摘要认证
        2.差错处理
            认证服务器一定要确保URI指令指定的资源与请求行中指定的资源相同,否则返回400  BadRequest错误
            
        3.保护空间
            .域值与被访问服务器的标准根URL结合在一起定义了保护空间
            .保护空间确定了可以自动应用证书的区域
            .在基本认证中,客户端会假设请求URI中或其下的所有路径都与当前的质询处处于同
            一个保护空间
            .在摘要认证中,质询的WWW-Authenticate:domain字段对保护空间做了更精确的定义

        4.重写URI
            代理可以改变URI语法而不改变实际指向的资源来重写URI
            由于摘要认证需要检查URI的完整性, 故URI一经修改会破坏摘要
        
        5.缓存
            共享缓存收到Authorization首部的请求并且转接那条请求产生的响应时,当响应中提供了
            Cache-Control:must-revalidate和Cache-Control:public时才会将此响应作为任何其他    
            请求的应答使用    
            Cache-Control:must-revalidate:
                    缓存可以在应答后续请求时使用响应的实体部分,但是后续请求应该和原始服务器进行
                    验证
            Cache-Control:public:
                    对任意后继请求都可以使用响应实体

五、安全性考虑
        1.首部篡改
            防篡改机制:
                端到端加密与首部进行数字加密

        2.重放攻击
    
        3.多重认证机制

        4.词典攻击
            密码猜测估计

        5.恶意代理攻击和中间人攻击
        
        6.选择明文攻击
            预先计算的词典攻击
            批量暴力型攻击

        7.存储密码
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章