Cointime

Download App
iOS & Android

ZKP Series: Pseudonym Input Vulnerability in Circom’s Verification Contract Has Been Replicated

Overview

Earlier, a double-spending vulnerability in a zero-knowledge proof verification contract on Semaphore was uncovered by the Russian developer, Poma. As a matter of curiosity, my intention is to replicate the vulnerability’s PoC initially. However, due to the vulnerability code being old and the project being relatively complex, I opted to create a straightforward PoC to replicate the vulnerability.

Introduction

The foundation of Zero Knowledge Proof (ZKP) technology lies in an algorithm called a “proof system”. By performing a series of computations on the message, the algorithm produces a proof to demonstrate the genuineness of the message. The recipient can confirm the message’s authenticity by verifying the proof alone, without requiring additional information.

There are various implementation schemes for ZKP technology, which we discussed in our earlier article “Technical Features of ZKP Mainstream Implementation Schemes”. In this experiment, the Circom platform is employed, which utilizes Groth16 and PlonK as its proof system. During development, developers can select either system. The development framework generates proof parameters and verification contracts automatically without circuit modification.

In simpler terms, Circom creates witness data and attestation data on the client side and submits them to the contract. The verifier.sol contract verifies the submitted data to confirm whether the proof adheres to the specified rules. This approach enables rapid, efficient, and secure verification while safeguarding the message’s content and privacy.

Vulnerability Analysis

1. There isn’t much to discuss, so let’s proceed straight to the problematic code. Please refer to the “verifyHash” function in the image below. The code enclosed in the red box indicates whether specific witness data has been utilized. This method is commonly employed to prevent double spending. However, the vulnerability has arisen in the witness data “hash1”. Normally, a particular set of proof data should only correspond to a set of “hash1” values for verification purposes.

2. The “verify” function in the “verifier.sol” contract carries out elliptic curve computation verification on the input value via the “scalar_mul()” function. This function conducts calculations on elliptic curves utilizing the input parameters and matches the resulting value against the value specified in the provided proof. The function thereby confirms whether the input value is legitimate or not.

3. In a Solidity smart contract, encoding Fq necessitates the usage of the uint256 type. However, as the maximum value of uint256 is larger than the q value, several distinct integers may correspond to the same Fq value following the modulo operation. For example, “s” and “s+q” indicate the same point, namely the “sth” point. Similarly, “s+2q” and so on are also aliases for point “s”. This phenomenon is known as “Input Aliasing”, whereby these integers serve as pseudonyms for one another.

The “q” value mentioned here pertains to the cyclic group’s order, which signifies the number of values within the same Fq that can be input with numerous large integers. In essence, even if a q value is added to the hash, it can still satisfy the verification criterion. Within the uint256 type’s scope, a maximum of uint256_max/q distinct integers can indicate the same point. This signifies that a set of proofs can have up to 5 hash1 values that match and can pass the contract’s verification.

Vulnerability Recurrence

1. Develop a basic circuit that inputs two data sets and produces a witness data, i.e., “hash1,” utilized in the contract.

2. Compile the circuit to create “circuit_final.zkey”, “circuit.wasm”, and “verifier.sol”. Afterward, generate a collection of proofs, a standard hash, and a corrupted hash.

3. Subsequently, deploy the contract and employ the “checkHash” generated earlier to conduct a verification process. The verification successfully passes.

4. Next, apply the identical witness data and the previously generated “attackHash”. It is discovered that the verification is also successful. This demonstrates that a set of proofs can feature several matching hashes that meet the contract’s verification criteria. Thus, the Circom verification contract input pseudonym vulnerability has been effectively replicated.

Solutions to Vulnerabilities

The vulnerability arises from a set of proofs that can have at most 5 hash values that match and meet the contract’s verification requirements. Thus, the bug fix is straightforward: restricting all input hashes to a value less than “q”.

Summary

Input pseudonym vulnerability is a frequently encountered vulnerability in zero-knowledge proof and cryptography implementation. Its fundamental cause lies in the value being equivalent to the remainder within the finite field. Therefore, developers must focus on the verification group’s order when creating cryptography.

Get the latest news here: Cointime channel — https://t.me/cointime_en

Comments

All Comments

Recommended for you

  • ETH Surpasses $2400

    Market data shows that ETH has surpassed $2400, currently priced at $2400.69, with a 24-hour increase of 3.61%. The market is experiencing significant volatility, so please ensure proper risk management.

  • Iranian Media Confirms Receipt of 'Some Signals' from the U.S. to Lift Blockade

    On April 22, according to Iran's Tasnim News Agency, an Iranian envoy stated that Iran is prepared to negotiate once the U.S. lifts its maritime blockade. The Iranian state media released a video featuring Amir Saeed Iravani, Iran's permanent representative to the United Nations, who indicated that Tehran is ready to engage in talks immediately after the U.S. ends its maritime blockade, emphasizing that Washington must first cease its 'violations of the ceasefire agreement.' Following the report, the market reacted swiftly, with gold and silver prices rising briefly, while the dollar and crude oil prices fell. Previously, media outlets such as the Associated Press and RIA Novosti had reported the ambassador's statements, but this is the first report from Iranian state media linked to the Islamic Revolutionary Guard Corps.

  • Dollar Index DXY Drops 10 Points, Currently at 98.28

    Market data shows that the Dollar Index DXY has dropped 10 points in the short term, currently reported at 98.28.

  • BTC Surpasses $78,000

    Market data shows that BTC has surpassed $78,000, currently priced at $78,008, with a 24-hour increase of 2.79%. The market is highly volatile, so please ensure proper risk management.

  • Iran Receives 'Certain Signs' Indicating US Prepared to Lift Sanctions

    On April 22, according to Iran's Tasnim News Agency: Iran has received 'certain signs' indicating that the United States is prepared to lift sanctions. (Jinshi)

  • Iran Implements Maritime Enforcement on Container Ship Ignoring Warnings

    According to Iran's Tasnim News Agency: Iran has stated that it has implemented maritime enforcement on a container ship that ignored warnings. (Jinshi)

  • Expert: Trump's Hostility Towards Iran Has Deep Roots; US-Israel Leadership Lacks Historical Foundation and Acumen

    On April 22, according to Al Jazeera, Brian Clark, Director of Defense Concepts at the Hudson Institute in Washington, stated: "Trump has expressed disdain for the Iranian leadership for many years, and he seems to have been seeking a legacy initiative that could permanently change Iran, making it at least a 'neutral or even friendlier country towards the US.' Therefore, from this perspective, it is indeed not a new goal he suddenly started pursuing. The leadership of the US and Israel believes that now might be the time to finally subdue the Iranian regime, as it is in a passive position. However, this may reflect a lack of historical foundation and acumen in the US-Israel leadership, as Iran is not a country that can easily have its existing leadership structure overthrown." (Jinshi)

  • US Spot Ethereum ETF Sees Net Inflow of $43.36 Million Yesterday

    On April 22, according to monitoring by Trader T, the US spot Ethereum ETF recorded a net inflow of $43.36 million yesterday.

  • US Spot Bitcoin ETF Sees Net Inflow of $11.83 Million Yesterday

    On April 22, according to monitoring by Trader T, the US spot Bitcoin ETF experienced a net inflow of $11.83 million yesterday.

  • BTC Surpasses $77,000

    Market data shows that BTC has surpassed $77,000, currently reported at $77,067.57, with a 24-hour increase of 1.78%. The market is experiencing significant volatility, so please ensure proper risk management.