Skip to main content
. 2019 Mar 6;19(5):1146. doi: 10.3390/s19051146
Step 1: Upon obtaining the message {Bi, DIDi, M1, M2} from Ui, the BS computes IDi*=DIDih(Bi X), (RU*IDSNj* IDGWNj*T1)=DAi(M1) and checks if T2T1T holds. If this does not true, then session expires. Otherwise, BS computes M2*=h(RU*IDi*T1*h(BiX)) and verifies if M2* equals M2 or not. If it holds, then Ui is legal and BS goes to next step. Otherwise, the session is rejected.
Step 2: Now, the BS produces a random nonce RBS and computes M3=Eh(XBSGWNj)(IDiRIjIDSNjRURBST3), M5=h(M2IDiT3RBSRU) and then sends {M3, M2, M5} to GWNj via public channel.
Step 3: After getting request message {M3, M2, M5} from BS, the GWNj computes (IDiRIjIDSNjRURBST3)=Dh(XBSGWNj)(M3) and (RU*IDSNj* IDGWNj* T1)= DAi(M1), then checks if two condition T4T3T and M5* =? M5 hold. If both conditions are true then it proceeds further. Otherwise, the session is terminated.
Step 4: Now, the GWNj generates a random nonce RGWNj and calculates M6= ERIj(RBST5RURGWNjIDi), M7=h(M2RIjRGWNjIDiRU) and then sends { M2,  M6,  M7 } to SNj.
Step 5: Upon obtaining the message from GWNj, the SNj computes (RBST5RURGWNj IDi)=DRIj(M6), M7*=h(M2RIjRGWNj IDiRU) and then verifies if two conditions T6T5T and M7* =? M7 hold. If both are true, then SNj goes to the next step, Otherwise, the session is terminated.
Step 6: Now, the SNj generates a random nonce RSNj, computes M8=RSNjh(RIjRGWNj), SK=h(RGWNj RURSNj RIjM2), M9=h(SKIDi) and sends { M8,  M9,  T7 } to GWNj via public channel.
Step 7: After getting the message from SNj, GWNj firstly verifies if T8T7T holds. If true, the process continues. Otherwise, the session expires. Then, GWNj calculates RSNj*=M8h(RIjRGWNj), SK*=h(RGWNj RURSNj* RIjM2) and M9*=h(SK*IDi), then checks if M9* =? M9. If it holds, the next step proceeds. Otherwise, the session is terminated.
Step 8: The GWNj computes M10= Eh(RUIDi)(RIjT9RGWNj RSNj M2) and sends { M9,  M10 } to Ui via public channel.
Step 9: After getting the message from GWNj, Ui computes (RIjT9  RGWNj RSNj M2)=Dh(RUIDi)(M10) and verifies if T10T9T holds. If it holds, the next step proceeds.
Step 10: The Ui calculates SK*=h(RGWNjRURSNjRIjM2), M9*=h(SK* IDi) and checks if M9* =? M9 holds. If it holds, mutual-authentication and session-key agreement holds.