Documentation

Cryptlib.Primitives.Sign.Blindable

Blindable signature schemes #

A signature scheme whose keys can be blinded by a scalar, such that a signature made with a blinded private key verifies under the correspondingly blinded public key. PrivateKey is the scalar itself, so blinding is closed on one key type; seed expansion belongs to key generation.

Blinding laws hold for Valid public keys and Invertible factors only: a decodable point with a small-order component breaks g · (f · pk) = (f g) · pk, and f = 0 has no inverse.

Instances For
    theorem Cryptlib.Primitives.Sign.Blindable.verify_blinded (B : Blindable) (sk : B.base.PrivateKey) (f : B.Scalar) (m : ByteArray) (s : B.base.State) :
    B.base.verify (B.blindPub (B.base.pub sk) f) m (B.base.sign (B.blindPriv sk f) m s).1 = true

    A signature made with a blinded private key verifies under the blinded public key.

    Blinding a private key twice derives the same public key as blinding once by the product.

    theorem Cryptlib.Primitives.Sign.Blindable.blindPriv_inv (B : Blindable) (sk : B.base.PrivateKey) (f : B.Scalar) (hf : B.Invertible f) :
    B.base.pub (B.blindPriv (B.blindPriv sk f) (B.inv f)) = B.base.pub sk

    Blinding and then unblinding a private key returns to the original public key.

    theorem Cryptlib.Primitives.Sign.Blindable.blindPub_swap (B : Blindable) (pk : B.base.PublicKey) (hpk : B.Valid pk) (f g : B.Scalar) :
    B.blindPub (B.blindPub pk f) g = B.blindPub (B.blindPub pk g) f

    The order in which two blindings are applied is unobservable.

    theorem Cryptlib.Primitives.Sign.Blindable.blind_unlinkable (B : Blindable) [Fintype B.Scalar] [SampleableType B.Scalar] [DecidableEq B.base.PublicKey] (pk : B.base.PublicKey) (hpk : B.Regular pk) {target : B.base.PublicKey} (htarget : target ∈ Set.range (B.blindPub pk)) :
    Pr[= true | do let f ← $ᵗ B.Scalar pure (decide (B.blindPub pk f = target))] = (↑(Fintype.card B.Scalar))⁻¹

    For a regular key pk, a uniform blinding factor gives each key in the orbit of pk with probability 1/|Scalar|.

    @[instance_reducible]

    The trivial blindable scheme, where every blinding is the identity.

    Equations
    • One or more equations did not get rendered due to their size.