| Literature DB >> 30567374 |
Jihyeon Ryu1, Hakjun Lee2, Hyoungshick Kim3, Dongho Won4.
Abstract
Wireless sensor networks are widely used in many applications such as environmental monitoring, health care, smart grid and surveillance. Many security protocols have been proposed and intensively studied due to the inherent nature of wireless networks. In particular, Wu et al. proposed a promising authentication scheme which is sufficiently robust against various attacks. However, according to our analysis, Wu et al.'s scheme has two serious security weaknesses against malicious outsiders. First, their scheme can lead to user impersonation attacks. Second, user anonymity is not preserved in their scheme. In this paper, we present these vulnerabilities of Wu et al.'s scheme in detail. We also propose a new scheme to complement their weaknesses. We improve and speed up the vulnerability of the Wu et al. scheme. Security analysis is analyzed by Proverif and informal analysis is performed for various attacks.Entities:
Keywords: biometric; smart card; user authentication; wireless sensor networks
Mesh:
Year: 2018 PMID: 30567374 PMCID: PMC6308603 DOI: 10.3390/s18124481
Source DB: PubMed Journal: Sensors (Basel) ISSN: 1424-8220 Impact factor: 3.576
Explanation of each abbreviation.
| Notations | Description |
|---|---|
| WSN | Wireless sensor network |
| RSA | A public-key encryption technology developed by Ron Rivest, Adi Shamir, and Leonard Adleman |
| ECC | Elliptic curve cryptosystem created by Victor S. Miller and Neal Koblitz |
|
| A probabilistic generation function for which the biometrics |
|
| A function that restore |
|
| A vector with biometric information |
|
| Any vector |
|
| Gateway node |
| ProVerif | An analysis tool for protocol verification |
Notations used in this paper.
| Notations | Description |
|---|---|
|
| The |
| A | |
|
| |
|
| Password of |
|
| |
|
| An evil-minded attacker |
|
| Secret key of |
|
| Random number generated by |
| One-way hash function | |
|
| Concatenation operator |
| ⊕ | Bitwise XOR operator |
| A group of points on a finite field | |
|
| A point generator in |
|
| A cyclic addition group under |
| The session key generated by |
Figure 1Registration phase of the proposed scheme.
Figure 2Login and authentication phase of the proposed scheme.
Define values and functions.
| (*—-channels—-*) |
| free cha:channel [private]. |
| free chb:channel. |
| free chc:channel. |
| (*—-constants—-*) |
| free Ri:bitstring [private]. |
| free IDi:bitstring [private]. |
| free IDg:bitstring. |
| free SIDj:bitstring. |
| free PWi:bitstring [private]. |
| (*—-secret key—-*) |
| free x:bitstring [private]. |
| (*—-shared key—-*) |
| free P:bitstring [private]. |
| (*—-functions—-*) |
| fun concat(bitstring, bitstring):bitstring. |
| fun xor(bitstring, bitstring):bitstring. |
| fun h(bitstring):bitstring. |
| fun h1(bitstring):bitstring. |
| fun mult(bitstring, bitstring):bitstring. |
| equation forall a:bitstring, b:bitstring; mult(a, b) = mult(b, a). |
| equation forall a:bitstring, b:bitstring; xor(xor(a, b), b) = a. |
| (*—-events—-*) |
| event beginUi(bitstring). |
| event endUi(bitstring). |
| event beginGWN(bitstring). |
| event endGWN(bitstring). |
| event beginSj(bitstring). |
| event endSj(bitstring). |
protocol.
| (*—-Ui process—-*) |
| let Ui = |
| let HPWi = h(concat(concat(IDi, PWi), Ri)) in |
| out(cha,(IDi)); |
| in(cha,(XGIDi:bitstring)); |
| let G1’ = h(concat(XGIDi, x)) in |
| let G1 = xor(G1’, HPWi) in |
| let G2 = xor(h(concat(concat(IDi, Ri), PWi)), XGIDi) in |
| let G3 = h(concat(IDi, XGIDi)) in |
| event beginUi(IDi); |
| new ei:bitstring; |
| new alpha:bitstring; |
| let GIDi = xor(G2, h(concat(concat(IDi, Ri), PWi))) in |
| if h(concat(IDi, XGIDi)) = G3 then |
| let HPWi = h(concat(concat(IDi, PWi), Ri)) in |
| let MU1 = xor(xor(G1, HPWi), ei) in |
| let MU2 = mult(alpha, P) in |
| let MU3 = h(concat(concat(IDi, ei), concat(concat(XGIDi, MU2), SIDj))) in |
| out(chc,(MU1, MU2, MU3, GIDi, SIDj)); |
| in(chc,(XXMS1:bitstring, XXMS2:bitstring, |
| XMG2:bitstring, XMG3:bitstring, XMG4:bitstring)); |
| let GIDinew = xor(XMG4, h(ei)) in |
| if XMG3 = h(concat(concat(IDi, SIDj), |
| concat(concat(GIDi, GIDinew), concat(ei, XMG2)))) then |
| let sku = mult(alpha, XXMS1) in |
| if XXMS2 = h1(concat(concat(MU2, XXMS1), |
| concat(concat(sku, GIDi), SIDj))) then |
| let G1new = xor(XMG2, xor(h(concat(GIDi, ei)), HPWi)) in |
| let G2new = xor(G2, xor(GIDi, GIDinew)) in |
| let G1 = G1new in |
| let G2 = G2new in |
| event endUi(IDi). |
protocol.
| (*—-GWN process—-*) |
| let GWN = |
| in(cha, (XIDi:bitstring)); |
| new ri:bitstring; |
| let GIDi = h(concat(XIDi, ri)) in |
| let G1’ = h(concat(GIDi, x)) in |
| out(cha, (GIDi)); |
| in(chc, (XMU1:bitstring, XMU2:bitstring, XMU3:bitstring, XGIDi:bitstring, XSIDj:bitstring)); |
| event beginGWN(IDg); |
| let ei = xor(XMU1,h(concat(XGIDi, x))) in |
| if XMU3 = h(concat(concat(XIDi, ei), |
| concat(concat(XGIDi, XMU2), XSIDj))) then |
| let cj = h(concat(XSIDj, x)) in |
| let MG1 = h(concat(concat(cj, XGIDi), concat(XSIDj, XMU2))) in |
| out(chb, (XMU2, MG1, XGIDi)); |
| in(chb, (XMS1:bitstring, XMS2:bitstring, |
| XMS3:bitstring)); |
| if XMS3 = h(concat(concat(XGIDi, XSIDj), cj)) then |
| new rinew:bitstring; |
| let GIDinew = h(concat(XIDi, rinew)) in |
| let MG2 = xor(h(concat(GIDinew, x)), h(concat(XGIDi, ei))) in |
| let MG3 = h(concat(concat(XIDi, XSIDj), concat(concat(XGIDi, GIDinew), concat(ei, MG2)))) in |
| let MG4 = xor(h(ei), GIDinew) in |
| out(chc, (XMS1, XMS2, MG2, MG3, MG4)); |
| event endGWN(IDg). |
protocol.
| (*—-Sj process—-*) |
| let Sj = |
| in(chb, (XXMU2:bitstring, XMG1:bitstring, XXGIDi:bitstring)); |
| event beginSj(SIDj); |
| let scj = h(concat(SIDj, x)) in |
| if XMG1 = h(concat(concat(scj, XXGIDi), concat(SIDj, XXMU2))) then |
| new beta:bitstring; |
| let MS1 = mult(beta, P) in |
| let sks = mult(beta, XXMU2) in |
| let MS2 = h1(concat(concat(XXMU2, MS1), concat(concat(sks, XXGIDi), SIDj))) in |
| let MS3 = h(concat(concat(XXGIDi, SIDj), scj)) in |
| out(chb, (MS1, MS2, MS3)); |
| event endSj(SIDj). |
Queries.
| (*—-queries—-*) |
| query attacker(P). |
| query id:bitstring; inj-event(endUi(id)) ==> inj-event(beginUi(id)). |
| query id:bitstring; inj-event(endGWN(id)) ==> inj-event(beginGWN(id)). |
| query id:bitstring; inj-event(endSj(id)) ==> inj-event(beginSj(id)). |
| process |
| ((!Ui)|(!GWN)|(!Sj)) |
Output of queries.
| RESULT inj-event(endSj(id)) ==> inj-event(beginSj(id) is true. |
| RESULT inj-event(endGWN(id_12209)) ==> inj-event(beginGWN(id_12209) is true. |
| RESULT inj-event(endUi(id_25655)) ==> inj-event(beginUi(id_25655) is true. |
| RESULT not attacker(P[]) is true. |
Performance comparison.
| Features | Wu et al. [ | Park et al. [ | Park et al. [ | Ours |
|---|---|---|---|---|
| Defence of privileged insider attack | O | O | O | O |
| Defence of outsider attack | X | X | X | O |
| Defence of offline ID guessing attack | O | O | O | O |
| Defence of online ID guessing attack | X | X | X | O |
| Defence of session key disclosure attack | O | O | O | O |
| Defence of user impersonation attack | X | X | O | O |
| Defence of server impersonation attack | O | X | O | O |
| User anonymity | X | O | X | O |
| Forward secrecy and backward secrecy | O | O | O | O |
Notations of time symbol.
| Symbol | Meaning | Time (ms) |
|---|---|---|
|
| time of multiplication in Field | 7.3529 [ |
|
| time of | = |
|
| time of symmetric encryption or decryption | 0.1303 [ |
|
| time of hash operation | 0.0004 [ |
Performance comparison.
| Wu et al. [ | Park et al. [ | Park et al. [ | Ours | |
|---|---|---|---|---|
| User | 10 | 6 | 10 | 8 |
| (ms) | = 22.0627 | = 22.0611 | = 22.0627 | = 22.0619 |
|
| 10 | 7 | 11 | 10 |
| (ms) | = 0.004 | = 0.2634 | = 0.0044 | = 0.004 |
| Sensor node | 2 | 6 | 4 | 3 |
| (ms) | = 14.7066 | = 14.8385 | = 14.7074 | = 14.707 |
| Total costs | 22 | 19 | 25 | 21 |
| (ms) | = 36.7733 | = 37.163 | = 36.7745 | = 36.7729 |