利用AVISPA证明D2D协议

利用AVISPA证明UAKA-D2D协议

一、UAKA-D2D协议

UAKA-D2D协议核心思想:UAKA-D2D协议(Universal Authentication and Key Agreement protocol for D2D communications)通过消息完整性校验和会话密钥协商帮助通信双方实现安全通信,类似于DH密钥交换协议。

符号说明
符号含义
U E i UE_i UEi/ U I D i UID_i UIDi使用者的设备 i i i/ i i i的身份码
H N i HN_i HNi/ H N I D i HNID_i HNIDi U E i UE_i UEi的本域网/ U E i UE_i UEi本域网的身份码
V N i VN_i VNi/ V N I D i VNID_i VNIDi U E i UE_i UEi的访问网/ U E i UE_i UEi访问网的身份码
K i K_i Ki U E i UE_i UEi H N i HN_i HNi的共享密钥
K v 2 v K_{v2v} Kv2v V N 1 VN_1 VN1 V N 2 VN_2 VN2的共享密钥
K D F KDF KDF密钥导出函数
K a s m e i K^i_{asme} Kasmei H N i HN_i HNi V N i VN_i VNi生成的漫游密钥
K D 2 D i K^i_{D2D} KD2Di由密钥 K a s m e i K^i_{asme} Kasmei导出的 D 2 D D2D D2D函数密钥,用于生成 D 2 D D2D D2D会话密钥
F I D i FID_i FIDi函数类的身份码
S I D I SID_I SIDI D 2 D D2D D2D会话的身份码
H I N T i HINT_i HINTi U E i UE_i UEi的会话密钥线索
m a c i mac_i maci H I N T i HINT_i HINTi的消息认证码
K s K_s Ks D 2 D D2D D2D会话密钥
第1阶段:系统设置

​ 初始化所有参数。

第2阶段:漫游UE注册
  1. U E i ( i = 1 , 2 ) UE_i(i=1,2) UEi(i=1,2) V N i VN_i VNi发送注册请求。

    U E i → V N i : ( U I D i , H N I D i ) UE_i \rightarrow VN_i:(UID_i,HNID_i) UEiVNi:(UIDi,HNIDi)

  2. V N i VN_i VNi收到请求后,先校验它是否与 H N i HN_i HNi存在漫游协议。若存在,则向 H N i HN_i HNi发送认证请求。

