A BLS digital signature—also known as Boneh–Lynn–Shacham (BLS)—is a cryptographic signature scheme which allows a user to verify that a signer is authentic.
The scheme uses a bilinear pairing for verification, and signatures are elements
of an elliptic curve group. Working in an elliptic curve group provides some
defense against index calculus attacks (with the caveat that such attacks are
still possible in the target group
Signatures produced by the BLS signature scheme are often referred to as short signatures, BLS short signatures, or simply BLS signatures. The signature scheme is provably secure (the scheme is existentially unforgeable under adaptive chosen-message attacks) in the random oracle model assuming the intractability of the computational Diffie–Hellman problem in a gap Diffie–Hellman group.
This crate implements a version of the BLS signature scheme. The implementation doesn't match up with the BLS signatures specification at the IETF. This implementation uses the BN254 curve defined here: https://neuromancer.sk/std/bn/bn254 (sometimes called BN254N), and should not to be confused with the one used in Ethereum.
To start, all that is needed is to add this to your Cargo.toml
.
[dependencies]
indy-blssignatures = "0.1"
This implementation of BLS Signatures was initially in the Hyperledger Ursa project and is used in the Hyperledger Indy Node and Hyperledger Indy Plenum repositories/artifacts.
A Python wrapper for this crate can be found in the indy-bls-wrapper-python repository.