/indy-blssignatures-rs

BLS signature support for Hyperledger Indy

Primary LanguageRustApache License 2.0Apache-2.0

BLS Signatures Rust

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 $G_{T}$ of the pairing), allowing shorter signatures than Full Domain Hash signatures for a similar level of security.

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.

Rust Crate

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.