symbolicsoft / verifpal

Cryptographic protocol analysis for real-world protocols.
https://verifpal.com
GNU General Public License v3.0
41 stars 4 forks source link

`SIGNVERIF` with original value (like proof-of-identity) #4

Open cobratbq opened 10 months ago

cobratbq commented 10 months ago

I want to prove the identity of one party through signing an arbitrary value provided by the other party.

Either:

Furthermore, it isn't clear whether the query authentication? Bob -> Alice: n means "Alice is convinced that the n that Bob sent is authentic", or that it means "the n that Bob sent to Alice remains/arrived unchanged, i.e. is authentic". One takes a particular principal into the equation, while the other takes the perspective of the variable.

Goal: express/prove that n has remained unchanged as confirmed by Bob through signature verification? (Therefore, Bob knows that "Alice" is the Alice of the identity (sk, pk) and that she received the unchanged n.)

Clarification to the script below:

attacker[active]
principal Alice[
    knows private sk
    pk = G^sk
]
Alice -> Bob: [pk]
principal Bob[
    generates n
]
Bob -> Alice: n
principal Alice[
    sig = SIGN(sk, n)
]
Alice -> Bob: sig
principal Bob[
    _ = SIGNVERIF(pk, n, sig)?
]

queries[
    confidentiality? sk
    authentication? Alice -> Bob: sig
    // The protocol detects when 'n' is not authentic, because Alice's signature will fail to verify against Bob's (original) 'n'.
    authentication? Bob -> Alice: n
]

See mailinglist conversation for more details and elaboration.