Am o problemă cu ProVerif foarte simplă.
Codul meu proverif actual arată astfel:
(* canal de comunicare *)
canal c: gratuit.
(* încercând să creez o schemă mac *)
tastați mkey.
fun mac (bitstring , mkey): bitstring.
(* Criptare simetrică *)
tip skey.
tip monede.
fun internal_senc(bitstring , skey , coins): bitstring.
reduce forall m:bitstring , k:skey , r:coins;
sdec(internal_senc(m,k,r),k) = m.
lasă ED (AppKey :skey, NwkKey :mkey, JoinEUI :bitstring, DevEUI :bitstring, DevNonce : bitstring) =
out(c, (JoinEUI, DevEUI, DevNonce, mac((JoinEUI , DevEUI , DevNonce), NwkKey) )).
lasă JS(AppKey :skey, NwkKey :mkey, DevEUI :bitstring, JoinEUI :bitstring, DevAddr :bitstring) =
in(c,x: șir de biți);
let(=JoinEUI, =DevEUI,new DevNonce: bitstring, =mac((JoinEUI,DevEUI,DevNonce), NwkKey)) = x in
nou JoinNonce: șir de biți;
nou Home_NetID: șir de biți;
lăsați MIC2: șir de biți = mac(NwkKey, (JoinNonce,Home_NetID, DevAddr)) în
out(c, JoinEUI).
Deci, în luine 25, arată așa:
let(=JoinEUI, =DevEUI, DevNonce: bitstring, =mac((JoinEUI,DevEUI,DevNonce), NwkKey)) = x în
Eșuează pe DevNonce
parte, pe care nu o înțeleg deloc, doar uită-te la pagina 71 din manual o nouă variabilă este creată bine în acest fel.
Cum declar de fapt această valoare în procesul JS?