There is a newer version of the record available.

Published December 9, 2025 | Version v1
Working paper Open

USENIX-artifict, Distributed Vector Commitments and Their Applications

Authors/Creators

Description

README:

USENIX 2026 “Distributed Vector Commitments and Their Applications”

The project can run on both Windows and Linux environments (Ubuntu version 20.04 or higher).

This project is built on the Python binding of the mcl library (BLS-12381), which is originally implemented in Go. While the underlying library is written in Go, our project itself is implemented in Python.

The main.py in this folder can be executed directly, while the core code and key functions are implemented in the PCS_group.py. Most of the remaining files are utility modules used to support polynomial operations.

main.py provides an example illustrating the complete function call flow for proof generation. Experiments of arbitrary scale can be conducted by adjusting the three key parameters N, M, n.

Configurable Parameters

n: Length of each subvector

M: Number of machines

N: Length of the full vector

modulus: Modulus of the finite field. This parameter can be modified if the BLS12-381 curve is not used.

**Mapping Between Algorithms in the Paper and Code Functions**
(Note: Some algorithm inputs and outputs are internal attributes of classes and are not explicitly listed.)

 algorithms of HLE-DVC functions in the code
Setup

example = mcl_bls2381PCS_group.Hybrid_mul_polynomial_commitment_scheme(M, n, N, rho, omega_n_s, modulus, vector)

  omega_n_s is the multiplicative subgroup of the finite field

DistCommit   example.dist_commit()
genAux   example.genAux()
GenPartialProof   partialProof_P_0 = example.genPartialProof()
GenAllPartialProof   AllPartialProof = example.genAllPartialProof()
Prove   value, pi_d_rho_i = example.prove(k,i) <br> k is the machine index and i is the elment index in the subvector
Verify   example.verify(partialProof_P_0, pi_d_rho_i, value,k,i)  
 ProveAll   We measured the time overhead of ProveAll using https://github.com/sunblaze-ucb/eVSS
BatchProve   value_list, pi_d_rho_I_batch = example.BatchProve(k,I)  <br> I is the index set of the subvector
Aggregate   The whole process of Aggregation (including verification) is presented in AggregateTest(example,d, partialProof_P_0)
UpdComProof   UpdateTest(example,u=0,j=0,delta_v=5)

 


### A small demo: How to generate a single position proof

```python
n = 32
N = M * n

modulus = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001
f = PrimeField(modulus)

omega_n = f.exp(7, (modulus - 1) // n)
omega_n_s = get_power_cycle(omega_n, modulus)

vector = [random.randint(1, modulus) for i in range(N)]

example = mcl_bls2381PCS_group.Hybrid_mul_polynomial_commitment_scheme(
    M, n, N, rho, omega_n_s, modulus, vector
)

example.dist_commit()

print("-----------------------------------------------generate partial proofs----------------------------------------")
example.genAux()

AllPartialProof = example.genAllPartialProof()
partialProof_P_0 = AllPartialProof[0]

print("-----------------------------------------------generate single proof----------------------------------------")
k = 0
i = 1

value, pi_d_rho_i = example.prove(k, i)
value = vector[k * n + i]

print("value:", value)
example.verify(partialProof_P_0, pi_d_rho_i, value, k, i)

```

## Reproducing Experimental Results (Tables 4, 5, and 6)

This section provides instructions on how to reproduce the results reported in Tables 4, 5, and 6 of the Experiments section in the paper. We clarify which results are obtained via theoretical analysis and which are measured empirically using the provided code.

### Table 4: Storage Overhead of the HLE-DVC Scheme

The results in Table 4 report the **storage overhead** of the HLE-DVC scheme.  
These values are obtained via **theoretical calculation**, based on the construction of HLE-DVC and the sizes of group elements and proofs.  
No additional code execution is required to reproduce Table 4.

---

### Table 5: Time Overhead of the HLE-DVC Scheme

Table 5 reports the **time overhead** of HLE-DVC for different algorithms.

To reproduce the results in Table 5, set the parameters in the code as follows:
- `n = 2^30`
- `rho = 4`

The time overhead of **ProveAll** is measured using the implementation from the following repository:
- https://github.com/sunblaze-ucb/eVSS

The reported values in Table 5 are obtained by running the corresponding algorithms with the above settings and averaging over multiple runs.

---

### Table 6: Comparison with Other Schemes

Table 6 compares HLE-DVC with KZG-DPCS-DVC, Hyperproofs, and Hyperproofs-DVC.

- **Storage size** results in Table 6 are obtained via **theoretical analysis** for all schemes.

- **KZG-DPCS-DVC**:
  - The time overheads are obtained through **theoretical analysis**, based on the costs of the underlying cryptographic operations.

- **Hyperproofs**:
  - The time overheads are obtained by setting:
    - `n = 1`
    - `rho = 34`
  - As pointed out in Appendix E.3 of the paper, Hyperproofs is essentially equivalent to the **MLE version of HLE-DVC** under these parameters.

- **Hyperproofs-DVC**:
  - Hyperproofs-DVC is a variant proposed in the *extension* section of the appendix and will be discussed further in future work.
  - The algorithms and time overheads of `DistCommit`, `GenAux`, and `GenPartialProof` are **identical to those of HLE-DVC**.
  - The `Verify` algorithm has the same cost as Hyperproofs.
  - The time overhead of `ProveAll` is computed as:
    ```
    (Hyperproofs ProveAll time) / M
    + time of GenAux
    + time of GenAllPartialProof
    ```

This combination of theoretical analysis and experimental measurement yields the results reported in Table 6.

 

 

 

 

Files

HLE-DVC-USENIX.zip

Files (7.0 MB)

Name Size Download all
md5:2f412133ae65f86dbc01d06582d2852c
16.2 kB Download
md5:f5e5ce4453c23787e3869dced9ff8c66
7.0 MB Preview Download