Introducing blst
We’re excited to announce the first public release of ‘blst’. blst is a fast signature library based on the IETF BLS signature specification and uses the BLS12–381 curve. The library aims to support a wide variety of programming languages (Go, Rust, C++, etc.), operating systems (Linux, Mac, Windows), and hardware platforms (x86, ARM). The library has recently undergone a security audit by the NCC Group which you can find here.
BLS12–381 in Blockchain
BLS signatures are an important primitive for blockchain protocols as they are ‘aggregatable’, which provides storage and computational efficiencies in consensus protocols. The blst library provides an optimized, and cross-platform, option for developers looking to add the new BLS12–381 signature standard to their applications. These signatures are currently in use, or being considered, by blockchain protocols such as Ethereum, Ethereum 2, Filecoin, Chia, Tezos, Algorand, and more. By creating a fast, standards-compliant library, we hope to help improve performance and interoperability in the blockchain ecosystem. For more information about BLS signatures, see this informative overview by Ben Edgington.
blst Ecosystem
blst has been under active development for over a year and is currently being used in production by Eth2 (Lighthouse, Nimbus, Prysm, Teku) and Filecoin clients (Lotus). In addition to these applications there are a number of other active projects that extend blst to support other languages (Nim, Java, JavaScript) and use cases (blstrs).
blst Security
Security is an essential and continuous process for any cryptographic library. The blst library authors have taken a number of steps to improve the assurance of the library’s correctness and security. In addition to the audit mentioned above, formal verification of the blst library has been started by Galois. The aim of the project is to prove the memory-safety and correctness of the library. This work is open-source and we will be blogging about the process over the coming months. You can find the introductory blog about this project here. blst is also intended to be “constant-time” and abstains from memory management, enabling easier integration in environments like Intel SGX and Arm TrustZone.
Acknowledgements
We’d like to provide a special thanks to the Ethereum Foundation and Protocol Labs for their support of this work.
We’d also like to extend our thanks to the many people, teams, and projects that have provided information and resources in the development of this project, including but not limited to: the blst core team (Andy Polyakov, Sean Gulley, Simon Peffers, Kelly Olson), blst contributors (Paul Hauner, Michael Sproul, Kirk Baird, Giuliano Losa), the IETF specification authors (Riad Wahby, Dan Boneh, Zhenfei Zhang, Hoeteck Wee), the Ethereum Foundation (Justin Drake, Danny Ryan), Protocol Labs (Porcuquine, Friedel Ziegelmayer), and the countless others who paved the way through open-source development of BLS libraries.