Samantha

Parameters known by Samantha:

Computes the public key \( pk = (n, v) \):

Computes the fingerprint \( \mathcal{H}(m) \) of the message:

Computes the signature \( \sigma \) of the fingerprint \( \mathcal{H}(m) \):

Step y/x

Enter the message (or integer) that Samantha wants to sign:

Press Enter to generate the parameters. Use the Left and Right arrow keys to navigate between steps.

Samantha chooses two prime numbers, \( p \) and \( q \), and computes \( n = p \cdot q \).

She then computes the public verification exponent \( v \) by randomly choosing a value \( 3 \leq v \leq n-1 \) until \( \gcd(v, \phi(n)) = 1 \), where \( \phi(n) = (p - 1) \cdot (q - 1) \).

Samantha then sends her public key \( pk = (n, v) \) to Victor.

Samantha computes the fingerprint \( \mathcal{H}(m) \) of the message \( m \) using a publicly known hash function \( \mathcal{H} \).

Because Samantha knows the values of \( v \) and \( \phi(n) \), she can easily compute the secret signing exponent \( s \) using the extended Euclidean algorithm.

She then computes the signature of the fingerprint and sends both the message \( m \) and the signature \( \sigma \) to Victor.

Victor uses the same hash function \( \mathcal{H} \) as Samantha to compute the fingerprint \( \mathcal{H}(m) \) of the message \( m \).

If nobody has tampered with the content of the message, Victor will obtain the same fingerprint as Samantha.

Victor verifies the signature \( \sigma \) of the fingerprint \( \mathcal{H}(m) \).

If the two computed values are equal, the message was signed by Samantha and no one has tampered with its content.

Victor

Parameters known by Victor:

Receives the public key \( pk = (n, v) \).

Receives the signature \( \sigma \) and the message \( m \).

Computes the fingerprint \( \mathcal{H}(m) \).

Verifies the signature of the fingerprint: