2025-gusgustavo-iran-using-champa
findings extracted from this paper
-
Champa implements adaptive request-rate control: when the AMP cache returns an unexpected response (e.g., HTTP 302), the client halves its polling rate. Once the polling interval exceeds one second the client is considered fully rate-limited and must restart after a multi-hour cooldown. This mechanism keeps the client from burning through its allowance when cache responses degrade.
-
Champa's AMP-cache tunnel delivers at most ~15 KB/s throughput before AMP rate-limiting activates. Sessions last approximately 15 minutes before the rate limit triggers; after that, users must stop the client and wait several hours before resuming.
-
As of June 2025, Iran blocks GitHub.com and Telegram but leaves the IP address of google.com reachable and Google Drive accessible. This selective blocking pattern created the operational window for Champa: because google.com is reachable, its AMP cache (cdn.ampproject.org) can be reached by fronting on that IP, then used to proxy connections to otherwise-blocked destinations.
-
Because GitHub is blocked in Iran, Champa distributes binaries through three alternative channels: a Telegram bot (@getchampabot), Google Drive folders, and curl commands documented in the GitHub issue thread itself. The issue thread remains accessible via Google cache / AMP even when GitHub's domain is blocked, creating a bootstrapping loop.
-
Champa routes connections by specifying an AMP cache URL (https://cdn.ampproject.org/) with google.com as the front domain, then uses the SOCKS5 proxy interface locally. The server's public key is hardcoded in the connection string, providing a fixed authentication token that prevents trivial impersonation of the proxy by a censor injecting a fake server response during active probing.