部分转自 http://scut-xers.blogbus.com/logs/41092538.html
对于保障消息的真实性则可以通过身份认证的手段来完成。SIP协议经常采用HTTP摘要认证这一认证机制。HTTP摘要认证根据用户名和密码验证一个用户。
身份认证过程如下:服务器收到客户机请求后对客户机发起鉴权,鉴权信息一般包括只用于此次鉴权的随机数nonce,作用域realm等信息。客户机将收到的随机数、作用域和用户名、密码(与服务器共享)等信息经摘要算法F运算后生成响应值response,并将其发送给服务器继续请求。服务器通过将收到的响应值同预期计算值相比较来判断用户的合法性。
response算法:
A1 = md5(username:realm:password)
A2 = md5(request-method:uri) // request method = GET, POST, etc.
Response = md5(A1:nonce:nc:cnonce:qop:A2)
HTTP摘要认证机制包括User-to-User和Proxy-to-User两种模式。但其中的User-to-User模式仅实现了Registrar-to-User这一种情况,要通过它来实现两个终端UA之间的认证并不可行。因此目前HTTP摘要认证仅能实现Server (包括Proxy、Registrar和RedirectServer)对本域内UA的认证,而无法实现UA对Server的认证、Proxy对Proxy的认证和Proxy对域外UA的认证。前面的实验也证实了不少攻击正是利用该缺陷来完成的。