|
|
@@ -0,0 +1,60 @@
|
|
|
+# Troll Patrol: Anonymous User Reporting of Bridge Censorship (Artifact)
|
|
|
+
|
|
|
+This artifact accompanies the paper:
|
|
|
+
|
|
|
+- Vecna, Ian Goldberg. 2026. Troll Patrol: Anonymous User Reporting of Bridge Censorship. *Proceedings on Privacy Enhancing Technologies* 2026, 4 (2026).
|
|
|
+
|
|
|
+This repository contains scripts for reproducing the results from Section 6, as well as additional results in Appendices A and C.
|
|
|
+
|
|
|
+## PoPETs Artifact
|
|
|
+
|
|
|
+The instructions for reproducing the results in our paper are in the [ARTIFACT-APPENDIX.md](https://git-crysp.uwaterloo.ca/vvecna/troll-patrol-artifact/src/main/ARTIFACT-APPENDIX.md) file.
|
|
|
+
|
|
|
+## Code Overview
|
|
|
+
|
|
|
+This repository directly runs code from two different git repositories:
|
|
|
+- [lox-troll-patrol-extension](https://git-crysp.uwaterloo.ca/vvecna/lox-troll-patrol-extension)
|
|
|
+- [belarus-2020-2021](https://git-crysp.uwaterloo.ca/vvecna/belarus-2020-2021)
|
|
|
+
|
|
|
+(Other repositories cloned by the [setup.sh](https://git-crysp.uwaterloo.ca/vvecna/troll-patrol-artifact/src/main/scripts/setup.sh) script are dependencies for lox-troll-patrol-extension.)
|
|
|
+
|
|
|
+The purpose and basic description of each repository is given below.
|
|
|
+
|
|
|
+### lox-troll-patrol-extension
|
|
|
+
|
|
|
+This repository has three important branches:
|
|
|
+- [lox-extension](https://git-crysp.uwaterloo.ca/vvecna/lox-troll-patrol-extension/src/lox-extension), which contains the Tor Project development Lox code from which we forked, with only minimal changes of ours, to allow us to collect the necessary benchmarks.
|
|
|
+- [main](https://git-crysp.uwaterloo.ca/vvecna/lox-troll-patrol-extension), which contains our modified code.
|
|
|
+- [lox-original](https://git-crysp.uwaterloo.ca/vvecna/lox-troll-patrol-extension/src/lox-original), which contains the Lox code from the original Lox paper, with only minimal changes of ours, to allow us to collect the necessary benchmarks.
|
|
|
+
|
|
|
+The [generate-lox-results.sh](https://git-crysp.uwaterloo.ca/vvecna/troll-patrol-artifact/src/main/scripts/generate-lox-results.sh) script runs various testing functions for each branch. These functions' names all begin with **stats_test**, and they can be found in the following files:
|
|
|
+- On branch "lox-extension": [src/main/crates/lox-extensions/src/stats_tests.rs](https://git-crysp.uwaterloo.ca/vvecna/lox-troll-patrol-extension/src/lox-extension/crates/lox-extensions/src/stats_tests.rs)
|
|
|
+- On branch "main": [src/main/crates/lox-extensions/src/stats_tests.rs](https://git-crysp.uwaterloo.ca/vvecna/lox-troll-patrol-extension/src/main/crates/lox-extensions/src/stats_tests.rs)
|
|
|
+- On branch "lox-original": [src/tests.rs](https://git-crysp.uwaterloo.ca/vvecna/lox-troll-patrol-extension/src/lox-original/src/tests.rs)
|
|
|
+
|
|
|
+The results are parsed by the [profess-lox-results.sh](https://git-crysp.uwaterloo.ca/vvecna/troll-patrol-artifact/src/main/scripts/process-lox-results.sh) script, which runs the [get_results.sh](https://git-crysp.uwaterloo.ca/vvecna/troll-patrol-artifact/src/main/parsing-results/get_results.sh) script and produces a .tex file and a corresponding .pdf file for each branch:
|
|
|
+- Branch "lox-extension": **table-2-results.tex** and **table-2-results.pdf** (containing Table 2 from our paper)
|
|
|
+- Branch "main": **table-3-results.tex** and **table-3-results.pdf** (containing Table 3 from our paper)
|
|
|
+- Branch "lox-original": **appendix-c-results.tex** and **appendix-c-results.pdf** (containing Table 5 from Appendix C of our paper)
|
|
|
+
|
|
|
+### belarus-2020-2021
|
|
|
+
|
|
|
+This repository contains scripts for data analysis related to the [Tor blocking events in Belarus from 2020–2021](https://gitlab.torproject.org/tpo/anti-censorship/censorship-analysis/-/blob/main/reports/2020/belarus/2020-belarus-report.md).
|
|
|
+This corresponds to the case study in Appendix A of our paper.
|
|
|
+Reproducing the results from Appendix A is managed by the [belarus.sh](https://git-crysp.uwaterloo.ca/vvecna/troll-patrol-artifact/src/main/scripts/belarus.sh) script in this artifact (in the scripts directory), which calls various [scripts in the belarus-2020-2021 repo](https://git-crysp.uwaterloo.ca/vvecna/belarus-2020-2021/src/main/scripts) to download historical Tor bridge data from Tor Metrics, process this data, and run various analyses on the data.
|
|
|
+
|
|
|
+The main analysis orchestration script (which is run after downloading the Tor Metrics data and processing this data to get daily connection counts to each bridge from Belarus) is [get-stats.sh](https://git-crysp.uwaterloo.ca/vvecna/belarus-2020-2021/src/main/scripts/get-stats.sh), which does the following:
|
|
|
+1. Run [evaluate-blockages.py](https://git-crysp.uwaterloo.ca/vvecna/belarus-2020-2021/src/main/scripts/evaluate-blockages.py) to run Algorithms 1–3 from our paper.
|
|
|
+2. Run [get-stats.py](https://git-crysp.uwaterloo.ca/vvecna/belarus-2020-2021/src/main/scripts/get-stats.py) to create Table 4 (contained in the file **appendix-a-results.tex**) from the results of step 1. This script also computes the mean and standard deviation of each email-distributed obfs4 bridge's daily connection counts, as well as these measurements for each pair of these bridges.
|
|
|
+3. Compile **appendix-a-results.tex** to get **appendix-a-results.pdf**.
|
|
|
+4. Parse the relevant data (number of bridges/pairs of bridges that received a certain number of connections on a single day, number of bridges/pairs of bridges with connection count mean more than 1 standard deviation from 0, maximum number of standard deviations from 0) from the data produced in step 2.
|
|
|
+5. Run [get-stats-non-obfs4-email.py](https://git-crysp.uwaterloo.ca/vvecna/belarus-2020-2021/src/main/scripts/get-stats-non-obfs4-email.py), which computes and outputs the number of bridges that either were not distributed via email or did not report supporting obfs4, which received at least *n* connections from Belarus on some day for a range of *n* values. (This demonstrates a point that there *were* bridges that were popular in Belarus, but the email-distributed obfs4 bridges that were blocked were not the popular bridges.)
|
|
|
+
|
|
|
+This repository is used to produce the following files:
|
|
|
+- **appendix-a-results** (which contains the output of the **get-stats.sh** script; see [belarus.sh](https://git-crysp.uwaterloo.ca/vvecna/troll-patrol-artifact/src/main/scripts/belarus.sh#L45))
|
|
|
+- **appendix-a-results.pdf** (produced by **get-stats.sh**)
|
|
|
+- **appendix-a-results.tex** (produced by **get-stats.py**, which is called by **get-stats.sh**)
|
|
|
+
|
|
|
+## License
|
|
|
+
|
|
|
+This project as a whole is licensed under the MIT License. The belarus-2020-2021 repository downloads and uses data from the Tor Project that is provided under the CC0 Deed.
|