UPGen is a protocol generator for creating randomized Protocol Specification
Files (PSFs) for censorship circumvention. The PSFs generated by UPGen can be
used with Proteus. UPGen is able to
generate a vast number of distinct protocols: the analysis in our
USENIX Security publication
shows on the order of
UPGen is designed to work when censors use a "blocklist strategy"; that is, when censors maintain a set of rules to block particular protocols. The basic security argument is that it would be difficult to block many or all UPGen protocols without inadvertently blocking many other protocols (that are not designed for circumvention).
For installing UPGen, please follow the installation guide.
Install uv and GNU Make, then install UPGen and its dependencies:
$ make sync
$ make download-model
$ make generatemake download-model downloads an example, pretrained greeting string model
from GitHub and extracts it into build/. If you wish to train your own model
instead, see the greeting string model guide for
details.
Run make to list the available commands. Paths and generation options can be
overridden when needed, for example:
$ make generate CONFIG_FILE=assets/config.json \
NUM_GENERATED=5 PSF_FILE=build/examples.psfSee the documentation to generate PSFs and to get related info.
You can read more about UPGen in our USENIX Security publication:
@inproceedings{wails:usenixsec:25,
author = {Ryan Wails
Rob Jansen and
Aaron Johnson and
Micah Sherr},
editor = {Lujo Bauer and
Giancarlo Pellegrino},
title = {Censorship Evasion with Unidentified Protocol Generation},
booktitle = {Proceedings of the 34th USENIX Security Symposium},
publisher = {{USENIX} Association},
year = {2025},
pages = {763--782},
url = {https://www.usenix.org/conference/usenixsecurity25/presentation/wails},
isbn = {978-1-939133-52-6},
address = {Seattle, WA}
}See LICENSE for details.