Libsecp256k1
Safegcd’s Implementation Formally Verified
Published
4 months agoon
By
admin

Introduction
The security of Bitcoin, and other blockchains, such as Liquid, hinges on the use of digital signatures algorithms such as ECDSA and Schnorr signatures. A C library called libsecp256k1, named after the elliptic curve that the library operates on, is used by both Bitcoin Core and Liquid, to provide these digital signature algorithms. These algorithms make use of a mathematical computation called a modular inverse, which is a relatively expensive component of the computation.
In “Fast constant-time gcd computation and modular inversion,” Daniel J. Bernstein and Bo-Yin Yang develop a new modular inversion algorithm. In 2021, this algorithm, referred to as “safegcd,” was implemented for libsecp256k1 by Peter Dettman. As part of the vetting process for this novel algorithm, Blockstream Research was the first to complete a formal verification of the algorithm’s design by using the Coq proof assistant to formally verify that the algorithm does indeed terminate with the correct modular inverse result on 256-bit inputs.
The Gap between Algorithm and Implementation
The formalization effort in 2021 only showed that the algorithm designed by Bernstein and Yang works correctly. However, using that algorithm in libsecp256k1 requires implementing the mathematical description of the safegcd algorithm within the C programming language. For example, the mathematical description of the algorithm performs matrix multiplication of vectors that can be as wide as 256 bit signed integers, however the C programming language will only natively provide integers up to 64 bits (or 128 bits with some language extensions).
Implementing the safegcd algorithm requires programming the matrix multiplication and other computations using C’s 64 bit integers. Additionally, many other optimizations have been added to make the implementation fast. In the end, there are four separate implementations of the safegcd algorithm in libsecp256k1: two constant time algorithms for signature generation, one optimized for 32-bit systems and one optimized for 64-bit systems, and two variable time algorithms for signature verification, again one for 32-bit systems and one for 64-bit systems.
Verifiable C
In order to verify the C code correctly implements the safegcd algorithm, all the implementation details must be checked. We use Verifiable C, part of the Verified Software Toolchain for reasoning about C code using the Coq theorem prover.
Verification proceeds by specifying preconditions and postconditions using separation logic for every function undergoing verification. Separation logic is a logic specialized for reasoning about subroutines, memory allocations, concurrency and more.
Once each function is given a specification, verification proceeds by starting from a function’s precondition, and establishing a new invariant after each statement in the body of the function, until finally establishing the post condition at the end of the function body or the end of each return statement. Most of the formalization effort is spent “between” the lines of code, using the invariants to translate the raw operations of each C expression into higher level statements about what the data structures being manipulated represent mathematically. For example, what the C language regards as an array of 64-bit integers may actually be a representation of a 256-bit integer.
The end result is a formal proof, verified by the Coq proof assistant, that libsecp256k1’s 64-bit variable time implementation of the safegcd modular inverse algorithm is functionally correct.
Limitations of the Verification
There are some limitations to the functional correctness proof. The separation logic used in Verifiable C implements what is known as partial correctness. That means it only proves the C code returns with the correct result if it returns, but it doesn’t prove termination itself. We mitigate this limitation by using our previous Coq proof of the bounds on the safegcd algorithm to prove that the loop counter value of the main loop in fact never exceeds 11 iterations.
Another issue is that the C language itself has no formal specification. Instead the Verifiable C project uses the CompCert compiler project to provide a formal specification of a C language. This guarantees that when a verified C program is compiled with the CompCert compiler, the resulting assembly code will meet its specification (subject to the above limitation). However this doesn’t guarantee that the code generated by GCC, clang, or any other compiler will necessarily work. For example, C compilers are allowed to have different evaluation orders for arguments within a function call. And even if the C language had a formal specification any compiler that isn’t itself formally verified could still miscompile programs. This does occur in practice.
Lastly, Verifiable C doesn’t support passing structures, returning structures or assigning structures. While in libsecp256k1, structures are always passed by pointer (which is allowed in Verifiable C), there are a few occasions where structure assignment is used. For the modular inverse correctness proof, there were 3 assignments that had to be replaced by a specialized function call that performs the structure assignment field by field.
Summary
Blockstream Research has formally verified the correctness of libsecp256k1’s modular inverse function. This work provides further evidence that verification of C code is possible in practice. Using a general purpose proof assistant allows us to verify software built upon complex mathematical arguments.
Nothing prevents the rest of the functions implemented in libsecp256k1 from being verified as well. Thus it is possible for libsecp256k1 to obtain the highest possible software correctness guarantees.
This is a guest post by Russell O’Connor and Andrew Poelstra. Opinions expressed are entirely their own and do not necessarily reflect those of BTC Inc or Bitcoin Magazine.
Source link
You may like
This Week in Crypto Games: ‘Off the Grid’ Token, GameStop Goes Bitcoin, SEC Clears Immutable
Binance debuts centralized exchange to decentralized exchange trades
Why Is the Crypto Market Down Today? Bitcoin Drops to $82K as Traders Flee Risk Assets Amid Macro Worries
BTCFi: From passive asset to financial powerhouse?
Hyperliquid Delists $JELLY, Potentially Causing $900K in Losses. Here’s Why Best Wallet Token Can 100x
Cryptocurrencies to Sell Fast if Bitcoin Price Plunges Below $80K

