Security & Privacy

Security

Not Promises. Mechanism.

Every claim on this page corresponds to a line of code you can audit on GitHub. Every protection has a defined failure mode. Every limit is written down. This is the threat model, published.

The Promise

Your private data is encrypted before it reaches us. We cannot read your email address, your phone number, your real name, or your physical address. If our database is ever compromised, what leaks is ciphertext — useless without keys that live in a separate, isolated location.

This is not a marketing bullet. It is the architecture. We built MyCitadel so that we cannot betray you even if we wanted to — because we do not have the ability to read the data in the first place.

15 PII fields encrypted at rest
256MiB Memory cost per Argon2id hash
0 Third-party tracking scripts
0 Admin spy panels

The Mechanisms

Every item below is implemented. Every item is auditable. Nothing here is aspirational.

Argon2id Password Hashing

Passwords are hashed with 256 MiB memory cost, 4 iterations, 2 threads. Even with our entire users table in hand, recovering a single password requires infeasible compute. Silent rehash upgrades old hashes on next login — no user ever sees a "please reset" prompt.

Envelope Encryption for PII

Every personal field — email, phone, real name, address, date of birth — is encrypted with a per-user key derived from a master key. The master key lives outside the database, in a directory the web server cannot serve. A stolen DB dump yields ciphertext only.

Blind Index Lookups

We check "is this email already registered?" without ever storing the email in plaintext. Keyed HMAC indexes give us uniqueness enforcement and lookup — with zero recoverable plaintext on disk.

Session Fingerprinting

Every session is bound to your browser's User-Agent + Accept-Language + client hints. A cookie stolen from Chrome will not validate in Firefox. Session IDs rotate on every login, logout, and password change — fixation attacks do not survive.

Two-Factor Authentication

TOTP-based, compatible with Google Authenticator, Microsoft Authenticator, Authy, 1Password, Bitwarden, and any RFC 6238 app. Secrets are encrypted at rest. Recovery codes are single-use and stored only as hashes.

No Third-Party Trackers

No Google Analytics. No Facebook Pixel. No Cloudflare Insights. No session-replay tools. The only third-party script on any page is Stripe.js, loaded exclusively during the checkout flow.

CSRF, XSS, SSRF, IDOR Defenses

Double-submit CSRF tokens on every unsafe request. Strict Content-Security-Policy without inline scripts. SSRF host allowlist on push subscriptions. Every mutating endpoint scoped to the session user — no client-supplied user IDs are trusted for authorization.

Structured Audit Logging

Authentication events are logged with hashed IPs and per-request correlation IDs. Every log line is JSON-formatted, greppable, and retained per published schedule. No plaintext PII appears in any log entry.

Stalker Shield

The most dangerous feature of any social platform is the ease with which a stranger can find, watch, and follow someone. We designed against that from day one.

Visibility Is a Choice

Nothing about you is public by default. Your profile, your posts, your connections — all gated behind accepted connection requests. You decide who sees what, per person, at any time.

Silent, Permanent Blocks

Blocking is mutual, immediate, and silent. The blocked party gets no notification — they simply vanish from your world, and you from theirs. No "user X blocked you" message that could escalate tensions.

Invisible Mode

Set your account to "hidden" and you become invisible to everyone except yourself. Even a direct ID guess returns 404 — no existence leak. This is a permanent option, not a temporary state.

Silent 404s, Never 403s

When you cannot view something, you get a 404 Not Found — never a "You are not allowed" message. Attackers cannot use our error messages to enumerate who exists on the platform.

Sever Destroys Everything

End a connection and every message between the two of you is destroyed. Not hidden, not archived, not soft-deleted. Gone from the servers. Reputation scores are adjusted on both sides.

No Contact Without Consent

You cannot see another user's profile, posts, or comments unless you are connected. Messaging requires connection. Connection requests require mutual acceptance. No cold DMs. Ever.

No Backdoors

Most platforms quietly build an "admin panel" that lets staff read user messages, view private posts, and inspect profiles. They call it "trust and safety," "content moderation," or "compliance tooling." Regardless of the label, the outcome is the same: your private data has more readers than you think.

MyCitadel has no such panel. There is no administrative interface to read user data — because there is no way for us to read it in the first place. The encryption is not a feature that admins can bypass. It is the substrate the platform is built on.

No admin "view user's email" tool

Emails are encrypted with a key we cannot derive without the user's ID and the master key. There is no button that decrypts it.

No private message reader

Messages are end-to-end encrypted in the current architecture. Staff cannot see them.

No "search all users by real name" tool

Real names are encrypted. We cannot build a search index on data we cannot read.

No shadow profile building

We do not accept third-party data feeds, purchase marketing lists, or infer user traits from browsing patterns. We only know what you tell us — and even that is encrypted.

We do not want to see your private data. We cannot see your private data. Those two facts are the same design decision, made twice.

We Cannot Sell Your Data

Other platforms promise they will not sell your data. We do not have to promise — because we do not have anything to sell.

Your email address is ciphertext. Your real name is ciphertext. Your phone number is ciphertext. Your address is ciphertext. There is no advertiser willing to pay for a base64 string that even we cannot read. When we say "your data is not for sale," we mean it literally — there is no product to offer.

The only thing we could ever sell is mathematics.

