When gitGost is NOT Sufficient
State-Level Adversaries
gitGost cannot protect against nation-state actors with network surveillance capabilities.
Whistleblowing
Use dedicated tools like SecureDrop, not gitGost.
Legal Exposure
If deanonymization has legal consequences, gitGost is insufficient.
Targeted Investigations
Determined adversaries with resources can correlate timing, style, and network data.
IP Visibility and Network Exposure
The Problem
gitGost does not hide your IP address by itself. GitHub and the gitGost operator can see the source IP of your connection if you push directly.The Solution: Tor or Trustworthy VPN
Or Use a Trustworthy VPN
Choose a VPN provider with:
- No-logs policy (audited, not just claimed)
- Anonymous payment (crypto, cash)
- No email registration
Network metadata: Even with Tor/VPN, the gitGost operator can see:
- You connected at a specific time
- The size of your push
- The target repository
Code Style Analysis
The Problem
gitGost strips metadata (name, email, timestamp) but cannot strip your coding style. Experienced maintainers or automated tools can attribute code based on:Variable Naming Conventions
Variable Naming Conventions
- Consistent use of
ctxvscontextvscfor context variables - Preference for
errvserrorvse - Specific abbreviation patterns (e.g.,
usrvsuser,msgvsmessage)
Error Handling Patterns
Error Handling Patterns
- Specific error message formats (“failed to X: %v” vs “X failed: %v”)
- Use of
fmt.Errorfvserrors.New - Wrapping vs returning errors directly
Code Structure
Code Structure
- Preference for early returns vs nested if/else
- Consistent use of guard clauses
- Specific function ordering patterns
Comments & Documentation
Comments & Documentation
- Language patterns (British vs American English)
- Emoji usage in comments
- Level of detail in docstrings
Testing Style
Testing Style
- Table-driven tests vs individual test functions
- Specific assertion patterns
- Mock usage and setup style
Real Example
The Solution: Conscious Style Variation
Use Generic Patterns
- Follow language idioms strictly (e.g., Go’s
Effective Go) - Avoid personal idioms or “clever” code
- Use standard library patterns over custom abstractions
Write Neutral Commit Messages
Avoid:
- Emoji (unless common in the target repo)
- Personal phrases (“I think”, “IMHO”)
- Consistent formatting quirks (always capitalizing types, etc.)
- Imperative mood: “Fix bug” not “Fixed bug” or “Fixes bug”
- Generic descriptions: “Update documentation” not “Improve docs readability”
Temporal Correlation
The Problem
An observer who monitors both your activity and the target repository can correlate based on timing:- You mention working on a feature at 3:45 PM (e.g., in another community)
- An anonymous PR for that feature appears at 3:47 PM
- Observer links the two events
Attack Scenarios
Low-Traffic Services
Low-Traffic Services
If gitGost has few concurrent users, your push time uniquely identifies you:
- Push at 2:13 AM → PR created at 2:13 AM
- No other PRs in ±10 minutes
- Obvious correlation
Public Activity Correlation
Public Activity Correlation
Observer monitors your GitHub activity:
- Your main account last active: 11:34 PM
- Anonymous PR created: 11:36 PM
- Both in US Eastern timezone
- Correlation over multiple occurrences reveals pattern
Low-Activity Target Repos
Low-Activity Target Repos
Repos with few contributors:
- Project receives 1 PR every 2 weeks
- You push anonymously same day you discuss the issue in Discord
- Timing + context reveals authorship
The Solution: Timing Obfuscation
Operator-side jitter: Some gitGost operators may add server-side delays or queuing. Check the operator’s transparency policy. The official instance at
gitgost.leapcell.app processes immediately (minimal jitter).Small PR Attribution in Low-Activity Projects
The Problem
Small, unique PRs are inherently attributable:- Example: 1-line typo fix in a README that receives 2 PRs/year
- Context: You reported the typo in an issue 3 days ago
- Result: Obvious you’re the contributor, anonymity ineffective
The Solution
gitGost is best suited for:
- Active projects with regular contributions
- Non-trivial PRs (features, refactors) that blend in
- Repos where multiple contributors work concurrently
- Tiny typo fixes in low-activity repos
- PRs to repos you maintain or frequently contribute to publicly
- Unique features you’ve discussed publicly under your real identity
Private Repositories
Why private repos are problematic:- Operator knows which private repos you’re contributing to (exposes project context)
- GitHub sees your fork of a private repo (requires authentication, harder to anonymize)
- Fewer contributors = easier correlation
Hostile Operators
The Problem
A malicious operator could:- Log IP addresses (despite policy claiming otherwise)
- Add hidden telemetry
- Correlate push timing with other data sources
- Keep detailed records for later analysis
The Solution: Trust or Self-Host
Use a Trusted Operator
Use a Trusted Operator
Operators with:
- Public privacy policy (specific, not vague)
- Open-source deployment (auditable)
- Transparency reports (published stats)
- Reputation in community
Self-Host gitGost
Self-Host gitGost
Run your own instance:Pros: Complete control, no operator trust requiredCons: Your server IP is visible to GitHub (use VPN/proxy at server level)
Verify Open Source
Verify Open Source
Audit the code yourself:
- Check
router.go:129-136for disabled logging - Verify
handlers.godoesn’t log IPs - Review database schema for personal data
Platform-Level Attacks
Out of Scope Threats
gitGost cannot protect against:- GitHub compromise (attacker gains access to GitHub’s servers)
- MITM attacks (attacker intercepts HTTPS traffic via certificate compromise)
- Operator infrastructure breach (attacker gains root on gitGost server and patches running binary)
- Side-channel attacks (timing attacks on GitHub API, DNS correlation, etc.)
Summary: Is gitGost Right for You?
gitGost is SUITABLE for:
- Contributing to public open-source projects without linking to your GitHub account
- Avoiding employer/institutional attribution
- Protecting against casual deanonymization
- Separating personal and professional identities
gitGost is NOT suitable for:
- Whistleblowing or high-risk leaks (use SecureDrop, Tor-only platforms)
- Evading state-level surveillance
- Contributing to CLA-required projects
- Scenarios where deanonymization has severe legal consequences
- Private repositories
Threat Model Quick Reference
| Threat | gitGost Protection | Additional Steps Required |
|---|---|---|
| IP exposure | ❌ None | ✅ Use Tor/VPN |
| Code style attribution | ❌ None | ✅ Vary style, match target repo |
| Temporal correlation | ⚠️ Partial (immediate processing) | ✅ Add delays, batch pushes |
| Metadata exposure | ✅ Full (name, email, timestamp stripped) | ❌ None |
| GitHub account linking | ✅ Full (PRs from @gitgost-anonymous) | ❌ None |
| Commit history tracking | ✅ Full (stateless, stream-only) | ❌ None |
| Hostile operator | ⚠️ Depends on operator | ✅ Self-host or verify open source |
| State-level adversary | ❌ None | ⛔ Use specialized tools |
Related Documentation
Threat Model
Detailed attack vectors and mitigations
Privacy Guarantees
What data is stored and retained
Tor Integration
Hide your IP address with Tor
Self-Hosting
Run your own gitGost instance