MGCP /H.248 鉴权认证
MGCP /H.248 鉴权认证
鉴权概述和基本算法
MGCP/H.248鉴权概述
MGCP协议没有涉及安全认证的标准。对于网络应用终端客户或运营商来说都不安全的盗号隐患。
解决这问题,国标和各厂家有各自标准。目前看到的资料比较少,总体上是通过扩展协议,完成MG与MGC交互。简单引入MD5算法加密密码,避免密码明文暴露在网络中。更复杂的就引入DH协商共享KEY。通过研究总结如下:
H.248/MGCP鉴权基本原理算法一:
H.248和MGCP鉴权基本原理相似,都是利用Diffie-Hellman协商一个公共的秘密,并以此作为相互之间信任的依据。
Diffie-Hellman密钥交换是利用离散对数的特征:一个大质数p,以及一个底数g。已知一个特定的值y,求指数x,如下所示:
y =gx mod p
其中,mod是"求余"的意思。模指数很容易便可计算出来,但假若想通过一次离散对数运算恢复原来的指数,却是异常艰难的。
H.248/MGCP鉴权基本原理算法二:
软交换MGC发给MG鉴权请求Authreq ,Authreq = MD5(内容未知)
MG 回复MGC Authoc,MD5(内容未知)
在软交换端比较Authoc是否正确。
问题分析
1)Diffie-Hellman算法的本身很简单,实现比较复杂,因为大数运算溢出处理。所以要引入大数运算库。
我参考了开源的算法库,用来移植。
参考资源:
http://math.libtomcrypt.org
2)MD5算法资源较多我就不列。有需要的话,请留留言。
3)MGCP协议栈
需要扩展的信号有三个
Auth/Authreq 请求信号
Auth/Authoc 事件
Auth/dh
参数也有三个
X-EA
X-RANDOM
X-DH
X-AUTH
下面是我利用的资料希望对你有帮助。
参考资料《中国电信MGCP 协议测试规范》
RSIP 65577*@mg.whaterver.netMGCP 1.0 NCS 1.0
RM: restart
X-EA:1
X-RANDOM:b1bdd81eb1bdd81eb1bdd81eb1bdd81e
X-DH: dc91ee 616ea 7ab4e82dc0e 42325baf3469d146270bd185b7e4bb0d 607fea
b 24de8975e0b1bcdd21e29b321802115b30ca 14effe768593b6fec6fff6fd7d788bf
X-AUTH: 38d972fedc 6594b
RQNT 268435562*@mg.whaterver.netMGCP 1.0
X: 15
R: auth/authoc
S: auth/dh(EBC 599282516167DE 0BDFDEB421BACA2470FF9FC 846BC4E 14E 3EC1
E86B 6DEFD1E449BE9017D 6B5BFF76EFCDD 758AA 8B29ACD 841746ED18CFD), auth/authreq
(D567D 15485E5E07020DED6BB, 1,0B95627084321AFCA422B 7718FE218)
解决方法(华为模式)
现在资料:
---------------------------------------------------------------------------------------------------
Tx:
RSIP 925595073aaln/*@iad108.01.kdwl.nanchang.comMGCP 1.0
RM:restart
---------------------------------------------------------------------------------------------------
Rx:
200 925595073 OK
---------------------------------------------------------------------------------------------------
Rx:
RQNT 879300970aaln/1@iad108.01.kdwl.nanchang.comMGCP 1.0
X:1600000d
R:AUTH/authoc
S:AUTH/authreq( 4cc 8540762e36222b08ca4305)
---------------------------------------------------------------------------------------------------
Tx:
200 879300970 OK
---------------------------------------------------------------------------------------------------
Tx:
NTFY 2aaln/1@iad108.01.kdwl.nanchang.comMGCP 1.0
O:auth/authoc(2e7e4dfee0b66af 8ffd57ce7eaf63d)
X:1600000d
---------------------------------------------------------------------------------------------------
Rx:
200 2 OK
以下内容是我的猜想:
软交换MGC发给MG鉴权请求Authreq ,Authreq = MD5(MGCKey+Rand())
MG 回复MGC Authoc, Authoc =MD5(Autheq+MgId+Ki)
在软交换端比较Authoc是否正确。
处理流程:
解决方法2(参考《中国电信MGCP 协议测试规范》)
现有资料:
注册请求(带认证字段)
MGC 响应MG 的注册请求(带认证字段)流程解释:
1) MG 向MGC 发RSIP 命令(带通配符),启动方式为restart;命令中还带有四个用于
认证的"X-"字段:用于数字签名的数字串MGAUTH、算法ID、随机数Rand 和用于
DH 交换的A。
MG 事先产生一个随机数Rand,同时MG 再产生一个用于DH 交换的私人数字a,计算
得到A=gamod(P)。通过计算得到MG 的数字签名:
MGAUTH=MD5(Ki + MGID + A + Rand);
2) MGC 收到RSIP 命令后,首先计算MGRES= MD5(Ki + MGID + A + Rand)。
如果MGAUTH = MGRES,则对MG 的认证通过,否则拒绝。认证通过后,MGC 再产生
一个用于DH 交换的私人数字b,计算
B=gbmod(P) 得到共享的鉴权密钥KEY-MGC= Abmod(P)=gabmod(P),并再产生
一个随机数Rand,进而计算得到:
MGCAUTH=MD5(KEY-MGC + Ki + B + Rand)
3) MGC 下发检测摘机RQNT 命令;同时MGC 把B 下传给MG,同时下传的还有
MGCAUTH、算法ID 和随机数Rand。 MG 得到B,MGCAUTH 后,首先计算得到共享的
鉴权密钥 KEY-MG= Bamod(P)=gabmod(P), 进而计算得出 : MGCRES=MD5
(KEY-MG + Ki + B + Rand)
如果MGCAUTH = MGCRES,则说明是一个合法的MGC 发过来的信息。
4) 发送对MGC 的回应消息。
MGC 发起认证鉴权
1. MGC 向MG 发起定期鉴权;
2. MG 回响应。
流程解释:
1) MGC 定期向MG 发送RQNT 命令进行鉴权,命令中带有MGC 产生的随机数Rand
以及共享密钥KEY-MGC 对其加密生成的结果,同时还带有算法ID。如采用MD5 加密,
则加密结果为MD5(KEY-MG + Rand);
2) MG 回响应;
3) MG 用NTFY 中的[ObservedEvents]向MGC 回送鉴权应答,应答中带有用共享密钥
KEY-MG 加密的两项:MGID 及随机数Rand(为MGC 所带的),同时命令中还带有算
法ID。如采用MD5 加密,则加密结果为MD5(KEY-MG + MGID + Rand);
4) MGC 回响应。
消息示例如下:
1.MGC 向MG 发起鉴权
RQNT 268435462*@DomainNameMGCP 1.0
X: 14
R: auth/authoc
S: auth/authreq(C45565B 3BCB419FA194232EF ,1,010B 29333D47515B 79838D97)
2.MG 回送命令响应
200 268435462 Ok
3.MG 向MGC 回送鉴权应答
NTFY 65578*@DomainNameMGCP 1.0
X: 14
O: auth/authoc(122daa 8b9155bb 0726aec15ba,1)
4.MGC 回送命令响应
200 65578 OK