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.
- base : Sign.Signature
- Scalar : Type
Blinding factors.
Public keys on which blinding obeys the laws below.
Blinding factors that can be undone.
Keys whose blindings are pairwise distinct. Excludes the identity, which every factor fixes.
Inverse of a blinding factor.
Turn KDF output into a blinding factor.
- blindPriv : self.base.PrivateKey → self.Scalar → self.base.PrivateKey
- blind_hom (sk : self.base.PrivateKey) (f : self.Scalar) : self.base.pub (self.blindPriv sk f) = self.blindPub (self.base.pub sk) f
Blinding the private key then deriving agrees with deriving then blinding the public key.
- valid_pub (sk : self.base.PrivateKey) : self.Valid (self.base.pub sk)
Every derived public key is valid.
- valid_blind (pk : self.base.PublicKey) (f : self.Scalar) : self.Valid pk → self.Valid (self.blindPub pk f)
Blinding a valid key gives a valid key.
- blind_assoc (pk : self.base.PublicKey) : self.Valid pk → ∀ (f g : self.Scalar), self.blindPub (self.blindPub pk f) g = self.blindPub pk (self.mul f g)
Blinding twice is blinding by the product.
Blinding factors commute.
- blind_inv (pk : self.base.PublicKey) : self.Valid pk → ∀ (f : self.Scalar), self.Invertible f → self.blindPub (self.blindPub pk f) (self.inv f) = pk
Unblinding inverts blinding.
- blind_injective (pk : self.base.PublicKey) : self.Regular pk → Function.Injective (self.blindPub pk)
Distinct blinding factors give distinct keys, for a regular key.
Instances For
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.
Blinding and then unblinding a private key returns to the original public key.
For a regular key pk, a uniform blinding factor gives each key in the orbit of pk with
probability 1/|Scalar|.
The trivial blindable scheme, where every blinding is the identity.
Equations
- One or more equations did not get rendered due to their size.