And nobody wants to buy our equations. They want your behavior, your attention, your identity — none of which we have access to. This is what "privacy by architecture" actually means.

How We Stay Alive

MyCitadel is funded entirely by $10/month premium subscriptions and donations. We do not run ads. We do not accept sponsored content. We do not have investors demanding growth-at-any-cost. Premium features are the entire business model — and that is intentional.

A platform funded by users cannot betray users without losing its users. A platform funded by advertisers cannot serve users without betraying them. That is the entire difference between the two models.

Bug Bounty Program

We believe security researchers should be allies, not adversaries. If you find a vulnerability in MyCitadel, tell us first. We will treat you with respect, credit you publicly, and reward you.

Status: Open via email. HackerOne profile launching soon.

Rewards

Low → Critical

Merch + Reputation

All valid vulnerabilities earn:

  • Recognition in our public Hall of Fame
  • Reputation points on MyCitadel
  • Exclusive "Bug Hunter" badge — never available any other way
  • MyCitadel merchandise for High/Critical findings (shirt, hoodie, or mug depending on severity)
Rare / Extreme

Up to $1,000 USD

For truly exceptional findings, a financial reward may be offered — up to $1,000, at the owner's discretion. This applies when:

  • The impact is proven and severe (RCE, mass data exposure, auth bypass at scale)
  • Steps to reproduce are complete and verified
  • A remediation is identified or recommended
  • The finding is novel — not a duplicate or known issue

Honest disclosure: MyCitadel is built by one person with a full-time job. Financial rewards are possible but not guaranteed. Do not spend a week on an audit expecting a payout — spend it because you care about the mission, and we will reward what we can.

What We're Looking For

In Scope

  • api.mycitadel.lol — the entire API surface
  • mycitadel.lol — the web frontend
  • Authentication, session management, 2FA flows
  • Authorization / IDOR vulnerabilities
  • Encryption weaknesses (bypass, downgrade, key leak)
  • SQL injection, XSS, CSRF, SSRF
  • Business logic flaws (reputation farming, privilege escalation)
  • Privacy leaks — any way to see data you should not
  • Rate-limit bypasses
  • Upload-handling vulnerabilities

Out of Scope

  • Denial of Service / volumetric attacks
  • Social engineering of staff or users
  • Physical attacks against infrastructure
  • Third-party services (Stripe, cPanel, LiteSpeed)
  • Reports generated purely by automated scanners
  • Missing security headers with no demonstrated impact
  • Self-XSS that requires pasting code into DevTools
  • Theoretical vulnerabilities without proof of concept

Rules of Engagement

  1. Do not test on real users. Create your own test accounts. Never attempt to access another user's data, even if you think you can.
  2. Do not disrupt the service. No DoS. No load testing. No aggressive fuzzing that degrades performance for others.
  3. Report privately first. Give us time to fix before you publish. We aim to acknowledge within 72 hours and remediate critical findings within 7 days.
  4. Do not exfiltrate data. If you find a leak, prove it with minimal sample data. Do not download the whole database.
  5. One finding per report. Do not bundle five unrelated issues into a single submission. We will not be able to reward them properly.

What We Do Not Promise

Honesty matters more than marketing. These are the boundaries of what MyCitadel can and cannot protect you from.

  • We are not zero-knowledge in v1.

    Email is decrypted server-side to send verification links and password resets. The server holds the master key. True zero-knowledge requires client-held keys — which breaks account recovery. That is a v2 feature for the native mobile apps.

  • If your email account is compromised, so is your MyCitadel account.

    Email is the recovery channel. Anyone with access to your inbox can trigger a password reset. Use a strong, unique password on your email provider, and enable 2FA there too.

  • We cannot protect you from a compromised device.

    If malware runs on your phone or laptop, no server-side defense can help. Keep your OS and browser updated. Use a password manager. Do not install random software.

  • We will comply with valid legal requests.

    If we receive a lawful order, we cooperate within the bounds of the law. What we can hand over is limited by design: ciphertext, hashes, and timestamps — never plaintext. We will publish a transparency report if the volume of requests ever justifies one.

  • We are one person.

    MyCitadel is built and operated by a single developer with a full-time job. That is a strength for privacy (no investors to satisfy, no ad network demanding data) and a limit for scale. We grow carefully, not recklessly.

  • We cannot guarantee 100% uptime.

    Shared hosting, one operator, no SRE team. We aim for reliability but cannot match the SLAs of a hyperscale provider. If uptime is critical to you, this may not be the right platform.

Report a Vulnerability

Two ways to reach us. Both are monitored. Both are welcome.

Preferred

Email Disclosure

Send your report directly to our security inbox. Include the affected endpoint, the impact, and reproduction steps. Attach screenshots or PoC code if relevant.

Acknowledgment target: 72 hours
Remediation target for critical: 7 days

Coming Soon

HackerOne

We are in the process of onboarding to HackerOne. Once live, this page will link directly to our program profile with full scope and reward documentation.

Until then: email works fine. We will not lose your report.

Please do not test vulnerabilities against production users. Create a test account. If you need a specific scenario set up, email us first and we will help.

ᚠ ᚢ ᚦ ᚨ ᚱ ᚲ

Security You Can Verify

Our code is public. Our threat model is published. Audit us.