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 T2T1T holds. If this does not true then session expires. Otherwise, BS calculates (IDi  RU)=DIDih(h(AiX)  T1) and computes M1*=h(RU  IDi  T1  h(AiX)), 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(RUh(AiX)). Then, BS computes M2= h(AinewX)h(h(AiX)RBS), M3=(RU  RBS  IDi)h(XBSGWNj T3), M4=h(M1M2IDiT3RBSRU) and M5=RBSh(h(IDSNjX)  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 T4T3T holds. If this does not true then session expires. Otherwise, GWNj calculates (RURBSIDi)=M3h(XBSGWNj T3) and M4*=h(M1M2IDiT3RBSRU), 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= (RURGWNjIDi)h(RBSM5T5) and M7=h(M1M2RBSRGWNjIDiRU), then sends { M1,  M2,  M5,  M6, M7, T3,  T5} to SNj.
Step 5: Upon obtaining the message from GWNj, the SNj checks if T6T5T holds. If this does not true then session expires. Otherwise, SNj calculates RBS*=M5h(RIj  T3), (RU  RGWNj IDi)=M6h(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=RSNjh(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 T8T7T holds. If this is not true then the session expires. Otherwise, GWNj calculates RSNj*=M8h(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 T8T7T holds. If this does not true then session expires. Otherwise, Ui computes (RGWNjRSNj*RBS)=h(RUIDi)M10, SK*=h(RGWNjRURSNj*RBSIDiM1), h(Ainew  X)=M2h(h(AiX)  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.