International Association for Cryptologic Research

International Association
for Cryptologic Research

Eurocrypt 2026

Group Key Progression: Strong Security for Shared Persistent Data


README

Storage Cost Simulation of Grappa

This repository contains the code to simulate the storage and communication cost of Grappa when implemented with different interval schemes. This is an artifact that accompanies our paper called "Group Key Progression: Strong Security for Shared Persistent Data".

Installation

The python packages listed in requirements.txt need to be installed.

For example, you can create a virtual environment and install them there as follows:

$ python3 -m venv venv
$ . venv/bin/activate
$ pip3 install -r ./requirements.txt

Running the simulator

Run with the following instructions:

$ python3 sim.py --sets 10 --reps 10000 --nr-users 500 --nr-admins 5 --add-user 0.01 --rem-user 0.01 --upd-user 0.489895 --add-admin 0.0001 --rem-admin 0.0001 --upd-admin 0.489895 --rot-keys 0.00001 --max-chain-len 10000 --interval-type all --verbose progress

Help page:

$ python3 sim.py --help
usage: simulate [-h] [--sets SETS] [--reps REPS] [--nr-users NR_USERS] [--nr-admins NR_ADMINS] [--add-user ADD_USER] [--rem-user REM_USER] [--upd-user UPD_USER] [--add-admin ADD_ADMIN] [--rem-admin REM_ADMIN] [--upd-admin UPD_ADMIN] [--rot-keys ROT_KEYS] [--max-chain-len MAX_CHAIN_LEN]
          [--interval-type {trivial,dhash,dsskg,ggm1,all}] [--verbose {progress,info,debug,warning,error}]

Simulate GKP costs

options:
  -h, --help            show this help message and exit
  --sets SETS
  --reps REPS
  --nr-users NR_USERS
  --nr-admins NR_ADMINS
  --add-user ADD_USER
  --rem-user REM_USER
  --upd-user UPD_USER
  --add-admin ADD_ADMIN
  --rem-admin REM_ADMIN
  --upd-admin UPD_ADMIN
  --rot-keys ROT_KEYS
  --max-chain-len MAX_CHAIN_LEN
  --interval-type {trivial,dhash,dsskg,ggm1,all}
  --verbose {progress,info,debug,warning,error}

The values for flags --add-user, --rem-user, --upd-user, --add-admin, --rem-admin, --upd-admin, and --rot-keys are percentages (between 0 and 1) and need to add up to 100%.

The results in our paper were produced with the following call. Note that this simulation took multiple hours on a machine with 44 physical cores.

$ python3 sim.py --sets 100 --reps 100000 --nr-users 500 --nr-admins 5 --add-user 0.01 --rem-user 0.01 --upd-user 0.489895 --add-admin 0.0001 --rem-admin 0.0001 --upd-admin 0.489895 --rot-keys 0.00001 --max-chain-len 10000 --interval-type all --verbose progress

Remark on computation time

The simulation for the results in the paper took multiple hours on a machine with 44 physical cores.

You can make tradeoffs to reduce the computation time as follows:

Additionally, the following parameters influence the cost, but changing them changes the evaluated scenario:

Remark on verbosity

Change --verbose to modify the output of the simulator. Note that setting this to info or debug is not recommended for large simulations, as it will produce an extremely large amount of output and significantly slow down the simulator. Instead, reduce the number of sets and repetitions a lot (e.g., --sets 1 --reps 1000) for a deeper understanding of Grappa, or debugging.

Code organization

The code is structured as follows: