Algorithm 1 The mutual authentication between IoT device and server. |
Input: An IoT device with identity IDd, and server that stores the IoT device’s information (SRAMk, CRP, and IDd); |
Output: A mutual authentication between the IoT device and the server; |
Begin |
1: The IoT device generates a SRAM PUF cryptography key SRAMk, a timestamp TS1, and HMAC(SRAMk, TS1) message; |
2: IoT device sends its IDd, TS1, and HMAC(SRAMk, TS1) message to the server; |
3: If (the server finds IDd in its repository) then |
4: The server loads the SRAMk, and CRP (C, R) that belongs to the IDd from its repository to its memory; |
5: The server calculates HMAC(SRAMk, TS1) message; |
6: If (the calculated hash message in step 5 matches the hash message that was sent in step 2) |
then |
7: The server generates a timestamp TS2, calculates (C ‖ TS2), and generates HMAC(SRAMk, C ‖ TS2) message; |
8: The server sends C, TS2, and HMAC(SRAMk, C ‖ TS2) message to the IoT device; |
9: else |
Go to step 21; |
end if |
10: else |
Go to step 21; |
end if |
11: The IoT device calculates (C ‖ TS2), and generates HMAC(SRAMk, C ‖ TS2) message; |
12: If (the calculated hash message in step 11 matches the hash message that was sent in step 8) |
then |
The authenticity of the server is verified; |
13: The IoT device passes the challenge C to its Arbiter PUF, and generates a response R; |
14: The IoT device generates a timestamp TS3, calculates (R ‖ TS3), and generates HMAC(SRAMk, R ‖ TS3) message; |
15: The IoT device sends TS3, and HMAC(SRAMk, R ‖ TS3) message to the server; |
16: else |
Go to step 21; |
end if |
17: The server calculates (R ‖ TS3), and generates HMAC(SRAMk, R ‖ TS3) message; |
18: If (the calculated hash message in step 17 matches the hash message that was sent in step 15) |
then |
The authenticity of the IoT device is verified; |
19: A mutual authentication between the IoT device and the server is established; |
20: else |
Go to step 21; |
then |
21: Stop (terminates the connection); |
End |