V N i → U N i : ( U I D i , V N I D i ) VN_i \rightarrow UN_i:(UID_i,VNID_i) VNiUNi:(UIDi,VNIDi)

  1. H N i HN_i HNi收到请求后,先校验 V N i VN_i VNi的合法性,并判断是否与它存在漫游协议。若不存在, H N i HN_i HNi拒绝该请求;反之,校验 U E i UE_i UEi是否为授权用户。若是, H N i HN_i HNi生成包含漫游密钥 K a s m e i K^i_{asme} Kasmei认证信息并发送给 V N i VN_i VNi

    H N i → V N i : K a s m e i HN_i \rightarrow VN_i : K^i_{asme} HNiVNi:Kasmei

    K a s m e i = K D F ( K i , V N I D i , R A N D i ) K^i_{asme} = KDF(K_i, VNID_i, RAND_i) Kasmei=KDF(Ki,VNIDi,RANDi) R A N D i RAND_i RANDi是由 H N i HN_i HNi挑选的随机数。

  2. V N i VN_i VNi使用所接受到的认证信息,使用标准 E P S EPS EPS A K A AKA AKA认证过程与 U E i UE_i UEi进行相互认证。通过该认证过程, V N i VN_i VNi U E i UE_i UEi从漫游密钥 K a s m e i K^i_{asme} Kasmei中导出了 D 2 D D2D D2D函数密钥 K D 2 D i K^i_{D2D} KD2Di

    V N i ↔ U E i : K D 2 D i VN_i \leftrightarrow UE_i : K^i_{D2D} VNiUEi:KD2Di

    K D 2 D i = K D F ( K a s m e i , F I D i , R A N D i ′ ) K^i_{D2D} = KDF(K^i_{asme},FID_i,RAND_i') KD2Di=KDF(Kasmei,FIDi,RANDi) R A N D i ′ RAND_i' RANDi是由 V N i VN_i VNi选择的随机数, F I D i FID_i FIDi D 2 D D2D D2D函数类的身份码(保证 U E i UE_i UEi在同一网络中被不同的 D 2 D D2D D2D函数类服务时,所得到的 K D 2 D i K^i_{D2D} KD2Di不同)。

    D 2 D D2D D2D函数密钥 K D 2 D i K^i_{D2D} KD2Di将被用于生成 D 2 D D2D D2D会话密钥。

第3阶段:D2D查找与随机数协商

U E 1 UE_1 UE1 U E 2 UE_2 UE2通过开放且独立且安全的带外信道共享秘密随机数 R P R_P RP

第4阶段:生成D2D会话密钥
  1. 一个使用者设备(如 U E 1 UE_1 UE1)启动会话密钥生成程序,向它的访问网 V N 1 VN_1 VN1发送 D 2 D D2D D2D会话请求。

    U E 1 → V N 1 : ( U I D 1 , U I D 2 , V N I D 2 ) K D 2 D 1 UE_1\rightarrow VN_1:(UID_1,UID_2,VNID_2)_{K^1_{D2D}} UE1VN1:(UID1,UID2,VNID2)KD2D1

  2. V N 1 VN_1 VN1收到请求后,校验 V N 2 VN_2 VN2的合法性并判断是否与其签署了用于 D 2 D D2D D2D服务的协同计算协议。若非,则拒绝该请求;反之, V N 1 VN_1 VN1生成此次 D 2 D D2D D2D会话的身份码 S I D I SID_I SIDI,选取随机数 r 1 r_1 r1,向 V N 2 VN_2 VN2发送密钥协商请求。

    V N 1 → V N 2 : ( U I D 1 , U I D 2 , r 1 , S I D I ) K v 2 v VN_1 \rightarrow VN_2: (UID_1,UID_2,r_1,SID_I)_{K_{v2v}} VN1VN2:(UID1,UID2,r1,SIDI)Kv2v

  3. V N 2 VN_2 VN2收到请求后,先校验 V N 1 VN_1 VN1的合法性并判断是否与其签署了用于 D 2 D D2D D2D服务的协同计算协议。若非,则拒绝该请求;反之, V N 2 VN_2 VN2选取另一个随机数 r 2 r_2 r2,将其与 U I D 1 UID_1 UID1 U I D 2 UID_2 UID2一起发送给 V N 1 VN_1 VN1
    V N 2 → V N 1 : ( U I D 1 , U I D 2 , r 2 ) K v 2 v VN_2 \rightarrow VN_1: (UID_1,UID_2,r_2)_{K_{v2v}} VN2VN1:(UID1,UID2,r2)Kv2v

  4. 完成随机数交换后, V N 1 VN_1 VN1 V N 2 VN_2 VN2生成预共享密钥$R_K=r_1\oplus r_2 并 向 并向 UE_1 和 和 UE_2 发 送 发送 D2D$会话确认信息。

    V N 1 → U E 1 : ( U I D 2 , R K , S I D I ) K D 2 D 1 VN_1\rightarrow UE_1 : (UID_2,R_K,SID_I)_{K^1_{D2D}} VN1UE1:(UID2,RK,SIDI)KD2D1

    V N 2 → U E 2 : ( U I D 1 , R K , S I D I ) K D 2 D 2 VN_2\rightarrow UE_2 : (UID_1,R_K,SID_I)_{K^2_{D2D}} VN2UE2:(UID1,RK,SIDI)KD2D2

  5. U E 1 UE_1 UE1 U E 2 UE_2 UE2收到信息后,提取其中的用户身份码,校验其是否与 D 2 D D2D D2D查找步骤中的身份信息相同。若两身份信息相匹配, U E 1 UE_1 UE1 U E 2 UE_2 UE2调用 D H DH DH密钥交换协议来生成 D 2 D D2D D2D会话密钥。

    首先, U E 1 UE_1 UE1 U E 2 UE_2 UE2各自选择随机数 a a a b b b来生成他们的会话密钥线索,并利用共享密钥 K M K_M KM计算 H I N T 1 HINT_1 HINT1 H I N T 2 HINT_2 HINT2的消息认证码 m a c 1 mac_1 mac1 m a c 2 mac_2 mac2

    U E 1 : H I N T 1 = g a ,   m a c 1 = H M A C K M ( H I N T 1 , T 1 ) UE_1:HINT_1 = g^a ,\ mac_1 = HMAC_{K_M}(HINT_1,T_1) UE1:HINT1=ga, mac1=HMACKM(HINT1,T1)

    U E 2 : H I N T 2 = g b ,   m a c 2 = H M A C K M ( H I N T 2 , T 2 ) UE_2:HINT_2 = g^b,\ mac_2 = HMAC_{K_M}(HINT_2,T_2) UE2:HINT2=gb, mac2=HMACKM(HINT2,T2)

    K M = R P ⊕ R K K_M=R_P\oplus R_K KM=RPRK T 1 T_1 T1 T 2 T_2 T2分别是 U E 1 UE_1 UE1 U E 2 UE_2 UE2本地时钟的时间戳。

    然后, U E 1 UE_1 UE1 U E 2 UE_2 UE2交换它们的线索、消息认证码和时间戳。

    U E 1 → U E 2 : ( H I N T 1 , m a c 1 , T 1 ) UE_1\rightarrow UE_2: (HINT_1,mac_1,T_1) UE1UE2:(HINT1,mac1,T1)

    U E 2 → U E 1 : ( H I N T 2 , m a c 2 , T 2 ) UE_2\rightarrow UE_1: (HINT_2,mac_2,T_2) UE2UE1:(HINT2,mac2,T2)

  6. 收到线索后, U E 1 UE_1 UE1 U E 2 UE_2 UE2分别校验时间戳的新鲜性并通过计算它们所收到线索的消息认证码来校验它们所收到的消息是否正确。若双方均校验通过,则双方各自生成 D 2 D D2D D2D会话密钥 K s K_s Ks,并使用 K s K_s Ks来保护他们之间的通信。

    K s = H I N T 1 b = H I N T 2 a K_s = {HINT_1}^b = {HINT_2}^a Ks=HINT1b=HINT2a

在这里插入图片描述

二、利用AVISPA证明UAKA-D2D协议

  1. 创建角色
%%UE1
role role_UE_init(UE1,UE2,VN1,VN2: agent, 
			      K1D2D: symmetric_key, 
                  H: hash_func, 
                  G,RP: text, 
                  Snd,Rcv: channel(dy)) 
played_by UE1 def= 
local State:nat,
      Ra,T1,T2,RK,KM,SIDI:text,
      HINT1,HINT2,Mac1,Mac2,Ks:message

const secks1,secks2,aut:protocol_id
    	  
init State:=0
    
transition
	% Beginning.If UE1 recieves 'start' signal,then UE1 send (UE1,UE2,VN2) to VN1.
	1. State=0 /\ Rcv(start) =|> State':=1 /\ Snd({UE1.UE2.VN2}_K1D2D)
	% 5. If UE1 receives (UE2,RK,SIDI), UE1 computes HINT1,mac1 and generates T1, then sends them to UE2.
	2. State=1 /\ Rcv({UE2.RK'.SIDI'}_K1D2D) =|> Ra':=new() /\ HINT1':= exp(G,Ra') /\ T1':=new() /\ KM':= xor(RK',RP) /\ Mac1':={H(HINT1'.T1')}_KM' /\ Snd(HINT1'.Mac1'.T1') /\ witness(UE1,UE2,aut,KM') /\ State':= 2
	3. State=2 /\ Rcv(HINT2'.Mac2'.T2') =|> Ks':=exp(HINT2',Ra) /\ secret(Ks',secks1,{UE1,UE2}) /\ request(UE1,UE2,aut,KM) /\ State':=3
 	
end role
%%UE2
role role_UE_resp(UE1,UE2,VN1,VN2: agent,
	         K2D2D: symmetric_key, 
             H: hash_func,
             G,RP: text,
             Snd,Rcv: channel(dy))
played_by UE2 def= 
local State:nat,
      Rb,T1,T2,RK,KM,SIDI:text,
      HINT1,HINT2,Mac1,Mac2,Ks:message

const secks1,secks2,aut:protocol_id    	

init State:=0
    
transition
% 5. If UE2 receives (UE1,RK,SIDI), UE2 computes HINT2,mac2 and generates T2, then sends them to UE1.

2. State=0 /\ Rcv({UE1.RK'.SIDI'}_K2D2D) =|> Rb':= new() /\ HINT2':= exp(G,Rb') /\ T2':=new() /\ KM':= xor(RK',RP) /\ Mac2':= {H(HINT2'.T2')}_KM' /\ Snd(HINT2'.Mac2'.T2') /\ State':= 1
3. State=1 /\ Rcv(HINT1'.Mac1'.T1') =|> Ks':=exp(HINT1',Rb) /\ secret(Ks',secks2,{UE1,UE2}) /\ request(UE2,UE1,aut,KM) /\ State':=2

end role
%%VN1
role role_VN_init(UE1,UE2,VN1,VN2: agent,
                  K1D2D,Kv2v: symmetric_key,
				  SIDI: text,
                  Snd,Rcv: channel(dy))
played_by VN1 def=
local State: nat,
      R1,R2,RK: text
		  
init State:=0
    
transition
%2. If VN1 recieves (UE1,UE2,VN2) from UE1,then VN1 send (UE1,UE2,r1,SIDI) to VN2

1. State=0 /\ Rcv({UE1.UE2.VN2}_K1D2D) =|> R1':=new()  /\ Snd({UE1.UE2.R1'.SIDI}_Kv2v) /\ State':=1
   %4. After exchanging randoms with VN2,VN1 send confirmation message (UE2,RK,SIDI) to UE1
2. State=1 /\ Rcv({UE1.UE2.R2'}_Kv2v) =|> RK':=xor(R1,R2')  /\ Snd({UE2.RK'.SIDI}_K1D2D) /\ State':=2

end role
%%VN2
role role_VN_resp(UE1,UE2,VN1,VN2: agent,
             	  K2D2D,Kv2v: symmetric_key,
				  SIDI: text,
                  Snd,Rcv: channel(dy))
played_by VN2 def=
local State: nat,
      R1,R2,RK: text
		  
init State:=0
    
transition
%3. If VN2 recieves (UE1.UE2.r1,SIDI) from VN1,then VN2 send (UE1,UE2,r2) to VN1

1. State=0 /\ Rcv({UE1.UE2.R1'.SIDI'}_Kv2v) =|>  R2':=new() /\ Snd({UE1.UE2.R2'}_Kv2v)
   %4. After exchanging randoms with VN1,VN2 send confirmation message (UE1,RK,SIDI) to UE2
   /\ RK':=xor(R1',R2') /\ Snd({UE1.RK'.SIDI}_K2D2D) /\ State':=1

