Naar hoofdinhoud

Beveiligingshouding

Gebouwd voor vertrouwen, niet voor show

We zijn geen beveiligingsbedrijf, maar ConKarma beheert het soort data — kinderen, partners, dagelijkse rituelen — dat eerlijke antwoorden eist over hoe we het beschermen. Deze pagina is de ongeschminkte versie.

Laatst beoordeeld:

Hoe inloggen werkt

We behandelen je wachtwoord als een geheim dat we nooit in cleartext zien, slaan de sterkste hash op die de spec ons geeft, en roteren refresh tokens zodat een gestolen cookie de sessie waaruit hij kwam niet overleeft.

  • Wachtwoorden worden gehasht met argon2id (RFC 9106 m=19 MiB-profiel). Oudere bcrypt-hashes worden bij de volgende inlog transparant geüpgraded — geen geforceerde resets.
  • Sessies gebruiken roterende refresh-token-families. Wordt een gestolen token afgespeeld, dan invalideert de hele familie en moet het legitieme apparaat opnieuw authenticeren — geen stille compromittering.
  • Configureerbare account-lockout na herhaalde mislukte pogingen. Wordt automatisch opgeheven bij de eerste correcte inlog, zodat een typo je niet buitensluit.
  • Aanmelden met Apple en Aanmelden met Google gebruiken directe OpenID Connect — goia_api maakt zelf verbinding met Apple en Google, zonder externe authenticatiemakelaar in het pad. We ontvangen alleen de upstream-provideridentificatie, je e-mailadres en de geverifieerd-vlag — nooit je providerwachtwoord.

Beveiliging bij aanmelden

Elke aanmelding passeert een tweede factor. Elke aanmelding vanaf een nieuw apparaat waarschuwt je. Ouders blijven op de hoogte voor minderjarigen zonder dat er iets anders doorsijpelt.

  • Twee-staps-verificatie bij elke aanmelding: 6-cijferige code per e-mail, 30-daagse venster voor vertrouwde apparaten.
  • Real-time e-mail-waarschuwing als je account wordt benaderd vanaf een nieuw apparaat: type, stad en land bij benadering, tijdstip. Eén tik herroept het apparaat en forceert een wachtwoord-reset.
  • Aanmeldingen van minderjarigen vanaf nieuwe apparaten waarschuwen ook ouders-rolleden van hun cel. Transparant: minderjarigen zien in Instellingen welke ouders zijn bedraad.
  • Back-upcodes: 8 eenmalige codes bij de eerste setup, bereikbaar vanuit Instellingen → Beveiliging, op verzoek opnieuw te genereren. Herstelpad als e-mail-toegang verloren raakt.
  • Wachtwoord-opslag: argon2id, de industriestandaard memory-hard hash. Vertrouwde-apparaat-tokens staan los van sessietokens.
  • Verificatie met limiet: 5 mislukte codes leiden tot een blokkade van 15 minuten.

Als iets vreemd lijkt

Als een inlog komt vanuit een land dat we de laatste 30 dagen niet op je account hebben gezien, mailen we je. De e-mail bevat een 'dit was ik niet'-eenklik die de sessie intrekt en je rechtstreeks naar de wachtwoord-reset leidt.

  • E-mailwaarschuwingen voor onbekende locatie (één per land per 30-dagen-venster — een vakantie spamt je niet).
  • Actieve-sessies-lijst met revoke per apparaat vanuit de app. Je kunt een verloren telefoon uitloggen zonder het wachtwoord te wijzigen.
  • Detail van mislukte inloggen (timestamp en landcode alleen — nooit ruwe IP) zichtbaar in de beveiligingslog van de app.

Alleen echte apps

Mobiel verkeer wordt geverifieerd als afkomstig van een echte ConKarma-installatie op een echt apparaat. Curl-tegen-de-API-pogingen worden zachtjes afgewezen, wat een eerlijk API-oppervlak hoort te doen.

  • Firebase App Check op iOS en Android. De token is vereist op elke API-call vanaf mobiel.
  • Mobiele TLS-pinning via het ondertekende manifest op /.well-known/mobile-pins.json. Nieuwe pins worden ondertekend met een offline sleutel en geroteerd met een overlap-venster van zes weken, zodat een upgrade niemand buitensluit.

Volwassen-functies zijn off-limits voor analytics

