Skip to main content
. 2019 Mar 6;19(5):1146. doi: 10.3390/s19051146
Step 1: Upon obtaining the message {Ai, DIDi, T1, M1, IDSNj, IDGWNj} from Ui, the BS checks if T2−T1≤∆T holds. If this does not true then session expires. Otherwise, BS calculates (IDi ‖ RU)=DIDi⊕h(h(Ai‖X) ‖ T1) and computes M1*=h(RU ‖ IDi ‖ T1 ‖ h(Ai‖X)), then verifies if M1* equals M1 or not. If this holds, BS goes to next step. Otherwise, the session is rejected.
Step 2: Now, BS generates a random nonce RBS and computes a new Ainew, where Ainew=h(RU‖h(Ai‖X)). Then, BS computes M2= h(Ainew‖X)⊕h(h(Ai‖X)‖RBS), M3=(RU ‖ RBS ‖ IDi)⊕h(XBS−GWNj‖ T3), M4=h(M1‖M2‖IDi‖T3‖RBS‖RU) and M5=RBS ⊕ h(h(IDSNj‖X) ‖ T3) and sends { M1,  M2,  M3, M4,  M5, T3} to GWNj via public channel.
Step 3: After getting the request message from BS, the GWNj checks if T4−T3≤∆T holds. If this does not true then session expires. Otherwise, GWNj calculates (RU‖RBS‖IDi)=M3⊕h(XBS−GWNj‖ T3) and M4*=h(M1‖M2‖IDi‖T3‖RBS‖RU), then checks if M4* =? M4 holds. If the condition is true then it proceeds further. Otherwise, the session is terminated.
Step 4: Now, the GWNj generates a random nonce RGWNj, calculates M6= (RU‖RGWNj‖IDi)⊕h(RBS‖M5‖T5) and M7=h(M1‖M2‖RBS‖RGWNj‖IDi‖RU), then sends { M1,  M2,  M5,  M6, M7, T3,  T5} to SNj.
Step 5: Upon obtaining the message from GWNj, the SNj checks if T6−T5≤∆T holds. If this does not true then session expires. Otherwise, SNj calculates RBS*=M5⊕h(RIj ‖ T3), (RU ‖ RGWNj‖ IDi)=M6⊕h(RBS* ‖ M5 ‖ T5) and M7*=h(M1 ‖ M2 ‖ RBS* ‖ RGWNj‖ IDi ‖ RU). Then, SNj verifies if M7* =? M7 holds. If the condition is true then it proceeds further. Otherwise, the session is terminated.
Step 6: Now, the SNj generates a random nonce RSNj, computes M8=RSNj⊕h(RGWNj‖ RBS* ‖ T7), SK=h(RGWNj‖ RU ‖ RSNj‖ RBS* ‖ IDi ‖ M1) and M9=h(SK ‖ RBS* ‖ RU ‖ M2 ‖ T7). Then, SNj sends { M1,  M2, M8,  M9,  T7 } to GWNj.
Step 7: Upon receiving the message from SNj, GWNj firstly verifies if T8−T7≤∆T holds. If this is not true then the session expires. Otherwise, GWNj calculates RSNj*=M8⊕h(RGWNj‖ RBS ‖ T7), SK*=h(RGWNj ‖ RU ‖ RSNj*‖RBS ‖ IDi ‖ M1) and M9*=h(SK* ‖ RBS ‖ RU ‖ M2 ‖ T7), then checks if M9* =? M9 holds. If the condition is true then further is proceeded. Otherwise, the session is terminated.
Step 8: The GWNj computes M10=h(RU ‖ IDi)⊕(RGWNj‖ RSNj*‖ RBS) and M11= h(RU ‖ RSNj*‖ M2 ‖ SK ‖ T9). Then, GWNj sends { M2,  M10, M11, T9 } to Ui.
Step 9: Upon receiving the message from GWNj, Ui firstly verifies if T8−T7≤∆T holds. If this does not true then session expires. Otherwise, Ui computes (RGWNj‖RSNj*‖RBS)=h(RU‖IDi)⊕M10, SK*=h(RGWNj‖RU‖RSNj*‖RBS‖IDi‖M1), h(Ainew ‖ X)=M2⊕h(h(Ai‖X) ‖ RBS), M11*=h(RU ‖ RSNj*‖ M2 ‖ SK*‖ T9) and verifies if M11* =? M11 holds. If the condition is true then mutual authentication and session key agreement holds. Otherwise, the session is terminated.
Step 10: The Ui computes Binew=h(Ainew ‖ X)⊕h(IDi‖ RPWi) and Dinew= h(Ainew ‖ RPWi ‖ IDi). Then, Ui replaces Ai,Bi,Di with Ainew, Binew, Dinew, respectively.