Research Article

Protecting Location Privacy in IoT Wireless Sensor Networks through Addresses Anonymity

Algorithm 1

if node is sender then
 Key[a- > b] ← 0xFFFFFFFF;
if node has frame to be transmitted then
  IDS[a- > b] ← HMAC(Key[a- > b], IDa);
  IDD[a- > b] ← HMAC(Key[a- > b], IDb);
  Send DATA frame { IDS[a- > b], IDD[a- > b],payload, FCS};
  Create timer Stimer with a certain timeout;
end
if an ACK frame is received then
  for each neighbors do
   if FCS checksum OK and IDS[a- > b] from ACK frame = = IDS[a- > b] then
    //generate new key
    Key[a- > b] ←Key[a- > b] ⊕ Hash(payload);
    //generate new addresses
    IDS[a- > b] ←HMAC(Key[a- > b], IDa);
    IDD[a- > b] ←HMAC(Key[a- > b], IDb);
    kill timer Stimer;
   end
  end
end
if Stimer timeout then
  Send DATA frame { IDS[a- > b], IDD[a- > b],payload, FCS};
end
end
if node is receiver then
 Key[a- > b] ← 0xFFFFFFFF;
 IDS[a- > b] ← HMAC(Key[a- > b], IDa);
 IDD[a- > b] ← HMAC(Key[a- > b], IDb);
 IDSo[a- > b] ← HMAC(Key[a- > b], IDa);
 IDDo[a- > b] ← HMAC(Key[a- > b], IDb);
if a DATA frame is received then
  for each neighbor do
   if FCS checksum OK and IDD[a- > b] from frame = = IDD[a- > b] then
    //save old addresses
    IDSo[a- > b] ← IDS [a- > b];
    IDDo[a- > b] ← IDD [a- > b];
    //generate new key
    Key[a- > b] ←Key[a- > b] ⊕ Hash(payload);
    //generate new addresses
    IDS[a- > b]<-HMAC(Key[a- > b], IDa);
    IDD[a- > b]<-HMAC(Key[a- > b], IDb);
    deliver frame to upper layer;
    send ACK frame { IDDo[a- > b], IDSo[a- > b], FCS};
   else if FCS checksum OK and IDD[a- > b] from frame = = IDDo[a- > b] then
    //DATA frame already delivered
    send ACK frame { IDDo[a- > b], IDSo[a- > b], FCS};
   end
  end
end
end