International Association for Cryptologic Research

International Association
for Cryptologic Research

Eurocrypt 2026

Attacks on Goldreich’s Pseudorandom Generators by Grouping and Solving


README

Eurocrypt Artifact for "Attacks on Goldreich's Pseudorandom Generators by Grouping and Solving"

This is the artifact belonging to the paper:

Ximing Fu, Mo Li, Shihan Lyu, and Chuanyi Liu, Attacks on Goldreich's Pseudorandom Generators by Grouping and Solving, Eurocrypt 2026.

The repository contains:

  1. C++ implementations for the main attack workflow, including output_generator, attack_program, toy_attack, and FiLIP_verifier.
  2. Utility scripts in scripts/ for artifact harnessing and for computing Table 5 and Table 6 values directly from the formulas in the paper.

Dependencies

Required dependencies:

Optional dependencies:

The attack code is portable across Windows, Linux, and macOS:

The included commands were validated locally on:

The implementation can also be built and run in standard Unix-like environments, including WSL, Linux, and macOS.

Running the Artifact

The artifact supports two complementary workflows:

  1. Running the C++ programs for statistical verification, the toy attack, and the full grouped-equation attack pipeline.
  2. Running Python scripts that compute Table 5 and Table 6 values directly from the paper's formulas.

Build

Recommended (CMake)

cmake -S . -B build
cmake --build build

This builds:

Manual build

g++ -std=c++17 -O3 FiLIP_verify.cpp -o FiLIP_verifier
g++ -std=c++17 -O3 toy.cpp -o toy_attack
g++ -std=c++17 -O3 prng.cpp output_make.cpp -o output_generator
g++ -std=c++17 -O3 attack.cpp prng.cpp verify.cpp -o attack_program

If your toolchain supports OpenMP, you may use:

g++ -std=c++17 -O3 -fopenmp attack.cpp prng.cpp verify.cpp -o attack_program

Quick Check

For a fast sanity check of the artifact, run:

./FiLIP_verifier
./toy_attack

Interpretation:

Full Attack Workflow

Step A: Generate PRG outputs

./output_generator

This creates data/output_*.bin files.

Default storage usage of output_generator:

In practice, reserve at least 650 GB of free disk space before running the default full dataset generation.

Runtime note:

Step B: Launch attack

./attack_program

Expected output includes:

Interpretation:

Relation to the paper:

Statistical Verification

The statistical verification executable is:

./FiLIP_verifier

Expected output includes a table with Good Group and Bad Group probabilities.

Interpretation:

Parameter Sets and Table 4

The current codebase hardcodes one representative parameter set for the included artifact runs. It does not currently expose all parameter sets from Table 4 of the paper as command-line options or a unified configuration layer.

For readers comparing the code to Table 4:

Table 4 seeds and their SHA-256 keys:

The currently hardcoded artifact key in attack.cpp / output_make.cpp corresponds to:

Formula-Based Table Scripts

The repository also includes scripts that compute paper-style table outputs for the FiLIP analysis without running the full experimental attack. These scripts are meant to help readers inspect the quantities reported in the paper through direct computation rather than through a long data-generation experiment.

Table 5

python scripts/compute_table5_filip_xor_thr.py

This prints a paper-style table for FiLIP instantiated with XORa-THRt,b.

Output columns:

These values are computed directly from the formulas used in the paper's analysis .

Table 6

python scripts/compute_table6_filip_xor_thr_thr.py

This prints a paper-style table for FiLIP instantiated with XORa-THRt1,b1-THRt2,b2.

Output columns:

Harness Scripts

Run the local artifact harness with:

.\scripts\run_artifact_harness.ps1

This script:

You can re-run the summary only with:

.\scripts\summarize_harness_logs.ps1 -LogsDir artifact-logs

Validation Status

Verified locally:

Organization of Files

.
|-- attack.cpp
|-- CMakeLists.txt
|-- FiLIP_verify.cpp
|-- LICENSE
|-- output_make.cpp
|-- prng.cpp
|-- prng.h
|-- README.md
|-- toy.cpp
|-- verify.cpp
|-- verify.h
`-- scripts
    |-- compute_table5_filip_xor_thr.py
    |-- compute_table6_filip_xor_thr_thr.py
    |-- run_artifact_harness.ps1
    `-- summarize_harness_logs.ps1

License

This repository is released under the MIT License. See LICENSE.