end role
  1. 完成角色创建后,生成会话
role session(UE1,UE2,VN1,VN2 : agent,
	         K1D2D, K2D2D, Kv2v : symmetric_key) 
def=
  local SUE1,RUE1,SUE2,RUE2,SVN1,RVN1,SVN2,RVN2: channel (dy),
        G,RP,SIDI:text,
        H: hash_func

  composition
	role_UE_init(UE1, UE2, VN1, VN2, K1D2D, H, G, RP, SUE1, RUE1)
	/\ role_UE_resp(UE1, UE2, VN1, VN2, K2D2D, H, G, RP, SUE2, RUE2)
	/\ role_VN_init(UE1, UE2, VN1, VN2, K1D2D, Kv2v, SIDI, SVN1, RVN1)
	/\ role_VN_resp(UE1, UE2, VN1, VN2, K2D2D, Kv2v, SIDI, SVN2, RVN2)

end role
  1. 完成会话创建后,创建环境
role environment()
def=
  const secks1,secks2,aut: protocol_id,
		ue1,ue2,vn1,vn2 : agent,
        k1D2D, k2D2D,kv2v: symmetric_key
  intruder_knowledge = {ue1, ue2, vn1, vn2}

  composition
	session(ue1, ue2, vn1, vn2, k1D2D, k2D2D, kv2v)
end role
  1. 完成环境创建后,设置安全分析目标
%%goal
goal

secrecy_of secks1, secks2
authentication_on aut

end goal
  1. 执行代码
environment()
  1. 协议执行过程模拟

(1)协议流程模拟

在这里插入图片描述

(2)攻击者攻击过程

在这里插入图片描述

  1. 安全分析结果

在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值