网络安全需要考虑到以下几个要点:用户的身份认证 ,确定跟我通信的人就是我要找的人 保证内容的机密性 ,不能让别人知道我们说什么 保证内容的完整性 , 保证我收到的信息就是对方发的信息,而不是别人伪造的. 密码学对称密钥算法 DES Rijndael (强) 三重DES 非对称密钥算法 RSA 消息摘要(不需要钥匙) MD5 SHA-1 数字签名数字签名的意义是: 接收方可以严整发送方所宣称的身份 发送方以后不能否认该消息的内容 接收方不可能自己编造这样的信息 利用公开密钥数字签名 (alice)P-->Da(P)-->Eb(Da(P))------------->Da(P)=Db(Eb(Da(P)))-->Ea(Da(P))-->P(bob)
alice发送明文P,先用自己的私钥Da加密.保证了这条信息是由alice发送出去的. 再用Bob的公钥Eb加密,保证了这条信息只能由Bob才能看见. bob用自己的私钥Db解密 再用alice的公钥解密,还原P 利用消息摘要数字签名 有时候仅需要认证,不需要内容的保密 (alice)P-->H=SHA-1(P)-->Da(H)+P------------------>bob
alice用SHA-1计算出P的散列值H 再用私钥对H进行加密 bob用alice的公钥进行解密得出散列值H bob再对明文P用SHA-1计算出P的散列值和H相比较,如果相同,则说明该包是由alice发送过来,且保证内容未经过他人修改 认证基于共享秘密密钥的认证 前提是双方都有共享的密钥,而且没有第三方知道. 方法1: alice -----A-----> Bob
alice <----Rb----- Bob
alice ---Kab(Rb)-> Bob
alice -----Ra----> Bob
alice <--Kab(Ra)-- Bob
方法2: 绝对安全的认证方法: alice ------------Ra-----------> Bob
alice <-Rb,HMAC(Ra,Rb,A,B,Kab)-- Bob
alice ------HMAC(Ra,Rb,Kab)----> Bob
alice首先发送给Bob一个临时值Ra. bob选择自己的临时值Rb,并连同一个HMAC一起发送回去. HMAC是这样形成的:首先建立一个数据结构, 其中包含了Alice的临时值,Bob的临时值,他们的标识,以及共享的秘密密钥Kab;然后将这个数据结构做散列运算,散列结果为HMAC. 当Alice接收到消息2时,她现在拥有Ra, Rb, 双方的标识,以及秘密密钥Kab,所以她自己也可以计算处HMAC.如果计算的HMAC与消息中的HMAC一致,那么她知道她在与Bob通话. Alice回应给Bob的也是一个HMAC,但是此HMAC仅包含两个临时值和Kab IMS Securiy这里讲的主要是UE和网络之间的安全,为了容易理解,我简化了一些步骤: XMAC = MAC = f1(SQN, RAND, K)
XRES = RES = f2(RAND, K)
Ck = f3(RAND, K)
Ik = f4(RAND, K)
AV = RAND+XRES+Ck+Ik+AUTH
AUTH = SQN+MAC
nonce = RAND+AUTH
用户发送REGISTER Request给IMS网络 S-CSCF向HSS请求 HSS返回一连串的认证数据AV,其中包括 随机数RAND, 期望用户返回的response XRES, 用于保证通信机密的密码Ck, 用于保证通信内容完整性的密码Ik. 认证的信息AUTH, AUTH由SQN和MAC组成.HSS和终端各维护着一个SQN值,其中,终端的SQN是上依次成功注册时HSS分配是SQN.所以HSS的SQN必然是大于终端的SQN. MAC是根据K(用户的密钥), SQN, RAND生成的散列值. S-CSCF保存XRES,并返回401至P-CSCF,其中包含nonce和Ck,Ik. P-CSCF保存Ck, Ik用于验证成功后对信息的解密和加密,并返回401至中断,其中仅包含nonce. 终端获得的信息是RAND, SQN, MAC,首先判断自己的SQN是不是小于HSS的SQN 再根据K, SQN, RAND生成XMAC, 看看是否与MAC匹配,是则表明该消息是由IMS网络发来的 再根据K和RAND生成RES,并将该值放到下一个REGISTER的属性response中. 并根据K和RAND生成Ck和Ik.根据这两个密钥对后续消息的加密和解密. S-CSCF将REGISTER中的response属性和XRES值匹配,如果相同则表明通过验证.