This Week in Crypto Games: ‘Off the Grid’ Token, GameStop Goes Bitcoin, SEC Clears Immutable

Binance debuts centralized exchange to decentralized exchange trades

Why Is the Crypto Market Down Today? Bitcoin Drops to $82K as Traders Flee Risk Assets Amid Macro Worries

BTCFi: From passive asset to financial powerhouse?

Hyperliquid Delists $JELLY, Potentially Causing $900K in Losses. Here’s Why Best Wallet Token Can 100x

Cryptocurrencies to Sell Fast if Bitcoin Price Plunges Below $80K

‘Extremely High’ Odds of V-Shaped Recovery for Stock Market, According to Fundstrat’s Tom Lee

Is XRP price around $2 an opportunity or the bull market’s end? Analysts weigh in

What is Dogwifhat (WIF)? The Solana Dog Meme Coin With a Hat

Ethereum’s time is ‘meow?’ Vitalik Buterin video go ‘vrial’

Bitcoin Miner MARA Starts Massive $2B At-the-Market Stock Sale Plan to Buy More BTC

Paul Atkins “Conflict of Interest” Triggers $220M Withdrawals from Ripple Markets

Bitcoin CME Gap Close About To Happen With Push Toward $83k

Listing an altcoin traps exchanges on ‘forever hamster wheel’ — River CEO

Nasdaq Files To Launch a New Grayscale Avalanche (AVAX) Exchange-Traded Fund

Arthur Hayes, Murad’s Prediction For Meme Coins, AI & DeFi Coins For 2025

Expert Sees Bitcoin Dipping To $50K While Bullish Signs Persist

Aptos Leverages Chainlink To Enhance Scalability and Data Access

Bitcoin Could Rally to $80,000 on the Eve of US Elections

Sonic Now ‘Golden Standard’ of Layer-2s After Scaling Transactions to 16,000+ per Second, Says Andre Cronje

Institutional Investors Go All In on Crypto as 57% Plan to Boost Allocations as Bull Run Heats Up, Sygnum Survey Reveals

Crypto’s Big Trump Gamble Is Risky

Ripple-SEC Case Ends, But These 3 Rivals Could Jump 500x

Has The Bitcoin Price Already Peaked?

A16z-backed Espresso announces mainnet launch of core product

Xmas Altcoin Rally Insights by BNM Agent I

Blockchain groups challenge new broker reporting rule

The Future of Bitcoin: Scaling, Institutional Adoption, and Strategic Reserves with Rich Rines

Trump’s Coin Is About As Revolutionary As OneCoin

Is $200,000 a Realistic Bitcoin Price Target for This Cycle?
Trending
- 24/7 Cryptocurrency News5 months ago
Arthur Hayes, Murad’s Prediction For Meme Coins, AI & DeFi Coins For 2025
- Bitcoin2 months ago
Expert Sees Bitcoin Dipping To $50K While Bullish Signs Persist
- 24/7 Cryptocurrency News3 months ago
Aptos Leverages Chainlink To Enhance Scalability and Data Access
- Bitcoin5 months ago
Bitcoin Could Rally to $80,000 on the Eve of US Elections
- Altcoins2 months ago
Sonic Now ‘Golden Standard’ of Layer-2s After Scaling Transactions to 16,000+ per Second, Says Andre Cronje
- Bitcoin5 months ago
Institutional Investors Go All In on Crypto as 57% Plan to Boost Allocations as Bull Run Heats Up, Sygnum Survey Reveals
- Opinion5 months ago
Crypto’s Big Trump Gamble Is Risky
- Price analysis5 months ago
Ripple-SEC Case Ends, But These 3 Rivals Could Jump 500x