ConKarma heeft twee zones: een Serene-zone (alles familievriendelijk) en een Ember-zone (de 18+-functies). Ember-pagina's vuren bewust geen analytics-events van derden. We verzamelen server-side aggregate Prometheus-counters voor capaciteit en uptime; niets meer.

  • Volwassen-oppervlakken (dares, verlangens, fantasieën, intieme dagboeken, de privékluis) laden nooit Google Analytics.
  • Biometrische ontgrendeling is vereist om Ember-oppervlakken in de app te betreden. Het systeem timet uit en vergrendelt opnieuw als je van app wisselt.
  • De screenshot-bewaker verbergt Ember-content voor de OS-app-switcher en voor elke screen-recording overlay.
  • Per-apparaat activering van de volwassenenzone: standaard AAN op je hoofdapparaat, UIT op elk ander apparaat. Je meldt je expliciet aan per apparaat, en de server-side controle faalt gesloten.
  • Inactiviteits-herprompt: de biometrische grendel laat los na 5 minuten inactiviteit binnen Ember, of 30 seconden op de achtergrond. Beide zijn configureerbaar vanuit Instellingen → Privacy.
  • Cache-nullen in geheugen: wanneer je van Ember terug naar Serene overstapt (of de app naar de achtergrond stuurt), wordt elke gecachte afbeelding uit het geheugen gewist — verdediging in de diepte tegen geheugeninspectie-tools.
  • Uitsluiting van Spotlight, Apple Intelligence en AppIntents: geen volwassen inhoud wordt ooit gedoneerd aan Spotlight, het on-device LLM, AppIntents, Smart Stack of vergrendelscherm-widgets.
  • Twee-ogen-beheerdertoegang: geen mens bij XTZ Group kan eenzijdig de inhoud van de volwassenenzone lezen — elke override vereist de ondertekende goedkeuring van een tweede beheerder, vastgelegd in een onveranderlijk auditlog.
  • Configureerbare bewaartermijn van 3 jaar voor volwassenen: rijen in de volwassenenzone worden standaard automatisch verwijderd na 3 jaar. Het venster is door de gebruiker configureerbaar (90 dagen tot 10 jaar) vanuit Instellingen → Privacy. Harde verwijdering zodra het venster is verstreken.
  • iCloud-back-up- en AVG-exportbesturingselementen: twee opt-in-schakelaars in Instellingen → Privacy houden volwassen inhoud standaard buiten apparaatback-ups en buiten je gegevensexport — zodat per ongeluk gedeelde back-ups of exports het niet blootleggen.

Lees de volledige zone-isolatiegaranties →

Toestemmings-infrastructuur + conflictgereedschappen

Moeilijke gesprekken en toestemming in de volwassenenzone gaan beide door gestructureerde, gecureerde oppervlakken — nooit een AI-pijplijn. De data blijft lokaal of koppel-privé.

  • Conflictgereedschappen — AI-pijplijn uitgesloten: elke broer/zus-, koppel- en intergenerationele reparatieflow is gecureerde inhoud + gestructureerde formulieren.
  • Toestemmings-infrastructuur — Ember: het limietendocument, de safeword-binding en de aftercare-check-ins leven op Ember-E2E-primitieven. Het limietendocument bereikt nooit onze AI-pijplijn.
  • Persoonlijk verbergen + cel-niveau controles: de BE verwijdert de onderliggende data niet. Elke permanente flag-bewerking vereist een twee-beheerder-poort.

Ember-toestemmingsinfrastructuur

Volwassentier-oppervlakken worden niet geleverd met een generiek 'Ik ga akkoord'-vinkje en dat toestemming noemen. Ember is gestructureerd rond drie dragende primitieven — het limieten-document, het safeword en nazorg-check-ins — die op hetzelfde E2E-sleutelpaar staan als de rest van de volwassenen-zone. Volwassen framing door het hele; regie, geen paternalisme.

  • Limieten-document: elke partner bouwt en bewerkt zijn eigen, alleen zichtbaar voor de andere partner in dezelfde koppelcel. Bereikt nooit onze analysepijplijn; nooit gelezen door AI; nooit gerepliceerd server-side buiten de versleutelde blob.
  • Safeword-binding: één koppel-gedeelde safeword-zin die onmiddellijk elk Ember-oppervlak terugzet naar Serene + een koppel-privé loggerij schrijft. Activeringen zijn alleen zichtbaar voor beide partners; XTZ Group-operators kunnen ze niet lezen.
  • Nazorg-check-ins: gepland door één van beide partners na een Ember-sessie, opt-in per partner, antwoorden blijven koppel-privé. Geen betrokkenheidsteller, geen streak, geen zeuren.
  • Volwassen framing: tekst en prompts behandelen volwassen lezers als volwassenen. Wij infantiliseren de oppervlakken niet met eufemismen; we leunen ook niet op shockwaarde om transgressief te voelen.

Dubbel-blinde toestemmingsmatching

Als twee partners verkennen welke fantasiecategorieën overlappen, draait de matching volledig op het apparaat met twee structurele invarianten die we niet zullen breken: nooit-nee-onthullen (als één van beide partners nee tikt, ziet geen van beide dat feit) en nul-uitvoer AI (geen model ergens in het inferentiepad).

  • Nooit-nee-onthullen-invariant: een ja/ja-paar verschijnt in de gedeelde matchlijst. Elke andere combinatie (ja/nee, nee/ja, nee/nee) geeft niets terug — geen van beide partners ziet wie nee zei, en geen van beide ziet dat de ander de prompt überhaupt heeft gezien. Dit is anti-druk structureel ontwerp, geen instelling die je kunt uitzetten.
  • Nul-uitvoer AI-invariant: de matchingberekening is een lokale verzamelingsintersectie. Geen modelinferentie, geen embedding-opzoeking, geen AI-scoring van categorieën of matchings. De set van categorieën zelf is samengestelde redactionele inhoud, niet gegenereerd.
  • Koppel-privé resultaten: de matchlijst is end-to-end versleuteld naar het gedeelde sleutelpaar van het koppel. Server-side zien we aantallen (capaciteitsplanning) maar nooit de categorieën zelf.
  • Controleerbare invarianten: de twee bovenstaande invarianten worden afgedwongen in het op-apparaat-codepad zonder schakelaars en zonder beheerderoverride. Een platformoperator kan een koppel niet aanmelden voor telemetrie op dit oppervlak — er is geen telemetrie om bij aan te melden.

Take It Down Act-naleving — publiek meldingskanaal

De federale TAKE IT DOWN Act (2025) vereist dat platforms die gebruikersinhoud hosten actie ondernemen op verwijderingsverzoeken voor niet-consensuele intieme beelden binnen 48 uur. Het publieke meldingskanaal + procedure van ConKarma is gepubliceerd op /legal/takedown-notice; dit gedeelte is de beveiliging-houding-samenvatting.

  • Kanaal: legal@conkarma.app (onderwerpregel Take It Down notice / DMCA notice / Urgent — CSAM-rapport).
  • Toezegging: 48-uur SLA van ontvangst van een geldig verzoek tot verwijdering of uitschakeling van toegang.
  • Dekking: NCII (echte of AI-gegenereerde deepfakes), DMCA-auteursrecht, CSAM (verhoogde prioriteit + NCMEC-rapport) en bredere meldingen van onrechtmatige inhoud.
  • Tegenbericht: DMCA-tegenbericht pad via hetzelfde kanaal; wettelijk 10–14 werkdagen herstelvenster bij afwezigheid van een rechterlijk bevel.
  • Audit: elke melding + elke ondernomen actie wordt vastgelegd en bewaard voor de perioden die wettelijk vereist zijn. Kwaadwillige meldingen kunnen de afzender blootstellen aan civiele aansprakelijkheid onder de Act, DMCA §512(f) en onze Gebruiksvoorwaarden.

Per-staat regulatoire dial

Waar Amerikaanse staten of andere jurisdicties wetten aannemen die beperken wat een platform kan aanbieden (leeftijdsverificatieregimes, inhoud-categorie-beperkingen, registratieverplichtingen), passen we het gedrag regionaal aan in plaats van de markt te verlaten. De eerlijke afweging: de wet van een staat bepaalt hoe het oppervlak eruitziet voor gebruikers in die staat, niet wat wij als goed productontwerp beschouwen.

  • Regiodetectie: gebaseerd op het door de gebruiker opgegeven land + (voor de VS) de staat die ze hebben geconfigureerd in Instellingen, niet alleen IP-geolocatie. Gebruikers kunnen de afgeleid regio overschrijven als die onjuist is.
  • Wat wordt aangepast: leeftijdsverificatiestromen (KOSA-stijl staten), volwasseneninhoud-beveiliging, retentievensters waar de staatswet ze dicteert en openbaarmakingstekst waar de staat specifieke formulering vereist.
  • Wat NIET wordt aangepast: end-to-end versleutelingshouding, de nul-uitvoer AI-invarianten, de COPPA-conforme standaard voor onder-13 en de nooit-volwasseneninhoud-rijen-mixen-tabelinvariant. Die zijn niet-onderhandelbaar over jurisdicties heen.
  • Transparantie: de regionale configuratie die op je account van toepassing is, is zichtbaar in Instellingen → Privacy → Regionale houding. Als je denkt dat het onjuist is voor jouw jurisdictie, dien een Take It Down-melding in of schrijf naar legal@conkarma.app.

Kinderen zijn geen groei-hefboom

Accounts onder de 13 doorlopen een verifieerbare ouderlijke-toestemmingsflow voor ze bestaan. We tonen geen advertenties op kinderaccounts, punt. We verkopen geen kinderdata, delen ze niet voor advertising, en gebruiken ze niet voor targeting.

  • COPPA §312.5-conforme verifieerbare ouderlijke toestemming (ondertekend creditcardhouder-verificatiepad, met alternatief voor huishoudens zonder kaart).
  • Geen advertising van derden in welke vorm dan ook op accounts onder de 13.
  • Ouders kunnen de accountdata van hun kind op elk moment vanuit de app bekijken, exporteren en wissen.

Vertrouwen komt uit de Cel, niet van ons

ConKarma is een gesloten-cirkel-product. Er zijn geen openbare profielen, geen volgersgraaf, en geen manier om vreemden te ontdekken. De meeste moderatie gebeurt omdat jij en de mensen in je Cel elkaar al kennen en vertrouwen. Waar het model hulp nodig heeft, hebben we een meldflow en een moderatiequeue met een mens erin.

  • Cellen zijn standaard gesloten. Geen publieke ontdekking, geen publiek profiel, geen vriend-van-vriend-suggesties.
  • Gebruikers-meldflow op elk content-oppervlak, doorgestuurd naar een moderatiequeue bemand door mensen.
  • Hash-gebaseerd scannen op bekende CSAM is getrackt als bekende-en-aanstaande implementatie, met expliciete revisit-triggers wanneer we naar een mediastorageprofiel gaan dat het vereist. We claimen het niet voor het echt is.

Wat we bewaren, waar, en hoe je het terugkrijgt

We over-documenteren dit op /privacy en /legal/subprocessors, maar de beveiligings-relevante korte versie is: versleuteld in rust, opgeslagen waar de SCC-papieren het dekken, on-demand exporteerbaar en wisbaar, en we bewaren niet meer dan nodig.

  • GDPR-, CCPA- en Quebec-25-export- en wiscontroles in de app — niet achter een supportticket. Wissing heeft een soft-delete-coulanceperiode van 30 dagen voor het geval je van gedachten verandert.
  • Versleuteling in rust op de Postgres-database en op object storage (Supabase-managed infrastructuur).
  • Ruwe IP-adressen worden niet opgeslagen op enig gebruikergericht oppervlak. De actieve-sessies-lijst toont alleen de 2-letterige landcode; ruwe IPs bestaan kort in security-event-rijen voor forensisch gebruik onder een korte retentie.

Als je iets vindt, vertel het ons

We hebben nog geen betaalde bug-bounty — dat is een echt gat en we pakken het op zodra het de operator-tijd verdient die het nodig heeft. Ondertussen verwelkomen we te-goeder-trouw-meldingen en bevestigen ze binnen vijf werkdagen.

E-mail: security@conkarma.app

  • Mail security@conkarma.app met details. PGP-sleutel op aanvraag.
  • We committeren ons aan bevestiging binnen 5 werkdagen en substantieel antwoord binnen 30 dagen.
  • Gecoördineerde openbaarmaking: standaardvenster van 90 dagen vóór publieke openbaarmaking, verlengbaar in overleg.
  • We zullen geen juridische actie ondernemen tegen te-goeder-trouw-onderzoek dat verantwoorde openbaarmaking volgt.